public DFS addTraceFile(String fileName) throws Throwable {
    Set<Integer> s = new HashSet<Integer>();
    InputStream is = new BufferedInputStream(new FileInputStream(fileName));
    byte[] buf = new byte[14];
    int numRead = 0;
    int numInserted = 0;
    while(is.read(buf) != -1) {
      numRead++;
      if(numRead % 1000000 == 0)
        System.out.println("processed "+numRead+" ("+numInserted+")...");
      int add = ((buf[11]&0xFF) << 8) | (buf[10]&0xFF);
      int bank = (buf[12]&0xFF);
      if(add < 0x8000) {
        if(add >= 0x4000)
          add += (bank-1)*0x4000;
        if(!s.contains(add)) {
          s.add(add);
          dfsStack.push(new DFSStackElem(add, new CPUState(), true));
          numInserted++;
        }
      }
    }
    is.close();
    System.out.println("inserted "+numInserted+" of "+numRead+" traces");

    return this;
  }