public static Logic readFile(InputStream is, boolean close) throws IOException {
   DataInputStream dis;
   if (is instanceof DataInputStream) dis = (DataInputStream) is;
   else dis = new DataInputStream(is);
   Logic logic = new Logic();
   logic.setUnknown1(dis.readInt());
   int numControllers = dis.readInt();
   for (int i = 0; i < numControllers; i++) {
     ControllerEntry controller = new ControllerEntry();
     controller.setPosition(IOLogic.readPoint3s(dis));
     int numGroups = dis.readInt();
     for (int j = 0; j < numGroups; j++) {
       GroupEntry group = new GroupEntry();
       group.setBlockID(dis.readShort());
       int numBlocks = dis.readInt();
       for (int k = 0; k < numBlocks; k++) group.getBlocks().add(IOLogic.readPoint3s(dis));
       controller.getGroups().add(group);
     }
     logic.getControllers().add(controller);
   }
   if (close) dis.close();
   return logic;
 }