public static <T> T repeatedlyTry(Callable<T> task, int maxRounds, long backoff) throws Exception {
		List<Exception> list = new LinkedList<Exception>();
		int round = 0;
		while (round++ < maxRounds) {
			try {
				return task.call();
			} catch (Exception e) {
				list.add(e);
				try {
					Thread.sleep(backoff);
				} catch (InterruptedException e1) {
					e1.printStackTrace();
				}
			}
		}
		throw new Exception("can't run: " + list);
	}