bin/ 40755 0 0 0 11352643754 6672 5ustar 0 0 classes/ 40755 0 0 0 11352643754 7557 5ustar 0 0 doc/ 40755 0 0 0 11352643752 6665 5ustar 0 0 examples/ 40755 0 0 0 11352643754 7740 5ustar 0 0 generated/ 40755 0 0 0 11352643754 10060 5ustar 0 0 generated/scm/ 40755 0 0 0 11352643754 10642 5ustar 0 0 lib/ 40755 0 0 0 11352644062 6661 5ustar 0 0 lib/jas/ 40755 0 0 0 11352643753 7444 5ustar 0 0 lib/jas/examples/ 40755 0 0 0 11352643753 11262 5ustar 0 0 lib/jas/reference/ 40755 0 0 0 11352643753 11402 5ustar 0 0 lib/jas/src/ 40755 0 0 0 11352643753 10233 5ustar 0 0 lib/jas/src/jas/ 40755 0 0 0 11352643753 11010 5ustar 0 0 lib/jas/src/scm/ 40755 0 0 0 11352643753 11015 5ustar 0 0 lib/jas/src/scm/autogen/ 40755 0 0 0 11352643752 12456 5ustar 0 0 lib/jas/tests/ 40755 0 0 0 11352643752 10605 5ustar 0 0 src/ 40755 0 0 0 11352643753 6710 5ustar 0 0 src/jasmin/ 40755 0 0 0 11352644060 10161 5ustar 0 0 INSTALL100644 0 0 4664 10154114357 7251 0ustar 0 0 December 3, 2004 - Jennifer Lhotak To Compile Jasmin: We've made a new build.xml file so Jasmin can be built using ant. The first time you run it it will ask you to copy ant.settings.template to ant.settings and to set the variables in that file. (In particular the jav_cup.jar variable) At this time the only dependency is some version of Java Cup. Note we no longer distribute Cup with Jasmin. A maintained and up-to-date version of Cup is distributed with Polyglot which is also a dependency of Soot (just like this version of Jasmin). Therefore we recommend that you use that version of Cup. You may set the java_cup.jar variable to be a path to the entire Polyglot jar distributed with Soot and everything will work fine. To run ant to compile Jasmin use: $ ant To build a Jasmin jar, that will be put in the lib directory use: $ ant jasmin-jar Additionally, you may compile the individual parts of jasmin, jas and scm by using: $ ant jas or $ ant scm January 25, 2001 -PL updated May 3, 2001 - PL How to compile jasmin: The UNIX shell-script bin/compile_all.sh ('sh ./bin/compile_all.sh') should be able to recompile all classes under any JDK. A user can compile each constituent package manually by following below instructions. - compile jas (following instructions are from lib/jas/src/compile.sh) * from lib/jas/src directory, * create empty classes subdirectory * javac -d classes jas/*.java (ignoring warnings) * cd scm * export CLASSPATH=$(JASMIN_ROOT)/lib/jas/src/classes * javac -d . autogen/autogen.java * java -cp .:$CLASSPATH autogen * cd .. * javac -d classes scm/*.java - copy jas class files to the classes directory * cp -a $(JASMIN_ROOT)/lib/jas/src/classes/* $(JASMIN_ROOT)/classes - compile java_cup and java_cup runtime ( lib/cup/compile.sh ) * cd $(JASMIN_ROOT)/lib/cup * create empty classes subdirectory * javac -d ./classes src/java_cup/*.java src/java_cup/runtime/*.java * cp ./classes/* ${JASMIN_ROOT}/classes - (optional) compile jasmin's javacup parser * first, add java_cup package to the class path * export CLASSPATH=${JASMIN_ROOT}/classes:${CLASSPATH} * cd ${JASMIN_ROOT}/src * (mkdir classes; cd classes) * java java_cup.Main < ../jasmin/parser.cup * mv sym.java parser.java ../jasmin - compile jasmin ( src/compile.sh ) * export CLASSPATH=$(JASMIN_ROOT)/classes * cd $(JASMIN_ROOT)/src * javac -d classes jasmin/*.java * mv classes/* ${JASMIN_ROOT}/classes README100644 0 0 20037 10070637736 7120 0ustar 0 0 Jasmin README file May 28, 2004, Patrick Lam Welcome to Jasmin version sable-1.2.7. 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 Soot. Original Jasmin README: --------------------------------------------------------------------------- Jasmin README file 1 March 1997, Jonathan Meyer Description ----------- Welcome to Jasmin version 1.06. Jasmin is a Java Assembler Interface. It takes ASCII descriptions for Java classes, written in a simple assembler-like syntax, and using the Java Virtual Machine instruction set. It converts them into binary Java class files suitable for loading into a Java interpreter. Jasmin was written as the companion to the book "Java Virtual Machine", published by O'Reilly, written by Troy Downing and myself. (See http://www.ora.com/catalog/javavm/). If you want to know more about what Jasmin is, why I wrote Jasmin, or what kinds of uses Jasmin can be put to, look at doc/about.html. Home Page --------- Check out the Jasmin home page at: http://cat.nyu.edu/meyer/jasmin this will tell you the latest news on Jasmin - in particular, make sure that you have the most recent version, since I'm sure to add bells and whistles over time! (For example, I plan to rewrite the parser in Jasmin so that it does more error checking). Also, you can register on this page to receieve news about new releases and bug fixes. Requirements ------------ Jasmin is written in Java, so it should be fairly straightforward to get it set up and running in your environment. I have tested Jasmin with the Sun JDK 1.0 on Solaris and Windows 95, and with J++ on Windows NT. In the bin directory are scripts for running Jasmin on Unix systems and batch files for Windows. These may need some tailoring on your system. Installation Instructions ------------------------- Below you will find installation instructions for: -- Windows 95/NT and J++ -- Windows 95/NT and Sun's JDK or Symantec Cafe -- Unix and the Sun JDK Jasmin should run on other platforms that have Java installed. Look at the scripts in the bin directory to get an idea of how Jasmin is started. A version of the classes for Jasmin in ZIP format is available. See the Jasmin home page (http://cat.nyu.edu/meyer/jasmin). ******** Windows 95/NT and J++ ******** -- Basic Installation 1. Extract the jasmin distribution files and place them in C:\JASMIN 2. Add C:\JASMIN\BIN to your path by editing your AUTOEXEC.BAT. Then you run Jasmin using the vjasmin command (as show below). -- Notes Under J++, you use jvc (instead of javac) to compile Java code, and jview (instead of java) to run it. If you want to maintain the Jasmin files somewhere other than C:\JASMIN, first move the files to the location you want to use, then edit the bin\vjasmin.bat script and change the JASMIN variable so that it points to the jasmin directory. Then add the jasmin bin directory to your path by editing your AUTOEXEC.BAT. -- Trying Jasmin out If you are using Jasmin with Visual J++ on Windows 95/NT, you can quickly try out Jasmin by installing the files in c:\jasmin and then typing to a DOS command prompt: cd c:\jasmin vjasmin examples\HelloWorld.j After running Jasmin, you should find the compiled HelloWorld.class file in the examples directory. You can then run the HelloWorld program by doing: jview examples.HelloWorld ******** Windows 95/NT and Sun's JDK or Symantec Cafe ******** I have run Jasmin under Windows 95 using Symantec Cafe (it probably works under other implementations of the JDK as well). -- Basic Installation 1. Extract the jasmin distribution files and place them in C:\JASMIN. 2. Add C:\JASMIN\BIN to your path by editing your AUTOEXEC.BAT. -- Notes On some systems, you may need to add the C:\JASMIN\CLASSES directory to your CLASSPATH variable. CLASSPATH is either defined in C:\AUTOEXEC.BAT (JDK) or or C:\Cafe\BIN\SC.INI (Cafe version 1.2 and later). If you want to maintain the Jasmin files elsewhere in your directory hierarchy, first move the files to the location you want to use, then edit the bin\jasmin.bat script and change the JASMIN variable so that it points to the jasmin directory. Then add the jasmin bin directory to your path by editing your AUTOEXEC.BAT. -- Trying Jasmin Out If you are using Sun's JDK or Symantec Cafe on Windows 95/NT, you can try Jasmin by installing the files in c:\jasmin and then typing to a DOS command prompt: cd c:\jasmin jasmin examples\HelloWorld.j After running Jasmin, you should find the compiled HelloWorld.class file in the examples directory. You can then run the HelloWorld program by doing: java -verify examples.HelloWorld Its a good idea to use the '-verify' option for Java programs compiled with Jasmin, since this will catch any structural violations you have in your code. ******** Unix and the Sun JDK ******** I've tried Jasmin on SGIs and Suns running Sun's JDK 1.02. It should work on other Unix boxes with the JDK as well. -- Basic Installation 1. Extract the jasmin distribution files and place them in /usr/local/jasmin. 2. Add /usr/local/jasmin/bin to your path, by editing your .cshrc (or equivalent). -- Notes If you want to maintain the Jasmin files somewhere other than /usr/local/jasmin, first extract the files, then edit the bin/jasmin script and change the JASMIN variable so that it points to the jasmin directory. Then add the Jasmin bin directory to your path. -- Trying Jasmin Out On Unix systems with the JDK installed, change into the directory containing this readme file, then type to a shell prompt: jasmin examples/HelloWorld.j After running Jasmin, you should find the compiled HelloWorld.class file in the examples directory. You can then run the HelloWorld program by doing: java -verify examples.HelloWorld Its a good idea to use the '-verify' option for Java programs compiled with Jasmin, since this will catch any structural violations you have in your code. Problems/Questions ------------------ If you have a problem with Jasmin, please visit the Jasmin home page at: http://cat.nyu.edu/meyer/jasmin this will give you instructions on how to submit problem reports. There is also a FAQ on this page that you could check to see if your problem has already been encountered. Where Next ---------- After trying Jasmin out, have a look at the HelloWorld.j source, and try compiling and running the other examples. There is documentation for Jasmin in the doc directory. You should probably start with the 'guide.html' document. If you decide you want to use Jasmin on files in other directories, see the Installation Instructions below. Rebuilding Jasmin ----------------- The bin/compile.sh script is what I use to rebuild Jasmin under Solaris. I've included it for your enjoyment, though your mileage may vary. Java API to Jasmin ------------------ In the doc/api directory is a description of some of the public classes in the Jasmin package. You may find this a more appropriate hook to the Jasmin assembler in your application. Note that this API is under revision and may change (but its very small and basic, so changes should be easy to adapt to). Files ----- The following files are included in this distribution: README - this file bin/ - Shell scripts and Batch files for running Jasmin under DOS/Unix examples/ - directory containing example files written for Jasmin src/ - the Java source code and for the jasmin package lib/ - contains Java sources for the java_cup and jas packages classes/ - contains Java class files used by jasmin. doc/ - various documentation files. Copyright --------- Jasmin is Copyright (1997) Jonathan Meyer, under the terms of the GNU General Public License. See COPYING for more. Jasmin uses the JAS package which has its own copyright - see lib/jas/README. Jasmin was built partially using the java_cup package, which is also in the lib directory. ant.settings100644 0 0 465 11352644060 10537 0ustar 0 0 ## Location of Java Cup classes jar file to link Jasmin against # either classes dir or jar - note polyglot comes with cup-classes java_cup.jar=../polyglot/lib/java_cup.jar # Location in which to generate Jasmin release tarballs release.loc=lib # Version of Jasmin for tagging tarballs jasmin.version=2.4.0 ant.settings.template100644 0 0 462 10637306167 12356 0ustar 0 0 ## Location of Java Cup classes jar file to link Jasmin against # either classes dir or jar - note polyglot comes with cup-classes java_cup.jar=${user.home}/cup-classes/ # Location in which to generate Jasmin release tarballs release.loc=lib # Version of Jasmin for tagging tarballs jasmin.version=2.2.1 bin/jasmin100644 0 0 37 10070641157 10122 0ustar 0 0 #!/bin/sh java jasmin.Main $* bin/runall.sh100644 0 0 1050 10072514602 10577 0ustar 0 0 #!/bin/csh # # Compiles and then runs all of the classes in the examples # directory, then tidies up afterwards. # # # Compile # echo "Compiling examples:" bin/jasmin -g examples/*.j # # Build CLASSES list # cd examples cat /dev/null >! CLASSES foreach i (*.class) echo $i:r >>! CLASSES end cd .. # # Run the examples # echo "Running examples:" foreach i (`cat examples/CLASSES`) echo $i\: java -verify examples.$i foo bar echo "" end # # Now remove the class files and the CLASSES list # cd examples /bin/rm -f *.class CLASSES build.xml100644 0 0 6730 11352071773 10042 0ustar 0 0 changes100644 0 0 12220 10070637736 7566 0ustar 0 0 Jasmin Revision History Sable Research Group May 28, 2004 [Chris Pickett] added .no_super directive (for compiling java.lang.Object) Sept 5, 2003 [Feng Qian] fixed various compile shell scripts for SunOS May 4, 2002 - Release sable-1.1.4 [Feng Qian] - fixed jasmin.Scanner to allow an attribute string longer than 65536. May 3, 2001 - Release sable-1.1 [Patrick Lam, Feng Qian] - No changes except for highjacking the versioning scheme. Apr 17, 2001 - Release 1.06-s11 [Patrick Lam, Feng Qian] - upgraded java_cup from 0.9d to 0.10j (plam); jasmin now compiles properly under recent JDKs. - adjust code attribute table format, add a table size before attribute table. Code_attribute will have same head format as LineNumberTable attribute. - Correctness patch for emitting constant numbers due to Brian Demsky (bdemsky@mit.edu). Apr 2, 2001 - Release 1.06-s10 [Feng Qian (fqian@sable.mcgill.ca)] - fix-up the grammar bug dealing with class, method, and field attributes, reported by jmunsin@abo.fi Jan 25, 2001 - Release 1.06-s9 [Patrick Lam (plam@sable.mcgill.ca)] - Realized that compilation would be a lot simpler if soot.tagkit.Base64 was included in our jasmin distribution; copied the file (to the jas library) and added warnings. - Minor change to lib/src/scm/driver.java to make it compile with 1.3.0. May 2, 2000 - Release 1.06-s8 [Patrick Lam (plam@sable.mcgill.ca)] Changes: - Not sure what versions 1.06-s6, -s7 modified. - Added support for quoted literal names to fix issues with variables named, for instance, "int". - Patrice Pominville (patrice@sable.mcgill.ca) added support for incorporation of attributes into bytecode. March 29, 1999 - Release 1.06-s5 [Raja Vallee-Rai (rvalleerai@sable.mcgill.ca)] Changes: - Silenced jasmin. (no more generation messages) March 15, 1999 - Release 1.06-s4 [Raja Vallee-Rai (rvalleerai@sable.mcgill.ca)] Changes: - Added \\ to the list of possible escape characters for Strings. - Disabled $ as a macro substitution tool. - Added +-DoubleInfinity and +-FloatInfinity 2 Nov 98 - Release 1.06-s3 Changed the grammar some more to fix some constant ambiguities (1.0F vs 1.0) - Raja Vallee-Rai (kor@sable.mcgill.ca) 2 Nov 98 - Release 1.06-s2 Changed the grammar to fix some ambiguities - Raja Vallee-Rai (kor@sable.mcgill.ca) Jasmin Revision History Jonathan Meyer 11 Apr 97 - Release 1.06. 11 Apr 97 * Fixed bug which prevented the source name from being written out in the class file * Improved README file 2 Mar 97 - Release 1.05. 1 Mar 97 * Moved scripts into a bin directory. * Added support for Visual J++. Added vjasmin.bat, for running Jasmin using Visual J++. Converted JAS/Jasmin to use its own internal RuntimeConstants, so that there is no longer any dependency on Sun's version (needed by J++). * Tidied API: Renamed "Jasmin" class "ClassFile" (sorry to those of you using the API from 1.04). The ClassFile class is documented in the doc/api directory. * Mods for Java 1.1: Classes now set the ACC_SUPER bit in their access flags. i2b/i2s/i2c are now synonyms for int2byte, int2short, int2char. invokespecial is now a synonym for invokenonvirtual. * Mods to pick up documentation in book: "wide" is now a recognized instruction in Jasmin files - although the assembler just ignores it! Added the optional parameter to tableswitch. * Fixed bug in .catch all 10 Feb 96 - Release 1.04. 8 Feb 97 * Updated to use latest version of JAS. This fixes some bugs in the earlier release (including handling of _w instructions) * Split several of the internal classes into smaller pieces. * Restructured internal sources so that Jasmin, Scanner and parser no longer rely on static data structures. Now there is a public API to Jasmin, for people that want to assemble classes using their own data input/output streams. 30 Oct 96 * Added support for more \ escapes in quoted strings. In particular, you can now use \nnn to specify a character using octal. 2 Oct 96 - Release 1.03. 1 Oct 96 * Added better support for interfaces: added the .interface directive (an alternative to the .class directive), and also a .implements directive. Updates guide.html to mention these new features. 24 Sept 96 * Fixed several problems with guide.html - thanks to feedback from Shawn Silverman (umsilve1@cc.umanitoba.ca). 23 Aug 96 * Tidied up documentation and implementation for wide instructions. Now ldc and ldc_w are used for single-word items, whereas ldc2_w is used for two word items (previously, I had ldc_w as a synonym for ldc2_w - oops). 25 July 96 * Added documentation for .var directive. * Fixed line numbering produced by -g flag (I hope). * Improved error reporting slightly. 24 July 96 * Added fix to scanner to handle Ctrl-M characters, for DOS/NT Systems. (Thanks sbk!) 18 July 96 - Release 1.0. examples/ANewArray.j100644 0 0 2251 10070636274 12034 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/ANewArray.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Shows how to use anewarray instruction ; ------------------------------------------------------------------------- ; ; This class demonstrates how to allocate a multidimensional ; array using anewarray. ; .class public examples/ANewArray .super java/lang/Object .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method .method public static main([Ljava/lang/String;)V .limit stack 4 .limit locals 2 ; ; Allocates an array like: ; String x[][] = new String[2][5] ; ; Allocate spine for array and store it in local var 1 ; (i.e. String[2][]) iconst_2 anewarray [Ljava/lang/String; astore_1 ; allocate first array of String[5] and store it in index 0 aload_1 iconst_0 bipush 5 anewarray java/lang/String aastore ; allocate second array of String[5] and store it in index 1 aload_1 iconst_1 bipush 5 anewarray java/lang/String aastore ; done ... return .end method examples/AnInterface.j100644 0 0 1434 10070636274 12364 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/AnInterface.j ; Author: Jonathan Meyer, 1 Oct 1996 ; Purpose: A Java interface written in Jasmin ; ------------------------------------------------------------------------- ; ; This file shows how to use Jasmin to define an interface. It ; is like the Java code: ; ; interface public examples.AnInterface { ; void foo(); ; } ; ; See examples.Implementor for an example of a class that implements ; this interface. ; .interface public examples/AnInterface .super java/lang/Object ; (Interfaces should either inherit from Object, or from ; another interface.) ; ; declare abstract method foo() - note that the method body is empty. ; .method abstract foo()V .end method examples/Arrays.j100644 0 0 2565 10070636274 11454 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/Arrays.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Example using JVM's anewarray and aaload/aastore ; ------------------------------------------------------------------------- ; ; This illustrates how to use the various JVM array instructions - though ; it doesn't actually do anything very interesting with the arrays. ; .class public examples/Arrays .super java/lang/Object ; standard initializer .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method .method public static main([Ljava/lang/String;)V .limit locals 2 .limit stack 4 ; creates a new array of strings, ; like: ; String[] myarray = new String[2]; iconst_2 anewarray java/lang/String astore_1 ; stores this in local variable 1 ; this is like the code: ; myarray[0] = args[0]; aload_1 ; push my array on the stack iconst_0 aload_0 ; push the array argument to main() on the stack iconst_0 aaload ; get its zero'th entry aastore ; and store it in my zero'th entry ; now print out myarray[0] getstatic java/lang/System/out Ljava/io/PrintStream; aload_1 iconst_0 aaload invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V ; done return .end method examples/Catch.j100644 0 0 3744 10070636274 11235 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/Catch.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Catching and throwing exceptions ; ------------------------------------------------------------------------- ; ; This hows how to throw and catch Exceptions in Jasmin ; .class public examples/Catch .super java/lang/Object ; standard initializer .method public ()V aload_0 invokenonvirtual java/lang/Object.()V return .end method .method public static main([Ljava/lang/String;)V .limit locals 3 .limit stack 5 ; set up a handler to catch subclasses of java.lang.Exception .catch java/lang/Exception from Label1 to Label2 using Handler ; store System.out in local variable 1 getstatic java/lang/System/out Ljava/io/PrintStream; astore_1 ; print out a message aload_1 ldc " -- Before exception" invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V ; construct an instance of Exception, initialize it with a string, ; throw it. This is like the Java statement : ; ; throw new Exception("My exception"); ; Label1: new java/lang/Exception dup ldc "" invokenonvirtual java/lang/Exception/(Ljava/lang/String;)V athrow Label2: aload_1 ldc " -- After exception" invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V return ; This is the handler for the exception Handler: ; store the exception in local variable 2 astore_2 ; print out a message aload_1 ldc " -- Caught exception: " invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V ; call getMessage() to retrieve the message from the Exception... aload_1 aload_2 invokevirtual java/lang/Throwable/getMessage()Ljava/lang/String; ; ... now print it invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V ; return to the code goto Label2 .end method examples/Checkcast.j100644 0 0 1406 10070636274 12074 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/Checkcast.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Catching and throwing exceptions ; ------------------------------------------------------------------------- ; ; Simple test for checkcast instruction ; .class examples/Checkcast .super java/lang/Object ; ; standard initializer .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method .method public static main([Ljava/lang/String;)V .limit stack 2 ; push System.out onto the stack getstatic java/lang/System/out Ljava/io/PrintStream; ; check that it is a PrintStream checkcast java/io/PrintStream ; done return .end method examples/Count.j100644 0 0 2656 10070636274 11304 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/Count.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Counts from 0 to 9, printing out the value ; ------------------------------------------------------------------------- .class public examples/Count .super java/lang/Object ; ; standard initializer .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method .method public static main([Ljava/lang/String;)V ; set limits used by this method .limit locals 4 .limit stack 3 ; setup local variables: ; 1 - the PrintStream object held in java.lang.System.out getstatic java/lang/System/out Ljava/io/PrintStream; astore_1 ; 2 - the integer 10 - the counter used in the loop bipush 10 istore_2 ; now loop 10 times printing out a number Loop: ; compute 10 - ... bipush 10 iload_2 isub invokestatic java/lang/String/valueOf(I)Ljava/lang/String; astore_3 ; ... and print it aload_1 ; push the PrintStream object aload_3 ; push the string we just created - then ... invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V ; decrement the counter and loop iinc 2 -1 iload_2 ifne Loop ; done return .end method examples/HelloWeb.html100644 0 0 145 10070636274 12377 0ustar 0 0 This shows how to run HelloApplet:

examples/HelloWeb.j100644 0 0 4130 10070636274 11702 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/HelloWeb.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Demonstration of a Jasmin-created applet ; ------------------------------------------------------------------------- ; HelloWeb.j ; This demonstrates how you can use Jasmin to create an applet. ; The code below is like the Java code: ; ; import java.applet.*; ; import java.awt.*; ; ; public class HelloWeb extends Applet { ; private Font font; ; ; public void init() { ; font = new Font("Helvetica", Font.BOLD, 48); ; } ; ; public void paint(Graphics g) { ; g.setFont(font); ; g.drawString("Hello World!", 25, 50); ; } ; } .class public HelloWeb .super java/applet/Applet .field private font Ljava/awt/Font; ; my init() method - allocate a font and assign it to this.font. .method public init()V .limit stack 5 ; Create a new Font and call its constructor with ; "Helvetica", 1 (i.e. Font.BOLD), and 48. new java/awt/Font dup ldc "Helvetica" iconst_1 bipush 48 invokenonvirtual java/awt/Font/(Ljava/lang/String;II)V ; now store the Font on the stack in this.font aload_0 swap putfield HelloWeb/font Ljava/awt/Font; ; done return .end method ; my paint() method - draws the string "Hello World!" using this.font. .method public paint(Ljava/awt/Graphics;)V .limit stack 4 .limit locals 2 ; local variable 0 holds ; local variable 1 holds the java.awt.Graphics instance ('g'). ; g.setFont(this.font); aload_1 aload_0 getfield HelloWeb/font Ljava/awt/Font; invokevirtual java/awt/Graphics/setFont(Ljava/awt/Font;)V ; g.drawString("Hello Web!", 25, 50); aload_1 ldc "Hello Web!" bipush 25 bipush 50 invokevirtual java/awt/Graphics/drawString(Ljava/lang/String;II)V ; done return .end method ; standard constructor .method public ()V aload_0 invokenonvirtual java/applet/Applet/()V return .end method examples/HelloWorld.j100644 0 0 1476 10070636274 12266 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/HelloWorld.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Prints out "Hello World!" ; ------------------------------------------------------------------------- .class public examples/HelloWorld .super java/lang/Object ; ; standard initializer .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method .method public static main([Ljava/lang/String;)V .limit stack 2 ; push System.out onto the stack getstatic java/lang/System/out Ljava/io/PrintStream; ; push a string onto the stack ldc "Hello World!" ; call the PrintStream.println() method. invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V ; done return .end method examples/Implementor.j100644 0 0 2330 10070636274 12474 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/HelloWorld.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Shows how to define a class that implements an interface ; ------------------------------------------------------------------------- ; ; This class implements the examples.AnInterface interface - see ; AnInterface.j ; .class public examples/Implementor .super java/lang/Object .implements examples/AnInterface ; ; standard initializer ; .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method ; ; implement the foo()V method - this is an interface method ; .method public foo()V .limit stack 2 ; print a simple message getstatic java/lang/System/out Ljava/io/PrintStream; ldc "Hello Interface" invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V ; done return .end method .method public static main([Ljava/lang/String;)V .limit stack 2 ; create a new one of me new examples/Implementor dup invokenonvirtual examples/Implementor/()V ; now call my interface method foo() invokeinterface examples/AnInterface/foo()V 1 return .end method examples/InvokeInterface.j100644 0 0 2164 10070636274 13262 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/InvokeInterface.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Example of using invokeinterface ; ------------------------------------------------------------------------- ; ; Demonstrates invoking an interface method ; .class public examples/InvokeInterface .super java/lang/Object ; standard initializer .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method ; ; This is a rather silly example - since the result of calling the ; interface method isn't actually used. But it does illustrate how to ; use invokeinterface. ; .method public example(Ljava/util/Enumeration;)V .limit stack 1 .limit locals 3 ; push local variable 1 (the Enumeration object) aload_1 ; now call the hasMoreElements() interface method. invokeinterface java/util/Enumeration/hasMoreElements()Z 1 ; store the integer result in local variable 2 istore_2 ; done return .end method .method public static main([Ljava/lang/String;)V return .end method examples/MultiANewArray.j100644 0 0 1505 10070636274 13050 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/MultiANewArray.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Example of multanewarray instruction ; ------------------------------------------------------------------------- ; ; This illustrates how to use multianewarray to allocate ; an array. ; .class public examples/MultiANewArray .super java/lang/Object ; standard initializer .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method .method public static main([Ljava/lang/String;)V .limit locals 4 .limit stack 2 ; ; This allocates an array like: ; ; String s[][] = new String[2][5]; ; iconst_2 iconst_5 multianewarray [[Ljava/lang/String; 2 astore_1 return .end method examples/MultiArrays.j100644 0 0 2347 10070636274 12465 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/MultiArrays.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Examples involving multi-dimensional arrays ; ------------------------------------------------------------------------- ; ; This illustrates how to use multi-dimensional arrays in the Java VM ; (though it doesn't actually do anything very interesting with the arrays.) ; .class public examples/MultiArrays .super java/lang/Object ; standard initializer .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method .method public static main([Ljava/lang/String;)V .limit locals 4 .limit stack 5 ; this is like: ; new int[2][5][] iconst_2 iconst_5 multianewarray [[[I 2 ; store the result in local variable 1 astore_1 aload_1 iconst_1 aaload ; stack now contains x[0] astore_2 ; store the array in local variable 2 ; create a new array of 50 ints and store it in x[1][1] aload_2 iconst_1 bipush 50 newarray int aastore ; create a new array of 60 ints and store it in x[1][2] aload_2 iconst_2 bipush 60 newarray int aastore return .end method examples/NewArray.j100644 0 0 1467 10070636274 11743 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/NewArray.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Example of newarray ; ------------------------------------------------------------------------- ; ; Example showing how to allocate an array using ; newarray. ; .class public examples/NewArray .super java/lang/Object .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method .method public static main([Ljava/lang/String;)V .limit stack 4 .limit locals 2 ; create an array like: ; ; boolean b[] = new boolean[2] ; ; (stores it in local var 1) iconst_2 newarray boolean astore_1 ; b[0] = true; aload_1 iconst_0 iconst_1 bastore return .end method examples/Switch.j100644 0 0 1377 10070636274 11454 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/Switch.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Shows usage of lookupswitch and tableswitch ; ------------------------------------------------------------------------- ; ; Illustrates lookupswitch and tableswitch syntax for Jasmin ; .class public examples/Switch .super java/lang/Object .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method .method public static main([Ljava/lang/String;)V .limit stack 3 iconst_1 lookupswitch 1 : Hello 2 : Goodbye default : Foo iconst_1 tableswitch 0 Hello Goodbye default : Foo Hello: Goodbye: Foo: return .end method examples/Uncaught.j100644 0 0 1712 10070636274 11762 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/Uncaught.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Throws an exception - doesn't catch it ; ------------------------------------------------------------------------- ; ; This example class contains a main() method that throws ; an exception but doesn't catch it - ; .source Uncaught.j .class public examples/Uncaught .super java/lang/Object ; specify the initializer method (as for HelloWorld) .method public ()V ; just call Object's initializer aload_0 invokenonvirtual java/lang/Object/()V return .end method ; specify the "main" method - this throws an uncaught exception .method public static main([Ljava/lang/String;)V .limit stack 2 new java/lang/Exception dup invokenonvirtual java/lang/Exception/()V athrow ; without this the verifier might complain ... return .end method examples/VerifyTest.j100644 0 0 2216 10070636274 12310 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/VerifyTest.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Treats an int as an object - should alert the Verifier ; ------------------------------------------------------------------------- ; ; This code demonstrates the verifier at work. See also VerifyTest1.j. ; ; The main() method below tries to clone the integer 100 - this ; is clearly an error since clone() expects an Object, not an integer. ; ; If you run this with no verification on, it is likely to crash the ; interpreter. Running this with the -verify option produces a ; Verifier error. ; ; This is similar to the Java code: ; ; class VerifyTest { ; public static void main(String args[]) { ; int x = 100; ; x.clone(); ; } ; } .class public examples/VerifyTest .super java/lang/Object .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method .method public static main([Ljava/lang/String;)V bipush 100 invokevirtual java/lang/Object/clone()Ljava/lang/Object; return .end method examples/VerifyTest1.j100644 0 0 3626 10070636274 12377 0ustar 0 0 ; --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- ; File: jasmin/examples/VerifyTest1.j ; Author: Jonathan Meyer, 10 July 1996 ; Purpose: Trys to pull one on the verifier ; ------------------------------------------------------------------------- ; This file illustrates the bytecode verifier at work - the ; code in the example() method below seems reasonable, but ; Java's bytecode verifier will fail the code because the two points leading ; to the Loop label (from the top of the method and from the ifne ; statement) have different stack states. Instead, a different approach ; must be adopted - e.g. by allocating an array, or simply writing: ; ; aconst_null ; aconst_null ; aconst_null ; aconst_null ; Note that many interpreters will run this code OK if you don't use ; a verifier. The code itself is well behaved (it doesn't trash the ; interpreter), but the approach it uses is disallowed by the verifier. ; ; Compile the example, then run it using: ; ; % java -verify VerifyTest1 ; VERIFIER ERROR VerifyTest1.example()V: ; Inconsistent stack height 1 != 0 ; .class public examples/VerifyTest1 .super java/lang/Object .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method .method public example()V .limit locals 2 .limit stack 10 ; this tries to push four nulls onto the stack ; using a loop - Java's verifier will fail this program iconst_4 ; store 4 in local variable 1 (used as a counter) istore_1 Loop: aconst_null ; push null onto the stack iinc 1 -1 ; decrement local variable 4 (the counter variable) iload_1 ifne Loop ; jump back to Loop unless the variable has reached 0 return .end method .method public static main([Ljava/lang/String;)V ; - do nothing : this is only to illustrate the bytecode verifier at work. return .end method generated/scm/AutoInit.java100644 0 0 5146 10154114357 13333 0ustar 0 0 package scm; import jas.*; class AutoInit { static void fillit(Env e) { e.definevar(Symbol.intern("make-ascii-cpe"), new scmAsciiCP()); e.definevar(Symbol.intern("make-class-cpe"), new scmClassCP()); e.definevar(Symbol.intern("make-name-type-cpe"), new scmNameTypeCP()); e.definevar(Symbol.intern("make-field-cpe"), new scmFieldCP()); e.definevar(Symbol.intern("make-interface-cpe"), new scmInterfaceCP()); e.definevar(Symbol.intern("make-method-cpe"), new scmMethodCP()); e.definevar(Symbol.intern("make-integer-cpe"), new scmIntegerCP()); e.definevar(Symbol.intern("make-float-cpe"), new scmFloatCP()); e.definevar(Symbol.intern("make-long-cpe"), new scmLongCP()); e.definevar(Symbol.intern("make-double-cpe"), new scmDoubleCP()); e.definevar(Symbol.intern("make-string-cpe"), new scmStringCP()); e.definevar(Symbol.intern("make-field"), new scmVar()); e.definevar(Symbol.intern("make-const"), new scmConstAttr()); e.definevar(Symbol.intern("make-outputstream"), new scmscmOutputStream()); e.definevar(Symbol.intern("make-label"), new scmLabel()); e.definevar(Symbol.intern("make-class-env"), new scmClassEnv()); e.definevar(Symbol.intern("make-code"), new scmCodeAttr()); e.definevar(Symbol.intern("make-exception"), new scmExceptAttr()); e.definevar(Symbol.intern("make-catchtable"), new scmCatchtable()); e.definevar(Symbol.intern("make-catch-entry"), new scmCatchEntry()); e.definevar(Symbol.intern("iinc"), new scmIincInsn()); e.definevar(Symbol.intern("multianewarray"), new scmMultiarrayInsn()); e.definevar(Symbol.intern("invokeinterface"), new scmInvokeinterfaceInsn()); e.definevar(Symbol.intern("jas-class-addcpe"), new scmaddCPItem()); e.definevar(Symbol.intern("jas-class-addfield"), new scmaddField()); e.definevar(Symbol.intern("jas-class-addinterface"), new scmaddInterface()); e.definevar(Symbol.intern("jas-class-setclass"), new scmsetClass()); e.definevar(Symbol.intern("jas-class-setsuperclass"), new scmsetSuperClass()); e.definevar(Symbol.intern("jas-class-addmethod"), new scmaddMethod()); e.definevar(Symbol.intern("jas-class-setaccess"), new scmsetClassAccess()); e.definevar(Symbol.intern("jas-class-setsource"), new scmsetSource()); e.definevar(Symbol.intern("jas-class-write"), new scmwrite()); e.definevar(Symbol.intern("jas-exception-add"), new scmaddException()); e.definevar(Symbol.intern("jas-code-addinsn"), new scmaddInsn()); e.definevar(Symbol.intern("jas-code-stack-size"), new scmsetStackSize()); e.definevar(Symbol.intern("jas-code-var-size"), new scmsetVarSize()); e.definevar(Symbol.intern("jas-set-catchtable"), new scmsetCatchtable()); e.definevar(Symbol.intern("jas-add-catch-entry"), new scmaddEntry()); } } generated/scm/AutoProcs.java100644 0 0 47565 10277203160 13546 0ustar 0 0 package scm; import jas.*; //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmaddCPItem extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-class-addcpe expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-addcpe expects a ClassEnv for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof ClassEnv)) { throw new SchemeError("jas-class-addcpe expects a ClassEnv for arg #1"); } ClassEnv arg0 = (tmp != null)?(ClassEnv)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-class-addcpe expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-addcpe expects a CP for arg #2"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CP)) { throw new SchemeError("jas-class-addcpe expects a CP for arg #2"); } CP arg1 = (tmp != null)?(CP)(((primnode)tmp).val):null; arg0.addCPItem(arg1); return null; } public String toString() { return ("<#jas-class-addcpe#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmaddField extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-class-addfield expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-addfield expects a ClassEnv for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof ClassEnv)) { throw new SchemeError("jas-class-addfield expects a ClassEnv for arg #1"); } ClassEnv arg0 = (tmp != null)?(ClassEnv)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-class-addfield expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-addfield expects a Var for arg #2"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof Var)) { throw new SchemeError("jas-class-addfield expects a Var for arg #2"); } Var arg1 = (tmp != null)?(Var)(((primnode)tmp).val):null; arg0.addField(arg1); return null; } public String toString() { return ("<#jas-class-addfield#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmaddInterface extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-class-addinterface expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-addinterface expects a ClassEnv for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof ClassEnv)) { throw new SchemeError("jas-class-addinterface expects a ClassEnv for arg #1"); } ClassEnv arg0 = (tmp != null)?(ClassEnv)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-class-addinterface expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-addinterface expects a CP for arg #2"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CP)) { throw new SchemeError("jas-class-addinterface expects a CP for arg #2"); } CP arg1 = (tmp != null)?(CP)(((primnode)tmp).val):null; arg0.addInterface(arg1); return null; } public String toString() { return ("<#jas-class-addinterface#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmsetClass extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-class-setclass expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-setclass expects a ClassEnv for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof ClassEnv)) { throw new SchemeError("jas-class-setclass expects a ClassEnv for arg #1"); } ClassEnv arg0 = (tmp != null)?(ClassEnv)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-class-setclass expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-setclass expects a CP for arg #2"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CP)) { throw new SchemeError("jas-class-setclass expects a CP for arg #2"); } CP arg1 = (tmp != null)?(CP)(((primnode)tmp).val):null; arg0.setClass(arg1); return null; } public String toString() { return ("<#jas-class-setclass#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmsetSuperClass extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-class-setsuperclass expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-setsuperclass expects a ClassEnv for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof ClassEnv)) { throw new SchemeError("jas-class-setsuperclass expects a ClassEnv for arg #1"); } ClassEnv arg0 = (tmp != null)?(ClassEnv)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-class-setsuperclass expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-setsuperclass expects a CP for arg #2"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CP)) { throw new SchemeError("jas-class-setsuperclass expects a CP for arg #2"); } CP arg1 = (tmp != null)?(CP)(((primnode)tmp).val):null; arg0.setSuperClass(arg1); return null; } public String toString() { return ("<#jas-class-setsuperclass#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmaddMethod extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-class-addmethod expects 6 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-addmethod expects a ClassEnv for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof ClassEnv)) { throw new SchemeError("jas-class-addmethod expects a ClassEnv for arg #1"); } ClassEnv arg0 = (tmp != null)?(ClassEnv)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-class-addmethod expects 6 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("jas-class-addmethod expects a number for arg #2"); } short arg1 = (short)(((Selfrep)tmp).num); if (t == null) { throw new SchemeError("jas-class-addmethod expects 6 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("jas-class-addmethod expects a String for arg #3"); } String arg2 = (tmp!=null)?((Selfrep)tmp).val:null; if (t == null) { throw new SchemeError("jas-class-addmethod expects 6 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("jas-class-addmethod expects a String for arg #4"); } String arg3 = (tmp!=null)?((Selfrep)tmp).val:null; if (t == null) { throw new SchemeError("jas-class-addmethod expects 6 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-addmethod expects a CodeAttr for arg #5"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CodeAttr)) { throw new SchemeError("jas-class-addmethod expects a CodeAttr for arg #5"); } CodeAttr arg4 = (tmp != null)?(CodeAttr)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-class-addmethod expects 6 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-addmethod expects a ExceptAttr for arg #6"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof ExceptAttr)) { throw new SchemeError("jas-class-addmethod expects a ExceptAttr for arg #6"); } ExceptAttr arg5 = (tmp != null)?(ExceptAttr)(((primnode)tmp).val):null; arg0.addMethod(arg1, arg2, arg3, arg4, arg5); return null; } public String toString() { return ("<#jas-class-addmethod#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmsetClassAccess extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-class-setaccess expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-setaccess expects a ClassEnv for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof ClassEnv)) { throw new SchemeError("jas-class-setaccess expects a ClassEnv for arg #1"); } ClassEnv arg0 = (tmp != null)?(ClassEnv)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-class-setaccess expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("jas-class-setaccess expects a number for arg #2"); } short arg1 = (short)(((Selfrep)tmp).num); arg0.setClassAccess(arg1); return null; } public String toString() { return ("<#jas-class-setaccess#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmsetSource extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-class-setsource expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-setsource expects a ClassEnv for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof ClassEnv)) { throw new SchemeError("jas-class-setsource expects a ClassEnv for arg #1"); } ClassEnv arg0 = (tmp != null)?(ClassEnv)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-class-setsource expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("jas-class-setsource expects a String for arg #2"); } String arg1 = (tmp!=null)?((Selfrep)tmp).val:null; arg0.setSource(arg1); return null; } public String toString() { return ("<#jas-class-setsource#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmwrite extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-class-write expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-write expects a ClassEnv for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof ClassEnv)) { throw new SchemeError("jas-class-write expects a ClassEnv for arg #1"); } ClassEnv arg0 = (tmp != null)?(ClassEnv)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-class-write expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-class-write expects a scmOutputStream for arg #2"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof scmOutputStream)) { throw new SchemeError("jas-class-write expects a scmOutputStream for arg #2"); } scmOutputStream arg1 = (tmp != null)?(scmOutputStream)(((primnode)tmp).val):null; arg0.write(arg1); return null; } public String toString() { return ("<#jas-class-write#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmaddException extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-exception-add expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-exception-add expects a ExceptAttr for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof ExceptAttr)) { throw new SchemeError("jas-exception-add expects a ExceptAttr for arg #1"); } ExceptAttr arg0 = (tmp != null)?(ExceptAttr)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-exception-add expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-exception-add expects a CP for arg #2"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CP)) { throw new SchemeError("jas-exception-add expects a CP for arg #2"); } CP arg1 = (tmp != null)?(CP)(((primnode)tmp).val):null; arg0.addException(arg1); return null; } public String toString() { return ("<#jas-exception-add#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmaddInsn extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-code-addinsn expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-code-addinsn expects a CodeAttr for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CodeAttr)) { throw new SchemeError("jas-code-addinsn expects a CodeAttr for arg #1"); } CodeAttr arg0 = (tmp != null)?(CodeAttr)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-code-addinsn expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-code-addinsn expects a Insn for arg #2"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof Insn)) { throw new SchemeError("jas-code-addinsn expects a Insn for arg #2"); } Insn arg1 = (tmp != null)?(Insn)(((primnode)tmp).val):null; arg0.addInsn(arg1); return null; } public String toString() { return ("<#jas-code-addinsn#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmsetStackSize extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-code-stack-size expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-code-stack-size expects a CodeAttr for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CodeAttr)) { throw new SchemeError("jas-code-stack-size expects a CodeAttr for arg #1"); } CodeAttr arg0 = (tmp != null)?(CodeAttr)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-code-stack-size expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("jas-code-stack-size expects a number for arg #2"); } short arg1 = (short)(((Selfrep)tmp).num); arg0.setStackSize(arg1); return null; } public String toString() { return ("<#jas-code-stack-size#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmsetVarSize extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-code-var-size expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-code-var-size expects a CodeAttr for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CodeAttr)) { throw new SchemeError("jas-code-var-size expects a CodeAttr for arg #1"); } CodeAttr arg0 = (tmp != null)?(CodeAttr)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-code-var-size expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("jas-code-var-size expects a number for arg #2"); } short arg1 = (short)(((Selfrep)tmp).num); arg0.setVarSize(arg1); return null; } public String toString() { return ("<#jas-code-var-size#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmsetCatchtable extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-set-catchtable expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-set-catchtable expects a CodeAttr for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CodeAttr)) { throw new SchemeError("jas-set-catchtable expects a CodeAttr for arg #1"); } CodeAttr arg0 = (tmp != null)?(CodeAttr)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-set-catchtable expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-set-catchtable expects a Catchtable for arg #2"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof Catchtable)) { throw new SchemeError("jas-set-catchtable expects a Catchtable for arg #2"); } Catchtable arg1 = (tmp != null)?(Catchtable)(((primnode)tmp).val):null; arg0.setCatchtable(arg1); return null; } public String toString() { return ("<#jas-set-catchtable#>"); } } //Autogenerated by procinfo on Thu May 19 14:07:20 EDT 2005 class scmaddEntry extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("jas-add-catch-entry expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-add-catch-entry expects a Catchtable for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof Catchtable)) { throw new SchemeError("jas-add-catch-entry expects a Catchtable for arg #1"); } Catchtable arg0 = (tmp != null)?(Catchtable)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("jas-add-catch-entry expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("jas-add-catch-entry expects a CatchEntry for arg #2"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CatchEntry)) { throw new SchemeError("jas-add-catch-entry expects a CatchEntry for arg #2"); } CatchEntry arg1 = (tmp != null)?(CatchEntry)(((primnode)tmp).val):null; arg0.addEntry(arg1); return null; } public String toString() { return ("<#jas-add-catch-entry#>"); } } generated/scm/AutoTypes.java100644 0 0 46512 10277203160 13553 0ustar 0 0 package scm; import jas.*; //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmAsciiCP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-ascii-cpe expects 1 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-ascii-cpe expects a String for arg #1"); } String arg0 = (tmp!=null)?((Selfrep)tmp).val:null; return new primnode(new AsciiCP(arg0)); } public String toString() { return ("<#make-ascii-cpe#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmClassCP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-class-cpe expects 1 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-class-cpe expects a String for arg #1"); } String arg0 = (tmp!=null)?((Selfrep)tmp).val:null; return new primnode(new ClassCP(arg0)); } public String toString() { return ("<#make-class-cpe#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmNameTypeCP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-name-type-cpe expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-name-type-cpe expects a String for arg #1"); } String arg0 = (tmp!=null)?((Selfrep)tmp).val:null; if (t == null) { throw new SchemeError("make-name-type-cpe expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-name-type-cpe expects a String for arg #2"); } String arg1 = (tmp!=null)?((Selfrep)tmp).val:null; return new primnode(new NameTypeCP(arg0, arg1)); } public String toString() { return ("<#make-name-type-cpe#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmFieldCP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-field-cpe expects 3 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-field-cpe expects a String for arg #1"); } String arg0 = (tmp!=null)?((Selfrep)tmp).val:null; if (t == null) { throw new SchemeError("make-field-cpe expects 3 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-field-cpe expects a String for arg #2"); } String arg1 = (tmp!=null)?((Selfrep)tmp).val:null; if (t == null) { throw new SchemeError("make-field-cpe expects 3 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-field-cpe expects a String for arg #3"); } String arg2 = (tmp!=null)?((Selfrep)tmp).val:null; return new primnode(new FieldCP(arg0, arg1, arg2)); } public String toString() { return ("<#make-field-cpe#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmInterfaceCP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-interface-cpe expects 3 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-interface-cpe expects a String for arg #1"); } String arg0 = (tmp!=null)?((Selfrep)tmp).val:null; if (t == null) { throw new SchemeError("make-interface-cpe expects 3 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-interface-cpe expects a String for arg #2"); } String arg1 = (tmp!=null)?((Selfrep)tmp).val:null; if (t == null) { throw new SchemeError("make-interface-cpe expects 3 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-interface-cpe expects a String for arg #3"); } String arg2 = (tmp!=null)?((Selfrep)tmp).val:null; return new primnode(new InterfaceCP(arg0, arg1, arg2)); } public String toString() { return ("<#make-interface-cpe#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmMethodCP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-method-cpe expects 3 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-method-cpe expects a String for arg #1"); } String arg0 = (tmp!=null)?((Selfrep)tmp).val:null; if (t == null) { throw new SchemeError("make-method-cpe expects 3 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-method-cpe expects a String for arg #2"); } String arg1 = (tmp!=null)?((Selfrep)tmp).val:null; if (t == null) { throw new SchemeError("make-method-cpe expects 3 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-method-cpe expects a String for arg #3"); } String arg2 = (tmp!=null)?((Selfrep)tmp).val:null; return new primnode(new MethodCP(arg0, arg1, arg2)); } public String toString() { return ("<#make-method-cpe#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmIntegerCP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-integer-cpe expects 1 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("make-integer-cpe expects a number for arg #1"); } int arg0 = (int)(Math.round(((Selfrep)tmp).num)); return new primnode(new IntegerCP(arg0)); } public String toString() { return ("<#make-integer-cpe#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmFloatCP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-float-cpe expects 1 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("make-float-cpe expects a number for arg #1"); } float arg0 = (float)(((Selfrep)tmp).num); return new primnode(new FloatCP(arg0)); } public String toString() { return ("<#make-float-cpe#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmLongCP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-long-cpe expects 1 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("make-long-cpe expects a number for arg #1"); } long arg0 = (long)(Math.round(((Selfrep)tmp).num)); return new primnode(new LongCP(arg0)); } public String toString() { return ("<#make-long-cpe#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmDoubleCP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-double-cpe expects 1 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("make-double-cpe expects a number for arg #1"); } double arg0 = (double)(((Selfrep)tmp).num); return new primnode(new DoubleCP(arg0)); } public String toString() { return ("<#make-double-cpe#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmStringCP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-string-cpe expects 1 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-string-cpe expects a String for arg #1"); } String arg0 = (tmp!=null)?((Selfrep)tmp).val:null; return new primnode(new StringCP(arg0)); } public String toString() { return ("<#make-string-cpe#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmVar extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-field expects 4 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("make-field expects a number for arg #1"); } short arg0 = (short)(Math.round(((Selfrep)tmp).num)); if (t == null) { throw new SchemeError("make-field expects 4 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("make-field expects a CP for arg #2"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CP)) { throw new SchemeError("make-field expects a CP for arg #2"); } CP arg1 = (tmp != null)?(CP)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("make-field expects 4 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("make-field expects a CP for arg #3"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CP)) { throw new SchemeError("make-field expects a CP for arg #3"); } CP arg2 = (tmp != null)?(CP)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("make-field expects 4 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("make-field expects a ConstAttr for arg #4"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof ConstAttr)) { throw new SchemeError("make-field expects a ConstAttr for arg #4"); } ConstAttr arg3 = (tmp != null)?(ConstAttr)(((primnode)tmp).val):null; return new primnode(new Var(arg0, arg1, arg2, arg3)); } public String toString() { return ("<#make-field#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmConstAttr extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-const expects 1 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("make-const expects a CP for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CP)) { throw new SchemeError("make-const expects a CP for arg #1"); } CP arg0 = (tmp != null)?(CP)(((primnode)tmp).val):null; return new primnode(new ConstAttr(arg0)); } public String toString() { return ("<#make-const#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmscmOutputStream extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-outputstream expects 1 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-outputstream expects a String for arg #1"); } String arg0 = (tmp!=null)?((Selfrep)tmp).val:null; return new primnode(new scmOutputStream(arg0)); } public String toString() { return ("<#make-outputstream#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmLabel extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-label expects 1 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError("make-label expects a String for arg #1"); } String arg0 = (tmp!=null)?((Selfrep)tmp).val:null; return new primnode(new Label(arg0)); } public String toString() { return ("<#make-label#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmClassEnv extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; return new primnode(new ClassEnv()); } public String toString() { return ("<#make-class-env#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmCodeAttr extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; return new primnode(new CodeAttr()); } public String toString() { return ("<#make-code#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmExceptAttr extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; return new primnode(new ExceptAttr()); } public String toString() { return ("<#make-exception#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmCatchtable extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; return new primnode(new Catchtable()); } public String toString() { return ("<#make-catchtable#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmCatchEntry extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("make-catch-entry expects 4 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("make-catch-entry expects a Label for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof Label)) { throw new SchemeError("make-catch-entry expects a Label for arg #1"); } Label arg0 = (tmp != null)?(Label)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("make-catch-entry expects 4 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("make-catch-entry expects a Label for arg #2"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof Label)) { throw new SchemeError("make-catch-entry expects a Label for arg #2"); } Label arg1 = (tmp != null)?(Label)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("make-catch-entry expects 4 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("make-catch-entry expects a Label for arg #3"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof Label)) { throw new SchemeError("make-catch-entry expects a Label for arg #3"); } Label arg2 = (tmp != null)?(Label)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("make-catch-entry expects 4 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("make-catch-entry expects a CP for arg #4"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CP)) { throw new SchemeError("make-catch-entry expects a CP for arg #4"); } CP arg3 = (tmp != null)?(CP)(((primnode)tmp).val):null; return new primnode(new CatchEntry(arg0, arg1, arg2, arg3)); } public String toString() { return ("<#make-catch-entry#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmIincInsn extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("iinc expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("iinc expects a number for arg #1"); } int arg0 = (int)(Math.round(((Selfrep)tmp).num)); if (t == null) { throw new SchemeError("iinc expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("iinc expects a number for arg #2"); } int arg1 = (int)(Math.round(((Selfrep)tmp).num)); return new primnode(new IincInsn(arg0, arg1)); } public String toString() { return ("<#iinc#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmMultiarrayInsn extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("multianewarray expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("multianewarray expects a CP for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CP)) { throw new SchemeError("multianewarray expects a CP for arg #1"); } CP arg0 = (tmp != null)?(CP)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("multianewarray expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("multianewarray expects a number for arg #2"); } int arg1 = (int)(Math.round(((Selfrep)tmp).num)); return new primnode(new MultiarrayInsn(arg0, arg1)); } public String toString() { return ("<#multianewarray#>"); } } //Autogenerated by typeinfo on Thu May 19 14:07:20 EDT 2005 class scmInvokeinterfaceInsn extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp; if (t == null) { throw new SchemeError("invokeinterface expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError("invokeinterface expects a CP for arg #1"); } if ((tmp != null) && !((((primnode)tmp).val) instanceof CP)) { throw new SchemeError("invokeinterface expects a CP for arg #1"); } CP arg0 = (tmp != null)?(CP)(((primnode)tmp).val):null; if (t == null) { throw new SchemeError("invokeinterface expects 2 arguments"); } tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr; if (!(tmp instanceof Selfrep)) { throw new SchemeError("invokeinterface expects a number for arg #2"); } int arg1 = (int)(Math.round(((Selfrep)tmp).num)); return new primnode(new InvokeinterfaceInsn(arg0, arg1)); } public String toString() { return ("<#invokeinterface#>"); } } lib/jas/.jas.prcs_aux100644 0 0 6332 10070636274 12142 0ustar 0 0 ;; This file is automatically generated, editing may cause PRCS to do ;; REALLY bad things. (Created-By-Prcs-Version 1 2 15) (src/scm/driver.java 5506 957458219 3_driver.jav 1.2) (src/scm/AutoInit.java 2662 957455940 16_AutoInit.j 1.1) (src/jas/CatchEntry.java 1410 957388675 b/41_CatchEntry 1.1) (src/jas/AsciiCP.java 598 957388675 b/40_AsciiCP.ja 1.1) (src/scm/AutoTypes.java 19786 957392553 14_AutoTypes. 1.3) (src/jas/Insn.java 5743 957388675 b/26_Insn.java 1.1) (src/jas/GenericAttr.java 1404 957388675 b/28_GenericAtt 1.1) (src/jas/StringCP.java 638 957388675 b/8_StringCP.j 1.1) (src/scm/Symbol.java 476 957455940 5_Symbol.jav 1.1) (src/jas/Var.java 1724 957388675 b/15_Var.java 1.1) (src/jas/FieldCP.java 1224 957388675 b/30_FieldCP.ja 1.1) (src/scm/scmOutputStream.java 350 957455940 8_scmOutputS 1.1) (src/jas/FloatCP.java 581 957388675 b/29_FloatCP.ja 1.1) (src/jas/Label.java 1856 957388675 b/21_Label.java 1.1) (src/scm/Cell.java 1032 957455940 13_Cell.java 1.1) (src/jas/RuntimeConstants.java 15677 957388675 b/13_RuntimeCon 1.1) (src/jas/Method.java 1765 957388675 b/16_Method.jav 1.1) (src/scm/Selfrep.java 362 957455940 6_Selfrep.ja 1.1) (src/scm/SchemeError.java 175 957455940 7_SchemeErro 1.1) (src/jas/SourceAttr.java 1004 957388675 b/9_SourceAttr 1.1) (src/jas/MultiarrayInsn.java 607 957388675 b/12_Multiarray 1.1) (src/jas/TableswitchInsn.java 731 957388675 b/10_Tableswitc 1.1) (src/jas/InvokeinterfaceInsn.java 525 957388675 b/38_Invokeinte 1.1) (src/scm/Procedure.java 13542 957455940 11_Procedure. 1.1) (src/scm/Obj.java 178 957455940 9_Obj.java 1.1) (src/jas/ConstAttr.java 899 957388675 b/33_ConstAttr. 1.1) (src/scm/InsnProcedure.java 1136 957458071 17_InsnProced 1.2) (src/jas/CP.java 685 957388675 b/39_CP.java 1.1) (src/jas/IntegerCP.java 587 957388675 b/24_IntegerCP. 1.1) (src/scm/Env.java 2539 957455940 12_Env.java 1.1) (src/jas/InsnOperand.java 10206 957388675 b/25_InsnOperan 1.1) (src/jas/jasError.java 304 957388675 b/7_jasError.j 1.1) (src/scm/Lambda.java 524 957455940 10_Lambda.jav 1.1) (src/jas/LookupswitchInsn.java 727 957388675 b/14_Lookupswit 1.1) (src/jas/NameTypeCP.java 931 957388675 b/11_NameTypeCP 1.1) (src/jas/MethodCP.java 920 957388675 b/18_MethodCP.j 1.1) (src/scm/primnode.java 343 957455940 2_primnode.j 1.1) (src/jas/IincInsn.java 993 957388675 b/27_IincInsn.j 1.1) (src/jas/CodeAttr.java 7160 957392553 b/34_CodeAttr.j 1.2) (src/jas/InterfaceCP.java 977 957388675 b/23_InterfaceC 1.1) (src/jas/Catchtable.java 1641 957388675 b/37_Catchtable 1.1) (src/jas/ClassEnv.java 7614 957388675 b/35_ClassEnv.j 1.1) (src/jas/LongCP.java 572 957388675 b/17_LongCP.jav 1.1) (src/jas/ExceptAttr.java 1109 957388675 b/31_ExceptAttr 1.1) (src/jas/LocalVarTableAttr.java 1728 957388675 b/20_LocalVarTa 1.1) (src/scm/AutoProcs.java 20341 957392553 15_AutoProcs. 1.3) (src/scm/procinfo.class 3152 955469363 1_procinfo.c 1.1) (src/jas/DoubleCP.java 590 957388675 b/32_DoubleCP.j 1.1) (src/jas/ClassCP.java 657 957388675 b/36_ClassCP.ja 1.1) (src/scm/typeinfo.class 3323 955469363 0_typeinfo.c 1.1) (src/jas/LocalVarEntry.java 2120 957388675 b/19_LocalVarEn 1.1) (src/scm/autogen.class 5046 955469363 4_autogen.cl 1.1) (src/jas/LineTableAttr.java 1685 957388675 b/22_LineTableA 1.1) (src/scm/autogen/autogen.java 11568 957458031 18_autogen.ja 1.2) lib/jas/CHANGES.jm100644 0 0 273 10070636274 11117 0ustar 0 0 1 March 1997, Jon Meyer * Modified JAS to use self-contained RuntimeConstants interface. * Moved JAS classes into the Jasmin classes directory. * Fixed bug in CatchEntry. lib/jas/README100644 0 0 6146 10070636274 10424 0ustar 0 0 This is v0.3 of a simple Java bytecode assembler. Quick Info: ----------- If you want to just quickly check out things, do the following. % java scm.driver examples/hworld.jas This compiles an assembler script to bytecode. % java out This runs the resultant bytecode, which should print the string "Hello World" 5 times. Then read the online documentation at http://www.blackdown.org/~kbs/jas.html More Details: ------------- * What is available: A simple java bytecode assembler that can be used either as a standalone scripting program or directly from java (through the jas package) * What is not available in this version: - Error recovery in the scripting interface - defining a tableswitch or lookupswitch instruction from the scripting interface * Documentation You can leaf through the jas API in reference/jas You can look at the list of available scripting functions from reference/scm. The bulk of what documentation exists is online from http://www.blackdown.org/~kbs/jas.html UTSL, ofcourse ;-) And documentation is mostly demand-driven, if there is interest I'll continue to expand it. * Examples The examples directory contains a few examples of using the assembler with the script and directly from java. Look at the README in this directory to see how to run them. Online documentation contains more details. simple.java simple.jas These are simple programs that create classes which don't do anything but get initialized. hworld.java hworld.jas These create bytecode that can be run standalone, which print a string a few times. exprcomp.java This is a primitive compiler that does runtime codegeneration and execution of arithmetic expressions. exprcomp.jas This is a primitive compiler written in jas to translate jas arithmetic expressions to bytecode. * Recompiling You can recompile all classes if you wish. First remove the jas/ and the scm/ directories under this directory. Then run the script compile.sh in this directory. You will probably want to then run the tests in the test directory to make sure the basic api is functional. Look at the README in this directory for details. Running the scripting driver: ----------------------------- If you are going to use the scripting language, the driver for it is located in the class scm.driver. The magic incantation is % java scm.driver [path to file] If you don't give it a file name, it will try to read from stdin. Using code from this distribution: ---------------------------------- There is exactly one class that I *use* from the sun/* package, which is sun.tools.java.RuntimeConstants. I know of no other reasonable way to keep in sync with the VM. Outside of this class, (which is not present in this distribution) you can freely use/modify/sell/dance on with hobnailed boots any or all of this code. If you do end up using derived code and feel disinclined to buy me a snowboard :) all I ask is that you add me to the list of credits. -KB- kbs@sbktech.org Version created: Tue Aug 21 09:50:23 PDT 1996 lib/jas/examples/README100644 0 0 3115 10070636274 12233 0ustar 0 0 This contains three examples of using the assembler from java and from the script Look up http://www.blackdown.org/~kbs/jas.html for more documentation. This only tells you how to run the examples. The documentation is very Unix centric, I apologize.... I have not had time to set this up on the PC's yet. simple.java: simple.jas: Unexciting program that generates a do nothing class. Go up a directory and compile simple.java. Run the program, which generates the bytecode. Disassemble the bytecode % (cd ..; javac -d . examples/simple.java; java simple; javap -p -c out) Same thing, but using the script instead of java directly. % (cd ..; java scm.driver examples/simple.jas; javap -p -c out) hworld.java: hworld.jas: Print a string in a loop. % (cd ..; javac -d . examples/hworld.java; java hworld; java out) As before, but use script instead. % (cd ..; java scm.driver examples/hworld.jas; java out) exprcomp.java: Primitive runtime expression compiler. It translates arithmetic expressions into bytecode and loads it on the fly as a class, which is run to get the answer. test.inp is an example of the sort of arithmetic expressions it translates. % (cd ..; javac -d . examples/exprcomp.java; java exprcomp examples/test.inp) exprcomp.jas: Primitive compiler for jas arithmetic expressions (in jas). jas is fairly expressive, thats about the only point of this exercise ;-) Unlike the java version, this gets written out into a file which you'll have to run to get the results. % (cd ..; java scm.driver examples/exprcomp.jas; java results) lib/jas/examples/exprcomp.jas100644 0 0 6156 10070636274 13717 0ustar 0 0 ;;; Simple arithmetic expression compiler for jas in jas. ;;; ;;; The compiler is defined in the function ;;; compile-expression ;;; ;;; use as (for instance) ;;; (compile-expression (quote (+ (* 2 (+ 1 3)) 1))) ;;; ;;; This will generate a standalone program called results.class ;;; Run the bytecode interpreter on it as: ;;; ;;; % java results ;;; ;;; which will print the result of the expression (define compile-expression (lambda (expr) (real-compile-expression expr) (dump-code))) ;; The fun part... (define real-compile-expression (lambda (expr) (cond ((num? expr) (compile-number expr)) (1 (progn (real-compile-expression (get-op1 expr)) (real-compile-expression (get-op2 expr)) (compile-op (get-op expr)) (set! cur-stack-height (- cur-stack-height 1))))))) ;; Ah well. Back to boring bookkeeping. (define compile-number (lambda (num) (append-insn (bipush num)) (set! cur-stack-height (+ 1 cur-stack-height)) (cond ((< max-stack-height cur-stack-height) (set! max-stack-height cur-stack-height))))) (define compile-op (lambda (op) (cond ((eq? op (quote +)) (append-insn (iadd))) ((eq? op (quote -)) (append-insn (isub))) ((eq? op (quote *)) (append-insn (imul))) ((eq? op (quote /)) (append-insn (idiv)))))) (define get-op1 (lambda (expr) (car (cdr expr)))) (define get-op2 (lambda (expr) (car (cdr (cdr expr))))) (define get-op (lambda (expr) (car expr))) (define append-insn (lambda (insn) (jas-code-addinsn my-code insn))) (define cur-stack-height 1) (define max-stack-height 1) (define my-code (make-code)) (define my-init-code (make-code)) ; define the main() portion, ; and the call to print out the ; results. (define append-sequence (lambda (code-part insn-list) (mapcar (lambda (insn) (jas-code-addinsn code-part insn)) insn-list))) (append-sequence my-init-code (quote ((aload_0) (invokenonvirtual (make-method-cpe "java/lang/Object" "" "()V")) (return)))) (define dump-code (lambda () (define my-env (make-class-env)) (jas-class-setclass my-env (make-class-cpe "results")) (jas-class-setsuperclass my-env (make-class-cpe "java/lang/Object")) (jas-class-addmethod my-env acc-public "" "()V" my-init-code ()) (append-sequence my-code (quote ((getstatic (make-field-cpe "java/lang/System" "out" "Ljava/io/PrintStream;")) (swap) (invokevirtual (make-method-cpe "java/io/PrintStream" "println" "(I)V")) (return)))) (jas-code-stack-size my-code max-stack-height) (jas-class-addmethod my-env (| acc-public acc-static) "main" "([Ljava/lang/String;)V" my-code ()) (jas-class-write my-env (make-outputstream "results.class")))) ;;; ;;; example usage of compiler. ;;; ;;; run the compiled class with ;;; % java results ;;; to get the answer. (compile-expression (quote (+ (* 2 (+ 1 3)) 1))) lib/jas/examples/exprcomp.java100644 0 0 15412 10070636274 14076 0ustar 0 0 // Primitive runtime code generation of expressions. This is a jas // implementation of the example in Aho Sethi Ullman. // // You pass to it statements of the form // a = 1*2 + 3*5; // Only integer operations are allowed, and variables // are magically created by using them in the LHS of a statement. // // You can print out the value of expressions with the println keyword: // println(a + 10); // // It compiles this into a bytearray, and then loads it as // a new class. // // Unfortunately, this trick cannot be used in an applet --- security // restrictions prevent ClassLoaders from being placed on the // stack. So much for writing regexp compilers that can do codegen instead of // state tables. // // The grammar is simple, so code generation is part of the parsing // step. Operator precedence is directly handled by the grammar. // // Grammar + production rules: // // start -> list EOF // list -> id = expr ; { emit(istore, id.index); } list // | println expr ; { emit(); } list // | lambda // expr -> term moreterms // moreterms -> + term { emit(iadd) } moreterms // | - term { emit(isub) } moreterms // | lambda // term -> factor morefactors // morefactors -> * factor { emit(imul) } morefactors // | / factor { emit(idiv) } morefactors // | lambda // factor -> ( expr ) // | number { emit(iconst, number.value) } // | id { emit(iload, id.index); } import java.util.*; import java.io.*; import jas.*; public class exprcomp implements RuntimeConstants { StreamTokenizer inp; CodeAttr myCode; short cur_stack_height; short max_stack_height; short max_vars; Hashtable vars; public exprcomp(StreamTokenizer inp) throws jasError { inp.eolIsSignificant(false); this.inp = inp; myCode = new CodeAttr(); // Add initializations myCode.addInsn(new Insn(opc_aload_0)); myCode.addInsn(new Insn(opc_invokenonvirtual, new MethodCP("java/lang/Object", "", "()V"))); cur_stack_height = max_stack_height = 1; vars = new Hashtable(); max_vars = 1; } public void write(DataOutputStream out) throws IOException, jasError { ClassEnv clazz = new ClassEnv(); myCode.setStackSize(max_stack_height); myCode.setVarSize(max_vars); // add initializer to class clazz.addMethod ((short) ACC_PUBLIC, "", "()V", myCode, null); clazz.setClassAccess((short) ACC_PUBLIC); clazz.setClass(new ClassCP("results")); clazz.setSuperClass(new ClassCP("java/lang/Object")); clazz.write(out); } public void parse() throws IOException, parseError, jasError { inp.nextToken(); while(inp.ttype != inp.TT_EOF) { if (inp.ttype != inp.TT_WORD) { throw new parseError("Expected an id at line " + inp.lineno()); } if (inp.sval.equals("println")) { match(inp.TT_WORD); expr(); match(';'); emit(new Insn(opc_getstatic, new FieldCP("java/lang/System", "out", "Ljava/io/PrintStream;"))); emit(new Insn(opc_swap)); emit(new Insn(opc_invokevirtual, new MethodCP("java/io/PrintStream", "println", "(I)V"))); } else { // search, maybe add into var list Integer idx; if ((idx = (Integer) vars.get(inp.sval)) == null) { idx = new Integer(max_vars++); vars.put(inp.sval.intern(), idx); } match(inp.TT_WORD); match('='); expr(); match(';'); emit(new Insn(opc_istore, idx.intValue())); } } emit(new Insn(opc_return)); } void expr() throws IOException, parseError, jasError { term(); while (true) { switch(inp.ttype) { case '+': match('+'); term(); emit(new Insn(opc_iadd)); break; case '-': match('-'); term(); emit(new Insn(opc_isub)); break; default: return; } cur_stack_height--; } } void term() throws IOException, parseError, jasError { factor(); while (true) { switch(inp.ttype) { case '*': match('*'); factor(); emit(new Insn(opc_imul)); break; case '/': match('/'); factor(); emit(new Insn(opc_idiv)); break; default: return; } cur_stack_height --; } } void factor() throws IOException, parseError, jasError { switch(inp.ttype) { case '(': match('('); expr(); match(')'); break; case inp.TT_NUMBER: int val = (int)(inp.nval); emit(new Insn(opc_bipush, (short)val)); match(inp.TT_NUMBER); break; case inp.TT_WORD: Integer idx; if ((idx = (Integer) vars.get(inp.sval)) == null) { throw new parseError ("Unknown variable " + inp.sval + " at line " + inp.lineno()); } emit(new Insn(opc_iload, idx.intValue())); match(inp.TT_WORD); break; default: throw new parseError("Syntax error at line " + inp.lineno()); } cur_stack_height++; if (max_stack_height < cur_stack_height) max_stack_height = cur_stack_height; } void match(int val) throws IOException, parseError { if (inp.ttype != val) { throw new parseError ("line " + inp.lineno() + ": expected " + val + " but got " + inp); } inp.nextToken(); } void emit(Insn insn) { myCode.addInsn(insn); } public static void main(String argv[]) throws Exception { exprcomp compiler = new exprcomp(new StreamTokenizer(new FileInputStream(argv[0]))); compiler.parse(); ByteArrayOutputStream data = new ByteArrayOutputStream(); compiler.write(new DataOutputStream(data)); dynaloader dl = new dynaloader(data.toByteArray()); dl.exec(); } } class dynaloader extends ClassLoader { Hashtable cache; Class ex; dynaloader(byte[] data) throws ClassFormatError { cache = new Hashtable(); ex = defineClass(data, 0, data.length); cache.put("results", ex); resolveClass(ex); } void exec() throws Exception { ex.newInstance(); } public synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException { Class c = (Class) cache.get(name); if (c == null) { c = findSystemClass(name); cache.put(name, c); } if (resolve) resolveClass(c); return c; } } class parseError extends Exception { parseError(String s) { super(s); } } lib/jas/examples/hworld.jas100644 0 0 4371 10070636274 13356 0ustar 0 0 ;; create a container (define my-class (make-class-env)) ;; specify class hierarchy (jas-class-setaccess my-class acc-public) (jas-class-setclass my-class (make-class-cpe "out")) (jas-class-setsuperclass my-class (make-class-cpe "java/lang/Object")) ;; write a convenience function to append insns as a list. (define append-code (lambda (code-part insn-list) (mapcar (lambda (insn) (jas-code-addinsn code-part insn)) insn-list))) ;; Define code for initializer ;; (define init-it (make-code)) (append-code init-it (quote ((aload_0) (invokenonvirtual (make-method-cpe "java/lang/Object" "" "()V")) (return)))) ;; this is the code that comprises ;; the actual task, ie the code for ;; main(String argv[]). ;; print a string 5 times (define doit (make-code)) (append-code doit (quote ( ; store references in local ; variables to avoid field/cp ; lookup (getstatic (make-field-cpe "java/lang/System" "out" "Ljava/io/PrintStream;")) (astore_1) (ldc (make-string-cpe "Hello World")) (astore_2) (bipush 5) (istore_3) ; store loop index in var reg 3 ; loop 5 times, printing out ; the string. (make-label "loop") ; push arguments to function ; on stack and call it (aload_1) (aload_2) (invokevirtual (make-method-cpe "java/io/PrintStream" "println" "(Ljava/lang/String;)V")) ; decrement loop index (iinc 3 -1) (iload_3) (ifne (make-label "loop")) (return)))) ;; set stack/var size (jas-code-stack-size doit 3) (jas-code-var-size doit 4) ;; fill up the class with the methods ;; first the initializer. (jas-class-addmethod my-class acc-public "" "()V" init-it ()) ;; define the printing code as a static main(String argv[]) method (jas-class-addmethod my-class (| acc-static acc-public) "main" "([Ljava/lang/String;)V" doit ()) ;; write it out. (jas-class-write my-class (make-outputstream "out.class")) lib/jas/examples/hworld.java100644 0 0 5202 10070636274 13514 0ustar 0 0 import jas.*; import java.io.*; // // This is program that makes calls into the jas package // to generate a class that prints a string afew times. // class hworld implements RuntimeConstants { public static void main(String argv[]) throws jasError, IOException { // class hierarchy ClassEnv nclass = new ClassEnv(); nclass.setClass(new ClassCP("out")); nclass.setSuperClass(new ClassCP("java/lang/Object")); nclass.setClassAccess((short)ACC_PUBLIC); // Initialization code CodeAttr init = new CodeAttr(); init.addInsn(new Insn(opc_aload_0)); init.addInsn(new Insn(opc_invokenonvirtual, new MethodCP("java/lang/Object", "", "()V"))); init.addInsn(new Insn(opc_return)); // Actual code to print string CodeAttr doit = new CodeAttr(); // store refs in local variables doit.addInsn(new Insn(opc_getstatic, new FieldCP("java/lang/System", "out", "Ljava/io/PrintStream;"))); doit.addInsn(new Insn(opc_astore_1)); doit.addInsn(new Insn(opc_ldc, new StringCP("Hello World"))); doit.addInsn(new Insn(opc_astore_2)); // Loop index in var reg 3 doit.addInsn(new Insn(opc_bipush, 5)); doit.addInsn(new Insn(opc_istore_3)); // Start the loop Label loop = new Label("loop"); doit.addInsn(loop); doit.addInsn(new Insn(opc_aload_1)); doit.addInsn(new Insn(opc_aload_2)); doit.addInsn(new Insn(opc_invokevirtual, new MethodCP("java/io/PrintStream", "println", "(Ljava/lang/String;)V"))); doit.addInsn(new IincInsn(3, -1)); doit.addInsn(new Insn(opc_iload_3)); doit.addInsn(new Insn(opc_ifne, loop)); doit.addInsn(new Insn(opc_return)); // set the right sizes for code doit.setStackSize((short)3); doit.setVarSize((short)4); // Add the init code to the class. nclass.addMethod((short)ACC_PUBLIC, "", "()V", init, null); // Add the printing code nclass.addMethod((short)(ACC_PUBLIC|ACC_STATIC), "main", "([Ljava/lang/String;)V", doit, null); // write it all out nclass.write(new DataOutputStream (new FileOutputStream("out.class"))); } } lib/jas/examples/simple.jas100644 0 0 2350 10070636274 13343 0ustar 0 0 ;; script to create a class that does nothing. ; make-class-env creates ; a ClassEnv object which is ; used to store information about ; an object. (define my-class (make-class-env)) ; make-code creates a code object ; which contains the body of a ; method. (define init-code (make-code)) (jas-code-addinsn init-code (aload_0)) (jas-code-addinsn init-code (invokenonvirtual (make-method-cpe "java/lang/Object" "" "()V"))) (jas-code-addinsn init-code (return)) ; fill up the class with goodies (jas-class-setsuperclass my-class (make-class-cpe "java/lang/Object")) (jas-class-setclass my-class (make-class-cpe "out")) (jas-class-setaccess my-class acc-public) (jas-class-addmethod my-class acc-public "" "()V" init-code ()) ; and write it all out (jas-class-write my-class (make-outputstream "out.class")) lib/jas/examples/simple.java100644 0 0 2270 10070636274 13510 0ustar 0 0 import jas.*; import java.io.*; // // This is program that makes calls into the jas package // to generate a class that does nothing at all. // class simple implements RuntimeConstants { public static void main(String argv[]) throws jasError, IOException { // CodeAttr's contain the body of // a method. CodeAttr init = new CodeAttr(); init.addInsn(new Insn(opc_aload_0)); init.addInsn(new Insn(opc_invokenonvirtual, new MethodCP("java/lang/Object", "", "()V"))); init.addInsn(new Insn(opc_return)); // ClassEnv's are used as a container // to hold all information about a class. ClassEnv nclass = new ClassEnv(); nclass.setClass(new ClassCP("out")); nclass.setSuperClass(new ClassCP("java/lang/Object")); // Add the init code to the class. nclass.addMethod((short)ACC_PUBLIC, "", "()V", init, null); // write it all out nclass.write(new DataOutputStream (new FileOutputStream("out.class"))); } } lib/jas/examples/test.inp100644 0 0 77 10070636274 13006 0ustar 0 0 a = 10; println a; b = a + 5; println (b); println(a*b +2); lib/jas/src/jas/AnnotElemValPair.java100644 0 0 1654 10240435426 15106 0ustar 0 0 /** * ElemValPairs are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class AnnotElemValPair extends ElemValPair { AnnotationAttr attr; void resolve(ClassEnv e){ super.resolve(e); attr.resolve(e); } /** * Note: An annotation attr is associated with a class, * method or field so you need to create a new VisibilityAnnotationAttr for */ public AnnotElemValPair(String name, char kind, AnnotationAttr attr) { // super(name, kind); this.attr = attr; } int size(){ return super.size() + attr.size(); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { super.write(e, out); attr.write(e, out); } } lib/jas/src/jas/AnnotationAttr.java100644 0 0 3506 10240435426 14710 0ustar 0 0 /** * Annotation attributes are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class AnnotationAttr { AsciiCP type; ArrayList list = new ArrayList(); void resolve(ClassEnv e){ e.addCPItem(type); if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ ((ElemValPair)it.next()).resolve(e); } } } /** * Note: An annotation attr is associated with a class, * method or field so you need to create a new VisibilityAnnotationAttr for */ public AnnotationAttr(String type, ArrayList elems) { // this.type = new AsciiCP(type); this.list = elems; } public AnnotationAttr() { // } public void setType(String type){ this.type = new AsciiCP(type); } public void addElemValPair(ElemValPair pair){ list.add(pair); } int size(){ int i = 4; if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ i += ((ElemValPair)it.next()).size(); } } return i; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(type)); if (list == null){ out.writeShort(0); } else { out.writeShort(list.size()); // fixed length } if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ ((ElemValPair)it.next()).write(e, out); } } } } lib/jas/src/jas/AnnotationDefaultAttr.java100644 0 0 1712 10240435426 16212 0ustar 0 0 /** * Signature attributes are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class AnnotationDefaultAttr { static CP attr = new AsciiCP("AnnotationDefault"); ElemValPair elem; void resolve(ClassEnv e){ e.addCPItem(attr); elem.resolve(e); } /** * Note: A signature attr is associated with a class, * method or field so you need to create a new SignatureAttr for */ public AnnotationDefaultAttr(ElemValPair s) { // elem = s; } int size(){ return elem.size(); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); out.writeInt(size()); // fixed length elem.write(e, out); } } lib/jas/src/jas/ArrayElemValPair.java100644 0 0 4054 10240435426 15102 0ustar 0 0 /** * ElemValPairs are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class ArrayElemValPair extends ElemValPair { ArrayList list; void resolve(ClassEnv e){ super.resolve(e); if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ ((ElemValPair)it.next()).resolve(e); } } } /** * Note: An annotation attr is associated with a class, * method or field so you need to create a new VisibilityAnnotationAttr for */ public ArrayElemValPair(String name, char kind, ArrayList list) { // super(name, kind); this.list = list; } public void 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); } public void addElemValPair(ElemValPair elem){ if (list == null){ list = new ArrayList(); } list.add(elem); } int size(){ int i = super.size(); i += 2; // array elem count short if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ i += ((ElemValPair)it.next()).size(); } } return i; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { super.write(e, out); if (list != null){ out.writeShort(list.size()); } else { out.writeShort(0); } if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ ((ElemValPair)it.next()).write(e, out); } } } } lib/jas/src/jas/AsciiCP.java100644 0 0 1124 10070636274 13215 0ustar 0 0 /** * This is a class to create Ascii CP entries. * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class AsciiCP extends CP implements RuntimeConstants { /** * @param s Name of the ascii constant pool entry */ public AsciiCP(String s) { uniq = s.intern(); } void resolve(ClassEnv e) { return; } public String toString() { return "AsciiCP: " + uniq; } void write(ClassEnv e, DataOutputStream out) throws IOException { out.writeByte(CONSTANT_UTF8); out.writeUTF(uniq); } } lib/jas/src/jas/Base64.java100644 0 0 15713 10070636274 13017 0ustar 0 0 // *** WARNING *** // This Soot file has been copied to jas, as it is required for // jas and jasmin compilation. In the unlikely event that any changes are // made to this file, they should be reflected in the Soot // distribution. // - Patrick Lam, 01/25/2001 // *** END-WARNING *** //////////////////////license & copyright header///////////////////////// // // // Base64 - encode/decode data using the Base64 encoding scheme // // // // Copyright (c) 1998 by Kevin Kelley // // // // This library is free software; you can redistribute it and/or // // modify it under the terms of the GNU Lesser General Public // // License as published by the Free Software Foundation; either // // version 2.1 of the License, or (at your option) any later version. // // // // This library is distributed in the hope that it will be useful, // // but WITHOUT ANY WARRANTY; without even the implied warranty of // // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // // GNU Lesser General Public License for more details. // // // // You should have received a copy of the GNU Lesser General Public // // License along with this library; if not, write to the Free Software // // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA // // 02111-1307, USA, or contact the author: // // // // Kevin Kelley - 30718 Rd. 28, La Junta, CO, // // 81050 USA. // // // ////////////////////end license & copyright header/////////////////////// package jas; /** * Provides encoding of raw bytes to base64-encoded characters, and * decoding of base64 characters to raw bytes. * * @author Kevin Kelley (kelley@ruralnet.net) * @version 1.3 * @date 06 August 1998 * @modified 14 February 2000 * @modified 22 September 2000 */ public class Base64 { /** * returns an array of base64-encoded characters to represent the * passed data array. * * @param data the array of bytes to encode * @return base64-coded character array. */ static public char[] encode(byte[] data) { char[] out = new char[((data.length + 2) / 3) * 4]; // // 3 bytes encode to 4 chars. Output is always an even // multiple of 4 characters. // for (int i=0, index=0; i>= 6; out[index+2] = alphabet[(trip? (val & 0x3F): 64)]; val >>= 6; out[index+1] = alphabet[val & 0x3F]; val >>= 6; out[index+0] = alphabet[val & 0x3F]; } return out; } /** * Decodes a BASE-64 encoded stream to recover the original * data. White space before and after will be trimmed away, * but no other manipulation of the input will be performed. * * As of version 1.2 this method will properly handle input * containing junk characters (newlines and the like) rather * than throwing an error. It does this by pre-parsing the * input and generating from that a count of VALID input * characters. **/ static public byte[] decode(char[] data) { // as our input could contain non-BASE64 data (newlines, // whitespace of any sort, whatever) we must first adjust // our count of USABLE data so that... // (a) we don't misallocate the output array, and // (b) think that we miscalculated our data length // just because of extraneous throw-away junk int tempLen = data.length; for( int ix=0; ix 255) || codes[ data[ix] ] < 0 ) --tempLen; // ignore non-valid chars and padding } // calculate required length: // -- 3 bytes for every 4 valid base64 chars // -- plus 2 bytes if there are 3 extra base64 chars, // or plus 1 byte if there are 2 extra. int len = (tempLen / 4) * 3; if ((tempLen % 4) == 3) len += 2; if ((tempLen % 4) == 2) len += 1; byte[] out = new byte[len]; int shift = 0; // # of excess bits stored in accum int accum = 0; // excess bits int index = 0; // we now go through the entire array (NOT using the 'tempLen' value) for (int ix=0; ix255)? -1: codes[ data[ix] ]; if ( value >= 0 ) // skip over non-code { accum <<= 6; // bits shift up by 6 each time thru shift += 6; // loop, with new bits being put in accum |= value; // at the bottom. if ( shift >= 8 ) // whenever there are 8 or more shifted in, { shift -= 8; // write them out (from the top, leaving any out[index++] = // excess at the bottom for next iteration. (byte) ((accum >> shift) & 0xff); } } // we will also have skipped processing a padding null byte ('=') here; // these are used ONLY for padding to an even length and do not legally // occur as encoded data. for this reason we can ignore the fact that // no index++ operation occurs in that special case: the out[] array is // initialized to all-zero bytes to start with and that works to our // advantage in this combination. } // if there is STILL something wrong we just have to throw up now! if( index != out.length) { throw new Error("Miscalculated data length (wrote " + index + " instead of " + out.length + ")"); } return out; } // // code characters for values 0..63 // static private char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" .toCharArray(); // // lookup table for converting base64 characters to value in range 0..63 // static private byte[] codes = new byte[256]; static { for (int i=0; i<256; i++) codes[i] = -1; for (int i = 'A'; i <= 'Z'; i++) codes[i] = (byte)( i - 'A'); for (int i = 'a'; i <= 'z'; i++) codes[i] = (byte)(26 + i - 'a'); for (int i = '0'; i <= '9'; i++) codes[i] = (byte)(52 + i - '0'); codes['+'] = 62; codes['/'] = 63; } } lib/jas/src/jas/CP.java100644 0 0 1253 10070636274 12247 0ustar 0 0 /** * this is an abstraction to contain all the CPE items * that can be created. * * @see AsciiCP * @see ClassCP * @see NameTypeCP * @see FieldCP * @see InterfaceCP * @see MethodCP * @see IntegerCP * @see LongCP * @see FloatCP * @see DoubleCP * @see StringCP * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; // one class to ring them all... import java.io.*; public abstract class CP { String uniq; String getUniq() { return uniq; } abstract void resolve(ClassEnv e); abstract void write(ClassEnv e, DataOutputStream out) throws IOException, jasError; } lib/jas/src/jas/CatchEntry.java100644 0 0 2600 10070636274 14006 0ustar 0 0 /** * This class * is used to build up entries in a catch table. * @see Catchtable * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class CatchEntry { Label start_pc, end_pc, handler_pc; CP catch_cpe; /** * Catch entries are created and then added to the Catchtable. * @param start Label marking the beginning of the area * where the catch table is active. * @param end Label marking the end of the area where the * table is active. * @param handler Label marking the entrypoint into the * exception handling routine. * @param cat (usually a classCP) informing the VM to direct * any exceptions of this (or its subclasses) to the handler. * @see Catchtable */ public CatchEntry(Label start, Label end, Label handler, CP cat) { start_pc = start; end_pc = end; handler_pc = handler; catch_cpe = cat; } void resolve(ClassEnv e) { if (catch_cpe != null) e.addCPItem(catch_cpe); } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { start_pc.writeOffset(ce, null, out); end_pc.writeOffset(ce, null, out); handler_pc.writeOffset(ce, null, out); if (catch_cpe != null) { out.writeShort(e.getCPIndex(catch_cpe)); } else { out.writeShort(0); } } } lib/jas/src/jas/Catchtable.java100644 0 0 3147 10070636274 14003 0ustar 0 0 /** * This is used to make a table of catch handlers for a method. * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class Catchtable { Vector entries; public Catchtable() { entries = new Vector(); } /** * add an entry to the catch table */ public void addEntry(CatchEntry entry) { entries.addElement(entry); } /** * add an entry to the catch table * @param start Label marking the beginning of the area * where the catch table is active. * @param end Label marking the end of the area where the * table is active. * @param handler Label marking the entrypoint into the * exception handling routine. * @param cat (usually a classCP) informing the VM to direct * any exceptions of this (or its subclasses) to the handler. */ public void addEntry(Label start, Label end, Label handler, CP cat) { addEntry(new CatchEntry(start, end, handler, cat)); } void resolve(ClassEnv e) { for (Enumeration en=entries.elements(); en.hasMoreElements(); ) { CatchEntry ce = (CatchEntry)(en.nextElement()); ce.resolve(e); } } int size() { return (8*entries.size()); } // each entry is 8 bytes void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { out.writeShort(entries.size()); for (Enumeration en = entries.elements(); en.hasMoreElements();) { CatchEntry entry = (CatchEntry)(en.nextElement()); entry.write(e, ce, out); } } } lib/jas/src/jas/ClassCP.java100644 0 0 1217 10070636274 13235 0ustar 0 0 /** * This is used to create a Class constant pool item * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class ClassCP extends CP implements RuntimeConstants { AsciiCP name; /** * @param name Name of the class */ public ClassCP(String name) { uniq = ("CLASS: #$%^#$" + name).intern(); this.name = new AsciiCP(name); } void resolve(ClassEnv e) { e.addCPItem(name); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeByte(CONSTANT_CLASS); out.writeShort(e.getCPIndex(name)); } } lib/jas/src/jas/ClassElemValPair.java100644 0 0 1662 10240435426 15073 0ustar 0 0 /** * ElemValPairs are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class ClassElemValPair extends ElemValPair { AsciiCP cval; void resolve(ClassEnv e){ super.resolve(e); e.addCPItem(cval); } /** * Note: An annotation attr is associated with a class, * method or field so you need to create a new VisibilityAnnotationAttr for */ public ClassElemValPair(String name, char kind, String cval) { // super(name, kind); this.cval = new AsciiCP(cval); } int size(){ return super.size() + 2; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { super.write(e, out); out.writeShort(e.getCPIndex(cval)); } } lib/jas/src/jas/ClassEnv.java100644 0 0 27054 11025352105 13477 0ustar 0 0 package jas; import java.io.*; import java.util.Hashtable; import java.util.Enumeration; import java.util.Vector; import java.util.Iterator; /** * This is the place where all information about the class to * be created resides. * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ public class ClassEnv implements RuntimeConstants { int magic; short version_lo, version_hi; CP this_class, super_class; short class_access; Hashtable cpe, cpe_index; Vector interfaces; Vector vars; Vector methods; SourceAttr source; Vector generic; boolean hasSuperClass; InnerClassAttr inner_class_attr; boolean classSynth; SyntheticAttr synthAttr; DeprecatedAttr deprAttr = null; SignatureAttr sigAttr = null; VisibilityAnnotationAttr visAnnotAttr = null; VisibilityAnnotationAttr invisAnnotAttr = null; EnclMethAttr encl_meth_attr; boolean highVersion = false; public ClassEnv() { // Fill in reasonable defaults magic = JAVA_MAGIC; version_lo = (short) JAVA_MINOR_VERSION; version_hi = (short) JAVA_VERSION; // Initialize bags cpe = new Hashtable(); cpe_index = null; interfaces = new Vector(); vars = new Vector(); methods = new Vector(); generic = new Vector(); } 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; } /** * Define this class to have this name. * @param name CPE representing name for class. (This is usually * a ClassCP) */ public void setClass(CP name) { this_class = name; addCPItem(name); } /** * Define this class to have no superclass. Should only ever * be used for java.lang.Object */ public void setNoSuperClass() { hasSuperClass = false; } /** * Define this class to have this superclass * @param name CPE representing name for class. (This is usually * a ClassCP) */ public void setSuperClass(CP name) { hasSuperClass = true; super_class = name; addCPItem(name); } /** * Set the class access for this class. Constants understood * by this are present along with the java Beta distribution. * @param access number representing access permissions for * the entire class. * @see RuntimeConstants */ public void setClassAccess(short access) { class_access = access; } /** * Add this CP to the list of interfaces supposedly implemented by * this class. Note that the CP ought to be a ClassCP to make * sense to the VM. */ public void addInterface(CP ifc) { addCPItem(ifc); interfaces.addElement(ifc); } /** * Add this to the list of interfaces supposedly implemented * by this class. Note that each CP is usually a ClassCP. * @param ilist An array of CP items representing the * interfaces implemented by this class. */ public void addInterface(CP ilist[]) { for (int i=0; i 32K become negative and then not made wide /* short */ int getCPIndex(CP cp) throws jasError { if (cpe_index == null) { throw new jasError("Internal error: CPE index has not been generated"); } //System.out.println("cp uniq: "+cp.getUniq()); //System.out.println("cpe_index: "+cpe_index); Integer idx = (Integer)(cpe_index.get(cp.getUniq())); // LJH ----------------------------- //System.out.println("Getting idx " + idx); if (idx == null) throw new jasError("Item " + cp + " not in the class"); return (idx.intValue()); } } lib/jas/src/jas/CodeAttr.java100644 0 0 16267 10242732000 13466 0ustar 0 0 // CHANGES, // Instead of calling soot.tagkits.JasminAttribute.decode, // jas has its own CodeAttributeDecode class which performs // the same functionality. It will remove the dependency to // soot package. However, the decode method should be changed // according to the format of CodeAttribute if the format is // changed in the future. // Feng Qian // Jan 25, 2001 /** * CodeAttr's are used as a bag to hold lists of instructions * until it is time to put them into a Class. * @see ClassEnv#addMethod * @author $Author: olhota $ * @version $Revision: 1.2 $ */ package jas; import java.io.*; import java.util.*; public class CodeAttr { static CP attr = new AsciiCP("Code"); short stack_size, num_locals; int code_size; Vector insns; Hashtable insn_pc; Catchtable ctb; LineTableAttr ltab; LocalVarTableAttr lvar; Vector generic; Vector sootAttrNames = new Vector(); Vector sootAttrValues = new Vector(); Hashtable labels; /** * Create a new bag. Add instructions with the addInsn() method, * set the catch table with the setCatchTable() method. * @see Insn * @see Catchtable * @see ClassEnv#addMethod */ public CodeAttr() { this.stack_size = 1; this.num_locals = 1; this.ctb = null; this.insns = new Vector(); generic = new Vector(); } /** * Set the catchtable for this code */ public void setCatchtable(Catchtable ctb) { this.ctb = ctb; } /** * Set the line number table for this method */ public void setLineTable(LineTableAttr ltab) { this.ltab = ltab; } /** * Set the local variable information for this method */ public void setLocalVarTable(LocalVarTableAttr lvar) { this.lvar = lvar; } /** * Add a generic attribute to the method. A generic attribute * contains a stream of uninterpreted bytes which is ignored by * the VM (as long as its name doesn't conflict with other names * for attributes that are understood by the VM) */ public void addGenericAttr(GenericAttr g) { generic.addElement(g); } public void addSootCodeAttr(String name, String value) { sootAttrNames.addElement(name); sootAttrValues.addElement(value); } Label getLabel(String name) { Label lab = (Label)labels.get(name); if (lab == null) { lab = new Label(name); labels.put(name, lab); } return lab; } public void setLabelTable(Hashtable labelTable) { labels = labelTable; } private int processSootAttributes() { Hashtable labelToPc = new Hashtable(); int totalSize = 0; Enumeration enumeration = sootAttrValues.elements(); Enumeration nameEnum = sootAttrNames.elements(); while(enumeration.hasMoreElements()) { String attrValue = (String) enumeration.nextElement(); String attrName = (String) nameEnum.nextElement(); boolean isLabel = false;//xx what if it starts with % StringTokenizer st = new StringTokenizer(attrValue, "%", true); while(st.hasMoreTokens()) { String token = (String) st.nextElement(); if( token.equals( "%" ) ) { isLabel = !isLabel; continue; } if(isLabel) { Integer i = (Integer) labelToPc.get(token); try { if(i == null) labelToPc.put(token, new Integer( getPc(getLabel(token)))); } catch(jas.jasError e) {throw new RuntimeException(e.toString());} } } byte[] data = CodeAttributeDecoder.decode(attrValue, labelToPc); GenericAttr ga = new GenericAttr(attrName, data); totalSize += ga.size(); addGenericAttr(ga); } sootAttrNames.removeAllElements(); sootAttrValues.removeAllElements(); return totalSize; } /** * Append a new Insn to this code. Insn's are sequentially * stored, in the order in which this method is called. You * can't reorder code fragments after you've added it here. */ public void addInsn(Insn insn) { insns.addElement(insn); } public void setStackSize(short stack_size) { this.stack_size = stack_size; } public void setVarSize(short num_vars) { num_locals = num_vars; } void resolve(ClassEnv e) { // propagate this resolution to // the insns and catch table, so // that any CP's referenced by them // also get added. e.addCPItem(attr); for (Enumeration en = insns.elements(); en.hasMoreElements();) { Insn i = (Insn)(en.nextElement()); i.resolve(e); } if (ctb != null) ctb.resolve(e); if (ltab != null) ltab.resolve(e); if (lvar != null) lvar.resolve(e); for (Enumeration gen = generic.elements(); gen.hasMoreElements();) { GenericAttr gattr = (GenericAttr)gen.nextElement(); gattr.resolve(e); } } public int getPc(Insn i) throws jasError { if (insn_pc == null){ throw new jasError("Internal error, insn_pc has not been initialized"); } Integer tmp; if (i instanceof Label) { tmp = (Integer)(insn_pc.get(((Label)i).id)); } else { tmp = (Integer)(insn_pc.get(i)); } if (tmp == null) throw new jasError(i + " has not been added to the code"); return tmp.intValue(); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { // First, resolve all labels and // compute total size int code_size = 0; insn_pc = new Hashtable(); for (Enumeration en = insns.elements(); en.hasMoreElements();) { Insn now = (Insn)(en.nextElement()); if (now instanceof Label) { insn_pc.put(((Label)now).id, new Integer(code_size)); } else { insn_pc.put(now, new Integer(code_size)); } code_size += now.size(e, this); } int total_size = code_size; if (ctb != null) total_size += ctb.size(); if (ltab != null) total_size += ltab.size(); if (lvar != null) total_size += lvar.size(); for (Enumeration gen = generic.elements(); gen.hasMoreElements();) { GenericAttr gattr = (GenericAttr)(gen.nextElement()); total_size += gattr.size(); } total_size += processSootAttributes(); // extra headers total_size += 12; out.writeShort(e.getCPIndex(attr)); out.writeInt(total_size); out.writeShort(stack_size); out.writeShort(num_locals); out.writeInt(code_size); for (Enumeration en = insns.elements(); en.hasMoreElements();) { Insn now = (Insn)(en.nextElement()); now.write(e, this, out); } if (ctb != null) { ctb.write(e, this, out); } else { out.writeShort(0); } short extra = 0; if (ltab != null) extra++; if (lvar != null) extra++; extra += generic.size(); out.writeShort(extra); if (ltab != null) { ltab.write(e, this, out); } if (lvar != null) { lvar.write(e, this, out); } for (Enumeration gen = generic.elements(); gen.hasMoreElements();) { GenericAttr gattr = (GenericAttr)gen.nextElement(); gattr.write(e, out); } } public String toString() { return ("<#code-attr>"); } } lib/jas/src/jas/CodeAttributeDecoder.java100644 0 0 6744 10070637625 16004 0ustar 0 0 // CHANGES // This is a customized copy of soot.tagkits.JasminAttribute class. // It decodes the CodeAttribute format. // Read comments on CodeAttr.java for more information. // Feng Qian // Jan 25, 2001 /* Soot - a J*va Optimization Framework * Copyright (C) 2000 Patrice Pominville and Feng Qian * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * Modified by the Sable Research Group and others 1997-1999. * See the 'credits' file distributed with Soot for the complete list of * contributors. (Soot is distributed at http://www.sable.mcgill.ca/soot) */ package jas; import java.util.*; import java.io.*; /** * This class must be extended by Attributes that can * be emitted in Jasmin. The attributes must format their data * in Base64 and if Unit references they may contain must be emitted as * labels embedded and * escaped in the attribute's Base64 data stream at the location where the value * of their pc is to occur. For example:

 
    aload_1
    iload_2
    label2:
    iaload
 label3:
    iastore
    iinc 2 1
    label0:
    iload_2
    aload_0
    arraylength
 label4:
   if_icmplt label1
   return
 .code_attribute ArrayCheckAttribute "%label2%Aw==%label3%Ag==%label4%Ag=="

* */ class CodeAttributeDecoder { public static byte[] decode(String attr, Hashtable labelToPc) { List attributeHunks = new LinkedList(); int attributeSize = 0; int tableSize = 0; StringTokenizer st = new StringTokenizer(attr, "%", true); boolean isLabel = false; byte[] pcArray; while(st.hasMoreTokens()) { String token = st.nextToken(); if( token.equals( "%" ) ) { isLabel = !isLabel; continue; } if(isLabel) { Integer pc = (Integer) labelToPc.get(token); if(pc == null) throw new RuntimeException("PC is null, the token is "+token); int pcvalue = pc.intValue(); if(pcvalue > 65535) throw new RuntimeException("PC great than 65535, the token is "+token+" : " +pcvalue); pcArray = new byte[2]; pcArray[1] = (byte)(pcvalue&0x0FF); pcArray[0] = (byte)((pcvalue>>8)&0x0FF); attributeHunks.add(pcArray); attributeSize += 2; tableSize++; } else { byte[] hunk = Base64.decode(token.toCharArray()); attributeSize += hunk.length; attributeHunks.add(hunk); } } attributeSize += 2; byte[] attributeValue = new byte[attributeSize]; attributeValue[0] = (byte)((tableSize>>8)&0x0FF); attributeValue[1] = (byte)(tableSize&0x0FF); int index = 2; Iterator it = attributeHunks.iterator(); while(it.hasNext()) { byte[] hunk = (byte[]) it.next(); for(int i = 0; i < hunk.length; i++) { attributeValue[index++] = hunk[i]; } } if(index != (attributeSize)) throw new RuntimeException("Index does not euqal to attrubute size :"+index+" -- "+attributeSize); return attributeValue; } } lib/jas/src/jas/ConstAttr.java100644 0 0 1601 10070636274 13663 0ustar 0 0 /** * This is typically used to represent a constant value for * a field entry (as in static final int foo = 20). * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class ConstAttr { static CP attr = new AsciiCP("ConstantValue"); CP val; /** * Create a new constant attribute whose constant value * is picked up from constant pool with the given entry. * @param val Constant pool item whose value is associated * with the constant value attribute */ public ConstAttr(CP val) { this.val = val; } void resolve(ClassEnv e) { e.addCPItem(val); e.addCPItem(attr); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); out.writeInt(2); out.writeShort(e.getCPIndex(val)); } } lib/jas/src/jas/DeprecatedAttr.java100644 0 0 1074 10240435426 14634 0ustar 0 0 /** * This is used to represent the deprecated attr * * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class DeprecatedAttr { static CP attr = new AsciiCP("Deprecated"); /** * Create a new deprecated attribute */ public DeprecatedAttr() { } void resolve(ClassEnv e) { e.addCPItem(attr); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); out.writeInt(0); } } lib/jas/src/jas/DoubleCP.java100644 0 0 1114 10070636274 13376 0ustar 0 0 package jas; import java.io.*; /** * Wrap an Double constant reference with this CPE. * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ public class DoubleCP extends CP implements RuntimeConstants { double val; /** * @param n Value for Double constant */ public DoubleCP(double n) { uniq = ("Double: @#$" + n).intern(); val = n; } void resolve(ClassEnv e) { return; } void write(ClassEnv e, DataOutputStream out) throws IOException { out.writeByte(CONSTANT_DOUBLE); out.writeDouble(val); } } lib/jas/src/jas/DoubleElemValPair.java100644 0 0 1657 10240435426 15244 0ustar 0 0 /** * ElemValPairs are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class DoubleElemValPair extends ElemValPair{ DoubleCP val; void resolve(ClassEnv e){ super.resolve(e); e.addCPItem(val); } /** * Note: An annotation attr is associated with a class, * method or field so you need to create a new VisibilityAnnotationAttr for */ public DoubleElemValPair(String name, char kind, double val) { // super(name, kind); this.val = new DoubleCP(val); } int size(){ return super.size() + 2; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { super.write(e, out); out.writeShort(e.getCPIndex(val)); } } lib/jas/src/jas/ElemValPair.java100644 0 0 2030 10240435426 14073 0ustar 0 0 /** * ElemValPairs are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class ElemValPair { AsciiCP name; byte kind; boolean noName; void resolve(ClassEnv e){ e.addCPItem(name); } /** * Note: An annotation attr is associated with a class, * method or field so you need to create a new VisibilityAnnotationAttr for */ public ElemValPair(String name, char kind) { // this.name = new AsciiCP(name); this.kind = (byte)kind; } int size(){ if (noName) return 1; return 3; } public void setNoName(){ noName = true; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { if (!noName){ out.writeShort(e.getCPIndex(name)); } out.writeByte(kind); } } lib/jas/src/jas/EnclMethAttr.java100644 0 0 2162 10240435426 14272 0ustar 0 0 /** * EnclMeth attributes are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class EnclMethAttr { static CP attr = new AsciiCP("EnclosingMethod"); ClassCP cls; NameTypeCP meth; void resolve(ClassEnv e){ e.addCPItem(attr); e.addCPItem(cls); e.addCPItem(meth); } /** * Note: An enclosing method attr is associated with a class, * so you need to create a new EnclMethAttr for each anon or * local class you create */ public EnclMethAttr(String a, String b, String c) { // cls = new ClassCP(a); meth = new NameTypeCP(b, c); } int size(){ return 4; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); out.writeInt(4); // fixed length out.writeShort(e.getCPIndex(cls)); out.writeShort(e.getCPIndex(meth)); } } lib/jas/src/jas/EnumElemValPair.java100644 0 0 2101 10240435426 14717 0ustar 0 0 /** * ElemValPairs are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class EnumElemValPair extends ElemValPair { AsciiCP tval; AsciiCP cval; void resolve(ClassEnv e){ super.resolve(e); e.addCPItem(tval); e.addCPItem(cval); } /** * Note: An annotation attr is associated with a class, * method or field so you need to create a new VisibilityAnnotationAttr for */ public EnumElemValPair(String name, char kind, String tval, String cval) { // super(name, kind); this.tval = new AsciiCP(tval); this.cval = new AsciiCP(cval); } int size(){ return super.size() + 4; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { super.write(e, out); out.writeShort(e.getCPIndex(tval)); out.writeShort(e.getCPIndex(cval)); } } lib/jas/src/jas/ExceptAttr.java100644 0 0 2123 10070636274 14025 0ustar 0 0 /** * This attribute is associated with a method, and indicates * the set of exceptions (as classCP items) that can be thrown * by the method. * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class ExceptAttr { static CP attr = new AsciiCP("Exceptions"); Vector cps; public ExceptAttr() { cps = new Vector(); } /** * @param clazz Exception class to be added to attribute. This is * typically a ClassCP */ public void addException(CP cp) { cps.addElement(cp); } void resolve(ClassEnv e) { e.addCPItem(attr); for (Enumeration en = cps.elements(); en.hasMoreElements();) { e.addCPItem((CP)(en.nextElement())); } } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); out.writeInt(cps.size()*2 + 2); out.writeShort(cps.size()); for (Enumeration en = cps.elements(); en.hasMoreElements();) { out.writeShort(e.getCPIndex((CP)(en.nextElement()))); } } } lib/jas/src/jas/FieldCP.java100644 0 0 2306 10070636274 13213 0ustar 0 0 /** * FieldCP's are used to refer to a field in a particular * class. * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class FieldCP extends CP implements RuntimeConstants { ClassCP clazz; NameTypeCP nt; /** * FieldCP's are created by specifying the class to which the * field belongs, the name of the symbol, and its signature. * For instance, to refer to the field out in * System.out use * new FieldCP("java/lang/System", "out", "Ljava/io/PrintStream;") * * @param clazz Name of class * @param name Name of symbol * @param sig Signature for symbol */ public FieldCP(String clazz, String name, String sig) { uniq = (clazz + "&%$#&" + name + "*()#$" + sig).intern(); this.clazz = new ClassCP(clazz); this.nt = new NameTypeCP(name, sig); } void resolve(ClassEnv e) { e.addCPItem(clazz); e.addCPItem(nt); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeByte(CONSTANT_FIELD); out.writeShort(e.getCPIndex(clazz)); out.writeShort(e.getCPIndex(nt)); } } lib/jas/src/jas/FloatCP.java100644 0 0 1103 10070636274 13227 0ustar 0 0 package jas; import java.io.*; /** * Wrap an Float constant reference with this CPE. * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ public class FloatCP extends CP implements RuntimeConstants { float val; /** * @param n Value for Float constant */ public FloatCP(float n) { uniq = ("Float: @#$" + n).intern(); val = n; } void resolve(ClassEnv e) { return; } void write(ClassEnv e, DataOutputStream out) throws IOException { out.writeByte(CONSTANT_FLOAT); out.writeFloat(val); } } lib/jas/src/jas/FloatElemValPair.java100644 0 0 1656 10240435426 15076 0ustar 0 0 /** * ElemValPairs are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class FloatElemValPair extends ElemValPair{ FloatCP val; void resolve(ClassEnv e){ super.resolve(e); e.addCPItem(val); } /** * Note: An annotation attr is associated with a class, * method or field so you need to create a new VisibilityAnnotationAttr for */ public FloatElemValPair(String name, char kind, float val) { // super(name, kind); this.val = new FloatCP(val); } int size(){ return super.size() + 2; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { super.write(e, out); out.writeShort(e.getCPIndex(val)); } } lib/jas/src/jas/GenericAttr.java100644 0 0 2572 10070636274 14161 0ustar 0 0 /** * This is an opaque attribute that lets you add an uninterpreted * stream of bytes into an attribute in a class file. This can be * used (for instance) to embed versioning or signatures into the * class file or method. * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class GenericAttr { CP attr_name; byte data[]; /** * Make up a new attribute * @param name Name to be associated with the attribute * @data stream of bytes to be placed with the attribute * @see ClassEnv#addGenericAttr * @see CodeAttr#addGenericAttr */ public GenericAttr(String name, byte data[]) { attr_name = new AsciiCP(name); this.data = data; } /** * Make up a new attribute * @param name CP to be defined as the name of the attribute * @data stream of bytes to be placed with the attribute * @see ClassEnv#addGenericAttr * @see CodeAttr#addGenericAttr */ public GenericAttr(CP name, byte data[]) { attr_name = name; this.data = data; } void resolve(ClassEnv e) { e.addCPItem(attr_name); } int size() { return (2 + 4 + data.length); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr_name)); out.writeInt(data.length); out.write(data); } } lib/jas/src/jas/IincInsn.java100644 0 0 1737 10070636274 13466 0ustar 0 0 /** * Some instructions are perniticky enough that its simpler * to write them separately instead of smushing them with * all the rest. the iinc instruction is one of them. * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class IincInsn extends Insn implements RuntimeConstants { /** * @param vindex Index of variable to be incremented. * @param increment value to be added to the variable. * * A wide prefix is automatically added if either the * vindex exceeds 256, or the increment value lies * outside the range [-128, 127] * * The VM spec is unclear on how the wide instruction is implemented, * but the implementation makes both the constant and the * variable index 16 bit values for the wide version of this instruction. */ public IincInsn(int vindex, int increment) { opc = opc_iinc; operand = new IincOperand(vindex, increment); } } lib/jas/src/jas/InnerClassAttr.java100644 0 0 3442 10073526737 14650 0ustar 0 0 /** * InnerClass attributes are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class InnerClassAttr { static CP attr = new AsciiCP("InnerClasses"); short attr_length = 0; short num = 0; ArrayList list; /** * Note: An inner class attr is associated with a class, so you * need to create a new InnerClassAttr for each class you create */ public InnerClassAttr() { // list = new ArrayList(); } void resolve(ClassEnv e){ e.addCPItem(attr); if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ ((InnerClassSpecAttr)it.next()).resolve(e); } } } int size(){ return (2 + // name_idx 4 + // attr_len 2 + // inner class len spec 8*(list.size())); // table } public void addInnerClassSpec(InnerClassSpecAttr attr){ list.add(attr); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); //out.writeInt(size()); out.writeInt(2+8*list.size()); out.writeShort(list.size()); Iterator it = list.iterator(); while(it.hasNext()){ ((InnerClassSpecAttr)it.next()).write(e, out); } /*for (Enumeration en = pc.elements(), ien = line.elements(); en.hasMoreElements();) { Label l = (Label)(en.nextElement()); Integer i = (Integer)(ien.nextElement()); l.writeOffset(ce, null, out); out.writeShort((int) i.intValue());*/ } } lib/jas/src/jas/InnerClassSpecAttr.java100644 0 0 4100 10073526737 15453 0ustar 0 0 /** * InnerClassSpec attributes are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class InnerClassSpecAttr { String inner_class_name; String outer_class_name; String inner_name; short access; void resolve(ClassEnv e){ e.addCPItem(new ClassCP(inner_class_name)); if (!outer_class_name.equals("null")){ e.addCPItem(new ClassCP(outer_class_name)); } if (!inner_name.equals("null")){ e.addCPItem(new AsciiCP(inner_name)); } } /** * Note: An inner class attr is associated with a class, so you * need to create a new InnerClassAttr for each class you create */ public InnerClassSpecAttr(String a, String b, String c, short d) { // inner_class_name = a; outer_class_name = b; inner_name = c; access = d; } int size(){ return 8; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(new ClassCP(inner_class_name))); if (outer_class_name.equals("null")){ out.writeShort(0); } else { out.writeShort(e.getCPIndex(new ClassCP(outer_class_name))); } if (inner_name.equals("null")){ out.writeShort(0); } else { out.writeShort(e.getCPIndex(new AsciiCP(inner_name))); } out.writeShort(access); /*out.writeShort(e.getCPIndex(attr)); out.writeInt(2 + 4*(pc.size())); out.writeShort(pc.size()); for (Enumeration en = pc.elements(), ien = line.elements(); en.hasMoreElements();) { Label l = (Label)(en.nextElement()); Integer i = (Integer)(ien.nextElement()); l.writeOffset(ce, null, out); out.writeShort((int) i.intValue());*/ } } lib/jas/src/jas/Insn.java100644 0 0 13240 10240435426 12666 0ustar 0 0 /** * An Insn is a generic instruction that is added to a * CodeAttr to build up the code for a method. * @see CodeAttr * @see RuntimeConstants * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class Insn implements RuntimeConstants { int opc; InsnOperand operand; // private constructor, for the // "strange" opcodes Insn() { return; } /** * Instructions with no arguments are built with * this constructor. */ public Insn(int opc) throws jasError { if (opcLengths[opc] == 1) { operand = null; this.opc = opc; return; } throw new jasError (opcNames[opc] + " cannot be used without more parameters"); } /** * Instructions that take a single numeric argument. These are * opc_bipush, * opc_sipush, * opc_ret, * opc_iload, * opc_lload, * opc_fload, * opc_dload, * opc_aload, * opc_istore, * opc_lstore, * opc_fstore, * opc_dstore, * opc_astore, * opc_newarray * * Note that an extra wide prefix is automatically added * for the following instructions if the numeric argument * is larger than 256. Also note that while the spec makes * no mention of opc_ret as being a "wideable" opcode, thats * how the VM is implemented. * * opc_ret: * opc_iload: * opc_lload: * opc_fload: * opc_dload: * opc_aload: * opc_istore: * opc_lstore: * opc_fstore: * opc_dstore: * opc_astore: * */ public Insn(int opc, int val) throws jasError { this.opc = opc; switch (opc) { case opc_bipush: operand = new ByteOperand(val); break; case opc_sipush: operand = new ShortOperand(val); break; case opc_newarray: operand = new UnsignedByteOperand(val); break; case opc_ret: case opc_iload: case opc_lload: case opc_fload: case opc_dload: case opc_aload: case opc_istore: case opc_lstore: case opc_fstore: case opc_dstore: case opc_astore: operand = new UnsignedByteWideOperand(val); break; default: throw new jasError (opcNames[opc] + " does not take a numeric argument"); } } /** * Instructions that take a Label as an argument. These are * opc_jsr, * opc_goto, * opc_if_acmpne, * opc_if_acmpeq, * opc_if_icmpge, * opc_if_icmple, * opc_if_icmpgt, * opc_if_icmplt, * opc_if_icmpne, * opc_if_icmpeq, * opc_ifge, * opc_ifgt, * opc_ifne, * opc_ifle, * opc_iflt, * opc_ifeq, * opc_ifnull, * opc_ifnonnull, * opc_goto_w, * opc_jsr_w */ public Insn(int opc, Label target) throws jasError { this.opc = opc; switch(opc) { case opc_jsr: case opc_goto: case opc_if_acmpne: case opc_if_acmpeq: case opc_if_icmpge: case opc_if_icmple: case opc_if_icmpgt: case opc_if_icmplt: case opc_if_icmpne: case opc_if_icmpeq: case opc_ifge: case opc_ifgt: case opc_ifne: case opc_ifle: case opc_iflt: case opc_ifeq: case opc_ifnull: case opc_ifnonnull: operand = new LabelOperand(target, this); break; case opc_goto_w: case opc_jsr_w: operand = new LabelOperand(target, this, true); break; default: throw new jasError (opcNames[opc] + " does not take a label as its argument"); } } /** * This constructor is used for instructions that take a CP item * as their argument. These are * opc_anewarray, * opc_ldc_w, * opc_ldc2_w, * opc_invokenonvirtual, * opc_invokestatic, * opc_invokevirtual, * opc_new, * opc_checkcast, * opc_instanceof, * opc_getstatic, * opc_putstatic, * opc_getfield, * opc_putfield, * opc_ldc */ public Insn(int opc, CP arg) throws jasError { this.opc = opc; switch(opc) { case opc_anewarray: case opc_invokenonvirtual: case opc_invokestatic: case opc_invokevirtual: case opc_new: case opc_checkcast: case opc_instanceof: case opc_getstatic: case opc_putstatic: case opc_getfield: case opc_putfield: operand = new CPOperand(arg); break; case opc_ldc2_w: case opc_ldc_w: //System.out.println("ldc_w: arg: "+arg); operand = new LdcOperand(this, arg); break; case opc_ldc: operand = new LdcOperand(this, arg, false); break; default: throw new jasError (opcNames[opc] + " does not take a CP item as an argument"); } } // This allows the Insn a chance to // add things to the global env if // necessary. The CPInsnOperands // use this to add the CP to the // classEnv void resolve(ClassEnv e) { if (operand != null) { operand.resolve(e); } } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { if (operand != null) operand.writePrefix(e, ce, out); out.writeByte((byte) opc); if (operand != null) operand.write(e, ce, out); } int size(ClassEnv e, CodeAttr ce) throws jasError { if (operand == null) return 1; return (1 + operand.size(e, ce)); } } lib/jas/src/jas/InsnOperand.java100644 0 0 24436 10240435426 14210 0ustar 0 0 // This is not visible outside the // package. It is used to // handle the various types // of operands used by Insns. package jas; import java.io.*; abstract class InsnOperand { abstract void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError; abstract int size(ClassEnv e, CodeAttr code) throws jasError; abstract void resolve(ClassEnv e); void writePrefix(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { return; } } // Used to implement targets of Insns class LabelOperand extends InsnOperand { Label target; Insn source; boolean wide; LabelOperand(Label l, Insn source) { target = l; this.source = source; this.wide = false; } LabelOperand(Label l, Insn source, boolean wide) { target = l; this.source = source; this.wide = wide; } int size(ClassEnv ce, CodeAttr code) { if (wide) return 4; else return 2; } void resolve(ClassEnv e) { return; } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { if (wide) { target.writeWideOffset(ce, source, out); } else { target.writeOffset(ce, source, out); } } } class UnsignedByteOperand extends InsnOperand { int val; UnsignedByteOperand(int n) { val = n; } int size(ClassEnv ce, CodeAttr code) { return 1; } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { if (val >= 256) throw new jasError("Operand is too large (" +val+ ") for this instruction"); out.writeByte((byte)(0xff & val)); } void resolve(ClassEnv e) { return; } } // This (conditionally) adds a wide // prefix if the value is larger than // 256 class UnsignedByteWideOperand extends InsnOperand implements RuntimeConstants { int val; UnsignedByteWideOperand(int n) { val = n; } int size(ClassEnv ce, CodeAttr code) { if (val >= 256) return 3; return 1; } void writePrefix(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException { if (val > 255) out.writeByte((byte)(opc_wide)); } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException { if (val > 255) out.writeShort((short)(0xffff & val)); else out.writeByte((byte)(val & 0xff)); } void resolve(ClassEnv e) { return; } } class ByteOperand extends InsnOperand { int val; ByteOperand(int n) { val = n; } int size(ClassEnv ce, CodeAttr code) { return 1; } void resolve(ClassEnv e) { return; } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException { out.writeByte((byte)val); } } class IntegerOperand extends InsnOperand { int val; IntegerOperand(int n) { val = n; } int size(ClassEnv ce, CodeAttr code) { return 4; } void resolve(ClassEnv e) { return; } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException { out.writeInt(val); } } class ShortOperand extends InsnOperand { int offset; ShortOperand(int n) { offset = n; } void resolve(ClassEnv e) { return; } int size(ClassEnv ce, CodeAttr code) { return 2; } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException { out.writeShort((short)offset); } } class CPOperand extends InsnOperand { CP cpe; boolean wide; int size(ClassEnv ce, CodeAttr code) { if (wide) return 2; else return 1; } CPOperand(CP cpe) { this.cpe = cpe; wide = true; } CPOperand(CP cpe, boolean wide) { this.cpe = cpe; this.wide = wide; } void resolve(ClassEnv e) { e.addCPItem(cpe); } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { int idx = e.getCPIndex(cpe); if (wide) { out.writeShort((short) idx); } else { if (idx > 255) { throw new jasError("exceeded size for small cpidx" + cpe); } out.writeByte((byte) (0xff & (idx))); } } } // these are unique enough that // they need a separate handler for their // args class LdcOperand extends InsnOperand implements RuntimeConstants { CP cpe; Insn source; boolean wide; int size(ClassEnv ce, CodeAttr code) throws jasError { if (wide) { return 2; } else { // Should we promote it? int idx = ce.getCPIndex(cpe); // LJH // System.out.println("getting idx in size: " + idx); if (idx > 255) { wide = true; source.opc = opc_ldc_w; return 2; } return 1; } } LdcOperand(Insn s, CP cpe) { source = s; this.cpe = cpe; wide = true; } LdcOperand(Insn s, CP cpe, boolean wide) { source = s; this.cpe = cpe; this.wide = wide; } void resolve(ClassEnv e) { e.addCPItem(cpe); if (cpe instanceof ClassCP){ e.setHighVersion(true); } } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { int idx = e.getCPIndex(cpe); // LJH // System.out.println("Writing " + idx + " which as a short is " + // ((short) idx) + " and is " + wide); if (wide) { out.writeShort((short) idx); } else { if (idx > 255) { throw new jasError("exceeded size for small cpidx" + cpe); } out.writeByte((byte) (0xff & (idx))); } } } class InvokeinterfaceOperand extends InsnOperand { CP cpe; int nargs; InvokeinterfaceOperand(CP cpe, int nargs) { this.cpe = cpe; this.nargs = nargs; } int size(ClassEnv ce, CodeAttr code) { return 4; } void resolve(ClassEnv e) { e.addCPItem(cpe); } void write (ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(cpe)); out.writeByte((byte) (0xff & nargs)); out.writeByte(0); } } class IincOperand extends InsnOperand implements RuntimeConstants { int vindex, constt; IincOperand(int vindex, int constt) { this.vindex = vindex; this.constt = constt; } int size(ClassEnv ce, CodeAttr code) { if ((vindex > 255) || (constt > 127) || (constt < -128)) return 5; else return 2; } void resolve(ClassEnv e) { return; } void writePrefix(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException { if ((vindex > 255) || (constt > 127) || (constt < -128)) out.writeByte((byte)opc_wide); } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException { if ((vindex > 255) || (constt > 127) || (constt < -128)) { out.writeShort((short)(0xffff & vindex)); out.writeShort((short)(0xffff & constt)); } else { out.writeByte((byte) (0xff & vindex)); out.writeByte((byte) (0xff & constt)); } } } class MultiarrayOperand extends InsnOperand { CP cpe; int sz; MultiarrayOperand(CP cpe, int sz) { this.cpe = cpe; this.sz = sz; } void resolve(ClassEnv e) { e.addCPItem(cpe); } int size(ClassEnv ce, CodeAttr code) { return 3; } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(cpe)); out.writeByte((byte)(0xff & sz)); } } class LookupswitchOperand extends InsnOperand { Label dflt; Insn source; int match[]; Label jmp[]; LookupswitchOperand(Insn s, Label def, int m[], Label j[]) { dflt = def; jmp = j; match = m; source = s; } void resolve (ClassEnv e) { return; } int size(ClassEnv ce, CodeAttr code) throws jasError { int sz = 8; // 4 + 4 + padding + jumptable int source_pc = code.getPc(source); if (((source_pc+1) % 4) != 0) { // need padding sz += (4 - ((source_pc+1) % 4)); } if (jmp != null) { sz += 8*(jmp.length); } return sz; } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { int pad; int source_pc = ce.getPc(source); if (((source_pc+1) % 4) != 0) { // need padding pad = (4 - ((source_pc+1) % 4)); for (int x=0; xclass, * method or field so you need to create a new VisibilityAnnotationAttr for */ public IntElemValPair(String name, char kind, int val) { // super(name, kind); this.val = new IntegerCP(val); } int size(){ return super.size() + 2; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { super.write(e, out); out.writeShort(e.getCPIndex(val)); } } lib/jas/src/jas/IntegerCP.java100644 0 0 1111 10070636274 13556 0ustar 0 0 package jas; import java.io.*; /** * Wrap an integer constant reference with this CPE. * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ public class IntegerCP extends CP implements RuntimeConstants { int val; /** * @param n Value for integer constant */ public IntegerCP(int n) { uniq = ("Integer: @#$" + n).intern(); val = n; } void resolve(ClassEnv e) { return; } void write(ClassEnv e, DataOutputStream out) throws IOException { out.writeByte(CONSTANT_INTEGER); out.writeInt(val); } } lib/jas/src/jas/InterfaceCP.java100644 0 0 1717 10070636274 14075 0ustar 0 0 /** * An InterfaceCP is used to refer to an interface specification * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class InterfaceCP extends CP implements RuntimeConstants { ClassCP clazz; NameTypeCP nt; /** * @param cname Name of class defining the interface * @param varname symbol for the interface method * @param sig Signature for method */ public InterfaceCP(String cname, String varname, String sig) { uniq = (cname + "&%$#&" + varname + "*()#$" + sig).intern(); clazz = new ClassCP(cname); nt = new NameTypeCP(varname, sig); } void resolve(ClassEnv e) { e.addCPItem(clazz); e.addCPItem(nt); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeByte(CONSTANT_INTERFACEMETHOD); out.writeShort(e.getCPIndex(clazz)); out.writeShort(e.getCPIndex(nt)); } } lib/jas/src/jas/InvokeinterfaceInsn.java100644 0 0 1013 10070636274 15703 0ustar 0 0 /** * Some instructions are perniticky enough that its simpler * to write them separately instead of smushing them with * all the rest. the invokeinterface instruction is one of them. * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class InvokeinterfaceInsn extends Insn implements RuntimeConstants { public InvokeinterfaceInsn(CP cpe, int nargs) { opc = opc_invokeinterface; operand = new InvokeinterfaceOperand(cpe, nargs); } } lib/jas/src/jas/Label.java100644 0 0 3476 10070636274 12775 0ustar 0 0 /** * Labels are implemented as Insn's, but are special (read * unseemly blobs of hacked up code). First, they don't * actually cause any code to be written, and second, are * identified globally through a String label that is associated * with them when they are created. * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class Label extends Insn implements RuntimeConstants { String id; /** * Create a new Label with this tag. Any label with this tag * will be treated as being identical to this one. You can * reuse labels if you like */ public Label(String tag) { id = tag.intern(); opc = opc_label; operand = null; } // override the write method to do nothing. void write(ClassEnv e, CodeAttr ce, DataOutputStream out) { return; } // and the size method appropriately int size(ClassEnv e, CodeAttr ce) { return 0; } // This is called from the LabelOperand void writeOffset(CodeAttr ce, Insn source, DataOutputStream out) throws jasError, IOException { // write the offset (as a short) // of source int pc, tpc; pc = ce.getPc(this); if (source == null) tpc = 0; else tpc = ce.getPc(source); short offset = (short) (pc - tpc); out.writeShort(offset); } void writeWideOffset(CodeAttr ce, Insn source, DataOutputStream out) throws IOException, jasError { int pc, tpc; pc = ce.getPc(this); if (source == null) tpc = 0; else tpc = ce.getPc(source); out.writeInt(pc - tpc); } public String toString() { return ("Label: " + id); } } lib/jas/src/jas/LineTableAttr.java100644 0 0 3223 10070636274 14436 0ustar 0 0 /** * Line number table attributes are embedded into Code attributes * and used for further debugging information. * @see CodeAttr#setLineTable * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class LineTableAttr { static CP attr = new AsciiCP("LineNumberTable"); Vector line, pc; /** * Note: A line table is associated with a method, so you * need to create a new LineTableAttr for each method for which you add * debugging information. * @see CodeAttr#setLineTable */ public LineTableAttr() { line = new Vector(); pc = new Vector(); } /** * Add a pc to line number entry to the line table. * @param Label to the location in the class file * @param line Corresponding line number in the source file */ public void addEntry(Label l, int line) { pc.addElement(l); this.line.addElement(new Integer(line)); } void resolve(ClassEnv e) { e.addCPItem(attr); } int size() { return (2 + // name_idx 4 + // attr_len 2 + // line table len spec 4*(pc.size())); // table } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); out.writeInt(2 + 4*(pc.size())); out.writeShort(pc.size()); for (Enumeration en = pc.elements(), ien = line.elements(); en.hasMoreElements();) { Label l = (Label)(en.nextElement()); Integer i = (Integer)(ien.nextElement()); l.writeOffset(ce, null, out); out.writeShort((int) i.intValue()); } } } lib/jas/src/jas/LocalVarEntry.java100644 0 0 4110 10070636274 14465 0ustar 0 0 /** * This is an entry to be used as part of a LocalVarTableAttr. * It defines the scope and location of a local variable for a method * and is used while debugging. */ package jas; import java.io.*; public class LocalVarEntry { Label start, end; CP name, sig; int slot; /** * Create local variable scope information that can be used * while debugging. * @param startLabel beginning of scope for variable * @param endLabel end of scope for variable * @param name name of variable * @param sig signature for variable * @param slot index of the local variable in the local variables * registers of the VM where its value can be found */ public LocalVarEntry (Label startLabel, Label endLabel, String name, String sig, int slot) { start = startLabel; end = endLabel; this.name = new AsciiCP(name); this.sig = new AsciiCP(sig); this.slot = slot; } /** * Create local variable scope information that can be used * while debugging. * @param startLabel beginning of scope for variable * @param endLabel end of scope for variable * @param name CP to be associated as name of variable * @param sig CP to be associated as signature for variable * @param slot The index of the local variable in the local * variables part of the VM where its value can be found */ public LocalVarEntry (Label startLabel, Label endLabel, CP name, CP sig, int slot) { start = startLabel; end = endLabel; this.name = name; this.sig = sig; this.slot = slot; } void resolve(ClassEnv e) { e.addCPItem(name); e.addCPItem(sig); } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { start.writeOffset(ce, null, out); end.writeOffset(ce, start, out); // This is the *length*, // not another offset out.writeShort(e.getCPIndex(name)); out.writeShort(e.getCPIndex(sig)); out.writeShort((short)slot); } } lib/jas/src/jas/LocalVarTableAttr.java100644 0 0 3276 10070636274 15262 0ustar 0 0 /** * Local variable table attributes are embedded into Code attributes * and used for further debugging information. * @see CodeAttr#setLocalVar * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class LocalVarTableAttr { static CP attr = new AsciiCP("LocalVariableTable"); Vector vars; /** * Note: A local var is associated with a method, so you * need to create a new LocalVarTableAttr for each method for which you add * debugging information. * @see CodeAttr#setLocalVarTable */ public LocalVarTableAttr() { vars = new Vector(); } /** * Add a LocalVar Entry to the attribute * @param entry Local variable Entry to be added to the table */ public void addEntry(LocalVarEntry e) { vars.addElement(e); } void resolve(ClassEnv e) { e.addCPItem(attr); for (Enumeration en = vars.elements(); en.hasMoreElements();) { LocalVarEntry lv = (LocalVarEntry)(en.nextElement()); lv.resolve(e); } } int size() { return (2 + // name_idx 4 + // attr_len 2 + // line table len spec 10*(vars.size())); // table } void write(ClassEnv e, CodeAttr ce, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); out.writeInt(2 + 10*(vars.size())); out.writeShort(vars.size()); for (Enumeration en = vars.elements(); en.hasMoreElements();) { LocalVarEntry lv = (LocalVarEntry)(en.nextElement()); lv.write(e, ce, out); } } } lib/jas/src/jas/LongCP.java100644 0 0 1072 10070636274 13066 0ustar 0 0 package jas; import java.io.*; /** * Wrap an Long constant reference with this CPE. * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ public class LongCP extends CP implements RuntimeConstants { long val; /** * @param n Value for Long constant */ public LongCP(long n) { uniq = ("Long: @#$" + n).intern(); val = n; } void resolve(ClassEnv e) { return; } void write(ClassEnv e, DataOutputStream out) throws IOException { out.writeByte(CONSTANT_LONG); out.writeLong(val); } } lib/jas/src/jas/LongElemValPair.java100644 0 0 1645 10240435426 14726 0ustar 0 0 /** * ElemValPairs are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class LongElemValPair extends ElemValPair{ LongCP val; void resolve(ClassEnv e){ super.resolve(e); e.addCPItem(val); } /** * Note: An annotation attr is associated with a class, * method or field so you need to create a new VisibilityAnnotationAttr for */ public LongElemValPair(String name, char kind, long val) { // super(name, kind); this.val = new LongCP(val); } int size(){ return super.size() + 2; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { super.write(e, out); out.writeShort(e.getCPIndex(val)); } } lib/jas/src/jas/LookupswitchInsn.java100644 0 0 1325 10070636274 15270 0ustar 0 0 /** * Some instructions are perniticky enough that its simpler * to write them separately instead of smushing them with * all the rest. The lookupswitch instruction is one of them. * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class LookupswitchInsn extends Insn implements RuntimeConstants { /** * @param def default Label for switch * @param match array of match values for switch * @param target Label array of corresponding targets for each match */ public LookupswitchInsn(Label def, int match[], Label target[]) { opc = opc_lookupswitch; operand = new LookupswitchOperand(this, def, match, target); } } lib/jas/src/jas/Method.java100644 0 0 10700 11006131526 13170 0ustar 0 0 /** * This is used to encapsulate a CodeAttr so it can be added * into a class. * @see ClassEnv#addMethod * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class Method { short acc; CP name, sig; CodeAttr code; ExceptAttr excepts; SyntheticAttr synthAttr = null; DeprecatedAttr deprAttr = null; SignatureAttr sigAttr = null; VisibilityAnnotationAttr vis_annot_attr = null; VisibilityAnnotationAttr invis_annot_attr = null; ParameterVisibilityAnnotationAttr param_vis_annot_attr = null; ParameterVisibilityAnnotationAttr param_invis_annot_attr = null; AnnotationDefaultAttr annotDef = null; Vector genericAttrs = new Vector(); /** * @param macc method access permissions. It is a combination * of the constants provided from RuntimeConstants * @param name CP item representing name of method. * @param sig CP item representing signature for object * @param code The actual code for the object * @param ex Any exceptions associated with object */ public Method (short macc, CP name, CP sig, CodeAttr cd, ExceptAttr ex) { acc = macc; this.name = name; this.sig = sig; code = cd; excepts = ex; } public Method (short macc, CP name, CP sig, CodeAttr cd, ExceptAttr ex, SyntheticAttr synth) { acc = macc; this.name = name; this.sig = sig; code = cd; excepts = ex; synthAttr = synth; } public void addGenericAttr(GenericAttr g) { genericAttrs.addElement(g); } public void addDeprecatedAttr(DeprecatedAttr d) { deprAttr = d; } public void addSignatureAttr(SignatureAttr s) { sigAttr = s; } public void addVisAnnotationAttr(VisibilityAnnotationAttr v) { vis_annot_attr = v; } public void addInvisAnnotationAttr(VisibilityAnnotationAttr v) { invis_annot_attr = v; } public void addVisParamAnnotationAttr(ParameterVisibilityAnnotationAttr v) { param_vis_annot_attr = v; } public void addInvisParamAnnotationAttr(ParameterVisibilityAnnotationAttr v) { param_invis_annot_attr = v; } public void addAnnotationDef(AnnotationDefaultAttr v) { annotDef = v; } void resolve(ClassEnv e) { e.addCPItem(name); e.addCPItem(sig); if (code != null) code.resolve(e); if (excepts != null) excepts.resolve(e); if (synthAttr != null) synthAttr.resolve(e); if (deprAttr != null) deprAttr.resolve(e); if (sigAttr != null) sigAttr.resolve(e); if (vis_annot_attr != null) vis_annot_attr.resolve(e); if (invis_annot_attr != null) invis_annot_attr.resolve(e); if (param_vis_annot_attr != null) param_vis_annot_attr.resolve(e); if (param_invis_annot_attr != null) param_invis_annot_attr.resolve(e); if (annotDef != null) annotDef.resolve(e); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { short cnt = 0; out.writeShort(acc); out.writeShort(e.getCPIndex(name)); out.writeShort(e.getCPIndex(sig)); if (code != null) cnt ++; if (excepts != null) cnt++; cnt += genericAttrs.size(); if (synthAttr != null){ cnt++; } if (deprAttr != null){ cnt++; } if (sigAttr != null){ cnt++; } if (vis_annot_attr != null){ cnt++; } if (invis_annot_attr != null){ cnt++; } if (param_vis_annot_attr != null){ cnt++; } if (param_invis_annot_attr != null){ cnt++; } if (annotDef != null){ cnt++; } out.writeShort(cnt); if (code != null) code.write(e, out); if (excepts != null) excepts.write(e, out); if (synthAttr != null) synthAttr.write(e, out); if (deprAttr != null) deprAttr.write(e, out); if (sigAttr != null) sigAttr.write(e, out); if (vis_annot_attr != null) vis_annot_attr.write(e, out); if (invis_annot_attr != null) invis_annot_attr.write(e, out); if (param_vis_annot_attr != null) param_vis_annot_attr.write(e, out); if (param_invis_annot_attr != null) param_invis_annot_attr.write(e, out); if (annotDef != null) annotDef.write(e, out); for(Enumeration enu = genericAttrs.elements(); enu.hasMoreElements();) { ((GenericAttr)enu.nextElement()).write(e, out); } } } lib/jas/src/jas/MethodCP.java100644 0 0 1626 10070636274 13414 0ustar 0 0 /** * MethodCP's are used to make references to methods in classes * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class MethodCP extends CP implements RuntimeConstants { ClassCP clazz; NameTypeCP nt; /** * @param cname Class in which method exists * @param varname name of method * @param sig Signature of method */ public MethodCP(String cname, String varname, String sig) { uniq = cname + "&%$91&" + varname + "*(012$" + sig; clazz = new ClassCP(cname); nt = new NameTypeCP(varname, sig); } void resolve(ClassEnv e) { e.addCPItem(clazz); e.addCPItem(nt); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeByte(CONSTANT_METHOD); out.writeShort(e.getCPIndex(clazz)); out.writeShort(e.getCPIndex(nt)); } } lib/jas/src/jas/MultiarrayInsn.java100644 0 0 1135 10070636274 14725 0ustar 0 0 /** * Some instructions are perniticky enough that its simpler * to write them separately instead of smushing them with * all the rest. the multiarray instruction is one of them. * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class MultiarrayInsn extends Insn implements RuntimeConstants { /** * @param cpe CP item for the array type * @param sz number of dimensions for the array */ public MultiarrayInsn(CP cpe, int sz) { opc = opc_multianewarray; operand = new MultiarrayOperand(cpe, sz); } } lib/jas/src/jas/NameTypeCP.java100644 0 0 1641 10070636274 13713 0ustar 0 0 /** * Create a name/type entry constant pool entry * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class NameTypeCP extends CP implements RuntimeConstants { AsciiCP name, sig; /** * Name/type entries are used to specify the type associated * with a symbol name. * * @param name Name of symbol * @param sig Signature of symbol */ public NameTypeCP(String name, String sig) { uniq = ("NT : @#$%" + name + "SD#$"+ sig).intern(); this.name = new AsciiCP(name); this.sig = new AsciiCP(sig); } void resolve(ClassEnv e) { e.addCPItem(name); e.addCPItem(sig); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeByte(CONSTANT_NAMEANDTYPE); out.writeShort(e.getCPIndex(name)); out.writeShort(e.getCPIndex(sig)); } } lib/jas/src/jas/ParameterVisibilityAnnotationAttr.java100644 0 0 5002 11053342244 20610 0ustar 0 0 /** * Visibility annotation attributes are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class ParameterVisibilityAnnotationAttr { AsciiCP attr; ArrayList list = new ArrayList(); void resolve(ClassEnv e){ e.addCPItem(attr); if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ ((VisibilityAnnotationAttr)it.next()).resolve(e); } } } /** * Note: A visibility annotation attr is associated with a class, * method or field so you need to create a new VisibilityAnnotationAttr for */ public ParameterVisibilityAnnotationAttr(String kind, ArrayList vis_annotations) { // attr = new AsciiCP(kind+"Annotations"); list = vis_annotations; } public ParameterVisibilityAnnotationAttr() { // } public void setKind(String k){ attr = new AsciiCP(k+"Annotations"); } public void addAnnotation(VisibilityAnnotationAttr annot){ list.add(annot); } int size(){ int i = 1;//for num_parameters if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ i += ((VisibilityAnnotationAttr)it.next()).size(); } } return i; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); out.writeInt(size()); // fixed length if (list == null){ out.writeByte(0); } else { out.writeByte(list.size()); } if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ VisibilityAnnotationAttr vAttr = (VisibilityAnnotationAttr)it.next(); if (vAttr.getList() == null){ out.writeShort(0); } else { out.writeShort(vAttr.getList().size()); } if (vAttr.getList() != null){ Iterator ait = vAttr.getList().iterator(); while (ait.hasNext()){ ((AnnotationAttr)ait.next()).write(e,out); } } } } } } lib/jas/src/jas/RuntimeConstants.java100644 0 0 37074 10240435426 15312 0ustar 0 0 /* Constants used in JVM class files */ package jas; public interface RuntimeConstants { // top-level constants public static final int JAVA_MAGIC = -889275714; public static final int JAVA_VERSION = 46; 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; // constant pool entry types public static final int CONSTANT_UTF8 = 1; public static final int CONSTANT_UNICODE = 2; public static final int CONSTANT_INTEGER = 3; public static final int CONSTANT_FLOAT = 4; public static final int CONSTANT_LONG = 5; public static final int CONSTANT_DOUBLE = 6; public static final int CONSTANT_CLASS = 7; public static final int CONSTANT_STRING = 8; public static final int CONSTANT_FIELD = 9; public static final int CONSTANT_METHOD = 10; public static final int CONSTANT_INTERFACEMETHOD = 11; public static final int CONSTANT_NAMEANDTYPE = 12; // access flags public static final int ACC_PUBLIC = 1; public static final int ACC_PRIVATE = 2; public static final int ACC_PROTECTED = 4; public static final int ACC_STATIC = 8; public static final int ACC_FINAL = 16; public static final int ACC_SYNCHRONIZED = 32; public static final int ACC_VOLATILE = 64; public static final int ACC_TRANSIENT = 128; public static final int ACC_NATIVE = 256; public static final int ACC_INTERFACE = 512; public static final int ACC_ABSTRACT = 1024; public static final int ACC_STRICTFP = 2048; public static final int ACC_ANNOTATION = 8192; public static final int ACC_ENUM = 16384; public static final int ACC_SUPER = 32; // types for newarray public static final int T_CLASS = 2; public static final int T_BOOLEAN = 4; public static final int T_CHAR = 5; public static final int T_FLOAT = 6; public static final int T_DOUBLE = 7; public static final int T_BYTE = 8; public static final int T_SHORT = 9; public static final int T_INT = 10; public static final int T_LONG = 11; // opcodes public static final int opc_try = -3; public static final int opc_dead = -2; public static final int opc_label = -1; public static final int opc_nop = 0; public static final int opc_aconst_null = 1; public static final int opc_iconst_m1 = 2; public static final int opc_iconst_0 = 3; public static final int opc_iconst_1 = 4; public static final int opc_iconst_2 = 5; public static final int opc_iconst_3 = 6; public static final int opc_iconst_4 = 7; public static final int opc_iconst_5 = 8; public static final int opc_lconst_0 = 9; public static final int opc_lconst_1 = 10; public static final int opc_fconst_0 = 11; public static final int opc_fconst_1 = 12; public static final int opc_fconst_2 = 13; public static final int opc_dconst_0 = 14; public static final int opc_dconst_1 = 15; public static final int opc_bipush = 16; public static final int opc_sipush = 17; public static final int opc_ldc = 18; public static final int opc_ldc_w = 19; public static final int opc_ldc2_w = 20; public static final int opc_iload = 21; public static final int opc_lload = 22; public static final int opc_fload = 23; public static final int opc_dload = 24; public static final int opc_aload = 25; public static final int opc_iload_0 = 26; public static final int opc_iload_1 = 27; public static final int opc_iload_2 = 28; public static final int opc_iload_3 = 29; public static final int opc_lload_0 = 30; public static final int opc_lload_1 = 31; public static final int opc_lload_2 = 32; public static final int opc_lload_3 = 33; public static final int opc_fload_0 = 34; public static final int opc_fload_1 = 35; public static final int opc_fload_2 = 36; public static final int opc_fload_3 = 37; public static final int opc_dload_0 = 38; public static final int opc_dload_1 = 39; public static final int opc_dload_2 = 40; public static final int opc_dload_3 = 41; public static final int opc_aload_0 = 42; public static final int opc_aload_1 = 43; public static final int opc_aload_2 = 44; public static final int opc_aload_3 = 45; public static final int opc_iaload = 46; public static final int opc_laload = 47; public static final int opc_faload = 48; public static final int opc_daload = 49; public static final int opc_aaload = 50; public static final int opc_baload = 51; public static final int opc_caload = 52; public static final int opc_saload = 53; public static final int opc_istore = 54; public static final int opc_lstore = 55; public static final int opc_fstore = 56; public static final int opc_dstore = 57; public static final int opc_astore = 58; public static final int opc_istore_0 = 59; public static final int opc_istore_1 = 60; public static final int opc_istore_2 = 61; public static final int opc_istore_3 = 62; public static final int opc_lstore_0 = 63; public static final int opc_lstore_1 = 64; public static final int opc_lstore_2 = 65; public static final int opc_lstore_3 = 66; public static final int opc_fstore_0 = 67; public static final int opc_fstore_1 = 68; public static final int opc_fstore_2 = 69; public static final int opc_fstore_3 = 70; public static final int opc_dstore_0 = 71; public static final int opc_dstore_1 = 72; public static final int opc_dstore_2 = 73; public static final int opc_dstore_3 = 74; public static final int opc_astore_0 = 75; public static final int opc_astore_1 = 76; public static final int opc_astore_2 = 77; public static final int opc_astore_3 = 78; public static final int opc_iastore = 79; public static final int opc_lastore = 80; public static final int opc_fastore = 81; public static final int opc_dastore = 82; public static final int opc_aastore = 83; public static final int opc_bastore = 84; public static final int opc_castore = 85; public static final int opc_sastore = 86; public static final int opc_pop = 87; public static final int opc_pop2 = 88; public static final int opc_dup = 89; public static final int opc_dup_x1 = 90; public static final int opc_dup_x2 = 91; public static final int opc_dup2 = 92; public static final int opc_dup2_x1 = 93; public static final int opc_dup2_x2 = 94; public static final int opc_swap = 95; public static final int opc_iadd = 96; public static final int opc_ladd = 97; public static final int opc_fadd = 98; public static final int opc_dadd = 99; public static final int opc_isub = 100; public static final int opc_lsub = 101; public static final int opc_fsub = 102; public static final int opc_dsub = 103; public static final int opc_imul = 104; public static final int opc_lmul = 105; public static final int opc_fmul = 106; public static final int opc_dmul = 107; public static final int opc_idiv = 108; public static final int opc_ldiv = 109; public static final int opc_fdiv = 110; public static final int opc_ddiv = 111; public static final int opc_irem = 112; public static final int opc_lrem = 113; public static final int opc_frem = 114; public static final int opc_drem = 115; public static final int opc_ineg = 116; public static final int opc_lneg = 117; public static final int opc_fneg = 118; public static final int opc_dneg = 119; public static final int opc_ishl = 120; public static final int opc_lshl = 121; public static final int opc_ishr = 122; public static final int opc_lshr = 123; public static final int opc_iushr = 124; public static final int opc_lushr = 125; public static final int opc_iand = 126; public static final int opc_land = 127; public static final int opc_ior = 128; public static final int opc_lor = 129; public static final int opc_ixor = 130; public static final int opc_lxor = 131; public static final int opc_iinc = 132; public static final int opc_i2l = 133; public static final int opc_i2f = 134; public static final int opc_i2d = 135; public static final int opc_l2i = 136; public static final int opc_l2f = 137; public static final int opc_l2d = 138; public static final int opc_f2i = 139; public static final int opc_f2l = 140; public static final int opc_f2d = 141; public static final int opc_d2i = 142; public static final int opc_d2l = 143; public static final int opc_d2f = 144; public static final int opc_i2b = 145; public static final int opc_i2c = 146; public static final int opc_i2s = 147; public static final int opc_lcmp = 148; public static final int opc_fcmpl = 149; public static final int opc_fcmpg = 150; public static final int opc_dcmpl = 151; public static final int opc_dcmpg = 152; public static final int opc_ifeq = 153; public static final int opc_ifne = 154; public static final int opc_iflt = 155; public static final int opc_ifge = 156; public static final int opc_ifgt = 157; public static final int opc_ifle = 158; public static final int opc_if_icmpeq = 159; public static final int opc_if_icmpne = 160; public static final int opc_if_icmplt = 161; public static final int opc_if_icmpge = 162; public static final int opc_if_icmpgt = 163; public static final int opc_if_icmple = 164; public static final int opc_if_acmpeq = 165; public static final int opc_if_acmpne = 166; public static final int opc_goto = 167; public static final int opc_jsr = 168; public static final int opc_ret = 169; public static final int opc_tableswitch = 170; public static final int opc_lookupswitch = 171; public static final int opc_ireturn = 172; public static final int opc_lreturn = 173; public static final int opc_freturn = 174; public static final int opc_dreturn = 175; public static final int opc_areturn = 176; public static final int opc_return = 177; public static final int opc_getstatic = 178; public static final int opc_putstatic = 179; public static final int opc_getfield = 180; public static final int opc_putfield = 181; public static final int opc_invokevirtual = 182; 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_new = 187; public static final int opc_newarray = 188; public static final int opc_anewarray = 189; public static final int opc_arraylength = 190; public static final int opc_athrow = 191; public static final int opc_checkcast = 192; public static final int opc_instanceof = 193; public static final int opc_monitorenter = 194; public static final int opc_monitorexit = 195; public static final int opc_wide = 196; public static final int opc_multianewarray = 197; public static final int opc_ifnull = 198; public static final int opc_ifnonnull = 199; public static final int opc_goto_w = 200; public static final int opc_jsr_w = 201; public static final int opc_breakpoint = 202; // for backwards compatibility with 1.0 public static final int opc_int2byte = opc_i2b; public static final int opc_int2char = opc_i2c; public static final int opc_int2short = opc_i2s; public static final int opc_invokenonvirtual = opc_invokespecial; // names of opcodes public static final String opcNames[] = { "opc_nop", "opc_aconst_null", "opc_iconst_m1", "opc_iconst_0", "opc_iconst_1", "opc_iconst_2", "opc_iconst_3", "opc_iconst_4", "opc_iconst_5", "opc_lconst_0", "opc_lconst_1", "opc_fconst_0", "opc_fconst_1", "opc_fconst_2", "opc_dconst_0", "opc_dconst_1", "opc_bipush", "opc_sipush", "opc_ldc", "opc_ldc_w", "opc_ldc2_w", "opc_iload", "opc_lload", "opc_fload", "opc_dload", "opc_aload", "opc_iload_0", "opc_iload_1", "opc_iload_2", "opc_iload_3", "opc_lload_0", "opc_lload_1", "opc_lload_2", "opc_lload_3", "opc_fload_0", "opc_fload_1", "opc_fload_2", "opc_fload_3", "opc_dload_0", "opc_dload_1", "opc_dload_2", "opc_dload_3", "opc_aload_0", "opc_aload_1", "opc_aload_2", "opc_aload_3", "opc_iaload", "opc_laload", "opc_faload", "opc_daload", "opc_aaload", "opc_baload", "opc_caload", "opc_saload", "opc_istore", "opc_lstore", "opc_fstore", "opc_dstore", "opc_astore", "opc_istore_0", "opc_istore_1", "opc_istore_2", "opc_istore_3", "opc_lstore_0", "opc_lstore_1", "opc_lstore_2", "opc_lstore_3", "opc_fstore_0", "opc_fstore_1", "opc_fstore_2", "opc_fstore_3", "opc_dstore_0", "opc_dstore_1", "opc_dstore_2", "opc_dstore_3", "opc_astore_0", "opc_astore_1", "opc_astore_2", "opc_astore_3", "opc_iastore", "opc_lastore", "opc_fastore", "opc_dastore", "opc_aastore", "opc_bastore", "opc_castore", "opc_sastore", "opc_pop", "opc_pop2", "opc_dup", "opc_dup_x1", "opc_dup_x2", "opc_dup2", "opc_dup2_x1", "opc_dup2_x2", "opc_swap", "opc_iadd", "opc_ladd", "opc_fadd", "opc_dadd", "opc_isub", "opc_lsub", "opc_fsub", "opc_dsub", "opc_imul", "opc_lmul", "opc_fmul", "opc_dmul", "opc_idiv", "opc_ldiv", "opc_fdiv", "opc_ddiv", "opc_irem", "opc_lrem", "opc_frem", "opc_drem", "opc_ineg", "opc_lneg", "opc_fneg", "opc_dneg", "opc_ishl", "opc_lshl", "opc_ishr", "opc_lshr", "opc_iushr", "opc_lushr", "opc_iand", "opc_land", "opc_ior", "opc_lor", "opc_ixor", "opc_lxor", "opc_iinc", "opc_i2l", "opc_i2f", "opc_i2d", "opc_l2i", "opc_l2f", "opc_l2d", "opc_f2i", "opc_f2l", "opc_f2d", "opc_d2i", "opc_d2l", "opc_d2f", "opc_i2b", "opc_i2c", "opc_i2s", "opc_lcmp", "opc_fcmpl", "opc_fcmpg", "opc_dcmpl", "opc_dcmpg", "opc_ifeq", "opc_ifne", "opc_iflt", "opc_ifge", "opc_ifgt", "opc_ifle", "opc_if_icmpeq", "opc_if_icmpne", "opc_if_icmplt", "opc_if_icmpge", "opc_if_icmpgt", "opc_if_icmple", "opc_if_acmpeq", "opc_if_acmpne", "opc_goto", "opc_jsr", "opc_ret", "opc_tableswitch", "opc_lookupswitch", "opc_ireturn", "opc_lreturn", "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_anewarray", "opc_arraylength", "opc_athrow", "opc_checkcast", "opc_instanceof", "opc_monitorenter", "opc_monitorexit", "opc_wide", "opc_multianewarray", "opc_ifnull", "opc_ifnonnull", "opc_goto_w", "opc_jsr_w", "opc_breakpoint" }; // and their lengths static int opcLengths[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 99, 99, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 5, 0, 3, 2, 3, 1, 1, 3, 3, 1, 1, 0, 4, 3, 3, 5, 5, 1 }; } lib/jas/src/jas/SignatureAttr.java100644 0 0 1665 10240435426 14543 0ustar 0 0 /** * Signature attributes are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class SignatureAttr { static CP attr = new AsciiCP("Signature"); AsciiCP sig; void resolve(ClassEnv e){ e.addCPItem(attr); e.addCPItem(sig); } /** * Note: A signature attr is associated with a class, * method or field so you need to create a new SignatureAttr for */ public SignatureAttr(String s) { // sig = new AsciiCP(s); } int size(){ return 2; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); out.writeInt(2); // fixed length out.writeShort(e.getCPIndex(sig)); } } lib/jas/src/jas/SourceAttr.java100644 0 0 1752 10070636274 14044 0ustar 0 0 /** * This attribute is used to embed Source file information into * a class file. * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class SourceAttr { static CP attr = new AsciiCP("SourceFile"); CP name; /** * Create a source file attribute. * @param name Name of the source file * @see ClassEnv#setSource */ public SourceAttr(String name) { this.name = new AsciiCP(name); } /** * Create a source file attribute, with more control over attribute name * @param cp CP to be associated as the name of the source file * @see ClassEnv#setSource */ public SourceAttr(CP name) { this.name = name; } void resolve(ClassEnv e) { e.addCPItem(attr); e.addCPItem(name); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); out.writeInt(2); out.writeShort(e.getCPIndex(name)); } } lib/jas/src/jas/StringCP.java100644 0 0 1174 10070636274 13440 0ustar 0 0 package jas; import java.io.*; /** * Wrap an String constant reference with this CPE. * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ public class StringCP extends CP implements RuntimeConstants { AsciiCP val; /** * @param s Value for String constant */ public StringCP(String s) { uniq = ("String: @#$" + s).intern(); val = new AsciiCP(s); } void resolve(ClassEnv e) { e.addCPItem(val); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeByte(CONSTANT_STRING); out.writeShort(e.getCPIndex(val)); } } lib/jas/src/jas/StringElemValPair.java100644 0 0 1670 10240435426 15273 0ustar 0 0 /** * ElemValPairs are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class StringElemValPair extends ElemValPair { AsciiCP val; void resolve(ClassEnv e){ super.resolve(e); e.addCPItem(val); } /** * Note: An annotation attr is associated with a class, * method or field so you need to create a new VisibilityAnnotationAttr for */ public StringElemValPair(String name, char kind, String val) { // super(name, kind); this.val = new AsciiCP(val); } int size(){ return super.size() + 2; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { super.write(e, out); out.writeShort(e.getCPIndex(val)); } } lib/jas/src/jas/SyntheticAttr.java100644 0 0 1067 10111262373 14544 0ustar 0 0 /** * This is used to represent the synthetic attr * * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class SyntheticAttr { static CP attr = new AsciiCP("Synthetic"); /** * Create a new synthetic attribute */ public SyntheticAttr() { } void resolve(ClassEnv e) { e.addCPItem(attr); } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); out.writeInt(0); } } lib/jas/src/jas/TableswitchInsn.java100644 0 0 1331 10070636274 15043 0ustar 0 0 /** * Some instructions are perniticky enough that its simpler * to write them separately instead of smushing them with * all the rest. The tableswitch instruction is one of them. * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; public class TableswitchInsn extends Insn implements RuntimeConstants { /** * @param min minimum index value * @param max maximum index value * @param def default Label for switch * @param j array of Labels, one for each possible index. */ public TableswitchInsn(int min, int max, Label def, Label j[]) { opc = opc_tableswitch; operand = new TableswitchOperand(this, min, max, def, j); } } lib/jas/src/jas/Var.java100644 0 0 7056 11006163132 12470 0ustar 0 0 /** * Used to make up new field entries. Fields for a class can have * an additional "ConstantValue" attribute associated them, * which the java compiler uses to represent things like * static final int blah = foo; * * @author $Author: fqian $ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class Var { short var_acc; CP name, sig; ConstAttr const_attr; SyntheticAttr synth_attr = null; DeprecatedAttr dep_attr = null; SignatureAttr sig_attr = null; VisibilityAnnotationAttr vis_annot_attr = null; VisibilityAnnotationAttr invis_annot_attr = null; Vector genericAttrs = new Vector(); /** * @param vacc access permissions for the field * @param name name of the field * @param sig type of the field * @param cattr Extra constant value information. Passing this as * null will not include this information for the record. * @see RuntimeConstants */ public Var(short vacc, CP name, CP sig, ConstAttr cattr) { var_acc = vacc; this.name = name; this.sig = sig; const_attr = cattr; } public Var(short vacc, CP name, CP sig, ConstAttr cattr, SyntheticAttr sattr){ var_acc = vacc; this.name = name; this.sig = sig; const_attr = cattr; synth_attr = sattr; } public void addGenericAttr(GenericAttr g) { genericAttrs.addElement(g); } public void addDeprecatedAttr(DeprecatedAttr d){ dep_attr = d; } public void addSignatureAttr(SignatureAttr s){ sig_attr = s; } public void addVisibilityAnnotationAttrVis(VisibilityAnnotationAttr v){ vis_annot_attr = v; } public void addVisibilityAnnotationAttrInvis(VisibilityAnnotationAttr v){ invis_annot_attr = v; } void resolve(ClassEnv e) { e.addCPItem(name); e.addCPItem(sig); if (const_attr != null) { const_attr.resolve(e); } if (synth_attr != null){ synth_attr.resolve(e); } if (dep_attr != null){ dep_attr.resolve(e); } if (sig_attr != null){ sig_attr.resolve(e); } if (vis_annot_attr != null){ vis_annot_attr.resolve(e); } if (invis_annot_attr != null){ invis_annot_attr.resolve(e); } } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(var_acc); out.writeShort(e.getCPIndex(name)); out.writeShort(e.getCPIndex(sig)); int attrCnt = genericAttrs.size(); if (const_attr != null) attrCnt++; if (synth_attr != null) attrCnt++; if (dep_attr != null) attrCnt++; if (sig_attr != null) attrCnt++; if (vis_annot_attr != null) attrCnt ++; if (invis_annot_attr != null) attrCnt ++; out.writeShort(attrCnt); if (const_attr != null){ const_attr.write(e, out); } if (synth_attr != null){ synth_attr.write(e, out); } if (dep_attr != null){ dep_attr.write(e, out); } if (sig_attr != null){ sig_attr.write(e, out); } if (vis_annot_attr != null){ vis_annot_attr.write(e,out); } if (invis_annot_attr != null){ invis_annot_attr.write(e,out); } /*if (const_attr != null) { out.writeShort(attrCnt +1); const_attr.write(e, out); } else { out.writeShort(attrCnt); }*/ for(Enumeration enu = genericAttrs.elements(); enu.hasMoreElements();) { ((GenericAttr)enu.nextElement()).write(e, out); } } } lib/jas/src/jas/VisibilityAnnotationAttr.java100644 0 0 4216 11053342244 16755 0ustar 0 0 /** * Visibility annotation attributes are embedded into class files * and used for further ??? * @author $Author: Jennifer Lhotak$ * @version $Revision: 1.1 $ */ package jas; import java.io.*; import java.util.*; public class VisibilityAnnotationAttr { AsciiCP attr; ArrayList list = new ArrayList(); protected String kind; void resolve(ClassEnv e){ e.addCPItem(attr); if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ ((AnnotationAttr)it.next()).resolve(e); } } } /** * Note: A visibility annotation attr is associated with a class, * method or field so you need to create a new VisibilityAnnotationAttr for */ public VisibilityAnnotationAttr(String kind, ArrayList annotations) { // attr = new AsciiCP(kind+"Annotations"); list = annotations; this.kind = kind; } public VisibilityAnnotationAttr() { // } public void setKind(String k){ this.kind = k; attr = new AsciiCP(k+"Annotations"); } public void addAnnotation(AnnotationAttr annot){ list.add(annot); } public ArrayList getList(){ return list; } int size(){ int i = 2;//for num_annotations if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ i += ((AnnotationAttr)it.next()).size(); } } return i; } void write(ClassEnv e, DataOutputStream out) throws IOException, jasError { out.writeShort(e.getCPIndex(attr)); out.writeInt(size()); // fixed length if (list == null){ out.writeShort(0); } else { out.writeShort(list.size()); } if (list != null){ Iterator it = list.iterator(); while (it.hasNext()){ ((AnnotationAttr)it.next()).write(e, out); } } } public String getKind() { return kind; } } lib/jas/src/jas/jasError.java100644 0 0 456 10070636274 13520 0ustar 0 0 package jas; /** * Error thrown on problems encountered while running the * basic jas assembler itself. * @author $Author: fqian $ * @version $Revision: 1.1 $ */ public class jasError extends Exception { public jasError() { super(); } public jasError(String s) { super(s); } } lib/jas/src/scm/Cell.java100644 0 0 2010 10070636274 12621 0ustar 0 0 // Cons cell package scm; class Cell implements Obj { Obj car; Cell cdr; // this should be a Obj, but its // a mite quicker to bag the cast check, // and be unable to do (a . b) public Obj eval(Env e) throws Exception { Procedure p; if (car == null) { throw new SchemeError("null car cell trying to eval " + this); } if (car instanceof Procedure) { p = (Procedure) car; } else { p = (Procedure) car.eval(e); } return (p.apply(cdr, e)); // primitive ops override the default // compound procedures by subclassing } Cell (Obj a, Cell b) { car = a; cdr = b; } public String toString() { return toString(""); } public String toString(String s) { if (car == null) { s += "()"; } else { s += car.toString(); } if (cdr == null) { return ( "(" + s + ")"); } else { return (cdr.toString(s + " ")); } } } lib/jas/src/scm/Env.java100644 0 0 4753 10070636274 12512 0ustar 0 0 package scm; // an environment for the underlying // evaluator import java.util.*; class Env { Hashtable bindings=null; // bindings are lazily created // during a set variable static Object MAGIC_KLUDGE="**jas-nil-internal"; // record "null" as this. Env parent; Obj lookup(Symbol cvar) { Object ret; Env f; Hashtable b; for (f=this, ret=null, b=bindings; (ret == null) && (f != null); f = f.parent) { b = f.bindings; if (b != null) { ret = b.get(cvar); } } if (ret == null) { throw new SchemeError("Unbound variable " + cvar); } if (ret == MAGIC_KLUDGE) return null; else return ((Obj)ret); } void setvar(Symbol cvar, Obj val) { Object ret; Env f; Hashtable b; for (f=this, ret=null, b=bindings; (ret == null) && (f != null); f = f.parent) { b = f.bindings; if (b != null) { ret = b.get(cvar); } } if (ret == null) { throw new SchemeError("Attempted to set unbound variable " + cvar); } if (val == null) { b.put(cvar, MAGIC_KLUDGE); } else { b.put(cvar, val); } } void definevar(Symbol v, Obj val) { if (bindings == null) bindings = new Hashtable(); if (val == null) { bindings.put(v, MAGIC_KLUDGE); } else { bindings.put(v, val); } } Env extendenv(Cell formals, Cell params) { Symbol thissym; Obj thisval; Env ret = new Env(); ret.parent = this; if (formals == null) { if (params != null) { throw new SchemeError("mismatched arglist to entend env"); } } else { ret.bindings = new Hashtable(); while (formals != null) { thissym = (Symbol) formals.car; thisval = params.car; if (thisval == null) {ret.bindings.put(thissym, MAGIC_KLUDGE);} else {ret.bindings.put(thissym, thisval);} formals = formals.cdr; params = params.cdr; } if (params != null) { throw new SchemeError("mismatched arglist to extend env"); } } return ret; } public String toString() { String ret; return ("Binding is " + bindings + "\nparent is " + parent); } } lib/jas/src/scm/InsnProcedure.java100644 0 0 2160 10070636274 14530 0ustar 0 0 package scm; import jas.*; class InsnProcedure extends Procedure implements Obj, jas.RuntimeConstants { int opc; Obj apply(Cell args, Env f) throws Exception { if (args == null) { return new primnode(new Insn(opc)); } Obj t = (args.car).eval(f); if (t instanceof Selfrep) { // Single integer arg int val = (int) (((Selfrep)t).num); return new primnode(new Insn(opc, val)); } if (t instanceof primnode) { Object tprime = ((primnode)t).val; if (tprime instanceof CP) { // Single CP argument return new primnode(new Insn(opc, (CP)tprime)); } // Labels if (tprime instanceof Label) { return new primnode(new Insn(opc, (Label)tprime)); } } throw new SchemeError("Sorry, not yet implemented " + this.toString()); } InsnProcedure(int opc) { this.opc = opc; } public String toString() { return ("<#insn "+opcNames[opc]+"#>"); } } lib/jas/src/scm/Lambda.java100644 0 0 1014 10070636274 13125 0ustar 0 0 package scm; // create a new procedure class Lambda extends Procedure implements Obj { // massage arguments to a real procedure Obj apply(Cell args, Env f) throws Exception { Procedure ret = new Procedure(); if (args == null) { throw new SchemeError("null args to Lambda"); } ret.formals = (Cell) args.car; ret.body = args.cdr; ret.procenv = f; return ret; } public String toString() { return ("<#Lambda#>"); } } lib/jas/src/scm/Obj.java100644 0 0 262 10070636274 12443 0ustar 0 0 package scm; // a generic object for the // evaluator. interface Obj { Obj eval(Env e) throws Exception; } lib/jas/src/scm/Procedure.java100644 0 0 32346 10070636274 13731 0ustar 0 0 package scm; // This is the (usual) compound procedure // object /** * This is a container class that is overidden * by primitives. It can be generated through * @see jas.Lambda procedures. */ class Procedure implements Obj { Cell body; // the seq of expressions constituting // the body of the procedure Cell formals; // the arglist expected by the procedure Env procenv; // env in which the proc was created Env extendargs(Cell args, Env f) throws Exception { Cell params = null; Cell tail = null; while (args != null) { Obj now = args.car; if (now != null) { now = now.eval(f); } // eval args in context of old expression if (tail != null) { tail.cdr = new Cell(now, null); tail = tail.cdr; } else { params = new Cell(now, params); tail = params; } args = args.cdr; } // make new frame, with appropriate // bindings. The enclosing frame // is the env in which the procedure // was created. return (procenv.extendenv(formals, params)); } Obj apply(Cell args, Env f) throws Exception { Env newEnv = extendargs(args, f); Cell expr = body; Obj ret = null; // eval body with new bindings while (expr != null) { ret = expr.car; if (ret != null) { ret = ret.eval(newEnv); } expr = expr.cdr; } return (ret); } public Obj eval(Env e) { throw new SchemeError("Cant eval procedures directly"); } public String toString() { return (" " + body); } } // do a few primitives here /** * Add two integers * (+ int1 int2) */ class Plus extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Obj l1 = args.car.eval(f); Obj l2 = args.cdr.car.eval(f); return (new Selfrep(((Selfrep)l1).num + ((Selfrep)l2).num)); } public String toString() { return ("<#plus#>"); } } /** * Subtract integers * (- int1 int2) */ class Minus extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Obj l1 = args.car.eval(f); Obj l2 = args.cdr.car.eval(f); return (new Selfrep(((Selfrep)l1).num - ((Selfrep)l2).num)); } public String toString() { return ("<#minus#>"); } } /** * Multiply integers * (* int1 int2) */ class Mult extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Obj l1 = args.car.eval(f); Obj l2 = args.cdr.car.eval(f); return (new Selfrep(((Selfrep)l1).num * ((Selfrep)l2).num)); } public String toString() { return ("<#mult#>"); } } /** * divide integers * (/ int1 int2) */ class Div extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Obj l1 = args.car.eval(f); Obj l2 = args.cdr.car.eval(f); return (new Selfrep(((Selfrep)l1).num / ((Selfrep)l2).num)); } public String toString() { return ("<#div#>"); } } /** * Bitwise or of integers * (| int1 int2) */ class Or extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Obj l1 = args.car.eval(f); Obj l2 = args.cdr.car.eval(f); return (new Selfrep ((int)(Math.round(((Selfrep)l1).num)) | (int)(Math.round(((Selfrep)l2).num)))); } public String toString() { return ("<#or#>"); } } /** * Yup. just as it says. * (car (quote (a b))) * => a * */ class Car extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell tmp = (Cell) args.car.eval(f); return (tmp.car); } public String toString() { return ("<#car#>"); } } /** * More lispisms. * (cdr (quote (a b))) * => (b) * */ class Cdr extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell tmp = (Cell) args.car.eval(f); return (tmp.cdr); } public String toString() { return ("<#cdr#>"); } } /** * Generate new list * (cons (quote a) (quote (b c))) => (a b c) */ class Cons extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Obj ncar = args.car.eval(f); Obj ncdr = args.cdr.car.eval(f); return (new Cell(ncar, (Cell) ncdr)); } public String toString() { return ("<#cons#>"); } } /** * Prevent from evaluation. * (quote a) => a */ class Quote extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { if (args == null) { throw new SchemeError("null args to Quote"); } return args.car; } public String toString() { return ("<#Quote#>"); } } /** * bind a value to a symbol.

* * (define some-new-symbol "some thing") => "some thing"
* some-new-symbol => "some thing" */ class Define extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Symbol v; // (symbol value) if (args == null) { throw new SchemeError("null args to define"); } if (args.car instanceof Symbol) { v = (Symbol) args.car; } else { throw new SchemeError("bad argtype to define" + args.car); } if (v == null) { throw new SchemeError("null symbol value"); } Cell val = args.cdr; if (val == null) { throw new SchemeError("not enough args to define"); } Obj ret = val.car; if (ret != null) { ret = ret.eval(f); } f.definevar(v, ret); return ret; } public String toString() { return ("<#define#>"); } } /** * reset a value to a symbol.

* * (set! some-old-symbol "xyz") */ class Setvar extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Symbol v; // (symbol value) if (args == null) { throw new SchemeError("null args to define"); } if (args.car instanceof Symbol) { v = (Symbol) args.car; } else { throw new SchemeError("bad argtype to set!" + args.car); } if (v == null) { throw new SchemeError("null symbol value"); } Cell val = args.cdr; if (val == null) { throw new SchemeError("not enough args to set!"); } Obj ret = val.car; if (ret != null) { ret = ret.eval(f); } f.setvar(v, ret); return ret; } public String toString() { return ("<#set!#>"); } } /** * (cond (condition body) (condition body)...) */ class Cond extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; while (t != null) { // examine condition part if (t.car == null) { throw new SchemeError("null clause for cond"); } Obj clause = t.car; if (!(clause instanceof Cell)) { throw new SchemeError("need a condition body for cond clause"); } Obj result = (((Cell)clause).car); if (result != null) { result = result.eval(f); } if (result == null) { t = t.cdr; continue; } // Got a non nill, so do body and // return. Obj body = (((Cell)clause).cdr).car; return (body.eval(f)); } return null; } public String toString() { return ("<#cond#>"); } } /** * (num? thing) */ class NumP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { if (args == null) return null; Obj target = args.car; if (target != null) target = target.eval(f); if (target == null) return null; if ((target instanceof Selfrep) && (((Selfrep)target).val == null)) return target; return null; } public String toString() { return ("<#num?#>"); } } /** * < */ class LessP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { if (args == null) { throw new SchemeError("< expects a pair of arguments"); } Obj target1 = args.car; if (target1 != null) target1 = target1.eval(f); args = args.cdr; Obj target2 = args.car; if (target2 != null) target2 = target2.eval(f); if ((target1 == null) || (target2 == null)) { throw new SchemeError("< expects a pair of arguments"); } if (!(target1 instanceof Selfrep) || !(target2 instanceof Selfrep)) { throw new SchemeError("< expects a pair of numbers as args"); } if ((((Selfrep)target1).num) < (((Selfrep)target2).num)) { return target1; } return null; } public String toString() { return ("<#<#>"); } } /** * > */ class MoreP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { if (args == null) { throw new SchemeError("> expects a pair of arguments"); } Obj target1 = args.car; if (target1 != null) target1 = target1.eval(f); args = args.cdr; Obj target2 = args.car; if (target2 != null) target2 = target2.eval(f); if ((target1 == null) || (target2 == null)) { throw new SchemeError("> expects a pair of arguments"); } if (!(target1 instanceof Selfrep) || !(target2 instanceof Selfrep)) { throw new SchemeError("> expects a pair of numbers as args"); } if ((((Selfrep)target1).num) > (((Selfrep)target2).num)) { return target1; } return null; } public String toString() { return ("<#>#>"); } } /** * (eq? obj1 obj2) */ class EqP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { if (args == null) return null; Obj target1 = args.car; if (target1 != null) target1 = target1.eval(f); args = args.cdr; Obj target2 = args.car; if (target2 != null) target2 = target2.eval(f); if ((target1 == null) && (target2 == null)) return (new Selfrep(1)); if ((target1 == null) || (target2 == null)) { return null; } if (target1 == target2) { return (target1); } if ((target1 instanceof Selfrep) && (target2 instanceof Selfrep)) { if ((((Selfrep)target1).val) == null) { if ((((Selfrep)target1).num) == (((Selfrep)target2).num)) { return new Selfrep(1); } } else { if ((((Selfrep)target1).val).equals((((Selfrep)target2).val))) { return new Selfrep(1); } } } return null; } public String toString() { return ("<#eq?#>"); } } /** * (string? thing) */ class StringP extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { if (args == null) return null; Obj target = args.car; if (target != null) target = target.eval(f); if (target == null) return null; if ((target instanceof Selfrep) && (((Selfrep)target).val != null)) return target; return null; } public String toString() { return ("<#string?#>"); } } /** * (progn body1 body2 ...) */ class Progn extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj result = null; while (t != null) { if (t.car == null) { result = null; } else { result = t.car.eval(f); } t = t.cdr; } return result; } public String toString() { return ("<#progn#>"); } } /** * (mapcar function (args1 args2 ...)) */ class Mapcar extends Procedure implements Obj { Obj apply(Cell args, Env f) throws Exception { Obj ftmp = args.car; if (ftmp != null) ftmp = ftmp.eval(f); if (ftmp == null) { throw new SchemeError("null function for mapcar"); } if (!(ftmp instanceof Procedure)) { throw new SchemeError("expected a procedure for mapcar"); } Procedure fn = (Procedure) ftmp; Cell t = (Cell)((args.cdr.car).eval(f)); Cell res = null; Cell tail = null; while (t != null) { if (tail == null) { res = new Cell (fn.apply (new Cell((t.car), null), f), null); tail = res; } else { tail.cdr = new Cell (fn.apply (new Cell((t.car), null), f), null); } t = t.cdr; } return res; } } lib/jas/src/scm/SchemeError.java100644 0 0 257 10070636274 14153 0ustar 0 0 package scm; public class SchemeError extends RuntimeException { public SchemeError() { super(); } public SchemeError(String s) { super(s); } } lib/jas/src/scm/Selfrep.java100644 0 0 552 10070636274 13333 0ustar 0 0 package scm; class Selfrep implements Obj { String val; double num; public Obj eval(Env e) { return this; } Selfrep(double num) { super(); this.num = num; val = null; } Selfrep(String s) { super(); val = s; } public String toString() { if (val == null) return ("Number: " + num); return ("String: " + val); } } lib/jas/src/scm/Symbol.java100644 0 0 734 10070636274 13202 0ustar 0 0 package scm; import java.util.*; class Symbol implements Obj { static Hashtable internset = new Hashtable(); String name; Symbol(String s) { name = s; } static Symbol intern(String s) { Symbol ret; if ((ret = (Symbol)internset.get(s)) == null) { ret = new Symbol(s); internset.put(s, ret); } return ret; } public Obj eval(Env e) { return e.lookup(this); } public String toString() { return(name); } } lib/jas/src/scm/autogen/autogen.java100644 0 0 26460 10070636274 15105 0ustar 0 0 // Generate glue code import java.io.*; import java.util.*; class typeinfo { String scm_name; String java_name; String java_inp_type[]; typeinfo(String sname, String jname, String jit[]) { scm_name = sname; java_name = jname; java_inp_type = jit; } void write(PrintStream out) { int mode; out.println("//Autogenerated by typeinfo on " + new Date()); out.println("class scm" + java_name + " extends Procedure implements Obj"); out.println("{"); out.println(" Obj apply(Cell args, Env f)\n throws Exception\n {"); out.println(" Cell t = args;"); out.println(" Obj tmp;"); for (int i=0; i\"); }"); out.println("}"); } } class procinfo // Create simple procedures // automatically { String java_name; String scm_name; String java_inp_type[]; procinfo(String sname, String jname, String jit[]) { java_name = jname; scm_name = sname; java_inp_type = jit; } void write(PrintStream out) { int mode; out.println("//Autogenerated by procinfo on " + new Date()); out.println ("class scm" + java_name + " extends Procedure implements Obj\n{"); out.println (" Obj apply(Cell args, Env f)\n throws Exception\n {\n"); out.println (" Cell t = args;"); out.println (" Obj tmp;"); for (int i=0; i\"); }"); out.println("}"); } } class autogen implements jas.RuntimeConstants { static String procs[][] = { // Manipulate class env {"ClassEnv", "CP"}, {"jas-class-addcpe", "addCPItem"}, {"ClassEnv", "Var"}, {"jas-class-addfield", "addField"}, {"ClassEnv", "CP"}, {"jas-class-addinterface", "addInterface"}, {"ClassEnv", "CP"}, {"jas-class-setclass", "setClass"}, {"ClassEnv", "CP"}, {"jas-class-setsuperclass", "setSuperClass"}, {"ClassEnv", "short", "String", "String", "CodeAttr", "ExceptAttr"}, {"jas-class-addmethod", "addMethod"}, {"ClassEnv", "short"}, {"jas-class-setaccess", "setClassAccess"}, {"ClassEnv", "String"}, {"jas-class-setsource", "setSource"}, {"ClassEnv", "scmOutputStream"}, {"jas-class-write", "write"}, // Add things to exceptions {"ExceptAttr", "CP"}, {"jas-exception-add", "addException"}, // Manipulate code attrs {"CodeAttr", "Insn"}, {"jas-code-addinsn", "addInsn"}, {"CodeAttr", "short"}, {"jas-code-stack-size", "setStackSize"}, {"CodeAttr", "short"}, {"jas-code-var-size", "setVarSize"}, {"CodeAttr", "Catchtable"}, {"jas-set-catchtable", "setCatchtable"}, // add things to catchtables {"Catchtable", "CatchEntry"}, {"jas-add-catch-entry", "addEntry"}, }; static String types[][] = { {"String"}, {"make-ascii-cpe", "AsciiCP"}, {"String"}, {"make-class-cpe", "ClassCP"}, {"String", "String"}, {"make-name-type-cpe", "NameTypeCP"}, {"String", "String", "String"}, {"make-field-cpe", "FieldCP"}, {"String", "String", "String"}, {"make-interface-cpe", "InterfaceCP"}, {"String", "String", "String"}, {"make-method-cpe", "MethodCP"}, {"int"}, {"make-integer-cpe", "IntegerCP"}, {"float"}, {"make-float-cpe", "FloatCP"}, {"long"}, {"make-long-cpe", "LongCP"}, {"double"}, {"make-double-cpe", "DoubleCP"}, {"String"}, {"make-string-cpe", "StringCP"}, {"short", "CP", "CP", "ConstAttr"}, {"make-field", "Var"}, {"CP"}, {"make-const", "ConstAttr"}, {"String"}, {"make-outputstream", "scmOutputStream"}, {"String"}, {"make-label", "Label"}, {}, {"make-class-env", "ClassEnv"}, {}, {"make-code", "CodeAttr"}, {}, {"make-exception", "ExceptAttr"}, {}, {"make-catchtable", "Catchtable"}, {"Label", "Label", "Label", "CP"}, {"make-catch-entry", "CatchEntry"}, {"int", "int"}, {"iinc", "IincInsn"}, {"CP", "int"}, {"multianewarray", "MultiarrayInsn"}, {"CP", "int"}, {"invokeinterface", "InvokeinterfaceInsn"}, }; public static void main(String argv[]) throws IOException { PrintStream initer = new PrintStream(new FileOutputStream("AutoInit.java")); initer.println("package scm;\n\nimport jas.*;"); initer.println("class AutoInit\n{\n static void fillit(Env e)\n {"); // Generate types in the system. PrintStream doit = new PrintStream(new FileOutputStream("AutoTypes.java")); doit.println("package scm;\n\nimport jas.*;"); for (int x = 0; x"), new MoreP()); global.definevar(Symbol.intern("eq?"), new EqP()); // Include jas stuff now. // load in constants global.definevar(Symbol.intern("acc-public"), new Selfrep(ACC_PUBLIC)); global.definevar(Symbol.intern("acc-private"), new Selfrep(ACC_PRIVATE)); global.definevar(Symbol.intern("acc-protected"), new Selfrep(ACC_PROTECTED)); global.definevar(Symbol.intern("acc-static"), new Selfrep(ACC_STATIC)); global.definevar(Symbol.intern("acc-final"), new Selfrep(ACC_FINAL)); global.definevar(Symbol.intern("acc-synchronized"), new Selfrep(ACC_SYNCHRONIZED)); global.definevar(Symbol.intern("acc-volatile"), new Selfrep(ACC_VOLATILE)); global.definevar(Symbol.intern("acc-transient"), new Selfrep(ACC_TRANSIENT)); global.definevar(Symbol.intern("acc-native"), new Selfrep(ACC_NATIVE)); global.definevar(Symbol.intern("acc-interface"), new Selfrep(ACC_INTERFACE)); global.definevar(Symbol.intern("acc-abstract"), new Selfrep(ACC_ABSTRACT)); global.definevar(Symbol.intern("acc-strictfp"), new Selfrep(ACC_STRICTFP)); // Pull in auto generated stuff AutoInit.fillit(global); // now add in procedures for opcodes int opc_cnt = opcNames.length; for (int i=0; i': ret = Symbol.intern(String.valueOf((char)(inp.ttype))); break; default: throw new SchemeError("Unexpected parse error"); } return ret; } } lib/jas/src/scm/primnode.java100644 0 0 527 10070636274 13552 0ustar 0 0 package scm; // Encapsulate a random java class // as a new type. class primnode implements Obj { Object val; public Obj eval(Env e) { return this; } primnode(Object thing) { this.val = thing; } public String toString() { return val.toString(); } } lib/jas/src/scm/procinfo.class100644 0 0 5602 10070636274 13757 0ustar 0 0 Êþº¾-’ ;I :J :K :LM IN OP I Q R STUVWXYZ[ \]^_ `abcdefghijklmnopqrstuvwxyz S{|}~€‚ƒ java_nameLjava/lang/String;scm_name java_inp_type[Ljava/lang/String;:(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)VCodeLineNumberTablewrite(Ljava/io/PrintStream;)V SourceFile autogen.java A„ <= >= ?@java/lang/StringBuffer//Autogenerated by procinfo on …†java/util/Date …‡ ˆ‰Š ‹Œ class scm# extends Procedure implements Obj {5 Obj apply(Cell args, Env f) throws Exception {  Cell t = args; Obj tmp;, if (t == null) { throw new SchemeError(" expects … arguments"); }6 tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr;StringŽ shortintfloatdoublelongM if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError(" expects a String for arg #"); } String arg' = (tmp!=null)?((Selfrep)tmp).val:null;< if (!(tmp instanceof Selfrep)) { throw new SchemeError(" expects a number for arg #  arg = ()(((Selfrep)tmp).num);N if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError(" expects a  for arg #< if ((tmp != null) && !((((primnode)tmp).val) instanceof )) { throw new SchemeError(" = (tmp != null)?()(((primnode)tmp).val):null; arg0.(arg1 ‘Œ, arg); return null; } public String toString() { return ("<##>"); }}procinfojava/lang/Object()Vappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;,(Ljava/lang/Object;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;java/io/PrintStreamprintln(Ljava/lang/String;)V(I)Ljava/lang/StringBuffer;java/lang/Stringequals(Ljava/lang/Object;)Zprint :;<=>=?@ABC<*·*,µ*+µ*-µ±Dyz {|}EFC€ì+»Y·¶» Y· ¶ ¶ ¶ +»Y·¶*´¶¶¶ ¶ +¶ +¶ +¶ >§+»Y·¶*´¶¶*´¾¶¶¶ ¶ +¶ *´2¶™=§P*´2¶š;*´2¶š-*´2¶š*´2¶š*´2¶™=§=«Èc+»Y·¶*´¶ ¶`¶!¶¶ ¶ +»Y·"¶¶#¶¶ ¶ §+»Y·$¶*´¶%¶`¶!¶¶ ¶ +»Y·&¶*´2¶'¶¶(¶*´2¶)¶¶ ¶ §¹+»Y·*¶*´¶+¶*´2¶,¶`¶!¶¶ ¶ +»Y·-¶*´2¶.¶*´¶+¶*´2¶,¶`¶!¶¶ ¶ +»Y·&¶*´2¶'¶¶/¶*´2¶0¶¶ ¶ „*´¾¡ýæ+»Y·1¶*´¶2¶¶ ¶36§+»Y·4¶¶¶ ¶3„*´¾¡ÿÞ+5¶ +6¶ +»Y·7¶*´¶8¶¶ ¶ +9¶ ±D‚ ƒ„<†BˆHŠNŒSŽ“…–˜—Þ›ãœåž¡*¦F¨Iªs¯«²®´æ¹,¾dŒpÅÆ•ǭƺÈÀÉÆÊåËëÌGH lib/jas/src/scm/scmOutputStream.java100644 0 0 536 10070636274 15114 0ustar 0 0 // simple wrapper around // a combination of File/Dataoutputstream package scm; import java.io.*; class scmOutputStream extends DataOutputStream { scmOutputStream(String path) throws IOException { super(new BufferedOutputStream(new FileOutputStream(path))); } } lib/jas/src/scm/typeinfo.class100644 0 0 6060 10070636274 13774 0ustar 0 0 Êþº¾-˜ >L =M =N =OP LQ RS L T U VWXYZ[\]^_ `abc defghijklmnopqrstuvwxyz{|}~ V€‚ƒ„…†‡ˆ‰scm_nameLjava/lang/String; java_name java_inp_type[Ljava/lang/String;:(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)VCodeLineNumberTablewrite(Ljava/io/PrintStream;)V SourceFile autogen.java DŠ ?@ A@ BCjava/lang/StringBuffer//Autogenerated by typeinfo on ‹Œjava/util/Date ‹ Ž ‘’ class scm! extends Procedure implements Obj{4 Obj apply(Cell args, Env f) throws Exception { Cell t = args; Obj tmp;, if (t == null) { throw new SchemeError(" expects ‹“ arguments"); }6 tmp = (t.car!=null)?t.car.eval(f):null; t = t.cdr;String” •–shortintlongfloatdoubleM if ((tmp != null) && !(tmp instanceof Selfrep)) { throw new SchemeError(" expects a String for arg #"); } String arg' = (tmp!=null)?((Selfrep)tmp).val:null;< if (!(tmp instanceof Selfrep)) { throw new SchemeError(" expects a number for arg #  arg = (")(Math.round(((Selfrep)tmp).num));)(((Selfrep)tmp).num);N if ((tmp != null) && !(tmp instanceof primnode)) { throw new SchemeError(" expects a  for arg #< if ((tmp != null) && !((((primnode)tmp).val) instanceof )) { throw new SchemeError(" = (tmp != null)?()(((primnode)tmp).val):null; return new primnode(new ( —’arg0, arg)); } public String toString() { return ("<##>"); }}typeinfojava/lang/Object()Vappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;,(Ljava/lang/Object;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;java/io/PrintStreamprintln(Ljava/lang/String;)V(I)Ljava/lang/StringBuffer;java/lang/Stringequals(Ljava/lang/Object;)Zprint =>?@A@BCDEF<*·*+µ*,µ*-µ±G  HIFöJ+»Y·¶» Y· ¶ ¶ ¶ +»Y·¶*´¶¶¶ ¶ +¶ +¶ +¶ +¶ >§a+»Y·¶*´¶¶*´¾¶¶¶ ¶ +¶ *´2¶™=§U*´2¶š*´2¶š*´2¶™=§&*´2¶š*´2¶™=§=ª h h+»Y· ¶*´¶!¶`¶"¶¶ ¶ +»Y·#¶¶$¶¶ ¶ §^+»Y·%¶*´¶&¶`¶"¶¶ ¶  >+»Y·'¶*´2¶(¶¶)¶*´2¶*¶¶ ¶ §ô+»Y·'¶*´2¶(¶¶)¶*´2¶+¶¶ ¶ §¹+»Y·,¶*´¶-¶*´2¶.¶`¶"¶¶ ¶ +»Y·/¶*´2¶0¶*´¶-¶*´2¶.¶`¶"¶¶ ¶ +»Y·'¶*´2¶(¶¶1¶*´2¶2¶¶ ¶ „*´¾¡ýœ+»Y·3¶*´¶4¶¶ ¶5*´¾™ +6¶56§+»Y·7¶¶¶ ¶5„*´¾¡ÿÞ+8¶ +9¶ +»Y·:¶*´¶;¶¶ ¶ +<¶ ±Gš&<BHNTY …$‹&ž'È)Í*é+î-ð/2:7V9Y<ƒAˆCÃIûNþP6U|Z´Àbßeígóh gij$kClImJK lib/jas/tests/README100644 0 0 1263 10070636274 11561 0ustar 0 0 This is a start of a basic set of tests intended to exercise the API functions available in the jas and scm packages. It is not complete by any means. all.java tries to touch as much of the jas API as it can, generating a non functional class called regress.class. all.jas does something similar, but for the scm package. Once the jas and scm packages are compiled, do this: % (cd ..; javac -d . tests/all.java; java all; cmp regress.class tests/regress.class) % (cd ..; java scm.driver tests/all.jas; cmp scmregress.class tests/scmregress.class) If both these complete silently, you are in good shape. Otherwise, mail me a bug report and enough details for me to replicate it :) lib/jas/tests/all.jas100644 0 0 5657 10070636274 12163 0ustar 0 0 (define my-env (make-class-env)) (jas-class-addcpe my-env (make-ascii-cpe "fubar")) (jas-class-addcpe my-env (make-class-cpe "java/lang/Number")) (jas-class-addcpe my-env (make-double-cpe 2.0)) (jas-class-addcpe my-env (make-field-cpe "java/lang/System" "out" "Ljava/io/PrintStream;")) (jas-class-addcpe my-env (make-float-cpe 2.0)) (jas-class-addcpe my-env (make-integer-cpe 2)) (jas-class-addcpe my-env (make-interface-cpe "java/lang/Runnable" "run" "()V")) (jas-class-addcpe my-env (make-long-cpe 2)) (jas-class-addcpe my-env (make-method-cpe "java/lang/Thread" "run" "()V")) (jas-class-addcpe my-env (make-name-type-cpe "sdfsdf" "Ljava/lang/Object;")) (jas-class-addcpe my-env (make-string-cpe "sdf")) (jas-class-addfield my-env (make-field acc-public (make-ascii-cpe "someIntVar") (make-ascii-cpe "I") ())) (jas-class-addfield my-env (make-field (| acc-public acc-static) (make-ascii-cpe "finalInt") (make-ascii-cpe "I") (make-const (make-integer-cpe 10.2)))) (jas-class-addinterface my-env (make-class-cpe "java/lang/Runnable")) (jas-class-setclass my-env (make-class-cpe "scmregress")) (jas-class-setsuperclass my-env (make-class-cpe "java/lang/Object")) (jas-class-setaccess my-env acc-public) (define my-code (make-code)) (jas-code-addinsn my-code (return)) (jas-code-addinsn my-code (astore 5)) (jas-code-addinsn my-code (make-label "First label")) (jas-code-addinsn my-code (jsr (make-label "First label"))) (define saved-label (make-label "second_label")) (jas-code-addinsn my-code saved-label) (jas-code-addinsn my-code (ldc_w (make-string-cpe "sdfsdf"))) (jas-code-addinsn my-code (iinc 2 -2)) (jas-code-addinsn my-code (invokeinterface (make-class-cpe "java/lang/Number") 1)) (jas-code-addinsn my-code (multianewarray (make-class-cpe "java/lang/Double") 3)) (define ctb (make-catchtable)) (jas-add-catch-entry ctb (make-catch-entry (make-label "First label") saved-label saved-label (make-class-cpe "java/lang/Exception"))) (jas-add-catch-entry ctb (make-catch-entry (make-label "First label") saved-label saved-label (make-class-cpe "java/lang/Error"))) (jas-set-catchtable my-code ctb) (jas-code-stack-size my-code 100) (jas-code-var-size my-code 100) (define my-except (make-exception)) (jas-exception-add my-except (make-class-cpe "java/io/IOException")) (jas-exception-add my-except (make-class-cpe "java/lang/Error")) (jas-class-addmethod my-env acc-public "somemethod" "(I)V" my-code my-except) (jas-class-write my-env (make-outputstream "scmregress.class")) lib/jas/tests/all.java100644 0 0 12762 10070636274 12342 0ustar 0 0 // Simply try // to access as much of // the API as possible. import jas.*; import java.io.*; import sun.tools.java.RuntimeConstants; public class all implements RuntimeConstants { public static void main(String argv[]) throws Exception { ClassEnv c = new ClassEnv(); // Adding CP Items directly c.addCPItem(new AsciiCP("fubar")); c.addCPItem(new ClassCP("java/lang/Number")); c.addCPItem(new DoubleCP(2.0)); c.addCPItem(new FieldCP("java/lang/System", "out", "Ljava/io/PrintStream;")); c.addCPItem(new FloatCP((float)(2.0))); c.addCPItem(new IntegerCP(2)); c.addCPItem(new InterfaceCP("java/lang/Runnable", "run", "()V")); c.addCPItem(new LongCP(2)); c.addCPItem(new MethodCP("java/lang/Thread", "run", "()V")); c.addCPItem(new NameTypeCP("sdfsdf", "Ljava/lang/Object;")); c.addCPItem(new StringCP("sdf")); // Add fields, creating variables c.addField(new Var((short) ACC_PUBLIC, new AsciiCP("someIntvar"), new AsciiCP("I"), null)); c.addField(new Var((short)(ACC_PUBLIC|ACC_STATIC|ACC_FINAL), new AsciiCP("finalInt"), new AsciiCP("I"), new ConstAttr(new IntegerCP(10)))); // Check if I can add interfaces c.addInterface(new ClassCP("java/lang/Runnable")); c.setClass(new ClassCP("regress")); c.setSuperClass(new ClassCP("java/lang/Object")); c.setClassAccess((short) ACC_PUBLIC); // Creating code. CodeAttr code = new CodeAttr(); // add instructions of various // operand types. // No operands code.addInsn(new Insn(opc_return)); // one arg operands code.addInsn(new Insn(opc_astore, 5)); // one arg arguments with wide operand code.addInsn(new Insn(opc_dstore, 256)); code.addInsn(new Insn(opc_istore, 2576)); // Add a label code.addInsn(new Label("First label")); // refer back to it code.addInsn(new Insn(opc_jsr, new Label("First label"))); // add another label code.addInsn(new Label("second_label")); // insn with CP argument code.addInsn(new Insn(opc_ldc_w, new StringCP("sdfsdf"))); // the "special" instructions code.addInsn(new IincInsn(2, -2)); // wider version check code.addInsn(new IincInsn(1234, 2)); code.addInsn(new IincInsn(3, -200)); code.addInsn(new InvokeinterfaceInsn(new ClassCP("java/lang/Number"), 1)); code.addInsn(new MultiarrayInsn(new ClassCP("java/lang/Double"), 3)); Label woo[] = new Label[3]; woo[0] = new Label("First label"); woo[1] = new Label("second_label"); woo[2] = new Label("second_label"); code.addInsn(new TableswitchInsn(0, 2, woo[0], woo)); int m[] = new int[3]; m[0] = 11; m[1] = 15; m[2] = -1; code.addInsn(new LookupswitchInsn(woo[0], m, woo)); // make a catchtable Catchtable ctb = new Catchtable(); // add a couple of entries ctb.addEntry(new Label("First label"), new Label("second_label"), new Label("second_label"), new ClassCP("java/lang/Exception")); ctb.addEntry(new Label("First label"), new Label("second_label"), new Label("second_label"), new ClassCP("java/lang/Error")); code.setCatchtable(ctb); code.setStackSize((short)100); code.setVarSize((short)500); // Add some line table info LineTableAttr ln = new LineTableAttr(); ln.addEntry(woo[0], 234); ln.addEntry(woo[1], 245); ln.addEntry(woo[2], 22); code.setLineTable(ln); // Add a generic attr to a method String foo = "sldkfj sdlfkj"; byte dat[] = new byte[foo.length()]; foo.getBytes(0, dat.length, dat, 0); code.addGenericAttr(new GenericAttr("strangeAttr", dat)); // Also adding local varinfo LocalVarTableAttr lv = new LocalVarTableAttr(); lv.addEntry(new LocalVarEntry(woo[0], woo[2], "fakevar", "I", 22)); lv.addEntry(new LocalVarEntry(woo[1], woo[1], "morefa", "()V", 10)); code.setLocalVarTable(lv); // check out add method, also // adding a throws exception for // good measure ExceptAttr ex = new ExceptAttr(); ex.addException(new ClassCP("java/io/IOException")); ex.addException(new ClassCP("java/lang/Error")); c.addMethod((short) ACC_PUBLIC, "fubarmethod", "()V", code, ex); // Add a source file attribute c.setSource(new SourceAttr("all.java")); // Add some more generic attribute c.addGenericAttr(new GenericAttr("blahAttr", dat)); c.write(new DataOutputStream(new FileOutputStream("regress.class"))); } } lib/jasminsrc-2.4.0.jar100644 0 0 452003 11352644061 12147 0ustar 0 0 PK 3cy< META-INF/þÊPK 2cy²ªµ’£ã^J^Ã;\±N‰¥–žM؈3Ìira¨.¨¢ÑÂEè£Ø=M?â½ß6Ͳ3>Hù”&ã¬Ñ-•²–¦”¦h 1oÛIç•5dW`¿t޳èÆ"ǽ$cI[³†°¥òÁ©eƒu @5l:µr:ƒ¨Ê|d™4õ<ØyÉDGÇó>ÜútR™Ž¹µº]k ý6ªØ0DhÔBŒ³Åö; Èä±öZme¢w=g3Í 5rre]dàda«J²¼,#W¦ñ2½æ–Ó¿V¢ªiÅ m¹LKvP-;^)MP¸o`Â^ðŒX‰‹[¤[EËì­Û¢ÀFæ;— s$MÌ™ŸfÙG#2©taÜ:KÌâ±È²nBr„fK¤9‚uíø$lãÝsì†mÊRh"´ngQ-¤OƒÏQ¦T;U6BG'zV/0ãïHÐ-ÛÔ9ãk²Ìºþ˜,Ë.…iòyÿ1öò/4¿½Êšš­SÒ5®þЯÙg»Ë’î=Mmù×ÍÅ?ä7Rë¹/œª-•YtÐÊý†&Çø—/^Fާ”ùm 'W·+ttO¼ (*´ð=ÙÀ”$ZºüôgNð?ätqjd=^ X¹°ÆØb[±æùÆP—ZY­íž}°”x€¶°LSp<¼0¥ÉzŒ#ã­œ­¸Â Þ=9›fD'/OV˜Å8Nr»b>…v ê›å€K0n‰‚æåáóNr^¦‰Z뢫…3<Ö¦ÝÙÑéY~«­ t~uvww{vÿù£ÉåÙÝõÅÍÃ×/_î§‹éŽg7ç$š`×Ò,ºïxûˆæEMùéÑpE’ÉóŸA–™¨=¦7 £qû¾ßû ‡êàÞ¹ · -Nžƒz¦%OÃ'6Ôð‚Ù'ú$+£JS’_IÐý_u~{1`ŸF_ñƒµ.µ^ÀN|Lúû(­£ò‚öÄÖiîLŸu÷±OÙ€<æ ú,ù™ƒg$Ê‘6}‡k§ôÏœ÷j:§GßÈÁ2ϰ žB“j åz!ch÷<9rø!¹Æo$ý.¹E¢”÷Õ¡jG¾­’º],>;žMû:ìøÎouÚ¸»^z¦gøZÃsâ£*#ç7küPK Cá0b½ %  READMEíYmoܸþþ ö¾Øî­µ‰Ñöš|s'Y7±}YçÒ ®ÄÝ¥-‰*)íFýõ}fH½Ø^§W4)p@AHâp^žyf8!•¡­_Û&'—È¥2.o%RT™ÕºFŽm•ËHŸ•fÃrV6;Î5e²Ì¿Êq¶$ Ë2„1EÖtyHÅœ7o Â«¿o‘és‹ØšO®…ÍÏÿ…לýø# ]ö/ϯˆÖgeÈ\HÎ`{Z[p†‚ס6ëÔŒ*@ÈÇÒ|gA±"l¹P5¸˜ FÐ’¸K"¯ÖE¦@ù-µ¦JCä«LnI´Ñð Šl¹©@&Z™ Lç¯3â¥Î‘åœö”KlÍ$ÙË1&„4;<yiz~ÅF°‹v¾³÷<»¶ÍÛô¢Sy¢–š°;è»q`zêŒà€É^‹o¥a£ððèH¾¬¸Îù.r áfW¼"¸ &ÓŠk ‡  …DÁ½Çã~…9<Ô¨X´Â‚RþmvIO JEÄwƒxQÅH$ñÀ]bà®ýÃYÄÍ¿¿G<ß½æà¼T=Ê DÏyú™•§Ä†«ïY¸YâG2áâTwQž¼¸>;ž¿Ÿ“œ#¬výrvN^d,Vh$¨éÌÔ„Q~xüñêâô¯§'ÉËã+î5#—ƒý6”íMT 5ª MöQ0=…dAH= ¼ƒ‰Ôðy!>r³JC­‘7›Tî´ÊBc¹Qé)H%—š¢PÕm¦C‚ßl ˆ­["â^A šúae,ʼŠpŠÄþAÝ£:B•ÛªÞUt5¢°±b„E±ÈmRn¼L¢~#—vø½Ž^J@ EÆ7“b¿U„o)7`6îXFõ¡²Ð¿ß·GBL ¸˜CDujôþAÚüê€#^W®“`S÷>%¾ Ñ“ô/ÆSDÐÑ.c~¨^¨8é-êE }¨@uœu"t  ~&T½¸ŽæDÆA ÛŠ?£îÕż^…“CÕui6,åLc•ö×oQÑí'ëò,¹W,©ªÞåþ x$4&Ú®„v™ -')ÝqV·Í(JB|Ž~`3«ôå †,Xá˜DþÈñU´%¾“˜ ¾Ê2_añ|bÕ'6gè .Æú®€}¤³ à´•t¨óñ’ˆ›~ªë*T¡H¿¤ 5ÖÐÿ ùÎÄG´ó ¨o`®‹2”óØlô•>v‰¤î°ÙÉ»ãùütþ0 ¿¹<¾zÛg{"‡g¨BÚ°#3 Øé,Z6ÖMîÛ-5ðxGa!ë®ç'Éì|&÷9NÃqïˆE=³Ûqrxœuî#?vmÛ`ÍÚàˆSiûíhò7Í’;Yò+yø8SÖ|˜íÈQ|wvü “#5‡ºY¶»9rVÓxcem:Æ€>¿îI[^‰ãŒn7?XÄ¢ÎöpHN¦)ŸTÉg!4ß Íž6Ææ‘ÉWÌ´ð7c‰Ú™q—¸³©ñôe–3ÃшNAof¾£z߇gÀKG<0‰Q"¢Æ:Hšw\Xœ‡cÖˆ¡¿AOï¦Äyì•ïõƒ·SJÏqRNde’úµC I'p4•£ðÜk;ÿ»vðVßé‘xýJ‹Kä¯c3ñÐÙ6;{„ÍDï¹GëâÞ ÷úÚ¤S›‡gôzØ'µìNǾ¼.™ô¬F)À" qî°Ñ=ò™þŸ|þ7ä#.Ñ¡QóÓŸíô£3˜¥ ç+U´èøòšG¯CÄ—9´%`ľƒÏ+]ìbêû“HFñê‡á+.ôBQwýv(ç\¶º91éürïšG ŸRqe‰}c‰»Êg÷IÛÍ߇f9Þ¥#ͺ«³ÈLî¬`¼~íÊkÄKÈÍb$!îïÇbühùFý=3|Èêùp’à›î’4ÔÞx=Œê›>^Kˆ´ È6èËv;±UëèŽatÃ4Ì|û·rŸnH\ —Ä æ‚&¢»1Þ}S¦¿'—ŸgçoØ”2à !ß’Å®¿™—áT1ãvKCÑN±C&:r<\0 À»{áHlT‡»+äE;±ö!ˆM†kw.qÀæ@ú¸«ùPK 2cy<ÜÙÊš¾5 ant.settingsM1nÃ0 Ew‚€gËEÕS·¢sׂQh™.#’’ ·í8iVþÿÈǦo XYè_xAø<ÏK¡fXª‚pú³F9qŒÈ©T×q)¿€#gмr-$­³Ê-ŠVz²ÂÕúÎs»n²›¿6ðÆôÞwÏ~'|èÞCçÞdÍá:r±H‰2Ú©M.“sÆ|@‘â¶ ½m]ýP.¯§Wj0íŠ1rŠÿä´fþòh÷;¿÷îPK j¹×6àé4†Á2ant.settings.templateMÁNÃ0 @ïù KåºLÛ½'nˆ3Wä7uñâ*N7!Ä¿ã•jìê¼?w¼jÂÆZ@xÁ Âó2C4#ƒ + ,MA¸|:ag.€¹X ·‘ê]øà ZWoEÁ¬ò•E$=;puÒ2ï6#L¾óÝÑþé{1ªqtôgÿ@íCx(õ€ëÈi¼Ue*TÑ÷le•„Ð<ë E,lƒ(šzáÓí£7ªv¿xµon˜3—üoNë[¼üÑý1ã!üPK ¢á0Ã:P! bin/jasminSVÔOÊÌÓ/ÎàâÊJ,KTÈJ,ÎÍÌÓóMÌÌSPÑâPK Íræ02Ì ( bin/runall.sh}R»rƒ0ìõgp{ôžI<é2)B›Â²á!1’ÀñßGŒ‹¨Ò=öv÷¤tW\QÌÕ„¤$…³i;TÂÕ|-4Ø^‡H)0rLSԹЀ:†â‡¶],G+˜7öþñ~öæg¡ ûŸ¼‹ÕtºÈeö‘&1liÁõÒ‹²4g¼Õ”àÇØszO¶8¹ô¨Ð¾­™H”T>šÊ44EÆj¥Ã–2ÞŒÌ'¥h‚Þß9P$Êò=iïíkHsN59†Žb‚#¢ïì¨d4ä „ißs¢-jé=н‹ŠÜ òàQ£,|$£ŸLMÒ“ƒˆÕ!½™ŠÒvŠ&FäDAé˜IÜ„S¥@¹ØÊÉœêûÆþõì¹ ôÅ›NŒ£Ê 9±/îè€!†°H–ž– +Çe¡dDltüUä€5!ÚN‹ LwaÁx|—S©@véêóa×4,l(Ô Ÿˆã«´klQÚ£²íׂP gÚ›­‹û9·Æi¶ƒêVT+Œƒ‡‚µ“ýK{°"ƒ{¨}z|ƒÆX¯>Iº‘æA±´Ðã,Ä¿ìÕYC.!¢º¬;ÖüaU(g¡a)0l™ÄÇh¹ã7^Î5—ýº€>ŒÝÿH_Pe8æº›Ñ ŽŒÞú*¬˜›¡EƒDmü2Í‹\g1ž×îžed©Ö ÔWuÛL>¯ªíòð*E'roíXÏ‘ú  „à¹Ùjqì «ïº¶”0ì ‡‹àýÖßЪÎô3HäªÏrÍRöÃeãoðúPo€­‹SQcàx®äWÁ ˜x„áÝ´.#غD¼@¢–Þùypî—ó.*»óˆú„ýÝÞâ:ܼ÷ât¯LíqÚgmnú±P§óœ,ÒGŒo1l®n/çë›k®õzRÁ¶(°ê­‚ÍåÍúúêÇ­¿¹v3[P­% ÌÞâ0Æü[I8ö’¼h ÙÞ#8½z-*¤ tù¸ÍÚæºÙÉ4!å^U×ýâ¾ýA ß 2iß&YÞ›ÝÙ³„²Yöy½TA¥¡y/TÙê’:Ânލ³s;äj:™Ô êÍ«çR a&Œê]}Άþ6Œ /ñ‘äO%ç¤Õ õ[£âB?yòˆÑ±Ä÷«lx’'–{„g"©Š®(ºÐpÝ)tºFw`vTÛVÓ?PK Cá0ìÿ-¾ changes¥XksÛÆýlüŠMg*Õ$$R[N§cE²R«‘íŠN¾ÄÏX’+XdwA†ùõ=ww’¦Õ¤­f4Äc÷>Ï=÷.î„­TMr©¬Ò5ý]Y§Íš~ïo"²Rb›•ÂäsúÞè¶I’{±¦ñËONξÜñóõÜ(KT¾Îý+ág¢(dAi­?Û¶‘† edîÔRÒáTÊuÕ¨RÕ3zK‘–¢ž¥ï³G,9J’‰l{]§{ºn%6ýS‰:虪_¡g)ŒÒ­b%Ù¹,K²¹Q³Ä 'mý~Ü8ó’Ç4„“¥ËÙåá(¥g{ †QÅ£g:ÉE]çI”¥^‘¨I8gTÖ:Âv—ºžñš9^^œŸŸ^¤DA÷©×=úšnúùƒÀö|A?ˆj@{f¼Ó”CàLZ’¿æ"ök®fóG‘/X­›KZJÃÙæ[›Ïe%Ó$¹j ^ìi¥'C;ú]Åm33¢ð!XŠÏyÛÐÔèŠNÒË‚Ãp’ŽNé°)Euôm Õz•l’Ób©1`(×ÔÖHÈÚÑÝÍ?l•‰â±µ; ¹Wç1 +áŒ-ñ™U¿IÊ$^IJžÑ—{Rº†¤Ï›§+`ÌÅ’_IšKQD¹$, øAÕò][eÒ|ô ú­…×Ú0”kiáp(΃¬”sõ\×Ö xU{!–ŠVr˜¶ÂñAtéFVv±¦Ã¬ð¯! •E{6~*_'ÛE€jú?¯=ŠÒ*ŸÁ½4G[Ø"aŒ $±ª„¡¬Q!…/¾•rsÊKaí€*éæº@tkDDɲظnÑz#m ­é±jk«ê×"ÓéT%ɬŸ?aõåÈZž4ú­û ZP@.‚G8æ°•naW†¬ Æ’_5%p¤¦›ðZ­]êÄlp~.Îh%,©:/[1À©[Óá´P6øéß&¼6Ê«æ˜N‘?¾Á&*Uf„Yù8–[ Ã×cø^ÕLq¾X9õØrlM~lóê¸0à@“r)ñ«J,$)×—OÈ(=MOÒȹ> '{}ùÇš\ÊxÕ“¢Ö¢VVÚH6ʼÐо J (:w®¼“ qνû/­f”ÊI#JªQI–½ÚHYÛâŽÙ‚àÜñÆ—]^^îÅü•÷ ýê—rø š¥¿1BýðOc¸Ûw¢Ã `òšI´•`$¢ivuΟ°èìÿ¶($÷Ó'Š/Q¥F[«˜ÿ¤ÍE#ÍFäŽ Í·Sßè<⟠éFyEý $ŠÚ¬Dn4R’Y§œ¯-ˆ×eš<ë>Þè[ÞÖSU+·öÕô|x[jáºgI2^—tùrÏïÓŠƒ'ŹY R÷ñŒpôzNU¦f­r É?„¨[Zzð±e{\h³Áÿ`Ôø)£¶MÙ²à¿Ðy÷?Îrüw§ká'‘{¹–&IÐð¹¿\¾øÂtë{B¡[?ùpÃXÍpعDÃŽîYð(Š”Ë9L™ô=Å JfYІórßf<ŸFéo+ŒK{xsusÿ&¾0¿gÝ9[ßÄí÷~o7ãùR”yNçþŒð¤—î3ØOʶ`®»çÏÓ$XÖ,caféHÎÙQJñ¢¥Â…Bçm a€'Ç¢Q[YêóYn¹ãÞˆ¸³Ù‹å¾iÛJl¸¾þ<ùñÛdÜEÑ qÊs˦¥èº1©qv¬Æÿ9 ÄÕKY׺^W667æ0ðWvˆ„K¦¼NH½Ô i™+äO[D''Šá%¸_*『·̆[5F±."êay¦õ"°qÐu°RÒÐ+A˜ô¬öó·KÓæÝγ©­1:—HX;›ûqÈ*Ј BýP­f˜K¸í¹oÚF=oÐ ‹…wå#Åß0Ú‚½¤ G?K[ôô|ÞÕ†`hŠ'aYðSê­Ìèòb·ŒÏ•—áÍ‹ åǦžPB­`Γ¶L{¨'F—²þf‹B«Y~à¬Z*¢ºüÇõ~Ø…°Ï«írƒõFLŒ2ÀÖÒ3XÇéË5øóc+&kƒtâìb»$ã´ì…b²*6AÚ®ºc¾Ô!¹ç!̶KÒ¦ÞᆯrË0É !Ôk°):ÐjC‚´R,ë vvºšÔ“ƒ +nƒL•½w}}£ŒÀVAW¬ê¦uÇ sü°RTìøé ½ÏRü$Éú>ü)N>_qp´qz ·Q¢?ÛR˜'È£Ÿ!ñ©®=•úê›bRØÌ"Áè BçÎÝ8Zµ ¼Sß?¾bo& Ú6Ûço*¹Wq¸d8¤ýãšÍ þPúœûû8I¥ûuGáh%JÀA©?¿0l­KcMXœ€±tîªÒ°ÌORs ŸjØS)(àúùO'½‹¡D;\£Û"áU˜Í·…ý—ŠEáÑH2ªbr&sî…Ñb*>r¶•å›Ñë<âØ3÷í”h×`ñe‘û}øE!3™þøNŒƒRWÚ@¬ƒ“Œ,¨œéývlsñÛÍ·Ò´Y†þˆT®ô¬Ñë‰"vé> ’ÖõŽŸÓ]‹ªý_»^óÎ'¡­lï¤ <%㇮Fd¬hóÐׇ3ßÖè¶éFö=¾Ÿ¢¤1<¯øºÿüS‚Ç]¹Àøšm<”ram>iy®D#w¦ÞoÍüñüÏæß¼Ÿ¿ûH“µå°¥tø1`Çf‹oÀ§£—ªÝL“PK –á0Í5cî©examples/ANewArray.j¥’ÛŠÛ0†ïýs¹ ‡¦°›¶ ½Xz‚-½ &LìI<‰,rxûÊ–³9x ¥Õ…lI3ÿ|ú5S ðI×GÃëÒÁ“VèJTð•Žd }xx'`&%´Ç Y2;*D“w=’)|fIÐŽ ÚŠÕXÕ’ìpöö3cð(6!pæ]©Mz]ñ ¤#xòòØ–‘?¼©µmUŸK½·&p¼%@E{l4•uÆç޵ 9=´É4¨ý,ÙB.ÑZ(¨ÒM%tô‚RêæÙ<ƒlì¶æãl>É:½A°5+‚•6,†‹Y§ A€ay`‡¡Ë»Ô;$.¤³û(Êyóê‹q»87Ý+Ĉ¶Ê"=½tÈŠu^ M²«‚0Šj틦— ñ`ɵ·%Ln¨n™âqdêY ŠÅß#¥BJÿ©Ð᱄íò•^ü PK –á0Ó&‚“„examples/AnInterface.jRMK1½çW¼c…6¥ÁöT¡QP¼§ÝÙnj6Y’lµˆÿÝ™íö ñâ²dç½™÷f2Ãh4Â}höÑnªŒeð&WÆã‘ö1¹»»Õ˜;‡.)QÜQ¡…wj†ëhŠ.¶&ÕÖéÓÔ£4žû…ÏK³&½eè¼ÍUˆøºç<­sךqÏmlBêªÎ±4;{¬ƒhs&Ï8#íÿKÖC©—{­lBɶªð‘Àr@›¨o)·‚Jë ÆŸµi,2Ó™ìì;!Wt¿M9!¹“¦]9»ÆqVúbVøb¤Ä.Øeƒ‘õ݉{!:“ò©ÉçEMŸC(ÁI‰…˜ {„&.’ÅáY7VúOi—kT:µ ¿‘-û;ã7ã§Õ–xs<= NÐ$Ók]²<‰Èíø´e 5¬!D·ÜŰñ¡uÝöQûˆ<ëUÊÑp³šøõ“ÁÌ£ƒIyŸ\…b/« ºÉ{q¨ûÄ©JGSš|Ñ“”R?PK –á0>õMßquexamples/Arrays.jSÁNÜ0½ç+æHl²‹ªJ¶ªÚ**R+.¡!™n¼8öÊ/M¿¾c;t =Ô—8öÌ›7ožkX,ðÑn§ÖÃ…5ȸ¤¬NOß–p®5¤kŽ<¹µeÌ›¯¢†ÏJÓ¤µAß+SÑOì·š|uî¾ÜHÔyàκ7/w «%\=¤ºyÜÖúù)AðʬáâúòÀzĈ+»µÅ¶BôlIö †ÿ»Š¢¸ïò ´ž2yèì#°FÜìÐ)|䙕2VÖxXH ëNCkÉ›l8 –Ž[+M ÜÅîväb2“¨ÍñàQq—j`VQøe£Ñ{؆{­x¦sQú°•ùmp‡•F³®¾Þo¨aé<‹ZèZ© X¡V¿ÈeOB¯}‚{ï>]"}Òõn·ÊììkvÊEâ/ T³LGœ)J’ñäÅóJ†åÓ£2‡7_öpߨIçuÆ)µêE4mÔN&G’Þ<À›"ÕÐ8J“AgŒC°?$(bùã¤ÕåmZ¹ÒÍ-ôCÎxŸ²Çã“Û:5ÞÈ ù.•ÞÛî9Ýt›ìw·ŠøiëerÑ9&óO>Á{±òjd¯}"–¦ÜØvÆp$v³¼nèÖ^vu±Í*EÕ"©ï$ø©q“À’B“–“‘NóþØ+V=ŽæNs9ú7VƒkM,þö ¦²âZÁqCKjŒañÁæ¢H#¬ç¹}#Ol+Ê2ØÀÒµ”Ý3™Ãà™ú*Fg3)[]Ea_OD{½½ËgŸÃT‰“6‡¯6So­¡¿¼ßPK –á0å¥ÿàäexamples/Catch.jµUQkÛ0~÷¯8ò”B+74)…®lŒÒ²BË^öPû+•%#ÉN³_¿“ä8öÒn¬l"$Žu÷}Ÿ¾»³çprrWºÚ±*\kÅ]ÁÜâ LÎÎ>0¸”¶ƒMƒ9óyÕÌá³8ƒ°ÖÜ–B¥øÌËJ¢M¯¸Ë ¶¦ ËÚÚ„°!Û1LNẖÛ@K‘wµ©´ ˆ!]¨p•ƒ+ŒÞø?øœaå„V–¢½u%Éœà a¡Ð›ðNGÖÀŸy1ð©#¡à:œ—2–In-TõBŠ †$ÌÖùºæ O%W«ôëb™#J°Ž°¹É M8Á¥ø&a%’[ùíÜï]Œ¾%Þ>.5ÏOõP~B¥U#Œ«¹< `Ã\ƒ®6*aHç‰ɯd$ÈÑOÉ…¿ÙãÝ;CæÏ ( 1)Já@êŒK ïú÷!{‚÷1ŽNˆê 8PÉsI6«ÑK[/‚khA/ƒtæ©XçqDÁ{%Ý6,.á†/PNñº¸¥Ç_iO ®®¯?Z¸ó¦í ‰2¥u¶ö—iá3{úSm0zÆaô”›eOnë0‹Ý¨ð®HÓ$=v¼€«K¸/~?Y«ò±¤1扺Dq=‡5`è@úÕzv4 ÇU}2Ôÿ–Ñj¸â:>eŸ1û{ à%WUi¬ó˜3œž×Ø\Frƒ;l<†uóð´!'3?‹S§8FÏ¿);ÆÓÁXž<;¸©{·gçߌ†€>b÷ã².9ìâ–B ;NRПX4G‰¤¤`,iz³yë¤Óˆ¾äpöýË n%I£ngŽõ<°T­ÛÂSµ È=¬öYh°±Ä QïˆfYÕ¬IøWÜ©¡© ³ÇæQ­D ‡öŸBWjêúd@x¥ªš—kys t1Ð?røPK –á0 8róX®examples/Count.jSMkã0½ûWÌ1…FÎDz¦JaaK— {ÙC‘퉭T–Œ>ÒÍþúÉqc%í¥ºØ–ß¼yóff Óéît·7¢nÜkÅ]ÃüÂ=˜¯VßÜJ ñ·ƒÍ+âÒ“­á‡xñl¹m…Êñ/o;‰6¿Ó^9¶%Эw6–f»„ù î½ÜÇ´„|ò¦Ó62Æp £[˜Ó°º„Î優A{®AØqé‘âΤ}õd+%·:_HQBZMƬïȤ-ßñ\rUçÅK—ekaW7%œàRüC“±©øjà»ÿn&¿3*‘KÍ«—Yxj§_QiµÆy.ÏRäI¤Açʪ úÙi&RãèÑr¡&ŽtÏŽL¬×=O8$HÑ ²Û[¬ Ø“¹ÂÌ‹ºäÒ·“kJW¾Â2KX}×éOFð‚|¼èÌaûøKÊ· c½Ð  NF#XPΞ÷Öa˨÷GîP樾ˆÊÄôU è×C,·N|™§‚A„Ç:¬ÃìpQ†þÓE4ˆd…;©u7D¢ó¶!üp!zþň_é·XhѦÍAù¶ ™é#9¶«Ômçö’®S_aqŒ±ÏÅÄI[µùâý=NÞ¹qLò¸`›ÉÏ‹ó:qry”JR€v¡/Ä{¿úŸ÷ (ñãæ§øå ÞÆôð†°õÖAIŽšû¤Æ6ô¥%•CJ5ùp?ŽõTHIZT.…Páx„Pe ùg®oÆ®Ž™µÂáë°ÔÉVÿPK –á0p²o[eexamples/HelloWeb.htmlã ÉÈ,V(ÎÈ//V %ù E¥y ©99ùŽ9©%V6v\\6‰`ŽBr~Jª­X:<5I/9'±¸XI¡<3¥$ÃÖØÔ@!#53=£ÄÖÜÔŽËF¢ÇŽ PK –á0· @?0Xexamples/HelloWeb.jTMO1½çWL{i¨o‚HÕŠDA´ ªVjUŽÈÙ²Ç^ÙÞ QÕÿÞñÇ&¨ªÉÚžyó<óf¦0áTW+#楃K­¸+¹‚¯¸BãÞ18‘µƒMƒó~Û«7…s!ñºãv!T†|QI´Ù”R_ãŒÝ‘ÝIíJm‚åvÀŒGpYËUˆL–ßkSi@Ïp¡•u†;¡è[àp‚ sƒÜa¼¢P޼žpûßEXâ´ûY Åš Z(õVº†œÞP[LœÀiˆ´€Î#1r] ÌP’'¡IqàJïÙðpwØ›’¥_bQiã(™ g äíλe¼HWU=“"‡\rk×|p¨ '~'cooD㩞kåà–~6P´F‹„®¿×õõË»ÀGP¸ ý׳A'rþzNاoWg8x¿×Áýó\Š ùlxUŠÜÂüI¼9³èB$¹‹o ×?œj¨H ×ÚÈâ±ÙŸ `2zD#ý÷z,¦,‘i3×c¶®¨|ª³X†,&‘îÇÜJ®æY¬ðôâ‚òè+j)KOŠ ^M³ÂÇìøÆl“\¸Ô¼¸…o»ä‘xU»XÕVÙî²Æ˜…V> ºÚ¨£&KEN…zîTÞëÓ&Zþ °­Rš#þð…òGÄ ¡¶W¦»$qÐ=ò’“ö[öa 7‚Ï$ˆ晤qäƒï¶'Ï=}ÖÝ*¨¾\åý7ó7{¬³iÙõ³¨ 7%?)Çÿ© é<ÑMË)kC?òÝèfçÈÀÙÖÀx̵•wkÚ•ôþ¤»›Œþ‰e‡ÂË*Qq$9_€‚›¢Ûä”Ú)饛÷gú°;ö²mï4þPK –á0[PIBz>examples/HelloWorld.j’AK1…ïù£§lV=º"AD =xq3tÓÎ&K’-Ö_o’­ØÕz1—ÝlÞ|oæeK˜L&pmÛÓ‹:À5j4ð@rpr~~&aÊ ù؃#OnMJ¦ºá%Üh¦ Èk‰¾Ñ¦ wlZ&_ܳ}¶Ž•\Få´ µuY;´<‚“c¸ëx“½£rÖ¹ÖúŒ9mb¶ p˜y‡Qö«ÿ.!„¬½‡¶{c]Áž„ô]ãYâ F³(ß–T!ÊØŠh:Úè ‘õ9!Š«/èe:»ŸDœ Ù¢z=6ڬ튌5kíB‡üˤÔ: 3B’QÐ[ˆŸ^±Ÿ j3z¹ÿÆÍCÌsQöɺÑ!i«œŠô©Œ_Ã|ã52¥nM°jêeI³ °ÅïpsA‘ z7m‹|uѰ)wáQ©‹=hVÕÏkî +Œÿc’î@e›ÞÙŒÆÛäw–ƒ ‡½_e{céí”5ôGÒŸPK –á0‰mØexamples/Implementor.jTÁŽÓ0½ç+F{*M¶– ¤ ±«E¬TÄ8 o$•gæ½7o&Ía½^ÃGÛœœ*+‚;kUÂÀ<¡ƒÍÍÍÛ¶ZC {pèÑQ¦¡nz’>)ï žƒðµ2þu£ÑgŸQkûh–é3·-UÖÅÜ)åkØ\Ã]«O‘›3Z×Xaw•}ñÀ ÷Ê (´ð@® e Æ¥d­}ÊкŸ N)zëp¼eNy?Ž]c£›l7Š±ÕœcG 3Žg½Y(­éTLó­aú|Ë:m>À«"oÎÚ~6è .ÔôFÉï3.¸é8õC˜V)œQ‹áÖyš[êˆ%ŒÆG锹ìÀ)œtSѾÓl=Éš‰²ÔÉíæcøÐÏy/™+îÏ@ã˜òç©§qº)úÓ¡áÑ›¿/íN¼¾ƒ!õ ?PK –á0ùh«4˜Eexamples/MultiANewArray.jRMoÓ@½ï¯˜c‘ˆÝD©5 E$+ЦöO2Þµö#!üzÆÚ&-½0‡õhöÍ{3o]Ád2÷nØ{^u®ÅØ¡…Ú“‡éååëæ"¯x ä·Ôcßi˜ >²ÐäXcèÙ–ô ûA(”7I"Ï?Ónî=¢ç)vÎgü©ìK˜žÃu’}ÖWä×ä2õ‡!¸ŸÐ+%ZÚáÈlCô©‰ì¬v<™îÃTÊö½ã,’T#èÜ¢ƒ(OÁchE\£0mÔr¹PS4‚!Àn…xÆS„4¨ókÜb)hWå—Û55Ñ([Ðu[ô­îʪ)ü›¼)zRÛ;Ú7ãÝ»³?Œš…â°]ž)Û­ÛuvË>&”'åI§§˜¼5Ùæ±’NõÓ#Û³úÓÝ·èÙ®*å‰ áž#ŒŽH€WG%ío60˨*Ÿïì ÷îð†®Žp9:êE½€· /ð·TÏõÅ¢ºÇsãôßXÎŽò‹1ôrõ?–€Ü„!:OË©yÆ™?PK –á0ÞD²Š0çexamples/MultiArrays.jSakÛ0ýî_qßÖÂâ$f)´ƒ26XYÙ`¥_Lû+•¥ Ýz¿~'9!IÓv0a°ß½÷îœÃh4‚ÏvÓ;µªn¬A®ÑÀ-õä`zyy‘µÖ?{päÉuT¥¡îx%9|Uš® ®5úF™1=a³ÑäÇ·­fuíö>] ôºåÚº>Ö|Ó Ü´ºâ‚üÙºõ‘÷Ë– ”é¬î”YAxG•jÈx%D0ŠHá‰Ãÿ]I.lwµ]­[ÏY<ÔöØBëéUâ¸&¸ÁáþVXΤëvUƒb¨,yóŽKnQK¿•4=ס­Ž\/ÕL8‡ƒGÅuä˜Ós1•¤¥FïaÓ.µ*ᥬ“Ô·äZŒ5šÕøÇrM%'âÅ3š ]%:Šjõ‡\’6$«çÇðíÓÙù}"ñ£¶X-&að@ÆšN¹`ÿD`|Téˆ[g’”Lƒ@ò\Iܰ¼Tæ¬ø¾§ûÅNúÏ…'¥Z5’¶%jޤ¾|€YDå’T˜–­èj8’eè1„Zdób6/汑ÒÏ‹ì`? û8R”‚˜7Eñ ²-¹gë(C¦#¸0æè:t —š`óŠÀÅ4Ù‡7=Ð0ñ<þ2ù¶#K,Ixx*&ó®ì™ÁÝ©þÎjéH.+`l}Ûß0›„¼\·jË¥bOÅt.ÏÞnöÜîRmZ_ A2ĹÓç¡—Hö¦ôÅ[ÒÙ+ÒÙôÅ?¥_¸lPK –á0oòè‡7examples/NewArray.jRKkÂ@¾çWÌQ¡&*¥Ð¦-HiÒz‘Iœêêf7ì#ÖßÙMƒŠôÒ¹ì2ó=f¿$‡Á`ºÞ±Z;˜j…n ^hOF××W)L¤„8¶`È’ih™Þi%9< I7kƒ¶*£o¬jI6{¥ÝÄܧÆM¼[k‘§†0ÂÔË}tfä»7µ¶Qô±•ýŠvÄp¶Æ+ÉY­ó°k½j|€Ó€RêïÁ[3¡Û$ez’–­…ÚR”pöô$µ¾æP7Ø`&Q­²·bC¥cbEȲcÞ %Ü}¯ÿ™ð³Qj\.†á*T£·¤´j„qå™RvÂ4ä¼QIJj ­Á™“uèø¨P¨Þìù ÷á ¿/ouR)*á¶ÜÂåQ'„"-Œ“ÐË¡4t’‘[º‰£vªÐZ#ŠÙîBz]g6žA{ÖiþÕ€M„j} AþûÑK”ZY·‡{÷:¡˜Y¤/F¿‹³apsÆS~ˆtt¤4<ºÇ~ÑJ$äøPK –á0ɱî“pÿexamples/Switch.jRMk1=[¿bŽ)Ô»v …¬C ’Æ´´`È¥‡0Þ{eÏjiädÿ}e%!v 9d.IïcôÐ Æã1ÜH?x»næâP[tð‹ò0½¸ø^À53äëžù5Åžw\f·–©‚\ u%=c×3…rñdµn‹MB]GmÅgܱÝW˜N`yȾ ù'ú^B–\´ò \È XdûE]ŠËd“÷‰x2Üg˘Y’»gŽA=*…! NñVâažHtSÔŒ!@—lkø/S„ا¤7¸Ã’Ñ­ËßË Õšh¥œš7Þ¥uV¯Î¾<˜”²`ó8Ù·ÖídKNÜÎzÈ'JåÓ“FïLAiòƒ§ ¨iéк³¿?ßåê­[Ï^t ¶Õ=¶ÞÂ7“'©Å}œîûÔÌh ü f1£óÔÞ‰4ËLþ( ­0²¦ã[‘Ãp'fô*ò‘@†TæR™tX™ƒ—=ýPK –á0h––¬ÂÊexamples/Uncaught.j“MkÜ0†ïúC.Ù…ZNz(¤.…PZJhi¡I{è!håÙõ8²dôáÍö×w¬8›Ý˜P¨¶‘æãyß‘+(Š>¸~çiÓD¸rVÅFYøŠ;ôp~qñFÂ¥1x è¬å˜w¼DŸÈà[È«U¡#[â½êzƒ¡¼±Z%.![Ž»L±q>G7|çgp•Ì.wæÈïÉ÷.ä¢×wÛŠ÷ûHÎBµÃ`O#hu9gFö¿KˆŠË]7`ÒÚ¨@;Y†Žß‹%tÈŠj`%‘#(g¡®RœÁ›&dpÉk„‡äC›>­ i˜yÈ)©çé´jP¥QvS~[µ¨#óBèQÓzÇd)’2ô‡c'À… °v>£1î—ó¦^ !§Ã©ß»1ïýbùSŒª MaDæKðÐæ4VÎAÊ8Ußžåo²ƒ»Cëì@>&ef˜åq1y+$Úz¢|®ãd4ùäQBÁ{<‘¸¿i²åÉ왤UäWÖï/O@?¢'»©&i¨ã¡p°¾ƒ×"ïYÜø¸ï0žÕ©ÿ—â}Â3Ñ*ã‹Éá-1lŠÂô´¦qlù¯ÔŽ/³ƒ”ò%ÏþPK –á0Oð Æ)Žexamples/VerifyTest.j“QkÛ0Çßõ)î±ÄI^­·A :6ÖÒ—R†b_c%²dN’3úÝw’Õ5Yº—!ëîÿû\Âl6ƒO¶Hm+k¤o¤¯8 Áòòò]×ZC:v@èz¬‹Xw¢„ÏJã¤ØJ×*3ǃl;n~¤ž†;t¾Øræuð¥”{Úr ˬ‚RoÎü¨³.ÉÞJöÀ©ÊxéÉ®·Xy˜klÐ5HäÁ7©£Bb3¯ÿB”,w×(•­jl­qž¤G—šö¹)H{K»nÙ”³ðJ`Yl‹,„ÐJe.&Ð"©aÚîÁ“Šz*m &až7q#‹ëÙ×G%1-FD–À)SáXȲxèO"õ-‘š‚±>#Œ‚£‘/O0ØL’†½ò 'æq*é•eÔf ÊǦZí{Fƒ$] F7¬H!ÿð#£ÌæH.N1K‚Ø.)vdëPñ¨’Ë_ö5Î}½ æŸS­Ò’b˨³’½L¸Jö9*-;b ¿Æ÷1º°ÖªçyŽ z«ê‘ú-sf‹’6îáqr\#Þ±|ˆÄËÓ“C‘ñ½ÎÏBˆb4“Û¾ñ ˆÂ…Ž'Ýòs-Íf>.‡Kó=ȵï•QþãÅä^°´ÔVÖ?"yëí5½"¤>SšŸTòNQ ©óE;ë”á$.7¯r#£rÔµêøcãŸ2¥›¿ÊTü†©ßPK –á0€Ê}w–examples/VerifyTest1.jUaoÛ6ýî_qû0Ôl9‚µÛE‘I»eð‚|Ù‡à,,&)”=ýû=’ªã4Ù0T@b›ä½»{ïñ´¦ù|NŸl78µk][áaC¿É Ž–oßþZÐG­)m{râÅí¥*bÜóg²¦ÏJËŠÒóÀ¾Uf!sÛiñ‹;qªnŇeñ€£ûÐX—?Ï9£å9]÷zHÉqòÞuÖ'Ü[7x –ºY#ø£Ðí#¸‡Ó/ÊúÑg°ÛFyªÑ)­{ñ)ãvRÚê)5q ƒu4ûˆM»*×7²0=£VÐvE[Ñö@^¤”²[-3Úö¡×¼ç7þ•”A5+PÓÞVJ…p5V褅+ev]q﫵iFbšÖζ9k¶N_ÇÂØTtÜVµ‰ø€¶[1áŒÞ Uª®ÅáwÜ)ó¾/ˆ®ŒÈ;#>9Ã]ç,— €ZPˆ‚‰+Û©\I±+Ð(±Ö¶ä€’Q±s<ÌÈ:ò Ä tp*î­&kÀàáÒ"×½~d+¿ÛIƒj-›Bqü÷™f×Gí ¢ùæ Ø ÁöTYó&(¥)à•Q¼èšyàl%’VÑTÄŠÑ0’oFŸœd>KHÔc h1—p•ò‘¦ÀÀØ©ï ð¨O¶í¢YO,7‹?Lj&!’H?ã–î™æ f “+:¸»Ü\}¾ºÜÐåfs³9=P-}·_™È°‚ŽÎh$ •%ýôžÎcE©Ù{Üß­V%½6&…ï;X=V¶Ðlv‹›íƒ”±£EÇàwʨðù'Q\m¹º?_•ÙÛG1Öì• =ëH‹g‘ ¾wfRŒŸ¼ÈôÔj  B«\F¿jO¿œ®å®1À&iu œ’qlAõÚöŽ¢ =¦×x9SÜ’4‚³t¼°óo³àÕl¸dç¸ÍùT¶øe$¬ºˆC(K{v*Î2…©pÛ=•¶<Ë)è~ãÈXM¾»;8õaò ~ÑR¦D‚ù2QIéÒðø¾† šæ!–²×Ç2’žËüS(¯øÐ·m#ÏH–{å±|Do8 Ö²A—£ÿCé8ÉðѲ2Ó¿¾>çOHhvëÑxÉà&“±PR­²*ê‰Q…ªž^ÿý®(þ­®PK Žƒ1L£Ó!f generated/scm/AutoInit.java•–ÁnÛ0 †ï~ ¡§dXò9YX·vWd&Õ"K†D»Ëоû(e5lÍCh ‡è§ù‰¢IÊTyT½) ]7Σø)ÃúæPF† ¶-ºƒÕX¼B”¨•蜮ÄI£q±·€%Ù^ XWpÒ:éåµ>:³ÖÁÛÅC-/°’Ai½R <,? /q×mÔvO‹års×?”ùï¢Æô·²†^È_IÿN2sÒ`ª ñ9jLÿ´8I•‡qx×™œðÙå<&qF$gðqÊ͆qólDéoœ=gî_HbzW®=š<‘Ÿ’È$ôúŸÊ$Ω‡ózŽUÎΖr\oyޮŦEŠd=€Ðï[²”ÉÂ{òf˜ÿ¸žÑ‘`»¼#i*0sPº™–ì À/ jg€}ÒØ%Q=£¤jÑ‹|åý5‡ì£x¢µUÃî£åÁ{wïÖ –ä$½—Ó!ŠŒ¶»@?’Fc`dáÀèâø[²ªÆEÂîé€p·"GŒ¼µHJ“vdêp$÷ã– €éϰßSÁÏ‚„¶?A*£>G'¹]ãÓÝîYQI¥`òlÛd˜wB×úQÂãé’ÆÇ¼xCDZsÜûÁ“3NËþÝÄ ƒ¦Ñ­€‚Ík‡Ù ‘@Mê² úwž¨—$³Id›àÐ}Ã¥ÐÓÓ3/¾jöØ‹$JÂ&_Ìr?÷„x+ÞŠ?PK ³ 3Oá7Y*uOgenerated/scm/AutoProcs.javaå›[oÛ6€ßý+˜(¤¡vm'é°xYdЇ¢\ô¦éX­n ¨¤YÐÿ>’².–éU²"Ñéƒ[“õññƒt膘|Ç÷EÄ›ôzŽŒ£o8ü6é½{wóàžú”aNhþ„BÇ_(ðÑ—UŒ>á'4ú.®†¿_‡èîï/h<^öˆ‹£HŽŠ‹ÛéGN=Dpê/"4cÐEÌ(—s©G}¡Ïóo½ç’#†î“uK]av½EwþZÚ¢—¯Xð¡»„†Ü |ÑôÜ©£9ºVgLT“Š{aòÅY"Kt_#?v]='C!Ÿ>¢Y ˆ;ÆfŠ©÷{_€“ ê8–#Ç öÔž ŸjT1¼¸¤Å³“k5ôõe@°k-í+Ù6Q`¢}ÁrKž{’ò¼yƒNT‹ãGû„KkÇóƒµ÷ÁÅèV6«ÈL²£³Q¾ƒ@üÉ®*z혅]dJm‚)ëCÖß+»´2 ôkMõ4è ÉSXÑ,šFš”N™Ly/ 2‡Xr[ö0Êcæ£ô@y¡0ž»A3Îÿñ ù‡%½ñœoþyVžÀÙ_ êO0áýãPwa ï–knc–Á&pWœW‹ªUëŸð¯˜ªOŒÎ"Ûõþ“W«*@åxÿ©IÀð£Ï)[bB ´ S`7falCwņµÉZ5âñ$¿µgÂ4O†™jàå˜ÍXåê.6MŽ‚›¬¹ÍX[Àb]ªö„x oG„ÕI–`ª`¦3€—ß,)3Õ€‘„7nUh¨»âÂúh­ ñ˜òßšëà@ø17¼$ó¹À¿G¢|˜XJôRð$¹ï;¾B¶‰;aÇÚX­¾;7œó­Ϩ»d4Ü?”~ìÍ©¾h­äFhêõM-½¤Š™8Ýîn¸~½DŽßÚ“YüÎsðu—h¯oÿD1Žßw-òBÈóã$€´ÅÙ7œõ%€´×ƒ6„•uŠŽ ´Ó«›(í—ÈyòL³Þ÷‡g=¶1´B·èºÜÎ}¡j=4ydT¹o•Õç¹ú¼PŸ— EÒdÎ UHo¡FV p nÌb‰¸Ï¿µ±Z­ 4œóÃ;t¡{þÝ(C&kþ=;Áo Ä̼jYxHÁqL‰¸+Ž©‡Õnõ±íœ×•ÎVlËï:cݻΨλNVäS—j À§ÆÏ#s¸qÒI¡ÍÎ&m'dS ©=јg±º>Ç<Œ¹XÝ{ {¥±›,£ß)ãTzIT8ÀšTcÂïdV3Ç”4^¾°†ô¼úÒ€/«WUöÛ¬©h¼Y£¦òóþâ›Â5A ~3˜)Ì‚“hâ÷Ô‘A $"þÉï'u×W‚WW³‡x\¬º•°SqA÷¼ØÈ>ÂQ¤Z-/HëÉ¡YT‡^}êrÕ0Áy¯8‰Js“ï3ç_“^”e@"ÉÝp#Ö„†¸ ¬Õš_ ç{ãv†| [±°†Éáá%ó3ó€™Q‚Ùâí‚^êBµ&—Ƴ}Z4aËz•Âj%oà× ˜“Çs× ¯ì>)rw],;€[6Ë~Tm¨åˆž7‚¯²a›"+tï¨jå•ÿ3Xv ˜-7§×@ßçìÉS â$}ºïúÊÙE¬¿A!lYyéì¶¹vtÒ¬¾v^uö“Õ.N5lch…îÿ1gÂPy_@ &ÍÒÔrkþPK ³ 3MYù dJMgenerated/scm/AutoTypes.javaíœïo›8Çßç¯p[i‚iÍò£ÓéšëMU—“&]o•ZÝ{‡˜„ldL·¨Úÿ~¶ 'Mb‡à\«© ü<_?6Ðzp‚@âEƒV+ˆbBø“öûAëãÇ딑 ˆB†Æ`4l£û ¦)¸…3Ðýt/.;¿]ö:`øåô:O-/„I"¬^'^ÜÜô“!pøñ+€Ó0tÁsf `ôÜ{S1¤”Pç4‚è âs/Fœ9FÇë éD=uà—´ÉóÖö =¹’†?Ë6z‚¡ã»—bß@rñýcZ¢8âÜ“œæÝ;p"÷8a{ˆøà…>E±»=+÷Œx|B68ë–ÌóC|wG²GqNî8y“|§Ûæ=Èðåi±”b‰Ó ÂdŒ±1­#ì¹®ø®h&NGaàåm1’}pDŸsSÎégÕœý™aþ2#»ñÁ*ÙItKd·ÌZ§ìæ±Õ‘]ÑòûFèŸe•ò0‡>}­D´×Xõ©y÷¡À77r7öTnìšÈåh‘cùƒ4¼ãˆ®ôÆð¨þ+@áØª!í âJ\ûÕá2ëÁ‡ò±¹Oÿ¯Ý×W¹¯g"Î3ËBú“¿{;&Á¢3†àWÌõ¡g׺&È©-‘¢š÷àÉðXÝXsRÖœÏûˇy‚1• Ëîìa¹8AÔªTdÌ{-ÀjÍÅ/á ïV4BT™ûø EâãŸ]ç²i›’ÚãV2ý¬Ÿˆe;¼ %†Öý9ÛC×?xèú/C×{ ÝjÇnäš±…œua ‚¹UÃ<åQ~¤¯kÑîkÑ]5eóYq©Ž'÷uîýš~вpƒ=¸'˜¸dÜx„TA«©¥[KrÛ Kn’ÛÊg8sei=Å)Œ–<ÿ÷-eqÊxËF ŸHì$Çnú%“·Î‹¦‘Öâb_L×á…©0œó6]~UÎ:u'#ªU‡öñ¾„ÐÊA•¶ö‰nßÑzÜá'ãë£1:üòhõ›Ñíì5~¾a‡e½k®ËJ¾]†rÓRƒÌ›2(JÕô\É·³Ü ûpÝ3:³h•Þà)+£nüå¾ fSÑ«iÑ8MvD}‘“µh´ˆsŒ±5PI5Ûž"¶ŠÂê[l7ò¦R«ÁØö±UT^ßb«öæb‘ÇDvƒ2Ó6Y±IUrÕ(6 ³%×…Ž™~‚2ÀÞWœ`;,§ÝÛ ¯»\áW€öð ä±:¦·ä˜®¡'HçzÖzÏWÀ›~g# Y)…3{F[$™ùnÉ}ÀÍ7šˆÔ°ußíØ’BçŽGøSt•»jËÕq©÷×*1þ¦ÃyDÅ[eö$‘  Þð,²Š¶æ4²5Fy¤®Hî´ÜXé°úVË#ToRµWæ“ÿPK –á0Ý:—öÚ lib/jas/.jas.prcs_auxuWMoã6½çWð¸šD$EJBN©ëÒ&H‚ö4 %&VV– ‰Në_*–4äÄ=üÞã|ðqHßܰ—m=°×º±Ì›ƒëvÆÕ¥iš#{³­í³Õ¯ÌVµ«Û7¶3GVšÃ`ÙãÓꙹŽUÝÅÍ {ZßÞßÿ`S1·õÄáêâÛª·£øò·ãåc_—ßm?Ô]Ë8Œ«_.¾ }y=”»ëª¯?lõn> S*ѬPYªrÁ &AƯD ºõ¹Þµµ;é„Öâ¤SEš0®q/ä“ðÝ ×+ãÊíºuýñ$å)OF©Ìs)¶¹N9 ‡ˆo‡²®WS²E @<Îé¾÷v˜‚YþY¨,„RÒ'ÈðRļk‡v ˜¥2Š(4 gúç¸{uyë\?×™¤±8$õ³ëý6Î…jšâ¤ÎçãnÓ5'Yšé`O F¢}7sŽ™ˆsä Œ4Ô¶©æ¹ :™HŠþóppûƒóEX³;­ Uäš’hܦ3nq@Îã–€8Þ›Ãs¥c‡ŽÒ]Ùfþ=‘‘É%XëéкzgW];8ÓºÙtJgYÜ^ H%küeݶ«æ}Ñ*j@œZÀ6¯½ÝO}Î¥©ªÜÚ]÷}·xAÊ @½ÚúÒFOˆÑ @ -òиÚô½9â9Ò i’¤ý‹Ù4vø§öãÈdì žòÈwíG÷ÓÖ­³ý«)mpÖEÜq™rIïû®´Õ¡·S¤J#£p@‘>lÞçvç¤âé9Z {Eœ¥÷ä ¡ÆÚh¦\Îã>ɸÏÌûÏÀó,ÊI_ X¦é¬³o¶Ç£ïªH$Óuû1]+Ja#, 6´{]¶ó‰IDBθd¹ÿΗĿ N2½7»MefǤa® HGQ×ý<ì¿ØVß§€D²ÂßfgÇËjînA-Ï)gË¢ñíËs@©vß×»¶«&óÈÓe8Õ+Qº9u[b™EAîPoº…ðÅíU0X2®“àÎöÞKįwó‘^ %³WH@ι7ŠgÆä&Æý• ‡Š3 ‹O3ÍÉÕ¨_Œ—¾ÊD¼1 LtëK»Æç ™ ó%¨oú[þsFkd"~uïè…zæy5Žé¦‰œ6=¯ #x^LÕ•uûÚ]•cW˜äj¬[¥ºÚ+q’÷ïÝÁ'ŒÁØÇRÎíÐ2ÐTì ©qR¦óç)ÌU äšâÿÓãàÝ+8=y ÿøÿS\•¤:ˆ›Â4nÝZº¯t‚ H;w‰?¹Ké|¾6üàñ#ñÓ1üPK –á0ï_Y‘‰»lib/jas/CHANGES.jmEŒ±‚@DûûŠ©šPJC´ ¡Ñ/XE6½äv1ò÷"rÞ¼ ʱGQ–‡-ê¤hxæÂMj¥nQ¯ð„ÉÆC·‹IDr™Ôeä*©9©DsG‘÷Ÿ‡ÇW™ñʼgÔd£è¯o%sô”çÕ;ËsñnÓ}Ù£"ýIýÍðOxPK –á0;Ö4™f lib/jas/READMEVMoÛF½óW ‰ ™ÊR î¥ní¢nc$uEÑÊŠk‘»êîÒ´zèoï›]Ф”àƒ)qfÞ|¼7sWkOø{xž¿"[‘"¯ÛmÃô‹zP´Ú.lɤ¼çvհ˳,û­Óņ®Meϳ³é“]W´³õÊ –î;èoy»ÙQQ3¬l‡_jmÖ~A¥Å¿L•mÛã+øþ†î%®/Ú¼túñ£<~Y÷Ö5e~¯|†Hw‚»°íVã7RfBc§·1þþäáGk×8ö]óÞ`A}­‹š|m»¦¤­Ó’PÍ0õkzò35}LOè5ݲ—âˆs6ð©ÊèÜšFF®Eײ *h °@Q‡°=_.û¾ÏW*6¥íMnÝzùïfå—H3¯CÛdÙuL—”nüA½QñŒNéS­‚tééF¡çâbßÇû/÷Ø`V p+¦ÎsI¬×á R1MeJÕX@Oõ”¤·Î®jÉ:*µã" ­•³m ò,ÔÎvë:¦-m"Ú"/µæ“ Æ† ,i#ó€dçQšþŒ®œC„°ø~—^š#A?ØUªàøvÉ•6òµ¢ N}¯ºµ›n;V]³û^Jz8Züß‘ÒÃä‰ÁþµóFôáî÷· ¸/lç<Ówg'taÊ£8ÐZ/Pr‹Y9‹|5 Øk© @Ë;± Œl¯Ÿ6 kcÇBN~ÜÂŒtÈ%æ)] D(45‹1s….¢Ï÷Ó¨Dç¥v‰¢Ó£ïõ¬Ë$?ŸÜœÞ¦î ö·W—7WãdNñÚ3Sm{ùú!hÊ»XiX–h„Û …ËDá˜mâf.ÁçO>Î`ü (½‚ÝÀã{~ .ô%0äê“ZMÆ¥5Oe.ï.Š-&КA?£ƒVþ‡ËdÕd&±G@†x£ŽÌÕCê0ÉÅb2MšÄSí…3µn/—$càDÇ÷ưi/)±oú÷r?hWi9j¸¸šìÝš »AhÑp~䢋OÂ8‡‘h9è"Ff/¢$@üWâèá,@ì1)ÂuÌDpÊø¥š<È/_Žz´¢„·œœ‹ÍôÆ _c"„EC×õ°mµ¯súI;°Ìq Åæ‘—±‰íre ëΔ±”ó χå•&[F3ñfˆžûúsVä{ ½6Œé ‚¶o€0sH£6M“QFK­Újçb ´RS[-Øë¢jøzÄV!áÈ×JÕH»ì¶3fP‰™Þ¦;ãh³²é¸N®môces¹k”YwØy‹øýpÄ-Ë/klé(÷5ˆ­œ;±¨ÂykƒÖjû¥ÛèÏ­}³T¡9eÙ€0Ñ-£ª…yò+Õžc›BR³x¥Dô¡ÔFŠô! i$ù°#c³…½«È¢ÿ©ÔP®»ý€HGµ•K"eÙ{M§¨Ýélwfyº?†û+ƒ=¾Ïƒµè`”êÛDøA¹Ø|OA·%o¤å1(²W{µËè†y+5÷;SL[áã 2~ׯ‘­­R®䂞%õîá,t}6ýSAN¤è™Ð´rÌH‰-[[êj·ô¸—¥ÂúFRàÚ® &3°²6Èíº“KEˆm«,AA ±›Äàp·vX‹Î–©EÂî AæEÖèn³U·£–EuQ›•U®¤ó“ãëq#iÅ6Ä.Ky7qušdPüRáÍÙ¯?œe¸¾÷« Ī–£!û˜Îµa1”çt‡­~Ñ­éå zþæüõóó—¯èýå½xóæÛì?PK –á0ìî¬ò¼Mlib/jas/examples/READMETÁnÛ0 ½û+xÚ©roOà v(¶îd™‰ÕÈ¢!Éq²Ã¾}¤d×N‘a r°$Šïññ‰/­`È'm}„ÔDÀ³îz‡hC´þÀû:Fìj‡¡ÚêàUŸ4hß@^I@4Áö©ª¾aè¡M©ÜíÆqTµÓæØÐè…Ãî÷±Ž»WU›:{ ÐQÀª!3tÈL’%¯àE˜‘wHè\„ ÐÒ‰ >#ÎDpô»À·O.ðÓÛ3ÞÖlá+èžì/Tüãu«Ož4U² BÄÄœ‚ë öüéŽI`RUUE+¸J4x\ñ±ª€ñðllÙú@‡ Eà€ƒN,«††±•ãXX%¿ ñ¡ h1u‘×P×[Çê. ¾OL[¾=¶Ö´+9®/ 5¨à³sÿ®N÷Ü›”zÊ=5ðÀ‹7iw+Ü01)‹øo€†´‘\?´è'…m¡ÒÊ>ÅÀ.K¨±VNVŠuuÍdB2j‚å6Þào1¨Ú‘‚k¦Î¼-Jgžƒõ‰Žlfe=;¢^ý[…UÚI…²3-æò?F¨‘ sõïë¾u³Ê…ùžû †˜ê+5ul6¶0?Šì^‰Áå LÞ ls¶sÐ>ºbÀ`SÛa²†3,ñ‘Y²÷godû9Ò ï§ùìù=j±pöí¶ØŽ³ðSɯ’Ø‚©Ì GfÀ¤¬ï%Dû¹D1@¶Î½ç ©kJkæÿÑ©+‰&ñæ½%j&u­i±ÉJÓYÀ<¤^uüÉ{öo”\—8®u¯m`±æ°{Bæç¨¹™¹ø<ÝzWf9l”ûxÆ`,[çéaÃÓÄÙcy³¹v‰@nËtb­#ŒÌ)¡‹ÈõÜC {e(ðä¼s® ºyz.}bvƒK·¤½é̵\SØ”aSýPK –á00Xvîn lib/jas/examples/exprcomp.jas•WMoã6½ûWL  v+§Noõbí­À-šb/=´4¶¹¦HF$í¤èï¢,ʲ’Ø93¾7_Ùl6ð #x+Ü¡A'*À'Ó¢µB+¨tc„Ävº…¯Ü‚PágµØl6áþ:à $,Ô¸ ë çhkçUåÈP”Mrå`ÿbÆ[òÀ ÇeWq‡Mµ€=zíØ{`ïà>ü®á§¢€uQ™gäÎYH {TØrRà,×\j…`Z½oy—’&Û^:»ª$·6øÓwwØ>;¬tä˜Ã–œ o /„#—¾œ÷=sâ½Ëòù ªCç‡iÉB4Ù ÞÅ· ë¼…“¼ÙÖXX-h–Zä²¼Q&RûÆ”ážE"˜Ã[·Z­†SgŒÍ]iU/â#0¦|ó);âhgKˆÅ½¢—_ ¨$üÒMØ]©Íº·ðÍ÷S^X›^h*cÑ}•oK –êXPìX9] ñVô þB,£”+ø•$ÀiØjâ{O?úxD4ôLHOîÐɦ•07U]RBжÂx{€°›¶g Ùp½Zä”%Æ>@ßƺµEŽÉëâ×WÔ&¿ž67|ÁÇO8éû=åòøò‚×uѳt-^NÅ­ßΊ¿›Š7^ΊßMÅkq*®îšbt’)tMÞÒWÝ')uî_Ò)^kÎ(&ñÁ·Ìù\%¼'*¨¤ÇQÌñŽÍs™JÉŒ8æÀeoëL±·È~ÄTòM¡„»!1äå+ŸMj=±¢6\(V€Ñmh>?¼Áµ‡h!t…Ä]ÍÖ>Öí7ØéÛÉ5 =RsˉˆÈ‡Zá.¥°)ñ CaDÙ ºÆòjFŸÁh$râHþ"E}pQŸäõ??FktôIQiu­ó\&šhb8躬 Â2ô¿;ÉÕþî÷íW¬Ü–‚åôÀŠ/ËÎ/ªÚηjœ>—•ãÒ·¯KŒ :õѺtx/òŽ‹TªâÃ-…èf¢fySÕzƒíËú“kN /0½^U¥ñ[IÓÕ“«Ð/Æ•?‹ú¤Jeªç)¾„fF©GÓÛ…úÎï@9¡çáÙ:lÈŠkúþw„¾û#ûƒ£¶Úl–C1{æfxë"a. ærdyã:;æ—Tß.!Wa2 â¼+1Vü;•ëÊó*!ó™ÌþËÉ ®Å¼Ê2”›pƒ¿?g»Ðý7‰â1»ƒ_gšºñEŸ:|‰(ã‰á€Ú%‚»YuÙO ݼ‰O<ÎóÞò=† ³ŸÎ‡™½MƒmÚ©¡‹÷3ý03ɆJHµ¸²ç`mñæÉüPK –á0ÀO®6Æ lib/jas/examples/exprcomp.javaµXmoÛ8þž_1ç/‘ÇîÞá¾ÄM4›ÞènŠ&éá°(Zbln$R'R~išÿ~3|‘,YN²½;£E$jf8óÌðáã1|*E.ŒXr(+iDÎ!Q)‡9—¼dF( êøº(¹Öø¦Gp³ðƒ?˜>AäEÆs.M-ouƒp¾PpÍÍBÀm–åLŽH‹þÿKUP0­Á(4Z°†t0r¯ÊœœÁOG…cøÛÑß'4r%³ Ú6|ÎKP…w½*9°,S+žÉ–¬l–që*}ÍÙ\$(²¤ä8a ³ TZÈ9M™“Ã4õÇ_®É ÖxEn¯&¡(q~P•±òK–U¼¬„YدV6“ðÀ7+U¦§dÇE ÃúéM<ñæ§S]FUÂZ"< ½4œ•%Û¸¸Ðª„L±TtLƒÃIò$b¼½•¢©$‘¡ªµhJ‘

¾šý¬6x^¹õ¼¥ Þ †0ˆâ/ƒ8øÚÍ9‚ÖM6íáN˜ÒêQ­s` …¤Ÿšì/® Ú8xô33ìª2Ee\%Ð6Ü*€éÕå:áá>Ü­»s]Ê%­„oßB‚ý`Ô†_sœ£¸ÆB‹º1íˆ~ae-Ha¼®XØv±`9ã†oרƒ–|¤*pôö¢È.œÎ/.î>ݾÿ8½v³3ôŽÕdYÈ”5‡®ÚxÏ“›•c½ÒQÕ6Ufô îÊ^W¸‰ö(ì^[Ó¥–2éßÉÛG ÓOûHᘠóSöADÇü2Ãð0Ù1zÒoôä£tvè3šb¯ŽûÑ)8Tû×L·O99™lå¨É›ÿÇràŽÿ‡,žŽ¤z¢>˜èä³ûqcjü¢):ýχ.äñàÁa¾È¢‹:j¢ŽzV}|ØÒªyÖøíö×÷—Ÿ›’¥Û¤!"D|ŒíÜ’8°ÁaË™(*\ì.K™|‹¥Ü|[_÷zF|ÖøÕKáÿ }¿ÜÏt¨7ÜÊ©V²¾}«š¶ãé©Êp*ÞG¿Ï5;-(C×_û[¶ë4l œÞ^vÿ©÷Xt|ì¾S:vÎGowÄCzŽR}‡ìz-…Ðm¾fE5}r·Ç­ PƒñBî£A/&”ïSZk®ã¥Ï¡ f•¹2AÅ^mX7vÛõ­ý‘jê€.e\ûÞ9/ÛÝ“„kPJBÒMÝC²r¾üýk ª¨z‚úÆ$\W™ž ©/'è¥sA¹¶7ãSYŸY#;盯ÍÚ[ù“Ž}¿1üœî}[çÝÀ¾{ꈺ6ÝáŠä»gçˆlÒ´·[šù š1+:2ªž².øÏ!kž„T!äî’i˦“ËTo_Ûë¥æº'aÉÂÞ#]ø *{÷³5=ÝÿþÕßJ••ÿ J¬ûv9[‹û®8±!.~,SwX%»Cx3´Œ2.çfp$C¶ý¬½Cà¡ëÄ!•-½?ºÝÏ0;eE×{k¬òÕÔ^¶%ä×öu‡ÞÈU¨~RÁà&ñe+YŽ-èL©ŒãAÒ»± ÍoÊ|P•LwKÚÙMh[°±”v27|•t÷†f_ }„1u§8òo´Û:Ÿ“SÒ Áÿ6žI 25ÔæK¬¡¢ºÄš8·)܃†A>‚¦;ŠHÛëð§ƒÿPK –á0€þŠ5ùlib/jas/examples/hworld.jas•UKoÛ0 ¾ûW>Ù@¬Ízò°Ó;Ø€Û¡ E¦5²äIrºûñ£NœÌë– K|ˆüø‘¬kà™C`ÀµrL(4YV4ØÒt/—ÌZ(:¶Ãø]¡Ú—e–eu ¶G.ÚˆJ[†¾}!OÌ&u‹ŽqŽ$?x£sÕk)xy¦å³Ïò!׃ËËs#;ôhþeùÄöl)™Ú,?­Ÿ7!‡g#Æô÷¨*ŽÐŠ;¡8 ¬ïQ5 ”U9ýA 댢¼âºÁ  ¬[7 ®zf\°¬¼MIrð‘õœ™£¦——SòF¬iüœz(£õø;:õyPb4ÞZmHA8Á¤øIõ¬ëC´þºnć´=œ'9$• Šïƒv!©‚IÍšÇ7! x¯w¨/aÜÀdrÖ¡Ûêæ/hCþÎû}OEù%ÙÝ`(µ”ƒÛ ôwÛ”ˆÛ2G_]o„EUq^uÌî®@àQòö:±¸¸wF¨ 0³Ù?|+þž¼(Gõ³Qt Ntäõ€M£_ÆË§¨d'yíGâ´A0Ø¢ñ £4HÍ™¼ÀÇžÁÖ’Œ=-÷Z4Ð ”Í’÷x‘Zï†`Pl¨ws‚Ĥ̃Çó"Þ¿X‡]ûò» zùÙ#JH#ë걦,¤úxO²áÉqD=zþˆRjøªlÎÌnâi-úÁná6.ÊVå@Léõnƒ?<ľÕ%µ .;®"k<_(÷ œxRÆ”áí‚dk”ûòòo âòСr¡þ㈺À Í3*7ߣyFÔ“@|Žà‡ö¾.ǯ›i£§.ŸpäN?¥1$€&•ïö» uìÿ o–”Ï|RݸŠÃ ªÄ6¢_¥CK==ûìè¡5ÁYzÊX›ãóS8H*‡ÄªœÉ`"zýµ‚àú8›ÂFznŽ=›ÔŒuáv2¯ÓýFÛ ̭ϳ©zœî)«4ؼÿä {,öþܸL1f¯2_ÁâW09Ÿ®úYõÜ?ïã˜%JÊ)Ÿ¸«é‚zqq]”œ­Òêqž”av-‚ÔSà7PK –á0ùï¨t-‚ lib/jas/examples/hworld.javaVmoÚ0þž_aåS2e°•íÛ$Æ: ‰©ÕèºÕ„Lb‚[cG¶CßÖÿ¾» ÐtÐ& E"9?ç{îÅw–ËÂXÏ.¹ë¼êróµâiPt»ð°³…t žÂšÜò%ó îÙ’_ ÇR®¬io@*p'VðôŠçAš -,÷‚q–*î\¥\XPq sÞrÆçâšy¹®ƒ6ƒ º¸6Ve x)±¨ð£Ôˆí<Ap0V”3%SØŠ{ø[™9©£Ézo›¯.~Çd`Üšk‡4­56a£“ã›T^ €û€P/ýÀ«59 ~ÙtqK*C”ëÓÕêG¦Á£4Šû„ª;NxZ‰¶˜áišÒ‡ñpRÂîAc–ºŠë¼{2»é>UÂÒT€näÛx0NO~†€nãëHK/¹’wCÄR“‰Jooï-ä^ú»kÙÆ]\êð,i§‰=½˜"rex6}7¥^™+¡^IëK®’H£âwá&Û „…ÐÐ'|‹âsˆX£y+|i5âZEk"GŠÖ>UùºÄŸ-3{ƒÖƆóÆ fÅSN [q+ùL GàæûÝÉ…¯NIS¿J¡þ‰âäÖy± _Ò¬ÿ¨œ[ƒÇdGšî)† ®àËþc‚ž÷ˆS8¦o›‘*kôºjèö7¡”a¿°ýÀâ(n™Ã±1d/7˜CÈä3g½+3Y”n‘°÷Í„dE¨×–ÐÄsèüØÁP#1Ÿ EŸëB%A¢$ÜGš#E¿Eº*àQ W©Cü_{xZp­Ë•…t²•>@#׎ÕY¿Þ‚vý“:¥^Â^·ˆ—¤xõZçZ$”×fl­ý59ˆIT%de¾€¶'ïà~07¶[C8Ó<\&°¾K½¸¿]<ç¶¾ô®¥ñA–‘qG›Œ‚jÖG#¸ZÕÁîTÜ™ m˜0]*u ª¼€lýÎ~ôHà¾NÎg0¡Þcž+²0ºØ[S …ò Ê×V ·9»Î–Ö¨,¾pÏOJ_”ëó²»sTÍ%ê0ºÙth³M½?¯à/PK –á0`o¿Aoèlib/jas/examples/simple.jas•T±rÂ0 Ýù SÝéuéuîÖµ'lADƒ”³8þ¾N ”¶¹kÉ>KOï=IY¯!ºÀ)¸@h®ÅÁ4ðJD­aÙ-g³üó[Ã?¨‘j’ã< <Ù/)Y7{r§†]\ÒGòƒ¶hX¶h¬¸ÑÞJèÈ…ÆrVyÚ²ÎY TßÅ.åF©§«GC†k.W€”ýq*†,C 6êÏ [ÀBdúÔí«N¶Ì°º‘M«=Æñ\£÷© |NT«°Uôïå‰,Gý Q9r°Û))™Xf^»Ž`¾Ç#®Z”ÝêuôqóÇ¡ÌS:T‹·ù¢œH 냔uwËm }76#ˉ­ªç´™Á88‘,ö…59[ÓÂnB®0!¤Áÿ„ÎÑ}Vº×]¿iÙ}‹LFe—§"X|?8e®¡x8N#6Àäà°«w,òÛ…)¦ë-ZÚ¢Ã(r9¾R?PK –á0oL@™ý¸lib/jas/examples/simple.javaSÛjÛ@}×W ~©TŒÜ÷´×uÁÐâд} ÅŒµiãÕŽØÉ-!ÿÞÙ•.‰…Ðeæì™ÛÓväî1”o¯23ý XŠ–l±~4&€Ü§Úc Ü C‹ BkÅç˜Äª#tX°Öñ Xkí´GÖ€PY a<¬HÎ:âÆ¸ä_XÊ,1AR±Ò³ÕŽ|ï›V¯ÈF1d@×ï­©@,,¯Œ’¬ŒËoØ'^_·¿ ‚Dõt 1¿µ÷äç°Ù®ÿTºcCNYB½tI9+RzÉìßHÝäXB¥¢÷¤þÝ]€ÐjnH•c¼‰Ph>€ÓÇ'[^\%Lt•¨ÔÆ—G@ú ®Ú¡%T»wÅ«@ã:hGn0ž{´óR¿¥W×ù,jaaÑÕ‹íþ^W<›Ãì} ô1~åůYñzx¯¹÷.â.ër”ÀÚ Òeôú ˆ¬pê¹ö—°ˆô²**KR»#ßbœ5àžzžÄ8áÜ(¿Ó NÖi£³ š“'ÂÄF é¬8ÞôöÿAŸµulÎ%u-•J¢KŠ©D+pZ½SAÏaŒ“ÌóÐÈfËÕjwýóÓ×ÍêlŒóD8×[{é ŽÞÈ^›´½ x;ùRÑŸ‘qÛs׳¬¥Æöœ9Á¾«ŸÃRKËD6iì1{óÊþPK –á0ag3{0?lib/jas/examples/test.inpKT°U04°æ*(ÊÌ+ÉÉSH´æâJŠ%*h+˜Ù0q$M¸"D­$m# PK ‹˜«2GT3Ȭ%lib/jas/src/jas/AnnotElemValPair.javamRÁnÛ0 ½È?ðC’6zMÚeÁ–Æa6 wÆfj.¶dH”Ó.Ø¿²cÔM+–¥G>“ï1[.§X®¢ú«ŸÈÎ:ª÷TT±Wè=¸"ß…£) xEÖÁ!8)ÉÁf³éÀO¤ÔûÙ¶ÛWðŒáƒF|/­àqÖGµä<[³_ÔrüZÁMzšM'ÓIƒù þ _Ç3×u¢ÇS¶érýú*WÝ¥f†}Åù¥ê­1VFý= ™Â{†sL]]4Š–³q€úZXk¹GÞV-Í?GòiçŽË‡†\:ÄÐbýEª·È¿<ëœÐµ„Vh¥•¨ÌC1]6°zã½ÍEµ?±”€pKõÇ®ÓÛL¿’¤&¿€èSU€·ðlÒÌè¨#%ÑtC'xPý÷\±<_µí½fý~‘öZÔùoqlÁ`M ä%:8²)’÷ô\À²ìJ³yŸ“Æ¢IÉ>íz¿¼x¥šN'xþKó± Ž$8sñ¢GáC¯³Œ¬=9–±± |AÁû Mí°d1®ÎÙ“‡¯÷»§œšØd§uçœu/QoÆ£ÿÒG¶ë yÔBõùPK ‹˜«2šP{•”F#lib/jas/src/jas/AnnotationAttr.javaÍTKOÛ@¾#ñ¦;ì"õ„¡4¢9P!@¥â¾‰'ñÛíŽó(â¿wvíà%M)·vÅëÙyŸ' `£ºÖ¬˜t ŠÙФa´  VÌsÌjÖ0-•µ0£­÷Su•Û™60k hàüüÜ_~V ¢?ùç |ꦙX\’íᨵZ¢±.ñÑ7\’;Àqr þ6=<8yTNS9 ·A*¢äà¸DXæ`5lt#ÓOÇ>ƒDÜ÷• •Ä›`»€iûìhðÒ.ºž×sû0@e<6†GHÓ¾q.È&ÎrË…–3¿êí:Îø@ÙóÄÜãµr”ÏîL=Í,òwIÖü–÷Æz”é Ç‘ ‡g ØGþb7¨l°ô£ÐÅ)IJúøoiOðþìÏÜo«þ+ïäÆÔ@aóÁ.X©4ØCø¢XÝ4¼hX€CUn8a3zeáòf¼žâ±aèÝØmz« £þ$ŸïN¶+G˜Ì‘eÑÔ9®[Ô÷®š³ý3ß ö!ô ÚÇÒ"¼îêñj'gBiù–×òý–XϹØôZƒ-€‚›ƒé-›P~¿PK ‹˜«2cŸCîÊ*lib/jas/src/jas/AnnotationDefaultAttr.javamRÁŽÚ0½#ñ£‡¡D{…miÄr ªº¨H{7É„¸›ØÈZÔïØ!KØÖŠÛ3ó<ï½Iãx<‚vò 9ƒ ˆŒÜ;B ‚Øì±(°©HC^ k¡”5ÚP&TÎr´ÔJg¨BËå2¿GßO²ðŸÃWTJ–œñ­Ò$Þ&]V‹ÆJ­`ò[éwsxL!DÓñh<:ŠüM~ »ðgÙµ!>¶"‘:‰÷WŽd.¹Òík™_»Î”âW‰xÆR¸š2f Ÿ¼¬å°Úà(Yؼ¬Ï9=ƒ™Ÿ½µ1Úܲ­Üv ”„÷v<ðar@bUçÎà¡ÃïÉEQGaº`A؃3ë^£:Põa :2ÌÁ·|#Ìß_PK ‹˜«2ªvþÀž,%lib/jas/src/jas/ArrayElemValPair.javaÍUßOÛ0~Gâ¸I<¤]•Œ=R:Vm}`B ‰w“\ÉÄ®ìK Cüï;;)˜¬Eð´ªÆ±ï÷÷ù’ ‡û{0„Y…õ•ª.YÊ"`}Efy¥œƒU肺Ò4NNÆÂ¢±\¢…“““pøU5\ÊþÁ4<àjM Ñ8+ «ÛƒVk…Ö‘ÑpðWäWGp˜B8Íö÷ö÷–*¿U7¿”ûwª—Ʋ¼®TJ&Ž_n5LUØË溢¼Ëzj­ºê¼cÔ…‹k†o"AûŒC%ãÍöÊP©V˜|ó~gz8xh½¸f‰6Ýèà`ü|D H¼;ø0ÝTUlæå”Ñ*––Ã$N©ÛJb?^Ö¥  qZ*7—Z’Aß—$‰Êˆ¶nU·'èåñùµ[>nªÏKD†07ŒG0ÕB-`²GP1KêÂçLNŠ…kâcý% pœÉj´qR££ÏªgàÞ4 Q,=Û,Š1׸†+áÆ5UÄ÷Ó§ˆSÐS¯s˜µÏö>àÉ%[Ò7 U#ÈKeá–t1êa=€ȲžIkäõã~qI. ˆN6žDOHo+s£›Jì$é'(3ýî!(›$þÛ{ßÇw>NàóX:!óT¢‡ô!7÷%c‘ÿéxÙífE¿˜^·¢eËZ ¸eÑÈ\[É4˜#ø®X7¼lX؃ªÓð ¾YÖ¬œžÏîr\úË>ò€™µÆ>ký5vÛ8âÞ{{ÇäõÖöÒCT»êw+‡ðº“O;Lÿ§¯À®~mZòûPK –á0Áka^Tlib/jas/src/jas/AsciiCP.java]QÑJÃ@|ôñ!’Ð7i¬UÁ—V´>Ë™®ö4¹‹w›´Eüw÷.AŠpp·;³;3I‘e£Ö[í!G¡¬”÷`‹Ò‘bÂÜ—Zcñ2ì4ù<ðãÌ•jykNçñžâíK+ƒÓìÈym¥|¤N‡×“|Ò£Å(%*?Õ;áCùY¨uÝXÇRv*×6ÏbShík¥ËÁV4¼ì™ÌÆ[2VQ-æ<[ú¦…5ž•4FÉ·¨¡ˆL5Ê©KUìxKP1`9 ¡±¶ŠYýP®ÁÄ Ÿ>É—0ïðã€}£5ú —ð¹6LΤã~ÒY½#o«ŽÒEpk:Ð0åˆ[g"õHbXͶ¤ã?&Nù)NpEuvNó±Ê9n«UËM˲‹$·m9jCr;»ó¸_ÝîKjXþNôÔƒBËã¶ëCظZ>­çËõËóúîb<ûG‘fœô€¸‘ó PK –á0ÖåW•Ñ Ëlib/jas/src/jas/Base64.javaµYkWÛHýî_Q“=;HømCâ˜C aB€å1Y&‡m¹mw%¥%aœÇß[Ý’,ó˜“9“õ9¬îº]]U}ë¶ÒlÒúú:½œ¿6WšMº˜ª˜ÎÃ0¡±ò%MELC)òÂHÉ%!}qðX%„©Z~J•ÆÈ8ÔlQÁˆÏ›Í"å‹D…Aƒè0 d*) |u#ýÉ[$x$Ø,È›Š`"a¯%CÍÄHò‚ »ÄÞÔØzAñ4LýÜÂâc_z VW™gÓ‘Š­†©Y—PNy7t$f5jµ›Íf§Õjó(o~ÿøU½ŒJ}|åÉ –ô3‡d¡ÕdšÐTÂUýø||Œ?àS íŠXnm`O2ð‘lŽ$ÿ¢‘H¥± &&Ù,3‡ŸÅÞTÎä*Òó©üÙ+"ãx.µŸ?ߦá‚ÞÊ[¤é­ô}$ñ;‘þO¦’}5ÔB/¸RÇZJŠÃq2G}õh¦ä‰5T‹äšFñ6C½‚4CüÆ LäÙ7‘zS86_^_Ò‘ŒcŒ½–Ô§ÓtˆJ¹ïÓQV<8$Oˆ§¨]„†AØ¿óÌ?:±–97=’ ãzéVêƒÔi´s/2ðÁ}G ;ÔFŒášó…s˜Ì²ñÿø2°Å†‘´Ñœ+ßçcœÆrœúµlèýáÅ›“Ë _1K Ž/®z°IpüCQÍ"Ÿ™ QÓ"HÒ»ý³½70ì^\ql/Ž÷ÏÏéàäŒt:8»8Ü»<œÑéåÙéÉù>"s.¥/#=ä<« @Ô ’7’‰P~Üx"N?.âW(⌧■ѓêц¾«>ïU¦‚*8Ê–w³töH)“͵J2Z¾_³iY¹5¾×¨ÑæsºH“¤S_x¼už2H·ÛªÑn'<õÝàÁîZv»]ow[¿Ôèò|` Û ƒDx‰Y]¤¨ýâ;âôã"¾Bb/oÌïßtŠ2iàgÛƒÇím:5¨³]CáßSx]£½“Úi»ÝÚloìaü=Ÿ~Øî~$Zùßîx•J$¼1‘¬zh¤h§ëXãT‡·j„_´$Ô§s0`‚§¨©¡iYuÛÖF,4’ ª1/3ˆiu™©]šÅ^£Â«þf‹d5oÎ#ysyrΪíF—¿¢Œ%µ¶hNÒ81Œ›~ÀœÓÞ 9Ô)ó´Dke°ÓD‰œ qììh³Ùcçù"Žóý%–IªÖOÄd¶Xîñ‘ˆ˜½ÊHËØj( €¨˜dt€AÈbÁhf›sS€çq·ð<Õú/{oÑ´Y‰qòý`Æ‡ë ÆaX|ãõÜÊ— —W6™»OœÛŽÃs¾ &à›*u\jR×¥uÚ¸FÝduiQ7s×.Â^ÛÔ3Íž¤I”=*ü¹X˜r‡Èmg©Ÿ(& lº\0òLߎB0U¼¤Ðêïú-ßË’“øZíw³ÑjÃ%»?þ ÃЗXøS*FØåXø±ì=EGŒ–£Å0¯{ ^î“Óº;8ÀacW\ÄêÚ]ñ¬—/û´½|nvUm»ô’JΖË-¿>¾@µ]^‚?™Ÿ‰NK›øö^tþû^d±|Ê ÔÓ›Šî5¦ ?šŠ¡L>8l÷+9¼ÖÏÔºë¸/hký^ ãÎNŸ¶z uVÑ8ÿ­½‚¶Dù^ûÖ_ÛÛpdV½Ê7®+æ<_§Wæv€3A»ƒóýz~%ÀÁ†<“ Ã$^x›IÛ¯á[k“Iz?å†Gܾ‡rÌ"‡oyb̬ë8„i6cñ#X³Ö,ä‚B#`g"PQjoƒ¹4QÜ!’ØÀ03ó`tö’š;V™Ì$ˆ}dM# ]©q£Ä räg¨ÖÚpËø˜7eu@D¾ ¤½±²7|/uÑBØ]k­Ê:S‡sF`ZÑ:Ô :Lh2y²+Pð â:h6¿|Yc»9ŸÙ•ðèX‡³ìÎ ç xw Ž_­¸½ÊQë(7'Y“\'ã×2å‚öpÍà;€uÃ321 ’Ô¹P ¦/±¨åÆsN¹Í8äûCj€pܪ]šKkÌo 4þ£ø’[óºÅî qvöíBqh6ßhäÜ‹»Š…ÁZB3 ß=-³›ÆcE@n5t9øÈ¨‰%û¢bOøŠ0 ZÊÍøÃ~¢Ú<‹»'ï\d˜Æ6Óu.`S-–Ÿ™›ÑÇ£#\9úejëå}Ã1s”íw÷Æ]µJ®™¹$B5vȱ¤wwM;ÔÙÜtéëW2'õ#×àÒVfêõÌ™žÙ‘š|9¡ eÛµ-éHŒX+•Xó‹-ßÝXW_1ª×‹nËM‘³½@ß´ð%Õ—-"ñëdfÊœnf ütm„W,kå„` cÝ6Ö«ÆkÜX¦Â7ipòŒ4iƒC×&Ã4¡|èß<Ôﳤ`£jŸ:1«SÌjg9;cKÕb`«“¥CñTy’o¶ô/[Tn\4TI ž µ½ ÏKg…¡ùV2,ÙsL 0s*ÅÉälÏišrM'SsR •ÎÅs|rQz´–íus˜J÷žÞy²n”­U)©ääEºÃÅû+ÕÛ/–oYá æ™1ŠºTÒØT|½azW²‘£ùèª~°Ací±Õ£U l“4bVÞ")<„G͘Mtºd'Vïã0†QÍÞ‚MÚw(9šFf8Ic6×+ã{Q†IÎ+V&Ö„c»‡a^t‹¬g§`›òw ÆÄSmo5HËýÕY£•}Ê.ðS93…ídýˆ5ö zk;ÝâàR‘TY‘ä€YÕ®ìÕW€“KXLÛ÷¿ðøc. .N£âÎŽuÛ5g<¾'—Êoù—=F@S‡öEWS„(A°sfG9R²Ú`¦qÖúk.q”{e<ì#¶qOù>ur|te6”@0eŒŒ: ÛŽB~C‚'t°E/ÄÞ4wã\xYQÅF?@…Å6Ø¿‘̃9¶¯:DRFƒžÊ²@¬z29ÅKÄö52GÒSŠ(÷EÞHAe–T\ƃ8J0W}¶ï÷á|ý³Ôáòvá¡{¬Pâ~ê3ˆ>[£[…1‘ÖlÎ gCÈÉe |+ˆ¬ zþ?‡‹Ã£#¨–uã¹6/¢¤íÖ&©‰%¼9nàO•;GþÔçMæ·Ž{Ìe ù0ï³€sž½[Q %¥@–Fm<Ã…ÔWñ· âDâ.fçåB<ê>s{å­ÝÓâûšÆ\[Kò“Óo(#¦V£±Õåi¹ÆÓê–;t&ëríO}ÿl°»÷jÿàõ›Ãßß½;>9ýÏÙùÅåïÿ{õ§z#9žLÕÇ„Ñ'(³ôv~·øÜjwº›[¿l?¯6ûÏŠ¸4’p‹ ¸.·—û ¼A”1ôí{MèF0’°¾v±ÄŽœkþ?œ'7”uT{!)õÔÎæzE6ù˃ë8ßÂ1…oßU7ë2Š9¨ÞîÝ›Œ‡kƒ5Ì$tˆµ?×ÚXÊqÌöÕyºûŠ(P>?ÒÙâ2añ8J«@yþ4Êf'Giå(vÒZu§muV6íî©®o•ÿPK –á0èÐn\«lib/jas/src/jas/CP.java…RMoÂ0 ½#ñ|à*â —!è$¤m }üLÉÖ&%qË&´ÿ>§e¬h“ÖTJôüü?gEÝDÀ{íA~4€Ïkk€-(kµÀY&,‚ù:Í”ûs2(ÉÚ(GÈ´C Þx"˜y¥õ|ýÌ3ô¾ <`Nϵ±[MÙ¶ , “Û¡ºbÝïí/ZJ® ÝY“^Ig¹ ,l¹É®tŸØéï¤ÅR*9èÍê}»ƒ–¦{M°"çƒ[½Gªt8M`›è¨Û «@õ†)Á+ú©Àÿ|£X#†§Â Âm‚ùy˜BÇAQç…u,‚ÆÚÆÑ´.#huáY!4r U›¾ 4úPÓ/HJü"`'pÄ¥3 >ÚE°²z+ o³Šúõ$S ¦ñŽNJ‹5„2®J.J–„9Ø’µ¼wöèa¹JÞáñ ƒY‰sÖ‰¸Üã PK –á0Šg`Y€lib/jas/src/jas/CatchEntry.java…TÁnÛ0 ½È?p@v8ëµAY6$X‡] Ù¦c­¶äI´ÓbØ¿’ìØé²5b‘ÉÇ笋ù ð­”²JXëM6Z‹9†´•Um¨ÈH´ Èe%H+L|ÆE„ózgð‰–JmàêÞ?o ø)…‚«ìÐX©ÙüŠt§¸N®Ct5ŸÍgÈžÅᇰkg˺цØìD"u²ðΦM+™…ÖCý-÷ù:Ÿýbø,R¬À’0ôÔdKž!÷ÏR¨¼BÃçµ»¶Ù‡ž²½cåinÓCžf!3(ˆ¹a ™<T±5¡ éîaDšèª…y–êàRô®Qžìî>tÒ)Gøì½¿Ý‹Ði™ƒA««£›y«:ÀÐÈ¢1ùÃ-¨¶ªbÀ„å»Ù?Öc8^Ÿa¤)"§s¼'2±ñIصԴôH¬­x¿qè–J£vÛaAK÷:oÑæ3‰¯´+ ‹9h×ãÒã‘õþ½‘Á÷ï^f&Äs|5€<òŸE˜˜1•ãË„²À™ï±²øÏìÃ=þáïPK –á02q½”glib/jas/src/jas/Catchtable.javaTMOÛ@½Gʘ;ŠqC $PšC¥"P©¸Oìo±wÓݵCŠøïÙµc‡~E‰âýxofÞ¼ñb6›N`ßJ倿£¼ <®+s9ú¼„uQ‘upo,ŸÖäKSdà^X8º ÿ§pÿC¡†£xØ2H^~¥VÉÓ)gÇñt1l0Ä‚ïèΦ“éDÕc=/[Ì”Éfg‡[WUØdd³®Ty…ÎÁR’ )O'ÏL w”{Ή´·Š"5@.')<÷wà4m;`’žÁK-‚NÀµ`Q&÷w¢”/©S§‹,·¡Z£ Á­“„Àá1’Œ¢gr©¢š—I<ûßàbƒkpYµ/¸¦Š{j•~€5=(­eÅÍ• ´„4~¶%YzM.ÁÜ«–²Ã8¤‹w¢Èîˆà<ˆô{æÎsï²³£´þ™1/=å´ñ⸄5lýškƒ¤q VÕŽ|´¼I™-^÷‘î®DèBY¶Eß½¢¸X%—°Ý”wàšuà"—ö=ê É>rˆ,÷&‰Õ†îÍ»ÒYÌþ±£šÃòF*Hú<€ÅÁƒË’Ž%à÷H î µäLÕR²”ÄWºŠÄ!á0òÉJ75Y Ê’>ïmKѳN†tV¢»2–V£Ý4’ìÙä3„œxðF“‘²ý3MO¾ŸÎuæ”õ¹Ò°ÿ"]=â §~òhGi,ùÆjHNf}ÊñT€ÅÙáq¢¸‰'°Þyr#i¶Vù±0¬¼)èÒ{ËÉÌáz¼nü¦ñ·ž}^{­«Ø—Öl|¾^õf™Ëkne­±#u… ·üòŒÃ?ÎòðlÝ„?ô –ÿm€˜uÂ"ˆR÷›†ð÷PK –á0Èñ¥Ž…lib/jas/src/jas/ClassCP.javaURÑjã0|ä†6'WúšRhêËCáHBç½MÔÚ’+­Çý{W²Sz ,¯vfwF«ùl6a†ÝA{Èj=•`‹Â‘b‚BV)ïQXãYFcmÍTVdÞ«–Öa²Œû¯ZLúdGÎk+áu:ü-p“ÞôÙùx45ªxW{›ò·!ÖucKØ©TÛtÖþ®t"ª‰š²-èÄdJ‰·ZE5öxj ëš²A²þJ7,}¡µ ª)æÑ<‚ÎF9UÇÖác_Áêûõ˜y؃€$g§Í>Ò¦!­Ñ¸Cr‘ýZæù—“«çËÉ~ôÈT&g’émg¹û4¶¾ƒ¡ãYiÁó¯×ÛY]‘·UGIÔ°2†Ö T•e¶}”á ÔÿxG'cûƺÆOÅjÓrÓ²ø ±o[žž%9{ôxܬN5,s»Z9gÝ7£BHc݇?¡öfï–ëÝK´}v÷…ÉåupBéžXTš’N½Ì/‹²>PK ‹˜«2».Ýæ²%lib/jas/src/jas/ClassElemValPair.javamSMÚ0½#ñæÀ!P”h{„m)¢¶ªº¨+íÝÄ™’ØÈ¶¨ÿ½ã|tÓm­(ŽçÍŒýÞs²Ùl<‚lK¬žU¹Sä<(‡€ÕµF dØB^*ïá@%ú&] Á z°ÁqV«U~R ‰OÖͼ€/h $ãkaY&mVΓ50ùŽ5ůÜ¥wРÙx4U~RG„Ê/㚪³u,ËZ¥dÓÙòïP`*› T†}IywêM|ø^öCÎp‹e cís¢ÍòZ•Ë>X[ÒàÐ۲ƤígjÀé­…ãðáŒ.íspº|…0UZovŒUÛöد¾}Ö˜ cß,ãÖF6¢G³[¼·9)Ù/Ä(¸ÇêcCò>“¯yߤBÑ]C´†°Ôà-¼Ø¥2šéPšH¹Á <‹ô{*‰_Öv\Ç £³]ì;Ußê™<±#s£*œC^('2z]¼¡ 7Ȳ7j%mELÊÅù4Á‡æ„#ÿ—Nn'xú‰ÉÐ ‡œé,iQx_/Žxèê>+VÏ…ª làéð€Î^<<4ôFSóÝF5¹YÿL ø5sCÞŠU-R´3ufðI\0Õ….—Š7mmù—Ë!Á=˜y. ÙlfJU ùÑ€ý©åèRír¥Òâ½0Œ3¨ßmÑs¹Ìï­^°/´˜2Æÿ³¾ç¼.б‘¼kÿÏù9û^ÒÎíÀu¥ÈE2±àmŠ4ä›°è³ûÙÃûÙ»›Ë©éèœz#r¼ØRÝÜ~øôpõéîæÃí€:—Cê>Ývo”l$/ä¿›ó¥eÜ•*;?â©ï3®ªÎnG¯õÃÐíÇ{ìï´N?ÖùŒA›j]ÉŒiÑ\w†œ±ç±5]ßês»ÆùùÝF7¢L Â%«$)Tt s5R-iŒS6\ÎE}i±ë›w×G›m‹øÙy£‰Õ ¢æ[±JPÀòq‚ÀÚ6)^ŠÄ’~·â5/© bÜø#ì` …¢Vîf’„Eîhu ‘cçàf\~ŒMÃùˆÂ‰"‚(Šsš}‚ˆŠ–ƒŽ)ãYvùŽ 2"Âé—‰§*™-¿ì.¯Ú"c•*6L€NípµÎ"¾‚«eòaþ38Înn«.ˆFNë1a€õ‘"p¿£mÓ±ÿ6P [ÏJã6uë#! OCoHÓ34ç¨JîDÌñIRuJJ˜?¿Y a¥ÖMUeΜCÉXå0©@?²Éij´2û«h8ˤnj9oñ”l»²Ù½}EÛ.³”w&1h‡Û\Ék+‰Ÿ] 1‚Böî”­g6¾]Üz\ˆ1hÛ¢m­Î²Ì¨¡KEÜ ;«aÓ­*Ø °A9 æ¢ mà‘Ë ‹ÅijÉŽˆ[ñÔÀß11wòž¨X‰Æü3™(CƒÀ`™+y!üýÕ…c²LvôàXD„ æaç Ž`¬›dö¹ó×-¹Éåö =DÎè´ ”þØ~±GøÅ¨ðû¸F«»þxˆt‘šV‡ê¯Ǔ԰¨–œ‚DDɇÛO¾çO£¨C³rS 8ÆÕ0[ 0çC7KÛZf˜!¼žz2<:X»‚þLbœÃ˜›ª–¢Ë:ºÌb4÷ 0Ô?¦)0,¶&”L íÞWµ¸êÇÂhå mð)dBrâ0ºy¾ØÎŒI–¢ù‡’¿Dñ„Åè»ud¤î¥¦³³ I.X„³€"1¤Ô€i€ Ú¡› éÞViPÆ!ÝÖ"Ï£æ³Ù†å2´àmõhâÅB,ýXÈÓç÷V½‚%êÙ>Ý™Bþ„Âh(¦Áà×\{ušoÎ zÕC´vx:4´yÔ¥2ž1´`7w2î™(ÀÒ±KÕwŽþ¶£Û÷âwgõ¨<ÁQ®!Õït >Äo‰‘b\zŠîGÈMt¿Eb‚0î4Ø'óú€3!ª=¢GuÇ÷²:Òß"îÈù¿Oèr¯ÐGˆ XP"ã¼`xbbŽç,mò(íê©©90ôm°GM 5AV’þµßa¾ñ앬"ƒ)‡õT?y¨7“ÈÏÁúÒW]AMGŽòõV·Ü‘ã\ö ‡bÈcG GŽî—l¿dôè†pÄñ1^a:¶Õ­°µÀK.œ§„ûÚFv ·ÒÉ;3Žt´ä¦Š1NÒÛRˆ¤ˆòàv2¿aãhWѧ}sŒŽ×BMý‹XnÂÓpƒã ÞÕ·®×õ‡h>’Í™õ°KÒg/aæï%"îÛ1®ïðôÚÝi fß³¯l×á¹ÑÕ) æ>¼ú‡WZû{ÆýEÊ`ÕC›6ìÿ_Vdµ©—™LU™ý%¡£Oq˜ ×®üØß»yoµ>ÍõpË,ŠVçý Š®8ÞµšóËUpºQý×TаÁWF}kW’äNðÉÓ’V,¤ÈNv#&(Ù¦jiJ Ì+íÊv]-£¨!MÜ0ñ„e+©º*ÉÄÔÕ+er€ ò¼*¨;Û¥ ¹Æ"m¿BÒ/¶¤+†…"W[Ì2‘¹š]P¯"ÚâËUX0ºL – µAII—ŸYaQ 1­Ú{ãƒ0¦¹üø†žádnxç5H+‡n1ÿµ""Žcv1”Õ}ÑÞî’‡í"ýÜKªxÙCwº*qîr~ŠÁÆÎe~l pÍ‹Vh¼Ž• ÆËï{W3·øËN`ØéA¼ï®¾íåÆ8%I>K›p,ý½X<±™ÂÍik„òu[Gë*•tò‘ÂI†EIüm¬ÞÝ=LÜÎAAý4a—ÀadtÂL©Ò\ª?…[Ϧ®dcW ¹ñ{¦S)/?š;¢~,OöÁ³²xr®ø4ê . êÅO¡È»‡1Øg놸{\{<²Öt¨e´J0âVíÃ0ËA-À‘¶ÞfŒ_vÓp|š ßg¸Ù‚‡Ù´ß´«˜¾ScØDƒwn¥îÁ‡žöZ¾t¼ßKí|â×¼q‹÷p¸þAnnàádë1 ²0h=è´>„%©óþ žhð Ã@‡Q¶PÌL»À½…aŽâwSð’&ê=«é³0€«–ñÞ}®Ð¿ËãaÀÓ+‘ÊÅÆÝ© "Ûdn! ‡o\P¹j·ÄÝ+«ÑéÝ”vžnêP‚×ëDm=ݲ·º(ib§¼p¯º\ªÙWÇø­æï£‰d\&âûËôp¾>Û)¶=3v‹LÓ+Çfß l@uœü[ ÞIØO”å­ï4DþÙ¨Š_~P½øýœ^<{öœûOŸNéi§àICªÖÔ6*Z*1gkanivèJW·â†¹Ûʙކ-ä |Ž}ëØ’ˆñ¦èŠý3õŸ­ýëuuøR­VoÄ)²¥Z<ÖôÕ¥üý†l¹µNÑW² g6PI_ý¢†Ÿ¾¡çù Ù¼˜NƒßùòÓ©ÙímíðrP¹±ùÓÅ`¥…½¼6Ý·ËÒ!¢¦Ÿ¦DS;WoIa‰^R¥oé²)Œ¹z›1éÙlÁt[– êâÃûÆüSÏ©jwïK‹˜mxÇ'¾zÙä…wºp8"|X Ñ+ÕlZ–Zßï ^¾R®«…[òʦҿòÛH%öd•5½Su²sPu¢h£+]ÈœŠ²°Ê¡ÊÔ?!Ô›p:¿•ͧߩ²}€²·¿TKÍÇfUYıUk…¨U‰xÊérµÄ2Ëm%n Èû*›…L™{–`À)äuu<Øg‰:ÎÜsJ°±Èäµwmºx" I‹(DIŒl†µOrt·5MÞ_>Üó|Ñoô‘0ÚÀ²'Û²L%"N:8\ችûÔÑ7©—¼“€"\B0¨;ÏÁšUç=¡Ï†Q'çL-æH„ÎSJКC©kéÞvgTßÅuvá‰ü $î²}M²ÉC$cÆ£IÓ);\©Qxe£8åFFq«îêT‡ÞÜC”Òå1‰ç/låbB)ZíyÛ x¢ë}­zyçt¬a8šÙT¶–e/Õ¼{C€¼´¨¡"V\ÝVV7Õ†¦jó;ŸN,µ4^»­³ à¾EÁ‘ºW7ÎZÖͺøz õ½?¢$OòLá3ƒrÐ^—z§+—mfÁ£(S'DÞ—º„¼…8 >§ðr`À ò§“Þ¥j˜©4â\Já-&"êÞÔ›õ#CìwòZ2cÅBÓÓ•Ù¼ÌÓø|Ik”#½¸¸øøÈÁýãš;7Ô°Ú…BüõtšjýÕ~м‹^À…;mdÝ™ætöõ:ÞZ2fâÅx'5.úFø¢g&áhŽÓs~쉉Ygž0×ÿhqŽŒÕÑŒ¼$Éœîœ_„ÇEØa<5U«ùýÞË àfS…ê5àuƒ£6%¼Ìú”d fQnøãê»Þˆîrk“žŸRøçâÈ !cy[dŒxøE-÷¾ªgènsü»®k 3 æ“ÛÖöVdýÂm8bác¡÷H™ÎõÞ„¯|æûh²ÏÈxA\Gþú7Z)´Ú/OMKu˜®Ò‹îÎÔ_ôÚUˆ•ûcüÎEW î>Ï_‚/çNª‹üQõØ€+œá~Œê~4»,Ëë4EG š( `gÉ"…Âùþ—Vø=Ï¡±åÓ×öÐm岪ñ eƒl(Î(ž¨Õó8°aò㨫B5OZ®ì<k4 ±mhïZ{6-×µÚÈH­Ñ"ÐmŸ¤£æ±Ð*»ÎO¶€±é–#pêéGÓB([¡(Êà ·Àì¸l<%ÍÒ Oî_RFÑt%⸑F‹Õxaƒ¶:n»„¿Ö-èfCOOºïØ?÷Ã|Œ’´W.Pr"©•‚€ÿü|—¾‘Wd^™£ŒÛÑ!¨²^Øx×KIÚ·“û}vJz®ÿû$ç´ð(òb.ˆúù†#ª”°?Å}¢òŒ]ô¬£ò-¬¿Ñ§HÎÏJ—Á¶vÞ§C–ãˆ`Ú‡Ò¶³^ö3G=2¨çäÌý çÿIgÕY8¾þtœé¾EıYæPȳ³?|É¡ý;–÷Ç39àýô_PK á0L­?ˆä )lib/jas/src/jas/CodeAttributeDecoder.java•VoÛ6ýÛú7]¥Ø‘í¤ÙÖ¸)àfIë"M3ÛÙPEAK´ÅF5’Šëýî»;Ê¿²ÛÒ •È»ã»wïŽêtàüÕàúåÅ8èt`’) ø+ ©¬Ó õ—L!Ñå ô ¬Ö.vb~§œ_ »PÅÀ9£¦•“äÂÚ˜b ¤2Ñ©´à2 çø´5›i³ŽíFRPìÅB΂.6–ñ'q/ÈÚHP…wRºˆr¼”Å~S¢ —×¢€£“6u»=Ü=€1¢„CÌàõFy[:…Y°7\±Kmî8ÀÓÊ•QóÌAx‘{nÂL$Ü`âŽÊs ¢Hw΃òd’r55¬ˆ¬™‘É™¹¥0²+]A‚¨ŒL•]ç­…êhC:U³­UE* Óä¤YXb™^^^ßÂU}ÀKYH#r¸©¦¹JÈý 1±Y(iÑfX¤éŠ=/ ˸Æ—àÜû îóñ÷ÒX¢ãh}\° Hy(e`@—ä!ìäá­ýâïаÍ6ÅšqàL—˜Y†!1×% S ••³*oS4†?†“Woo'0¸~ F£Áõä]]¦qWÞKJ-Ê\adÌˈ‘ )›‹Éw2x1¼NÞQ—ÃÉõÅx —oG0€›Áh2<¿½Œàævtóv|Œ¥\óì ýÕž7JL¥*·kÞa¡-¢ÌSÈĽĂ'RÝ#F±i™ÿQÌ\£Ê(mtÚÛ5ƒB»6,B9M1Éñ{•nðHâ6œ<…‰DÒPι@Q¸¢ÇÇ]æþ…ÆGë7èõz½ÃÞq÷ç6ÜŽ”_‡z‰ &­ª­ÀÆbŠ!GÒJa’ ^]•Ü%šäe¡÷ôéχøç)ÒLþkª'ÔÎ>†™Â»b᤹m‰i2Æ©€À,ŠÛÕ•Ntá=´±;d‡²C¡eΕ§Îr¹Œ-AÉ…'¢Có+ò¹•"¹s Ÿ„íjK4vâÊ©<>èï­)M+ÄSâ•Ï`s’T-?;‰Íœµ™wÖ«ŸÆ{’áB¹ºEü 1ÖëÂ!ýÌ#6”¬¬`tz!¬üé SŽÒ¸-°³ŒœI#‹ÄOÜ,ÄŠéh¾ÁW+,ÊÅTæW§2%ԎץMD¹mà ªÇv}0a¤\Šx€ëÄØ%JÀ—û^äË´îL¢L¨\(`$•‰Q²YTéÓàYiäsä°Dú±ÇÏŠŸø™!úu6 üÚñz m¤VE‚ó­·uìžþ# ?¨ëŸqª¬rô.«£>a5û¨„èü"4ÒU/ƒ˜.¹Š`@1Î3™Ümï»æ#ûÑ`yvæŸ æëç'üÜ ‚g"ÀÔgàÕµwwþÊ—ª ¾0àÒÏ(ëù5çäûõ½ŽÑ‡ !kÃ+a3ÇMË'NôMq„/AãŠÚk“À«ª¸³p…\âX*îdJûaԪرãWšuëu¾³4üù}' \6²Žú`#ô›šmp¦’tÒTë\b»({EpÑq&r+±ýu’eÂD£í2ÃQZg¾ÁÒs`F|iP†ÿ­Ùp´‰áмÀfe[Îe1 ½A,ÿ¬ð¼@A„ÿ¥ÆËõ#º5¨ÃTQÉ:Ä×M¤Ú†P aáä\²þÏ ¬ß¢m5â¹t!Q– Œ@¦ÈX•ç.PX—½dG»ŸÉ7tؼ9§Æ"ë¶ÿ”àLq©ÙÚ ‹¥*îKÄQ&1.üNoL‚?Õï>‡ŸNNŽO"øogÏqÐÀ¢±ß·A´šp MhÕ‡xLu)kup}>ìî¼ï} Òh'Zãû±û¹{yÉ ™ßµiwÇtmûüù/ÑÆm÷µ‹4 kwŽ·/ñÖ±×Fá­½sµǧDuàv­Ë C"?&㺽¨œ>Ï„ásP}†ý³È?ö#è{XÉ$Úêí+š} òÑfï÷ºê–÷¼ñƾé>—›ô÷Ø|è²[©Ç÷¤?…7äg¨iâ7¥À‰M߆g¦P¬êM§ïsÅ}~½ËîYØç>ô¯†ä&ßô7Þ¦!à…ÿ=Û£T«å[ýAR ¸Õ¢ÔÈþ½ú°Ï>u;çôÄ{¤FQð¯Í3d×T㽟x «?ñÓ/H Tñõa©¨§Í–ÇÑ„ÃCì§ýsˆJ#=¨w?ð@¿PK –á0G,—Ôlib/jas/src/jas/ConstAttr.javamRÁnÛ0 ½È?ENP8k 4psÈ©Á:ìÎÚL¬Õ–T‰¶û÷Q’ãuí¶H¾ç÷ž¸Z.ç3XÂZy‡OV•Ø4'è8Ê܈íÍÔ¦$·U}÷å8Ò›{ÎÉ/7yšÆR|ÖÒÀ~¡ ¬ ©Õd¨apM¨\U ¶=Á¬Ã»^EǵÒÎü:Å5ü"÷Z±Øƒª'm¤j0ü ^º¿)&Ù¾›ÇQµ¢Ü‹á[˜gWËc«4Û²™TYê7Ûn{%ʃ0óÑÌ]l ¶Šbí)ñ‚†N˜™RÊb þ,ƒ‘r{XÆB“í@xË¿ëÊmÇtyð]Q!’‘k]ð4½’•£Q‡ž’ÂA/šD> ”‰ª*ÖK¦cârXxðŸ´ä{÷sÁbÕqÛñ†-óªãQˆãZ«“Árµ8—Ô²óØMt¡µÒw§ZCæs7öÉ8¡lGl!šŠÎ"`Ü — 'O7¸+_ýPK –á08ƒªæeLlib/jas/src/jas/DoubleCP.java]Okã0Åï‡G7;-½&Ú&9,”¤ôÏîqÑ:“ZGr¤‘ÓRúÝ;²’%Œ¥Ñ<Íû=µª~Uÿ/ÊOò,Ïô¶µŽ¥ìT¥m5ìól4æ†øíT e0³áoC¨­ñ¬ ÃÑš™š°×¼o´Çô~^ÅKýÅkxc7ý:Æz§eÎ 5;r^[)¨Óq7Æeu™º£èߊ®Q7ÊûƒùôôÆdVÑ ÂÝЖ {<ÃzKӛϳ™ƒUBîTÓgR&DÿV9µ…Á/ÕÂZ8¿LÂQ\(Gˆâ0×”±Ù;Áè®Pœ%Õ×?g8Q¥ “3E9IJÁ¡é«Ïøë¬^ÉszÛtTLcÞ¹é@%>䔃3“ÝÞi>U]`¦X-·Ù‘„²ËdÅg÷?—ó·šZ–W>!YÕO»}—‹Ç§›ÅÓŸÙòùön~„ý/J± /äò}PK ‹˜«2ö(2eç¯&lib/jas/src/jas/DoubleElemValPair.javamSÁnÛ0 ½È?ðƒ“6ºcÒ5 Ò: k°½+s±¥@¢œtÁþ}”·ÞZÁ€Dò‘ߣ³Éd8€ ¬K¬žU¹Qä<(‡€ÕµF dØB^*ïaG%ú®Œ†à%º³vÁq‹Eüªâ-›}ßÐÚ â{aYF-ªFçÉýÄšâi7é 4Ñl8Ž*?¨=Â/åçѦêh‹Y«”l:™ÿë Leã”̰-)¿¾úÞŠ…½ÏŒFû~Ó—˜²Zôjµ*ç³¶¤Á¡·eÉ*V]›p|iÃqùpD—vÏßB˜*­W›Æ*‘ª]èOW=k45–qK#¡Š#?ŠÙ‰*ÞÛœ ë'âÜbu×ôx›ÉiÚ©Phו!,5x /6€AÉŒZ:”"’nðÏÂü–Jâ—åëËxaöZ0k÷+©ïèLžØ‘ÙƒQN!/”ƒ=Ý #‘c¸@–ýGVÒ&DlŸ-.ȧ’_švz|ÈœÌ&xúI_ ‡œ¹ ÒFá|îçöT=9⾦S¸W¬Kc¨*°Çý÷9{òðð¸>çxŒ|Mã„®³î õn2Ú{¤|¬ÖkWÌ6ö$¿ '˜î‘eVŒÆsÓr¯gùþPK ‹˜«2}¿ó  lib/jas/src/jas/ElemValPair.java]“QÚ0 Çß‘øžÄC‹P+´7î6Æ7Mº“î=´†z´ J\8†î»ÏI ”ËKÇþÛþ9M‡Ã~†°(±zSåJ‘u ,VkÌsÌ4ÈJål¨DܕΡvr»16µå-L§ÓpùCÕ\ˆ}0 ß üF­i# Ãj7h¼h ƒ<ßM`œŒ!ܦý^¿·WÙNmþ*÷àÏTíe9TB&>Ü›j¦2%²^—”µUwZƒ³¿Y3—ÍW U…i}b„éür6¦D¥A›eãÔ˜†r°èLyÀhî3,ô0>7×~a¢ò|¾zb¬"Ÿ n?.i .kKÃ8™¤Zà°'¢˜-ÌÁ9“‘bá|$.@Á#VßCW©ìF‘ t~„eÎÀÉÔ Q"ýô,Šˆ„k<›°^SI|š]3Î|B?ÊV0m¾-ÆÀè•-émÀ6‚¬P6‹á izÀ¹ÄûÀ·³¥}ãêçÄ/òüãÿ+-yàèF]Æ´¨™L,ÓàÚjw”[Ó×ÏZmKaˆyî„Q)ˆm·pÿé<€£%«çš÷5 #T˜šãn«Ö<=/Þ3Ü{è#ÿ°Ö{ójê¸ïòKÛf§F¿D> U¼Ê?Æ&[dys:Ç÷†sôÇm{û)¼£0½Ï]Êæ?PK ‹˜«2ʺƷr!lib/jas/src/jas/EnclMethAttr.javaSÁnÛ0 ½È?ENØ(ÐSÒ- ²2lmÑµÚR QNº`ÿ>J¶wë€ L‰äù•M&ÃL`­eù ©AdÕÖ:«-æ9æ 4¥pvªD³„ÎÁ;ö·T …ÅbŸ„§‚ÏGËøŸÁÔZí8âkaH<š¨­SFÃèk¬\§×½Ùp0„|{„ÂÍÃ^Uc‰·µH•I'ó·GžT9ÓoK%Ûª»—Ü œƒx9Ä!«‡Ø8|GX:©Ôê!¹ 9Æ)½‰&¿Ï›¬U@äYºöäNTøýå€|Xqì¼Ã¯ÊÁ¢3eIL[ëp|nÜaa*ò|õ°!¬’PDwÉŸ>¾ì_®peçûÕ]EiyMàÎÎ`©»†b•&oºV¬µsF*A¬åQ…1€[¬>Fæn3¶¦”3ðb<ÓÄ‘a",r‡ÞÞPF…d(ÍêÛ”FвÕ$ 5­7kþ­p}¼ä‰ç’ëSh­í«%Çp†,»pÃTµR¶J%¢O]è½õ_tKOþE"=8õ“¾bÉ[ 7ýàžÜG«¨/ö> ÷žž¸bOã Ölî×'‰â70 Ó¾¶¶£-¬^‹Òxß?1J0Ý#ñPèOÍ0õû~ ÞhJnÆsæŒó‰•,Qï©ø?Ø0‡ï¢¾³G*¿PK ‹˜«2ìoIbA$lib/jas/src/jas/EnumElemValPair.javaSQoÚ0~Gâ?ÜÀP¢J{‚v 1:M+Z¥¾›ø 7Ùç@‡ößwNB›–Mš)öÝww¾ï;§ãq¿cXX>©b­ÈyPË jȰ…¬PÞÖ ô5\ Á‹wklƒãÌçóÚùYÎÅ>XÔÿ)|Ech+ˆo¹eµ4¨ 'k`ð+Š»)Ü$7P{Ó~¯ß;¨l¯v?•ŸÅ3•ëXŽ•JÈ&ãÙ[S`*j£D†MAY{ë• e§=À£Ñ¾Û2œcÈZøŒh¹®T1{kÊSc¬,ipèmQápë¬L8:7î¸|8 K.Í^]˜(­—ë{Ær+ýË—u|¿/¥ÓZ2Ycøn§°0¢‡f9Ò©˜ˆè½ÍH±ˆt$ÎAÁ-–ŸjJnSÙM.IJ•4D! Þ³ `P"£ô%‰„<“µ¡‚øyñRq Æ9h¦Í¿ÕàûÃGvdv`T‰Èrå`OFO µG6^uûp†4}Çê° ‘]ê8'ŸÄ pWß¶UîŠâ—]ãþJ·Ì?xú…î¶98ÓJÜxá|ìÆvæä舻S2/ŠÕCàC`iU 6ð¨{AgîV§ ‘äI|+ç¬{E]ÍZSGÒÇl~娸å9ò“²L˜Ñxj¸ù_pÖK—òýPK –á0ÊÎ œSlib/jas/src/jas/ExceptAttr.java­RM‹Û0½ò†%9 »Ç …†Ô‡ʆné]‘g7jmÉ•ÆÎÇÒÿÞ‘ä8.¥= –fæ½yóFËù|:9|9h’Èé}Káâ½UZ–pÔt 5ÒÁ– ¦mJ­8é#š ì àIaCÚBzPólv  kŸq¡$PÒÀùììÑDüþ)Rƒ<„bøƒl9à`¶ŽÿGxù¡;KÉç>0ûŒ§G¸ÏïSv9L'Tßå+Â7éWá®ëÆ:âk'smóùê÷PKºŠAF¶ûJ«$Š8Ñš½™NÞ˜ î,Â++œ³n4'òÈû̯—æ¯H,Ì”xJs_ ·ÑLŸ{}A‘Íà<üQ”Øneÿ×¾‰þ‹#?ùûPK –á0©8 `YÆlib/jas/src/jas/FieldCP.javaTßoÚ0~Gâ8QÖ%êki§v”JHT…÷É„¼%vj_ ´Úÿ¾³° ¾LBòù~|÷ÝwépØíÀ%æëñóW  T×@ nÐ8CÀÆ%€Tl–Â̪\_šåÂÚÄ™þz'*Úiý{^ÃæU ýÜ£±Róõ÷ÒY×p•\…hÚít;¥È~‹-Â/aGî.‹Râë^$R'Cïä´j•Ë,ônȾªµ6¹,ÇYx©ÉÇZYìèv>¸Œ])g2ÄûûÈyf¢Àå±Dv*ò}R¯|R(3(ˆEZÁ–˜ÉÍQª-ÐkJ¬Ùa'³wÕAÂæZmmì#Š[‚ÞxÛ‹•ÎcŠufÞVn• Ê`Ò0`U¥"Ãøl=®< ß}×ݤ|ºmեν8ZÂ"9EyÉ­((<43F='wš µMCU/†ºãÉǤNŸT´ ¢õ3àÕ¨wüNDôõÚºA½:ç ^ƒ&D8O`!`шV¡•†EÕ¢™€y¹…øæ1Ô7×étaÔ+ô Ròn! t¿AïòKÿâ²Ç–çÇŽa4¸è;‡«Lxv4*ŒB9í¤MBí­—²~^ï,KQòï½E™ö™ÂL{-×¼d«ó=Fp¢ö€mÚ˜ˆ5Ï;å·j}†=ImЉyEeU/x჆·Ñ Óùä-Ã’ø³Ý:1F›.H<î£ÃžÏËûÙòçãtòôÐð:å,øÏ"L¶HLS­ñ­à2y¢ÓHüû PK –á0Û/ÑÖ_Clib/jas/src/jas/FloatCP.javaUQOÂ0…ß—ì?œ š_!& Bbb„(ÑGSÇEª£ííÀÿ»m“eíí=½ç;­Eù!ÞïÂÓ$Mä¶Ö†}ÙˆBê¢Ó¤ßë¥ zx6¢†P˜UZ0J­, Å0´&Cª$ì$oÀi1YL‹p'Þ ÇmÐÇu€õ§ôcºm³!c¥öå52ì¸,.Ûn?Ø×îµ’%ÊJXÛzO =“Z#xꊶ¤ØâÁ)–[šÐlš|û1XGàFT1ÐBp¯…[(<‰ÊÖžòºV×Ëã@µCUZÑpJ~â Y'ju;8÷šB*&£²|Ø =Š×©Xý„_£åÊ?¤ÕUCÙ$$ª”ãÛŸ²3jx¢Ûɧª ÜsǵãG6äiÇykÅ£w·ó龤šýûž{Y§]…‰óûÇåø~ù2»›—GÖ?M •yôüÈí¿_PK ‹˜«2_Cüé®%lib/jas/src/jas/FloatElemValPair.javamSÁŽÚ0½#ñsà(J´=Ân)¢T¢ªºhWÚûÄű‘= lQÿ½ã–t[+’í™7Ïž÷œl4ê÷`KCå š5j=•RŠhËrƒ!ÀV ­‚*Hvëvk;–½æ®¡cø‚Œ*–¶Kp»×óî`õ¸<åtˆbãã\zïü õϳhÏúÈ6ñBBmþYþN(Ý‘t¼²ŠNMÛ¾åûPK –á0fñ°9z lib/jas/src/jas/GenericAttr.javaÕTMoÛ0 ½È °ì,pÐa§dÁÃÖ`ÙmÙfb­¶äJ”ÓnØ/%Ûû±aØm@Åäã#ù(z>ŽG0…Ï…´À¡@×âÆ!"#SGT‚ÉÂv òÜ£œ’ŠÐÔ ó@aÉ ¨@ï!½#d6EÚ#OD’ +…µ°—%&mÖŒ1) g1‡h¯ C- •a L‚UÊö•šÓ€V” gúDT´'zª 'Þ¼—±ÁÀdÎsØßHN?i]˜|ÂFúçp–œµÞùxT‹ìZ¾ »Æ#YÕÚ?6"‘:™cíÒRf]ïQ¡‘Ù’~2 ¬¶AoJT¸ð¯ä‚Ä—¯!`F\ÐqàjMáñ¤c罬…a½=|ô?¬BÊs³VgRðTà(©ðÂ<õ Ÿ ¬¯K‘ý1Ö"ÂÊ··VÍ+¾ š@tŽÞö"dîNª3Úq.ž¯ïi6”&öø œôƒ‹ ËÒfR®¶‘7Å‹C|±’ÐäE`æ_ÿª.­Õ&ǽT,ްAšàdùþ+‰¹™¿—·¿¥¿WÔ–9ð&ê²Á¨¯°eL¸¼ÕvCXEäñ¢æíåeþQçŠ3 ¢7ðÞò×'KJT*NA!ãÑHæ›Á;Æ^9ªí:áÅ}ýF-l®Ö·ÖÄË=ó‹¼6F›A÷Þ¿(Âä€Äµ«oÅ÷×ì½Q=*ô‰?8ã^³ÐÄ=PK –á0jUHßlib/jas/src/jas/IincInsn.java]SM‹Û@ ½òtÈaR‡º-ûQºô´‡RØ–½”R䱫±gÜ™q>(ýï•Æãì[£Ñ{~zR–óùtsøæZ¶!úÞDv6z‚޼åÈfw²®ßÖkŒÀ1@à¶kÈ'ptpðIn©…@zŒÔœ!an¡íCÍv;Ô8Ö ŠM£ðb‘"fkž+à,)‡B‹û„}¬‡Ù]z_Á棅Ùp¹'9{ =kt«b5Ü.§“é¤C³Ã-Áo ×z–^œrÜcÁ®˜§¤”õeÃLƒ!À½èº·Á#ÙJzH.´dÅ‘‡ÞFn鳘QÓÉ_ù ,“àºÔ—öl+: \ŸÒÕ=cÙÚXêŒOŒT/ç4ýXUE•ÆjÞÈ•‘'~W2MO>ªŸâžkQ+öŸ2o€d*ä•(³T:"éxýîrÎcz%¦a åúô{i®hÅçoWë X­ßÿ|!ì»T<~БQY½5 ¡—qCí Ÿ„¿Ú†³çT-2QÙÇAÕx…©¸Å¸¡öcéb}³” •™<#@[=owœÄÐöêJÎýØäÆ“¢qÃÒRª¤'…Ùú¥¾ò«sÁjW"_€ÆgßhuZ׸Õç/ý+\Iò*ö,á×!sñÄ7r%È¿éD~ÿPK Ì„é0³æªŠ"#lib/jas/src/jas/InnerClassAttr.javaTMoÛ0 =;@þWô »½;M».ÈrèеŠìZ(6kµå@’“tEÿû(ÙŽí,û‚Øß#ùHJQ À”¨¦×¸1JÌKƒôª0Ÿc’`BšbYˆ µãq™@©Éº(,JeRTp}}팟xiRÚ?ž¸ç|A)Å‚·iaøóq…Z£Ò¢pü ×¾]Àix Î ÃÁŠÇÏ|‰ðƒë±ýùªP†>×<EŒû[¥™Û$f9ÏD\gÝjœÄáà•ÐÒ†ÂLœr¸‰˜èXˆé;jI¨üqMIm0 ÊP.MJ¬÷=›,óÎÞD)þr+´Œþ\f•!rå§À]að&’êLë”]F‚žZ±à† ½ŽÃ%ææ2¢·è^вq&‘¶] ‰Dp«©¯ßu yœÖ¡ˆ]Ãk'Qõ¬KØ'3^!ªvY]M鱬)×[#w]ˆê"[#sÎfr è¿¶Ž0äI2}¸1˜3«ÞCk `.Ò; UfY—h±7¤KØd,2õÖ.™fmRb`„)×w¸¥t÷ÝÙÅX«üq…±UïIVŒ°QƒûþßÚÏ·½2ÐI-~"ëThJ%½¾v'žçEHžã“H¶}û‡ÆÜÌbß¼cwgŠP IIz¸Ê†U^¾?v<Ãçîe_„ë%õª_žÕr¹u•º8Ĭû{hF6ŠúÖ™|æ†ß—fUšGCSšCQ¿õiRUlèˆß϶1® ]"#{]Ì”¢i¨c·hâ†.Ä£=¬ Ã%š9™à¶JªÛÌ(ÚÁo¤auƼYóÙÉyÐ-ä!\õ¨ÿa7¿ßnUdª­-åø·q{C°]e6¼½¡ir®`‡˜aŽÒhæ@¸ÍLHìl“7Ð6·¯…ÂYkØõŒ’õnù3ȈÏܫψcÓ« Ue<ª+.i~…Ö>±Y%ë~±ÐhXLêìE±Óèí5ÑYôA„ôøÎ³Òõ¢¹ù¨ôûPK Ì„é0Ü@'lib/jas/src/jas/InnerClassSpecAttr.java½TÝOÛ0‰ÿá†xpº(Ó&ÊÆ*Ö&6ÐöŠÜäÒx8vg;-âßÙIÛ4|t¼,ªjûîwŸþÓÁ`op¦šSÉ­½šaÜ9#&µC Ü `5Á<Ç„r2ƒBH´Á–«jKÚB(jãJ4prr”ŸxíJ’ŒÂz_P)Qâ¼ÔŽß4¨9+´‚ƒï8~w‡É!mº·»·;ãÙ Ÿ"üävèÏ¢šiãè8ç‰ÐÉ`¸)ªAH–õDЬÍz³Î• wƒ¾æÿŠêVSª“`×ÁäZñ ‡ZMyZÛØvä¶ôiñ,CÛäî…s-r0hµœ# Õ0j³ñ&<ÏO/ÏVLáêô’õ“‹¢áÚHÀ^õLðWÍ¥eûª–r?êy.PßÍF û^ÌuÙ/Œ6²™«²žŠs¿l\Kß¾i‡G0RMËÛöÔA«µ:Ü/•Àá«sœÒ.«á·®—ÎÒ³Û Ü綦K Š'8ò¬lC‘u o¤ÍÚ2î!×XK/É2Yí²¸%JÁ¤i§½½û†À; êß©'þu«È:І$̇½Ó”ƒu¯Î «‚÷]p‡Ê #\—È1|æŽ_ÔnV;ªyåÖþ\iô‚òb|›áÌÑÈÇ~¸ÇÆh³FuØd9KBÌ+ß4†É‘Jåx»eXºäZ²÷…óHoúnï{¬—a»›'ëx8‹[ú²þy&ÿcAû–P=— qû6éà¹ÈþUX…YÏ”coá5¼°Y–4”ˆjÜ­­Þ?l¬ê ÷ôT4LC‰*gYƒB)vÄä`‡ÐIÉíWmp¼V¬æƒ»sÎ'(A’= Ûˆ‘Â[×4©ìP8¥çOx`{ˆ˜x+›Š.ŠÂ¢cM©çCFÓë{5Ó%¹DBË.ëPüò‘£;¢ß_PK ‹˜«2Q7Fä lib/jas/src/jas/Insn.java½XKÛ6¾È`ìac ´ºÝæ M‚$mE± ¥‘Í,M*$eg»ØÿÞJ´%ŠÊº('X[ßpœÇ'‰Ë‹‹§OØ»Rì•²Š Ë8Û€#r&”u¦ÎЊ¹-w^ZP0§÷z׺€+ç !ëZȂծ–£€•Ú ¹¸­.~ýOà¨tBÞ×ʉ\kôÈ•³„רhس+ÿ±ò³àŠ=k„{0–{öö‚~eìrqÙH—OŸÐ¿Šç·|ì·+º»J‡—{¾zq±êCµÒƒ^·^KLA.¹µmjv•„`t‰pïÑ-æË1]å+úM*o+0\ˆùoo™=òY.YeÄž;Ja›mæ>•”׳,LP« L(L¶ MgìžpµQ+ö@èÒ7ÃŒ¾:UÛ²ƒp[¦°ÊfS7{æ|…—µ:n‹-щsÑàKúj3èݶ™™5Ñ»­ÑKeyiŒ¦6`÷D”lŠë^ƒÚ¸­ýþÅ^¼`—³°íûLö‚©ZÊ•a  Ü÷w×úb =wô!GoøZ7ÏÙ„å\)íØXm±Ëi£ºvl§qï7¸Øa×Mf¾ÂM9GèçÅñ[À°Bm$`¼;?V!§ öq (³­ äf-ªÚnçÄÜc÷RHÍ‹. c Œ"x ‹õ„žÕRb€ð‚ÅàÆð»jo4v¼OŽ8|ÁþÅô#…TJñÅ3OíôŽ;‘s)ïjuÃl”7~Àdw™ËRS‘4N«Œ–%B@&Ðõ÷?ü¸`WÒjìþÑa+$x¶‚œí°ª¶ÕÆ![DDº µaÜbQœMh|-³8÷6ƒþ›“ ÿþ+r¤(½ì´†³¸èY\ô,.z=‹‹ž Šž Šž Šž Šž Š#)ŒÐÂÜ3çžËGù!ö´8§ùÖÏó‰'Âœã„æ*ëò’ÂÏwZšžR+¶6ÀoWu›Tÿ€÷%w–~húìDà}S¿)+6 ŠAD'…ÓÇÆè‚öèÂ2 —i¸HÃ< w›§çs/Gðbç}ük ü‡î¬$PòZºŽÑñ}7Bƒ%²lóÌääý¡½oœu×xÍ× ‰J•¾~ËødM—_7Úé“—7<ßU  |Ž@à&^I L—Z™ÞEÂ{ì86‰cŠ=Çöé‰!B´ŠAJßÍaÞÏïÍáëO6ó¶\Žn%î¿ðØ#4†± 'ƒBNÌc¨û¨>'EMŒŠä¸h“b¢Ð£¢‘Åh„éàÒÎÓÆÓ{HǘŽÚ&‰75JS¾O75í2÷ýpÓ7­9ôêôß{Ä¿¦†oJŽ2šð¯g1äÇè%ƒž”üó9=÷‰1ú¼~‡>`×Úà$aaRnÓ½çÞ"ïóß÷¡öú°ô{a\ÍåP†/Šøè:Ä C÷2ßB~‹¥îs›óÌA—=ê7ôSÕ W–d-`¸ÕLjIý)žNãå}lE“€1é¨2:‚Çz¤Ì…ª$8:Ôf(:V(©åk’TêKⱿ~fžÊó8¹4]x|£öïxY.?ÜYœ¬¾/*ƒ} ÕtÒ¬¢NÈØäyä1â£"?²‘g¡³ã§¸„É9+¹´ß–ÞZÒ‰žÚüÖµ›þ,— ñqz§õìÕCq–o©Ç˜ÓgÁeš=µ±tFGf6R¯¹d öøj|– 9XËÍgMÜeçtËžeùº¡tèC";mHg™ðGq/Õžïµ(˜«å¦×­€'‘ûö©éïšs¢Ùéähô°5ØC(†·x0X½Ž½ùé|3Ç‹_¸ãok‡“÷Áa'íN@Ÿ÷^½}ù%‡ŠîFóñó­~daó!<Ä;ì1E§ä˜ü´-DCçWÐkÎtºÆ¿3 ?ÛÃÀ¶oMbu+þM™'xíl†Ü7grì²±½œ^â …˜¼SÒìþÿPK ‹˜«2ÓEÁ#ù) lib/jas/src/jas/InsnOperand.javaåYmoÛ6þœù·+¤8u“4ÝŠ¹Ù°eš¡C‚µ]?AÁÈtÌD=‰rœ´ýï»#©7›’e×M 4mSK<Þïž{x¤š=‚×C‘þ¤‚‰HÄEÈA¦*}jÈ·6¨ c\³KÞ…EªÒ„÷AÉVS‡,ê‡ÚLX,dš€ºó¤Õd99æ1ª°F/ná$J¢¤»µi}‚+–ô¶6·6Åh,c…Ö²»£_²‹DÅ,P„,IôÜS£pkó¹ L¤èÃM,÷ŽIöy4¾ DzÏW*†þdЦjœªW*ælDqôÍBÔ0–7hàôù4àc%d´Kž=c÷*†D¤ wufðƒŸis+ОÆ<‘᤬Ä×RÅ2Îb>Óµ/†$> y•ÆQ>mm~¢8·ÈåÀ<…|Ä1 ŠÅ—\%”eÔ­M“¥—삇6MÀ§ŠSúçS§Å¬½vD¦qÀõó…”!gÜ Ô{ÆË²jÏ(wË}³>£Ž ìa4DÒ5£øÂê7oI3¾°0á:-,ìVüZÉž^17¦`N@ ÀÓælæà°Î¬º:lUS_²Zt@ŒXáu¡®¶ùß WÊâJú­`VWV?%DZà›(—ïÿq‹“âR0a¡E˜c®G-Å0}Ñ2¹Ë#û÷{r÷×#8xò“Ÿ•¸ž]Ô{ÄoòÉÞv+Ü"””RìÁÛ†*êÀ¶k ãÒ‘ÌÒ€¬oârÑä‰BçyøÛ÷ö¦ƒ< ÀùFn ˜¶e&½CzŒú‚baxëëc²™.µv[¤¦[ ›Ùê”St hÑ,j¥cíB¡F|¡àÕþI#%FüXb”¾XÔ’ú ¬+¡µ?ˆÛd瘮ætý;—Ë%ôèIŽh'ìä8x¯™gt묻ö®½bkãy ýgjb¦* ß5.‰Ô?š»b%T®Â‰ëâB7~íÊìÚ®8SNfcv)Ž,°lتÓÖ¹Ão,r¸FÏ2øv“z[×.Ï*âeJ!k»øåB{pO!«YÛ\øŽÏÇîø ‚±³S^½­<¨¶•Yæîxƨn訡ÅϘrlo‹m¯™åîœgÔÔôÉu)7Jx·ûã³ÅG¹w¿ÆZô§è/ïb¯ŠnD}>5~ÌôÁÁסôT[à|FÑ}6²WÝkŒZíòLWÇÑ{ÞÇÃB·pÉ{$ 7jÁæJ«ß kåȶŸo[vZ¢[Ãö Æbi$þÃ.‹G2½R‹¥Ú*¸Å%â‚$|Ìb¦¸½¦ˆm‡ÊEÜJ6wÅ©µ4Ô\‹ö¬T-N²­*tæÁu´* 5Ccµøiˆ‚1 ±d8¶Ãr$1®BýVB^Žô êVÑË¿^Tž_Ý&X›]Ö8F5aäm£%¢K­QD:¿áQA+¼WUf êˆIE»B§Þ0ìc8#”ǯüºT•–73—9v<“ú](ˆ²¸ èµ ÍZUNölÒídÒ¸4[.åÔ û€ËèÉÇg~)¼‹ûÙ q9ü—Ç R¦Gk›g‹o‰žËx­Áê[ô’°jቿ·áf(‚!0:ejö¦ã"Žçzj~*\¯Ù#7éÖ©ýw¢ÓžÈkŽAçñ€-*%ÒÕý"1zÞ~»tå½H.ÞÔˆhê<µÞ ¸«´ì+61Õ:/Y(3àš«–¦{ž<Ï&¢nѽüÜZ>[‰¨ißÕánw3"ÈÓ]Œ>Ž© …v¯,DŸ`9ûfÓm>d”ªåFó2(˜Ù±=kÁ!|üXTgÍü û?»‡žÁÃýƒ§~^¼_O7•½lÅã—¼ÆYo \ˆÌo€îïh½‹*q÷Â{$m×/7M‹¦XðÏríîÑXóMæ]ònÛUZø; •`qÌn—Þ’;[üs:*ÜŸÜ5rGMÕÝâ ‡š£çr[Äã{=°~Ñg9Äè¹Øü¥”×é8¹*¶ý°?ÝßÿQ G 5½;ïâW£±~ÖoæÍå]³UÎ&Ý£wçÙ»«wç6õdóŒB=Ò‹¯z`lâçQ* ¶c‡Ï¾~j8âi¢é§½ l(±ë¢cD5£¸JGcÅ.B^š¡~¯O:d’{xöÛÑRkéy¹hg߇áЇŽ`¯L@ư>l[«øêwÁ¡¤RÖ…9 /ªÒ0,5´FÕÓî†<ºTâ©´Å¡ëù+pÁ½š¸ÎGu™¸º£ŠŸ 9ªÔ…ë6fz´×ƒé3ò¦Žïn´òXƒ¦…´·©JìRd>®2‡@uæ»%ó=˜ÑEµ²øëÛjÂæ^¹8Þ«=µlTäÊàp„¡6Ñ@£¤Bb¤È°Éô\«¡Q"“éy›em”î殼2ú{MµØ–ý4+ Ä߈MKü–Óa•îfé‘ÞÌ›ËØ/×m8tZ¡ÃÌ w=œB¼'"» âLz¶þ›/K9[§ ûÍeúhpqeó¹-„$pí²DFú,;b×úêIk¥eÄÕPö»]=ïô3;ôçÊòsÇÖyרX;U7ù^å™l` ÏÜh¢ðÃï‹Â—÷bzÏ$WcyúoŠ®ò¢ˆÜïY~«OÌU‰nÍЬÃ(–q®¶<[¥ÖÿPK ‹˜«2QŽ·ç©#lib/jas/src/jas/IntElemValPair.javamSMoÚ@½#ñæÀÁPd+=BRŠ(‡TUƒ)÷Å;à)ö.Ú5¤¨ÿ½³6Nœ&+Kû1oÞî¼7Î&“á&°.±zRåF‘ó V[Ô5a y©¼‡•è¸2‚—èÎ:ØÇ:X,Mð« \ÈùhÙÌ3øŽÆÐN? Ëê0jQ5:OÖÀèÖW3¸Io ‰fÃÁppTùAí~+?{ªŽÖ±lk•’M'ó·G©l%3lKʯ¯¾7Ü«ðÌh´ïW —˜2‹{t« Ôªœw§µ% ½-kLV‘tmjÀñ¥ ÇáÃ]Úap< aª´^mî«DX»Ðߎ=k,1Ÿ–qK#úQŠ£<ŠÙ‰)ÞÛœ‹è'âÜbõ¥)ñ6“Õ´#©PT×!,5x Ï6€AÉŒV:I7x‚'~K%ñóòåÆe¼0úz%ÌÚùªé[5“Gvdö`T…SÈ åà@FOc×D Çp,ûO¦¤EG`_'.ȧ’wÍÓ^¬øP´Èïé&}rpæêE…Oð¹ŸÛ3ôäˆûvNá›bõøXÊBU <î?ÐÙ“ôÓÃúœã1J5½¹vκWÔ»¦hïúÈÖ«W¶mìQ~N0Ý#K›ç¦ä^ÍòýPK –á0ÎwgâaIlib/jas/src/jas/IntegerCP.java]QKÃ0…ß ýÝC;¥Ã× a:‹ø²Éú(±Þ¹h—Ôä¦SÄÿîM;e¥ÉMNÎýÎmTõ¦^¯ÊOÒ$Mô¶±Ž¥lU¡m1ìÓd4¦ †xpª2Іé…*k<+Ãp´&G¦"ì4oÀí1»-‹øª{9U7ÖapÑ­c¬ßµ úË–œ×VÊ%µ:îÆ8+ÎúÛQhÂS­+Tµò7}÷Ù-èƒÉ<ÇVòš¶dØc ë-Íöp>M¾Ä(B£Uu è#!vo”S[Ü«:ÖBù?_¯ÅeOòÇE[“Ç«® Œ~Ç9²£½fŒéñà'¢*¢±3Y>饂#JÓUßñ×Zý,Ãô¶n)›Å´¥iA9¾ä”ƒ3“ÝÎi>TâJ±Znß±# eç}+Þ8»“Ù-ÊŠ– ‹¬èÜ.?£ãb~·º˜¯oæ«òº\þÒþ©$X&èù/·|?PK –á0‹ï¼*ðÏ lib/jas/src/jas/InterfaceCP.javaS]oÚ@|Gâ?¬ŠŒò©”¸*…ü^]ì5\‹ïœ»µTùïÝ;ļEBòÝîÌììè˜M&ÃL`¡`¥M&\>ƒ´PZL4ÌиƒP [Ø™ÉDÔÊ)x•o¢¤ƒ60Zøïd¯’i£ºY¡±Œ†Ñ+éNpÞ×ÝÙp0"ù+ö„»»Ì mˆ¯•¥'¾È°òå(HŽÂÚ+×x&T©·@^1GE¶¥"™ãR+K‚ ÃÁ?žKGg$˼½Í]e-rŒ/…SRägÌ|>àìˆÅ(5R̤’jtÀŒ®y•0ži/ù‹>BÆ)]¡!GŽ,½&Y¹‡Ü+A¥AÏé£fîÓ„Ñ‹!Ø‘qf¼Ó)4·f~wgé±ãû,J%_á‚z½¯ps÷et{wçÖ8×&ÁøväjŽzë*ÏkŸ#K(<µÙÖj-@QÓýÈ9è\9E{¯s¯´LùéY}¬0ðr‘ªû–1iº|^æÞê7u²®ÕIŸŒ¤¾ðž‰MIEIœrøº¤qÍ¢ƒÑ'~j›èœ`á^üÔ½ÑÈmz†˜zÝï§½YïâÅ:þ½ZÇÑöÇbýŠâŸ›§Öe‡Þñ?… ÷HlZ¥xnÖù ’÷ëäßPK –á0W6- (lib/jas/src/jas/InvokeinterfaceInsn.javamÁNÃ0 †ï•ú>ì0&Ôi×MH v@&óZ³Ö)±Û1!Þ$…ÃR”ØþýI¼\,Êðì;µ08c/ z ÂÆît?Ô Xƒl Ê]ßRÈfóplUê@©Ç€Fí% à Ý  K=õœÙšlŶM¤Våˆeô'b1 GtWVðB —(U&Üã`0{ÈçŽïŒ³I)hrÎö4rŠÖ°ªV“º,‹²èѰ&xCݤ<~Ë‹éˆûj‘‹±mxmÙkQv×O܉ Ї‘’“<›Ž$Îi?ˆqGÛ8RÃX(‹Ïx7üðþ!Í·Oàzº7 µÞ$CvøÞÁ]Ú_þÌió«S@9Ä¡ó_üã$Î3~BgÛWYÄõ PK –á0”_"ú>lib/jas/src/jas/Label.javaÅT]k1|ø?,!³ëž›×Cƒ›B à’JŸŠ¬[ûÔ褫>ì¸%ÿ½«Õùb·4 ô¡Æø|ZíîÌÎH“Ñhp#ø ¨=‡ šVcƒ&`ÂõñæÔa‡}‹R …CQqn4±Ñ[Xh»ð`—P yGÙ±i+–ð^9ÆjÜBeÍiàD!Cš¥ˆA˜-ï‡`a°q*4cZ¯À£´¦'œª*¨–Šº¬¨+W µ³qUƒ€Ûà”YN¤hYPÄÍ{KȉWبP'@ lj4Zâ'‰í)yÓ[Cmœ\òó–ß•0p’ƒkt^Yz½ÁµJÿÎá¬<ËÑÉàhpÔÒÄ á›ðéFk] ×µ(•-G¼HÛâB+ RĬà=Q¯òôñp‰vƒ3k|´08úIÝv„UÅ&,+ÈÓ¡™Ütµ;æ4’ V%\ÒØõŸ.£´Nj„<–äˆæ^IIN ¹8É,á‹$§é²&au6—Z–¢ZÝaOÒ£#ÏЊŽµ¦sjSƪȔÎ˼n[IúýÊúUtÉ2S0QçŇyê3™€%=Jþ«³û$٫ݲ`,Ñ4«ä X[Å{ŠY’íʬÇ0#û^†à@ÒË;Ä<†6†Û4½l ™Í%Dg.^,±I˜¼úÑCmëlë’Ÿõ6U¡Ùð†¿á9è o^ÚûSR–¾$´&ù—Î6Œ…õšçQd¾\z ÅÁ(ØÆÞF÷ä\€ðƧóråœu”8¿º—Ø:\ÿ3p³l  ePax:¼»Ϲ`Ùí¼Gcm%]]­ìüŦ“X®0|”ErþÎdð"çÂ4»¯o8ëM·‘NFúz9W‘qï¨L©:ó€‚r^§Ìþ$ÄP2õÛ´¡È ÃGï?ªó™ þ/ í$ÚfÜëµfÿëÜúy\›ðÛ°ö.ÝucóŸbÿÒéJqÌN?‡cxEQ_ã!]´¿PK –á0®_“"lib/jas/src/jas/LineTableAttr.java…TÛnÚ@})ÿ0Jó°¦È(UŸr©Š(‘Ò&jª¼F‹=À¶ö®» úïÙµÁISUBÀÎåìœ3ÇžŒFGCÁµÒ:Ô ´àå¢BÞ[µH‹€”*K,Aio`fÊ~E„º„à¨bi,,ƒõkÂ*qV+¥WÔGñZzetë?:Ä4%œ7=ÏðïNiüšN¦ñ÷ –?•Ôp’’´Žàä+nÿ;ƒÓü4e'Gãa#‹r…ð]ºs>«º1ÖÓq#seòÑùóPðªŠAê ‹JPTÒ9ØÏÄC Ÿœ'Ìn£p ·0u…R³[qÌ_¢±ï8‹ ÷Xx¢SQz MÑF'Q J_ŒÇ3˜Æ‚vФwÎJz’u«ü$\`ý¡F’¤¼˜Ðß18&´(©’TX¤&*çÙž‘ˆëAY¬!¡Äóv­(@0 ˲…úçêà˃¸€VÉg׋Œ3O‰f’.)#²s’å¯Ðï—:MË’hQ%±¬z®Eíí#Éw=÷7ÒÊ®å«}•)")"ÏiåKÕ‘èš"ÚÌX‹®1ºdIú7·ÝÎ[`¯}’FoUØU²ºsžS¤9ª1?N,ɉ\Î…ÖDJTì ûµr9×ö³¬Ö•ö¸B+"Nªne‹—ÒØ¦Ú ˜1½¹Þ@{D Ùí•ÇZ°•róTNýÂn[}°zæïàí`0˜L@ËT¹ë2ð¾Ë0àC…zŸÙ÷ôNyp ‡ö‘ öéj¢ë}g«>©­U¾Oi¼w#tø$½¼ ¾ þÎÓ£Pƒ >ëd´fëàêf¾+°áýù-1·ÖØÞ¨!—ÜÑÛÇ ÌWèI+]â.‰Õ­e_Hk`a^rxîPÐæù)srÚäIRæ’€iÑNdd–Œ8„ `@ÕùZºÏÆâüÈ:Y‰Ò uõ'óe‚z4î|ç¤8Ê õ(.l™P¯ÖV‰ÑÍrI/Á²ëP‘§Ykοà,ÈU¨œ~îezäãjã}þPK –á0E€xžH"lib/jas/src/jas/LocalVarEntry.javaÝUMoÛ0 =/@þi`8? °"Ë¡@‡hлbÓ¶:G2$:é0ì¿”l/ßÈÛa†aK4ùD>?J³ét<‚)¬*íoe ¹ï@Ö­Ç”‡F9[€‚'›©úM¹•Z×ø@äÒÿHc¡ z  Ág¶AË¡fÒÖÄh™Õ°UNK8Ö±qƒTÙ<ÀHg–ÝUš]r\·e©MÖ™GãQ£²oªDxWþ^æzÓXNï]mUªm: Ʀ]×:ƒ¬VÞI/¥´ñèCÁ“Zc ž¸²„kÎïŸx£6˜€×e0hCàkK`èÎtáPëÖ† ÛIJ©RÓÚ±Ù…Ÿ)NÌŸ™hµ‰YÅ×Èß »^XëW<Œã2bÈð–©â†rÞ‘ éüdhµî®pÖ¹k“㇋0ŽøÒæŒÕwP§—c2<¡ó=ÜÛWf9Mžãë{® ÛšŽì™¼:=)`²§ƒ0L:eô\&ðJNøÂè&ÌA2ˆãN€‚¨ Á|ð>~2P;#qÛ¥ø9ÜÁƒÏ´^¼LÄt·ï#ôº°åÐCŸ÷bøùÿ+–»5nSÜã6Ó\]جnò…ø?Ô÷ªÂ›5~QÙƒö‡­öŸÉ{Øóxð7dͯS%÷ûëuñn­Î¹é½­·8YÈV¾4[À˜`ªò|ñòH¸éæÀäiç4íãpÉ6‡d<ù¢H=·Ô´ÄMŽü“m9$Ýyx|^~dØH›$rü,³î˜¥4,ó\i"¸¦­™fûÍÙ‰Sw/˜Í†Yd0­Ñ”TM“ñè_üÕ0]Š,ÖŠ€Ä2A"ökŇâÓ‰ }F’ú$®9 uü&^^wAý¯âûPK –á0¯J6ľ&lib/jas/src/jas/LocalVarTableAttr.java­TQoÓ0~^¥þ‡ÓØCZ¦”"žÖ¨J&›Úëä&·ÆØÅ¾¤Óþ;g»NÓuìUMb÷Ý}ß]<û=Âg‰a¤X”äÿ‘‘‹šÐ‚0X-0Ï1©HÃLç]„g*‡Ú2âN¸« h ÇE½\Jµä8^¯I­Rÿh=Ñ”y^Y$_Æ0aWÔT0ÑÉÔßÏàî— NÂfƒÆ2œ|ÃFº§3§ã°;ê÷ú½•È~Š%Âa'î]V+mˆ_‘J'ûK5ÉÒ/rd½(eY)¬…XÒwg‰«³ß{à`‰…d0»ò&À{P¸†©Í¤œ]%Ç1ÊÛéCžà3bUìu¨Ë­|€u}Õ„g0…26$»o­Î¤ vv-©çX}¨mÉÏGüx Vý®·$ É=Ê rÃ]mB|—Pd&ÿ¾.$/0ˆ<ßÒýµƒðR}ž¹ÛÖÕƒ2’Û}ð†lm %ƒ <>õgšç¬'’À\‘¹wRyÔvÓK[ #*@y2ámàÒà—#¡½²;…7Zæê#“XAàÁކÔaJ¬8m‚; >Ü ÕeƒÉÌÖ\51Ðçt¡³« Â*qZâÄ€ïL2Wu…ƛϚØ*Ÿ C*ëÜB•Â~Ñç»ÕA h³¸k¿ú²a²}Eƒ„¹n(*¸bbxÙ¤Q îÖÝÃV-`åoŒÍ5HµQñÉ[x Ï^£(Qá­Ì7mÒw/€Y·%ªüs)U<à8ì ³6nüf˜xWCí,z×F·¡k#©ÛÎÓöS€Œ_> —5­jº&þ+Ð5mûA…Ñk —óM†+×ÔSwTÍѦ3ú$×|ò@¥K$•ã&ÌHô¿^p·œþC-Ï2v!“ÿ;mGÿ8fG<_ÁX¶ÐÙè\;3þýPK –á0^T,^:lib/jas/src/jas/LongCP.javaUQOÂ0…ß—ì?œ š^!&(cb€ ÑGSçEª£ííÐÿ»m'“eíí=½ç;­Eù!ÞïÂŽÒ$Mä¶Ö†}ÙˆBê¢Ó¤ßë¥ zx2¢†P¸×ê ¥V–…bZ“!Uö’7à´˜,¦E¸¯…ã6è^ÅuˆõNú)ݶٱRûrI »!Å íöƒ{í^*Y¢¬„µÑz²}2©×àÏ\Ñ–[,b¹¥É/™M“ƒŸ‚*à6¢Ši€6 ‚w-ŒØBáQTްöŒÿ¢µ²~X~!Zû,NTyhDÀ)¹Ã%²NP 1>ëvpî%…TLFeù¨Õy /S±ú¿FËWÿ„VW e“qªPŽƒ?egÔèD·7’OU¸,æŽkÇlȇюóÖŠ7Fï-îæÓÏ’jö/{ÂëeEœvý&Îg««Ùêù~>»=¢þIB¤ÌƒçGjÿýPK ‹˜«2Í‚Ñæ¥$lib/jas/src/jas/LongElemValPair.javamSMÚ0½¯Ä˜‡@Q¢í¶¥ˆrØjÕE]iï&ÈÇFö8°Eýï'°›nkEòǼyö¼7)ÆãÁ Œae°~Vf­ÈPë jȲƒÒ¨`KC WVC Ý:Ûè¹Bóù¼ ~Q‘+9.Úy ßÐZÚ â¡r¬öÃÕ ä, `Ci5…ÛüÚh1¸ÜT¹W;„Ÿ*ÌÒžêƒó,ÛFåäòñìï£ÈdÚCÉŒCååÕÎîzåž­ý’Ï) d$ìr 2³ëQãHƒÇàLƒÙ21®l8:wá4B< Ï¯ÍÞB˜+­—ë{Æ:Ökè÷•½hõ—1†ïŽq +âZ‘‰“6ŠÙ‰#!¸’‹âGâ Üaý¹­ï®ÕäJR£H®!¹Bh4/.‚EÉL>zI·x„gQ}C†øeñzã"]˜L½Ý|ô”Ù{²;°ªÆ ”•ò°'«'`—DÁŠâPYOȾR\QÈ%>µëœø¯fÒ‘èf}]㪻ªÙuÛ´ÍLý޶ŒŸ$79N3ù )ÜSg|·,—©,¾ZÓ£·$‚»³þn8ð›²%(®Lì’CÑ©™ø{2S)]´Íï$Œuq¹¿ìÓ„7ù¥hwôÊ›4Qø\9Qö„B c¶¡†{²‘å¿¥°åâ¿ÐÞ‡äøìÝPVRj*Sâ,Ì•§øœ,øwø‹Ê›Ú_¥]i>=¯Nz•øéù2S”é?÷ø’¿/盾ùHr 7¤LJOj÷5s¡£‘U,b«“ÈeaøÓ6éyPK WŸž8T•MÀlib/jas/src/jas/Method.java½WMoÛ8=7@þÃ,¶)5”íµ†Ž±È¡hÐ{ hil³•(/I9Î.òßw†”dI–ä$Ô0bj8_¤Þ{d./.ÎÏà¾o¤ú°9 ŠÅÖ©°æy‚WÖj09H ±P°${’`⢥¢q*Œ‰œå³A„9?/Ôîwòü‚v“{ïÏ¢ ±†÷Wî÷¬þ–”ñ½ŸÜ¡62§Ço¸“<ú£~öòül+âŸbðC˜éùÙù™Ì¶¹¶ô¸‘Ì£‹iÛTX™:#EËTƾI¨Úù—Ò‚Ù°¿ˆã)?ÍoA‰ '`äÚªÕÇ4p–Å>Æ­u6tCãÌwÊnÐÊØï?¹Ñ T‘¦S »]ãVcL;›¸Ù„ûÜîäZ [èrçåºÏé/Ú¢¥L¥}¼R*·ÂÒ†9?Ú»{Á¦{ñ’0©Æo…¦½±¨3lÙãþm²œêæt+Q¤þ•82-cK°[£Bíß‘a|(g‚ÐáàÒ‘®È9È0L´EIÃø4ÜXæ Ï–R¹†Êù 4¡ŒÊRœÎw’x+gð­PVf8¯¦Ûe† Gi1ͨ1Hþjíg(·ï)j‡Tú£L…(XÑ>äË´ìv(#œ´€¸ÛB¤þ™y}¸§—ðX²€7ˆ]y,Ýð í¦uÉ?%=!ðä㞨GjvÒ ^2i³.äT޽À¯„^dV¨[i"·G3—°iæÝ™ÕܿĘV\¦'Ü»Ù'‡·éxÒ§¿dÐÒ"7®–Ç“åòv¹LXÓÿ<ð#hŒazwêö]“CÅ,RÌdÁ:œ¾ó^åÖeo‹_ÐÕÂF þmhcr*sK/ƒŽzvòÔÔœJKÕÖ¦`Xs;UŽÄk7¯uÃz÷Új=byªåvRÜ)yZž»µDÿYë}Ë^±­3$è?QÅ ü4™N—˜D7OwTW À&Ó‘93¿½!…˜ØáôØN­Ìrã÷oþD =Ý£ª6+ö|KK¿ûAê€ÚÔQs²¨,J®ò{C¿wçýÕAm{ìÑÛ¯£»3ýñ½(®sôÍŽå?W³:º²tý›ð{Ðtú7À7kaÅ×Ân {g5ÒÉ6¬Î?¸ùº¨Nñ _¯ZçºZìÅÊäÿ(;¤$‘«uÇ“]aÿ Fk´„l•àÞCþ9ŽÌap+>ŒAŸmÞ.i´!#UÞ˜™@{kGõw–;² P)ùßÚŸáìüÓèëìüŒG.ÆÑåìËÈ™=oˆ~CÌTxì¶y•q PÔvÿn0êÍ8÷§Ùh­eÆÉêC‘—[ªpè‘qÊ;Â"òûAÆ¢²G#i(:[Ab]QY/y׺¢q#F{£îÖËSŠ%ñSœ¸G·4F›&$^÷û«Ó^¯6Û›Õöçýrûc}ÛëA~ña’#±O•á©Mð?HŽÔgâß;PK –á0d ^:Y]#lib/jas/src/jas/MultiarrayInsn.javaUQÁNÃ0 ½Wê?¼Ã0¡N»‚@œ8 Ðød:o 4I‰Ýøwœ“ª&¶ß{¶_óy]aŽÇè.ˆ¦±Uƒ€càœºöõqÜvÐŽNâüÐs*dØ'§lUö(‘r(‚LkÄ ÄÒ¹°0{§]¡Rßç ‹6åæÇ^¥D‡ÿóÀ bଔšB¾¢Q»˜0».ç96oŽfSqÇI2s¶âË·s,›åT]ÔU] Ô¾Ò–ñBr‘cÛ(&µpG‹Í¼$ 6>÷®EÛ“îþ¦» ÀïÊa-(AqÄs0wVcPçùÆŒT²D]}Z[,ŠÛÈÓe<Úqó`†š'Û$0í®‡±ò0úgNÙ„µ©)uÄ›(‹|üÌ}<ñ‰u³¦gæ­šâi–Ñ€8´¸Ìÿ§é ï íâ·Ì‰ÂÚ Vø§z?åOŠª)øW]Ù÷ PK –á0ë«…}r±,+mˆÃF„R‡cȰú£)¤…°Ö·cyñðD¨2 ¼åÊKVgá­V$KŒ;ݶßûÅ !²©”ŒtóMÁÊÜ“̼Àz“»É%Z¡¶˜i°¦r: x‹Ñ©dÓ²®þ(éÀÚsùÁN¹>a›éò‹JQú„ïzßï¬ ¶2W‚jóhæ–οV[¬òn¸.`ž‘Cûñj%¿à‚A²ƒ9,†ß0iÕL`°]> _JEhT0zj é mèqÏ ðxq2pGw'üâè<âwkv£e­. b÷=Wª¼•‰¡È²xóJXÞu¸=¿¥u¹+õÑHº%žÂRX×TÕÄ® »«k]4}´ðº^R¬ˆïçÔÝÄ•1ÚÜâ‚Ðó¾œ÷:Ùî¢d÷#‰¾¯¢d¹{߬.¯È-ÿ `˜#±b•á©å€n¶ëpüüPK  ­9¯3j 6lib/jas/src/jas/ParameterVisibilityAnnotationAttr.javaÅUßOÛ0~Gâ¸!ÒR%ðJ`¬c<°!@CÚ+r›kã‘Ú•í¤e¨ÿûÎNÒx!YûÆ ‘äìûù}w†ÃÃÂ/®ù„gܼBf¸ÀŒQ|’ÔÀ.&˜$˜FÂ4cZÃŒg¨ &È5Τ‚Y®LŠ ®®®Üá–›”ôÇc÷<‡ï(ŸÑ»”¢½—· TÚ>þ‰·oçpž;–lúÂæ¿™Ží7_,¥2ôY°Ëpÿ«Ê Ïœ’,óIƧUÖL±TMÝãmÙcªÞ¬ Œõ”óëG׋¸R)Å^ï¸6Ù— pÕ(ƒA\Û’' PˬÀàÚF¾àà­<¶‚!K’ëÇ[ƒ‹À†ÄÍŸAà"|¢y–ùvVÈH1C]å6 {3ä•*ðýXY¥Ü„)Ó÷¸¦4Ûî¬A_Gd*J»°. ÛQ6Ígõº©{9¦‘ á^<‡1½¤NŒÓZN93Ĩ7)0¸ÀÅg‡ßEDo£Ú™Ê,ë8f h ¯2'PÈÒòT!9!s‹R/Þ–´•è|V„ÙI•à‰†DÌá…‹däqƒª{nÊÒxƒ(júãʬ¨SR,°NŽïúÈïoŵ–Û¸Õæ½³öói[;Þj4?(¡my>]º’ïμ¢Á{÷Dûæ~/ëJbø¡ÍÉ8(OÚõÓjÍÿ`àÛX%§|Ïâ(²@‹|ñ¼¬;¤?tà8œ\î9ueY;'ΊB“+Ü’VŠÒöÒ¾1Ãr³Ì Ál27ƒÆŸI•\i¸}¸YOqi“Ù|£”TÍ­¦¼FG~Bî‰Ö¾ 0œ£¡u'\—ûÎ/h{ùV˜ ,wKi°×4ÌйI;àºì†këîë+•{êGòz…™Fø¯¥ºN§ÓǧwbŠq9œ{p*îà#Uâ%lib/jas/src/jas/RuntimeConstants.java½[moÛ8þž_!ôã"{e§I°¸®ã6^$vá¸z‡ƒA‹¢£ -ù,¹I°Øÿ¾|_íTÏâW¸»$õÌhÄgfHŽÔ“÷?%£ª¬R6u²¯sšeòëÃ]’qR× +x^'?½?9ْ쉬óä7Rÿ"zû/2mò#YžÌ÷eSlr§ë÷““Düyÿ>iªíÏ<ÿžó$3WÕ¥V‡iÄÿXQ.&¿†Ë»áçÉ(ùgòóååUzq~ÑüÒ-ô0žßOfS!6øÀï&ÓÙÜ:dn&Ÿoüû\Á÷‰$ÅÍÌ™iI¶UÅ“¼lv¯IóºÍAËV`t;¼¿ø ¿˜O”E—èOÆ·×ßá7^Ṳ̈@¯Ãé柆£±EŸïÆÃéõâÛ9g½Ôyɲ\F9'ë;Ûp4Z~“®b²ã¾ ;Ÿ< €“iðl1-Æ×Ý#áâ¡ÊŽr$öÓd:¼•&wxŠÒûm:º™Ï¦“)Kú€å³[a‹vEÀòÅ|8½ŸŒ§ E`þThP³x<€uJ=ÀüáGáèÑ2ç,…¦~>->}‘ €N§3I—Jy—½+À¨ñôëb¬‰Xôõ‹ÎLžW«Ü™°j—”ù3ÙíÈëÕ¸ôÐaÝbùq6»¡Ôí§BçÍpÞÒ\ªìà×KzILXùME^="ËÝÌæ‹î¤¥rªl—‰ÉpQm³Šv¬d³”kžXí;‰¤9¡ÚA–„r²»íÈX[VÛî-€µ\/Ë=çݹP Z`Óëö0~Ö½Üzè^·Kzè´Û1=t¿Û;=ô ÛC=ôy·Ÿ*"Ýœt8«‡î>+áÌ)ïZR=x¯]JA¸œòâÝž1¡Ô3`tUl÷õ#°JpmÁŸœf‰pI³å³Ä"LÒ,Uàà±à•Ê )@"7X„AƒEè3X€;b°H(J¬òŠ E…Vù E…–Úµ%qh™R„@kw`[»û(‡Êî®­šCK»ûÌÙ 0ɜݗÌÙ pɜݗÔÙ pIÝ—ÔÚ=¸¤ÖîÀ%±v.‰µ{pIœÝhTj»‘¸4AÜUpÐÛ˜dŒiÁÄ€ÏW °˜Y0@bmÁÈ6§nª].Á…Ü‚‘h´`€AjÁƒÄ‚‘´ªÀ*Î[¸ ÈÒ¨á2> ;V W?$µ:Û?\rÏv˜Mm;À'÷lGÒ«g;•ží«Ì³`•9Û/ël¿X¥Îö €Uêl¿@v>žíHšõlX%ží«Ä³ŽTm;«6²/-E_"‡‡F(uhdÙth€Ð•C|f ÐY;4ÀæVÍ/"Rr~‰,™{¥Ù÷ì·ËéyWHLJ°´á ¡o¯ÌíªŠhkŒ ­tÜÕÏDÎÅ´ß¡rɾ‚v; íu4Úéh(´FîWª€œ< ),”D[,²ÇÙìUEé Y Ùá,²Á1XäÜH‹ï ú[,² ¶X¤vC ÙÕìòÂ"[ƒEΊ‹Ôk ‰µ2_+,l‹D›Á"áf°P¼=*ßAj5Ü`¡ÝèãNa¡­h‹EâmoÀHÀY0”%Kª°Pšl±HÄUÚ$àZ(ÂÛ‹ÆBƒEx+JUDª3EªÜ)Í)SP¤Üª©EŠ2<-a¬5©Š¶ G…Ö$AêÉBª0L€”`¨6©¿ÐÖd'¢' ©¼©Z*¡²Kª< )ºi­ [Ùf«°]«'!L€UE*.ÔhF*.ÔjF‚ŒåÿUX$ÊÄ*¡°qŒ7 ‹0ÇÖZ/B[k½Hjd\ëEÎolYˆyk'ÉZ@ÏToÑzZ Š‹ÐsƒÔ\Œ€¾D¨6IßbuIì,!•—V %€ßuÕT ðû[­Ö¤è²Ëõ¤Ä6dÅóú¹h2ýž Y«êi¿õd°g³ß• Žm>-ÛZ8¶µp¤òâÁN=4Àê:oÚq)p»ÝûÃâ¬È¹Z‘ú‹¸Ã#Ô–ß«§ü{±köDem¤£…êmž­ÀZÈ>=R•Ñ2…ýJSŠœ¿¼¼ìKù1¨h(€ø2W/u‘*ù*GáÒI €¼á`ž—ëF…(R·!Íã®Ò¯¥‘yö$K^Jb\ —Y^©ÝRÂÙTe!kd’;%Ðmd^ m@õsA•[ Íž7E@RÜ;‰öS¤¾#ÐUi‹Hû‰@³XFZ0Àòj—“§m%»RÂûÂL~[¶"Ù“˜ Z'YµÙ ñUÁ‹æ5+ÃcÒûÇàMºzmäô·Û_Äš4{$;+“a2õcµk¬PfÁ…Km™ËÍGI6yç®:>÷ºovE¹–°©ù÷„ÞßZþy§²Cµ}wª›Þ§VfÈ~L œ½; Õ˜£"\õûQð†žsƒãö~AßÞ‡½a;޳öÐH/µøPþ„Ç ê Çiæ5—Ï^'•½èÉäûW ñ;ÌïP¿Ctçˆ"gyûõIØMÃn?ÖÁC<ÔÁCü¸ê`¡ê`ÇuÐP uÐP=®ƒ„:H¨ƒ„:Èq Ø z,èÑ GŽ2´ 0YЫƒž~õkïÛö¢y04è‘ gÞj<]û:/Â¥Q¿Úq¨‡Gzx¤‡GzØzX¤‡EzX¤‡¾¡‡Fzh¤‡FzÈzH¤‡DzH¤§ G‰â!,ìÒ°KŽëX…¨,ìÖawër·|w0={{Y¿T z©× Ú x )õ$ä,7Ô‹êE =ˆ ê]—¯‹œß¸6óÚTµ#_Û"+絙צ^[¾69 Jµr^›zmùúÂÞGµ#ö®S¯-_#X9¯ÍT;šïº,ç»ùpmYŽ÷Æwó±÷~G–Å3®]TJxå¤^\›{mY^¶íÔ™—²‹RwÛ´pMæšÎK€I¥Ñ; u@êîNR±ŸsÍìЦÚí 6ÖyUYÑïX:¨¾ñå#dyϵK—„o\{}á²Ìæa=¹¶L ”G4´å®¹Žu­c?¦‹Äw%í]õ€Üñ›¶ØÏ›æ.ob]^yÇN¶W¾ñ"K-¼àÒ݃øòQ4ì’°{\…-wØ$¹L¹Â´ýh–ü²ƒ‹tos ¶w9¦Å–Œˆü7câÔç5Õð`ÑrÌœØc¸RÇl»˜˜cô¡aæ¸l þq8Ç]3$³±²ðØêEˆ¬0ÇNßÉ·Ìêøh îxøN¡þðþ]]I“æ1/v‰~|} jOBíëV_‰Ž@½Ó¿öKO“¾ù¯n¤Îæ´øËZ½_§eiøûß”ý­–ý¿”õÿeýã?«ìërÒ¯®ô_@©¯îü49óüÇ—Ðmqu`FÎÕ¯g\ý“?PK ‹˜«2Í%bÚµ"lib/jas/src/jas/SignatureAttr.javaRÁŽÚ0½#ñ£‡$B‰vdwYD9PU]T¾À$Cânb#{hQÿ½ã„@Ø^jEŠíyóÆóÞ$Q4A[Y(AÎ "#wŽÐ‚à#Ö;ÌsÌA*ÒUÂZØË m›&TÎrt¯ ì¡ Ìçó6ø&•|?Y´ÿ|E¥äžßJMâcÒ¡4Vj“ØH¿›Ácüm4Æ£ƒÈ>DðSØÔŸe}ІøØˆXê8Jï¯ɪ½äL·«dvyõµÅwg^–1f¹i;‡Px„…ͤ\n‚‡kÒC˜vøK¬,Òž£Ñ2ƒVW K_m¥ÀðÜ…ýÂXäùr³&¬_¨§ûcÚ>ô§§OZ“xEð]Î`á«üÉfY«3)ˆÍ8J*AÀ3Ö¯mëÏ ï¦=EìFÞ0‰UVÃ/í¸mÎôdN÷:ÜkæM¾°$Ýÿ"ð,Øò©lgH’[›üæOòÚZå)cÜo †ÚdnOCð@ø£‘4”} _‰wGGü5hGáJ£Öï«S†â‘›úáZ£Í 5xÀmÇDq[oËMÆ;§rjÒ/µñ¹ 'á;z`UÁŸ#l^Ö¯ÛôNé¯CðAdoP»ãçAª#+p¾fUéZ^7ŽŠ÷ÍÞØ.2]ˆ‘_PK –á0M€ò¸ƒ|lib/jas/src/jas/StringCP.java]’AÚ0…ï‘òž¶º Ú+¨Ò²)ª¸´=VÞd·‰µ'ªêï8ªÅqÞ›™ï9iTñK ?•ŸÅQ麱ŽeÛ©LÛlÜ¿Œ£ÉxGã»S ”ÁŽ6GÖxV†áè@ŽLA8k>OÚ#ß,²PÔ>«–OÖa4ï×)ïZúŒ±#絕í–:ž¦xÊžuæ7í[¥ •òþ:<߀.L¦ “ ÜÕdØcÛÖ5åW6G¤æ¾ÐZœªúPÀ  QNÕðxUUK8è ã$,W–Eruú4ˆý( 5ú_< âÏŸFø,¦L&g’t68GŒ†Î7ÀÄÒßpë¬.åp½­:Jò~a:P*ƒ@™*Ë|³dªé’ÎîJÎNó}Á#¾*Vë–›–‰$¬m9øäìÙc¹^\ jXŽÿ1ü 笻Ë$Yß÷åwè½^íöóÕþÇn¿]®¾Ýâ|˜vò•9¡ìH,Œ¦¤Kù‘M®PK ‹˜«2Y»©é¸&lib/jas/src/jas/StringElemValPair.javamSÁŽÚ0½#ñsà(J´=ÂvYD9lUuQWÚ»‰2%±‘=lQÿ½ã$”´[_bÏÌ{žyÏÉ&“á&°.±zUåF‘ó V[Ô5a y©¼‡•è›re4/Ùu° Ž t°X,šä£ \H|´l¾3ø‚ÆÐN*¾–ÕaÔVÕè |jììø¯pò4ÁÓOLúF8äàLçG›…ð±í™zrÄ}K§ðY±z| ,ý£ªÀ÷Ûsöäáéy}ÎñåšÆºvκ[Õ»‡ÑÞ#ô‘mã· µùù[8Át,ÏÅh<7c÷æn²ù PK B%1íº½0F7"lib/jas/src/jas/SyntheticAttr.javaU‘_kÂ0Åß…~‡ƒøP‹´óÕ1˜t>8Ê܈íÍÔ¤$·Õ!ûîË7ÉMÎ9ùå¦È²d€ ´p£³Tƒ5 µ†,)7û­ÜIJ‚`6ÞLÏ¢ãFŒæažá•”’ŸdðÖhûQTõd¬Ô £wê¥_Í0ͧ§E2H­¨öbGøöÑ×òØjîìE.už…ͶÛ@uÖbó4<Ë–ë‰'(:an+)Ëu:üw Ç!(ÂÓáKC‚ "8îß*·S”Ñvå¸#HÇþ䂟(鵬]­>ô”–x¡zP…0P.êº\/™Ž©¿ÇCáÎ2’oݼ«ŽÛŽ7ìˆÐc7FŸ,–«Å¹¢–]'¾› c´¹¹Õò»qßÅ)å;b¡j:GŠˆq#\*Nþá®|ÉàPK –á0g2i‰ŠÙ$lib/jas/src/jas/TableswitchInsn.java}QMkA ½ö?¼ƒ‰1krM(´ôT(ÒÜJ)ò®ì•3Û­?(ýïÕÌ&ÔÍ¡°Ú‘FOÒÓ›ÍjÕ,°Â×貦©S‰!ƒcäD¥{¾€Cœöt …hF?:NµX#NI”-Ë™GJ¤ì.µ!S¸CöS$ìgÌIt¨¥ä\¹Aâ¬-žÌSÚ:Îè†kBŒ¸´*ÚZýž&bÂòC=ï±û)°œ“GN¹T.ù(Å»Ç]{7g7Í¢YŒÔ=Óžq üPb[)&µðH­ÄvU/ 6mtè匧¿ô>…ÀgåÐgÔ jâ9˜>SPñüѤT²‹fñËæbSõF¡WTòðЉŸ¼­ÛóGr¿ѹØÿA=ïŠÑäŸiË;“f¦ú/ò`›èR´¬À¼®Ò8“É>ÆœÅÖœgµsqU xã 7´¬±Fuè¼~¡`„^Ý÷﷥CÕˆc‡wåÿãêÅ^sœ(ô–|ºžõeNÜè Fº¬Ãê˜Ãm-ÿÝ,ìûPK ¼ž8 C³U.lib/jas/src/jas/Var.java¥VMoã6½È˜.rCF®kØÀë9lÐ\FÛÜH¤JRNÒ ÿ½3¤äжd»»£ræqøæÍˆ“Ñèü Fð—Åœ†J<#45(|…IJTÎH´üίÚ€€¼ÖB.¬Ä==‹¢Nj%Jø4ÓÊ:¡Üƒ(üÂÌSãÈQçR8^p…ÕØ;¿¬d¾âwø!Ö¯«Z–h ±h9.ƒµAK±TK ¥|ËÒ"Næ,¯*Éà©+¸¦8õ” ¼ÑѸ~qãïŸañ·¤x/Â䥨áâ;®%?}†«ì*ÌNÎÏÎÏj‘?‹%Çf§ü.«ZçCͤÎFÓí¡ÆÉÒzßæ©¤øaœŸ½.Ø›¯…yyÎÂ씨p V.Ã3xC¼ôôÈú‰û7ELÑ®ý¤å7?I»VMYz›¯LXÎ,{£ë=“{¹TÂ5Œ\îY<O²”îíF)ÍDk剦GÁC§»H5ìä1w”¡%*4ag–MH‡a&I½)ó}â… œ¾ZQ•yôDs¦’–3ôʺòjÞvaºÃE/†lˆpoõ!“Üogþꌙ"ÕS8${Ú4-_y2¸#vYÁ–ª aàEÒ…˜!‡¼l 6‘÷f”TmЬ‹À"Â÷F9YaWp-ð$ðÔÊ„—t’Ëóñ‡Øè¶8ŽÅÆÛIÙ÷=ÞŠ”²Á¾S[æi»ö m^ü0Óu퉖Fòxÿý¥¸Æ»â÷ÁÅu<Ü0:4lW™w­k»£µ–7Â?>„œDϰLƒy3ÿÅšÏÈu^bE­.Yv’o9Û[c»È“ÝšO£5¢PAÝê ÉN—ˆ1£–a`µO†»L¼Ø^÷Xÿ䒷܈N\´§ií,ëW£O“.ט̸ÉÏÕ0®äœÎînV °ËjèÆ¥]Ï1úÅÂí·ùkŽ5KnÌgй1ÚD‚!‡ÌãÞsgLÚ¶Ö…°3‹Ù©HøäuŠ!ëm#8ú\ñngt¿ÞnFVþƒþÃ{Pš÷ååô {íödÖ¶«¥^« ov·e<(ˆ}ó^>[«tËf€¡HcQõídX!=õsjÁ9©ÅrJ-ÁøßåÜáõÃýTACNFGo¿àò*§µÃÇÒâ1(¶înÀG¾d®š M8¢jvëÃIÁRòt¶öOmpþ1œÆ$>‰¤ì ðÕuÇ4Î ]è÷PK  ­9¿òì¤ãŽ-lib/jas/src/jas/VisibilityAnnotationAttr.javaÍUMOÛ@=‰ÿ0EìÙ¥G ¥å@‹©×jcOâ)Î:Ú]'¡ˆÿÞÙõoÒzkWQbÏ÷¼y;Iûýý=èÃwÒ4¢ŠÌ#)k# Õ„1ŠFA B!àt„E45ä•ÐÆT¡v!„, Ñ¬× Æ2%*8??wÊO¢1%ˇî÷¾ ”4f‹ë’³=¶VsTÚ&>ü†s²O'pœƒÓ¦û{û{3‘?ˆ ÂO¡3ûNÓY­ ¿ÎEBuÒÏÖE¡Ê Ù³U”ûª»v‡/ݹYx²¦Àg¨s¢‹;AæEJ‰ÇkÒ*ûu0ŠÙ¬7SµÁÜ0 ÷ œÀÉ"[×T€B]WsŒ.l%—r?µj{0EqqwepÙÜqÖéh ‘KýŽs7UúÙÃNJF™luÖ2!/ŠÂ8ö,JDd’Rè\rý›á쉢u€bv­u²j7c?w¯þñy…@êøÆ§7ŒÔ a¾“z@Ì;­ëœ„EtA¦§8ýè¦xšòÓ`nŠL¬,÷«t uÃ3bOËV…„ÝíÐvŽßR×LÛ_O›]Q0æAÀ®Ã¤i‰ëÌ“§%Yd½ºÈú „Ô³-(MI:±þlá¹¶ø[õ‡Õm:9ºj4_9îK£!KÖ’g¯·¸½?Ï?Óò-èì7HØBâ¸Î.Q«ÙB7ž šöÎ1šFIj[q¼ó@Ó/\ó±BâN?dij¹#›é`Nÿôê½zÛnÞ¼»6¬´…âbƒ…6€ÏÂˆÛÆÌüA1…º1qHU/4\Ý^.sœÙâv¥_*U«Îªkª“qœÄ¥»ç¿a£äu) \¶û2lèÅøJš¨m7Θî¼"–¼*”SnÒÙö!mä~¦ ÀÂJ#¼îê¼*hkÿl×·æÁÚ9þݺïù[çÇÄï‘ØBÓëyFù•ÕcþüPK –á0ój¤ÑÇ.lib/jas/src/jas/jasError.javamAn1 E÷#Íþbe ¶°¡ .'Èä I°@B½{™VÝT²dKÿýo;ûi.„#Û¶i›Uß· zì™##1 q<]l,!Ó Ñy—\¸(L“u0âl „¡«Ú. ùórÒw¦äQû÷©op¾9ÐÍâXœ.ìtwuÚ`½\Ïêª^˜Êà5ßzM¯[æKé™)œû§¥”ÕÖ6/µà‡þåÞxAJ"¶øú8f®ßÈ)3ªõ PK –á0ö3ƒÿÉlib/jas/src/scm/Cell.java}RËŽ£0<‰(qM”ùÄi”ó¬4_`L'ñÆØ^?2Eûïk²ÑN8 CWW—«xþ¼¾âM+NR–…aüÌŽÇǶ,Ê‚KæÞb b4’FRÞá½ÿY·²@:3Û¦sFñÁ¶›Í&²ú“pp'䀞Àv‹>xïÊb3¡Fá ¿‚àg²ð=;Æ^Š´ÎƒŸˆŸ·+Ze® X/)ša‡¾I Lè¥àY]˜¬÷êÊDJ«?ö¿9/´JoSé‡Õœ†` &_:ýÔñbè:¨ åL[&"(úÄGT7ÒÞZmë*¡’ÙHx{ê˜&!¨ð’ýhZüyœ ”óLqÒ‡UÈÝ8ƒõZÈn'’T%éè)r—m û±–|° µÙ1c䵎m£I’wÁX‚6úBÖŠr X~øt¥¸1-³èqè¯p¡Ï½I4³¨¼8uJm§)Î[ö³kÓZÅCÿu9éo'›§CÝÜ¥:_ô«VUM;ý¶þv÷<›e9¼t¨ê¦ú' ¬Qd@òUö˜üð¿ÝZ‰äie" ª¦j¾ |AG®uPî‰]KS|åÁPK –á0uŸ/ìèë lib/jas/src/scm/Env.javaíVMo›0¾WÊxÇ¡"mJ@Ä¡ëªnÚ¦ªÞ&MLâÖdÚ,Êßkc“°5;ì¶(ì÷óyŸÇ††äÏdEAåÕrv6;ƒ7~××@PÑ1Y‹Š e-A¯)´¢ ’o˜X”…v„·D×ÒTeUSK O¤#I«O.l39'JÁèfg[“ô#QkM2N!c¢ÀJ*-çKŸtØ")pò“ñ ä’M‹“š*Z‰á@@Q ‘Ì3‘JÍrø–=Ñ\Ã×›ûO·?>yüp—FOD] Ư˜ÐT £åIÕ$ÍkY@d0D@Ž‘©¤gACƒ(„v´`iàuýÜ6ñæÊj9687¦m_Í5'©våMŽÒ=£ó<æâ25U&ÌsY:Œ1„£¤)Ÿ9œŸc$¼sËЯ„ʤo}>ìo÷™µOT`%Ä™O [°!KVTÇëvƒ»{01a_¾ŽRÖ/ è <äkZÑ;)kG"«Q¨ž[ˆàÆÉƒœ!Ï>7ÚZ)l=×=åŠXã٘㢟ͮyW³ÂH ë…$.,¹xþ³ùwlÞhM«7èÚÙö4zqÔE²¤iûÞcæ}lHôØßçÜB® Z2Aº»I®í°†«Ë³²ß±È=çñÀР¸PÛaw"œƒ˜cHFôUS¼èEßRÎè*ÂQpv…:!• ‘9ØF”jS--x³Àä¬{m¸²ðzî;í¡Ù„À]åcðc ö-y!†÷òoeU1U;¾GVœ)mô…] róê‹Ì\&‡¸OoZ“@ó{Y3Ô©‡3Ùèøm↉Yªæ INäòØÙjÄ‘3ábÆäÝ&ÊÛB3MëC‚{ËOý¶*Føê¢Û¯ñÐ|JèÆ‚YlÐ¥?ö÷Ëÿ³sÉ4¸ñ.&E7óÙó|`\ßꞸTÛÚ“Ø µ Â1.aë –| °}ÒØ&ãŸ>ç+Sƒ`¬×à:k%äs*€€© >BLãü¿°Aí¥\Á9—³„ëÌUjd‰ÊŠZ®Æ>‰t³ ¾† m°•—vÃæýu{ •qG‹ìØêã¡POVA[ Bˆ¡I’¥ëšA ¯kÞ–L%GÄùø-4Ô × Ë—jDü==q.œ°ovr:–ÿšÑfÇãéø‡z »n]Pß,FNgv™ÂßÔm¼æ­¯úÈÞ?èÌK=O2ГUúŽb¶ ÁQT>„ÓœOpÂ4fPÀ‚P&–ÉW)ÐPÅK‹sŽÝ«<‹—HJÊM¢=}riVÐv{k4d&)û,^Eñù†Fä Xò»j0þ¢ÍïEqó¥Èi£ç/PK –á0IÓöþ lib/jas/src/scm/Lambda.java…PÍjÃ0 >/wé%†Ñ>@Ö]Foƒ úŽ£´YÛÈÎÚRöî“ívÉmÆ`#}ú~ä¤:É‚WcSO|6P„2 H0xGVa7–EY(-½‡w9¶¼4‡Ï†ÑiÑíWYÜÊþ9,72gô é0åá`YœMè¥:DNÎéký†ZG¼†ù†^d¡p${ö°»(ta°&Vïf“„¶)Ú_­MLqCu$†-c&­Å#Â-³§Á½:rÌ‘¥ºŠ¨ä%ÚΫ©D?yÕÖ½¥Qj¦„d\$ôZIjfLk»+r§[vÒ 8äú¹:‘‰O*$%7µzP°4˜;ÉŸZ,Vp««—U¶¹z­Äƒï/PK –á0[Ôk²lib/jas/src/scm/Obj.javaŒ;ÂP {K¾Ã–ФNÍË /Àsä˜ qw>€m¦™ÙYô,£aÑkËÄ„kF«Eáýdš<'û+¶U.7IS©i1ˆŽýÄôøà+캺ÂöïÓðû‚nS›³xmñdzPK –á0MÝÔ° æ4lib/jas/src/scm/Procedure.javaí[msÛ6þž™üXé®CôÕ’{m.Ó¹™¦Íûå>B$h1å› P¶ëø¿ß.@‚ J´â(©ï<½ÀîâÙ}ì’*iø'½f„‡ÙÅëW¯_‘=ççäM ü‹ #^Íkšú$,²²¨óˆ”U²¨®Ø$QÅú# ÅëWç§§ÐÿT‹¦ 04ÉYE”rTF¶[V%QÄrÙ} “,É–ñ€üKædÍÈ5ƒ¡T°VE}½‘ÝÿÁ#)~¥Ù:¢±<Àös@©ûж$+S–±\pòûúãëW8±·,Mɺˆî/F&†ØpvCŠ˜°»ð¤È9Ί‹DÔ"ɯ'„rP ÂÏ=x¥qQe4åCCšÑ´ºN.Ð €Ì’Þå[u!ß:f’ $9¹Ý$áF'·¦T1Ä¡k%±;ÁòsOšˆŸÎdKì«Y£Sn9yw²R2xõA5É%­hÆÉŠäuš^ iÿ2˜”B¢r¢ZüÚ‡cðÉ‹[‹=ƒV]cÛñÄôÍC3^¶¥©ûäQ‚ߤ8„&ŽŽ*ÒÈðz_œ€m§e«DúaT¡bv+'&ž©ÃÎбÓk}ì¾°”³*;Ð{ Õ啪qL¡Ä¦EܰëqRìgôO&m‰A;#·‰ØZBäç!æ& Y'ydƒÅáˆZ–‡iÁá»’9IB³Ò90}¥3¨¨u•¯á] XŸ¼†Òz…ý£"2€ÞÀ-ì€âÛÊd©û&Ó0€¡—\äÔeÔ F÷é·gÚ’"r“ÞCo¶éÑWjÛA_¥{9¨‹NJ5ÃàU1WÍékBͳ‘= ÒÖMð®ý\©×iJH¤d¹ìIåÊrªWá¶ŽwUUTÞì-ͅ£ÛvH”T°*§÷3e”!úJT§¢P<ßðckÓl™ªLow—dF~€kc'nëQÛn Vw;*Ù0 ïvwþ)‚íô¶vÍ*./.Ã"b—Äû/Ïñeá“å¹¼joªiÍ›°Û»Ã~N˜ãØtn,õzÝ6ÚÆÂdõéƒ,ÉÒ¸b¥çyÍ'?ûA^g¶qm!¯ùÃ8™æÌïJè»Ë™éºû«z-* øÞ{ ó÷Iþò@óœ gˆÐêïëT$€‡;äO÷‡< xièŸ>+ú~”l“ˆ¹Á?ßþ?“íKÃþü9±xGâþçDÜ&œ‘¢Âó¬ÿOûñÿ½ú[Ãßß5=¦ê{ï©Ø¦ºCïø>ùdmµ»µî;ÜE5JÿÔe@>ÖøÁÁ3„Ó{•äj Ä»© ÙYƒ²yuI¨êçôé[z§ªd/+Ámr´?æÝ è‹­S¡4Q„aÆ†ï ˜$ÏeÂ3¼h ¼Rf¹ ‰˜fzÙ7ÿYÜ®À5üÞÊC§Ã … š‡ 2Ê4C:ÖA¼æj&­³^6jÉšF8Rܗ̰òÂV\—Ù+öOœ¥‰×Ì&]ƒõ„±KlR¶LÖT@š’c¡|Õ®þ¢2Œ]‚!6«þwÂâ@ÉßÒÊÛž]]Ѥ…·øª„š„méZ1ÆLå+ô=QL+ÒH³õîþ¯™`_1±=Ιè›Xè‘—@+9/F*.£ñ9…öº7@<ÂEê5ÁPUeÇÁ… lμÅG;7§2ê5%çaÍØºâúÃ’öÍp+í¦YÒJtCå]I;Lö%ÀSCÚCÞâgýR5BÑôXá(„ŸxM³AMyºœhc‘ºõjøOÓ¨vØK+–¹€ñž:̪ž~—u&6}uX?t£Õ‡AP[#G@UˆSå¸$¯YOÀþRà¶Ãtó$MÏ`ÕÇR¸œ:Í£I"]‚>*R‚8æ[®kÙ†#Úéw¸õϲúÖË““„h„Åyý¨ÎŽ6M«³_åÔoM¶[)tc‚ nâª;«²MG–î«>Xɘ1bDkÛ«ífnwM ‡|ÿ}çE£´£Fø¹Wè€m´¨>Ïá\ô ëȳ´üù+ãüë8tïF¹lžOÀG?JšÈ²#H¨¥U½í¹ ƒù®8˜Û0ב0·BÁ}—ºÓ³Ø¥gaëYh=‹A‘ѧyvŸŒ¢¡–:›Ï‚®U~¢µ»¢Ù4äD[âèy˜Q¦kVq,H"œ–iú45U²2«­œöÎD©ævà@^-]¤Üá)*ö’êòÿ¤:”TS ;:©\FHªË¯FªK© 8Ç—Á=ìw7ßä1ä¥P¥wˆPÅycrîûÃÒì3nÃkˆäJÏhäÑ u £ p×Sf[÷ç&QµŸ¢¸è¶ÅÇcIK?µØI×Õj?_µ\jÏaV:4ý±À] ØMMS>l_¨öƒ­3‡áWûÉ%G:Kb•½ùµwþíë^œ2†ìãaÅk¿ù>­}6?þÓ0ç@†w?D8òlÓyÚRb<õ_PK –á0Ä<Üœn¯ lib/jas/src/scm/SchemeError.java+HLÎNLOU(Nεæåâå*(MÊÉLVHÎI,.VNÎHÍMu-*Ê/RH­(IÍK)V*Í+É V$§”dæç)Tór)T#’ MgqiA*m QV ²‡úà’¢Ì¼t…bd}ÅHPK –á0ר¢áÀjlib/jas/src/scm/Selfrep.java]OK Â0Ýz‡‡«Á\ºÕ…'hë´FÓòqS¼»I¦ZB˜Ìûƶý£ ¾Ÿd]ÕU¯[ïq!=8²P“Õ4‘ çî^W3.Á)3âÕj‰ë3vš`b–6½TŸ‰ „‹£yÌp¢37å%Þ9ß±z4y=ÃGKN4²ÐwiCIÈ‘eÔº˜¬K%ÿoÀ‚5ré·ÐÓÁ²|j€(2jx‹ïÄæ§ŽÜlKgÉŒΞŒ'#ÆS~:PK –á0p6qñüÜlib/jas/src/scm/Symbol.java]KnÄ †÷‘r‡ U•  YVꮋ9‰Ü 3„D`RU£Þ½<ò¨*±ÛŸý™E=Â0©¶1Ó2{Æ]¯º‹ll÷’‚m3X®ßS?[¤K9øèïmól °f3à]‡ëÞŒcò.ãG_gFH•+{ãF8=Q}—æb ‰gÉ%:(üd‰cÈîQ&œD®(.{3xbUIÀ|B_tDMËC±‰E—ä­•Iíà6Á Õ¹[·Ä¾æ*Y,3”Ñ»m8v÷%ö6¹§­ÚŠ7·‚ªóNPgçùÁ7¤úGn{ò\/âï¾µÈ&÷¡éüPK –á0–]NT0-$lib/jas/src/scm/autogen/autogen.javaíZmOä¶þŽÄð¦R•t Ël¿í,·Bt{…Ôí¢KÕ/0ªLⳉ“›8,”òßï9vâØgli÷¶i—øåŸwûq†ÍÏË—äßL°ŠJF.²†‘¤HÙöÖöÏË¢’äŠ^Ó˜ñ7 ·«‘W%2/û)«¢"!–ïï-ã8*Θ¸—Ð?›Ez¾q†—?_‘ÄØ'¢É²ˆÜi=”ÝO’K0ÖÛª*ªð,z&ö3ëãJÛ¼d ˜wt¶OZ2óÏÐ8òרOî ¼ª€•Àž¡ŒZ½ØWú|§1»¦Y¸Š^cßBYúÓJ۴父p/cö߆fuè´ "´†40óß÷Ô,«™b1Σ¾„‚,~ÿÝ£ñ8(ùª¬PòZÏ+ð*+èS–N‹æÿ <ð`MCHñ0gò²H½àÑX¼v6 ¡{î;̽zˆ¦ZCÑŸ9b£Øçõ+ZÇÿi„ä9;,TÞȺEXø:d/3b‰útyº$ûzMÏ•žÇ§ï¨àe“!þÓr0qm,bœýÁÞÁáqp¿} Õ®šºKÓ4)ŽÁÛáñ‘d9LñSÿB+ùг,mü ÞÇ轫ƒAYµ¢I'ÑiOgS3©^pÞÕäÇ‘×MÉ*›Ç vlf¤ÏÄðÒ°·CÈæ)+|×8Kµz^¾g`ž­]ÞéÆfaÖ£IÂ\Ãèž1F­ M¥½„æÑQi’ü}#˦ÙCn …ã<ý‚\&úAšBÝñjHoØZøZ÷BX¦¸ÚÌF˶65xºv®! °”µ¾íö#Q KsÑñ½]¨×Â5¡E=t(’CµH>ìÖü7ãì8ÁöcØ\ÓÊfi½‘Å!t#)"+ÃÈv“¾¿ /{"ÚsÚå“ãÔž©mUg%Õz+duÛËL´<»L ´þm'iN÷-dvk.îUþš{çäBN?€ÿê„óݶ``C…Ø ð-…J?Å ó-nE»(_Gÿtü í‡Xø˜©2Ý1Ruú)\Lµî8™rýnºÀu¬t…ðÁ wù VÙ‹Cs@¢o,ͱm4ÇÆ€@¡ÿ~>6»é?Âû`v{ÉÐÏ×Å÷ªõPXÔª££Ñó½@ÿ?ž!ÚÄñl¿?[isl"RYl°Põ»ÖõÛ[Ò7gôœeÊ~êÅš;Ì ÖnÊÝæáŸ ÕÈÙT½³L…Ýsm–ë%¥¯\^?ºjØ/®mÝÊã(7”aÔD4ç"QQ ×·‚cgnp—S@N´ª¨ZäêÁÖC´\\˜sÎ:r»]™lÓmµT·ç9å"ìïb®Ûëzs¡|ôÞì¨í•º¶ïÛ¹€-¿êŠ-QhÐW_˜~ೃ- ðÚý(cĹZ×Ìúcy Û!½`x¬p&Ìo ëø›L ©ô¡¹[âLÜ!̰õ^ñ,ã2Ä tõ¿@›´½™ß=ªÖVÈ«¾­á¤¯›'-8ÞòN· îõÀ,Èä±F1`îFßß¼QwCfûä•ïZÞü¸P–­äæ•zs½™Í—§{Ëb5ç}siƒ\YÆú ê` Æâ”­¸`p˜ Onóó"‹U<‹‘û[Z#R{%°£¤Öc¦ÎaèþRcêGX<ÄÖE>ú­îр߉ž'æX泟F´&¬æ¼o.ŸÃÏÎÊñ³#£ÇÏ0âÆÿC `èL¸ÿPK 5¬1@&„_þlib/jas/src/scm/driver.java¥Xëo9ÿ|•ú?¸ý’]ZÒ'¤¡ 4¤"RIzIàt T9^'1õÚËÚ› ÿûí}æAwï¢J]ÏÌo^&wxA‘"açðàð€…‘Œ5ú‚W¸ÍdûI§JJ4ãU¢j¡YH{R(…VVáX)ÄlEcœ†xhSøðàáð!hFÐ[¬–Ï8ø³"„¢dÆ“ ¬$ Pˆ™ð&:fbp¼X}úìI„ô2–÷ õ¿i&…¡>8V*ÎÄœq:Ä!=E2ÑÙ “ QNåì»ñ[D6ÃcsäcmNÅB/ÑÅ:OÍZ¶ˆÐô~S‰gh—É|NcŒ)RÒ@D‰v²)u²Vš†m&|ßïdšÏÎök.©8åŠf@ +üû?žZ*’\!áD® ¯%¶MܧóϾ¿#´b¸ÓË2û1óFæ1Š Q;¦ŠêÉZhüÍË3ô{½%ޕ׭SÔúÞÚÃíîÇ}Ü#Ã=ÚÇ}m¸¯÷qo ÷v÷÷g¢ôdzSôìùóŠÈ’iª"L¨<%¨¢äk"µez­ã ƒÈÐ,QÇêTX¨¢Ã$œQPYfPÉj‚ÍåìÍ1”`‘ã¾X¡—3ÌÓ‚W°«Ð9t…ME‡3É¡¢5…wìÇþ©Å¾±#/¯ ÇÐ0µGvBµ‘¨å8œ8C_ÛQ}´ÍqþË êc Ž3d¯‰Ç$(pAtâßA ÔGŠ$|!¡¬nÌ©mã9Øuõø(– ‘¡oÌ >6ÄQirÞÙQ}ôIn•' ’ü4·ÇDÜ“—p]v–/6¶ªú‘¡F ò2_]T©Sø*LÆ´Ž~Í˦ÿ5ÅeèW?ØT‚ð$ æ´Ø÷íš`.qÍ‘âÈSÏaLÈSwú¿÷˜r½ÏcyÝ^ïöæýåõ W;'֜ѰmWumŒºÓ~C#Љ¦A3£i¿7í¿idÈë[™L»Ó† æõ-\ †Ýëf1¬“¬9þ4È×äŸaïíx4|l˜²•ä3Þ >Œ®!k×ÍJ@ÇX('Œúv¦ãîp2è§ ˆfÕ š!Äò¡Y,ö{§¬úVÃi|Õí53„g°ãaÒ gÝË ¤­×,ef[%z5Y7ãAozuS:Pÿê}ð&áÜôAœh‰TкNàú©SÐÎ@0݆kgÚsž×6=áÀöZh7„ ïÑ\ÆHFDTeçVm·þ_˜/sTéµ.Í™yF]œw{™ÊÃçÉI~é{(¼R÷L“¥Çü²£å¤ÃNü¢É#s“9÷‰}Þ;1ÙÏÝÜ”¸ÉBoŠ»–ù¬¨œ1A^ìä„à"à Ç1^ï–±÷sðn&VpyË—È‹Z“§"J6µ˜s{WUà .rw•€~fƒŸ5+„Ÿ”0wâÜ1—æ^#è7mo ^9…£ÙD fÀ‘¤ @¢2Û¼t¨ttZaÒ†‰åy-N[‘^»^2eT¬e‚î±!ÈŠ¤¢d(W0I ɹ幊3™3éSLtö{¡¹9…3ØÅ:»Àæa„´µtGn¯T[iDpõäÔ¬š¨­õ:¢&f0ÞöGWN<¨ô1Çä3Ë厧—ê£Î`´ëYÇÕaÉêöê´uÙòZ¥:Œ©NbamÃÕf¹2“à—Ö×É’†´Ç2öŽßCDöXƒ—€²ÚJIÝ^õ%ÓZÞU ÿÜNQBÓ,üüYÚ]Ò¦DŠÙ‚R˜ýÌAÏÖMÞzÕ>­—¼ò8ÝH¤ÿ«¹6Aï‹"õÖ‰ê}^¦55|ÿî²?ö·2[Þ¨lÜ+»ìв½ÿßlë«vd#ªVnSzT¡)ûÃß2Ç ¡y>k×íñFÝfO¥?ýÑ¡O ´#<Ý$<Ù$œm~l^n^mû¸‘6×4ÚàhBGsÏ#Kû¥à+;U5í%ôøb´ïUˆúñVŸÊW ÎÊþþPK –á0þTO¯Wlib/jas/src/scm/primnode.javaŽA‚0E÷$Üá/qƒ .Y»ðC™`±-M[0†xw[h‚;íjòûß›±$40¼ÐMY”~¼ó­dý¬(0ŽL?iŒ´„"ïÿr¨á'ÂËro,¬“ÚL=Cj«X³ ×n,‹5iãÄ"`!•oµs§¤H98¦Ukð +‡Ù„»ô Þ¹œÝUÖÄO3¤rjÕÇeÏb×ß‚‹)´ÕׂHÕG¾ûPK –á0ƒjÀa¦‚ lib/jas/src/scm/procinfo.class¥VksU~v“6§!ÜR N[…M¯€‚JÚ"—"U(Õ" ¨°M6íâfwÙlZJA*""xïŽ3|±ŽŒ::P˜aü""úøâÀý ^Þ³Ù¤éÅŒ£;“sö½=ïó¾ç²¹ýçµ  ï„GgÖá 1<)†m!l£ ]bÞBwèÂSbx:Œìdx†aó Ï1ìfØÃ°W˜ŸgxáE†}aì‡ÊÐË`H2h )†>†~áÃK CšÁd°l†ƒ C†ÁeÈ2 0 2bb8,ò3a8Êð2Ã1†ã ¯„p"„“*¨ê>SMk¢Û„Ðb¨f_Këèf_\Ë$Ò¾}¦ç«›ö>wÈ&¹rïtå­º©»íÖ)SÍS5Ó`ÄvIn²’”bö6ÝÔº²é^ÍÙ©ö¤)tt—æ…>ºnµtS”K±ššöbÃ=VÖIh[táQ³®Õ§™ÍÂ;‚ ‰ m´‹a=“02ƒÙTJs$,kiÙ‹ÖÕÕ’¼wˆÛŽ•ÐÍ”Å-“Gð*NI˜åÅg]ÝhÙLnBûZ§ñzg"xg©Í CÍd8õRB×¹š™ÌðnÂÒ’YGãzÚ6´´fº¾£÷@xXÂ.Þ¸jÛÆ²I3 ®:}™FÞaðT,̹ÛïXƒÞq(¡Ù®n™¤Ó"rz<—·y1´&¡pnÚ&±QˆzŠ+äÒÆÍ¬aÄøp›Ú ïIô™DZ¥–Èa[K7QÚ›´*7ëÑ­ÅùQ k"SJÅmN¨NM›»ÞšµÕPR±uB÷ˆ‘>éˆÝ’ëxç"8·h}3ý–ãJК’”2,•æò¤•õ–?hXfŸ„íù ‘´&_Äò弯ÓèfÆUÍ„f¥xf¤ÍŽ•,qq¡D•çñ”åˆ2y±ð«œ%²úf2IXáÕ›¶óÕ*J>)cÍTu®d ­yÂÿŸŸé‡b~A.&TP¢]S&Ñ¡ÀQéú÷½³=mÒA,MnF9:}ÅÌZK䢧€ŸoW¬8»„%¥Gýö€×+"fZàüBTFÄne3­«B/«"x[ѲÆ\ûªbq:JŽæfÓC"-þ"ÎmÚƒz"¿\+÷¢Äĉ ž~ŒRÛJ•‡êÚý]#Ñå¯ sÆo:‘Ô6Ú늸¶Êé¬Óµ@Çsš‹36E•»¤â“Üs¥ÜYž·„yÊT?ò¨œæb¥‚l!&uh:~TÀb¥³DÞ9“-T±v0«™IˆùöКx9Áéèó qwC<íþL782ý6`#$lò|dižWR}ãeÈõ —¨oºŒà·¤—°™Æùô݆Èó0}ª‡1 GP‰£¤ëÀ–Rà8YÉKþ½á:Êv_Ay44vôÃŒ1DÆ0³`œEÆúKiŠÎ¦Á7Gçxã\oŒÒh•¢*sQ5/÷¼1†ªèü"ˆ4 CõêèÂ1Ü÷X mݾj©>FÜ—{R“/-ñ¤e¾TíIs}ii*HPeemK.ŠŽÞòû)žE^·€Dì²"²œ†êà~AµfœjÞ³VX…­®`•–Ì÷=Ph¹ß“êÕÂwEV™ Ž'ÁÕBh}Q’† þ%S6Mðmþ(ÿ@¼e‚ze!n$ U{ká{ŒUE[juÞõÁ²µÁQŒ÷ò!2T ;g JUÁÒ_w¢k¼ ´¶˜ÙÃE=R´Ë¥qü„œ “œD5FèL¢óu[q]8Kÿ*ÏáÞ¥?ïãC|€;ø¿âSÜÅg´a.Hõø\Ú‚/¤N|)eðtßI_ã’tWåFÜ“8+ÛøA>›ò{øQþŠæk¸%Ÿä›¸-ßÅÏòoø…˜<îíÇ­á¿PK –á0UÝc*Á^$lib/jas/src/scm/scmOutputStream.java…O1nÃ0 Üè7Æâx+š™2ä¬L'jmI¨8@п×t—¦CC xäyÀÿѶ(~J#cΔgPŽ5ôÖéÌ(nê´_NÆ,ø +í|ÜmWÐTŠ®Wöieƒo¡/PÙßkîúäŸõÍR|8#‘\šrÉq.8÷7ÇI_UüŽR»›À3^ê0pæþAHêç\e›¦Ã—5K~PK –á0 è&î0 lib/jas/src/scm/typeinfo.class¥VëoUÿÝÝm÷vÙ–²¥åÑ×mÁ2Û–+é K)Z,¥Z@ L·³í”Ù™ev¶¥¾Å÷û1F?5ñ› ”( 1ñ‹1ñ_ÐÏ~ИhübDÏÙÝn6>&™3sÏùs~çÞ{îÌ7w¾¸ ?¶ãƒz0X„n”bHŠCA ‡P€Aއåó‘ FB( –âHGñ(Çc£Ç8Žs<ÎñÇ Ž“qŠCå㈅0#Î1Á1É¡sLqœæ08&‡Å‘ä8Ãas¤8Ž4Ç4Ç ÇYŽYŽ'9Îqœç¸ÀñÇÓ2û3Ïr<Çq‘ãÇeŽç9^âJ/2ðT,qÒTCdpJV[ ÕœhqlÝœèd(’º  Ø}×ÍäIg6Iã²ã+yvé¦îô0t(ËÍË5+ĈeôYã”bí njCéĘfVÇ ÒÌØºCÏ™èºÕ:L^ùjjÂõ Xi;¦í×%>¬¦kB3[$:Œ}x)Œ=¸?Œ^)ö¢¡b)ƒ½éx\³j[[{=oÍVm\ŒÍ YºnÆ-a™"Œ—ñ C‰ëŸvt£uÁ¤öÕ0^ÃëA¼Æ›x‹¦1f¨©” Éf¨ÚYG3ÇSbضbÚxÚÖ„žHZB3”846ÅÀÎ1ìò]¨É¤1«ôi†!T{"Õ,úÍi†„p&mk&%úÏÆ´¤£[&©È-"èráŽèv]hQŠ¥RFN"Iãf9ÖãB!L·0ӆ缀ÂÔfÄHl’èôÛ¶e+õDŸ('µ±“ŽMë"§]ÂõÑNq¡]F¤à”SqZbª]×í†ÝãZ´iÕPâÑ©ët™‘~Ü–ûÅ›ó Þ ã]¼G+œš´l‡ÁO«JÁ°Ì RÆ K¥aḕv÷ÁÁlŠLZ—-¢¡AÔ¹ÝL9ªÓ¬¸ÑŒ¸­%£«–X™+Q#·lY¦ØBé3U–Ȭ3™¶¹õ&’Ùj%›”ѪÚ+™¡+Køÿó3݆ÈçÁåÃ%¤ê£ÊAÕ™l±­´9®,aF1¢Q¢U]ÉB†¡>ÁI[O˜Ô¯«W°&¯jÒ|ú]«ä¢+?;§Ñüì U«'ŽdÖ(x"}V œ]­*ÉÈÖœ´mº!³HE¨?•0Þ—  vÐþhöf>HsJmH;e³IÚ©z,»]Ë{Q¢²}ˆo&ºRßE3ÜÒ“ÙbŒnž=eJ'ê_š>j Ežr…t0Ð)B½¼Â9]¦òδÎ%p/äjpžåͰ^YŽ#DÙ ç0””#Ãd(_‰P© ¬’·t©…*ÖΤU#µ$b¶„c´ nNú4÷ôÙ†<ê!¯ÞÌ“|’>º÷¡ ûé­‹Æz®o¼ ÖØt¾Ææð7n¿Àg¤gx€d}¬bB–Ð'~-ÉR”aéÄ€ÉÿY å?Ðt £7Q ΃ßB½‡æ±fáyçŒ%dl¼?="kIdÌ‘RW®seÄ•e$ý=s>5ç»ÞóõIßrï=p{‘ y6’”†ê¶È¦yl¾ îïžÃ‘Œª’T×P›U¹£u™Qµ¼!£ªY¨õ…((è®úTN.+†wÉ™¯¥{2£›ÌÑy´ëHTNIÒõ ¤³È-Ò*m[s¶9v"g¾+/PÃJª£'ß–™¢ê6é dcG©2á×çÚ”çúyε9äöEø–Uko]„Ýñ£ü ñ»©Ûr~—ü¬ÚÝEŸüña.Æ=y[tgz¯ »Š¢¦H;í9Ôä\v¬<@™<ì¥+xqÿü®)rŸ»1wçóìÈ«¯3o÷v‘\è¿kh ¹ÕØD»™:¹’:¯ C¤9ŒŒRß_ÆVú?iÀG؆¯Å·hÄhÂOôÿ3ZY)ÚXv±£ØÍFÑÅ.¢—]¡_À¯0À~Ç»ƒa_;ŽøÎã˜ï:j|_bÌ÷=4ߘðý‚IÿLø7B÷×`Ê¿§ý}0üHÃî©òPè/PK –á0Ñe!dk³lib/jas/tests/READMEuRËNÄ0 ¼ç+æ‚ÄJ%ÜáÄqOpàÜÔÛÒ¤Š]`ÿ§ ‚å!UJãŒÇ3¶§(° JUQöÛ“Äáíª,j¬œ üÆ5Daèĸ{ػڃƒæ…b¢>±%lÏOdÁ<@ÂŒ…Â3,{m5sQ„2/‰•Ñå#f¦,Þ9JÉ?´F–VUË&ÝÜÎ&ìƒÞ´p42ÊFÎ\IcA.—ŒOu”‰,%sRy¬,â· Ç©¢`(,NÊÌ:5‰³9ªúUq(u+ûÍiîsàí‚*o>£UíŒßQnZÞ.ÃïoѼ\ÙåÔðëÏœžšº[„y9Wý=‹í~ñ65~¨ñ…빜íõ/ÒŸásn@_tjV…¿f'æ,k:v8–u³kÓK±>L´°Ç½%ÔW[™ÎͶ 6å¶eëhn–b[×Zƹ¬ã„Õ²µÚ`6xäÈêØˆovîPK –á0Lj*¯ lib/jas/tests/all.jasÝVK›0¾GÊ@œà@^UO½¶•"Uݪ[íu51“¬°‘m’¦êï`³@ˆCت§¢(ûûæ=G)n¹À ?'(ŽA”ÖÖÕwO'ÓI´]¯A𲢇Í8Oªåp[n@…ëÇíXÎŽ0Ï@ìæ_Ë|ƒ£è©,7Zþj¶"L'5eË1KûÏÚ`¡, ý±;\ο).Ì£Qù‡1öl3 fŒ95ž¤ã•cŒ2¿b¨-0ì»ð½(d¾*ýGñÓ“3)voП£y‘WñûñB!JG«n¤ È11ç¢öF§[ú5 °¢6{dfTôµ¡tíQŠM¾·"è+Æ’‚ гëŠÖ2ǵ0OUY_ï®«Åø­ú¢ß]•Õ«6`8ó( Þ„Œô‡±%zõ»†’BOu-3Jðµ…M=è˦Äzb4ûrS„f¹ÂB­=T]¨†ùýjðH¡èa+¡ «=¸‚ú!R{Ì1™b´[‘ôá"£E‹ShJ%î€@©0xæú6˜ág®(_ö#¼CÛk5Ä[ï41­Q TéóuÃfe){>ù;Ð5á0sÁ‚U¬qmÛ'ââ(ØT°3fÌËîxóg¬Ì 'P ÎCB?Ú‰äÚtäó®›:f6¯âÁ°Sõ[²Ë-S‘uîƒÝêæÛå3Äê”Â?€ ïÓO†…áRtªæ¿÷Y)©:þÒYÖI}S‚äöEФ`‡Dó_-d¹X\@Ž ¼€ÎMÏÆ»¶_ƒß˜Ò¬TI¸Â÷½¡ëÒú¡›Á¿’r“ëK§»~´Õ÷´‡ÿ €æNRx ­éscsàLr»ÎÃËuRÜô†,]6‹Òh{½ìÉ™eÔþ{uLþPK –á0k˜êòlib/jas/tests/all.javaÕMoÛ6ô<ÿ B'ypÛiºC±ƒë6ƒ4 欗 hв™P¤ARNÜ®ÿ}ï‘’l9–­½,héñ}‹„ÿ9;#3‘­ä†8³éœ@Fl§ eŒ[K¨%YΖD§­è–œŒo§HµÒÖŠ¹äýNDkãÈ#µýßßï¼®i_h›«¾ÓZÚ¾?û;WNd|¢•uT9 ¤«|.#LRTMJ‚VñŒÃ)ÙGï| €8ø³Ö"!*ž9#Ô‚P³XßízÓÜÒègK>½0¾rB+~÷”öI­ #ÅŸ+@Ü•Zxeœ$(lrK¦Žg–$Âpæä&³>M’É-ÅÈ}l™“Û8Jó95Q„BóJ úêLRµ8»Î³9o¦ø¨ÁHFýAÎ¥à2©sm,œF½£–F:w§P®5½ /Ôı]BËè’ñdòpûχ«é¤ÑøZQYqÈ…5VV;Šé1Ä\Êš;*o•ügwã»âñrz=¾j©H*• û/Q;vʱsf¯††Xh-[ÛdÉÙ)™FQVÚNìªêkj]UåÎcÖi _L;Yx³|ª¿FÞOÞ:•Gû9w ŸÚz LY¦v S^ѹ^ŽZœ`¼iÉ$ C؆Îmr >¡*!ŠÚö[s­Kª"xh“ŸUE–Àƒ^±Ã]nT·!ZqµmySë´á=rñ“ìávgá–ð _ˆ»’’ ›"¹ (­ÂáˆÓ @¯Ýؾÿzç—™U]Ý9ÚóæÙè®ÊÊû­’ï?Í>_0ï?G—Œµïg“ÙõøÃÇ›{=9ŸŽ¦ßìÇñÍx:º¶wçד úøb|s?~ÿZž4ï_Ë»ïÏo/¿Ùó·×·Ó;ù?Wü¿úâÝMÇúã§·Øh–Ì3g‹•½(òÚåu……è›÷× Çõÿ¡Föfôyüo'³Û‹7'öÓt|E‹ßé—‚r¤ËȲü#–þ§xÝ·ñºoO>Ü•.Ùxáíc/ý¿ôËɇÙxúùÞŽn.íÅíÍåd6¹½¹·W·SúõîÛäæãÀ^NîgÓÉù¾2ÿ„'?ß^N®&#|òâf¿Æ›ýzòáSñdëÂŽv»logW9;så¶Â‡ßЦ´7îÉ^§ó2)SWµXx 4è¿…aF©ß…‘ý£øUÂm¿¸²J‹Ü¾ØorgßüéOoè þ¢ØíËt½©íéÅa¯Jçì}±ªŸ’ÒÙ«¢É—IM¯ì$_ Í¿ü‰Î´Ý—ÜeÉÂÙWö¾Ikgùåç=/ªO~YûóÛ7oÞ¼zóËÏÿ:°÷#3~tå¾ íÓÊî+i]»%0³ l’/í2­ê27´=;§]·ø’Peˆ#ë ½˜¥ —Z—Å¢Ù,=n›$_§ùÚ¦5VÏ‹Ú&YV<¹åИÿœáEú§Þ8»J˪¶¥Ë\RÑîŠ^ÞÑê ÍÞ~¼»Z;ÁbÆæÍvîJzø­»EÒÐî´Íºp•}JëMXã­_¥(—iî—ù¯ d‡„}Û#l‡Á[òÍ2>weWEi·„e[y áÿKW¥ë\ÐY'ßéçdo÷`¹‘sYléSmøyÂ4# çÚó=á8¯Ë¤"d|°×G—»2Éì]3§‰euw¼ŸB1,ÝÒÐ^ë&)úÝõ÷²{á»ô«WôÈ€VMé ¶ ç!Jñ³8)Q‘€¬,!½¬†Š– àkOµ£@lBâH<ÄP[Úiç)­¼7‚¶|ø×¸|Z#É÷¶ }Ke°çÓ¦ ¶HšzS”Qc‘.žfBøí"Éõw>#,¬@') 9à×Ë탙|Ou07ÀW±t+W–`zÚG?`Öß•tò¡½mJócž ¤ „&5`³›äщÈÈÚ w$ "—àÙS%y¹ ²Ôõik›®°´yJ«Í٠ݪt —>b‘¦\`é%„ˆ¶v5 5¿hŸˆ×è×öUƒg”Á:LD¯×ãB Ä"¹ÍIÿ2¼»²X—ɶz'T¥å 6øž“ß+±–Ö¬°2¡Ù³_wk·¨…‚¬<+¦Jî"d–¨Z€…*—°1O—`(AÇ¥ËYFuY ƒÉªïòU²”¸’O(O պĻ’á¼Êˆ›Y©º²NèÄôÄŽ¾Lçi–Ö©*¬¬(=FRéÂÒg·Å2]íÁÐŒŠ+úÆýžÀ ^ZÎv–{Ú8Bòq "“Ø•£Ux—†´Û:Uî#ÞHiòDX´(¤Ú×`Tz‘¥ÌðÛ=v¦—ö,`ƒÀj{ ßÎÚ‰pi–æßmâ9Et}ç$Xzä¿(€ :z1ÿd•f¬vLï UÑÂÅ`=Âfôû±}’UMø¢3avVf±ÅÓÑ™ áÐŽè³cµo‚ ”§á—†„€`¾§ŸRÏÐBaR!vKä*– £ò=–XŸAóD|Z»]õg{úæŒ-ºxñA €<}{Fk‘êRÎlúÓ&]l˜ò™¹5©.v*¶°ê+ LÄe´æk6‰ÌšÑvr‚QVÕÁó.¡ÅËEùS…‰µ‹—_/?L(§®‹i ‡UM›V„b²ò‚Þ/a ÷­ÞcUãá_Eðúž¡NIkÌ÷lš \V‰ÝÜ%\”8˜ÂˆVΈ$ŽbÍ­nø#)9G„JõTaÊ ärJv½,–Í‚,û\-<:,Dæ&Oƒ ñšjó~¢vMÍ&S™ç ßgà_Ú%Vºâ‹‘¯C~¼`´&—™Ñ |—pü1´_ ÖŠEºäý—‚RN®Orèš@^ðh×.á &Í—)Ij¸HH™À²Op°`[ Ã:âR:0kU¢è–Mí&œ‚«Ù¹u5dÐïEÊ_Ó€Ÿˆ˜€L•m²d`Aþgh`Ôypö–·Ê{?);Á¬ÑÇ Ix.aWÐþÎ!|¸ÖcHóEÖ,?û?‘ÓA”XìÝÎ÷=çõæá÷a ’ú”T­P ïddöÁ¸ÂJEΚñÞå?à°y1Œ<µþ°ã â,çH„dŠô º*‹m÷T„Èw@±‡‚¸6YAˆ˜vÕd™8yË"ÿ‰0ZUb"±¾ƒ­FBß'Ì,ñ&F!ïv©Š?åäA#Ò!vUË-®È¡PÙSA8ô*|Ö tväíÎXmEŽ@¤"Ni'°Œ$äIµµ¤†îíÓ„cÁ0(&6sHüQ"yýC!ú…à‰æqéR0„‰3>‚$rSxÙ å©,yú³Š¯d?ø-†ŸUÎôþE¼2‰yé ‡d›Ð¦ä Q&Vˆž! E®%ý 8Õ„ª%Q‘C¦$×ì)Ù‚&Y“¤Ÿ~"ÅAÊyŽAX°}U7ûYJ6V¿ÎÏ›“œ“áÓóä¾M율Öâã j%œãDª„0[ïðCœk—´K÷¬t ¸ÊW±´éŸ8©ò ©+ùÆð7>¿MK7È!,Tu1 5ÑTLcŠB Ò‰À'+Ÿö4%yÛÁùËkﺗ>‚Ã’‚hŠ?•i-zœ4ìWÍ…-gdÍ »ùœNXk‰ªN¾ñgê: ú¼ÁóÃŽi{™6T%`L~ ×;ÔO•9ÊíIÕIèC{àøÄÇ[·L›íÀçJ—Q Ÿ°½K €™€A žÓ*Äõ\`³ª ðÁ9<…6~ªÕyFͬžf‘%éV\fŸ{g¿;·ƒ0Ǽ`Êkêd²F0ìÆE¶_Ë?ì¸Î+öëcÐÙÚ¥{HL0ÓZc])+ˆ‚Ëu‹] ‰”P8/® E"öf_‘ˆe^<$7¥e ÙL˜xÅ*‰V)ŠÊ9¯!OÙæ?9ßõ»¯Ô±Z£}»œóöçhÚ•÷`ºˆ}È09~d»¦…sm>¹ö‚¬ ÔU>ó¿,Ú]íìMñ§è^û†HH``ØÑ²K´uNxCNQ¹(Lø³yÿϯ^IÖEãeAè 옋áæ ùL5G[M^ÌSäD’ÖíÊ»ýV %Jr;­®M.‹ÁCn‘´œËVp®’f(‹Ý]{~Ö£=V“¬TÕaÀ†0;Äc’sHs¨G,æe Á·YQ.|·Œ–òÉ•%„[¥LžzÌÅË`>‘“í:^<Í(ª€zñƒ»Â"-‘/Ù>ïlkÚï—„“Ä,YHšK}™€D/8‘ó|Y^’¥´öý:ìGËqª†c2DOöÝ宵àÕ<ƒØÚ#çc¾æ^ _‘xBši`?ä¡x±O„Ò'%». ò±h=·"™çZ !Ì—é’8Oä”1ôlý8OÑp‡ Ë¾Ç NA6²äãCâ£ø¸¼B¾TòÁ”" ÅôÅD"×”»‚ ¬[ŽßàÆÏ®šlhO㧬×BÁÖ> Œa&YOý½áª}QhÉ, {xëôAI—|rYöŠý<öü‚£áÙ7 {LÄ&rý÷Í\uŽ}‹’àßZ³RªhÉ'z÷U`–<Š é=·ð5HÊ˧‰YI²?Ã…êAu@­TûK"LtZê”L®cXƒK/-R¨1uøx[)ó.j¡»ÊÑÍÒÏU¸ˆ¤¯qJ44#™L~CXM«´éîABî§÷iµ=;3´|Ù#gÚ}Î_R/š“lã@D&V#R./²– ›Úc‚yøO^æ"ãÈõ^ E»[í9RuÇŸ—¢FXÖGÅB1¨™ Nœ¿`¯}‘"Ä^í²f&åÏëQd®8£ À’¡ó½7’— ±ù X£„!’m|’^* ì<⮨ɱ$1I‡w§—È?'ŸÈø‡½;ˆºÊ°'|ë­—6È:¼Í¨ƒŠJ\0ã» Í”è˃ÐCÐè¹wšÄ[Iôî~w%r—ÒM Õõ6¾;†ï¸ŒQ†ŒÌ£ç@&œéNŽ=ɹ^$Eˆ-*ÜÉz \ù•} ÏGbŽHœ%èDLš:x‰uÎð{b‹ Õ7滪.Êdí ÒEñ%¦hͼ å’ºÖZsxééf®ã"7Ï¿ñqIɱõ¹ërk·^ú\š ±6²Õý8€m:úruž»éo;+ÌR‚¨Ù$ÉÃ}>n±½¸%Tû ÇÜÑ3Ç?¨Æ>¶Ý£zhº»Udw&wO’*’† 8/ôG>[b ¹Û9d­?…ËIbîõ #ûÅ=d¾QŒÆá™½•)HhÛó͹ºöŠCmyA\Ç'óUZµÏ;ÄòZ!-Qè/Û´¸¶$ M¥úa,wÒÉDÚ Vüï „_`9²ìæû05MºkÔ$©A_ÊÉ ò\Z•ïû)˜ë¼~—|ô²Ÿ¿>‡¤ë:ú&Ûn¹ÀKѯ?˜c諆ydIïÔ`á<ˆ$ûîíH¢V¾e0ªìr6_1ÇBÀ 1`ަ^ŽócKc <—¬·iEQJo×Õ·¨xåîú xû(+âû%|{G”6ÏǨ}Y+ªÆ[ÐJÅ6)S®«KêÒ´ ´Èúh‰ÕùêÀ4ÄxóŽ®$8_,`=0%q¿,×1T2Ã[pÇ“Œ=žîmò“÷lËTìnðbôcV«TSX‘og»­§½µÜ¡f½é…jmr»s\å8P›ŽaN‰PÓeë‰ØzÔ•‡Pç¡Ð±Ë¸QÒ£WÞ”ŠiZuqÅ7èe†@™¹‚%‹ «]vJ"œh«|%çxÑ—†#,¼  œVE¦-þA°ûµ…>ì¡KØAÑV–UÆçrŒ­íÛPöÏB«ÉKð¢cÁ½cЉ±À{Åt¬}#h™¨ƒ?ÐLÉÓ/?Ÿ :5ʩ̶ÐiRôtJ£±ÑôÊì7NŠ8õõÙŽÄk|Éÿ `ÅÍâ€?þdKË—¨­Š(kížÓ-â¤UÇtùX[ø\¤d•¤£ÜaÛ•ÐnÎXX.N†ëu $Ç~} 9áD_^ûˆSŠY‡EBQ| #]Ìá l!ɰֆ1 јX¡ÛvqJVàà>ˆtØsA¶·>B'ÊfÉSP·RpÈãF`!×ròlKÎã",Û’5)ß!ƒC4o5R"Y²‡<±áeZà)Ž$·\7JeQE¤9! .xž"ÀÀgˆF G9$í¤ž×µôßk'*ZÄÃqÈã²J-Ž–„^âq¯ò÷}ÍAžá¸åÚnݑг±¼4öYˆ›>$;mÓó~Ó‚ß-@"÷F:Òcr¿ Ô»&^n­Lßtùþ…Ôòoh¼ÞÇ’j:g䙤m‘×6ÏP+þ6K2‹ Å£°t×jý[-Îç¹ßnwªC’âÒ &Ç[œXYK“,úŠÕäÄèx†ØƒCOÑ£M1ÏÝëÅJ+›"…3ÒõáZêh[V§BÙ«ó2¹Å­rh /žä²ŽôÕÃÁGjaM²$žkh7oÖÜyX„ˆŠ9á:CȆû^ÆU[Óê$¦{•?“jIWPý¥•¦}¾ˆá~Áê´`if.‰ö­Ó$hÙˆ‡ÇlÍé½´"·mîöýHEÁªï5¶è>$Ê1Ù¾oÈ;!*™;ŽY¹à&¬ï£|î†SŽOb{+íÿЦÑbŠ:r±çCAg‚‘@‘ iÇCI©¾–ôñµ‰‡”¸oØ£ ^Êž§ÏÆ6]½Ö gÎÞùDü¡¢îxu±—ÛÑÇ?~à—”³Y¬ãµ‡E»4°žÄoÑ…a:8Ñ•“XÙªú =A÷i™ ¤¥£ö:qú dVj±Å|÷¤(–m6?„Ôe¸´qm/§}·H¥åµ´“q“zƒ¿è‘ãÆ\%±%\;v­‹p¹Hd9Îók7k ;¯mKÆù‹‹Ïñy¦l,…™©øhZ´ÃÞšÝ7g÷.)ùJe{ŒãLQT½am9d|RÚâ /ù[2ð&QjâZ¤ o[HÕ*WlWì8kMÉ;7þ‡ —G¢õX<ž Õ…':áº= ×¥àå0OÌ˵¸iñu$pÿá‚çZÃ'îçr¦/ƒ¼î}ßȲc‘HQ«h{|–-\SõïWþÆ,øŒX(qÇV¬_q®¡Ûö’æ0ëÆ½xðÞ!ÿýK0|-T/È”NÔ—õ(^d¼¢©,DÇlú|GlðÙñS¬r±G(hrq¥MÛ•[vÔã×NÑþ!]~º2;—Ë,@ÉY«m·É߸–°%3à æTõAüÝ•¹Ó;4LíY+¸ü «Tí«Úm¥¹ †£‹4|UÈôq°nwñV!`[„ _¦û¶†_Ò!»Aú8÷Ì–V„’Üx_R\ãÃxmJŽïÓ"MÆ8‰/yõëµ(°štôWÿØ!õÒî/u ôj~Û߸˜‚ñmh†ðê:4mskÕA ¤[Óëÿz$3+É7_²Öºyçæ@\­éÕ‹,>¯æûWÒć\ô2ÕÀãóøâ<ñV»YÔ-ØwX¢Ê#Q¯í„ ¦‡@¨|>«RÕ 8èö¬C£'ÕÆHD›í@ ÖbZŠ„ËäOÅÿZ¿³qo›ãðvA<Šç‹ÃMÞ^¹âz#b<‹uá‚ÆóNf'? i¸·éãóqÚÑókã¬6ÐÔÂwmÉVɹý;I øOïg£C=U¹:D¨‹[cN·DÖΟðÿ‘z‘7ԱĀËÂX ö^ql\ÿ7Ï”lÄ&¯è¸ ·ÌD=]âxr”“d‘lé­Vtü­î?¤W0Q0. :Ù‘MÔGjäØP´…pÂêÜ[o!lãÅ`|}~5»Á5‘zƒãg?°í†ûrSTã ~µŸ§‘†Þ…ªŒí%—!ô’ ÀH’Õû©ì¤I¾è)ö?õHì Á³á]L¯^q8E\~Ñö˜T#:Îêýÿãvúí£b°º·ó…‚æ€Rñõd(ú…L?Î"ñB[²nÒyZK÷x–<…ÚsxšN#Ô|ß½ß ?hJà.Þg;$ƒ€Ëã‹ÀD²=qÐÞ‹jFÍ?ú6xãÌÄÚ0ÓàÈ ¨} úf•Ðâ__âKbÕgä2© &;Øþ¬¤7·B/FsqJ²Ýe±O²zÏWM$÷‘ÿ•—¥Ÿ¨à),E¸¿¡­ü¡à@¾´ þVoJ.èÑ1¢b’Ü.•éc`‚J±+!MÈ^·vWŸk¢iUÂâ…Æ8¶®/€Šn½ûî<úqã2$y$q„i¹ª“fW¦¬ ã %M–jNËE³­XÍ‹þ›'Y¢â'áEX>¾νbÒÀ?Õ¶¡}ûY˜‹â}«ÕF=ˆ¾uøH"¨QÞâßDô92RÅ„&J¶—K%/Ïý‹~•o^d|!¡¡Í ìÈ“ïLgsÄɉ¬a47_ãÜëRWÄÌ¡¡{¥CiÍ„–SŒ’`m"QbozÆ®„Á(ûÌçuæ¶“WÖh¾B,ÄŠG7 ³”ž–Üô]Y5q´áYžµ——JºWØ"g§7ÂáPo2ÑKï48hváJß÷}½,rA¿Î#Qg j« 3 ÜIv`Š®SäyøZ…¤@ÊÝòp™WU¡(qÕÅ\D‹ÚÇžámn¦¬Ø(Ûë(›'M/Í |ñŸ‹ææÀf‰¹­ê%Ý5o;æßê_8|­#Þú·íªè& š[üRE ¹ój™M’«ÝÒU|×R”· >ÌÁmèKN¡t2„Ç,—T—Ki[g`Œ¤C–p·án€Î£k®dï´0#*:E[ “ºûjgÀ¦Üpä¶~)°µˆmÒTº¦eNrðDŒn~4?Â'Í„‚³ )z)/˜y±<,*véü˰{géÙ)Œœ¨Ò‹€¥{Lù¶3ÁL?m=hx¦ÛR’ØpŠ!}ô_IÌu—âÈmÎókRLµÙ¥tD/²<©#¯Û±Zèç’.¤Ù -"ÞËXÃËÝyž@FnI8q¨/³·zZ+í7Mt*̺¡ãƒ ü2š4jCNNóöÉ_÷уdѬQ÷©šçh\ãͼ'Ó ®Z™…áÕûÑ8GEN¯X˜0vµôV¥³•§t;'á9¾šÞÑÛK'Ú%ÜÆ#]L´]¤ø …D®ý8žþµ«»â~ÛH„88àWôÚQܽ¹7,ø)ï;ä9g‰jC|Æ ×H •®kfü„Im/^f;1ÍÝH/š?@ÅÀvv{î±wö ë {•˜”Pá¨BçÏ0eKÈTñIb°l©R?f]pYhÏñžE4ëNn›zàü„ÖÜkêWæù…üô"iQ³0µ-“õÚ oní×Ñt:º™} Ñe•¸£ô||1z¸ÛÙ§q˜î<¹÷/íÕt<¶·WöâÓhúq<ÀsÓ±¡'¢mxöI´=uË¿ÿ:ßÌìÝxúy2›ÑjçßìèîŽ_Ó㣯C3þëÅønf¿~ߨ[¬þuBàÜÏFx~rc¿N'³ÉÍG^óU¦“ŸföÓíõåxÊCX^Óæü¢¹Mg“ñ½½›Þ~™\vÏt2º§sد“Ù§Û‡Y ;mtóÍþÇäær`Ç^hü×»éøǧµ'Ÿ à1}9¹¹¸~¸äù.ç´ÂÍíŒV§ƒÑc³[ƌ֯NÀZÿóxJè»™Î'×Úã`®&³Ú‚Q7² ùÅÃõhjï¦w·÷ã¡ Ö˜Žítrÿ† hýËÃ(¬C¸¥%>n.˜L=2â´öÛí:õõ%¾7þ{ il/ÇWã‹Ùä Ñ–´£ûû‡ÏcÅöýŒÑs}moÆ-ÞºO¿L.€3ß&S˃o¦S¬r{ÓÓJq“˜fü,ñpsÓOÇy a ¬:úHÌwièÔ|8 XŸü }ÁÌÀ(ýFluk?¾ÉôoFÙ…vôzº\B8n™ut~ ¬œãk‹Šßærôyôq|1o­sÑöþn|1Áô=±"ÑþZðDBõ—•>ÐËè‹À—JCˆ$xïÆó íÝÓÓvoåGÓò£½¾%üÒj—£ÙKñÏÇxz:¾!|±x..¦$jxoôÜ?ðMnñDœ—…{2½´^¾˜e¯F“ë‡éÓÑη„B,ÉÌbîo¯f$ã³ó€\ÑVŸ”zÖK±î‘â|L.¿LXe’û‰à¢Å+(‡ñ_ #ò+GF5ùÉK‡ƒž~í zúÿ¬ßNuR#¬Âä’Rwa4[Z»}Õ.¯¥Ó¼•3ÓTÁºIôÉÃ=¹;†âÒ¥¯ÂñÄ9׉̢9²ˆ¿L'ÛJo‡…s™Ãqæ±n/‘î·„tèi¤îˆå‰LþwÅÐHó}ØJ¦‹µ °êrÜžò·ÿïª,æ?‘@µMƒ[¡¼¿çż:ó9zÿ ì”pZlí§dñs[EÕI_!®©ŸÍöö¢(rÑBû†Ìt™føc2?ýn`ï¤Ô°øB¬Ó{FrùS˜’&Õ9ñÏúgŠðGŒ>E翊ô?PK ¼ž8Ú ˜½G‡src/jasmin/ClassFile.javaí=kwÛ6²Ÿí_êÃFr:ÎÙG7¹ëæ±u6¯S§½çn·×‡’`‰5EjIJª·íßy ‚å¤Ùì¹W=u$˜ æ`‰{÷î‰'ùê¦Hæ‹J¼È³¸ZÄ™x%od!N¾øâO‘8KSA¯KQÈR9‹°žû9Åó$•…úü—Ë$;.‹é±úú$ËËD?Æ›+¼]«¼Tu¾-e)b±Š @"âl&ª…/Î.àÑô:žKQåbZȸ‚§@Lž¸€%;[W‹¼PøÝ–ŒÅÉ}ñbÞ`“þx(ŽŽ5P&îôðððøÞˆw‹¤T ¤g’Tb™gyšT‹d:&ÂÊE¾NgbUä“xP'RLól#‹JÎD’U9*%<ˆSQ.ã4…LYFâë|‹¯Æâ*/ €¥\Éir•LE¼Z¥É4®’<#Œ˜O§rUÁ#&þð0Y®ò¢B꣣Óú×&Ž’<:ÏVëê¢^-ïÞ¬«ö—Oã*î,pþæÙOHè¾[WIŠ”‰gÂt·È'?Êi…ì\—À èÆB®P–²Šúx’dqq#f€~ÇÀïøda½1‚ò:[ܶˆ8-sAÒ* Ìj=æò·çˆ…䇺W ë—ÀBà:HÉz¾@RŠR÷äDnãäk@eb})ÒäZBï¢Ø(¬ «uµ.¤€þ+¥*pØSåzº‰¡×`bnâ2_rká7²Nbo€SüЀ½ñ´E_®sÇ‹w¹i”BfŒÅM¾†oEY¡–U±NÇJª#¿°õ2CPSÄ]@FeñRžÒC‚ø,ÛpK™mNíÂü´.®—ùº˜Jûù4Î2`pÉÿžvR·. ”df›"s&¯’LÎl$ü¾‰\=/“9p4‰_‚‚!Ñ/Ñâ•%¿assVUô(~½Œá»j~\MdAáë%}çw/sÊïââ>¢ê›¸p ÅõË~ÙoŸä3~z0SÏΑ9Ärz“àÏKæqMÓ×q©HJã‰LU+&yžJlàÅMV-šŸ‚z48u‘ÌÏ èï’2™ œeYÎjD”`Iz„¿ Ô>Åϳ®ð6. ·*YtÖ¤RMl·©lá~–Êåwqú6N,úžÊ+~KÀ¯r7c/§ù:{FO²õÒe(¨kŽO'ÒœæùõzUn“ ­6†Ømêw¢L)Úxæ&XO¨Ä¯/7rzZ•o/7qº–õ£ÄKúY]..«s€{‘üS}ÅJ¤tŠ©Î‹ ýøy"Ó™ÓÊ\`äeŒ,Q¤?Êmòd&âÙì"Ï+-ÛC%h¨£c-uDôˆªþ|x`ìJuŸ¼=¯är˜A>+§Iòäí«ŽF§P`F>|Ì™¤_[ û‹mJ¦Xï]Μpé›ÜTòû<ú’«¡Ã<ñè‘ÈÖi:‡¤J7%É¢ˆV«J³áàYQ`˜˜ gÑÞ—Ó|Eá%"Éd "¹h€ÍEF«M0{ó„ ÛÔEn;©–óÛâøUñl'¿HDöbÕøT¹EÄ}Hf¡m•à"äLójôó¡¨$W"Ì•ºÈm™33x=> ”>Ô:Å7ëñ±Â ÁT`³ÛEðˆŒÐ„5ÄΚ †£Þ£Qƒ®ÒG.qh=ó°±»on,h˦Ў FLJ¿úËëËWÏÞ}ýæ©x$“yÆáÁÃÁik•g¯ŸZUd6««h/À^ƒ@‰½‡ƒZÅpàÇAudL61•5 êwU±jìBÄ(.pI@´v.ËùÈêcö{•‚eÜ£Sc:— Á0ÕTðÅp¨+‰»bðЖ«FIÞEÚev”E!{(èEÈ‘ 5FƒÁLÀÄãGâþHìÔ›ˆ¨Ê™+$wžÜ[|ÙÒp çq V¤/ ’˜ç0ÌÈÚX1qu=þ0©¸*ñ¥ð釧wïúôû%¢±ÆY5LFh(îü½ºªì€Áß«§¢øù5¤øí@DÆaû¯Pçþo‹"y¿{×ÑÍZîqœŠ2¹¡ˆx !f ˜*ÙȆ”²º 2¶o²Ùe E kêÁÂ.ÌpG™-XM7tiŠ”!FrdÖØÂ]#õ±ùhúŽÌ;mÃ.Ö³ýig­~ƒs>žÑ8‘è a­‡uþX‚'ê XXxjt–Ë2»SñtœAü”T DÕά0ÂÆ´Œ’HÖÁ”@ƒñ]\Ô"àþÜGÀ‹K…æ¸AMKÈô¡pósšª“•²ŒZ ‚qµîÓ6ýÿC1…I KOL®­n·Þl^.GúZзÎPÕàG¢Ý؅汬¶ Ñ\VM2ÈGòë8-‡ƒoÖY•,¥ò'ƒÑÈ©|àó¥ô×ã(t·ƒÊF>·‹Ç>“üßâ2~x¶éøÈµ‡»í:h3WGÇ9/v.6&{¬û uR-¦9Š¢Æ°Y­Ç¼ÃHx•ç©äÅYÅi7ðOÞŠéJ°Ô5ÇäÓ¼@?šsÄ —\ÄlM³]_ ÷T.Ëë1œÌèËŸ—IÉÙzäƒIª;¥(«‚UiMç‚î›Ï¥ZŸ¬çQÓ%s#‘çƒÑ/¿Øþæ?xâ?øÊp‚ò&+åCp<A‡¯ibfÄ3Œ§¿ÃoMïÀ=ëSû|¦çiW‹ƒãRÔprâÓ•™CçÙ•éø7™ÿX1ÞžŽÂ%t×XG-Ê×ó4`™Áœ‡Á>…’/(G¢mÚšZ€«9ÜÈ1M³²°xSÚ0ÆÕ ¼èº‰Á?àêj­j¼<ÎßYYÍÒùÐj¸•GМŸËgR×Kÿ¶’ï¬dÆ;“%€Y' ´¼³V¦M5ûÍ0̃·^ „UŠyÊ­âaéÈN‰Ð%/؉+0ùð5Ó ßÏ!è.@V°H#= G©vh: Ày¹K d6!M*¥°¯@y¥#¨WäÛÓªxíçgwÜM’øY=ìv Ç üUõEcX¯Où Å’ËÏÂcxüÐZ;N#™ô»f稙çŠþ8œ4šºêN$–ªôÁ¢sq¬z h1•ÙÔÕ§ªY“†Át:é3£4è´Ý¼0²AªÃEt=¡ex4p@4Ч‡$m£Ôµüï¦m—þÕ~mpÂþ²N}¸½kfÚt÷,ºñírÐÌnÄŽ9ë‹ʺƒÓ¨~8Ù8öÅJ¥»ðRNÌM ¾G“ëÊ.þÐ=H¸ú‘±›Æÿ´`·Ëð Ökн¡g»4Ö”A=N‡±ŸÄë´r{zá£:*Ëà"Âý§k¡§Le\´…f†ÜŽ°Ê‹ÚÛ ÕÜë7պ±Pw ‰äÀIt„Nm/ß+zê5BžC;èñCŠ-D‘¯+`F)îa€>d ÿ“.”™ÎE²3Ur¼ÒøPo…3~#M€GeöcÎíTñµÄ©¸˜¯i¥¶iQ+Ü…ÙfÀ¥‰ÃFcg‚­{d~ãd%Sk†b(O9Ø:‰Ú•# ¨4s <“p QPCÌôO™q|…¼ºÑÛ%àÆ´Çá(RlÇâ•­²õ„BB êm2“͉ œÌq>l¼Ënª%€ë=#yFÓ|1‘Z ù8¼JÊ’&uoø½Fi?[†Ÿu§'Ùtw¯òˆqs¢þ}ÐÕËí=çpwu¼¦Þ@¤›~ÐÝ»Ûv³õ«xöYÖ#š¦ÉHÜ)Å)×½9§J±L~<™ŠG'Û”<‘Ó;Žá kdÒÔ‰¥¤ås@ëÉñ=1¸sÁˆ¯/ÂI2œjþ4Œð7΃:§ÛÖ‹B›Î¦”JÏvÚDs01ÔÐÔG€Y’þeXüîw´2OÕâl*ó+-D{Ëwx½á¶¢~ÕF—øåá½A æGvPÜ(ì|Êd7®}=À£‹LôòòƇ§X/Ð ½Î¢LëœÈ{Ø…Õ–ÇY­ùd»Ç¬j!ÅîJÖ®úmìh{ŒÑÖ~ùu^ÉÙ½’,áã°T9Ô-»yº¬exw)¥&|ûÀ{o«ù®Ò,ù}òÎ2É6ùµLtª)9Î% ý“8ÃíÈE|ÓÇ/Ö=ÍA^†Œ5[Y ½ûh.so‡©ùÑì{½µJ“êûžÚ¸úm•¤eD)µ’ç?ÌdßÐ Räôõ_»™Ñ>‹Êâ*'Ñrÿ‡±¢êä‡ÅEü€‹ ÔKÍD0O–$ ÊðŠ‹Q ì´el~ÑCø›èÃ-Õ¡%ZܿŠ7{ÇÊh‰INe!y2œx0VÊÅs£ýôè¶ÓìH{(w]™ûÄtŒÙòѬ·¯W9ªUkÐû¿áž¬Ë÷oð•­/qqu³ ˜9ZVÇWî²îN lLôÈûÃÙ7Æï»bµšS‹¸è†ó‡^p(&îôÇ^€8xë†ô§^p/l7œÏ{Á¡¥øn@_ô”„Òsr¿ŒÈw: jVh·ü`NB{²õ³¿¦Y}ÕƒÖöŒçjUx/=¤µ”[„šÝ:ÿÛxÖëZ9·ϸÎGA_k<­ž¬W®øËûnÇbµV_÷r¯'õ×·ŒRáÏG÷ €ÈÞp}kʹ^›“^ðj¯i-æSõ lý£¼—öaä†èUvÙ`ê&¡>ŒCoõ C:Ú»™H;uwî9ØÔ,¹‘Q2Ab$yòŒ·%­Y.ßP„+ÆÈCdËÌ%[Q;“W\§ƒH"böY»Lþ‰ç6=~,,gA{¯¯®JÐwdl<û>û¡.Cdª%aSˆ:ÅžÑt/Ÿú$]ÔRíÝtÖxpó¶úlxjX E\¾Ê ùÌTóP“œ 9ážf•Q&ª4‡GvÚ¶«ª1\šâ×õ4Vï•f©×ß“><™Vw=4}mº®kŠK5n¬¨lÝ¿û.|MH׬¢Cu–ÍŽW‰+ŒÅ½“ ¶b«crv ë¡áæô(Á°ëwõ1<ð’íclÊ{°· è§Ò|ï¥ÑŸ´¢~ ECïlõòg@i½Å}X ø1qOœ4èqÎêØGAÝód#1:P»_x× ùÈ/Íã3‘³ËXÝLÏ mã&™]Ö `;,à-ƒ¶ ß–u†¬:b“@dšZçÒmê¸B:dƒO Ñt:ö§щ†IÕî”–Z‰¥Ä““riÅ£%'/P`S ¿Jeû=cNõB>m¸ó+û„/<ªlð/§£+Ak&ëùœôµnïe·Æ?ÓÐŽ’##Ë^ti#¤E[ §ss<ë# ñ„0è–k™9•0JÂ´d°Ò/ã,žK{‘Õ+†=!çòê¬NNŒ&qó–2dgRaû’z§–ü))Õ[bDsGJi¦¦-äôš'[>ûú#øÎŸÔùÜ&uÛa¸“yN7ļb¤©œÇ)u  I™0®QxXÝSSšöµ6f¬‰¡Ñ ¥GcÑ0¡ Åh¿¶*‚°AÔÕ)Xð ˜ÆXHÏeøº%RàƒKÝÕá\¯®´<+qIÆd¯VÐh<¨”òÒŸ«m2•ÿÕe-užV²¶,[´‰»ŽOÁÕØÅD;c‰ö1¬†Ÿ6?­‡*ðàNù0º †¦¤M&ê÷Ö¡XAIDhÜŒ6Xú­uVVHtX¤ËÙ#1,¡¦s4q–J¯ã´½¤»¡…T«€Z‹öÎô†ÕÑÔ£ 7¾íêü¤nšw*wà.i£³ ºEÍØlsr%îdâÙe/â˜{èo+º{×·$ul›A±J0í“O‡AÃaé½=³_ƒª9[Ƕ£ú4N—{6Cz3ƒvltxÒÛ9EÇX(äøËü‡ù1nØm™;»Å†¸Û@L}LoX ¬$:úñþ‡R9=7å½ç]G»£Â;Ñ`]¦®á§ß;,¿ÑP^pÄ*]¬š¥vyNW§Ÿœœ0o)'Nj~˜/{»ºÞ³ÖÙÉðÓÀ€fic¶68ßi—öÅ-H„EwÀÐùǺeÈ”·Dhlì%ûi²LhâÓ}RÁÆÕÑF›.aµÂ/§êfšÀwî8”¼ïíÒäÐ o‹dƒ{YÊj}u…O}j9.ÕÉö ì“4Ÿ^ï5´1« 5eŸ¾+°'ño«ç´ˆÒ¢à¼À»üg€?V(QÇ®alj¸2T[,Ô[Ǫ»g°ëc|m+t±’SíìóÚ| ¿àÞÙ‘¸ÛÝRüƒà[ŽÆjS =n‹BÞ󸨝5›éÃGfߣ¶x> Fî:¦Ïït¬šðBq™¼-‰Íživ‰ÝM܇†_µ €EK ®Ù>‡P.¼’~[Œ4 ´È¯kag¨èÄÈWúAN«4ƳÍ\ƒ*ô¤}¨òFj¦žF>Ð (ÚÉ ÍðƒÂg])`ð|™Žâ¨!¹[|ojµÂ†C}ûÕËó'tÉï»7xAô«ó×Õ9WÇGGâÝ×Âà\€Û¼‚8öoÖ§ê‰ÿÉ×`è⩌¦Ôësíûrë‰Ë*/è61¥qyn^,ãÊ`9v®X3ã=9õàöÈ@{‹Ù{e}'/_Å«îŸÖK¸E5‹SÊjàÔ%¼ˆ{oÝàó+Qæ8E‚€æ9àÙàÔÆœ¶§–;ò Làu-ôXPê˜^’ Ÿ\Á¹ÌWêò¥…üNšŠ*‘Œl–o3±^2¿¸-u ¢ºw×Ô6PþL{W ,¦&¼äSÒmÖt§qÌçª7q޽2àÔ‡:¸-Ó(\ô]%ô1Þˆ/§ÛÚ8i‚Ï3<1£»ñ¬RZNR—¿áåÄØ£ôƺͫ•r“/)³ §{uöÕƒàZzçx.›aú„OÃà|Î%îòÁ‹IŒê£®b3Œãk¼°«}0t†šÆ+`ëRs@)4ëŒV܇D'^ùP<Â2]á¥A–©«÷ÌÍÖÖeè,ý/wÑ×ÉZ mdváG酣櫛§NÞOþi¼G2'Ý;ksË·:iÖæÎ?}"òAè"5í•#&cv+uÒ¬“tGmW€×Ñ«d>KND}•bië«È Z‰út2;[÷‘M‰K%™6uAÁJ]ˆhÞ›2{ÿY¶A P·ª€Œ Œå¡Tæ3ýs AçÇC4;c}3 Ÿ­F’Hçž3 ÇþKƒ(¢"—ôÛ™\å+ÔµšåmŸi¼Â‘øÆZß®sŠ·qÆ®O~Â^^ÏÕ5¦¶¥ÞÆäÄ´*ÑàZM ¢x?Ã'ðß#˜‰Ëø@IØÀˆÓ 湜ˆÏk0O8|ä#˳{¼µ7t3LÙV½ 1w$.p¯)nF«7åbˆIpJ‰ŠWIeNB˜ß€PSþH5Îf3éÞШ²SÆnŠQè¢Ç0‚kIüÁG¡6™P”¡FÇ|yòO`åñ5;f«GdÕ·w™ÃPÛñÿžðcà® VÍTdtÚó/PK ‹˜«2Û_߸ŽØ8src/jasmin/InsnInfo.java¥[mo¹þý 6ŸìÀ‘.¾»ö.F8Ü(P\ûÝà.IiâÑr»äÚqùï%÷EZ9š‡jk$³3ÏÃw>3#íæzûö­úÙ·ÏmwQýÕ7:ît£þfŸm§Þýøã_Öê#³ÌAu6ØîÑšuÆþ¬ÔOêbû^M?ŸtØS³ ]½™~ý­ ÍoóëOúQgÿ¿÷]ëÃÉ–n¯#ùFéÊ÷QQb××ùIPW¾­½±7*>·Vy§t· 7ÊÆú:S}ìãÎwSã§Ã¸Q?¨_l•Góç•z³Y­6›ôGÍÝQT¬QÑ«g“ÚMÇ.Ä]jkhX鯍Vwzo£í‚j¬5Ödžê9Ù–]gꨛچÜÑC;º³ªî¬Ž©­ RÉ)R9¨¡HšéßiÖsC!úÎæž$¯¨+¶ëÜéU«ë½µÓÜÞ­V´o}óÿ׿÷M¤½ýÙmÇpw4>êu‰×¿ê°Ø²f±o¬òÄ¥žìu–ƒQM±zûÓÑÕWŸlÿqêÀ;LÝ?§&BZ¬ë^SÓß4´q~­®wËÖÞ¨¶¯8Ñþ#vÔl‡Ü©ÛiÏ–þ‰{Z¬Ñ}ðO»v|v†9o¡s^êô ßÛD3–ˆi¤‡IØÚxµèßušÀW}ר«Ùéú0ëì>øÝ½X¿œ#¯¼g›¶Rí‡I RghÕŸ>¨¦g>¥O[fܼ¿ûlïiÜdê*X«*ËþézI0õ¯íè1m^õè)­Ÿ1yŒË>Þ,Vàf9ÇCçÇ-ÿ“ºkŸÓyu}·z•Ÿ¯‡Ýöa\óéÑtþ>Ìk;=ÎÄéá°†«ùÒ9NMÛSs3<»¾;?/Çùç&äÌ$üñu[Ó`§ æà5ÏÓk­ÙkóúF½<¨y€÷£õF½~}}w;\2x0‹è:{ßçý!2]DØý©÷$Cï¿àûo`Ã÷ï0úFßbô-F‹Ñߊè´-t×ég?;$†áB>O3ž{‘d4‹Èül›mÜÉ ‘oÀyÿ ë?˜Á˜ì¸q°&{/o‚É^ÀËÛ`²‹ø¸ëü“ˆ¬¶‚箂×F…W­Â×FEmÄ=3ZÅ%¯RœóÐú$"ÁÁCê@ ‡^á×xè5z½³õCöñ³<¸æÖIÉ$5nnIF‘Œ/÷dQé7–l2-KcðÒ¼4¦Þ·[›)ÏQ6ÊÈAÅûk¶ðâý5ÛE¼¡G›l".”lƒ%Û`É6X² –lƒ%Û`É6X² –l³ïå=’l"®±ò®L6×Ù½ˆK6€C1Á1Á'«¹)¨¹)¨¹)¨¹)¨¹)¨¹)¨¹)¨¹)¨¹ }%cûJÄõ­ë[€’GšlwÿYžäьѰádhÜ4n7 Úu·âm—L2JÔ['ë­“õÖÉzë€Þ: ·ê­ƒzë°Þ:¬·é­CzëÞ:¤·® ·³½€wàl/àÅ]8ÛE<ÐkôÚÁE†zí°^;¬×ëµÃzí°^;¬×ëµÃzí€^; ×èµzí€^; ×ëµÃzíð Æzí zí zí zí zí zí zí zí zí€^; ×[YälOøÑO  ‡€etÀ4>z‘!Ù˜ueYß‹å‡Ñ HÖU’u•äì—äì—d]%YW è*]%¨«u•t ÀÁÓLX© ³½€Oól/àÅÓ<Û xñ4Ïöþ»þ»þûþû~_šÀ½<ƒ : »×)j²ÿÁ³>Ì£W#oÀÙ¡DC¥ÞÐE½É^[Ô›Ñá"±`wp¸„†K½á‹zÃ¥ÞðE½+E—¬Z¤âú ¥)® ZâZ e(®šüâ¼£)/ÎvãôQÛÁ¡Dƒ9ŠÔˆ1G¶åpñ|¼HPaB8 !œ…ÎBg!„³ÂYá,„pB !…ÈBd!48ÖÖËÖÁ~BAM¼­ž£¼Ý'»Ü‘x[ït‡ðÙŽðaç;ù°Î/6›L’¿Ô°£ Âs:SÏûsѤú C»˜X>]çÇ|1qøoçb1›þÁ&7Û9]ƒE=q˧ù‘iS©‹½–wú ¿D¼·qçÍÿ2 WhmMÿgƒ/)a6¶ô¹„í¢¹¬w^>D^>? A A¸A¸Aa'9ÙNd²É8˜0áòÊT(P¡üA…òÊT(P¡üA…òòòõhµz´\ŸÁ^þ,oæOA„%Œv’]®pœ‚‡+hºw”óÚýš’å¢ËE–‹,=Xþ‚å ========8e9"4Ùd.–Ìö^<û³]ÄQi’)GfÓ3 -oêÁxÃ-¤¸8*Úh䊃ŠÃ}3 Æ™ãL‚q&Á8“`œI0Î$gŒ3 ™ƒL‚A&Á “`ïú6ÛD\?9œíð#¿ä„sÕƒ¤I— DLâ…“lràp¾Œ¥“å,¸¦ñ-`¬`¬pÌpÌàןþúsxÒâ†Ë6©Ñáý¬Æ —1^VX¦º‰ªu°ï¿n剌8+Ù–‡µmòÔM}ü²Z}I-lÆ÷·ò X¿¹çó×/–V™èå{zù-½†·‡V?u¢“JÒ!¿7·Øq/k@«7›ÕPK 2cy<<µ¬ÀÇsrc/jasmin/Main.javaÝXYsÛ6~ÅF/¥,‰²;¾ÚÔMÚdê$S·}ñh<0 I°I‚@;žŽÿ{wðEÙJ—âEìow1Ûƒét g²xPb¹2ðVæÌ¬Xçü+8øæ›/#x™¦`—5(®¹ºãIDçÖG§ðZ¤üü¸a:ùL«xæ§çLäÑ »c´÷C© ©ýö_Ê\Ã[»kSZäK`ùÄ2ËXž@*rL-ËŒçFÓù—¥YIå¹­Ë=ƒ}x[¦VöfÁlç2 3#$2ktÏFðùþþð>O¿ŸWÒ°Û  ß²%÷ŠÈ © ýG-ô+¥¤j½c‘Ñ÷åbÁOÞäEi.Œâ,;êî!;õ~|îÐûÒlßðæý«1/H¿Íµ'¯ f{{h2 gÐ`V2š£áÕRäRywÁ„]E*x³;Œ£’ 0 ÷£,ø=Hܧ Ô|Q¦ “¿£“yžèȺ«(¯SCœ2­$ägÿ]ôb wR$HSóì:åaKE 0j«²4¸–2å$y™]suE1¥Gž23bGfvŒíìr”·^ Gh¡j?Ù£9Mc]†ÂŸî ‰PäH©}´fáz⌋»Š ÝŸád]ðõã¸3ŠS¼PkÒÀÐ ´?,%:Jf8E®ž@"óÏ ™Å"ǾS¸)µÁ‹nJ•Gë,6RZ"g²ÌM8Âë¸?ꘂÆÅƒ6<£­Q¡0nÒ<ôÊÂk<šÀpãL5ư…׆^ƒaÇ4œàë߃-–¾WÂð Ð!„_¢EZêUØZxÄŽxaûB¾“Æ*Rß<à]Cp,Á«‹ôË9:&¼ˆYŽÁú›©Ž4ÖŽÆû•§Ih… !ª àŒÝuÒ «ÑI›ßÁ|Óø 7\etGî±åm€À›êÊN2}ýãèîÏá…‹×^k·…"P:5NtÍÙ ›¯poy¬ü¢Ùp²µBêÖZš!ðñž‰ô¨±ò hÔûNšé¸Ã¦J_´¸Éí8ÁÔ³äŸ"lÿ·¦ÌÉveÚSaQ+b0²]ºêÖ [Åï#Øàå6Òd0ão1ò˜iì5ŸÆ>wc»BÚÕÇv‹¯_Ðzä(âíyÂQv‹dtØCèqS–†¶Ð?T¹v;³RòÞ ÝjTÃá^ ÁÖ´rv_m߃µ¿ÝöØbhËJíµ°rÞV¸¯;ƒ¢sš7hÞ>….ôØJ}C]øýè“zrhëÔŠ¥«‡ÌÊ–ÛÿEsÑõÿc{1x‚}Kõz‹¶0ÿB—Ñ ×o žW3üãã&ñµf¢§&´¯9>›1µÔ—ó¶Lô$}:uc]ÏUëUɘðër‰«¶„m]ƒªÌD¡µ-èöº—Äôï~p9Mà¸Æ¥Ó9~ðíÒމí)\úß(Šæ»ß²FPzN …•CKhü0w…®»óˆÿQ¢Ãáïwô¶|áŽ`Ì{2ÅxÜ›ùzy-·ñrn¥VgwbÞšý$ûu½Çuðêÿز´mòý]󹋹:”Æãym±ŽµwqaM¨×u£ÕT Ž¿ÀªÏZ±§Ý´³öÅþ~'lÃþ&uêp7žãŸê>œŸ3ôlþ‘l¿-T€ƒY¼†œà$¾}žÖ Y/Á×ü¾vY’P;Ís­þÈ?÷µ/øŸañýá*V`‘²e`'Kã/PK ‹˜«2:Te[X½src/jasmin/ReservedWords.java•X]Ú8}.¿ÂíËÎTؾ¬Ô­ºRBI”„©º/‘ fpDZ#ÛaDWóß÷&fbò„ˆÏ¹¾ö=7ƒ÷èææ E±•ô~­Ñ7Á±^cަdK$úøéÓ_}ä0†ê× I¢ˆÜe¿Â>=ôSFþFÍó «œò’Ù ù5èB.UÿÞà 4+e!TƒÛ/AÕ´}«ÁÕJ§Ôk!§®~@ÿDßJ¶­}î¡÷ƒ^¯ÀÙ¾'#Ÿ{=šBjTî—š²þ«µÆ F>¿K³²èË’kš“þ{Àá…Òge +…NÂ@ÿõ*o”Æšfè@xÈTZ$ÕªÁ=”aþ‡FE iÕkªÐúÒ’fóm.$ù€¸@Õàʶ£üaÆÄ#Y¾­ÙŠrÁÀfc:Þæ ÁÐ=ÑW1ðÀbŽsrÝøW=Í Mò‚aMÐtµûëúÔÙ~ÅQƒ?°t…®À·_ï¯o«G]JŽ8yl Ö÷Õ6?¢"L#(w«žz†øB0Û ®1åÊ囆ª-ž½ç'fƒýÞ(ØeO9Õ3ú~ß E ðËâ)ªw옠ñó9ß/_êÜ*äêº)ŠÆø®ÌÑ’Ânkº!ª…§_”úê]?Ã:[¿ûpœoHs4t’áäú(ÝftUÈ&´ïÄq'šð¥ë£NäŠfÂŽ=×ïFÃe$'\›\÷¦3ߺAÒí?åšÈΈ‰&HÜhì ÝNFsª ¾7õ 47™÷½ ÛrNà4¥qê&“°;PÑpìv{­D)i‹Ãyd‘3UDšàó™u¢¹HÛ‚ÐŽB¯¥x4•O2‰ÂÝ¥³Á&ëwΉåÞ›öC—b ÷Ö¢Ô¦,ÖÇ/u’¤¢{cq”βՇjÏfSQgÙvµeG—‰%9h8rí¨hu#§Ï©3ÙÀÒKrwLª ’Ù0Ç3whI¯¶\¯ 4S¥ÿ ’‰›xÃnÂ3&ô¸ôh{ŒïÐc/øšV{ÔÍ»$ôh̦+däÎ"šˆ;²ˆ“Þƒ+%ió,ö¾¾NÙqÓƒ~+ª¶)ªž]i…¥ulZº¡ŠB;MŸ© ŽDó ñ¦nzçÅÞ­ß}OíÉ)¿ˆÞ .5P`‰óËb˜9‘3½8’¡ ãÙ™²ê™´­"œ 'ñÂÀîø×nxvžÕlvDgã}öÊF;¤Ô$€@9¤ß= ´ØjÒÂqû3qíH²5–-$ÉÙ‘(§Ú‰'adHó¶€ÂзôE·Å'–á0w¥™Ãáz´"YŠrÑB2 ç·v$+&p[bÇ~èX&–ð2oaqƒùÔŽ*¿…ÊÞ’B¶íYîMÆT[¹ú±½Ó7\ÿv×@+K}Xñ´0Øû°»%—d…KfRã;_FîØ™û'ºÜØG_Œš¥‚F Ãäe3åJ CLã(ì ©m ±›G´xLÂ.5¨x¯SÀ—•žz œWòéúÅDƒ2¤˜ÝdXÈ&\PeVíÚù,Öýz¤Æñ„Ñ­Û´Ä\Q %’DN{nÐùi¸`^àÁ]§g¾ÈXÙ¥54©[ΰ3U}Õ«Â(A¼a2žuúpFeڋ̪í›;þùÔ{êýPK á0;`ê  j7src/jasmin/Scanner.javaíksÛ6òsü+PM§¦l‹–ì<ë|SÇç\Iâ4NÚu&‘„˜"U”«Ëä¿ß.’ RRâé§`b‡w‹}ãÁý=²C ½JB>æ•<‰9OæË”O¦’xç]2xúô)yK?Qò;"Æzo)'^ºP¤”ÿ"è(bþ,˜ð(òÚUÏ¢ˆ(‚¤L°tÁBŸlÕvÌ9ŸÒxÂÄÉNþ¦GÎÂ…äæ†È„È)#’$c2O„àÀ a" sF‚)Mi Y*È8IɵLy<¾EéMƒ)<:PóÃÂ'ï¦\ø—q–!<£sBãŸX:Î"_IlNƒ[:afrÃ>›'©Ä¿ý½aùׂ~ ²¹Ÿf±ä3Vy僢jOüËxžIP2£3 ¬ù6“!±‹A 5ê9ÌgeÂã9PÂÞÃC0…x¶%É-…é…¥y)³¿åGì.±$C&iº$£l<6°¢~‰?? ËÁ‚$Ï«ý~ Ỹ$dωaaÀÅ iÆ“;F¦tÁÀ~%Y2IØŒK ®BÉõÅâíÞÄ»]­ÆRi”Œ¸Ì Q Ü‘ w p™9I2IfY$9Èæxñœ„Jå|BÒTyþ‘ÓBí§lрỹãr ä‘#ʇÖ%’x*’˜\PÉnÁÕ]Ê¥¢AÎß¿!“”Îf͑Р`ó yˉ!‹:H’$bà \|óTÈ‚Yêþc ƒŠ9r_Æõ¨J¡˜F&¨?~½|wqýæìü‚œ’¹‰oäMÚ)©]³9ÐIº 1ÍÙÛ³wWo¯˜EyŸtNN‘hN5 \KSø Ò@ ›yЉª»§d :ë¸k±Ì³QL ö}Œ³ÙbT?)5}Ìß mͱ¶K…;\en´T#ù¬1ä) $ûöBSV# šrL"&2Ê¿R1•Ø xA hÑéu‹òñR&³òWî ´5AçÑÆ~çP«Mhž&¸Öfr+)=”SÐ5ñ›šx¥®|‡ì﫱p?œ’Þ «Åöåë¸uóو鯙çÒØZx®0}.hÀp¨[ŽÄkeºH8D#íA(š¦É(øÕÅßèИ_¯d¶¬`0žq"ôºe ÁyÌ)Ñ¡®$Ç$eE…Ýç-7íýýáJî0jXÃ@£~É≜z}‹—/„E‚UÆVðt>gqèyH¶[°ÛuióòÅm;<æ’Ó²¾Žv:Ù@:¬£@xvùß×ï_>~Ôï÷WY#{+éo =u RJfsaBï ìu‹akÛ‘ÄV­J“FeC=…%„•6[áV’¨ ùв“À [–/ Ë]qf”+äU i¤MQ@†ÚhY℃ÁÏq9^8 b|(Ð#5£¢þh=vƒæÁ ½Ýþn÷§'](å?„¼}GVßϺë8ïjŒmA2Á¢ÔÔŠäó†Ù8g _@ë*LŸ¥)]^ª²6“Wãg¨Qf`:b]›(¬´å Ø$»>Pãù‘*õöŽ> 5ÂõR€}$ó¥bDþ¾Gˆ‚ØJ§M­;´f„å†An0Q„P“m”[‹¾ÝHfý «þ•¢¬œ’lпIÖ^¬•= 쳿20i¯³ÿŸ²<»ŒÇXÆ.;ÝzúÈ›;½Æ¥)öiBÞÀïöý~SžØ‚§×ôõ·³¬„ßÌÏó(¡òÛØQ$›q7›rÔ»o­õîCmjŽ÷À“–ÕÀÈjüͺ_¾zksÓo ½MùKmª(ÊD¹s# Z¸e¤ãϘœ&a§±"ó @ yk6¼ÿ€\(ü “(Ÿ®Ú^ˆ³(jË ùr!i,¥œÝ¯U&'Îz›N#MƒêŠÈ¬…ßK Ö– –JMW±ßTšœ£!Ÿ'éŒÊ2Õ°¶¹¢ÄÊd~Šåʺ”©Ö=Ê8òUŽ×y߯É]lm´AVÑ0Zb~ŸAõ®ë¿ÓbØkËۦџQµé¬ÇjjŪ:?Ã=y!±IÆä&–n`EÇDíX†ö¡¬ûF8MîµV4mnœÍš¨:ŠvGÛY©`ÁCÿʽã§Nµî­vÝ¢þ¼¿¢±²ww³Öü7 ‹Í¹\oC↵ôÊ–#®‡ëªÔ=­¡§Û ËºÜ}\Coƒ>ª¡¶AϽìsó«VPÓDïoÈÚÇK/xJD (UÕ›í;Ñ«ûÄ2=hÞDrîU;Ê^âÜÎ…ŠÈÙV·yñöHq˜P±%ÿst rZÛJ†A.~{öòZo®o3Œ»Ú®B¹|ñ›{þÄÅàùÕË«×ÿ,jH'‹½Am7exõ¼Á͸°Ž˜{ƒúë–#ûöy_ÕYñµJÁãÔyDÜlNðÎYdßè(oL¬_°5èð7m`Ûžl± ü~¬ð=Æ}› l³ÉgÞ`ÝLh©K¦b®+õ¼Íµ'®F†ÿþ…ìÃÃþ~óN¬Q› 9þ!ß’ ?ýD<Õõ£®¦˜ä"åû ží =4ß\V œÖõÑ:ß?ÚheµÌ¹¾¾QZ(ÂZ»ål s”¯1ñ|þ«fn Zcë#5‹ÇV³z aÅÌÕ$]ö_™nÅ*oë>±´êÂÊ `ôBídÿ”<2ÀÅÖá–zÊ𻂶“S5Z[îG+÷ruB„2‡*>–‚•.XJ‚—®•+;q›NZ+R-Ù¯V !ëØÕõþ~c`ªæÊÿ-[ÞáÅHìÅ1Ãןá”ËÅËXÄ—ñ8ÁóIy, s­°^©n¬jMPý2,¾zË\`ôý• (U—õÏ|Ö·$TýPç9‘Ÿñ3'jÔsvðvBFø½GÜÓ—|ØW`IÇ}ó•4ýý”ÈæêóœÍ,I¹1¥•oªœ.AáQ¢¾Ü”]¿q¨Au$_Ý ãuA¼ê—ã8i¨O’Ž•Tõ XH.qK.¯}Cwõ*Û®ôA[\7˜3Hû 0/iLNÛ‘þHÁ¾Eçž™æê¡â -8þ, rTÞsÅB…µç ¾{ú?PK ¤á0ñ4H„src/jasmin/ScannerUtils.javaÍWQoÛ6~÷¯¸ê¡‘YŠ; kã¦X–Ö@‹¤´P-Ñ6Š4H*qšö¿ïHQ¶lÉItØ$¦DÞÝwwß©túý>ËùµbÓ™·R3#Né5U0xþü׎8·¬AQMÕ%Í+·>zðFŒÓðã Ñ©VYê§g‚ª†q|!—ÄÊüYª¹Ô^ì#QL–´!†ePP3“¹†%ØWšƒ‘0V”\äòJà&ÅÄT[%G%nTÞôº1<ƒ;_zЃݴ׃tw§8NeÎ&,CkRèF ÂãÈIÄöÿ3xO¾Ç9¥ý÷„Ax!ÕošŒ9MŠlÊ8O29…Áú¡ÑópŒ>L©>èÕ+}ÿ ã0£0U¤(ˆ-ñ‘qIÐ*QæJæe†û¤à×p5£0Á(¦ŠL–ÂP…È–ªÃyi Fìœì™à:ÎEYŒq2‘*£˜q  ¸À¥˜FKéž êœddJ}Þ‡½c†Hf ãDkhfnzN8Mý†^\Reñû¼‚œà|Ê.¼"9[XÛè¤òjé°ÔˆO6CÚX¼FÄ…å ³3É« UEMãórÌ‘kžrï*³ Îa³ ¢Šqfå{=ÌLÉ+íåGÀëEFç–YnóÍRd,%§èŠ ë º‡0!\Óá*¢õ„MB´œP‘뿘™…ÁI­Œß¬Áhê3ªl¨³Õà{«L—ã*Æá~ì^p*¦¨;B† ¢•Ô÷–“kÐl`:­ÉdN”vÆC©*JA¸€‡:a„锪äôèïÏN>¼†ÇQéËÖú›w«õGKO£(jJ%@Ð+ð’aˆI‹n5v;äõ®ïw³Ó’±.k!†‰­¿ØE%¶ Í%‹FÉ¿ÍÑê©AÓsAâ8»Ö†‰,M2G•†‹0ðþ£ƒöœ‘-©uü2cUÑu|ÝHÚMaðÔ”MRWÃF ®³öI„mùiÔL)P,Ÿ%&rºøcî$;<:„þ ‚-5S×"Ó®¶+qÍÃÊËŠ5+²mÁÉ,µ·ëÒŽ¯Mçõvù\u†–ޯܳEIµˆÇYIÃèvO=ð6¥¥ãv„¡ãÿZ¡Ùaór›°¶h'³ÅdÛ…C·lVľ92!‹–­£]ÏvŸ¦.>vk\;¶­>;œÊ?ks[6Ïæœ5Î.èA£UC@Òqš¥y¸¸þ]õÆ^ ¥õ%¹C ‰äöߺðVR|:mñÛÛÜ©»™Ÿ±)^µKEkŽt1Ú/ám¸ä•4“ûé—ótÆ€_6‡ØýØÔÏ·çØ¼=ÉŽw™µj·.“;l3]ÝûÕËÌ£aí¦Ö qßÍ-Vß(Ã-ùwaØ·qhö‡n­ù£¶f·ò‚ƒóÚ•ÕfkwuÄÚBOî°æåPp“§•‚Ò3°ßx)ÇO–´ºT¤x©Ø é•ì¢hK2À«ACþ~<1Êó³óÉ6vöÿWz®˜f…ܲob>º¢:ʘhž^]ì%çîÕ%ï8²Lõ.[mº¯ä÷âíÝý‚‚0ž4èçv£÷¡­—÷díTsoúþ¬ÛÁáÿ„¹m’m¶lërƒŸÔå¾÷þPK "U7 ïY†« ÞyÂhÁã9‹r– €¾¿àÅ}:ßgA2gQÈÙÏò`Ç~TöíõA­vðš½yóÆböû4 è»àOÐàø·­jF¾ñ5vÊΣ˜·†ß‚|%yÈWÁ˜V¸ZbåËU¶LsYÿRðì6ÍØ{ªŒ5:+è|&º¤4|ÃÞ¯â'¢±ÆDoàÉ ¥÷ÁCÀºW—Àט³0MŠ J¢äŽ :ƒqý°¡‡Î n" N¡ÒcTܳd-ÇÁìÆAžc™ÊLWÅrU°›§‚‡éœ·%¬û®3ü¾7A`yš­"¸ûyëmóoÿG8T”2™y›¥ dô!üÜñHõéœ5?FAÒ"vôç&;úæ›CLV–ü>®Õ¢Å2Í H?3`C+[%E´à­×Ç¥";+÷*´¢ÔÏYQÜzä÷N¸cêèeÆã7v&çæ£Ä®rN3"ƒ$AaDpâgÈ/ö»˜Sù=âÂçùì!ˆ)w¹º‰£MDkÅ)3ƒª·ãZûó1²…$Ja©í0+2Öß{öž.~H£9LäÎŒgYšÕ'E†²µ€NÀ€4Ùèæ7,JnÓc¿Ý{VËi»ÿS‘d¾aûìO F~®U¢¼ Š ~ Ä=|”ÐR`Ùä)/ø¢Å?FEýÍ¡¦‡Y¯àPÓçgðïѯ–Ð ˆdqå-Y‡}gq_j˜PlÀg1À0‘ 1Eax÷„PÍÒ›ß*ZÅkÀLl a"!/VY¢8á‹Y‘~à v„šÐ$˜ò §,u*ÍeC˜Þ7Oöh´p ²:£Ê„X}e0jÑL£úcšÁsÃ¤‚h Ø«Ö+±¹u;Óî»&<Éž½áü?ï÷øô/úSz{ð¸èMß0ÒÃÜÉÕeoÜp†#‘‚ÜÑÕ¸‹µ§ïÆ£Ÿæuóû—ƒÞEo8ŬþpÚŸw ^M‘Ý)@únVlm{gÝÑYoÖ™NÇŠ4• ÊTBУRýá°7ž9µí¬Ée¯«ò'Nßõ¦ý.õ¸;MúÃïg2Îz—ãð¥G=í¯¯†ÓþEovÝŸôßzVNXλìŒ;uE¾Ý¢3ަi4T˜LN“§f?ôqTÞþ}Ú“¯°+ŒåëäÝh¬kŒFù:A‡ÄëÙèê­|=Œ:ªrg¬@:ùÖ^](ƒ‰Â0UϰMFQѨNÞYï¼s5@}¹¢k5=Üø“NÜ2çZd©x:j²+è>HËùxÐ¥ðib•gÅÓR¶ê¼J;]@|ÞvÄ:)dlܼ†çå¸ #‹/£i¯Kc|yõv€’0A–w…<ƒ€tA|‡ý` ;œôAt›ìz4€Z8n€¬ßž_ÿôp!±›’È0],cþ–мÈV´xb£ÑW—“Ÿú4ý¦•PüÓ@ò%#˜åùÓâ&EûÞ@AwG0Ô”Uc°Œè%A®åðh²Ÿ€ÑÀŽ$‡m]Wè'¿ƒå žVîpµ¸Lx°­t¨T;¥r§H—ØCØOæü6XÅE“E°êWVó%ŒyPðù,(È<ºÍl•qJ ¥`û{¡×DXñl@J–Û=bjÚ‰\§â(RYx?ã—€Œº1CÆ69T3k¨š@å­ÐÒšFF›Œ's•Kж@ ‰,‚-Þ(¨Bq.|Á“B¨X… [ÍnioŒƒÃ¦Bö(NÓ«¥®+’³ »ËU™™ Ù“N! ³ÂI’DwÝ~Ê<ÑQ©Ë6Qm“åÔ—ŸyºÊBîv+/@ °»M󊀊eáv/‘º(ªkQÂ>N”꾊¤ìªH¨žš¼ßgéc.)W ‚Låì‘„Ì…p:™$I˜›7­„kçˆNïÎ ‰• ÁJ)v–!¤L€ï‚I(VŽÃø5‰™¡°YÊ‘JÙ˜ ³2¨ü))îå;OÂx†Ýi[€fv=ÊÀ…ÁNú “¼)×3WLf]ï!Ê£›(ŽŠ§î° $IZG@Ö°2‘6ù@4ÌA´!fË RŒ}ð¡¹t”Š@eRR+XÚq°(Ãó2܈6›80ƒ…ºÄÊÔƒZê=S©¿1X6—Xµ§–/ 5µn±vû;í¶°V•¥ËÌêlªëe@hö´†ŠWkšêZªt–/¢ºÀ•N-m>qRÚ¼lϺTì:)WKÅNØãÑõÁ&ıß+§¥–M;{û5 û÷¶1GZ°  õÇÆ1k¦ZŸ„bñš­÷¸©Ã YT5æa†ÄÐ@zµùv`Tƒ6þóh²ÜUÌ¥ÐÕ±IÓ©„¿:ôzЊ’â:ˆW¼Þ`ŸØXx"º Ll­N·;#û£!MNü9½5Ç@p©šúUvDSZê̱"W ƒ{øÇ½ è`–Júªˆb0ƒÓägÅYZäJH©H+xÀ8PÈ7ZnðgiT5]ÂÅjP7¤Ô¡k5EdŽªƒz\s2J5¬Ô¶Sº"©:"ôzëWŸ¾«f½hâMi3ìG4)’6Ç.€d”°Uvê›hâÁ!K‰í‡šøäXæÒ¶äXMÉ€õ¤ä„m?àÒºvi\·ˆU.2Àà™aîæ½ ƈx[—†‘m5ép9~›ì}­Kã 6® ´ÀÕËßUij_L èÿ‹öɯ±ÿµ¼úã„ÈãÎá†ò£ÿ´„úGÿw¥íå墸S…+YÅ%åI¦šÏMãJìýH1&`¯ëŒx0n é±qÇmóı‚„@âá|q²&Ò§Aq0OW°ÇàÑž&#ÿ¹JaYN!²šã„ýµ9è"ß°\-Ú‰Ko¡85ò²•s!]Š5uªw+lãîbǪžÙÅì´ €vVÊ´Ó;™rb¦¡ÜÌ슊=:¾F)þ¡¤³Y¼Ð ìRnòõF)ÆjŽFbjn2çd˜3_‚úó󯾲§'j’ú–ž;¥þ(ê×Èo~mJà‡ðY¬Â¬Ó]4ê Ïd$|;ã@Hüð‰¬â-[3"̓ԯ0ÌæýØjb¦¨ï‘D ¯«£0tteFa¼dµ0žˆÿÉNÜ…Ó *Ú¡B´VN²Ò:µÒ֤Њê´kôpý¬"ËÄÜŸåý2’b€-êÔ®Úp·ë´(FÝdÈ%øOñÝ&ãEØj€ˆ«ŠF®;c¤´ý tnÇ »eÞ ›Ú%âÀŽ µKé¤D·Ë&½©ü:mÔ1/vʤ.ªyq@QÂL‘ƒ±ÛØö¶•_…©.¶ƒo~µÊð›6báÙлû³æ?ÎÆ ¶$ûß²û%TןaFÚU{0J·Y’Xy®Il.›)VþŠjØ~ ? Û.Ðs‡zvlÓŽC ›Šùté и>ð*ƒµŽøð|@^¸ö-æïl²"J« fkcÕalUEµñ¢R Å úç«J<ÿºÏs3¶ïCÚ’ñ—H/xV9ˆ½j0ÿ‹F€Ð½Ä0¸€¶‹*Ò(Tù•,þúJ9Ö·’kžÝñ!ÔTÖÅlo&!>ª=[XoËQ´± IÝűf¢ÛK§GçøŸ{‚Œ›[{ŽëZW¢ìLઔ²§ÔÝYhoTaq4‚,IðvjÝ$M‹.@#n?‚ÑÒ0®"ñ¢pp€ûv 6^v:Ë) '¨ž²XeOÅ|Щ2Üýñ,{/™Ã6T»µc düŽõ'–‚ª­H<ú(S B°éH$8$ÖénŸ®X´¡6 þ¯[Û?2ð€¢gTSËzŽöíéCL¸+#ó9¤ò*4$T@Ãì„íÔÊÓO ŠìšQ†¼È9õBI‰E«ÈZÁXýQ¯_¢p¿Qæé§OÌTƒq‡J „*Þɼ½‡Ù–fQ} ru4´Ì'P­€O“è_\YæÕœñX⬈ÝTÁ^nK('Xc ¤Ï,·î IŒè±`/ÿ"ˆøe­è_$'Ùo²›UÁîÒ‚í?#¨bš5-±ó “²¦U\gªéåÀ4‘QâöЂ+tbvBMNk–Ь¡›hV¾Nô„S„¡*Ù eC@á Ê ‡§¸ ˆ÷£S¶ÊÑ\=¹É‚$¼‡ÌÓšÑÐ+H DÔ,+Ù^YŠStøZdhÈ[uª‹ÈëËóËŒDÜd„ñùºš†5Ì«B0ͳSØÚÄtWƈ;×i}")P" ¬Ðy­åªÇzhåwV:oy{øâæèíyøÂ¶´mÑ–.µhûX³ |×ÂRqú¹&Ù KO”®ð6Yš^’ãýD«ZëÐÏFúó‰¬~úk­ŒØš’yÒŽ¶4¥ëÑúÁÐÐ&‡â±…»S…MçÐutmµ÷”» Ú49w½ž¤øìÞÅÍ¡|î6®ˆixrÝo Tx+y#抺ïQZ¼Å ³F¸5Ü jˆ£öùcDk½HêR:ž. Ù ¥NQÝ-MT=›ìK%¸Õ_ë’‰€­&¸M†Â~B>øSÖ–[Í鯂V«¥^µ“^ש šRëz‚'óí J0Øj¥!¡u«~t¤•AñJ8)a£tXL.>5ή“v`Õ«7Œ{Ý!̸4?Ù—júݤ<ûÒ…i/’5 €Èqãäp¬>ì»~/vº9+Üc…ôº ·<ÎÂP³I¨æ"O\”Q2lya<…Mâ>º»‡BÉ–'j»A×T›+"VÒ’.ç’ˆ Ñ4q˜„jùJA¿TèñJ¦èËR¹B\)[3< qSÃŽ:@ØÒÜBrð‰Œ³é*mÁoK¢ðò´à±¡/ÿz› a>»°YnÏ“_ÛsªycGYÖåÝT̓Ä1;λ—UÓ‘”mgÅt0C6¡«é£_CC¿ŠwGò0„çTUö.í@c/ÇcŽé™k´Ìñ¦ÌYÝÃ;Ó{øÙ‚Ÿeó @_!hÍéK`Ri÷>È:Y<9’R9ßsÐk£]0ÓTž¤äÌÊFÏ bj7ý,¸¤ï©€£á¤¹ê˜Õü¬Êz¥+X&¶iñ±T‰iÝQ.sÒg$ûwqRÆëŽ÷|n»ìsH戒Í,/§ª–ÙLŸh²åW!>™‹Ý ›ÄéÍ¥“ü;DòH«wñœæHåUºÊ»r5oÍðο&òܯÚÁ‡Á¤[<ÕhéoeIåÕ><Î[•_Þ:Ø[uמÆP¹¡ÿ¡ŠÇÏ¥;xM39è›Ù2êA“Ý4YØT÷oæå½‰°Šý‚ú-›É`kGÖëƒ;'úU#,¹¼ºå^aS=²¿k ™ÿò@É&2z”<ðH^ñm²| Z¼cM~³ ­ŽKì›Æû˜lï¬u˜Ç=É#›áç0UUð3º3›ZQPÁ¥¥Tukb¼øœ‰ù—P(,Öx²cœòÇ(ÖÃЯ}å/ª¼6j´ÊZl¤QG×ë} c3ÅLª8‡).ùgºÍrk) ?/vÞ¡1÷ðÈšPáNÑp:BúLDüYIý’¨x%%>uXs- ¤)<¿F<ËÒçiZK•)"¬;WcÖFWý/Áß>¨Jmª¢ªvç¬ø©¸;5QD?i6âÐW_Ë&’ò’Ä<»ÔºÔZŒðÐ žäáÕTèå¢\üŸ”úW&X¼†2/V½ƒõ *è—Ðì Ú¼ zµ9€­Ý¿Ç£¿d'SèC¬;›ñ««uH„Œ/¼ê¿j2ºÔ[-Ó|è±N6aÕ_FzA¤o7!Õß`zA¤Ý=U_xzA¤ÿØ„TKÊ G®¿ëûMXÍ·ª^íù&´úkY/‰õlã¼™ú²DÆï×àÌ7áÔûr‘ú-T‡¥7ÐKV 9ä…x­óÑUÓH~gÌ%bÎópË®cÊF¾Â; y¸¥úò™…rýÖjëbòëgÛFþ›°Ÿ_ùŠW‰0ù!6—0Kõ uÒ>Fµ9Å&ço@NP”®žâOÃÒŸvsT`AQyG'VžÊßmÝü«! ÿó«AÆéü„´3Ÿó9ÓŸó`·q€Ÿ²L8Ÿ‹o ¶[µJH£°¾µ å«%}vÛ O@Ü%&¿xË\O^‘¾ {ôgsãçk!sAFø`¥1"NÇÁôíVÍ"?ý*¿hЧLÔ}—Yzƒª}“‘®$ôñµ(¹sšÏù-~£’¾gŒý°ÕPOÊ_òÄoûˆ[Aœ§, 8¯¨è•øX$ÑcŽó£\¶ð[¾ÿ PK "U7<üì§/:ªÊsrc/jasmin/parser.javaí}ýwÛ¸•öÏÉ_Áæôœ•½®MðSšÙyÏzleÆ[ÇÎk)ÓÓmzt(‰rÔ‘%¯H;“mû¿/¾x € $[¤,³H› Äà‹ ðíÉÉžñçíɉÕÿ[“Ål¶ø:ßZ£Å8¶¾F‰uÏãe”ÆckøÍ:ûôÑz´‘ý+y£¥ÖEsËq-dç·¿ó;ÖY·o96²ß>S·÷Ñè×è6¶þ%wÓù÷oßNïîËÿ~Œ£‡ûãåÃ<ÞÅLJßn‰—åãéB½òNgÇ?GÉ—4Îb\ÔÉá¡PE¡ê÷Ñ2‰—Ço-ëÐúÏÇx™LóÕÕÇOž¼½Φ#k4‹’„çñÖŠKãù8)Vh¶ðgþŽ_'²œÇ“èa–b0æIº|¥‹å1ÉײxÎìùÖõ÷äáž$¾ÿç[þîYþŽõõËtôÅJâ4±RŒò˜g›Œ¢9®¡6Ë‚t=ö°•@a‰PÚÇåbŒË"ÍB3Ës¹HãiÁ$Rœûd:fVò…`0¸‡—ô¥¿üõ/µ~°ð{–õ0'áýrq×K—¸C&­yüÕbiüÔßéCï>Û¶ýÙ ú¯m;Ÿmÿ‹Âü7ýë忽àõïð²/Þàó߈¼¨¿Å—³\þ—ýF®+e„\@|™äèH/²ß¢H]x™Þ_´×ýK~ҋ䷦Λ½¨«óÆ/ªu^ó¢ïÈpúâËbp|ùEú[hu‡`îiêLoˆ/†R‰(GE®3RpFÒüÖáì¸J‰®"ªô"ù]‚sèÉÒßbƤAu8;YÇ_õÛ×àl+%Ò´ º-¡ ª¤[ö VSWý­–œÝPÇS”&´Kp•žå)=Ë+ÕgÒAÆpl¥KÚ%8ûr‰ÈUË •ŒÊpöÑ&¿5u¦7„]¥ñ(£jë–=¨û-êó“^$¿Ë8,Üä·ŽÃV¿ˆlÐwEŸmåA$áŠõ™ü CPþ2r<Î[Ùƒ¾ò¢Üב#‰-ô¬@Ñ®À壇ð[;VåcÇ]Ñ®¨JÅÙåÃNÖ% äßÂË«ÄJ¢R‘W‚³§/+ý­ÓgÏW$ÐýÖq˜¾¡ÃH¿Å¾­H¤”ì+ðÐß‹-J(¼(¬( ¨T–ŒÏ~ ”¨vQ_)nJ‰Êx„Y›(uÕ‘AQ’P¿…—CWnåP5T$ ƒ²ñ9”2Bô_õ·¦ÎÈ–[™ý9ÌɈAå0¹K"e¼Fòx-p})TÌ'[©³LCâƒÊ Fç÷rõ}›ßÈ+v™ð[©³£ð¶£–(ѳPgWŸmåE…Ç‘¯Ç A`Qä*pÑß:œ•Ñ©c•“5`¡Îpc“ßâXõ¤Éo±ä5/Jƒ ½¯©³ãHƒÿýÎúçÁ÷Ù¬ót4ŠñÌ:]X÷%óO6§¥óM:»T§œd꼌Ӈå¼8f·dNü‡èió[ZÞ 2|ÆÜö[•¼ñh£ùŸ&“IÌMZàüŠ 6œÌ¬¤³lÚâ#\Q}Ömÿ˨ T2)BW6B&^DÉ2Kyò!@*d)‘sl~“ð[–r åBʃ”)²Ka–BYJª˜^n‘÷7ª@™ÜEyÖT \n)ZJf>ÿëÉ÷©(Ë»`žBN–"SL2ít<¸O¹ˆ¥)\xÑu!¯º>¤(´´×z|‚+w9J}´óKÑa­>¤Y°T1OÏt¥³æ¡Ð*´J@åÊR¤øsbF𘠯òv  ]h—Ú…VO3n ’ù ™’ù ™’‰C‘/¸ð˜ ¯rÉ|ÌÉHJÖ#Z~¡KÑ;$C ÉÄjqH†@2’! d$åËò h¼ ûŒëÈ L^õ@tD÷ J༑W–ÃÁ=ÜÁ=hRäåTx—[ø‘0Êä")×È܉<åÀ=Ez gÒД)R¥“Æ 2ièxf)׸æ20¤&În¹ò åC*€D¤ìRáZd-2,´È0ëO4%KC/¹ò åC*€¢¤þ$ŒL¤cÑ®/‰ R¶AÊ6HÙ–ç¸Ù%xŒ ÜäÚ gälƒœm‘o(UU€€ÏB <(¾®yEò ')¦aXà˜0„Š„P€?øC€Ÿ¦dŽ ýäé€<§òtŠòt@žÈÓy: Oäéåéhl[ù±|Çñ@YƲYL/ÖŒ™Ù³3™È®"cP‘qíè¥ KéeòT™Š|À À °1z9¹$0"Д"‰’øI*‰b_9E}ÀüÀü˜A=F¼|°!hJF'ÐvoZ¾‚*O èŒ'Yù$ÅÊ¥)RA–ÒZyŒ„ĨÕWF®@òE¡;c39c..´Ê8.ËÊ õB}ƶȬ¼7Nñ]£‹®m·¬íZÇÖqèz M‰øÙMÞPÚR)Ôe%î¡ AÇ%Z„‹²×bâ !GУ¬!eD )ÈÅyêÛEù•’ÏŸ(‚C󎨈!¤±%Xlc°rÇ`å’FBhPE†çNŸgOîÄ¢n’¥–48emazÜ.}mXÀiXÖGò—`ÀÀ5–hIýl’"ÍKÙŠ4©Tȼ’ĉÿ"i#@½rÄI†PÜút-§IcSg"¾G}…ôYɽÒ6'­Íþº43ò0ÉÙ|ý#t …&Ì&¦a™àq˜õšr!%[Dô’©üÕ§x¯¡))ž±Xnzò!@ 2Fp …™J*A¥@bP…Xòøp35䩬R  1¨M¹²< 1èD þ‚T!UˆÁs—y„.†@¿è7ý&)Ù —òWCžÊô~#ÐoúDÌ<¸éC*€dŒàÊ®é™N¨”•ò RTÊÒ‡°05䩬RTʃJyP)ªBryP)*åA¥<¨”•*› •ò¡R>TʇJùP)_^È.…<•UʇJùP)*å@¾ˆ™7HAÆ®¡ìZ‰Ç0שèÔtj:5U*DÌB~3Ó©èÔtjü0U")ų0N@§F S#U•äÅ[Ror)r)zS3@ʤ@ʤ@Ê€œâ˜éR9¥;€”£ã¹}:€TêR@ªHu Ž(ÍofHu© Õ¤:@z‚——^ ³ •]+crq6Í+Õ†Jµ¡Rm¨T*Õ†JµI]dyÚP©6Tª •jC¥ÚP©6ôº¶<<ó›(€Tv­¬R1©‹,O •Š¡R1T*†JÅP©ŠEyÜt åBʃ”©R¡*SV©*—Vj ‰3l^©1Tj •C¥ÆP©1TФOÞ*5†J¡Rc¨Ô*5€Æ¢M7QVjY¥†P)’RÆû!Tj•B¥†P©!Tj E̸éBʃ”©R1 T™²J Ë*5qô\ =qÍ€³Ÿ ìçû¹0<¹@z.ž[\Mqý\`?ØÏÒsô\ =WÄ,»Y†Ôš@¯›íØ 5¤&€ÔšRh"bæÂMR>¤HAÆ®©v줩|JgR6$Í1|¸™¿òT†” HÙ0<Ù;–^ò åC*€dŒà¨lv.Tª­N•Ä’l2l0Uú,Ìd›u“©°õ¤]6+·Ap¹&0rM #WÑÆÄ@ İ » hcb bZv`mŒ@  RTJ]Ìóä>ËÂ+”i5sæŽm’Í–Ù½½ŒX÷A®On‘ÒˆäÙŸ q…>ŒóFŽò þ½óRôAç>Ë•þLÈlÅš(‹—xA9pj”ù7ܯ©x: kwø¯ÊÜ“ŽlçK½£RðrÁâÞXÔ7™Øc¯T"ÅÏ'Ë1Ê2]+%RBfè%\¡cpÙ ¾!ET}Ù‰"«md‡ìMn1¨qK;6‹sfV8mPè©ã 88ºˆâ8¬A„hs:6sCÖéÖb$–íØþ¦IîCbÿ|bg’ûÚ#žÐ™Ô>$ºOêL9¯„¢½ª®Ã mƒ mÐg>] ). *¶‚ÖAÐ:ZAë hTl­öÇì’ “ {eB SÖ:àù!híòª,Ø$åYJ7 0|g™ªÁ@R<;W,…X8€EÞS€À€@Ú#/8𘠯ºù5(ŒCàbÈ¥^²È„@¦ p¤Øq©d €ef’âmVóH±ð颛(R9¢Q Näxˆ‹‹5/Ó‘É‘÷ꌋÆN;QYÉÃuÑa…PUˆU@Ú¸T ‘aitÒIDe•7Êé›KÉÁN øøl„lÈe‰X8>Ii¢nØ32z9t˜°f-³’ø#®6 …½ºª/ðr‹¶Ú $n-öWîBK-TEì¬m5øåÅâÌŸ^Ú;;¶P~¤ƒ&Âk­wq8(vb²UÐqÔ=nÐu<ñeñô†o8t£½Cýت F/6µMO7M‡6Éѧ4êO2B´á²CÎ'•1µÍ<Ž[ì0Ô ‘£7õ­îiš'øìº…QCöú»jdhö¢Úlê¬ÄuJJÔÆÃãë(X¥käIØžŽ2=ÃÍê_tò]–á|ï‘ë+ý[äMgÄõvüBÝåîhÍa:¶,'K­.]×ò$sk©Åi)^;+ÅÓEà’L²ÒsQ]½feÝ8(‹²(QNá bj)þ+'‚?ì@ãú‚hÑc-Ö†€âzj_ä$MæCã½½%ŽÛÕã‹S˜ûC•¼a¡þžž°8¾‘ÐX',óRq \[¯Â쬒#›£F=ëúƺ²5\‡…v™ÿaŨjk\¼lŸfAS+JÇc˜«NÎ óÒšçÀxÐ 4ÍG†h´u•£>.¢®³¯]êb‰Éuo]隀ÒÃbéša€ÖQï“rҺ祌 Gº*ˆcŒÞ–qÒ> ÃKQ4{õ*ËŠžçh)‚ÑÂ:%õßlm§8¶»£ /5‚RWEá¸ôû*ðu¯¬ô¼”JјÂ4óv +¥”.¼ d>YÝúÄ~,7Åý5¨NZ½]»r­3‚­fì'ˆ ã€Ü„®·Ò~þÌøËç—õ=¡|Ø„Á&¼¨`À-j½¢’F+8®íó³…Ëpö}Úe]­ÙÄ*‹2)Ù ‚ïŒÖ÷€ò9îš>H^.Æ¡#6ÃoÙ„¦Jù?{8â±Ò†mÇ«Z7`¨yæ„äŸvQy²‡;e’È ÓnÉʇ«]y^v –u^vM¶bŸköpÖYD²5¡Uuƒ©ÄúYe»8âe’¡Ìq`—Ú½¹êHdžÛ Û7+ÓÍRíÒí@Ì>YÝÁ¯ÕÖ’ÔóaÖè#~D5*óly†]h$ñáâáB•¥‹ý!œÀÃ¥:B,Z8^Å Ôëf—Ž íR<Àek<-ìåp¥×导ŒÀ1ÞqÀ'åƒOªt ë pN©[+4¾·NIÂwô.¹³Æ:%è§ðD¦Î*,ëm62•íÓÉÝÿÃÉgîr¦© K1÷.M!HÉÞjz)ÌR¼à@Æ.¼êæ×xaâ:œ7¡ü^2éÈ„@¦‚o::Iå2égkåÌ‘Mp˜à”˜¢¸y&äÁ;–šûdªÏ³[Á¡äP:â^Ö! V­'An‡bW¦G àlu=˜ù³WÌcÈKä]'g/¯˜Á’C—È#ºñ›½ *·%J7ã W#ÜÍ_êäŒ \´çJí§a;ùÛÑQ­³«7ȲŸ4‘‚èÂbK¤cYÍT„éîídX1ŸÏJ.¥a)gåkѰ§nTº§.,Fd;Ž­ ,º\ô²1DÈ–šÂ ,AxÚ/Ê‹„eævKc~Àpµ94[X@ a1tWaBë^ˆ[„¢¼²ù–°ÌNûÊRA–â+}¬>J¸À«|ÉσÕGV=X}„ã/hJ‰¡€s0FpÆÈƒÕGV½l( ©‚LÙ2¤— $•ˤoð1“äCÙXµ„sFoo>–tÔGsud#‰·ŠCÙ P™Dî”qhèG œâCPIñX¹¨°£ß‡³@ü¾ý,ûb)ó]°b˜L•G˜àèôZ^{ÔzeYêf,¬uÆ%º#ˆž ‡Îæ¡)¹¿àÀ?Ppj³£GÈiv >y †ìa–ÒWÑ/]›ƒ„x„Õ2 E‰ó^f±ñè98¥Ç²àb¹-à‚Ž )7O¹ò ÅZOœ½óf,™^`Y‚õ²À¶ê¨8à#€>8à#€>‚NQÝøÏZ{¦ŠÔW}56¼K“hudŸ Çs΃”²¯bóóÄÊíSÞÍŠ}4ëvZ5”Û¥8³ÏzfReOîöä8K'ƒ"€ƒs8.'€ãrhJÑc87‡¦ÈX([8ÉÊÉŠŒ‚]@nò#­8Ê“¡œl¤)xC‰¢—àU~2”“I—˜]6*=)DÞámÙ™•FÎ.Á .<æÂ«ü4+d¶Af» K±Þè-‰‡‘zLa`hˆ é«äÄ?K•[ó+ãn .=š½¬;#(§tœ)…òaòòÎg„ÉAÙù•¥'Lª'XF%§WFÚ“+ÿƒ|Çãÿ-ãñÃ(Ü.ÒÅœÐ+O<Å’gPÁ)–tuÀ¦-Ä>¹ø}Gõ´<;Ôé^«/#(™Ì¦X£S%ðÝJOÈ}•<ê±ÃoRº´Já°cøèÙi;:1?ÒP+¾A¹Ø6b!Ú¬›hí9zU=“UÖÇ*ã¯cTV2uåˆÆŠ/yÀ§Á¶6óRäNÜU%‹ÝÓÑ=@]]ù:²3…•=9ÄçLJEÎ:N¡/ˆÍU9ëú6—È-cî\4–¡ËމG(²s˸ªD;­6Ö*SÐÆYe%ƒeæÆ:vS<»!Êv„NæÏ ©½â*]–?†TÚÇ@º)È'7lúµä¯ìëJù@üœð)Ñ—ö<¥îÄœÁS ºMŠì«bÓ]¶Ï ÷2ºÿŠDJÓÓ…—›+àØì¸2²ßŠm›b#5ÙÀE\ŸtûÛ—%ª¦GwQ©}5NÈÛ$Ûâuò·‘êJ»;VPë{NáL†rúáö1Ñ•–ð*µÂ¶×c—¶{@‰ˆ¬ÃÛÔRË:žÜòÌ=êÌc‘ï¿x2¯y4€ß•F©·a[Ï©µGÂ-˜R•1*Ãß•>ÛƒÆõT‘=:(:ú‘ôujØ_;¯3ßåQ„àLHˆó_[2ï Áîë̬Â|ÇÖ%gñínÕ8—µ²žËšÕÃ^“V±å®5ÞWÎ;|awÔ+¨óq½dâ4ÄP“Ù«·½u%Jkgõ èa…Ö¤îC—.)‡ø_—®º¹° i“ë 1ÃkëÌ–yìîëkmÒh>‹ÍlÓ][<"6@yêNÑfÎEP»iÙT¡£f¾·íþšÇŽ ‹F#VÍ–„7бì•ñsËÿWlóÅ:{àljv^ö|Ê•Ãså@,>Â+óÿ¯S‹WQw›IÃh$ŠðÙ™'÷· ËÂçç“ø¦½®;óù5>ËýÔ4ÖÂÅ™çü8< ia¡Úz—DKlÕ FNˆA bä„x=œ¸˜'i4ÅÖbÂc.¬x>Šî“‡YDfQ’"(Î>}ü= æXþž½•d‹áß„ªh2Äà<¬é|šN£Ùôãe!÷ÇÅtLàáIë€6 ¶°„¢¬,ŽQ§•~™&¸QÉãBe¿ÆVd=à'­äáþ~6ÅÅÑ7y¦r«þ-zŒ£‡ûãåÃ<ÞÅǽowÃÅÌ/¸d-ZÀtžZ%ðcƒùÃÝ}®Ýl9`b3–ùcÇétvÜK£Ñ¯bv ¹p´®ÐtqÏ,ý²\|MX†³h~{ÜýmßÁßf­yrh¢ÙÌ"= çiÝÆóx(ò¬9,‹÷¢¼å…6Ï›#«nV.0•ˆ€!@1žŽp1 yb™Ò¥K“ Ò›zSèË6î¿úlòÛ–å•?!dˆÔP¢îõûLÙ8äÓù8þ­˜)~p|»S„“òŠ—ËÅr³Üè£J~T6žá'ÒU@s¸‚â|在ú.> â¬VvÒÞ¾€MFÑ÷¬Z<õ½t›v‹÷S!iªò¼=ü&¡°Û8Å¥ÇXIKyÝ7Ó0RtkƒNL¥:(ù˜8H±¶ã\rápEONxߤ ‡/pAz¼Öyù3¨¯PÛ7p›6ö2¾Çô; ðµXl˜u‡Y<º¬ëŒð&‹ƒLëÞ@^ÇÒ»ïþ-çäí?Xx”ÈòÀ5xóÏ·Ú"'Qͪ(¸Kþ)K_ÁMÖû–¤ñÝqüîO@ mÈ–¦…ŽÔöÄýùíÊ`÷ø‚Éî4Ñö8¸YÒ߈øÿ¤³=Üh ÷½|؉ÂçÕÜÙš!íïoYÏ¡ƒ+~‹ ̃ÇhÆÚ¥¬ã÷´}‡uÓG"‹@”†<ϰéS†…jŒf“Þ<àÓVãw~€\åü§_cëë4ýB•çö€ÅÈ›PlI[™¼e:«ÖUr­6+…W66…76A…6Ls㨼=¸¥3Árvš,wVÖ»øÈª©j±=—1îÈ)'2ZFÏHæ?×0J0v$°6¿†›s/ó¢ úè‹Õ*¶úÁÛ¬î‡)èØÚèPù3Â’X¨ÝùÎÂÔå¼#JƒÑ›.­ï¾ûÁ:ï^v?X§WWƒ?^\“XZ«×ýhaõY¤lL;ïâëçø‰ëþ€>Lî ÈB’?œënº½O—}b>̰š¾yC0žGwXˆIŠ/·Z%} v‘c"w¡)»Õ¶O%…:<9ª¤1CV5¹Ù4G¼xí³?ÿ~qj,'»­y¨½š‡nnd’̦I:Xܧ'á§ #튑Hã×ÈH$ûº‰”ñ²Œ´\FßDFú f$"•a¤c¤p%#]öF⬴/\ãÔÌ5ÎŽ¸ÆQ¹f'£ Û )íD²¯²¦HU·z ×Ðù®È5#Ì5Dª=ç¯Á\¬äšîÕ§ ÙìᨃvÕ„ãîˆp\•pÒš™9Ý5§;áæQÅM¥’ó¨ê¦Ò±ó¨Ž¦z=wçw";ǘS–¦Âí9Kû fi%K÷ú7Æ"ܹEˆÔÈ98÷ºñ²æà‚FHþ°sÎ`Ï©¦É¡·’jί?ý˜sÍ4ï Ù²YE6}N6Uú¹¶&›sC6/L6îJ²yy}Ú7lcئlóÞ°Í ³³’m.¯¯~2dcȦdó_†l^˜lÐJ²ùñúú2'› ÜQ ×®YÁ5¸‹Ä·ñ2#þsOØæ¿ Û¼0ÛØ«C~>½1lcئlsfØæeÙ&\ºýãŸû]Ã6†mšÁ6?¶ya¶Y Ýûùú¦oèÆÐM3è¦gèæ…éfuôõÅ•!C6 !› C6/L6šðkº§Œ2ŽÌAÏ&’M…Úc+ÚC¬R}ìƒâ y¸ê5û)Ús%ŠóK4ûˆ±¸ÄµHÆÕhN*šC»@Uêc7X}4q±%êÃ.W¤Qo¨Á䣉”Í÷ƒz¿û»SÔm-ÔDÜ*ÇPóðÖ+Êxkœ}bTê¬zˆÑQgCÌê$E¾"Ui*3²@;áÄê?¡öœö/®¯6•¨Ì¸a^Ö “kOÕ^_Ôã‚ÙPiì ”†]«B‰ŒçÅx^véyÆêÊ/õñMƒ½.AGÇ7ûër ˆH·W"­Ž.û2¤OËÞiHS©0T„žoK”ãqšL‡ÓÙ4ýÆ<=éårGËà´ß¿ÙÎÛ’V«¡ºXÒŠƒ5|:¥5ìè3‡—ÖàIùº¹`§ôª<Â4ô$‚":fެZONŽœj±ÓÈy÷ñÝ}ú-;È~ÛÉ/nl¶ Q÷W¢®UÏwéW{½j³U}½Îf«ã,zÉfôÚZÕV¿Ž4•YØÎ<º¨v]'»ùtÕ¿øÐ|<½9ý0¸¸úå¢wñãe÷yÚ’_ywÃÚïbNKʼnq/ß}¿uwÀc¤¶F¦C¬ïîÓ:DÅÝáÓö©3°¥ó•Ý >FØûÐ=94¨?u´õzÔÞ þBˆ³e³dz;pQqîºÙnf$L…jðfc£O–ØÌ‰ÖCíwÊ >ï]üÄ=nÛÚŒs¯qYç^÷aĸˆªã—ÖlÂ%î·R8Í¥?Ÿ­íŒãûeL>Ð;~ü‡ [EdC€€–‚}~ÞýxÓ=;íwÏŸÏEÕ~——õnÏoðR½Ï77ÎG³žZ~ÙJÇ·0 ñÜ’ Fs7@Ð/Cð¼{uvyÝ»¸úið¡Ûÿ¹ºÏUù‘-uM¬Ò/lé> Tùçµ _ª2¨K=- Òˆ.ÝQwµŸPetzÁ®ÝÞœ/¡Fãq«6ùà÷)VìÖèȺ;²* ?¯q|€Ï’oó.<©!ÌP¹r®¹óÞŸ¯ú?wûg˜·’âÒo)öHiTu+ÒÙZ`o²‰Ë”ŸÓù<^(F’™tn_\]uog—§½Þ–Vš¾€Ë¾ EÓQe_ð ëe¼ë{sç«-7Hîãëbè}ìž ^@þ7â$Ñt áñ­6EVh)Š¥Ui)ºU[JjHk aÖ½/tXûNÐ*gi^³4o³4Omžq“Øq}“Ø/‹%Ο¶IÖÐ)Ù2ùøÕÃ ÙŠŽ¬á‘…'#­„Š1>Æõþ…dÑ:¨hlóNµìl¾N¿~p³õƒlûÓ{/0‡q5 ›]ìuž 2½ó/}ƒ§4^[ ýK9"œ"’ƱŠa9Šúù¨^£µ3Û ÝõL]kì4nƒ5Ÿ­×M¦ñl¬NXß_t/ÏYgùÓb9Þ~çk _ë^ÈøZûBÆcÇ×þañz2Þ¼±†ßÒø/µÆQJ\?âîxÇãx´Ç­Çãtqö%Zž.—Ñ7˜1ˆ$ú)ÆD1úé/Þ“¾ßúzDs–ÞÜ–’ÐÉ¡¢X†‘Ö3’¯2 *K½€ibKš™Åfz›@J¯5â&Ï \âD ïîáô;"œ‰ÑÖõP²õ-²„¿(Ø„$ðçÚ…Æ(l¸QøöþÜ*|SYè‡'‡ªr»p=-¡-QàªgUcn†ª½ªôbÃan°yèvT˜=Ä/€¨/!j,Ä ÐdËÚ(ÁÃlìCc¾°}X—yHW/Z„V„Ë`-|/eS¡éèžÖ½Ð`ËÑ Uºãå—­}G‚Ô˜›Al)½Öhˆ›l2ú ÄÉ …#øH„¯Rû°©‘®§ÅNUÍFaÙT5dŽý4ÎâÁ8žD¤‘Ù6‡÷§™³ëËë+fëï…¯žëW©oïÂÆ×ŸÂL!w€ô $É×i:úÒú*t‘-UÄóN%´ÍæõJâJ‚Å]~£*Â&Àû2ùUgw•*†nvW¹bè÷¶ÊŠgju)†Ÿ)EؘpëÕ jº¨%»·¼0CÑLµ6Ñ.‘þl"ž VJ§£à9( ú("Š£—àØÖãØ,ðš:CvB½hyË&ÈØ,#·²g‹:—Lpîµ-šàªÇ·ñ’”A²ç?kZ8ù‚K­Ñº&Ù×f`g E ©¼¥6±²1ˆV6LدyDå*nà$¶¥'£¢3ffºžg‚2žÙ#Ž)|‘±ZŽÑªN³µæì»¢4Ù,ösEìaª2’%{B_ÀÚBYÃ~ëAeë³Åâׇ{ã½Þ½÷ZöX_RrÏܶ$ç๿Œ­Ñ‰õ:áŠ:‘;«‰M hÃVæÁ´Æ³P¦µ…’™ÓÊ ƒÂ‘žÆ¯ÿ ¿¾DSiÂQ¡›ßi©Têçop€•㈔>b‰bvo(¹6i\ý›áˆVáH7Ó&ÏklÓAÕÝét$ Ç(Q§ʆÁ×TŸ?j‹ø3îÙ–¶ìU’¬£ æV \¥©Éê ðŠK‘–µVñH¼€û¼fʼYm¾¸»ŸÅ¿ ¦ó$]>ŒÈGp)ÌýÓ/»½?]ôÏ~æþÃÝã‰H`kQ>c ­×_ îåõõ?}äèrÝ6ð¾"xùצ¤ñ è^Ì“9Ý¢¸®.Õ“S©«KçÉ™ÖêÉ!U˜×èŸ×퟿Dd÷ý,š§¬ÐÖôÈšWçÙréW U=0²žCܵB}æÛ-#UÉ$jÔN¥L¢Ûè\9“âuæ¨F¦£º©vŽêçZ§N²ujg[çÅè–-Â×¶Mžm9›±-Y°4d[ÙÖɵµS­aÚ¦ÍV¸ÕVºÄý4®%T[KÜ›aÝç².ÚŒu÷‚qÍDÙL”6y-ôÑä)²½–>®î {öš÷ˆ!±FHÞ,mØã_’=ìÎZö؛ٞa=a˜Ì¼ð\æÎcšL%í¨do褉ΣWê©BAõî 4¤*¼õRü¿ñ&í ‡kYx/ØWÕœJÙWç)©œ}Ÿ 5¯E/#jü²Bè‚Ï^ ȬM>¡ià|œ¾N í4_š9À5«Xk‚25ǹ:l5­4Ó¥UÓ%ù„RÜê­G)ikpOLÓý×v~×ônZ©oÅØk\*[—¸cÓžiÍ£h–ÀéÄj}=Žÿç_l½c7ßMÏüÃÊ{ÄŽ;8 ¹²´5YOÂ$éb9aM‹’Å<)«“SÔ²7ý߸ÕJ¾,–éÁ£>‚2—™V®Ç3¬m²Üô,Qy‘=òÄ…’ÌKrYÆ÷øÅA¼\.–­w\4¬èXsã±õ™ ñù…›â3oÉÏáCjÝ.RëÝ {þß…c¤·dmÇ#¬qqv­¥m‡»±l´\ôªX;[Æ·5Hs¯ýHz\FåU8”Þ¬l6Ø%Ó*»San8­´;ig‡ÓÛÝÍe :-¢šGÿ/]\À‘>^ϧ:'‡±˜Ãü×2±¿—ö„›Ãz¹9Ü7‡5s³_37û;âf¿^nVc*æfÝBL Ü\X„Iê]ƒIv°“ìb&®wñ%ÞÁºK¼Ó%—âXŸÐ¥”˜þ—Žõ+×S^6×ðø±Øãx¥é²Ê-Æ™Ö@gÚNBUöø¦·X¤g¸¿žâîÚúÊB–dÚØ’A|›œÂ.*„ñì¬å¶câ.N¿ ¢ù|‘Fd7Zöå ڒ샜§WW×ýAö]NR·†}pM—Öy÷ê\}âÙ샋®ÑøÁ¹×fûðZá"HîìW ¦´¥¤]0‚§Às] ‹ÁûÕ–jÕF'‡«ú‡™´¯U2¶ç@h?ÊPð7åÆóu‡´F­q|WÛÅëE®Z}ôc´`®GwѯñUü•ê¦.1B-’mEšäžê:Y7^«AèIÄnT¦V$·mb’}mf1¯mŠÕª`úÙ’~âå­Ä?-Û‘õz¨Á†²ʸ€èn Ò 5“?žÞœ~0Sø´ß¿±§Ét8MÓoƒôÛ}L?'¨e+fDÞ6iý:kôµ’ìks¶òz‘2ªVÆ‚·µbrW'U“»nÆQ¹ë§%6ÓG¢q/Þ~ }¼E`<¢B ú;ÐërÃ$¥Ìb1LåMažC‹’䯴 ±"LE›ÑÅüQÉ*{±êuø4JËU°ßXnw´ž  Þ5D+p,e×ÓþÅõÕ–›b©‘bIöuS,)ÃPì+ X-³ôtÌJ®?‹Y« ÕñiØ.º¥ªdR¯¹LÚΙ4™Þ Ökïâ'F‰[­™­9ëg­éMoéŒ/©f¢Ú\;2€Í o­Z„¹ZŒãû¥ çÝ7ݳÓ~÷üyZQû9.ˆâ^ ìA‡Ã0¾Åµ¸~›“%'Ä?_õîö/ΪƽG ªøl4Ìk`_‹< ¦O—½écL1_ááyFØVäž‚xе€ze€–­mH÷RwH ”¯J§ J˜… ÷CT†an2÷D»Tsû× ¸ç(† Šçg×ç]æÃQbƒ‚gsýa[‡g¯ÛÏ¢4î;†¡V'Oûg?‹'÷Ç@‡cÿç›ë?õ¤Ó¬ ’ûޤÎÇs~yqÕa2(î;Š:ÇFñÃE_@ù\ÀýrqÝâB²'ÉÙü´ åYréŠV~NÈ´õ;&–U<†Ä΂µ+.zû®’®ÌÁ1_«_Û™vàgšÕò1·ôðì;Jéâטì™ÇƒùÃÝö‚wì“C"ª±À×ëÉ<•°¯sm½À Ó431#ÍZÝ•& ³¹þ‹€ùõâù˜„‚,ÆÌ7KvÌ}èö¾>®ÝPêµÂ%} %µªóW!ïäj`ÆÖµ˜óp®x"bÎñŽF£8IørÏÅž8_§5nþ›Öw”%9ßšR.= ¿žS,ͱÞOt{gµîgÓô/Ååö˜)÷)Î’cz™ÑJoz;°þÄô™Š–å4„é„ÓËÒþëÏáÔ´–Ã.‘srJgÐZKSùá‹ñ ¹GÌ“´•Z/`gðý\2ch¬CÓï¬AS0 ls­ ¿-;ÅBdqôîQô=@‘Hd&ukQ ×¢ÈÓ$¸8i¤ fÜ@„NÍ!~zE€¢9q#ýU(ÒßD´Ázé ˆ&/4âf¨Uêñl¨ÓÚw ‰ ØøªpÌÇ F9禞snòK¶^QÃýÛîun$wgÜoXcçž×Ö¹q•‡ñÒš“¼YºÖÎ=7{gÛ–;÷VŸ‹®rABíÜ•.Hh¿‡L—$jüf:4ÙÔtï]uoùD÷$¼.še‡Ô€“CU63YXj»Õîÿ·ž;MÍß¡â5z¬ú0Õ {Üçžß\džÇ|È“i<VxÎß_t/!®€Ì½hlAA=„c÷HÜ9Y&EiÌ<Îä3„l]—ýTϪì³Q… ÖQ,ªRÁ:Ű…¨â°…NÍa íšÃÚ; [h«íTíoÕ(WüÅÛPç(¨þ‹·…Ï'W9”ueÁ.†²@mL€”Ê*l%Wi¥¬ˆ*ËÕ4VVNÕmæjô®ê6+|H™Q÷Ùóp:^çÏSU™&ìTEZª1*M)©î¯_)ÅUÝÅOÄJå9uêrIµ›írqµñ%ázÑxüž˜•­VBÍ›HÐã±fª~<²ÞÑóìÞí2©B½àTíœæ¦pe³‡{C‚m¦M™3¨6q¥s†výs†‚-\ñœA5†«ž3è¬á:æ s¸Ú9ƒjW}Še8ÈÅ98¾Ó?NçãÖÁqü?Ñ,i½»a²Ð·gñ»ƒü{+o¤9ûùAs&™òÇ[BÞ¹Òdz$.ŸüË]ÌWeµiÍœ:«æTX7œWöæ[øOþç©cCØ99Ô’1ËÖÁÓ†Š-×ÏváJÜq—.Ä7˜òò~÷uøáÆóT’ØŒ# Û'ó¼IIâØ5žÎ€or}ØwŽh°9é Kô8òZû³y¡†¥™ÂQƒ5,Íè8¡®¥½ÍSÔ¨Þô–èS+“ƒ÷›mµÇÉ´'ËרÍZµñµ!Q*¹Þ¨1+ÏVœÖUÅ©cX§8u­oª8çª9™ iÊ4º€QµªÃÖÓ¦w÷LÚD »øðñ²û¡{Õï1iÌNo›7™o­wQÈ CŽe\N¢QöÍ¡­OÃJ¢€m¾C²VIUI`‘DUœÝ»k[BÔ¬xm„(ÚQz­Ñ7ØÝbÂ/¶Öa¸™5°õp9.U _3•Ía+˜ÉÃ}¼ È«ëÞ§Ý›Ê?ôšÄéÕ¢G £ó‰ ?÷êaªÍkaXv-ð¡x»™4¼ÌM%EÔDùjé^ªJs'[ÿa;­ò¸ÇîÕ§Ï<‘g…;õ,¾²p¶˜ãFÁÃæñéÙÙ€ä¾õœ189¤6£áZ¤}-Ò§WW×ýÓþÅõU}xçeÔwº§E½×¿¹8ë¿æø· æY ñ]#îêõüGŒÈéY¿F-ç%Äw¸£Eüâªß½yzÖ­r(Â`¾kÌ‘ó+<ÊþR#à,ƒö®Ñ¶µhcº½ê]t¯j$u(Â`¾cÌQG‹ù/×—X/kÔñ¬ƒø®oëmõ?_ý|s}uñßÝóíu¡ƒü®‘µÈ¿¿¸:½¬rš½Áz×Xë=n=â 9«s>Nò7hïm½×íãÍu¿{Ö¯“Сƒù®1×ûÜ>Þ\ürÚ¯Ñpã¼w·ÞãöñÓ—u2:Ëß ½k´ Þ6"¿û°PBч¬‡±à@+À˜4ÓæÆ} ÉM±“»G® ÈUøÚÐ@»Ž8I›„b3ÕOt_±Õˆþïm Ô•²cjåGpö÷ËÅ}t¥qöäd¹¸£%)ÏN'VkE?'¦ÉúË:Pʲr±ù»—Lm¼ip§¥Å´r3qûMmèïf¤Y×Õ™¿ŽöïgŽ0¢…ÿƒeo^çäÈc›µà GÐH‚ =_|5=± Im0è×÷_~­mã%¯Ñתc@m=kõFÑ|/?¥ÓYrÙ1 lÙå\[)´£^â&rijÜ8‘8AÈì†çǘò0–BNŒQA¹p€~Ö!y§RsE²Æ:´¦ÈAƒÑH7!/^­VÜI£›5€,‰O4nS}èªä?pž.bÈø~Ÿö`ÐÔûŠÈ§|Ï;•B¥!,T|¢l ú€öl.(w ãù2µÈ—Ïëcæ…vr.–{;\H+ýRÓg8‘›åæœÌ°Çö”¶3œŠ, ߯_.ê£Ý¥bÊ Eƒâb­ Æ´S£*!JɹlúH1Q2!\¨¿¨—úHþ»½6áYÀÃ{iAÌ\¸™!Ï¡Ø' Á¶r4j[‹™z î9Ìzüo¤>¥³[:QÆJo0Äá1c¦˜+¯(-HŒ½òéÆÚL$ama›ah1Ö«•g! Ôìj·ÛîHPt¾Ý]ÑààígxsÐòËþ!ýõ…¡¬ «j >SÝÎÝÎL~<!;Sex€a‘‰Qmî1LAr£ña1+©I¿xѼg¶÷ µ0ʳÒnöšÌx¸mX\ržùËÆŸ`í;ðÂi%ÞÚ);¾ê ‘Ehi¼­»â;¼!9_¸L*ÂK YÖwd‘°øÉg'uXö‡““_%7ûnû¾ÛßQôPK 3cy< íAMETA-INF/þÊPK 2cyõMßqu¤ú&examples/Arrays.jPK –á0å¥ÿà䤚)examples/Catch.jPK –á0éÛp~¤¨,examples/Checkcast.jPK –á0 8róX®¤X.examples/Count.jPK –á0p²o[e¤Þ0examples/HelloWeb.htmlPK –á0· @?0X¤m1examples/HelloWeb.jPK –á0[PIBz>¤Î4examples/HelloWorld.jPK –á0‰mؤ{6examples/Implementor.jPK –á0Æ”l­t¤°8examples/InvokeInterface.jPK –á0ùh«4˜E¤é:examples/MultiANewArray.jPK –á0ÞD²Š0礸<examples/MultiArrays.jPK –á0oòè‡7¤?examples/NewArray.jPK –á0ɱî“pÿ¤Ô@examples/Switch.jPK –á0h––¬ÂʤsBexamples/Uncaught.jPK –á0Oð Æ)ޤfDexamples/VerifyTest.jPK –á0€Ê}w–¤ÂFexamples/VerifyTest1.jPK Žƒ1L£Ó!f ¤mJgenerated/scm/AutoInit.javaPK ³ 3Oá7Y*uO¤ÇLgenerated/scm/AutoProcs.javaPK ³ 3MYù dJM¤+Rgenerated/scm/AutoTypes.javaPK –á0Ý:—öÚ ¤ÉWlib/jas/.jas.prcs_auxPK –á0ï_Y‘‰»¤ò[lib/jas/CHANGES.jmPK –á0;Ö4™f ¤«\lib/jas/READMEPK –á0ìî¬ò¼M¤pblib/jas/examples/READMEPK –á00Xvîn ¤aelib/jas/examples/exprcomp.jasPK –á0ÀO®6Æ ¤Šilib/jas/examples/exprcomp.javaPK –á0€þŠ5ù¤Œrlib/jas/examples/hworld.jasPK –á0ùï¨t-‚ ¤úulib/jas/examples/hworld.javaPK –á0`o¿Aoè¤aylib/jas/examples/simple.jasPK –á0oL@™ý¸¤ {lib/jas/examples/simple.javaPK –á0ag3{0?¤@}lib/jas/examples/test.inpPK ‹˜«2GT3Ȭ%¤§}lib/jas/src/jas/AnnotElemValPair.javaPK ‹˜«2šP{•”F#¤²lib/jas/src/jas/AnnotationAttr.javaPK ‹˜«2cŸCîÊ*¤‡‚lib/jas/src/jas/AnnotationDefaultAttr.javaPK ‹˜«2ªvþÀž,%¤½„lib/jas/src/jas/ArrayElemValPair.javaPK –á0Áka^T¤ž‡lib/jas/src/jas/AsciiCP.javaPK –á0ÖåW•Ñ Ë¤6‰lib/jas/src/jas/Base64.javaPK –á0èÐn\«¤@”lib/jas/src/jas/CP.javaPK –á0Šg`Y€¤Ñ•lib/jas/src/jas/CatchEntry.javaPK –á02q½”g¤g˜lib/jas/src/jas/Catchtable.javaPK –á0Èñ¥Ž…¤8›lib/jas/src/jas/ClassCP.javaPK ‹˜«2».Ýæ²%¤÷œlib/jas/src/jas/ClassElemValPair.javaPK ñ%Ð8‘cØ÷ ,.¤ Ÿlib/jas/src/jas/ClassEnv.javaPK Ô»²2âoTR ·¤R¬lib/jas/src/jas/CodeAttr.javaPK á0L­?ˆä )¤ßµlib/jas/src/jas/CodeAttributeDecoder.javaPK –á0G,—Ô¤®¼lib/jas/src/jas/ConstAttr.javaPK ‹˜«2…æ;WG<#¤¾¾lib/jas/src/jas/DeprecatedAttr.javaPK –á08ƒªæeL¤FÀlib/jas/src/jas/DoubleCP.javaPK ‹˜«2ö(2eç¯&¤æÁlib/jas/src/jas/DoubleElemValPair.javaPK ‹˜«2}¿ó  ¤Älib/jas/src/jas/ElemValPair.javaPK ‹˜«2ʺƷr!¤[Ælib/jas/src/jas/EnclMethAttr.javaPK ‹˜«2ìoIbA$¤¸Èlib/jas/src/jas/EnumElemValPair.javaPK –á0ÊÎ œS¤üÊlib/jas/src/jas/ExceptAttr.javaPK –á0©8 `YƤAÍlib/jas/src/jas/FieldCP.javaPK –á0Û/ÑÖ_C¤ÔÏlib/jas/src/jas/FloatCP.javaPK ‹˜«2_Cüé®%¤mÑlib/jas/src/jas/FloatElemValPair.javaPK –á0fñ°9z ¤™Ólib/jas/src/jas/GenericAttr.javaPK –á0jUHߤÖlib/jas/src/jas/IincInsn.javaPK Ì„é0³æªŠ"#¤PØlib/jas/src/jas/InnerClassAttr.javaPK Ì„é0Ü@'¤–Ûlib/jas/src/jas/InnerClassSpecAttr.javaPK ‹˜«2Q7Fä ¤·Þlib/jas/src/jas/Insn.javaPK ‹˜«2ÓEÁ#ù) ¤Òälib/jas/src/jas/InsnOperand.javaPK ‹˜«2QŽ·ç©#¤ ílib/jas/src/jas/IntElemValPair.javaPK –á0ÎwgâaI¤1ïlib/jas/src/jas/IntegerCP.javaPK –á0‹ï¼*ðÏ ¤Îðlib/jas/src/jas/InterfaceCP.javaPK –á0W6- (¤üòlib/jas/src/jas/InvokeinterfaceInsn.javaPK –á0”_"ú>¤oôlib/jas/src/jas/Label.javaPK –á0®_“"¤¡÷lib/jas/src/jas/LineTableAttr.javaPK –á0E€xžH"¤æúlib/jas/src/jas/LocalVarEntry.javaPK –á0¯J6ľ&¤Äýlib/jas/src/jas/LocalVarTableAttr.javaPK –á0^T,^:¤Ìlib/jas/src/jas/LongCP.javaPK ‹˜«2Í‚Ñæ¥$¤clib/jas/src/jas/LongElemValPair.javaPK –á0l¿å †Õ%¤‹lib/jas/src/jas/LookupswitchInsn.javaPK WŸž8T•MÀ¤Tlib/jas/src/jas/Method.javaPK –á0³_v×–¤Ú lib/jas/src/jas/MethodCP.javaPK –á0d ^:Y]#¤ì lib/jas/src/jas/MultiarrayInsn.javaPK –á0ë«%¤lib/jas/src/jas/RuntimeConstants.javaPK ‹˜«2Í%bÚµ"¤¥lib/jas/src/jas/SignatureAttr.javaPK –á0 »JÈꤿ lib/jas/src/jas/SourceAttr.javaPK –á0M€ò¸ƒ|¤Ä"lib/jas/src/jas/StringCP.javaPK ‹˜«2Y»©é¸&¤‚$lib/jas/src/jas/StringElemValPair.javaPK B%1íº½0F7"¤¯&lib/jas/src/jas/SyntheticAttr.javaPK –á0g2i‰ŠÙ$¤5(lib/jas/src/jas/TableswitchInsn.javaPK ¼ž8 C³U.¤*lib/jas/src/jas/Var.javaPK  ­9¿òì¤ãŽ-¤H.lib/jas/src/jas/VisibilityAnnotationAttr.javaPK –á0ój¤ÑÇ.¤v1lib/jas/src/jas/jasError.javaPK –á0ö3ƒÿɤx2lib/jas/src/scm/Cell.javaPK –á0uŸ/ìèë ¤x4lib/jas/src/scm/Env.javaPK –á0&ÙÓïÇp"¤–7lib/jas/src/scm/InsnProcedure.javaPK –á0IÓöþ ¤9lib/jas/src/scm/Lambda.javaPK –á0[Ôk²¤ð:lib/jas/src/scm/Obj.javaPK –á0MÝÔ° æ4¤‘;lib/jas/src/scm/Procedure.javaPK –á0Ä<Üœn¯ ¤ÐDlib/jas/src/scm/SchemeError.javaPK –á0ר¢áÀj¤|Elib/jas/src/scm/Selfrep.javaPK –á0p6qñüܤvFlib/jas/src/scm/Symbol.javaPK –á0–]NT0-$¤«Glib/jas/src/scm/autogen/autogen.javaPK 5¬1@&„_þ¤APlib/jas/src/scm/driver.javaPK –á0þTO¯W¤xVlib/jas/src/scm/primnode.javaPK –á0ƒjÀa¦‚ ¤bWlib/jas/src/scm/procinfo.classPK –á0UÝc*Á^$¤D]lib/jas/src/scm/scmOutputStream.javaPK –á0 è&î0 ¤G^lib/jas/src/scm/typeinfo.classPK –á0Ñe!dk³¤qdlib/jas/tests/READMEPK –á0Lj*¯ ¤flib/jas/tests/all.jasPK –á0k˜êò¤Þhlib/jas/tests/all.javaPK –á0¡‘†$i ¤ünlicense.htmlPK ¼ž8Ú ˜½G‡¤µ“src/jasmin/ClassFile.javaPK ‹˜«2Û_߸ŽØ8¤3°src/jasmin/InsnInfo.javaPK 2cy<<µ¬ÀǤ÷¸src/jasmin/Main.javaPK ‹˜«2:Te[X½¤)Àsrc/jasmin/ReservedWords.javaPK á0;`ê  j7¤¼Åsrc/jasmin/Scanner.javaPK ¤á0ñ4H„¤‘Òsrc/jasmin/ScannerUtils.javaPK "U7 GNU LIBRARY GENERAL PUBLIC LICENSE

Table of Contents

GNU LIBRARY GENERAL PUBLIC LICENSE

Version 2, June 1991

Copyright (C) 1991 Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

[This is the first released version of the library GPL.  It is
 numbered 2 because it goes with version 2 of the ordinary GPL.]

Preamble

The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.

This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it.

For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights.

Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library.

Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations.

Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.

Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license.

The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such.

Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better.

However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries.

The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library.

Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one.

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you".

A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.

The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)

"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.

Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.

1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.

You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

  • a) The modified work must itself be a software library.

  • b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.

  • c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.

  • d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)

These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.

In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.

Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.

This option is useful when you wish to copy part of the code of the Library into a program that is not a library.

4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.

If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.

5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.

However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.

When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.

If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)

Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.

6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.

You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:

  • a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)

  • b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.

  • c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.

  • d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.

For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.

7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:

  • a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.

  • b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.

8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.

10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.

11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.

12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.

13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.

14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

NO WARRANTY

15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Libraries

If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).

To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.

one line to give the library's name and an idea of what it does.
Copyright (C) year  name of author

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Library General Public License for more details.

You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA  02111-1307, USA.

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in
the library `Frob' (a library for tweaking knobs) written
by James Random Hacker.

signature of Ty Coon, 1 April 1990
Ty Coon, President of Vice

That's all there is to it!

src/jasmin/ClassFile.java100644 0 0 103577 11006163132 13033 0ustar 0 0 /* --- Copyright Jonathan Meyer 1997. All rights reserved. ----------------- > File: jasmin/src/jasmin/ClassFile.java > Purpose: Uses a parser and the JAS package to create Java class files > Author: Jonathan Meyer, 10 July 1996 */ package jasmin; /* * This class is a bit monolithic, and should probably be converted into * several smaller classes. However, for this specific application, * its acceptable. * */ import jas.*; import java.io.InputStream; import java.io.OutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.*; /** * A ClassFile object is used to represent the binary data that makes up a * Java class file - it also serves as the public * API to the Jasmin assembler, though users should beware: the API * is likely to change in future versions (though its such a small API * at the moment that changes are likely to have only a small impact).

* * To assemble a file, you first construct a jasmin.ClassFile object, then * call readJasmin() to read in the contents of a Jasmin assembly file, then * call write() to write out the binary representation of the class file.

* * There are a few other utility methods as well. See Main.java for an example * which uses all of the public methods provided in ClassFile. * * @author Jonathan Meyer * @version 1.05, 8 Feb 1997 */ public class ClassFile { // state info for the class being built String filename; ClassEnv class_env; String class_name; String source_name; Scanner scanner; // state info for the current method being defined String method_name; String method_signature; short method_access; ExceptAttr except_attr; Catchtable catch_table; LocalVarTableAttr var_table; LineTableAttr line_table; CodeAttr code; InnerClassAttr inner_class_attr; Hashtable labels; boolean methSynth; boolean methDepr; String methSigAttr; VisibilityAnnotationAttr methAnnotAttrVis; VisibilityAnnotationAttr methAnnotAttrInvis; ParameterVisibilityAnnotationAttr methParamAnnotAttrVis; ParameterVisibilityAnnotationAttr methParamAnnotAttrInvis; ElemValPair methAnnotDef; int line_label_count, line_num; boolean auto_number; // state info for lookupswitch and tableswitch instructions Vector switch_vec; int low_value; int high_value; int lastInstSize; Method currentMethod; Var currentField; VisibilityAnnotationAttr vis_annot_attr; public void addSootCodeAttr(String name, String value) { class_env.addCPItem(new AsciiCP(name)); code.addSootCodeAttr(name, value); } public void addGenericAttrToMethod(String name, byte[] value) { if(currentMethod == null) System.err.println("Error: no field in scope to add attribute onto."); else { class_env.addCPItem(new AsciiCP(name)); currentMethod.addGenericAttr(new GenericAttr(name, value)); } } public void addGenericAttrToField(String name, byte[] value) { if(currentField == null) System.err.println("Error: no field in scope to add attribute onto."); else { class_env.addCPItem(new AsciiCP(name)); currentField.addGenericAttr(new GenericAttr(name, value)); } } public void addDeprecatedToField(){ if (currentField == null){ System.err.println("Error: no field in scope to add deprecated attribute onto"); } else { //System.out.println("adding deprec to field" ); currentField.addDeprecatedAttr(new DeprecatedAttr()); } } public void addGenericAttrToClass(GenericAttr g) { class_env.addGenericAttr(g); } static final String BGN_METHOD = "bgnmethod:"; static final String END_METHOD = "endmethod:"; // number of errors reported in a file. int errors; // // Error reporting method // void report_error(String msg) { // Print out filename/linenumber/message System.err.print(filename + ":"); System.err.print(scanner.line_num); System.err.println(": " + msg + "."); if (scanner.char_num >= 0) { System.err.println(scanner.line.toString()); // Print out where on the line the scanner got to int i; for (i = 0; i < scanner.char_num; i++) { if (scanner.line.charAt(i) == '\t') { System.err.print("\t"); } else { System.err.print(" "); } } System.err.println("^"); } errors++; } // // called by the .source directive // void setSource(String name) { source_name = name; } // // called by the .class directive // void setClass(String name, short acc) { class_name = name; class_env.setClass(new ClassCP(name)); class_env.setClassAccess(acc); } // // called by the .super directive // void setSuperClass(String name) { class_env.setSuperClass(new ClassCP(name)); } // // called by the .no_super directive // (for java.lang.Object only) void setNoSuperClass() { class_env.setNoSuperClass(); } // // called by the .implements directive // void addInterface(String name) { class_env.addInterface(new ClassCP(name)); } void addClassDeprAttr(Object res){ if (res != null){ class_env.setClassDepr(new DeprecatedAttr()); } } void addClassSigAttr(Object res){ if (res != null){ class_env.setClassSigAttr(new SignatureAttr((String)res)); } } void addClassAnnotAttrVisible(Object res){ if (res != null){ class_env.setClassAnnotAttrVis((VisibilityAnnotationAttr)res); } } void addClassAnnotAttrInvisible(Object res){ if (res != null){ class_env.setClassAnnotAttrInvis((VisibilityAnnotationAttr)res); } } void addField(short access, String name, String sig, Object value, Object dep_attr, Object sig_attr, Object vis_annot_attr, Object vis_annot_attr2){ addField(access, name, sig, value, null, dep_attr, sig_attr, vis_annot_attr, vis_annot_attr2); } // // called by the .field directive // void addField(short access, String name, String sig, Object value, String synth, Object dep_attr, Object sig_attr, Object vis_annot_attr, Object vis_annot_attr2) { if (value == null) { // defining a field which doesn't have an initial value if (synth == null){ currentField = new Var(access, new AsciiCP(name), new AsciiCP(sig), null); } else { currentField = new Var(access, new AsciiCP(name), new AsciiCP(sig), null, new SyntheticAttr()); } if(dep_attr != null){ currentField.addDeprecatedAttr(new DeprecatedAttr()); } if(sig_attr != null){ currentField.addSignatureAttr(new SignatureAttr((String)sig_attr)); } if (vis_annot_attr != null){ VisibilityAnnotationAttr attribute = (VisibilityAnnotationAttr)vis_annot_attr; if(attribute.getKind().equals("RuntimeVisible")) currentField.addVisibilityAnnotationAttrVis(attribute); else currentField.addVisibilityAnnotationAttrInvis(attribute); } if (vis_annot_attr2 != null){ VisibilityAnnotationAttr attribute = (VisibilityAnnotationAttr)vis_annot_attr2; if(attribute.getKind().equals("RuntimeVisible")) currentField.addVisibilityAnnotationAttrVis(attribute); else currentField.addVisibilityAnnotationAttrInvis(attribute); } /*currentField = new Var(access, new AsciiCP(name), new AsciiCP(sig), null);*/ class_env.addField(currentField); } else { // defining a field with an initial value... // create a constant pool entry for the initial value CP cp = null; // correctness patch due to Brian Demsky (bdemsky@mit.edu) // it's strange that Soot doesn't trigger this bug. if (sig.equals("I")||sig.equals("Z")||sig.equals("C")||sig.equals("B")||sig.equals("S")) { cp = new IntegerCP(((Number)value).intValue()); } else if (sig.equals("F")) { cp = new FloatCP(((Number)value).floatValue()); } else if (sig.equals("D")) { cp = new DoubleCP(((Number)value).doubleValue()); } else if (sig.equals("J")) { cp = new LongCP(((Number)value).longValue()); } else if (sig.equals("Ljava/lang/String;")) { cp = new StringCP((String)value); } // add the field if (synth == null){ currentField = new Var(access, new AsciiCP(name), new AsciiCP(sig), new ConstAttr(cp)); } else { currentField = new Var(access, new AsciiCP(name), new AsciiCP(sig), new ConstAttr(cp), new SyntheticAttr()); } if(dep_attr != null){ currentField.addDeprecatedAttr(new DeprecatedAttr()); } if(sig_attr != null){ currentField.addSignatureAttr(new SignatureAttr((String)sig_attr)); } class_env.addField(currentField); } } // // called by the .method directive to start the definition for a method // void newMethod(String name, String signature, int access) { // set method state variables labels = new Hashtable(); method_name = name; code = null; except_attr = null; catch_table = null; var_table = null; line_table = null; line_label_count = 0; method_signature = signature; method_access = (short)access; methSynth = false; methDepr = false; methSigAttr = null; methAnnotAttrVis = null; methAnnotAttrInvis = null; methParamAnnotAttrVis = null; methParamAnnotAttrInvis = null; methAnnotDef = null; } // // called by the .end method directive to end the definition for a method // void endMethod() throws jasError { if (code != null) { plantLabel(END_METHOD); if (catch_table != null) { code.setCatchtable(catch_table); } if (var_table != null) { code.setLocalVarTable(var_table); } if (line_table != null) { code.setLineTable(line_table); } code.setLabelTable(labels); } if (!methSynth){ currentMethod = new Method(method_access, new AsciiCP(method_name), new AsciiCP(method_signature), code, except_attr); } else { currentMethod = new Method(method_access, new AsciiCP(method_name), new AsciiCP(method_signature), code, except_attr, new SyntheticAttr()); } if (methDepr){ currentMethod.addDeprecatedAttr(new DeprecatedAttr()); } if (methSigAttr != null){ currentMethod.addSignatureAttr(new SignatureAttr(methSigAttr)); } if (methAnnotAttrVis != null){ currentMethod.addVisAnnotationAttr(methAnnotAttrVis); } if (methAnnotAttrInvis != null){ currentMethod.addInvisAnnotationAttr(methAnnotAttrInvis); } if (methParamAnnotAttrVis != null){ currentMethod.addVisParamAnnotationAttr(methParamAnnotAttrVis); } if (methParamAnnotAttrInvis != null){ currentMethod.addInvisParamAnnotationAttr(methParamAnnotAttrInvis); } if (methAnnotDef != null){ methAnnotDef.setNoName(); currentMethod.addAnnotationDef(new AnnotationDefaultAttr(methAnnotDef)); } class_env.addMethod( currentMethod); // clear method state variables code = null; labels = null; method_name = null; code = null; except_attr = null; catch_table = null; line_table = null; var_table = null; methSynth = false; methDepr = false; methSigAttr = null; methAnnotAttrVis = null; methParamAnnotAttrVis = null; methAnnotDef = null; } // // plant routines - these use addInsn to add instructions to the // code for the current method. // // // used for instructions that take no arguments // void plant(String name) throws jasError { InsnInfo insn = InsnInfo.get(name); autoNumber(); if (insn.args.equals("")) { Insn inst = new Insn(insn.opcode); _getCode().addInsn(inst); } else if (insn.name.equals("wide")) { // don't do anything for this one... } else { throw new jasError("Missing arguments for instruction " + name); } } // // used for iinc // void plant(String name, int v1, int v2) throws jasError { autoNumber(); if (name.equals("iinc")) { Insn inst = new IincInsn(v1, v2); _getCode().addInsn(inst); } else { throw new jasError("Bad arguments for instruction " + name); } } // // used for instructions that take an integer parameter // void plant(String name, int val) throws jasError { InsnInfo insn = InsnInfo.get(name); CodeAttr code = _getCode(); autoNumber(); Insn inst = null; if (insn.args.equals("i")) { inst = new Insn(insn.opcode, val); } else if (insn.args.equals("constant")) { inst = new Insn(insn.opcode, new IntegerCP(val)); } else if (insn.args.equals("bigconstant")) { inst = new Insn(insn.opcode, new LongCP(val)); } else { throw new jasError("Bad arguments for instruction " + name); } code.addInsn(inst); } // // used for ldc and other instructions that take a numeric argument // void plant(String name, Number val) throws jasError { InsnInfo insn = InsnInfo.get(name); CodeAttr code = _getCode(); autoNumber(); Insn inst = null; if (insn.args.equals("i") && (val instanceof Integer)) { inst = new Insn(insn.opcode, val.intValue()); } else if (insn.args.equals("constant")) { if (val instanceof Integer || val instanceof Long) { inst = new Insn(insn.opcode, new IntegerCP(val.intValue())); } else if (val instanceof Float || val instanceof Double) { inst = new Insn(insn.opcode, new FloatCP(val.floatValue())); } } else if (insn.args.equals("bigconstant")) { if (val instanceof Integer || val instanceof Long) { inst = new Insn(insn.opcode, new LongCP(val.longValue())); } else if (val instanceof Float || val instanceof Double) { inst = new Insn(insn.opcode, new DoubleCP(val.doubleValue())); } } else { throw new jasError("Bad arguments for instruction " + name); } _getCode().addInsn(inst); } // // used for ldc // void plantString(String name, String val) throws jasError { //System.out.println("plant string"); InsnInfo insn = InsnInfo.get(name); autoNumber(); Insn inst = null; if (insn.args.equals("constant")) { inst = new Insn(insn.opcode, new StringCP(val)); } else { throw new jasError("Bad arguments for instruction " + name); } code.addInsn(inst); } // // used for invokeinterface and multianewarray // void plant(String name, String val, int nargs) throws jasError { InsnInfo insn = InsnInfo.get(name); CodeAttr code = _getCode(); autoNumber(); Insn inst = null; if (insn.args.equals("interface")) { String split[] = ScannerUtils.splitClassMethodSignature(val); inst = new InvokeinterfaceInsn( new InterfaceCP(split[0], split[1], split[2]), nargs); } else if (insn.args.equals("marray")) { inst = new MultiarrayInsn(new ClassCP(val), nargs); } else { throw new jasError("Bad arguments for instruction " + name); } code.addInsn(inst); } // // used for instructions that take a word as a parameter // (e.g. branches, newarray, invokemethod) // void plant(String name, String val) throws jasError { //System.out.println("plant name, val: "+val); InsnInfo insn = InsnInfo.get(name); CodeAttr code = _getCode(); autoNumber(); Insn inst = null; if (insn.args.equals("method")) { String split[] = ScannerUtils.splitClassMethodSignature(val); inst = new Insn(insn.opcode, new MethodCP(split[0], split[1], split[2])); } else if (insn.args.equals("constant")) { //System.out.println("constant"); inst = new Insn(insn.opcode, new ClassCP(val)); } else if (insn.args.equals("atype")) { int atype = 0; if (val.equals("boolean")) { atype = 4; } else if (val.equals("char")) { atype = 5; } else if (val.equals("float")) { atype = 6; } else if (val.equals("double")) { atype = 7; } else if (val.equals("byte")) { atype = 8; } else if (val.equals("short")) { atype = 9; } else if (val.equals("int")) { atype = 10; } else if (val.equals("long")) { atype = 11; } else { throw new jasError("Bad array type: " + name); } inst = new Insn(insn.opcode, atype); } else if (insn.args.equals("label")) { inst = new Insn(insn.opcode, getLabel(val)); } else if (insn.args.equals("class")) { inst = new Insn(insn.opcode, new ClassCP(val)); } else { throw new jasError("Bad arguments for instruction " + name); } code.addInsn(inst); } // // used for instructions that take a field and a signature as parameters // (e.g. getstatic, putstatic) // void plant(String name, String v1, String v2) throws jasError { InsnInfo info = InsnInfo.get(name); CodeAttr code = _getCode(); autoNumber(); Insn inst = null; if (info.args.equals("field")) { String split[] = ScannerUtils.splitClassField(v1); inst = new Insn(info.opcode, new FieldCP(split[0], split[1], v2)); } else { throw new jasError("Bad arguments for instruction " + name); } code.addInsn(inst); } // // Lookupswitch instruction // void newLookupswitch() throws jasError { switch_vec = new Vector(); autoNumber(); }; void addLookupswitch(int val, String label) throws jasError { switch_vec.addElement(new Integer(val)); switch_vec.addElement(getLabel(label)); }; void endLookupswitch(String deflabel) throws jasError { int n = switch_vec.size() >> 1; int offsets[] = new int[n]; Label labels[] = new Label[n]; Enumeration e = switch_vec.elements(); int i = 0; while (e.hasMoreElements()) { offsets[i] = ((Integer)e.nextElement()).intValue(); labels[i] = (Label)e.nextElement(); i++; } _getCode().addInsn(new LookupswitchInsn(getLabel(deflabel), offsets, labels)); } // // Tableswitch instruction // void newTableswitch(int lowval) throws jasError { newTableswitch(lowval, -1); }; void newTableswitch(int lowval, int hival) throws jasError { switch_vec = new Vector(); low_value = lowval; high_value = hival; autoNumber(); }; void addTableswitch(String label) throws jasError { switch_vec.addElement(getLabel(label)); }; void endTableswitch(String deflabel) throws jasError { int n = switch_vec.size(); Label labels[] = new Label[n]; Enumeration e = switch_vec.elements(); int i = 0; while (e.hasMoreElements()) { labels[i] = (Label)e.nextElement(); i++; } if (high_value != -1 && (high_value != low_value + n - 1)) { report_error("tableswitch - given incorrect value for "); } _getCode().addInsn(new TableswitchInsn(low_value, low_value + n - 1, getLabel(deflabel), labels)); } // Used by the parser to tell ClassFile what the line number // for the next statement is. ClassFile's autoNumber mechanism // uses this info. void setLine(int l) { line_num = l; } // // If auto_number is true, output debugging line number table // for Jasmin assembly instructions. // void autoNumber() throws jasError { if (auto_number) { // use the line number of the last token addLineInfo(line_num); } } // // Label management // // // gets the Label object for a label, creating it if it doesn't exist // Label getLabel(String name) throws jasError { // check that we are inside of a method definition if (method_name == null) { throw new jasError( "illegal use of label outside of method definition"); } Label lab = (Label)labels.get(name); if (lab == null) { lab = new Label(name); labels.put(name, lab); } return lab; } // // defines a label // void plantLabel(String name) throws jasError { // unsure what happens if you use a label twice? _getCode().addInsn(getLabel(name)); } // // used by the .var directive // void addVar(String startLab, String endLab, String name, String sig, int var_num) throws jasError { if (startLab == null) { startLab = BGN_METHOD; } if (endLab == null) { endLab = END_METHOD; } Label slab, elab; slab = getLabel(startLab); elab = getLabel(endLab); if (var_table == null) { var_table = new LocalVarTableAttr(); } var_table.addEntry(new LocalVarEntry(slab, elab, name, sig, var_num)); } // // used by .line directive // void addLineInfo(int line_num) throws jasError { String l = "L:" + (line_label_count++); if (line_table == null) { line_table = new LineTableAttr(); } plantLabel(l); line_table.addEntry(getLabel(l), line_num); } void addLine(int line_num) throws jasError { if (!auto_number) { addLineInfo(line_num); } } // // used by the .throws directive // void addThrow(String name) throws jasError { // check that we are inside of a method definition if (method_name == null) { throw new jasError( "illegal use of .throw outside of method definition"); } if (except_attr == null) { except_attr = new ExceptAttr(); } except_attr.addException(new ClassCP(name)); } // // used by the .catch directive // void addCatch(String name, String start_lab, String end_lab, String branch_lab) throws jasError { ClassCP class_cp; // check that we are inside of a method definition if (method_name == null) { throw new jasError( "illegal use of .catch outside of method definition"); } if (catch_table == null) { catch_table = new Catchtable(); } if (name.equals("all")) { class_cp = null; } else { class_cp = new ClassCP(name); } catch_table.addEntry(getLabel(start_lab), getLabel(end_lab), getLabel(branch_lab), class_cp); } // // used by the .limit stack directive // void setStackSize(short v) throws jasError { _getCode().setStackSize(v); } // // used by the .limit vars directive // void setVarSize(short v) throws jasError { _getCode().setVarSize(v); } // --- Private stuff --- // // returns the code block, creating it if it doesn't exist // CodeAttr _getCode() throws jasError { // check that we are inside of a method definition if (method_name == null) { throw new jasError( "illegal use of instruction outside of method definition"); } if (code == null) { code = new CodeAttr(); plantLabel(BGN_METHOD); } return (code); } void addInnerClassAttr(){ } void addInnerClassSpec(String inner_class_name, String outer_class_name, String inner_name, short access){ if (inner_class_attr == null){ inner_class_attr = new InnerClassAttr(); } //inner_class_attr.addInnerClassSpec(new InnerClassSpecAttr(new ClassCP(inner_class_name), new ClassCP(outer_class_name), new AsciiCP(inner_name), access)); inner_class_attr.addInnerClassSpec(new InnerClassSpecAttr(inner_class_name, outer_class_name, inner_name, access)); } void endInnerClassAttr(){ class_env.finishInnerClassAttr(inner_class_attr); } void addClassSynthAttr(){ class_env.setClassSynth(true); } void addMethSynthAttr(){ methSynth = true; } void addMethDeprAttr(){ methDepr = true; } void addMethSigAttr(String s){ methSigAttr = s; } void addEnclMethAttr(String cls, String meth, String sig){ class_env.addEnclMethAttr(new EnclMethAttr(cls, meth, sig)); } void addMethAnnotAttrVisible(Object attr){ methAnnotAttrVis = (VisibilityAnnotationAttr)attr; } void addMethAnnotAttrInvisible(Object attr){ methAnnotAttrInvis = (VisibilityAnnotationAttr)attr; } void addMethParamAnnotAttrVisible(Object attr){ methParamAnnotAttrVis = (ParameterVisibilityAnnotationAttr)attr; } void addMethParamAnnotAttrInvisible(Object attr){ methParamAnnotAttrInvis = (ParameterVisibilityAnnotationAttr)attr; } void addMethAnnotDefault(Object attr){ methAnnotDef = (ElemValPair)attr; } VisibilityAnnotationAttr makeVisibilityAnnotation(Object tval, Object list){ return new VisibilityAnnotationAttr((String)tval, (ArrayList)list); } ParameterVisibilityAnnotationAttr makeParameterVisibilityAnnotation(Object kind, Object list){ return new ParameterVisibilityAnnotationAttr((String)kind+"Parameter", (ArrayList)list); } void endVisibilityAnnotation(){ } /*void addAnnotAttrToField(){ System.out.println("curr Field: "+currentField); if (currentField != null){ currentField.addVisibilityAnnotationAttr(vis_annot_attr, class_env); } }*/ AnnotationAttr currAnn = null; ArrayList makeNewAnnotAttrList(Object annot){ ArrayList list = new ArrayList(); list.add(annot); return (ArrayList)list; } ArrayList mergeNewAnnotAttr(Object list, Object elem){ ((ArrayList)list).add(elem); return (ArrayList)list; } ArrayList makeNewAnnotationList(Object elem){ ArrayList list = new ArrayList(); list.add(elem); return (ArrayList)list; } ArrayList mergeNewAnnotation(Object list, Object elem){ ((ArrayList)list).add(elem); return (ArrayList)list; } AnnotationAttr makeAnnotation(String type, Object elems){ return new AnnotationAttr(type, (ArrayList)elems); } void endAnnotation(){ if (vis_annot_attr == null){ vis_annot_attr = new VisibilityAnnotationAttr(); } vis_annot_attr.addAnnotation(currAnn); } ArrayList makeNewElemValPairList(Object elem){ ArrayList list = new ArrayList(); list.add(elem); return list; } ArrayList mergeNewElemValPair(Object list, Object elem){ ((ArrayList)list).add(elem); return (ArrayList)list; } ElemValPair makeConstantElem(String name, char kind, Object val){ //System.out.println("making constant elem val pair: "+val); ElemValPair result = null; //System.out.println("val: "+val); switch(kind){ case 'S' : { } case 'B' : { } case 'Z' : { } case 'C' : { } case 'I' : { result = new IntElemValPair(name, kind, ((Integer)val).intValue()); break; } case 'J' : { result = new LongElemValPair(name, kind, ((Number)val).longValue()); break; } case 'F' : { result = new FloatElemValPair(name, kind, ((Number)val).floatValue()); break; } case 'D' : { result = new DoubleElemValPair(name, kind, ((Number)val).doubleValue()); break; } case 's' : { result = new StringElemValPair(name, kind, (String)val); break; } } return result; } ElemValPair makeEnumElem(String name, char kind, String tval, String cval){ return new EnumElemValPair(name, kind, tval, cval); } ElemValPair makeClassElem(String name, char kind, String cval){ return new ClassElemValPair(name, kind, cval); } ElemValPair makeAnnotElem(String name, char kind, Object attr){ return new AnnotElemValPair(name, kind, (AnnotationAttr)attr); } ElemValPair makeArrayElem(String name, char kind, Object list){ ArrayElemValPair elem = new ArrayElemValPair(name, kind, (ArrayList)list); elem.setNoName(); return elem; } void endAnnotElem(){ } void endArrayElem(){ } // PUBLIC API TO JASMIN: /** Makes a new ClassFile object, used to represent a Java class file. * You can then use readJasmin to read in a class file stored in * Jasmin assembly format. */ public ClassFile() { } /** * Parses a Jasmin file, converting it internally into a binary * representation. * If something goes wrong, this throws one of * an IOException, or a jasError, or one of a few other exceptions. * I'll tie this down more formally in the next version. * * @param input is the stream containing the Jasmin assembly code for the * class. * * @param name is the name of the stream. This name will be * concatenated to error messages printed to System.err. * * @param numberLines true if you want Jasmin to generate line * numbers automatically, based on the assembly source, or * false if you are using the ".line" directive and don't * want Jasmin to help out. */ public void readJasmin(InputStream input, String name, boolean numberLines) throws IOException, Exception { // initialize variables for error reporting errors = 0; filename = name; source_name = name; // if numberLines is true, we output LineTableAttr's that indicate what line // numbers the Jasmin code falls on. auto_number = numberLines; // Parse the input file class_env = new ClassEnv(); scanner = new Scanner(input); parser parse_obj = new parser(this, scanner); if (false) { // for debugging // parse_obj.debug_parse(); } else { parse_obj.parse(); } } /** * Returns the number of warnings/errors encountered while parsing a file. * 0 if everything went OK. */ public int errorCount() { return errors; } /** * Returns the name of the class in the file (i.e. the string given to * the .class parameter in Jasmin) * */ public String getClassName() { return class_name; } /** * Writes the binary data for the class represented by this ClassFile * object to the specified * output stream, using the Java Class File format. Throws either an * IOException or a jasError if something goes wrong. */ public void write(OutputStream outp) throws IOException, jasError { class_env.setSource(source_name); class_env.write(new DataOutputStream(outp)); } }; /* --- Revision History --------------------------------------------------- --- Jonathan Meyer, April 11 1997 Fixed bug where source_name was not being set in class_env. --- Jonathan Meyer, Mar 1 1997 Renamed "Jasmin" class "ClassFile". --- Jonathan Meyer, Feb 8 1997 Converted to non-static. Made a public API. Split off InsnInfo to a separate file. --- Jonathan Meyer, Oct 1 1996 Added addInterface method, used by the .implements directive. --- Jonathan Meyer, July 25 1996 Added setLine and line_num, to fix problem with autoNumber. Added report_error method. --- Jonathan Meyer, July 24 1996 added version constant. */ src/jasmin/InsnInfo.java100644 0 0 34330 10240435426 12666 0ustar 0 0 /* --- Copyright Jonathan Meyer 1997. All rights reserved. ----------------- > File: jasmin/src/jasmin/InsnInfo.java > Purpose: Information about instructions (opcode, type of args, etc) > Author: Jonathan Meyer, 8 Feb 1996 */ // // InsnInfo is used to hold info about the opcode and parameters needed // by an instruction. Instances of InsnInfo are created by a static // initializer and stored in a table. // package jasmin; import jas.RuntimeConstants; import java.util.Hashtable; class InsnInfo { // maps instruction name -> InsnInfo object static Hashtable infoTable; // information maintained about each instruction: public String name; // instruction name public int opcode; // its opcode public String args; // the argument code public static InsnInfo get(String name) { return (InsnInfo)infoTable.get(name); } public static boolean contains(String name) { return infoTable.get(name) != null; } // // used to initialize the infoTable table (see below) // static private void addInfo(String name, int opcode, String args) { InsnInfo info = new InsnInfo(); info.name = name; info.opcode = opcode; info.args = args; infoTable.put(name, info); } // // initializes the infoTable table // static { infoTable = new Hashtable(); addInfo("aaload", RuntimeConstants.opc_aaload, ""); addInfo("aastore", RuntimeConstants.opc_aastore, ""); addInfo("aconst_null", RuntimeConstants.opc_aconst_null, ""); addInfo("aload", RuntimeConstants.opc_aload, "i"); addInfo("aload_0", RuntimeConstants.opc_aload_0, ""); addInfo("aload_1", RuntimeConstants.opc_aload_1, ""); addInfo("aload_2", RuntimeConstants.opc_aload_2, ""); addInfo("aload_3", RuntimeConstants.opc_aload_3, ""); addInfo("anewarray", RuntimeConstants.opc_anewarray, "class"); addInfo("areturn", RuntimeConstants.opc_areturn, ""); addInfo("arraylength", RuntimeConstants.opc_arraylength, ""); addInfo("astore", RuntimeConstants.opc_astore, "i"); addInfo("astore_0", RuntimeConstants.opc_astore_0, ""); addInfo("astore_1", RuntimeConstants.opc_astore_1, ""); addInfo("astore_2", RuntimeConstants.opc_astore_2, ""); addInfo("astore_3", RuntimeConstants.opc_astore_3, ""); addInfo("athrow", RuntimeConstants.opc_athrow, ""); addInfo("baload", RuntimeConstants.opc_baload, ""); addInfo("bastore", RuntimeConstants.opc_bastore, ""); addInfo("bipush", RuntimeConstants.opc_bipush, "i"); addInfo("breakpoint", RuntimeConstants.opc_breakpoint, ""); addInfo("caload", RuntimeConstants.opc_caload, ""); addInfo("castore", RuntimeConstants.opc_castore, ""); addInfo("checkcast", RuntimeConstants.opc_checkcast, "class"); addInfo("d2f", RuntimeConstants.opc_d2f, ""); addInfo("d2i", RuntimeConstants.opc_d2i, ""); addInfo("d2l", RuntimeConstants.opc_d2l, ""); addInfo("dadd", RuntimeConstants.opc_dadd, ""); addInfo("daload", RuntimeConstants.opc_daload, ""); addInfo("dastore", RuntimeConstants.opc_dastore, ""); addInfo("dcmpg", RuntimeConstants.opc_dcmpg, ""); addInfo("dcmpl", RuntimeConstants.opc_dcmpl, ""); addInfo("dconst_0", RuntimeConstants.opc_dconst_0, ""); addInfo("dconst_1", RuntimeConstants.opc_dconst_1, ""); addInfo("ddiv", RuntimeConstants.opc_ddiv, ""); addInfo("dload", RuntimeConstants.opc_dload, "i"); addInfo("dload_0", RuntimeConstants.opc_dload_0, ""); addInfo("dload_1", RuntimeConstants.opc_dload_1, ""); addInfo("dload_2", RuntimeConstants.opc_dload_2, ""); addInfo("dload_3", RuntimeConstants.opc_dload_3, ""); addInfo("dmul", RuntimeConstants.opc_dmul, ""); addInfo("dneg", RuntimeConstants.opc_dneg, ""); addInfo("drem", RuntimeConstants.opc_drem, ""); addInfo("dreturn", RuntimeConstants.opc_dreturn, ""); addInfo("dstore", RuntimeConstants.opc_dstore, "i"); addInfo("dstore_0", RuntimeConstants.opc_dstore_0, ""); addInfo("dstore_1", RuntimeConstants.opc_dstore_1, ""); addInfo("dstore_2", RuntimeConstants.opc_dstore_2, ""); addInfo("dstore_3", RuntimeConstants.opc_dstore_3, ""); addInfo("dsub", RuntimeConstants.opc_dsub, ""); addInfo("dup", RuntimeConstants.opc_dup, ""); addInfo("dup2", RuntimeConstants.opc_dup2, ""); addInfo("dup2_x1", RuntimeConstants.opc_dup2_x1, ""); addInfo("dup2_x2", RuntimeConstants.opc_dup2_x2, ""); addInfo("dup_x1", RuntimeConstants.opc_dup_x1, ""); addInfo("dup_x2", RuntimeConstants.opc_dup_x2, ""); addInfo("f2d", RuntimeConstants.opc_f2d, ""); addInfo("f2i", RuntimeConstants.opc_f2i, ""); addInfo("f2l", RuntimeConstants.opc_f2l, ""); addInfo("fadd", RuntimeConstants.opc_fadd, ""); addInfo("faload", RuntimeConstants.opc_faload, ""); addInfo("fastore", RuntimeConstants.opc_fastore, ""); addInfo("fcmpg", RuntimeConstants.opc_fcmpg, ""); addInfo("fcmpl", RuntimeConstants.opc_fcmpl, ""); addInfo("fconst_0", RuntimeConstants.opc_fconst_0, ""); addInfo("fconst_1", RuntimeConstants.opc_fconst_1, ""); addInfo("fconst_2", RuntimeConstants.opc_fconst_2, ""); addInfo("fdiv", RuntimeConstants.opc_fdiv, ""); addInfo("fload", RuntimeConstants.opc_fload, "i"); addInfo("fload_0", RuntimeConstants.opc_fload_0, ""); addInfo("fload_1", RuntimeConstants.opc_fload_1, ""); addInfo("fload_2", RuntimeConstants.opc_fload_2, ""); addInfo("fload_3", RuntimeConstants.opc_fload_3, ""); addInfo("fmul", RuntimeConstants.opc_fmul, ""); addInfo("fneg", RuntimeConstants.opc_fneg, ""); addInfo("frem", RuntimeConstants.opc_frem, ""); addInfo("freturn", RuntimeConstants.opc_freturn, ""); addInfo("fstore", RuntimeConstants.opc_fstore, "i"); addInfo("fstore_0", RuntimeConstants.opc_fstore_0, ""); addInfo("fstore_1", RuntimeConstants.opc_fstore_1, ""); addInfo("fstore_2", RuntimeConstants.opc_fstore_2, ""); addInfo("fstore_3", RuntimeConstants.opc_fstore_3, ""); addInfo("fsub", RuntimeConstants.opc_fsub, ""); addInfo("getfield", RuntimeConstants.opc_getfield, "field"); addInfo("getstatic", RuntimeConstants.opc_getstatic, "field"); addInfo("goto", RuntimeConstants.opc_goto, "label"); addInfo("goto_w", RuntimeConstants.opc_goto_w, "label"); addInfo("i2d", RuntimeConstants.opc_i2d, ""); addInfo("i2f", RuntimeConstants.opc_i2f, ""); addInfo("i2l", RuntimeConstants.opc_i2l, ""); addInfo("iadd", RuntimeConstants.opc_iadd, ""); addInfo("iaload", RuntimeConstants.opc_iaload, ""); addInfo("iand", RuntimeConstants.opc_iand, ""); addInfo("iastore", RuntimeConstants.opc_iastore, ""); addInfo("iconst_0", RuntimeConstants.opc_iconst_0, ""); addInfo("iconst_1", RuntimeConstants.opc_iconst_1, ""); addInfo("iconst_2", RuntimeConstants.opc_iconst_2, ""); addInfo("iconst_3", RuntimeConstants.opc_iconst_3, ""); addInfo("iconst_4", RuntimeConstants.opc_iconst_4, ""); addInfo("iconst_5", RuntimeConstants.opc_iconst_5, ""); addInfo("iconst_m1", RuntimeConstants.opc_iconst_m1, ""); addInfo("idiv", RuntimeConstants.opc_idiv, ""); addInfo("if_acmpeq", RuntimeConstants.opc_if_acmpeq, "label"); addInfo("if_acmpne", RuntimeConstants.opc_if_acmpne, "label"); addInfo("if_icmpeq", RuntimeConstants.opc_if_icmpeq, "label"); addInfo("if_icmpge", RuntimeConstants.opc_if_icmpge, "label"); addInfo("if_icmpgt", RuntimeConstants.opc_if_icmpgt, "label"); addInfo("if_icmple", RuntimeConstants.opc_if_icmple, "label"); addInfo("if_icmplt", RuntimeConstants.opc_if_icmplt, "label"); addInfo("if_icmpne", RuntimeConstants.opc_if_icmpne, "label"); addInfo("ifeq", RuntimeConstants.opc_ifeq, "label"); addInfo("ifge", RuntimeConstants.opc_ifge, "label"); addInfo("ifgt", RuntimeConstants.opc_ifgt, "label"); addInfo("ifle", RuntimeConstants.opc_ifle, "label"); addInfo("iflt", RuntimeConstants.opc_iflt, "label"); addInfo("ifne", RuntimeConstants.opc_ifne, "label"); addInfo("ifnonnull", RuntimeConstants.opc_ifnonnull, "label"); addInfo("ifnull", RuntimeConstants.opc_ifnull, "label"); addInfo("iinc", RuntimeConstants.opc_iinc, "ii"); addInfo("iload", RuntimeConstants.opc_iload, "i"); addInfo("iload_0", RuntimeConstants.opc_iload_0, ""); addInfo("iload_1", RuntimeConstants.opc_iload_1, ""); addInfo("iload_2", RuntimeConstants.opc_iload_2, ""); addInfo("iload_3", RuntimeConstants.opc_iload_3, ""); addInfo("imul", RuntimeConstants.opc_imul, ""); addInfo("ineg", RuntimeConstants.opc_ineg, ""); addInfo("instanceof", RuntimeConstants.opc_instanceof, "class"); addInfo("int2byte", RuntimeConstants.opc_int2byte, ""); addInfo("int2char", RuntimeConstants.opc_int2char, ""); addInfo("int2short", RuntimeConstants.opc_int2short, ""); // added this synonym addInfo("i2b", RuntimeConstants.opc_int2byte, ""); // added this synonym addInfo("i2c", RuntimeConstants.opc_int2char, ""); // added this synonym addInfo("i2s", RuntimeConstants.opc_int2short, ""); addInfo("invokeinterface", RuntimeConstants.opc_invokeinterface, "interface"); addInfo("invokenonvirtual", RuntimeConstants.opc_invokenonvirtual, "method"); // added this synonym addInfo("invokespecial", RuntimeConstants.opc_invokenonvirtual, "method"); addInfo("invokestatic", RuntimeConstants.opc_invokestatic, "method"); addInfo("invokevirtual", RuntimeConstants.opc_invokevirtual, "method"); addInfo("ior", RuntimeConstants.opc_ior, ""); addInfo("irem", RuntimeConstants.opc_irem, ""); addInfo("ireturn", RuntimeConstants.opc_ireturn, ""); addInfo("ishl", RuntimeConstants.opc_ishl, ""); addInfo("ishr", RuntimeConstants.opc_ishr, ""); addInfo("istore", RuntimeConstants.opc_istore, "i"); addInfo("istore_0", RuntimeConstants.opc_istore_0, ""); addInfo("istore_1", RuntimeConstants.opc_istore_1, ""); addInfo("istore_2", RuntimeConstants.opc_istore_2, ""); addInfo("istore_3", RuntimeConstants.opc_istore_3, ""); addInfo("isub", RuntimeConstants.opc_isub, ""); addInfo("iushr", RuntimeConstants.opc_iushr, ""); addInfo("ixor", RuntimeConstants.opc_ixor, ""); addInfo("jsr", RuntimeConstants.opc_jsr, "label"); addInfo("jsr_w", RuntimeConstants.opc_jsr, "label"); // synonym for "jsr" addInfo("l2d", RuntimeConstants.opc_l2d, ""); addInfo("l2f", RuntimeConstants.opc_l2f, ""); addInfo("l2i", RuntimeConstants.opc_l2i, ""); addInfo("ladd", RuntimeConstants.opc_ladd, ""); addInfo("laload", RuntimeConstants.opc_laload, ""); addInfo("land", RuntimeConstants.opc_land, ""); addInfo("lastore", RuntimeConstants.opc_lastore, ""); addInfo("lcmp", RuntimeConstants.opc_lcmp, ""); addInfo("lconst_0", RuntimeConstants.opc_lconst_0, ""); addInfo("lconst_1", RuntimeConstants.opc_lconst_1, ""); addInfo("ldc", RuntimeConstants.opc_ldc, "constant"); addInfo("ldc_w", RuntimeConstants.opc_ldc_w, "constant"); addInfo("ldc2_w", RuntimeConstants.opc_ldc2_w, "bigconstant"); addInfo("ldiv", RuntimeConstants.opc_ldiv, ""); addInfo("lload", RuntimeConstants.opc_lload, "i"); addInfo("lload_0", RuntimeConstants.opc_lload_0, ""); addInfo("lload_1", RuntimeConstants.opc_lload_1, ""); addInfo("lload_2", RuntimeConstants.opc_lload_2, ""); addInfo("lload_3", RuntimeConstants.opc_lload_3, ""); addInfo("lmul", RuntimeConstants.opc_lmul, ""); addInfo("lneg", RuntimeConstants.opc_lneg, ""); addInfo("lookupswitch", RuntimeConstants.opc_lookupswitch, "switch"); addInfo("lor", RuntimeConstants.opc_lor, ""); addInfo("lrem", RuntimeConstants.opc_lrem, ""); addInfo("lreturn", RuntimeConstants.opc_lreturn, ""); addInfo("lshl", RuntimeConstants.opc_lshl, ""); addInfo("lshr", RuntimeConstants.opc_lshr, ""); addInfo("lstore", RuntimeConstants.opc_lstore, "i"); addInfo("lstore_0", RuntimeConstants.opc_lstore_0, ""); addInfo("lstore_1", RuntimeConstants.opc_lstore_1, ""); addInfo("lstore_2", RuntimeConstants.opc_lstore_2, ""); addInfo("lstore_3", RuntimeConstants.opc_lstore_3, ""); addInfo("lsub", RuntimeConstants.opc_lsub, ""); addInfo("lushr", RuntimeConstants.opc_lushr, ""); addInfo("lxor", RuntimeConstants.opc_lxor, ""); addInfo("monitorenter", RuntimeConstants.opc_monitorenter, ""); addInfo("monitorexit", RuntimeConstants.opc_monitorexit, ""); addInfo("multianewarray", RuntimeConstants.opc_multianewarray, "marray"); addInfo("new", RuntimeConstants.opc_new, "class"); addInfo("newarray", RuntimeConstants.opc_newarray, "atype"); addInfo("nop", RuntimeConstants.opc_nop, ""); addInfo("pop", RuntimeConstants.opc_pop, ""); addInfo("pop2", RuntimeConstants.opc_pop2, ""); addInfo("putfield", RuntimeConstants.opc_putfield, "field"); addInfo("putstatic", RuntimeConstants.opc_putstatic, "field"); addInfo("ret", RuntimeConstants.opc_ret, "i"); addInfo("ret_w", RuntimeConstants.opc_ret, "i"); // synonym for ret addInfo("return", RuntimeConstants.opc_return, ""); addInfo("saload", RuntimeConstants.opc_saload, ""); addInfo("sastore", RuntimeConstants.opc_sastore, ""); addInfo("sipush", RuntimeConstants.opc_sipush, "i"); addInfo("swap", RuntimeConstants.opc_swap, ""); addInfo("tableswitch", RuntimeConstants.opc_tableswitch, "switch"); // special case: addInfo("wide", RuntimeConstants.opc_wide, "ignore"); } }; /* --- Revision History --------------------------------------------------- --- Jonathan Meyer, Feb 8 1997 Added invokespecial as a synonym for invokenonvirtual */ src/jasmin/Main.java100644 0 0 14307 11352644060 12032 0ustar 0 0 /* --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- > File: jasmin/src/jasmin/Main.java > Purpose: Runs Jasmin, parsing any command line arguments > Author: Jonathan Meyer, 10 July 1996 */ // Modifications Copyright (C) 2004 Ondrej Lhotak package jasmin; import jas.jasError; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * Main is the main entry point for Jasmin - it supplies the main() * method, as well as a few other useful odds and ends. */ public class Main { public static void assemble(InputStream in, OutputStream out, boolean number_lines) { ClassFile classFile = new ClassFile(); try { InputStream inp = new BufferedInputStream(in); classFile.readJasmin(inp, "Jasmin", number_lines); inp.close(); // if we got some errors, don't output a file - just return. if (classFile.errorCount() > 0) { System.err.println("Jasmin: Found " + classFile.errorCount() + " errors"); return; } classFile.write(out); out.flush(); } catch (java.io.FileNotFoundException e) { System.err.println("Jasmin: file not found"); System.exit(-1); } catch (jasError e) { classFile.report_error("JAS Error " + e.getMessage()); e.printStackTrace(); } catch (Exception e) { classFile.report_error("Jasmin: exception - <" + e.getClass().getName() + "> " + e.getMessage() + "."); e.printStackTrace(); } if (classFile.errorCount() > 0) { System.err.println("Jasmin: Found " + classFile.errorCount() + " errors"); } } /** * The Jasmin version */ public final static String version = Main.class.getPackage().getImplementationVersion() == null ? "trunk" : Main.class.getPackage().getImplementationVersion(); /** * Called to assemble a single file. * @param dest_dir is the directory to place the result in. * @param fname is the name of the file containing the Jasmin source code. * @param number_lines is true if you want Jasmin to generate line numbers * automatically, or false if you are generating line numbers yourself. */ public static void assemble(String dest_dir, String fname, boolean number_lines) { File file = new File(fname); File out_file = null; ClassFile classFile = new ClassFile(); try { InputStream inp = new BufferedInputStream(new FileInputStream(fname)); classFile.readJasmin(inp, file.getName(), number_lines); inp.close(); // if we got some errors, don't output a file - just return. if (classFile.errorCount() > 0) { System.err.println(fname + ": Found " + classFile.errorCount() + " errors"); return; } String class_path[] = (ScannerUtils.splitClassField( classFile.getClassName())); String class_name = class_path[1]; // determine where to place this class file if (class_path[0] != null) { String class_dir = ScannerUtils.convertChars( class_path[0], "./", File.separatorChar); if (dest_dir != null) { dest_dir = dest_dir + File.separator + class_dir; } else { dest_dir = class_dir; } } if (dest_dir == null) { out_file = new File(class_name + ".class"); } else { out_file = new File(dest_dir, class_name + ".class"); // check that dest_dir exists File dest = new File(dest_dir); if (!dest.exists()) { dest.mkdirs(); } if (!dest.isDirectory()) { throw new IOException("Cannot create directory"); } } FileOutputStream outp = new FileOutputStream(out_file); classFile.write(outp); outp.close(); // System.out.println("Generated: " + out_file.getPath()); } catch (java.io.FileNotFoundException e) { System.err.println(fname + ": file not found"); System.exit(-1); } catch (jasError e) { classFile.report_error("JAS Error " + e.getMessage()); e.printStackTrace(); } catch (Exception e) { classFile.report_error(fname + ": exception - <" + e.getClass().getName() + "> " + e.getMessage() + "."); e.printStackTrace(); } if (classFile.errorCount() > 0) { System.err.println(fname + ": Found " + classFile.errorCount() + " errors"); } } public static void main(String args[]) { int i; String dest_dir = null; boolean debug = false; String files[] = new String[args.length]; int num_files = 0; if (args.length == 0) { System.err.println("usage: jasmin [-d ] [-version] [ ...]"); System.exit(-1); } for (i = 0; i < args.length; i++) { if (args[i].equals("-d")) { dest_dir = args[i + 1]; i++; } else if (args[i].equals("-g")) { debug = true; } else if (args[i].equals("-version")) { System.out.println("Jasmin version: " + version); System.exit(0); } else { files[num_files++] = args[i]; } } for (i = 0; i < num_files; i++) { assemble(dest_dir, files[i], debug); } } }; /* --- Revision History --------------------------------------------------- --- Jonathan Meyer, Mar 1 1997 tidied error reporting, renamed Jasmin->ClassFile --- Jonathan Meyer, Feb 8 1997 added the assemble() method --- Jonathan Meyer, July 24 1996 added -version flag. */ src/jasmin/ReservedWords.java100644 0 0 13675 10240435426 13752 0ustar 0 0 /* --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- > File: jasmin/src/jasmin/ReservedWords.java > Purpose: Reserved words for Jasmin > Author: Jonathan Meyer, 10 July 1996 */ package jasmin; import java.util.Hashtable; import java_cup.runtime.*; abstract class ReservedWords { static Hashtable reserved_words; // we can't pull this hashtable trick anymore, no more recycling allowed! public static Symbol get(String name) { Symbol template = (Symbol)reserved_words.get(name); if (template != null) return new Symbol(template.sym); else return null; } public static boolean contains(String name) { return reserved_words.get(name) != null; } // // scanner initializer - sets up reserved_words table // static { reserved_words = new Hashtable(); // Jasmin directives reserved_words.put(".catch", new Symbol(sym.DCATCH)); reserved_words.put(".class", new Symbol(sym.DCLASS)); reserved_words.put(".end", new Symbol(sym.DEND)); reserved_words.put(".field", new Symbol(sym.DFIELD)); reserved_words.put(".implements", new Symbol(sym.DIMPLEMENTS)); reserved_words.put(".interface", new Symbol(sym.DINTERFACE)); reserved_words.put(".limit", new Symbol(sym.DLIMIT)); reserved_words.put(".line", new Symbol(sym.DLINE)); reserved_words.put(".method", new Symbol(sym.DMETHOD)); reserved_words.put(".set", new Symbol(sym.DSET)); reserved_words.put(".source", new Symbol(sym.DSOURCE)); reserved_words.put(".super", new Symbol(sym.DSUPER)); reserved_words.put(".no_super", new Symbol(sym.DNOSUPER)); reserved_words.put(".throws", new Symbol(sym.DTHROWS)); reserved_words.put(".var", new Symbol(sym.DVAR)); reserved_words.put(".class_attribute", new Symbol(sym.DCLASS_ATTR)); reserved_words.put(".field_attribute", new Symbol(sym.DFIELD_ATTR)); reserved_words.put(".method_attribute", new Symbol(sym.DMETHOD_ATTR)); reserved_words.put(".code_attribute", new Symbol(sym.DCODE_ATTR)); reserved_words.put(".inner_class_attr", new Symbol(sym.DINNER_CLASS_ATTR)); reserved_words.put(".inner_class_spec_attr", new Symbol(sym.DINNER_CLASS_SPEC_ATTR)); reserved_words.put(".synthetic", new Symbol(sym.DSYNTHETIC)); reserved_words.put(".enclosing_method_attr", new Symbol(sym.DENCLOSING_METH)); reserved_words.put(".deprecated", new Symbol(sym.DDEPRECATED)); reserved_words.put(".signature_attr", new Symbol(sym.DSIG_ATTR)); // annotation related directives reserved_words.put(".runtime_visible_annotation", new Symbol(sym.DRUNTIME_VISIBLE)); reserved_words.put(".runtime_invisible_annotation", new Symbol(sym.DRUNTIME_INVISIBLE)); reserved_words.put(".runtime_param_visible_annotation", new Symbol(sym.DRUNTIME_PARAM_VISIBLE)); reserved_words.put(".runtime_param_invisible_annotation", new Symbol(sym.DRUNTIME_PARAM_INVISIBLE)); reserved_words.put(".annotation_attr", new Symbol(sym.DANNOTATION_ATTR)); reserved_words.put(".param", new Symbol(sym.DPARAM_ANNOT_ATTR)); reserved_words.put(".annotation", new Symbol(sym.DANNOTATION)); reserved_words.put(".int_kind", new Symbol(sym.INT_KIND)); reserved_words.put(".byte_kind", new Symbol(sym.BYTE_KIND)); reserved_words.put(".char_kind", new Symbol(sym.CHAR_KIND)); reserved_words.put(".short_kind", new Symbol(sym.SHORT_KIND)); reserved_words.put(".bool_kind", new Symbol(sym.BOOL_KIND)); reserved_words.put(".str_kind", new Symbol(sym.STR_KIND)); reserved_words.put(".long_kind", new Symbol(sym.LONG_KIND)); reserved_words.put(".doub_kind", new Symbol(sym.DOUB_KIND)); reserved_words.put(".float_kind", new Symbol(sym.FLOAT_KIND)); reserved_words.put(".enum_kind", new Symbol(sym.ENUM_KIND)); reserved_words.put(".ann_kind", new Symbol(sym.ANN_KIND)); reserved_words.put(".arr_kind", new Symbol(sym.ARR_KIND)); reserved_words.put(".cls_kind", new Symbol(sym.CLS_KIND)); reserved_words.put(".arr_elem", new Symbol(sym.DARR_ELEM)); reserved_words.put(".annot_elem", new Symbol(sym.DANNOT_ELEM)); reserved_words.put(".elem", new Symbol(sym.DELEM)); reserved_words.put(".annotation_default", new Symbol(sym.DANNOT_DEFAULT)); // reserved_words used in Jasmin directives reserved_words.put("from", new Symbol(sym.FROM)); reserved_words.put("method", new Symbol(sym.METHOD)); reserved_words.put("to", new Symbol(sym.TO)); reserved_words.put("is", new Symbol(sym.IS)); reserved_words.put("using", new Symbol(sym.USING)); // Special-case instructions reserved_words.put("tableswitch", new Symbol(sym.TABLESWITCH)); reserved_words.put("lookupswitch", new Symbol(sym.LOOKUPSWITCH)); reserved_words.put("default", new Symbol(sym.DEFAULT)); // Access flags reserved_words.put("public", new Symbol(sym.PUBLIC)); reserved_words.put("private", new Symbol(sym.PRIVATE)); reserved_words.put("protected", new Symbol(sym.PROTECTED)); reserved_words.put("static", new Symbol(sym.STATIC)); reserved_words.put("final", new Symbol(sym.FINAL)); reserved_words.put("synchronized", new Symbol(sym.SYNCHRONIZED)); reserved_words.put("volatile", new Symbol(sym.VOLATILE)); reserved_words.put("transient", new Symbol(sym.TRANSIENT)); reserved_words.put("native", new Symbol(sym.NATIVE)); reserved_words.put("interface", new Symbol(sym.INTERFACE)); reserved_words.put("abstract", new Symbol(sym.ABSTRACT)); reserved_words.put("strictfp", new Symbol(sym.STRICTFP)); reserved_words.put("annotation", new Symbol(sym.ANNOTATION)); reserved_words.put("enum", new Symbol(sym.ENUM)); } } src/jasmin/Scanner.java100644 0 0 33552 10070637625 12547 0ustar 0 0 /** Modifications Copyright (C) 1999 Raja Vallee-Rai (rvalleerai@sable.mcgill.ca) All rights reserved. Changes: - Added \\ to the list of possible escape characters for Strings. - March 15, 1999: $ does no longer significant substitution */ /* --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- > File: jasmin/src/jasmin/Scanner.java > Purpose: Tokenizer for Jasmin > Author: Jonathan Meyer, 10 July 1996 */ /* Scanner.java - class for tokenizing Jasmin files. This is rather * cheap and cheerful. */ package jasmin; import jas.*; import java_cup.runtime.*; import java.util.*; import java.io.InputStream; class Scanner implements java_cup.runtime.Scanner { InputStream inp; // single lookahead character int next_char; // temporary buffer char chars[]; char secondChars[]; char[] unicodeBuffer; // true if we have not yet emitted a SEP ('\n') token. This is a bit // of a hack so to strip out multiple newlines at the start of the file // and replace them with a single SEP token. (for some reason I can't // write the CUP grammar to accept multiple newlines at the start of the // file) boolean is_first_sep; // Whitespace characters static final String WHITESPACE = " \n\t\r"; // Separator characters static final String SEPARATORS = WHITESPACE + ":="; // used for error reporting to print out where an error is on the line public int line_num, char_num, token_line_num; public StringBuffer line; // used by the .set directive to define new variables. public Hashtable dict = new Hashtable(); // // returns true if a character code is a whitespace character // protected static boolean whitespace(int c) { return (WHITESPACE.indexOf(c) != -1); } // // returns true if a character code is a separator character // protected static boolean separator(int c) { return (SEPARATORS.indexOf(c) != -1); } // // Advanced the input by one character // protected void advance() throws java.io.IOException { next_char = inp.read(); if (next_char == '\n') { // a new line line_num++; char_num = 0; line.setLength(0); } else { line.append((char)next_char); char_num++; } } // // initialize the scanner // final static int BIGNUM=65000; public Scanner(InputStream i) throws java.io.IOException { inp = i; line_num = 1; char_num = 0; line = new StringBuffer(); chars = new char[BIGNUM]; secondChars = new char[BIGNUM]; unicodeBuffer = new char[4]; is_first_sep = true; advance(); } int readOctal(int firstChar) throws java.io.IOException { int d1, d2, d3; d1 = firstChar; advance(); d2 = next_char; advance(); d3 = next_char; return ((d1-'0')&7) * 64 + ((d2-'0')&7) * 8 + ((d3-'0')&7); } // // recognize and return the next complete symbol // public Symbol next_token() throws java.io.IOException, jasError { token_line_num = line_num; for (;;) { switch (next_char) { case ';': // a comment do { advance(); } while (next_char != '\n'); case '\n': // return single SEP token (skip multiple newlines // interspersed with whitespace or comments) for (;;) { do { advance(); } while (whitespace(next_char)); if (next_char == ';') { do { advance(); } while (next_char != '\n'); } else { break; } } if (is_first_sep) { return next_token(); } token_line_num = line_num; return new Symbol(sym.SEP); case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '-': case '+': case '.': // a number { int pos = 0; // record that we have found first item is_first_sep = false; chars[0] = (char)next_char; pos++; for (;;) { advance(); if (separator(next_char)) { break; } try { chars[pos] = (char)next_char; } catch (ArrayIndexOutOfBoundsException abe) { char[] tmparray = new char[chars.length*2]; System.arraycopy(chars, 0, tmparray, 0, chars.length); chars = tmparray; chars[pos] = (char)next_char; } pos++; } String str = new String(chars, 0, pos); Symbol tok; if(str.equals("+DoubleInfinity")) return new Symbol(sym.Num, new Double(1.0/0.0)); if(str.equals("+DoubleNaN")) return new Symbol(sym.Num, new Double(0.0d/0.0)); if(str.equals("+FloatNaN")) return new Symbol(sym.Num, new Float(0.0f/0.0)); if(str.equals("-DoubleInfinity")) return new Symbol(sym.Num, new Double(-1.0/0.0)); if(str.equals("+FloatInfinity")) return new Symbol(sym.Num, new Float(1.0f/0.0f)); if(str.equals("-FloatInfinity")) return new Symbol(sym.Num, new Float(-1.0f/0.0f)); // This catches directives like ".method" if ((tok = ReservedWords.get(str)) != null) { return tok; } Number num; try { num = ScannerUtils.convertNumber(str); } catch (NumberFormatException e) { if (chars[0] == '.') { throw new jasError("Unknown directive or badly formed number."); } else { throw new jasError("Badly formatted number"); } } if (num instanceof Integer) { return new Symbol(sym.Int, new Integer(num.intValue())); } else { return new Symbol(sym.Num, num); } } case '"': // quoted strings { int pos = 0; is_first_sep = false; for (;;) { advance(); if (next_char == '\\') { advance(); switch (next_char) { case 'n': next_char = '\n'; break; case 'r': next_char = '\r'; break; case 't': next_char = '\t'; break; case 'f': next_char = '\f'; break; case 'b': next_char = '\b'; break; case 'u': { advance(); unicodeBuffer[0] = (char) next_char; advance(); unicodeBuffer[1] = (char) next_char; advance(); unicodeBuffer[2] = (char) next_char; advance(); unicodeBuffer[3] = (char) next_char; // System.out.println(unicodeBuffer[0] + ":" + unicodeBuffer[1] + ":" + unicodeBuffer[2] + ":" + unicodeBuffer[3] + ":"); next_char = (char) Integer.parseInt(new String(unicodeBuffer, 0, 4), 16); // System.out.println("value: " + next_char); break; } case '"': next_char = '"'; break; case '\'': next_char = '\''; break; case '\\': next_char = '\\'; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': next_char = readOctal(next_char); break; default: throw new jasError("Bad backslash escape sequence"); } } else if (next_char == '"') { break; } try { chars[pos] = (char)next_char; } catch (ArrayIndexOutOfBoundsException abe) { char[] tmparray = new char[chars.length*2]; System.arraycopy(chars, 0, tmparray, 0, chars.length); chars = tmparray; chars[pos] = (char)next_char; } pos++; } advance(); // skip close quote return new Symbol(sym.Str, new String(chars, 0, pos)); } case ' ': case '\t': case '\r': // whitespace advance(); break; case '=': // EQUALS token advance(); is_first_sep = false; return new Symbol(sym.EQ); case ':': // COLON token advance(); is_first_sep = false; return new Symbol(sym.COLON); case -1: // EOF token is_first_sep = false; char_num = -1; line.setLength(0); return new Symbol(sym.EOF); default: { // read up until a separatorcharacter int pos = 0; int secondPos = 0; chars[0] = (char)next_char; is_first_sep = false; pos++; for (;;) { advance(); if (separator(next_char)) { break; } try { chars[pos] = (char)next_char; } catch (ArrayIndexOutOfBoundsException abe) { char[] tmparray = new char[chars.length*2]; System.arraycopy(chars, 0, tmparray, 0, chars.length); chars = tmparray; chars[pos] = (char)next_char; } pos++; } secondPos = 0; // Parse all the unicode escape sequences for(int i = 0; i < pos; i++) { if(chars[i] == '\\' && (i + 5) < pos && chars[i+1] == 'u') { int intValue = Integer.parseInt(new String(chars, i+2, 4), 16); try { secondChars[secondPos] = (char) intValue; } catch (ArrayIndexOutOfBoundsException abe) { char[] tmparray = new char[secondChars.length*2]; System.arraycopy(secondChars, 0, tmparray, 0, secondChars.length); secondChars = tmparray; secondChars[secondPos] = (char)intValue; } secondPos++; i += 5; } else { try { secondChars[secondPos] = chars[i]; } catch (ArrayIndexOutOfBoundsException abe) { char[] tmparray = new char[secondChars.length*2]; System.arraycopy(secondChars, 0, tmparray, 0, secondChars.length); secondChars = tmparray; secondChars[secondPos] = chars[i]; } secondPos++; } } // convert the byte array into a String String str = new String(secondChars, 0, secondPos); Symbol tok; if ((tok = ReservedWords.get(str)) != null) { // Jasmin keyword or directive return tok; } else if (InsnInfo.contains(str)) { // its a JVM instruction return new Symbol(sym.Insn, str); } /*else if (str.charAt(0) == '$') { // Perform variable substitution Object v; if ((v = dict.get(str.substring(1))) != null) { return ((Symbol)v); } } */ else { // Unrecognized string token (e.g. a classname) return new Symbol(sym.Word, str); } } /* default */ } /* switch */ } /* for */ } }; /* --- Revision History --------------------------------------------------- --- Jonathan Meyer, Feb 8 1997 Converted to be non-static --- Jonathan Meyer, Oct 30 1996 Added support for more \ escapes in quoted strings (including octals). --- Jonathan Meyer, Oct 1 1996 Added .interface and .implements --- Jonathan Meyer, July 25 1996 changed IN to IS. Added token_line_num, which is the line number of the last token returned by next_token(). --- Jonathan Meyer, July 24 1996 added mods to recognize '\r' as whitespace. */ src/jasmin/ScannerUtils.java100644 0 0 11430 10070635363 13554 0ustar 0 0 /* --- Copyright Jonathan Meyer 1997. All rights reserved. ----------------- > File: jasmin/src/jasmin/ScannerUtils.java > Purpose: Various static methods utilized to breakdown strings > Author: Jonathan Meyer, 8 Feb 1997 */ /** Modifications Copyright (C) 1997, 1998 Raja Vallee-Rai (kor@sable.mcgill.ca) All rights reserved. Changes: - Changed the grammar so that Floats are produced only when an "F" is encountered. (putting a 'L' after a number forces it to be a long) */ package jasmin; abstract class ScannerUtils { // // Converts a string of a given radix to an int or a long // (uses smallest format that will hold the number) // public static Number convertInt(String str, int radix) throws NumberFormatException { boolean forceLong = false; if(str.endsWith("L")) { forceLong = true; str = str.substring(0, str.length() - 1); } long x = Long.parseLong(str, radix); if (x <= (long)Integer.MAX_VALUE && x >= (long)Integer.MIN_VALUE && !forceLong) { return new Integer((int)x); } return new Long(x); } // // Converts a string to a number (int, float, long, or double). // (uses smallest format that will hold the number) // public static Number convertNumber(String str) throws NumberFormatException { // System.out.println("Converting:" + str); if (str.startsWith("0x")) { // base 16 integer return (convertInt(str.substring(2), 16)); } else if (str.indexOf('.') != -1) { boolean isFloat = false; if(str.endsWith("F")) { isFloat = true; str = str.substring(0, str.length() - 1); } double x = (new Double(str)).doubleValue(); if(isFloat) return new Float((float)x); else return new Double(x); } else { // assume long or int in base 10 return (convertInt(str, 10)); } } // // Maps '.' characters to '/' characters in a string // public static String convertDots(String orig_name) { return convertChars(orig_name, ".", '/'); } // // Maps chars to toChar in a given String // public static String convertChars(String orig_name, String chars, char toChar) { StringBuffer tmp = new StringBuffer(orig_name); int i; for (i = 0; i < tmp.length(); i++) { if (chars.indexOf(tmp.charAt(i)) != -1) { tmp.setCharAt(i, toChar); } } return new String(tmp); } // // Splits a string like: // "a/b/c/d(xyz)v" // into three strings: // "a/b/c", "d", "(xyz)v" // public static String[] splitClassMethodSignature(String name) { String result[] = new String[3]; int i, pos = 0, sigpos = 0; for (i = 0; i < name.length(); i++) { char c = name.charAt(i); if (c == '.' || c == '/') pos = i; else if (c == '(') {sigpos = i; break; } } result[0] = convertDots(name.substring(0, pos)); result[1] = name.substring(pos + 1, sigpos); result[2] = convertDots(name.substring(sigpos)); return result; } // // Splits a string like: // "java/lang/System/out" // into two strings: // "java/lang/System" and "out" // public static String[] splitClassField(String name) { String result[] = new String[2]; int i, pos = -1, sigpos = 0; for (i = 0; i < name.length(); i++) { char c = name.charAt(i); if (c == '.' || c == '/') pos = i; } if (pos == -1) { // no '/' in string result[0] = null; result[1] = name; } else { result[0] = convertDots(name.substring(0, pos)); result[1] = name.substring(pos + 1); } return result; } // Splits a string like: // "main(Ljava/lang/String;)V // into two strings: // "main" and "(Ljava/lang/String;)V" // public static String[] splitMethodSignature(String name) { String result[] = new String[2]; int i, sigpos = 0; for (i = 0; i < name.length(); i++) { char c = name.charAt(i); if (c == '(') {sigpos = i; break; } } result[0] = name.substring(0, sigpos); result[1] = convertDots(name.substring(sigpos)); return result; } } src/jasmin/parser.cup100644 0 0 54510 11326542060 12306 0ustar 0 0 /** Modifications Copyright (C) 1997, 1998 Raja Vallee-Rai (kor@sable.mcgill.ca) All rights reserved. Changes: - Changed the grammar of the parser to fix some ambiguities which occur when a field is named "method" and vice versa. */ /* --- Copyright Jonathan Meyer 1996. All rights reserved. ----------------- > File: jasmin/src/jasmin/parser.cup > Purpose: Parser for Jasmin > Author: Jonathan Meyer, 10 July 1996 */ /* * parser.cup - Java CUP file containing LALR(1) grammar for Jasmin, * along with calls to ClassFile methods to output bytecode. */ /* CHANGES * soot.tagkits.Base64 is changed to Base64 from jas package. * * Feng Qian, Jan 25, 2001 */ package jasmin; import java_cup.runtime.*; import java_cup.*; import jas.*; import java.io.*; import java.util.Hashtable; /* Preliminaries to set up and use the scanner. */ action code {: short access_val; public Scanner scanner; public ClassFile classFile; :}; parser code {: // parser code public Scanner scanner; public ClassFile classFile; public void report_error(String message, Object info) { classFile.report_error("Warning - " + message); } public void report_fatal_error(String message, Object info) { classFile.report_error("Error - " + message); // System.exit(-1); } parser(ClassFile classFile, Scanner scanner) { super(); this.scanner = scanner; this.classFile = classFile; } :}; init with {: action_obj.scanner = scanner; action_obj.classFile = classFile; :}; scan with {: return scanner.next_token(); :}; /* Terminals (tokens returned by the scanner). */ terminal token // Directives (words beginning with a '.') DCATCH, DCLASS, DEND, DFIELD, DLIMIT, DLINE, DMETHOD, DSET, DSUPER, DNOSUPER, DSOURCE, DTHROWS, DVAR, DIMPLEMENTS, DINTERFACE, // Attributes DCODE_ATTR, DCLASS_ATTR, DFIELD_ATTR, DMETHOD_ATTR, DINNER_CLASS_ATTR, DINNER_CLASS_SPEC_ATTR, DSYNTHETIC, DENCLOSING_METH, DDEPRECATED, DSIG_ATTR, DRUNTIME_VISIBLE, DRUNTIME_INVISIBLE, DRUNTIME_PARAM_VISIBLE, DRUNTIME_PARAM_INVISIBLE, DANNOTATION_ATTR, DANNOTATION, INT_KIND, BYTE_KIND, CHAR_KIND, SHORT_KIND, BOOL_KIND, LONG_KIND, DOUB_KIND, FLOAT_KIND, ARR_KIND, ANN_KIND, ENUM_KIND, CLS_KIND, STR_KIND, DARR_ELEM, DANNOT_ELEM, DELEM, DANNOT_DEFAULT, DPARAM_ANNOT_ATTR, // keywords for directives TO, USING, IS, FROM, METHOD, // access types ABSTRACT, FINAL, INTERFACE, NATIVE, PRIVATE, PROTECTED, PUBLIC, STATIC, SYNCHRONIZED, TRANSIENT, VOLATILE, STRICTFP, ANNOTATION, ENUM, // complex instructions LOOKUPSWITCH, TABLESWITCH, DEFAULT, // special symbols EQ, SEP, COLON ; terminal String Str, Word, Insn; terminal Integer Int; terminal Number Num; nonterminal String classname; nonterminal Object optional_default, item; nonterminal Object deprecated_attr, signature_attr; /* Non terminals */ nonterminal access_item, access_items, access_list, catch_expr, class_spec, complex_instruction, defmethod, directive, endmethod, field_list, field_spec, fields, instruction, impls, implements_list, implements_spec, jas_file, label, limit_expr, lookup, lookup_args, lookup_default, lookup_entry, lookup_list_t, lookup_list, method_list, method_spec, methods, set_expr, simple_instruction, source_spec, statement, statements, stmnt, super_spec, table, table_args, line_expr, table_default, table_entry, table_list_t, table_list, throws_expr, var_expr, code_attr_expr, class_attrs, class_attr_list, class_attr_spec, method_item, method_attrs, method_attr_list, method_attr_spec, field_item, field_attrs, field_attr_list, field_attr_spec, inner_class_attr, inner_class_attr_list, inner_class_attr_spec, end_inner_class_attr, synth_attr, encl_meth_attr, meth_synth_attr, meth_depr_attr, meth_sig_attr, class_depr_attr, class_sig_attr, visibility_type, annotation_attr, annotation_list, annotation, elem_val_pair_list, meth_annotation_attr, class_annotation_attr, elem_val_pair, meth_annotation_default_attr, meth_param_annotation_attr, annotation_attr_list, param_visibility_type, annotation_attr_opt, annotation_list_opt, elem_val_pair_list_opt ; nonterminal Short access; /* The grammar */ jas_file ::= source_spec class_spec super_spec impls class_attrs synth_attr inner_class_attr encl_meth_attr class_depr_attr class_sig_attr class_annotation_attr fields methods ; // ---- Source specification source_spec ::= DSOURCE Word:w SEP {: classFile.setSource(w); :} | /* nothing */ ; // ---- Class specification class_spec ::= DCLASS access:a classname:name SEP {: classFile.setClass(name, (short)(a.intValue() | RuntimeConstants.ACC_SUPER)); :} | DINTERFACE access:a classname:name SEP {: classFile.setClass(name, (short)(a.intValue() | RuntimeConstants.ACC_INTERFACE)); :} ; classname ::= Word:w {: RESULT = ScannerUtils.convertDots(w); :} ; access ::= {: access_val = 0; :} access_list {: RESULT = new Short(access_val); :} ; access_list ::= access_items | ; access_items ::= access_items access_item | access_item ; access_item ::= PUBLIC {: access_val |= RuntimeConstants.ACC_PUBLIC; :} | PRIVATE {: access_val |= RuntimeConstants.ACC_PRIVATE; :} | PROTECTED {: access_val |= RuntimeConstants.ACC_PROTECTED; :} | STATIC {: access_val |= RuntimeConstants.ACC_STATIC; :} | FINAL {: access_val |= RuntimeConstants.ACC_FINAL; :} | SYNCHRONIZED {: access_val |= RuntimeConstants.ACC_SYNCHRONIZED; :} | VOLATILE {: access_val |= RuntimeConstants.ACC_VOLATILE; :} | TRANSIENT {: access_val |= RuntimeConstants.ACC_TRANSIENT; :} | NATIVE {: access_val |= RuntimeConstants.ACC_NATIVE; :} | INTERFACE {: access_val |= RuntimeConstants.ACC_INTERFACE; :} | ABSTRACT {: access_val |= RuntimeConstants.ACC_ABSTRACT; :} | STRICTFP {: access_val |= RuntimeConstants.ACC_STRICTFP; :} | ANNOTATION {: access_val |= RuntimeConstants.ACC_ANNOTATION; :} | ENUM {: access_val |= RuntimeConstants.ACC_ENUM; :} ; // ---- Superclass specification super_spec ::= DSUPER classname:name SEP {: classFile.setSuperClass(name); :} | DNOSUPER SEP {: classFile.setNoSuperClass(); :} ; // ---- Implements specification impls ::= implements_list | /* empty */ ; implements_list ::= implements_list implements_spec | implements_spec ; implements_spec ::= DIMPLEMENTS classname:name SEP {: classFile.addInterface(name); :} ; class_depr_attr ::= deprecated_attr:dep_attr {: classFile.addClassDeprAttr(dep_attr); :} ; class_sig_attr ::= signature_attr:sig_attr {: classFile.addClassSigAttr(sig_attr); :} ; class_annotation_attr ::= annotation_attr_opt:annot_attr {: if(annot_attr!=null) { if(((VisibilityAnnotationAttr)annot_attr).getKind().equals("RuntimeVisible")) classFile.addClassAnnotAttrVisible(annot_attr); else classFile.addClassAnnotAttrInvisible(annot_attr); } :} | annotation_attr:annot_attr annotation_attr:annot_attr2 {: if(((VisibilityAnnotationAttr)annot_attr).getKind().equals("RuntimeVisible")) classFile.addClassAnnotAttrVisible(annot_attr); else classFile.addClassAnnotAttrInvisible(annot_attr); if(((VisibilityAnnotationAttr)annot_attr2).getKind().equals("RuntimeVisible")) classFile.addClassAnnotAttrVisible(annot_attr2); else classFile.addClassAnnotAttrInvisible(annot_attr2); :} ; // ---- Fields fields ::= field_list | /* empty */ ; field_list ::= field_list field_item | field_item; field_item ::= field_spec field_attrs | field_spec; field_spec ::= DFIELD access:a Str:name Word:sig optional_default:v SEP deprecated_attr:dep_attr signature_attr:sig_attr annotation_attr_opt:vis_annot_attr {: classFile.addField((short)a.intValue(), name, sig, v, dep_attr, sig_attr, vis_annot_attr, null); :} | DFIELD access:a Str:name Word:sig optional_default:v DSYNTHETIC SEP deprecated_attr:dep_attr signature_attr:sig_attr annotation_attr_opt:vis_annot_attr {: classFile.addField((short)a.intValue(), name, sig, v, "synth", dep_attr, sig_attr, vis_annot_attr, null); :} | DFIELD access:a Str:name Word:sig optional_default:v SEP deprecated_attr:dep_attr signature_attr:sig_attr annotation_attr:vis_annot_attr1 annotation_attr:vis_annot_attr2 {: classFile.addField((short)a.intValue(), name, sig, v, dep_attr, sig_attr, vis_annot_attr1, vis_annot_attr2); :} | DFIELD access:a Str:name Word:sig optional_default:v DSYNTHETIC SEP deprecated_attr:dep_attr signature_attr:sig_attr annotation_attr:vis_annot_attr1 annotation_attr:vis_annot_attr2 {: classFile.addField((short)a.intValue(), name, sig, v, "synth", dep_attr, sig_attr, vis_annot_attr1, vis_annot_attr2); :} ; // default value for a field optional_default ::= EQ item:v {: RESULT = v; :} | /* empty */ {: RESULT = null; :} ; // an item is an integer, a float/double/long, or a quoted string item ::= Int:i {: RESULT = i; :} | Num:n {: RESULT = n; :} | Str:s {: RESULT = s; :} ; // ---- Methods methods ::= method_list | /* empty */; method_list ::= method_list method_item | method_item; method_item ::= method_spec method_attrs | method_spec; method_spec ::= defmethod statements endmethod | defmethod endmethod ; defmethod ::= DMETHOD access:i Word:name SEP {: String split[] = ScannerUtils.splitMethodSignature(name); classFile.newMethod(split[0], split[1], i.intValue()); :} ; endmethod ::= DEND METHOD SEP {: classFile.endMethod(); :} ; // ---- Statements in a method statements ::= statements statement | statement ; statement ::= {: classFile.setLine(scanner.token_line_num); :} stmnt SEP ; stmnt ::= instruction | directive | error | label | /* empty */ ; // label: label ::= Word:label COLON {: classFile.plantLabel(label); :} ; // Directives (.catch, .set, .limit, etc.) directive ::= DVAR var_expr | DLIMIT limit_expr | DLINE line_expr | DTHROWS throws_expr | DCATCH catch_expr | DSET set_expr | DCODE_ATTR code_attr_expr | meth_synth_attr | meth_depr_attr | meth_sig_attr | meth_annotation_attr | meth_annotation_default_attr | meth_param_annotation_attr ; meth_synth_attr ::= DSYNTHETIC {: classFile.addMethSynthAttr(); :} ; meth_depr_attr ::= DDEPRECATED {: classFile.addMethDeprAttr(); :} ; meth_sig_attr ::= DSIG_ATTR Str:s {: classFile.addMethSigAttr(s); :} ; meth_annotation_attr ::= visibility_type:tval SEP annotation_list:list DEND DANNOTATION_ATTR {: RESULT = classFile.makeVisibilityAnnotation(tval, list); if(tval.equals("RuntimeVisible")) classFile.addMethAnnotAttrVisible(RESULT); else classFile.addMethAnnotAttrInvisible(RESULT); :} ; meth_param_annotation_attr ::= DPARAM_ANNOT_ATTR visibility_type:kind SEP annotation_attr_list:list DEND DPARAM_ANNOT_ATTR {: RESULT = classFile.makeParameterVisibilityAnnotation(kind, list); if(kind.equals("RuntimeVisible")) classFile.addMethParamAnnotAttrVisible(RESULT); else classFile.addMethParamAnnotAttrInvisible(RESULT); :} ; annotation_attr_list ::= annotation_attr_list:list annotation_attr:elem {: RESULT = classFile.mergeNewAnnotAttr(list, elem); :} | annotation_attr:elem {: RESULT = classFile.makeNewAnnotAttrList(elem); :} ; meth_annotation_default_attr ::= DANNOT_DEFAULT elem_val_pair:def DEND DANNOT_DEFAULT {: classFile.addMethAnnotDefault(def); :} ; code_attr_expr ::= Word:w Str:v {: classFile.addSootCodeAttr(w, v); :} ; // // .var is from StartLab to EndLab // var_expr ::= Int:reg IS Word:name Word:sig FROM Word:slab TO Word:elab {: classFile.addVar(slab, elab, name, sig, reg.intValue()); :} | Int:reg IS Word:name Word:sig {: classFile.addVar(null, null, name, sig, reg.intValue()); :} ; // .limit stack // .limit locals limit_expr ::= Word:w Int:v {: // .limit locals if (w.equals("locals") || w.equals("vars")) // "vars" for historic reasons classFile.setVarSize((short)v.intValue()); // .limit stack else if (w.equals("stack")) classFile.setStackSize((short)v.intValue()); else classFile.report_error(".limit expected \"stack\" or \"locals\", but got " + w); :} ; // .line line_expr ::= Int:v {: classFile.addLine(v.intValue()); :} ; // .throws throws_expr ::= classname:s {: classFile.addThrow(s); :} ; // .catch from to using catch_expr ::= classname:aclass FROM Word:fromlab TO Word:tolab USING Word:branchlab {: classFile.addCatch(aclass, fromlab, tolab, branchlab); :} ; // .set = set_expr ::= Word:name Int:v {: scanner.dict.put(name, v); :} | Word:name Word:v {: scanner.dict.put(name, v); :} | Word:name Num:v {: scanner.dict.put(name, v); :} | Word:name Str:v {: scanner.dict.put(name, v); :} ; instruction ::= simple_instruction | complex_instruction ; // Various patterns of instruction: // instruction [] simple_instruction ::= Insn:i {: classFile.plant(i); :} | Insn:i Int:n1 Int:n2 {: classFile.plant(i, n1.intValue(), n2.intValue()); :} | Insn:i Int:n {: classFile.plant(i, n.intValue()); :} | Insn:i Num:n {: classFile.plant(i, n); :} | Insn:i Word:n {: classFile.plant(i, n); :} | Insn:i Word:n Int:n2 {: classFile.plant(i, n, n2.intValue()); :} | Insn:i Word:n1 Word:n2 {: classFile.plant(i, n1, n2); :} | Insn:i Str:n {: classFile.plantString(i, n); :} ; // complex (i.e. multiline) instructions // lookupswitch // tableswitch complex_instruction ::= LOOKUPSWITCH lookup | TABLESWITCH table ; // lookupswitch // :