} catch (ExecutionException e) {
if (e.getCause() instanceof SGLRException)
throw (SGLRException) e.getCause();
throw new RuntimeException("unexpected execution error", e);
} catch (InterruptedException e) {
throw new SGLRException(parser, "parser was interrupted", e);
} catch (TimeoutException e) {
res.cancel(true);
throw new SGLRException(parser, "parser timed out, timeout at " + PARSE_TIMEOUT + "ms", e);
}
}