public suspend fun withTimeout(timeMillis: Long, block: suspend CoroutineScope.() -> T): T { if (timeMillis <= 0L) throw TimeoutCancellationException("Timed out immediately") return suspendCoroutineUninterceptedOrReturn { uCont -> setupTimeout(TimeoutCoroutine(timeMillis, uCont), block) } }