throws Throwable
  public static Value md5_file(Path source,                               @Optional boolean rawOutput)    throws Throwable  {    MessageDigest md = MessageDigest.getInstance("MD5");    InputStream is = null;    try {      is = source.openRead();      int d;      while ((d = is.read()) >= 0) {        md.update((byte) d);      }      return digestToString(md.digest());    } catch (IOException e) {      log.log(Level.FINE, e.toString(), e);      return BooleanValue.FALSE;    } finally {      try {        if (is != null)          is.close();      } catch (IOException e) {      }    }  }