// Path: lib/aelua/jslua/java/io/InputStream.java
// public abstract class InputStream {
//   public abstract int read() throws IOException;
//   
//   public int read(byte[]buf, int start, int len) throws IOException {
//     
//     int end = start + len;
//     for (int i = start; i < end; i++) {
//       int r = read();
//       if (r == -1) {
//         return i == start ? -1 : i - start;
//       }
//       buf[i] = (byte) r;
//     }
//     return len;    
//   }
//   
//   public int read(byte[] buf) throws IOException {
// 	 return read(buf, 0, buf.length);
//   }
//   
//   public void close() throws IOException {
//     
//   }
//   public void mark(int limit)
//   {
//   }
// 	public void reset() throws IOException
//   {
//   }
// }
// 
// Path: lib/aelua/jslua/java/io/DataOutputStream.java
// public class DataOutputStream extends OutputStream implements DataOutput {
// 
// //  OutputStream os;
//   
//   public DataOutputStream (OutputStream os) {
// //    this.os = os;
//   }
//   
// //  @Override
//   public void write(int b) throws IOException {
// //    os.write(b);
//   }
// 
//   public void write(byte[] b,int i,int j) throws IOException {
// //    os.write(b);
//   }
//   public void write(byte[] b) throws IOException {
// //    os.write(b);
//   }
//   
//   public void writeBoolean(boolean v) throws IOException {
//  //   os.write(v ? 1 : 0); 
//   }
// 
//   public void writeByte(int v) throws IOException {
//  //   os.write(v);
//   }
// 
//   public void writeBytes(String s) throws IOException {
// //	int len = s.length();
// //    for(int i = 0; i < len; i++) {
// //    	os.write(s.charAt(i) & 0xff);
// //    }
//   }
// 
//   public void writeChar(int v) throws IOException {
// //    os.write(v >> 8);
// //    os.write(v);
//   }
// 
//   public void writeChars(String s) throws IOException {
// //    throw new RuntimeException("writeChars NYI");
//   }
// 
//   public void writeDouble(double v) throws IOException {
// //    throw new RuntimeException("writeDouble");
//   }
// 
//   public void writeFloat(float v) throws IOException {
// //    writeInt(0);//Numbers.floatToIntBits(v));
//   }
// 
//   public void writeInt(int v) throws IOException {
// //    os.write(v >> 24);
// //    os.write(v >> 16);
// //    os.write(v >> 8);
// //    os.write(v);
//   }
// 
//   public void writeLong(long v) throws IOException {
// //    writeInt((int) (v >> 32L));
// //    writeInt((int) v);
//   }
// 
//   public void writeShort(int v) throws IOException {
// //    os.write(v >> 8);
// //    os.write(v);
//   }
// 
//   public void writeUTF(String s) throws IOException {
// /*    ByteArrayOutputStream baos = new ByteArrayOutputStream();
//     for (int i = 0; i < s.length(); i++) {
//       char c = s.charAt(i);
//       if (c > 0 && c < 80) {
//         baos.write(c);
//       } else if (c < '\u0800') {
//         baos.write(0xc0 | (0x1f & (c >> 6)));
//         baos.write(0x80 | (0x3f & c));
//       } else {
//         baos.write(0xe0 | (0x0f & (c >> 12)));
//         baos.write(0x80 | (0x3f & (c >>  6)));
//         baos.write(0x80 | (0x3f & c));
//       }
//     }
//     writeShort(baos.count);
//     os.write(baos.buf, 0, baos.count);
// */
//   }
//   public void flush() throws IOException {
//  }
// }
// 
// Path: lib/aelua/jslua/java/io/Reader.java
// public abstract class Reader {
//   public void mark(int l) throws IOException
//   {
//   }
// 
//   public void reset() throws IOException
//   {
//   }
// 
//   public int read() throws IOException
//   {
// 	  return 0;
//   }
//   
//   public boolean markSupported()
//   {
// 		return false;
//   }
// }
// 
// Path: lib/aelua/jslua/java/io/FileReader.java
// public class FileReader extends Reader{
// 	
// 	public FileReader(String s1) throws IOException
// 	{
// 	}
//   public void mark(int l) throws IOException
//   {
//   }
// 
//   public void reset() throws IOException
//   {
//   }
// 
//   public int read() throws IOException
//   {
// 	  return 0;
//   }
//   
//   public boolean markSupported()
//   {
// 		return false;
//   }
// }


import java.util.Enumeration;
import java.util.Stack;
import java.util.Vector;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.Reader;
import java.io.FileReader;

    if (r != NUMBER)
    {
      return r;
    }
    return new Double(stack[idx].d);
  }

  /**
   * Sets the stack element.  Double instances are converted to double.
   * @param o  Object to store.
   * @param idx  absolute index into stack (0 <= idx < stackSize).
   */
  private void setObjectAt(Object o, int idx)
  {
    if (o instanceof Double)
    {
      stack[idx].r = NUMBER;
      stack[idx].d = ((Double)o).doubleValue();
      return;
    }
    stack[idx].r = o;
  }

  /**
   * Corresponds to ldump's luaU_dump method, but with data gone and writer
   * replaced by OutputStream.
   */
  static int uDump(Proto f, OutputStream writer, boolean strip)
      throws IOException
  {

// Path: lib/aelua/jslua/java/io/InputStream.java
// public abstract class InputStream {
//   public abstract int read() throws IOException;
//   
//   public int read(byte[]buf, int start, int len) throws IOException {
//     
//     int end = start + len;
//     for (int i = start; i < end; i++) {
//       int r = read();
//       if (r == -1) {
//         return i == start ? -1 : i - start;
//       }
//       buf[i] = (byte) r;
//     }
//     return len;    
//   }
//   
//   public int read(byte[] buf) throws IOException {
// 	 return read(buf, 0, buf.length);
//   }
//   
//   public void close() throws IOException {
//     
//   }
//   public void mark(int limit)
//   {
//   }
// 	public void reset() throws IOException
//   {
//   }
// }
// 
// Path: lib/aelua/jslua/java/io/DataOutputStream.java
// public class DataOutputStream extends OutputStream implements DataOutput {
// 
// //  OutputStream os;
//   
//   public DataOutputStream (OutputStream os) {
// //    this.os = os;
//   }
//   
// //  @Override
//   public void write(int b) throws IOException {
// //    os.write(b);
//   }
// 
//   public void write(byte[] b,int i,int j) throws IOException {
// //    os.write(b);
//   }
//   public void write(byte[] b) throws IOException {
// //    os.write(b);
//   }
//   
//   public void writeBoolean(boolean v) throws IOException {
//  //   os.write(v ? 1 : 0); 
//   }
// 
//   public void writeByte(int v) throws IOException {
//  //   os.write(v);
//   }
// 
//   public void writeBytes(String s) throws IOException {
// //	int len = s.length();
// //    for(int i = 0; i < len; i++) {
// //    	os.write(s.charAt(i) & 0xff);
// //    }
//   }
// 
//   public void writeChar(int v) throws IOException {
// //    os.write(v >> 8);
// //    os.write(v);
//   }
// 
//   public void writeChars(String s) throws IOException {
// //    throw new RuntimeException("writeChars NYI");
//   }
// 
//   public void writeDouble(double v) throws IOException {
// //    throw new RuntimeException("writeDouble");
//   }
// 
//   public void writeFloat(float v) throws IOException {
// //    writeInt(0);//Numbers.floatToIntBits(v));
//   }
// 
//   public void writeInt(int v) throws IOException {
// //    os.write(v >> 24);
// //    os.write(v >> 16);
// //    os.write(v >> 8);
// //    os.write(v);
//   }
// 
//   public void writeLong(long v) throws IOException {
// //    writeInt((int) (v >> 32L));
// //    writeInt((int) v);
//   }
// 
//   public void writeShort(int v) throws IOException {
// //    os.write(v >> 8);
// //    os.write(v);
//   }
// 
//   public void writeUTF(String s) throws IOException {
// /*    ByteArrayOutputStream baos = new ByteArrayOutputStream();
//     for (int i = 0; i < s.length(); i++) {
//       char c = s.charAt(i);
//       if (c > 0 && c < 80) {
//         baos.write(c);
//       } else if (c < '\u0800') {
//         baos.write(0xc0 | (0x1f & (c >> 6)));
//         baos.write(0x80 | (0x3f & c));
//       } else {
//         baos.write(0xe0 | (0x0f & (c >> 12)));
//         baos.write(0x80 | (0x3f & (c >>  6)));
//         baos.write(0x80 | (0x3f & c));
//       }
//     }
//     writeShort(baos.count);
//     os.write(baos.buf, 0, baos.count);
// */
//   }
//   public void flush() throws IOException {
//  }
// }
// 
// Path: lib/aelua/jslua/java/io/Reader.java
// public abstract class Reader {
//   public void mark(int l) throws IOException
//   {
//   }
// 
//   public void reset() throws IOException
//   {
//   }
// 
//   public int read() throws IOException
//   {
// 	  return 0;
//   }
//   
//   public boolean markSupported()
//   {
// 		return false;
//   }
// }
// 
// Path: lib/aelua/jslua/java/io/FileReader.java
// public class FileReader extends Reader{
// 	
// 	public FileReader(String s1) throws IOException
// 	{
// 	}
//   public void mark(int l) throws IOException
//   {
//   }
// 
//   public void reset() throws IOException
//   {
//   }
// 
//   public int read() throws IOException
//   {
// 	  return 0;
//   }
//   
//   public boolean markSupported()
//   {
// 		return false;
//   }
// }


// Path: lib/aelua/jslua/mnj/lua/Lua.java
import java.util.Enumeration;
import java.util.Stack;
import java.util.Vector;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.Reader;
import java.io.FileReader;

    if (r != NUMBER)
    {
      return r;
    }
    return new Double(stack[idx].d);
  }

  /**
   * Sets the stack element.  Double instances are converted to double.
   * @param o  Object to store.
   * @param idx  absolute index into stack (0 <= idx < stackSize).
   */
  private void setObjectAt(Object o, int idx)
  {
    if (o instanceof Double)
    {
      stack[idx].r = NUMBER;
      stack[idx].d = ((Double)o).doubleValue();
      return;
    }
    stack[idx].r = o;
  }

  /**
   * Corresponds to ldump's luaU_dump method, but with data gone and writer
   * replaced by OutputStream.
   */
  static int uDump(Proto f, OutputStream writer, boolean strip)
      throws IOException
  {

    DumpState d = new DumpState(new DataOutputStream(writer), strip) ;
