Generated by Cython 3.3.1

Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.

Raw output: oidc.pxi

 0001: ################################################################################
 0002: ##     ___                  _   ____  ____
 0003: ##    / _ \ _   _  ___  ___| |_|  _ \| __ )
 0004: ##   | | | | | | |/ _ \/ __| __| | | |  _ \
 0005: ##   | |_| | |_| |  __/\__ \ |_| |_| | |_) |
 0006: ##    \__\_\\__,_|\___||___/\__|____/|____/
 0007: ##
 0008: ##  Copyright (c) 2014-2019 Appsicle
 0009: ##  Copyright (c) 2019-2026 QuestDB
 0010: ##
 0011: ##  Licensed under the Apache License, Version 2.0 (the "License");
 0012: ##  you may not use this file except in compliance with the License.
 0013: ##  You may obtain a copy of the License at
 0014: ##
 0015: ##  http://www.apache.org/licenses/LICENSE-2.0
 0016: ##
 0017: ##  Unless required by applicable law or agreed to in writing, software
 0018: ##  distributed under the License is distributed on an "AS IS" BASIS,
 0019: ##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 0020: ##  See the License for the specific language governing permissions and
 0021: ##  limitations under the License.
 0022: ##
 0023: ################################################################################
 0024: 
 0025: # Native OIDC device-flow glue. The Rust implementation in c-questdb-client is
 0026: # the single owner of token acquisition, refresh, caching, and persistence;
 0027: # Python retains presentation and adapter conveniences only.
 0028: 
+0029: if not qdb_oidc_callback_gate_init():
  __pyx_t_8 = (!qdb_oidc_callback_gate_init());

  if (unlikely(__pyx_t_8)) {
/* … */
  }
+0030:     raise MemoryError('Could not initialize the OIDC callback shutdown gate')
    __pyx_t_16 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_mstate_global->__pyx_kp_u_Could_not_initialize_the_OIDC_ca};
      __pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 30, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
    }
    __Pyx_Raise(__pyx_t_17, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __PYX_ERR(1, 30, __pyx_L1_error)
 0031: 
 0032: 
 0033: cdef extern from *:
 0034:     """
 0035:     /* Re-raise an exception on the main thread at its next bytecode.
 0036:        CPython runs a pending call exactly where it runs Python signal
 0037:        handlers, and an exception the call sets propagates from there, so a
 0038:        parked exception surfaces as if the handler had raised it after the
 0039:        native call returned -- without running that handler a second time, as
 0040:        re-arming the signal did. PyPy's cpyext declares the function but
 0041:        never delivers the call (measured on PyPy 7.3.19), so there this
 0042:        reports failure, as a full queue does on CPython, and the next
 0043:        native-return boundary raises the exception instead
 0044:        (`_oidc_raise_unscheduled_main`). */
 0045:     #if defined(PYPY_VERSION)
 0046:     static int questdb_add_pending_call(int (*func)(void*), void* arg) {
 0047:         (void)func; (void)arg; return -1;
 0048:     }
 0049:     #else
 0050:     static int questdb_add_pending_call(int (*func)(void*), void* arg) {
 0051:         return Py_AddPendingCall(func, arg);
 0052:     }
 0053:     #endif
 0054:     """
 0055:     int questdb_add_pending_call(int (*func)(void*) noexcept, void* arg)
 0056: 
 0057:     # Defined by every Cython-generated module.
 0058:     int CYTHON_COMPILING_IN_PYPY
 0059: 
 0060: 
 0061: cdef extern from "pythread.h":
 0062:     # A plain C call. Asking `threading` instead runs bytecode, and CPython
 0063:     # runs pending signal handlers at bytecode boundaries -- inside a callback
 0064:     # that must first catch them with PyErr_CheckSignals().
 0065:     unsigned long questdb_thread_ident "PyThread_get_thread_ident" () nogil
 0066: 
 0067: 
 0068: # A genuinely *interpreted* no-op, used to give PyPy a bytecode boundary at
 0069: # which to deliver a pending signal (see `_oidc_signal_tick`). It has to be
 0070: # built with exec(): a `def` in this file is compiled to C like everything
 0071: # else here, and C frames are exactly what PyPy will not interrupt. The
 0072: # backward jump is the boundary PyPy's periodic-action check is tied to.
+0073: _OIDC_SIGNAL_TICK_NS = {}
  __pyx_t_17 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OIDC_SIGNAL_TICK_NS, __pyx_t_17) < (0)) __PYX_ERR(1, 73, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+0074: exec(
  __pyx_t_16 = __Pyx_PyExec2(__pyx_mstate_global->__pyx_kp_u_def__oidc_signal_tick_py_for___i, __pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 0075:     'def _oidc_signal_tick_py():\n'
 0076:     '    for _ in range(2):\n'
 0077:     '        pass\n',
+0078:     _OIDC_SIGNAL_TICK_NS)
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_OIDC_SIGNAL_TICK_NS); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
+0079: _OIDC_SIGNAL_TICK = _OIDC_SIGNAL_TICK_NS['_oidc_signal_tick_py']
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_OIDC_SIGNAL_TICK_NS); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_17 = __Pyx_PyObject_Dict_GetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_oidc_signal_tick_py); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OIDC_SIGNAL_TICK, __pyx_t_17) < (0)) __PYX_ERR(1, 79, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 0080: 
 0081: 
+0082: cdef void_int _oidc_signal_tick() except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__oidc_signal_tick(void) {
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._oidc_signal_tick", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0083:     """Run any Python signal handler PyPy has left pending.
 0084: 
 0085:     A no-op on CPython, where ``PyErr_CheckSignals()`` has already done it.
 0086:     """
+0087:     _OIDC_SIGNAL_TICK()
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_OIDC_SIGNAL_TICK); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 87, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0088:     return 0
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 0089: 
 0090: 
+0091: cdef object _oidc_signal_handler_codes():
static PyObject *__pyx_f_7questdb_7_client__oidc_signal_handler_codes(void) {
  PyObject *__pyx_v_functools = NULL;
  PyObject *__pyx_v_signal = NULL;
  PyObject *__pyx_v_types = NULL;
  PyObject *__pyx_v_codes = NULL;
  PyObject *__pyx_v_signum = NULL;
  PyObject *__pyx_v_handler = NULL;
  PyObject *__pyx_v_code = NULL;
  PyObject *__pyx_v_cls = NULL;
  PyObject *__pyx_v_call = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("questdb._client._oidc_signal_handler_codes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_functools);
  __Pyx_XDECREF(__pyx_v_signal);
  __Pyx_XDECREF(__pyx_v_types);
  __Pyx_XDECREF(__pyx_v_codes);
  __Pyx_XDECREF(__pyx_v_signum);
  __Pyx_XDECREF(__pyx_v_handler);
  __Pyx_XDECREF(__pyx_v_code);
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XDECREF(__pyx_v_call);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0092:     """Snapshot handler code AND signum, without reading handler properties.
 0093: 
 0094:     The pre-callback snapshot covers a one-shot handler that unregisters
 0095:     before raising. Only the main thread can run Python signal handlers.
 0096:     """
+0097:     if questdb_thread_ident() != _OIDC_MAIN_THREAD_IDENT:
  __pyx_t_1 = (PyThread_get_thread_ident() != __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);

  if (__pyx_t_1) {
/* … */
  }
+0098:         return {}
    __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 98, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+0099:     import functools
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_functools, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 99, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_functools = __pyx_t_2;
  __pyx_t_2 = 0;
+0100:     import signal
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_signal, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 100, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_signal = __pyx_t_2;
  __pyx_t_2 = 0;
+0101:     import types
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_types, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 101, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_types = __pyx_t_2;
  __pyx_t_2 = 0;
+0102:     codes = {}
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_codes = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+0103:     for signum in signal.valid_signals():
  __pyx_t_4 = __pyx_v_signal;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_valid_signals, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
    __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4);
    __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 103, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    if (likely(!__pyx_t_7)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 103, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        __pyx_t_2 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_4, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_6;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 103, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6));
        #else
        __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_6);
        #endif
        ++__pyx_t_6;
      }
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 103, __pyx_L1_error)
    } else {
      __pyx_t_2 = __pyx_t_7(__pyx_t_4);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(1, 103, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_signum, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
    __pyx_L4_continue:;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0104:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L13_try_end;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
      __pyx_L8_except_error:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_8, __pyx_t_9);
      goto __pyx_L1_error;
      __pyx_L12_try_continue:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_8, __pyx_t_9);
      goto __pyx_L4_continue;
      __pyx_L13_try_end:;
    }
+0105:             handler = signal.getsignal(signum)
        __pyx_t_10 = __pyx_v_signal;
        __Pyx_INCREF(__pyx_t_10);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_signum};
          __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_getsignal, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 105, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_XDECREF_SET(__pyx_v_handler, __pyx_t_2);
        __pyx_t_2 = 0;
+0106:         except (OSError, ValueError):
      __pyx_t_11 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_OSError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
      if (__pyx_t_11) {
        __Pyx_AddTraceback("questdb._client._oidc_signal_handler_codes", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_10, &__pyx_t_12) < 0) __PYX_ERR(1, 106, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_12);
+0107:             continue  # valid_signals includes OS-reserved signal numbers
        goto __pyx_L14_except_continue;
        __pyx_L14_except_continue:;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        goto __pyx_L12_try_continue;
      }
      goto __pyx_L8_except_error;
+0108:         while isinstance(handler, functools.partial):
    while (1) {
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_functools, __pyx_mstate_global->__pyx_n_u_partial); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 108, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_1 = PyObject_IsInstance(__pyx_v_handler, __pyx_t_12); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 108, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;

      if (!__pyx_t_1) break;
+0109:             handler = handler.func
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_handler, __pyx_mstate_global->__pyx_n_u_func); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 109, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF_SET(__pyx_v_handler, __pyx_t_12);
      __pyx_t_12 = 0;
    }
+0110:         if isinstance(handler, types.MethodType):
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_types, __pyx_mstate_global->__pyx_n_u_MethodType); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 110, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_1 = PyObject_IsInstance(__pyx_v_handler, __pyx_t_12); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 110, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (__pyx_t_1) {
/* … */
    }
+0111:             handler = handler.__func__
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_handler, __pyx_mstate_global->__pyx_n_u_func_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 111, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF_SET(__pyx_v_handler, __pyx_t_12);
      __pyx_t_12 = 0;
+0112:         if isinstance(handler, types.FunctionType):
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_types, __pyx_mstate_global->__pyx_n_u_FunctionType); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 112, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_1 = PyObject_IsInstance(__pyx_v_handler, __pyx_t_12); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 112, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (__pyx_t_1) {
/* … */
      goto __pyx_L19;
    }
+0113:             code = handler.__code__
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_handler, __pyx_mstate_global->__pyx_n_u_code_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 113, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_XDECREF_SET(__pyx_v_code, __pyx_t_12);
      __pyx_t_12 = 0;
+0114:         elif callable(handler):
    __pyx_t_1 = __Pyx_PyCallable_Check(__pyx_v_handler); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 114, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
      goto __pyx_L19;
    }
 0115:             # Inspect the class dictionary, not the handler instance: an
 0116:             # unrelated callable signal handler may define a __code__ property
 0117:             # with side effects or one that raises on access.
+0118:             code = None
      __Pyx_INCREF(Py_None);
      __Pyx_XDECREF_SET(__pyx_v_code, Py_None);
+0119:             for cls in type(handler).__mro__:
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_handler)), __pyx_mstate_global->__pyx_n_u_mro); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 119, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      if (likely(PyList_CheckExact(__pyx_t_12)) || PyTuple_CheckExact(__pyx_t_12)) {
        __pyx_t_10 = __pyx_t_12; __Pyx_INCREF(__pyx_t_10);
        __pyx_t_13 = 0;
        __pyx_t_14 = NULL;
      } else {
        __pyx_t_13 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 119, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_14 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_10); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 119, __pyx_L1_error)
      }
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      for (;;) {
        if (likely(!__pyx_t_14)) {
          if (likely(PyList_CheckExact(__pyx_t_10))) {
            {
              Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_10);
              #if !CYTHON_ASSUME_SAFE_SIZE
              if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 119, __pyx_L1_error)
              #endif
              if (__pyx_t_13 >= __pyx_temp) break;
            }
            __pyx_t_12 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_10, __pyx_t_13, __Pyx_ReferenceSharing_OwnStrongReference);
            ++__pyx_t_13;
          } else {
            {
              Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_10);
              #if !CYTHON_ASSUME_SAFE_SIZE
              if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 119, __pyx_L1_error)
              #endif
              if (__pyx_t_13 >= __pyx_temp) break;
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_12 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_13));
            #else
            __pyx_t_12 = __Pyx_PySequence_ITEM(__pyx_t_10, __pyx_t_13);
            #endif
            ++__pyx_t_13;
          }
          if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 119, __pyx_L1_error)
        } else {
          __pyx_t_12 = __pyx_t_14(__pyx_t_10);
          if (unlikely(!__pyx_t_12)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(1, 119, __pyx_L1_error)
              PyErr_Clear();
            }
            break;
          }
        }
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_XDECREF_SET(__pyx_v_cls, __pyx_t_12);
        __pyx_t_12 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L23_for_end;
      __pyx_L21_break:;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L23_for_end;
      __pyx_L23_for_end:;
+0120:                 call = cls.__dict__.get('__call__')
        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_cls, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 120, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_2 = __pyx_t_15;
        __Pyx_INCREF(__pyx_t_2);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_call};
          __pyx_t_12 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 120, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
        }
        __Pyx_XDECREF_SET(__pyx_v_call, __pyx_t_12);
        __pyx_t_12 = 0;
+0121:                 if isinstance(call, types.FunctionType):
        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_types, __pyx_mstate_global->__pyx_n_u_FunctionType); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 121, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_1 = PyObject_IsInstance(__pyx_v_call, __pyx_t_12); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 121, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (__pyx_t_1) {
/* … */
        }
+0122:                     code = call.__code__
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_call, __pyx_mstate_global->__pyx_n_u_code_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 122, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF_SET(__pyx_v_code, __pyx_t_12);
          __pyx_t_12 = 0;
+0123:                     break
          goto __pyx_L21_break;
 0124:         else:
+0125:             code = None
    /*else*/ {
      __Pyx_INCREF(Py_None);
      __Pyx_XDECREF_SET(__pyx_v_code, Py_None);
    }
    __pyx_L19:;
+0126:         if code is not None:
    __pyx_t_1 = (__pyx_v_code != Py_None);
    if (__pyx_t_1) {
/* … */
    }
+0127:             codes.setdefault(code, set()).add(signum)
      __pyx_t_15 = PySet_New(0); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 127, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_2 = __Pyx_PyDict_SetDefault(__pyx_v_codes, __pyx_v_code, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 127, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_12 = __pyx_t_2;
      __Pyx_INCREF(__pyx_t_12);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_signum};
        __pyx_t_10 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_add, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
      }
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+0128:     return codes
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_codes);
      __pyx_r = __pyx_v_codes;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 0129: 
 0130: 
+0131: cdef bint _oidc_traceback_has_signal_call(
static int __pyx_f_7questdb_7_client__oidc_traceback_has_signal_call(PyObject *__pyx_v_tb, PyObject *__pyx_v_codes) {
  PyObject *__pyx_v_inspect = NULL;
  PyObject *__pyx_v_frame = NULL;
  PyObject *__pyx_v_code = NULL;
  PyObject *__pyx_v_signums = NULL;
  PyObject *__pyx_v_frame_locals = NULL;
  PyObject *__pyx_v_args = NULL;
  PyObject *__pyx_v_varargs_name = NULL;
  PyObject *__pyx_v_rest = NULL;
  PyObject *__pyx_v_idx = NULL;
  PyObject *__pyx_8genexpr3__pyx_v_name = NULL;
  int __pyx_r;
  __Pyx_INCREF(__pyx_v_tb);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._oidc_traceback_has_signal_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_inspect);
  __Pyx_XDECREF(__pyx_v_frame);
  __Pyx_XDECREF(__pyx_v_code);
  __Pyx_XDECREF(__pyx_v_signums);
  __Pyx_XDECREF(__pyx_v_frame_locals);
  __Pyx_XDECREF(__pyx_v_args);
  __Pyx_XDECREF(__pyx_v_varargs_name);
  __Pyx_XDECREF(__pyx_v_rest);
  __Pyx_XDECREF(__pyx_v_idx);
  __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_tb);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0132:         object tb, object codes) except -1:
 0133:     """Check the actual (signum, interrupted frame) handler arguments.
 0134: 
 0135:     Code identity alone is insufficient: separate closures from one factory
 0136:     share __code__, and a renderer may call its installed handler as an
 0137:     ordinary helper without a signal. Python invokes a handler with the
 0138:     signal number followed by the interrupted Python frame; require both.
 0139:     """
+0140:     import inspect
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_inspect, 0, 0, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 140, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_inspect = __pyx_t_1;
  __pyx_t_1 = 0;
+0141:     while tb is not None:
  while (1) {
    __pyx_t_3 = (__pyx_v_tb != Py_None);

    if (!__pyx_t_3) break;
+0142:         frame = tb.tb_frame
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_tb, __pyx_mstate_global->__pyx_n_u_tb_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 142, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_frame, __pyx_t_1);
    __pyx_t_1 = 0;
+0143:         code = frame.f_code
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 143, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_code, __pyx_t_1);
    __pyx_t_1 = 0;
+0144:         signums = codes.get(code)
    __pyx_t_4 = __pyx_v_codes;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_code};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 144, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_signums, __pyx_t_1);
    __pyx_t_1 = 0;
+0145:         if signums:
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_signums); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 145, __pyx_L1_error)
    if (__pyx_t_3) {
/* … */
    }
+0146:             frame_locals = frame.f_locals
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_f_locals); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 146, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_frame_locals, __pyx_t_1);
      __pyx_t_1 = 0;
+0147:             args = [frame_locals[name]
      { /* enter inner scope */
        __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 147, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_1);
/* … */
            __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_frame_locals, __pyx_8genexpr3__pyx_v_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 147, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_7);
            if (unlikely(__Pyx_ListComp_AppendAndDecref(__pyx_t_1, __pyx_t_7))) __PYX_ERR(1, 147, __pyx_L8_error)
            __pyx_t_7 = 0;
+0148:                     for name in code.co_varnames[:code.co_argcount]
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_code, __pyx_mstate_global->__pyx_n_u_co_varnames); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 148, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_code, __pyx_mstate_global->__pyx_n_u_co_argcount); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 148, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 0, 0, NULL, &__pyx_t_6, NULL, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 148, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) {
          __pyx_t_6 = __pyx_t_7; __Pyx_INCREF(__pyx_t_6);
          __pyx_t_8 = 0;
          __pyx_t_9 = NULL;
        } else {
          __pyx_t_8 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 148, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 148, __pyx_L8_error)
        }
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        for (;;) {
          if (likely(!__pyx_t_9)) {
            if (likely(PyList_CheckExact(__pyx_t_6))) {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_6);
                #if !CYTHON_ASSUME_SAFE_SIZE
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 148, __pyx_L8_error)
                #endif
                if (__pyx_t_8 >= __pyx_temp) break;
              }
              __pyx_t_7 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_6, __pyx_t_8, __Pyx_ReferenceSharing_OwnStrongReference);
              ++__pyx_t_8;
            } else {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_6);
                #if !CYTHON_ASSUME_SAFE_SIZE
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 148, __pyx_L8_error)
                #endif
                if (__pyx_t_8 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_7 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_8));
              #else
              __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_8);
              #endif
              ++__pyx_t_8;
            }
            if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 148, __pyx_L8_error)
          } else {
            __pyx_t_7 = __pyx_t_9(__pyx_t_6);
            if (unlikely(!__pyx_t_7)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(1, 148, __pyx_L8_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v_name, __pyx_t_7);
          __pyx_t_7 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_name); __pyx_8genexpr3__pyx_v_name = 0;
        goto __pyx_L13_exit_scope;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_name); __pyx_8genexpr3__pyx_v_name = 0;
        goto __pyx_L1_error;
        __pyx_L13_exit_scope:;
      } /* exit inner scope */
      __Pyx_XDECREF_SET(__pyx_v_args, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;
+0149:                     if name in frame_locals]
          __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_8genexpr3__pyx_v_name, __pyx_v_frame_locals, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 149, __pyx_L8_error)
          if (__pyx_t_3) {
/* … */
          }
+0150:             if code.co_flags & inspect.CO_VARARGS:
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_code, __pyx_mstate_global->__pyx_n_u_co_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 150, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_inspect, __pyx_mstate_global->__pyx_n_u_CO_VARARGS); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 150, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyNumber_And_object_object(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 150, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 150, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (__pyx_t_3) {
/* … */
      }
+0151:                 varargs_name = code.co_varnames[
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_code, __pyx_mstate_global->__pyx_n_u_co_varnames); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 151, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
/* … */
        __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 151, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF_SET(__pyx_v_varargs_name, __pyx_t_1);
        __pyx_t_1 = 0;
+0152:                     code.co_argcount + code.co_kwonlyargcount]
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_code, __pyx_mstate_global->__pyx_n_u_co_argcount); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 152, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_code, __pyx_mstate_global->__pyx_n_u_co_kwonlyargcount); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 152, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyNumber_Add_object_object(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 152, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0153:                 rest = frame_locals.get(varargs_name)
        __pyx_t_4 = __pyx_v_frame_locals;
        __Pyx_INCREF(__pyx_t_4);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_varargs_name};
          __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 153, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_XDECREF_SET(__pyx_v_rest, __pyx_t_1);
        __pyx_t_1 = 0;
+0154:                 if isinstance(rest, tuple):
        __pyx_t_3 = PyTuple_Check(__pyx_v_rest); 
        if (__pyx_t_3) {
/* … */
        }
+0155:                     args.extend(rest)
          __pyx_t_10 = __Pyx_PyList_Extend(__pyx_v_args, __pyx_v_rest); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(1, 155, __pyx_L1_error)

+0156:             for idx in range(len(args) - 1):
      __pyx_t_4 = NULL;
      __pyx_t_8 = __Pyx_PyList_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(1, 156, __pyx_L1_error)
      __pyx_t_7 = PyLong_FromSsize_t((__pyx_t_8 - 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 156, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);

      __pyx_t_5 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 156, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 156, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 156, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      for (;;) {
        {
          __pyx_t_1 = __pyx_t_9(__pyx_t_7);
          if (unlikely(!__pyx_t_1)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(1, 156, __pyx_L1_error)
              PyErr_Clear();
            }
            break;
          }
        }
        __Pyx_GOTREF(__pyx_t_1);
        if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 1) < (0)) __PYX_ERR(1, 156, __pyx_L1_error)
        __Pyx_XDECREF_SET(__pyx_v_idx, ((PyObject*)__pyx_t_1));
        __pyx_t_1 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0157:                 if (type(args[idx]) is int and args[idx] in signums
        __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_args, __pyx_v_idx); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 157, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_11 = (((PyObject *)Py_TYPE(__pyx_t_1)) == ((PyObject *)(&PyLong_Type)));
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (__pyx_t_11) {

        } else {

          __pyx_t_3 = __pyx_t_11;

          goto __pyx_L19_bool_binop_done;
        }
/* … */
        __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_args, __pyx_v_idx); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 157, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
/* … */
        __pyx_t_11 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_v_signums, Py_EQ)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(1, 157, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (__pyx_t_11) {

        } else {

          __pyx_t_3 = __pyx_t_11;

          goto __pyx_L19_bool_binop_done;
        }
/* … */
        if (__pyx_t_3) {
/* … */
        }
+0158:                         and args[idx + 1] is frame.f_back):
        __pyx_t_1 = __Pyx_PyLong_AddObjC(__pyx_v_idx, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 158, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_args, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 158, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 158, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_11 = (__pyx_t_4 == __pyx_t_1);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        __pyx_t_3 = __pyx_t_11;

        __pyx_L19_bool_binop_done:;
+0159:                     return True
          {

            __pyx_r = 1;
          }
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          goto __pyx_L0;
+0160:         tb = tb.tb_next
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_tb, __pyx_mstate_global->__pyx_n_u_tb_next); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF_SET(__pyx_v_tb, __pyx_t_7);
    __pyx_t_7 = 0;
  }
+0161:     return False
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 0162: 
 0163: 
+0164: cdef bint _oidc_raised_in_signal_handler(
static int __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(PyObject *__pyx_v_exc, PyObject *__pyx_v_installed_codes) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._oidc_raised_in_signal_handler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0165:         object exc, object installed_codes) except -1:
 0166:     """Identify a delivered signal, not an ordinary renderer/logger error."""
+0167:     if _oidc_traceback_has_signal_call(exc.__traceback__, installed_codes):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_traceback); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_traceback_has_signal_call(__pyx_t_1, __pyx_v_installed_codes); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 167, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+0168:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
 0169:     # A callback may install a new handler after the snapshot. Also check the
 0170:     # handlers still installed at the point of failure; the snapshot above
 0171:     # remains necessary for one-shot handlers that removed themselves.
+0172:     return _oidc_traceback_has_signal_call(
  __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_traceback_has_signal_call(__pyx_t_1, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 172, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  {
    __pyx_r = __pyx_t_2;
  }
  goto __pyx_L0;
+0173:         exc.__traceback__, _oidc_signal_handler_codes())
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_traceback); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __pyx_f_7questdb_7_client__oidc_signal_handler_codes(); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
 0174: 
 0175: 
+0176: def _oidc_exception_is_from_signal_handler(object exc):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_5_oidc_exception_is_from_signal_handler(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_4_oidc_exception_is_from_signal_handler, "Whether ``exc`` was raised by a Python signal handler.\n\n    For the built-in renderers, whose best-effort ``except Exception`` blocks\n    would otherwise swallow a signal handler\047s exception (a SIGALRM deadline\047s\n    ``TimeoutError``, say) raised while they run, so ``sign_in()`` kept\n    polling. They re-raise it for the event dispatcher to cancel the sign-in,\n    exactly as for a custom renderer.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_5_oidc_exception_is_from_signal_handler = {"_oidc_exception_is_from_signal_handler", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_5_oidc_exception_is_from_signal_handler, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_4_oidc_exception_is_from_signal_handler};
static PyObject *__pyx_pw_7questdb_7_client_5_oidc_exception_is_from_signal_handler(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_exc = 0;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_oidc_exception_is_from_signal_handler (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_exc,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 176, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 176, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_oidc_exception_is_from_signal_handler", 0) < (0)) __PYX_ERR(1, 176, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_oidc_exception_is_from_signal_handler", 1, 1, 1, i); __PYX_ERR(1, 176, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 176, __pyx_L3_error)
    }
    __pyx_v_exc = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_oidc_exception_is_from_signal_handler", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 176, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._oidc_exception_is_from_signal_handler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_4_oidc_exception_is_from_signal_handler(__pyx_self, __pyx_v_exc);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_4_oidc_exception_is_from_signal_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_exc) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._oidc_exception_is_from_signal_handler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_5_oidc_exception_is_from_signal_handler, 0, __pyx_mstate_global->__pyx_n_u_oidc_exception_is_from_signal_h, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[23])); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_oidc_exception_is_from_signal_h, __pyx_t_17) < (0)) __PYX_ERR(1, 176, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 0177:     """Whether ``exc`` was raised by a Python signal handler.
 0178: 
 0179:     For the built-in renderers, whose best-effort ``except Exception`` blocks
 0180:     would otherwise swallow a signal handler's exception (a SIGALRM deadline's
 0181:     ``TimeoutError``, say) raised while they run, so ``sign_in()`` kept
 0182:     polling. They re-raise it for the event dispatcher to cancel the sign-in,
 0183:     exactly as for a custom renderer.
 0184:     """
+0185:     return bool(_oidc_raised_in_signal_handler(
  __pyx_t_2 = NULL;
/* … */
  __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(__pyx_v_exc, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 185, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 185, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = ((PyObject *)__pyx_t_1);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
+0186:         exc, _oidc_signal_handler_codes()))
  __pyx_t_3 = __pyx_f_7questdb_7_client__oidc_signal_handler_codes(); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
 0187: 
 0188: 
 0189: # Exceptions Python signal handlers raised on the MAIN thread inside a
 0190: # persistence diagnostic that no foreground sign_in()/token()/clear() record
 0191: # can re-raise -- an attached transport (an ILP/HTTP flush, say) pulled the
 0192: # token on the caller's thread with the GIL released. Catching one inside the
 0193: # callback already cleared CPython's tripped-signal state, so each is handed
 0194: # back to the main thread through a pending call (`_oidc_raise_parked_main`),
 0195: # oldest first, one per pending call -- as CPython itself delivers two
 0196: # signals' exceptions at successive bytecode boundaries. Where no pending call
 0197: # can be queued -- always on PyPy -- the next native-return boundary raises
 0198: # them instead (`_oidc_raise_unscheduled_main`). Bounded: only a handler that
 0199: # raises adds to it. Touched only with the GIL held.
 0200: #
 0201: # Each entry is `(exception, owner)`: the greenlet that was running when the
 0202: # exception was caught, or None without greenlets. Greenlets share the main
 0203: # thread, and an exception gevent throws into one greenlet's callback -- a
 0204: # `gevent.Timeout`, the `GreenletExit` of `kill()` -- is parked like a signal's;
 0205: # it is raised only in its own greenlet, never in whichever one runs next.
+0206: cdef list _OIDC_MAIN_PARKED = []
  __pyx_t_17 = PyList_New(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, ((PyObject*)__pyx_t_17));
  __Pyx_GIVEREF(__pyx_t_17);
  __pyx_t_17 = 0;
+0207: cdef Py_ssize_t _OIDC_MAIN_PARKED_MAX = 64
  __pyx_v_7questdb_7_client__OIDC_MAIN_PARKED_MAX = 64;
+0208: cdef bint _OIDC_MAIN_PARK_SCHEDULED = False
  __pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED = 0;
 0209: # Internal fault injection, used to exercise CPython's documented full-queue
 0210: # return without a racy native producer flooding the process-wide queue.
+0211: cdef int _OIDC_PENDING_CALL_FAILURES_REMAINING = 0
  __pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING = 0;
+0212: cdef bint _OIDC_COUNT_NATIVE_FREES = False
  __pyx_v_7questdb_7_client__OIDC_COUNT_NATIVE_FREES = 0;
+0213: cdef uint64_t _OIDC_TOKEN_FREES = 0
  __pyx_v_7questdb_7_client__OIDC_TOKEN_FREES = 0;
+0214: cdef uint64_t _OIDC_ERROR_FREES = 0
  __pyx_v_7questdb_7_client__OIDC_ERROR_FREES = 0;
 0215: # Regions of code ON THE MAIN THREAD in which a parked exception must not be
 0216: # raised, by kind:
 0217: #
 0218: # * A diagnostic dispatch: a pending call that fires inside one (the logging
 0219: #   call runs bytecode) must not raise there, where the dispatcher would take
 0220: #   the exception for a logging-handler failure; it defers, and the dispatcher
 0221: #   reschedules on its way out. Pending calls only ever run on the main thread,
 0222: #   so dispatches on other threads are not counted: counting them let an
 0223: #   unrelated worker's slow logging handler hold back the main thread's
 0224: #   interrupt for as long as that handler ran, while the main thread kept
 0225: #   executing user code.
 0226: # * A token callback: they can run repeatedly inside one GIL-released
 0227: #   transport call, and parked exceptions must never be delivered back into
 0228: #   one.
 0229: # * Row serialization, which wraps ordinary exceptions as dataframe errors:
 0230: #   saved signals are delivered only after leaving it, at Sender.dataframe's
 0231: #   outer boundary.
 0232: #
 0233: # Each kind maps a context to its depth: the greenlet running when the region
 0234: # was entered, or None without greenlets. A greenlet suspended inside a region
 0235: # -- a token provider waiting on gevent I/O, say -- then holds back only its
 0236: # own exceptions, not those of the greenlet that runs meanwhile. A region
 0237: # entered before the greenlet module was loaded counts for every greenlet, and
 0238: # so does one that could not be recorded (`_OIDC_MAIN_UNTRACKED_REGIONS`).
+0239: cdef enum:
enum  {
  __pyx_e_7questdb_7_client__OIDC_REGION_TOKEN = 0,
  __pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC = 1,
  __pyx_e_7questdb_7_client__OIDC_REGION_DATAFRAME = 2,
  __pyx_e_7questdb_7_client__OIDC_REGION_KINDS = 3
};
 0240:     _OIDC_REGION_TOKEN = 0
 0241:     _OIDC_REGION_DIAGNOSTIC = 1
 0242:     _OIDC_REGION_DATAFRAME = 2
 0243:     _OIDC_REGION_KINDS = 3
+0244: cdef list _OIDC_MAIN_REGIONS = [{}, {}, {}]
  __pyx_t_17 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_16 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  {
    PyObject* __pyx_temp[3] = {__pyx_t_17, __pyx_t_16, __pyx_t_5};
    __pyx_t_18 = __Pyx_PyList_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 244, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS, ((PyObject*)__pyx_t_18));
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
+0245: cdef int _OIDC_MAIN_UNTRACKED_REGIONS = 0
  __pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS = 0;
 0246: # Marks a region `_oidc_main_region_enter` could not record, and an unset value.
+0247: cdef object _OIDC_UNTRACKED = object()
  __pyx_t_5 = NULL;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
    __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 247, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
  }
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_UNTRACKED);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_UNTRACKED, __pyx_t_18);
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
+0248: cdef object _OIDC_UNSET = object()
  __pyx_t_5 = NULL;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
    __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 248, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
  }
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_UNSET);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_UNSET, __pyx_t_18);
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
 0249: # `greenlet.getcurrent` and the base type's C `dead` and `parent` getters,
 0250: # once the greenlet module is loaded. Never imported here: without greenlets
 0251: # there is nothing to tell apart.
+0252: cdef object _OIDC_GREENLET_GETCURRENT = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_GETCURRENT);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_GREENLET_GETCURRENT, Py_None);
  __Pyx_GIVEREF(Py_None);
+0253: cdef object _OIDC_GREENLET_DEAD = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_DEAD);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_GREENLET_DEAD, Py_None);
  __Pyx_GIVEREF(Py_None);
+0254: cdef object _OIDC_GREENLET_PARENT = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_PARENT);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_GREENLET_PARENT, Py_None);
  __Pyx_GIVEREF(Py_None);
 0255: 
+0256: import sys as _oidc_sys
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_sys, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 256, __pyx_L1_error)
  __pyx_t_18 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_18);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_oidc_sys, __pyx_t_18) < (0)) __PYX_ERR(1, 256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0257: 
 0258: 
+0259: cdef unsigned long _oidc_main_thread_ident() except? 0:
static unsigned long __pyx_f_7questdb_7_client__oidc_main_thread_ident(void) {
  unsigned long __pyx_v_ident;
  PyObject *__pyx_v_main = NULL;
  PyObject *__pyx_v_get_native_id = NULL;
  unsigned long __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._oidc_main_thread_ident", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;

  __Pyx_XDECREF(__pyx_v_main);
  __Pyx_XDECREF(__pyx_v_get_native_id);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0260:     """The interpreter's main thread, as ``questdb_thread_ident`` reports it.
 0261: 
 0262:     ``threading.main_thread()`` names that thread whichever thread imports this
 0263:     module, but its ``ident`` is the threading module's view, and gevent's
 0264:     monkey-patching makes that a greenlet id. A greenlet id never equals the
 0265:     native ident the main-thread checks compare against, and on 64-bit Windows
 0266:     it does not fit an ``unsigned long``, so importing questdb after
 0267:     ``monkey.patch_all()`` failed there with OverflowError. gevent leaves
 0268:     ``get_native_id()`` alone: it tells whether this is the main OS thread,
 0269:     whichever greenlet runs, and there the native ident is at hand.
 0270:     """
 0271:     cdef unsigned long ident
+0272:     main = threading.main_thread()
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_main_thread); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_main = __pyx_t_1;
  __pyx_t_1 = 0;
+0273:     get_native_id = getattr(threading, 'get_native_id', None)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_get_native_id, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_get_native_id = __pyx_t_4;
  __pyx_t_4 = 0;
+0274:     if (get_native_id is not None and main.native_id is not None
  __pyx_t_7 = (__pyx_v_get_native_id != Py_None);
  if (__pyx_t_7) {

  } else {

    __pyx_t_6 = __pyx_t_7;

    goto __pyx_L4_bool_binop_done;
  }
/* … */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main, __pyx_mstate_global->__pyx_n_u_native_id); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 274, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_t_7 = (__pyx_t_4 != Py_None);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_7) {

  } else {

    __pyx_t_6 = __pyx_t_7;

    goto __pyx_L4_bool_binop_done;
  }
/* … */
  if (__pyx_t_6) {
/* … */
  }
+0275:             and main.native_id == get_native_id()):
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main, __pyx_mstate_global->__pyx_n_u_native_id); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 275, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_get_native_id);
  __pyx_t_3 = __pyx_v_get_native_id; 
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 275, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_7 = __Pyx_PyObject_CompareBoolEq_object_object(__pyx_t_4, __pyx_t_1, Py_EQ); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(1, 275, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  __pyx_t_6 = __pyx_t_7;

  __pyx_L4_bool_binop_done:;
+0276:         return questdb_thread_ident()
    {

      __pyx_r = PyThread_get_thread_ident();
    }
    goto __pyx_L0;
 0277:     # Imported from another OS thread, where `ident` is native -- unless gevent
 0278:     # patched it, and then no native ident is to be had. Match no thread rather
 0279:     # than fail the import over a greenlet id that does not fit.
+0280:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L12_try_end;
    __pyx_L7_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_L9_except_error:;
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
    goto __pyx_L1_error;
    __pyx_L10_except_return:;
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
    goto __pyx_L0;
    __pyx_L12_try_end:;
  }
+0281:         ident = main.ident
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main, __pyx_mstate_global->__pyx_n_u_ident); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 281, __pyx_L7_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_11 = __Pyx_PyLong_As_unsigned_long(__pyx_t_1); if (unlikely((__pyx_t_11 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(1, 281, __pyx_L7_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_ident = __pyx_t_11;
+0282:     except OverflowError:
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_OverflowError))));
    if (__pyx_t_12) {
      __Pyx_ErrRestore(0,0,0);
+0283:         return 0
      {

        __pyx_r = 0;
      }
      goto __pyx_L10_except_return;
    }
    goto __pyx_L9_except_error;
+0284:     return ident
  {

    __pyx_r = __pyx_v_ident;
  }
  goto __pyx_L0;
 0285: 
 0286: 
 0287: # `_oidc_after_fork_in_child` re-reads the main thread in a child forked from
 0288: # another thread, where the forking thread becomes the main thread: a stale
 0289: # value there made every diagnostic on the child's real main thread look like a
 0290: # worker's, so an exception it parked was never scheduled and was lost.
+0291: cdef unsigned long _OIDC_MAIN_THREAD_IDENT = _oidc_main_thread_ident()
  __pyx_t_30 = __pyx_f_7questdb_7_client__oidc_main_thread_ident(); if (unlikely(__pyx_t_30 == ((unsigned long)0) && PyErr_Occurred())) __PYX_ERR(1, 291, __pyx_L1_error)
  __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT = __pyx_t_30;
 0292: 
 0293: 
+0294: def _oidc_after_fork_in_child():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7_oidc_after_fork_in_child(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6_oidc_after_fork_in_child, "Re-anchor the main-thread state in a freshly forked child.\n\n    Runs on the forking thread, the only thread the child has and therefore\n    its main thread. When that is not the thread this state described, the\n    in-flight diagnostic dispatches it counted, the exception it parked and\n    the pending call scheduled for it all belonged to a thread that does not\n    exist here: start clean rather than holding a stale exception forever (or\n    deferring every later one behind a depth that can never return to zero).\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7_oidc_after_fork_in_child = {"_oidc_after_fork_in_child", (PyCFunction)__pyx_pw_7questdb_7_client_7_oidc_after_fork_in_child, METH_NOARGS, __pyx_doc_7questdb_7_client_6_oidc_after_fork_in_child};
static PyObject *__pyx_pw_7questdb_7_client_7_oidc_after_fork_in_child(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_oidc_after_fork_in_child (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6_oidc_after_fork_in_child(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_6_oidc_after_fork_in_child(CYTHON_UNUSED PyObject *__pyx_self) {
  unsigned long __pyx_v_current;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._oidc_after_fork_in_child", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;

  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7_oidc_after_fork_in_child, 0, __pyx_mstate_global->__pyx_n_u_oidc_after_fork_in_child, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[24])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_oidc_after_fork_in_child, __pyx_t_18) < (0)) __PYX_ERR(1, 294, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0295:     """Re-anchor the main-thread state in a freshly forked child.
 0296: 
 0297:     Runs on the forking thread, the only thread the child has and therefore
 0298:     its main thread. When that is not the thread this state described, the
 0299:     in-flight diagnostic dispatches it counted, the exception it parked and
 0300:     the pending call scheduled for it all belonged to a thread that does not
 0301:     exist here: start clean rather than holding a stale exception forever (or
 0302:     deferring every later one behind a depth that can never return to zero).
 0303:     """
 0304:     global _OIDC_MAIN_THREAD_IDENT, _OIDC_MAIN_PARKED
 0305:     global _OIDC_MAIN_PARK_SCHEDULED, _OIDC_MAIN_REGIONS
 0306:     global _OIDC_MAIN_UNTRACKED_REGIONS
 0307:     global _OIDC_REGISTRY_LOCK, _OIDC_DIAGNOSTICS_ACTIVE
 0308:     global _OIDC_DIAGNOSTICS_DRAINED
+0309:     cdef unsigned long current = questdb_thread_ident()
  __pyx_v_current = PyThread_get_thread_ident();
+0310:     if not qdb_oidc_callback_gate_init():
  __pyx_t_1 = (!qdb_oidc_callback_gate_init());

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0311:         raise MemoryError('Could not reset the OIDC callback gate after fork')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_reset_the_OIDC_callbac};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 311, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 311, __pyx_L1_error)
 0312:     # The forking thread is the child's main thread.
+0313:     qdb_oidc_callback_gate_set_owner(current)
  qdb_oidc_callback_gate_set_owner(__pyx_v_current);
 0314:     # The registry lock may have been held by a parent thread that disappeared.
 0315:     # Keep its entries, but never try to acquire the inherited lock in a child.
+0316:     _OIDC_REGISTRY_LOCK = threading.RLock()
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_RLock); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 316, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
+0317:     _OIDC_DIAGNOSTICS_DRAINED = threading.Condition(_OIDC_REGISTRY_LOCK)
  __pyx_t_6 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Condition); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    assert(__pyx_t_6);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 317, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_DRAINED);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_DRAINED, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
 0318:     # Any callback active in the parent either belonged to a vanished thread
 0319:     # or cannot continue across fork. Do not reject pool closes in the child.
+0320:     _OIDC_DIAGNOSTICS_ACTIVE = {}
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, ((PyObject*)__pyx_t_2));
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
+0321:     if current == _OIDC_MAIN_THREAD_IDENT:
  __pyx_t_1 = (__pyx_v_current == __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);

  if (__pyx_t_1) {
/* … */
  }
+0322:         return
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+0323:     _OIDC_MAIN_THREAD_IDENT = current
  __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT = __pyx_v_current;
+0324:     _OIDC_MAIN_PARKED = []
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, ((PyObject*)__pyx_t_2));
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
+0325:     _OIDC_MAIN_PARK_SCHEDULED = False
  __pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED = 0;
+0326:     _OIDC_MAIN_REGIONS = [{}, {}, {}]
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_2) != (0)) __PYX_ERR(1, 326, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_5) != (0)) __PYX_ERR(1, 326, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_6);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_t_6) != (0)) __PYX_ERR(1, 326, __pyx_L1_error);
  __pyx_t_2 = 0;
  __pyx_t_5 = 0;
  __pyx_t_6 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS, ((PyObject*)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
+0327:     _OIDC_MAIN_UNTRACKED_REGIONS = 0
  __pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS = 0;
 0328: 
 0329: 
 0330: # `_client.pyx` includes this file before its own `import os`.
+0331: import os
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_os, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 331, __pyx_L1_error)
  __pyx_t_18 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_18);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_os, __pyx_t_18) < (0)) __PYX_ERR(1, 331, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0332: 
+0333: if hasattr(os, 'register_at_fork'):
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_8 = __Pyx_HasAttr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_register_at_fork); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__pyx_t_8) {
/* … */
  }
+0334:     os.register_at_fork(after_in_child=_oidc_after_fork_in_child)
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 334, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_register_at_fork); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 334, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_oidc_after_fork_in_child); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 334, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    #if CYTHON_VECTORCALL
    #endif
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_16};
      #if CYTHON_VECTORCALL
      __pyx_t_19 = __pyx_mstate_global->__pyx_tuple[60];
      if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 334, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_19);
      #else
      {
        PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_after_in_child};
        __pyx_t_19 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
        if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 334, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_19);
      }
      #endif
      __pyx_t_18 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_19);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      #if CYTHON_VECTORCALL
      #endif
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 334, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
    }
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_after_in_child};
    __pyx_mstate_global->__pyx_tuple[60] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[60])) __PYX_ERR(1, 334, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[60]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[60]);
 0335: 
 0336: 
 0337: # The exit drain runs on the main thread and does not wait for callbacks
 0338: # admitted there: only a greenlet suspended inside one can hold such an
 0339: # admission while that thread runs the drain, and it cannot resume until the
 0340: # drain returns (see `qdb_oidc_callback_drain`).
+0341: qdb_oidc_callback_gate_set_owner(_OIDC_MAIN_THREAD_IDENT)
  qdb_oidc_callback_gate_set_owner(__pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);
 0342: 
 0343: 
+0344: def _debug_oidc_main_thread_ident():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_9_debug_oidc_main_thread_ident(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_8_debug_oidc_main_thread_ident, "Internal test hook: the thread OIDC treats as the main thread.");
static PyMethodDef __pyx_mdef_7questdb_7_client_9_debug_oidc_main_thread_ident = {"_debug_oidc_main_thread_ident", (PyCFunction)__pyx_pw_7questdb_7_client_9_debug_oidc_main_thread_ident, METH_NOARGS, __pyx_doc_7questdb_7_client_8_debug_oidc_main_thread_ident};
static PyObject *__pyx_pw_7questdb_7_client_9_debug_oidc_main_thread_ident(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_main_thread_ident (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_8_debug_oidc_main_thread_ident(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_8_debug_oidc_main_thread_ident(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._debug_oidc_main_thread_ident", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_9_debug_oidc_main_thread_ident, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_main_thread_ident, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[25])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_main_thread_ident, __pyx_t_18) < (0)) __PYX_ERR(1, 344, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0345:     """Internal test hook: the thread OIDC treats as the main thread."""
+0346:     return _OIDC_MAIN_THREAD_IDENT
  __pyx_t_1 = __Pyx_PyLong_From_unsigned_long(__pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0347: 
 0348: 
+0349: cdef object _oidc_main_context():
static PyObject *__pyx_f_7questdb_7_client__oidc_main_context(void) {
  PyObject *__pyx_v_getcurrent = 0;
  PyObject *__pyx_v_module = NULL;
  PyObject *__pyx_v_base = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._oidc_main_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_getcurrent);
  __Pyx_XDECREF(__pyx_v_module);
  __Pyx_XDECREF(__pyx_v_base);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0350:     """The greenlet running on the main thread now, or None while the greenlet
 0351:     module is not loaded.
 0352: 
 0353:     Main thread only, GIL held. Runs no bytecode: module, dictionary and
 0354:     attribute lookups, and the C `greenlet.getcurrent()`, so no pending signal
 0355:     handler runs inside it. PyPy's greenlet module is Python code, which can
 0356:     run one there, so on PyPy greenlets are not told apart.
 0357:     """
 0358:     global _OIDC_GREENLET_GETCURRENT, _OIDC_GREENLET_DEAD
 0359:     global _OIDC_GREENLET_PARENT
+0360:     cdef object getcurrent = _OIDC_GREENLET_GETCURRENT
  __Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_GETCURRENT);
  __pyx_v_getcurrent = __pyx_v_7questdb_7_client__OIDC_GREENLET_GETCURRENT;
+0361:     if CYTHON_COMPILING_IN_PYPY:
  __pyx_t_1 = (CYTHON_COMPILING_IN_PYPY != 0);

  if (__pyx_t_1) {
/* … */
  }
+0362:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+0363:     if getcurrent is None:
  __pyx_t_1 = (__pyx_v_getcurrent == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0364:         module = _oidc_sys.modules.get('greenlet')
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_oidc_sys); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 364, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 364, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_3 = __pyx_t_5;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_n_u_greenlet};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 364, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_v_module = __pyx_t_2;
    __pyx_t_2 = 0;
+0365:         if module is None:
    __pyx_t_1 = (__pyx_v_module == Py_None);
    if (__pyx_t_1) {
/* … */
    }
+0366:             return None
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
+0367:         getcurrent = getattr(module, 'getcurrent', None)
    __pyx_t_2 = __Pyx_GetAttr3(__pyx_v_module, __pyx_mstate_global->__pyx_n_u_getcurrent, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_getcurrent, __pyx_t_2);
    __pyx_t_2 = 0;
+0368:         base = getattr(module, 'greenlet', None)
    __pyx_t_2 = __Pyx_GetAttr3(__pyx_v_module, __pyx_mstate_global->__pyx_n_u_greenlet, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_base = __pyx_t_2;
    __pyx_t_2 = 0;
+0369:         if getcurrent is None or base is None:
    __pyx_t_7 = (__pyx_v_getcurrent == Py_None);
    if (!__pyx_t_7) {

    } else {

      __pyx_t_1 = __pyx_t_7;

      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_7 = (__pyx_v_base == Py_None);

    __pyx_t_1 = __pyx_t_7;

    __pyx_L7_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
+0370:             return None
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
+0371:         _OIDC_GREENLET_DEAD = base.__dict__['dead']
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_base, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_dead); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_DEAD);
    __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_GREENLET_DEAD, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
+0372:         _OIDC_GREENLET_PARENT = base.__dict__['parent']
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_base, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 372, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_parent); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 372, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_PARENT);
    __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_GREENLET_PARENT, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
+0373:         _OIDC_GREENLET_GETCURRENT = getcurrent
    __Pyx_INCREF(__pyx_v_getcurrent);
    __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_GREENLET_GETCURRENT);
    __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_GREENLET_GETCURRENT, __pyx_v_getcurrent);
    __Pyx_GIVEREF(__pyx_v_getcurrent);
+0374:     return getcurrent()
  __pyx_t_5 = NULL;
  __Pyx_INCREF(__pyx_v_getcurrent);
  __pyx_t_3 = __pyx_v_getcurrent; 
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_5);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 374, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0375: 
 0376: 
+0377: cdef object _oidc_main_region_enter(int kind):
static PyObject *__pyx_f_7questdb_7_client__oidc_main_region_enter(int __pyx_v_kind) {
  PyObject *__pyx_v_regions = 0;
  PyObject *__pyx_v_context = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._oidc_main_region_enter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_regions);
  __Pyx_XDECREF(__pyx_v_context);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0378:     """Enter a main-thread region of ``kind`` (see `_OIDC_MAIN_REGIONS`).
 0379: 
 0380:     Main thread only. Never raises: a region it cannot record counts for
 0381:     every greenlet. Pass the result to `_oidc_main_region_exit`.
 0382:     """
 0383:     global _OIDC_MAIN_UNTRACKED_REGIONS
 0384:     cdef dict regions
+0385:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+0386:         context = _oidc_main_context()
      __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_main_context(); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 386, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_context = __pyx_t_4;
      __pyx_t_4 = 0;
+0387:         regions = <dict>_OIDC_MAIN_REGIONS[kind]
      if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
        __PYX_ERR(1, 387, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS, __pyx_v_kind, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 387, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __pyx_t_4;
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_regions = ((PyObject*)__pyx_t_5);
      __pyx_t_5 = 0;
+0388:         regions[context] = regions.get(context, 0) + 1
      if (unlikely(__pyx_v_regions == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
        __PYX_ERR(1, 388, __pyx_L3_error)
      }
      __pyx_t_5 = __Pyx_PyDict_GetItemDefault(__pyx_v_regions, __pyx_v_context, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 388, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = __Pyx_PyLong_AddObjC(__pyx_t_5, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 388, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(__pyx_v_regions == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
        __PYX_ERR(1, 388, __pyx_L3_error)
      }
      if (unlikely((PyDict_SetItem(__pyx_v_regions, __pyx_v_context, __pyx_t_4) < 0))) __PYX_ERR(1, 388, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0389:         return context
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __Pyx_INCREF(__pyx_v_context);
          __pyx_r = __pyx_v_context;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L7_try_return;
+0390:     except BaseException:
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_6) {
      __Pyx_AddTraceback("questdb._client._oidc_main_region_enter", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_7) < 0) __PYX_ERR(1, 390, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_7);
+0391:         _OIDC_MAIN_UNTRACKED_REGIONS += 1
      __pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS = (__pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS + 1);
+0392:         return _OIDC_UNTRACKED
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_UNTRACKED);
          __pyx_r = __pyx_v_7questdb_7_client__OIDC_UNTRACKED;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;
 0393: 
 0394: 
+0395: cdef void _oidc_main_region_exit(int kind, object context) noexcept:
static void __pyx_f_7questdb_7_client__oidc_main_region_exit(int __pyx_v_kind, PyObject *__pyx_v_context) {
  PyObject *__pyx_v_regions = 0;
  PyObject *__pyx_v_depth = NULL;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_WriteUnraisable("questdb._client._oidc_main_region_exit", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_regions);
  __Pyx_XDECREF(__pyx_v_depth);

  __Pyx_RefNannyFinishContext();
}
 0396:     global _OIDC_MAIN_UNTRACKED_REGIONS
 0397:     cdef dict regions
+0398:     if context is _OIDC_UNTRACKED:
  __pyx_t_1 = (__pyx_v_context == __pyx_v_7questdb_7_client__OIDC_UNTRACKED);
  if (__pyx_t_1) {
/* … */
  }
+0399:         _OIDC_MAIN_UNTRACKED_REGIONS -= 1
    __pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS = (__pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS - 1);
+0400:         return
    {
    }
    goto __pyx_L0;
+0401:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L5_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L9_try_end:;
  }
+0402:         regions = <dict>_OIDC_MAIN_REGIONS[kind]
      if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
        __PYX_ERR(1, 402, __pyx_L4_error)
      }
      __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS, __pyx_v_kind, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 402, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __pyx_t_5;
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_regions = ((PyObject*)__pyx_t_6);
      __pyx_t_6 = 0;
+0403:         depth = regions.get(context, 0) - 1
      if (unlikely(__pyx_v_regions == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
        __PYX_ERR(1, 403, __pyx_L4_error)
      }
      __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_regions, __pyx_v_context, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 403, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PyLong_SubtractObjC(__pyx_t_6, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 403, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_v_depth = __pyx_t_5;
      __pyx_t_5 = 0;
+0404:         if depth > 0:
      __pyx_t_1 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_depth, __pyx_mstate_global->__pyx_int_0, Py_GT); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 404, __pyx_L4_error)
      if (__pyx_t_1) {
/* … */
        goto __pyx_L10;
      }
+0405:             regions[context] = depth
        if (unlikely(__pyx_v_regions == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
          __PYX_ERR(1, 405, __pyx_L4_error)
        }
        if (unlikely((PyDict_SetItem(__pyx_v_regions, __pyx_v_context, __pyx_v_depth) < 0))) __PYX_ERR(1, 405, __pyx_L4_error)
 0406:         else:
+0407:             regions.pop(context, None)
      /*else*/ {
        if (unlikely(__pyx_v_regions == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "pop");
          __PYX_ERR(1, 407, __pyx_L4_error)
        }
        __pyx_t_7 = __Pyx_PyDict_Pop_ignore(__pyx_v_regions, __pyx_v_context, Py_None); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 407, __pyx_L4_error)

      }
      __pyx_L10:;
+0408:     except BaseException:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_7) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L5_exception_handled;
    }
    goto __pyx_L6_except_error;
 0409:         pass
 0410: 
 0411: 
+0412: cdef bint _oidc_main_region_active(int kind) noexcept:
static int __pyx_f_7questdb_7_client__oidc_main_region_active(int __pyx_v_kind) {
  PyObject *__pyx_v_regions = 0;
  int __pyx_v_k;
  PyObject *__pyx_v_context = NULL;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_WriteUnraisable("questdb._client._oidc_main_region_active", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_regions);

  __Pyx_XDECREF(__pyx_v_context);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0413:     """Whether the code running on the main thread now is inside a region of
 0414:     ``kind``, or of any kind when ``kind`` is negative."""
 0415:     cdef dict regions
 0416:     cdef int k
+0417:     if _OIDC_MAIN_UNTRACKED_REGIONS > 0:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__OIDC_MAIN_UNTRACKED_REGIONS > 0);

  if (__pyx_t_1) {
/* … */
  }
+0418:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+0419:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L8_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
    __pyx_L7_except_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
  }
+0420:         context = _OIDC_UNSET
      __Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_UNSET);
      __pyx_v_context = __pyx_v_7questdb_7_client__OIDC_UNSET;
+0421:         for k in range(_OIDC_REGION_KINDS):
      __pyx_t_5 = __pyx_e_7questdb_7_client__OIDC_REGION_KINDS;
      __pyx_t_6 = __pyx_t_5;

      for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
        __pyx_v_k = __pyx_t_7;
+0422:             if kind >= 0 and k != kind:
        __pyx_t_8 = (__pyx_v_kind >= 0);

        if (__pyx_t_8) {

        } else {

          __pyx_t_1 = __pyx_t_8;

          goto __pyx_L13_bool_binop_done;
        }
        __pyx_t_8 = (__pyx_v_k != __pyx_v_kind);


        __pyx_t_1 = __pyx_t_8;

        __pyx_L13_bool_binop_done:;
        if (__pyx_t_1) {
/* … */
        }
+0423:                 continue
          goto __pyx_L10_continue;
+0424:             regions = <dict>_OIDC_MAIN_REGIONS[k]
        if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
          __PYX_ERR(1, 424, __pyx_L4_error)
        }
        __pyx_t_9 = __Pyx_GetItemInt_List(__pyx_v_7questdb_7_client__OIDC_MAIN_REGIONS, __pyx_v_k, int, 1, __Pyx_PyLong_From_int, 1, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 424, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = __pyx_t_9;
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF_SET(__pyx_v_regions, ((PyObject*)__pyx_t_10));
        __pyx_t_10 = 0;
+0425:             if not regions:
        if (__pyx_v_regions == Py_None) __pyx_t_1 = 0;
        else
        {
          Py_ssize_t __pyx_temp = __Pyx_PyDict_GET_SIZE(__pyx_v_regions);
          if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(1, 425, __pyx_L4_error)
          __pyx_t_1 = (__pyx_temp != 0);
        }

        __pyx_t_8 = (!__pyx_t_1);


        if (__pyx_t_8) {
/* … */
        }
+0426:                 continue
          goto __pyx_L10_continue;
+0427:             if None in regions:
        if (unlikely(__pyx_v_regions == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
          __PYX_ERR(1, 427, __pyx_L4_error)
        }
        __pyx_t_8 = (__Pyx_PyDict_ContainsTF(Py_None, __pyx_v_regions, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(1, 427, __pyx_L4_error)
        if (__pyx_t_8) {
/* … */
        }
+0428:                 return True
          {

            __pyx_r = 1;
          }
          goto __pyx_L8_try_return;
+0429:             if context is _OIDC_UNSET:
        __pyx_t_8 = (__pyx_v_context == __pyx_v_7questdb_7_client__OIDC_UNSET);
        if (__pyx_t_8) {
/* … */
        }
+0430:                 context = _oidc_main_context()
          __pyx_t_10 = __pyx_f_7questdb_7_client__oidc_main_context(); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 430, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_10);
          __pyx_t_10 = 0;
+0431:             if context is not None and context in regions:
        __pyx_t_1 = (__pyx_v_context != Py_None);
        if (__pyx_t_1) {

        } else {

          __pyx_t_8 = __pyx_t_1;

          goto __pyx_L19_bool_binop_done;
        }
        if (unlikely(__pyx_v_regions == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
          __PYX_ERR(1, 431, __pyx_L4_error)
        }
        __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_v_context, __pyx_v_regions, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 431, __pyx_L4_error)

        __pyx_t_8 = __pyx_t_1;

        __pyx_L19_bool_binop_done:;
        if (__pyx_t_8) {
/* … */
        }
        __pyx_L10_continue:;
      }

+0432:                 return True
          {

            __pyx_r = 1;
          }
          goto __pyx_L8_try_return;
+0433:         return False
      {

        __pyx_r = 0;
      }
      goto __pyx_L8_try_return;
+0434:     except BaseException:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_7) {
      __Pyx_ErrRestore(0,0,0);
+0435:         return True
      {

        __pyx_r = 1;
      }
      goto __pyx_L7_except_return;
    }
    goto __pyx_L6_except_error;
 0436: 
 0437: 
+0438: cdef Py_ssize_t _oidc_parked_index(bint queued_rule) except -2:
static Py_ssize_t __pyx_f_7questdb_7_client__oidc_parked_index(int __pyx_v_queued_rule) {
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_context = 0;
  PyObject *__pyx_v_owner = NULL;
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._oidc_parked_index", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2L;
  __pyx_L0:;

  __Pyx_XDECREF(__pyx_v_context);
  __Pyx_XDECREF(__pyx_v_owner);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0439:     """The index of the oldest parked exception that may be raised in the
 0440:     code running on the main thread now, or -1.
 0441: 
 0442:     An exception a greenlet parked is raised only in that greenlet. One parked
 0443:     without greenlets, or by the main greenlet, keeps the rule for a single
 0444:     flow of control: it is eligible when ``queued_rule`` is true (always for
 0445:     the pending call, and at a native-return boundary only when no pending
 0446:     call is queued). One parked by any other greenlet -- a gevent greenlet --
 0447:     is eligible whenever that greenlet runs: the queued pending call may run
 0448:     in another greenlet first, and that greenlet may end before it runs code
 0449:     the call could interrupt. An exception whose greenlet has died is
 0450:     dropped: nothing could ever raise it.
 0451:     """
+0452:     cdef Py_ssize_t i = 0
  __pyx_v_i = 0;
+0453:     cdef object context = _OIDC_UNSET
  __Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_UNSET);
  __pyx_v_context = __pyx_v_7questdb_7_client__OIDC_UNSET;
+0454:     while i < len(_OIDC_MAIN_PARKED):
  while (1) {
    __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_MAIN_PARKED;
    __Pyx_INCREF(__pyx_t_1);
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type \047NoneType\047 has no len()");
      __PYX_ERR(1, 454, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 454, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = (__pyx_v_i < __pyx_t_2);



    if (!__pyx_t_3) break;
+0455:         owner = (<tuple>_OIDC_MAIN_PARKED[i])[1]
    if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
      __PYX_ERR(1, 455, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
      __PYX_ERR(1, 455, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_GetItemInt_Tuple(((PyObject*)__pyx_t_1), 1, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_owner, __pyx_t_4);
    __pyx_t_4 = 0;
+0456:         if owner is None:
    __pyx_t_3 = (__pyx_v_owner == Py_None);
    if (__pyx_t_3) {
/* … */
      goto __pyx_L5;
    }
+0457:             if queued_rule:
      if (__pyx_v_queued_rule) {
/* … */
      }
+0458:                 return i
        {

          __pyx_r = __pyx_v_i;
        }
        goto __pyx_L0;
+0459:         elif _OIDC_GREENLET_DEAD.__get__(owner, None):
    __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_GREENLET_DEAD;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_owner, Py_None};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 459, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 459, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_3) {
/* … */
    }
+0460:             del _OIDC_MAIN_PARKED[i]
      if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
        __PYX_ERR(1, 460, __pyx_L1_error)
      }
      if (unlikely((__Pyx_DelItemInt(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, __Pyx_ReferenceSharing_SharedReference) < 0))) __PYX_ERR(1, 460, __pyx_L1_error)
+0461:             continue
      goto __pyx_L3_continue;
 0462:         else:
+0463:             if context is _OIDC_UNSET:
    /*else*/ {
      __pyx_t_3 = (__pyx_v_context == __pyx_v_7questdb_7_client__OIDC_UNSET);
      if (__pyx_t_3) {
/* … */
      }
+0464:                 context = _oidc_main_context()
        __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_main_context(); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 464, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_4);
        __pyx_t_4 = 0;
+0465:             if owner is context and (
      __pyx_t_6 = (__pyx_v_owner == __pyx_v_context);
      if (__pyx_t_6) {

      } else {

        __pyx_t_3 = __pyx_t_6;

        goto __pyx_L9_bool_binop_done;
      }
/* … */
      if (__pyx_t_3) {
/* … */
      }
    }
    __pyx_L5:;
+0466:                     queued_rule
      if (!__pyx_v_queued_rule) {
      } else {

        __pyx_t_3 = __pyx_v_queued_rule;
        goto __pyx_L9_bool_binop_done;
      }
+0467:                     or _OIDC_GREENLET_PARENT.__get__(owner, None) is not None):
      __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_GREENLET_PARENT;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_owner, Py_None};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 467, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_6 = (__pyx_t_4 != Py_None);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

      __pyx_t_3 = __pyx_t_6;

      __pyx_L9_bool_binop_done:;
+0468:                 return i
        {

          __pyx_r = __pyx_v_i;
        }
        goto __pyx_L0;
+0469:         i += 1
    __pyx_v_i = (__pyx_v_i + 1);
    __pyx_L3_continue:;
  }
+0470:     return -1
  {

    __pyx_r = -1L;
  }
  goto __pyx_L0;
 0471: 
 0472: 
+0473: cdef int _oidc_raise_parked_main(void* unused) noexcept:
static int __pyx_f_7questdb_7_client__oidc_raise_parked_main(CYTHON_UNUSED void *__pyx_v_unused) {
  Py_ssize_t __pyx_v_index;
  PyObject *__pyx_v_entry = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_v_chained = NULL;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_WriteUnraisable("questdb._client._oidc_raise_parked_main", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;

  __Pyx_XDECREF(__pyx_v_entry);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XDECREF(__pyx_v_chained);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0474:     """Pending-call body: raise the oldest parked exception on the main
 0475:     thread, and schedule the next one, if any, for the following boundary.
 0476: 
 0477:     It runs in whichever greenlet runs next, so it raises only an exception
 0478:     parked without greenlets or by that greenlet; the others wait for their
 0479:     own greenlet's native-return boundary (`_oidc_take_unscheduled_main`).
 0480:     """
 0481:     global _OIDC_MAIN_PARK_SCHEDULED
 0482:     cdef Py_ssize_t index
+0483:     _OIDC_MAIN_PARK_SCHEDULED = False
  __pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED = 0;
+0484:     if _oidc_main_region_active(-1):
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_main_region_active(-1);

  if (__pyx_t_1) {
/* … */
  }
+0485:         return 0
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+0486:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L8_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
    __pyx_L7_except_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
    __pyx_L9_try_end:;
  }
+0487:         index = _oidc_parked_index(True)
      __pyx_t_5 = __pyx_f_7questdb_7_client__oidc_parked_index(1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-2L))) __PYX_ERR(1, 487, __pyx_L4_error)
      __pyx_v_index = __pyx_t_5;
+0488:         if index < 0:
      __pyx_t_1 = (__pyx_v_index < 0);

      if (__pyx_t_1) {
/* … */
      }
+0489:             return 0
        {

          __pyx_r = 0;
        }
        goto __pyx_L8_try_return;
+0490:         entry = _OIDC_MAIN_PARKED.pop(index)
      if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "pop");
        __PYX_ERR(1, 490, __pyx_L4_error)
      }
      __pyx_t_6 = __Pyx_PyList_PopIndex(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, Py_None, __pyx_v_index, 1, Py_ssize_t, PyLong_FromSsize_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 490, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_v_entry = __pyx_t_6;
      __pyx_t_6 = 0;
+0491:         exc = (<tuple>entry)[0]
      if (unlikely(__pyx_v_entry == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
        __PYX_ERR(1, 491, __pyx_L4_error)
      }
      __pyx_t_6 = __Pyx_GetItemInt_Tuple(((PyObject*)__pyx_v_entry), 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 491, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;
      __pyx_t_6 = 0;
+0492:         _oidc_schedule_parked_main()
      __pyx_f_7questdb_7_client__oidc_schedule_parked_main();
 0493:         # Queue producers can fill the slot freed by this callback. If
 0494:         # registering the next exception fails, deliver the rest in this
 0495:         # exception's context chain rather than stranding them after the
 0496:         # Python call already returned.
+0497:         if not _OIDC_MAIN_PARK_SCHEDULED and _oidc_parked_index(True) >= 0:
      __pyx_t_7 = (!__pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED);

      if (__pyx_t_7) {

      } else {

        __pyx_t_1 = __pyx_t_7;

        goto __pyx_L12_bool_binop_done;
      }
      __pyx_t_5 = __pyx_f_7questdb_7_client__oidc_parked_index(1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-2L))) __PYX_ERR(1, 497, __pyx_L4_error)
      __pyx_t_7 = (__pyx_t_5 >= 0);



      __pyx_t_1 = __pyx_t_7;

      __pyx_L12_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+0498:             _OIDC_MAIN_PARKED.insert(index, entry)
        if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "insert");
          __PYX_ERR(1, 498, __pyx_L4_error)
        }
        __pyx_t_8 = PyList_Insert(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, __pyx_v_index, __pyx_v_entry); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 498, __pyx_L4_error)

+0499:             chained = _oidc_take_unscheduled_main()
        __pyx_t_6 = __pyx_f_7questdb_7_client__oidc_take_unscheduled_main(); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 499, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_v_chained = __pyx_t_6;
        __pyx_t_6 = 0;
+0500:             if chained is None:
        __pyx_t_1 = (__pyx_v_chained == Py_None);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L14;
        }
+0501:                 _OIDC_MAIN_PARKED.remove(entry)
          __pyx_t_6 = __Pyx_CallUnboundCMethod1(&__pyx_mstate_global->__pyx_umethod_PyList_Type__remove, __pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, __pyx_v_entry); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 501, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 0502:             else:
+0503:                 exc = chained
        /*else*/ {
          __Pyx_INCREF(__pyx_v_chained);
          __Pyx_DECREF_SET(__pyx_v_exc, __pyx_v_chained);
        }
        __pyx_L14:;
+0504:     except BaseException:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_9) {
      __Pyx_ErrRestore(0,0,0);
+0505:         return 0
      {

        __pyx_r = 0;
      }
      goto __pyx_L7_except_return;
    }
    goto __pyx_L6_except_error;
+0506:     PyErr_SetObject(type(exc), exc)
  PyErr_SetObject(((PyObject *)Py_TYPE(__pyx_v_exc)), __pyx_v_exc);
+0507:     return -1
  {

    __pyx_r = -1;
  }
  goto __pyx_L0;
 0508: 
 0509: 
+0510: cdef void _oidc_park_main(object exc) noexcept:
static void __pyx_f_7questdb_7_client__oidc_park_main(PyObject *__pyx_v_exc) {
  PyObject *__pyx_v_owner = NULL;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_WriteUnraisable("questdb._client._oidc_park_main", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_owner);

  __Pyx_RefNannyFinishContext();
}
 0511:     """Queue ``exc`` for `_oidc_raise_parked_main`, for the greenlet running
 0512:     now. GIL held; never raises."""
+0513:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }
+0514:         if len(_OIDC_MAIN_PARKED) < _OIDC_MAIN_PARKED_MAX:
      __pyx_t_4 = __pyx_v_7questdb_7_client__OIDC_MAIN_PARKED;
      __Pyx_INCREF(__pyx_t_4);
      if (unlikely(__pyx_t_4 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "object of type \047NoneType\047 has no len()");
        __PYX_ERR(1, 514, __pyx_L3_error)
      }
      __pyx_t_5 = __Pyx_PyList_GET_SIZE(__pyx_t_4); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 514, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_6 = (__pyx_t_5 < __pyx_v_7questdb_7_client__OIDC_MAIN_PARKED_MAX);


      if (__pyx_t_6) {
/* … */
      }
+0515:             try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          goto __pyx_L15_try_end;
          __pyx_L10_error:;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
          __pyx_L12_except_error:;
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
          goto __pyx_L3_error;
          __pyx_L11_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
          __pyx_L15_try_end:;
        }
+0516:                 owner = _oidc_main_context()
            __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_main_context(); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 516, __pyx_L10_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_v_owner = __pyx_t_4;
            __pyx_t_4 = 0;
+0517:             except BaseException:
          __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
          if (__pyx_t_10) {
            __Pyx_ErrRestore(0,0,0);
 0518:                 # Parked without an owner, as without greenlets, rather than
 0519:                 # lost.
+0520:                 owner = None
            __Pyx_INCREF(Py_None);
            __Pyx_XDECREF_SET(__pyx_v_owner, Py_None);
            goto __pyx_L11_exception_handled;
          }
          goto __pyx_L12_except_error;
+0521:             _OIDC_MAIN_PARKED.append((exc, owner))
        if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "append");
          __PYX_ERR(1, 521, __pyx_L3_error)
        }
        __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 521, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_v_exc);
        __Pyx_GIVEREF(__pyx_v_exc);
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_exc) != (0)) __PYX_ERR(1, 521, __pyx_L3_error);
        __Pyx_INCREF(__pyx_v_owner);
        __Pyx_GIVEREF(__pyx_v_owner);
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_owner) != (0)) __PYX_ERR(1, 521, __pyx_L3_error);
        __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, __pyx_t_4); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 521, __pyx_L3_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

+0522:     except BaseException:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_10) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
 0523:         pass
 0524: 
 0525: 
+0526: cdef void _oidc_schedule_parked_main() noexcept:
static void __pyx_f_7questdb_7_client__oidc_schedule_parked_main(void) {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("questdb._client._oidc_schedule_parked_main", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;

}
 0527:     global _OIDC_MAIN_PARK_SCHEDULED, _OIDC_PENDING_CALL_FAILURES_REMAINING
+0528:     if not _OIDC_MAIN_PARKED or _OIDC_MAIN_PARK_SCHEDULED:
  if (__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None) __pyx_t_2 = 0;
  else
  {
    Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(1, 528, __pyx_L1_error)
    __pyx_t_2 = (__pyx_temp != 0);
  }

  __pyx_t_3 = (!__pyx_t_2);


  if (!__pyx_t_3) {

  } else {

    __pyx_t_1 = __pyx_t_3;

    goto __pyx_L4_bool_binop_done;
  }

  __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0529:         return
    {
    }
    goto __pyx_L0;
+0530:     if _OIDC_PENDING_CALL_FAILURES_REMAINING > 0:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING > 0);

  if (__pyx_t_1) {
/* … */
  }
+0531:         _OIDC_PENDING_CALL_FAILURES_REMAINING -= 1
    __pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING = (__pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING - 1);
+0532:         return
    {
    }
    goto __pyx_L0;
+0533:     if questdb_add_pending_call(_oidc_raise_parked_main, NULL) == 0:
  __pyx_t_1 = (questdb_add_pending_call(__pyx_f_7questdb_7_client__oidc_raise_parked_main, NULL) == 0);

  if (__pyx_t_1) {
/* … */
  }
+0534:         _OIDC_MAIN_PARK_SCHEDULED = True
    __pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED = 1;
 0535:     # A failed enqueue is delivered by the Python-visible native-return
 0536:     # boundary below, after native ownership/borrow cleanup. No bytecode or
 0537:     # retry thread may be started here: that could deliver an exception while
 0538:     # this noexcept foreign callback is still running and swallow it again.
 0539: 
 0540: 
+0541: cdef object _oidc_take_unscheduled_main():
static PyObject *__pyx_f_7questdb_7_client__oidc_take_unscheduled_main(void) {
  PyObject *__pyx_v_exc = 0;
  Py_ssize_t __pyx_v_index;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb._client._oidc_take_unscheduled_main", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);

  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0542:     """Take saved signals if CPython could not register their pending call.
 0543: 
 0544:     Call only at an exception-safe native-return boundary, not inside a
 0545:     callback or before freeing an owned native result/error. Successfully
 0546:     queued delivery remains asynchronous. When even re-enqueueing successive
 0547:     signals is impossible, preserve all of them in the exception context chain
 0548:     instead of leaving another one stranded in the queue.
 0549:     """
 0550:     cdef object exc
 0551:     cdef Py_ssize_t index
+0552:     if (questdb_thread_ident() != _OIDC_MAIN_THREAD_IDENT
  __pyx_t_2 = (PyThread_get_thread_ident() != __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);

  if (!__pyx_t_2) {

  } else {

    __pyx_t_1 = __pyx_t_2;

    goto __pyx_L4_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
+0553:             or not _OIDC_MAIN_PARKED or _oidc_main_region_active(-1)):
  if (__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None) __pyx_t_2 = 0;
  else
  {
    Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(1, 553, __pyx_L1_error)
    __pyx_t_2 = (__pyx_temp != 0);
  }

  __pyx_t_3 = (!__pyx_t_2);


  if (!__pyx_t_3) {

  } else {

    __pyx_t_1 = __pyx_t_3;

    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __pyx_f_7questdb_7_client__oidc_main_region_active(-1);


  __pyx_t_1 = __pyx_t_3;

  __pyx_L4_bool_binop_done:;
+0554:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
 0555:     # A gevent greenlet's own exceptions are raised here, at its native-return
 0556:     # boundary, even while a pending call is queued: that call can run in
 0557:     # another greenlet first, which must not raise them. Exceptions parked
 0558:     # without greenlets, or by the main greenlet, keep the rule above: a
 0559:     # queued pending call delivers them (see `_oidc_parked_index`).
+0560:     index = _oidc_parked_index(not _OIDC_MAIN_PARK_SCHEDULED)
  __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_parked_index((!__pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED)); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-2L))) __PYX_ERR(1, 560, __pyx_L1_error)
  __pyx_v_index = __pyx_t_4;
+0561:     if index < 0:
  __pyx_t_1 = (__pyx_v_index < 0);

  if (__pyx_t_1) {
/* … */
  }
+0562:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+0563:     exc = (<tuple>_OIDC_MAIN_PARKED.pop(index))[0]
  if (unlikely(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "pop");
    __PYX_ERR(1, 563, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_PyList_PopIndex(__pyx_v_7questdb_7_client__OIDC_MAIN_PARKED, Py_None, __pyx_v_index, 1, Py_ssize_t, PyLong_FromSsize_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (unlikely(__pyx_t_5 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
    __PYX_ERR(1, 563, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_GetItemInt_Tuple(((PyObject*)__pyx_t_5), 0, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_exc = __pyx_t_6;
  __pyx_t_6 = 0;
+0564:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L8_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __pyx_L10_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L11_except_return:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L0;
  }
+0565:         raise exc
      __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
      __PYX_ERR(1, 565, __pyx_L8_error)
+0566:     except BaseException:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_10) {
      __Pyx_AddTraceback("questdb._client._oidc_take_unscheduled_main", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_11) < 0) __PYX_ERR(1, 566, __pyx_L10_except_error)
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_11);
+0567:         if _oidc_parked_index(not _OIDC_MAIN_PARK_SCHEDULED) >= 0:
      __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_parked_index((!__pyx_v_7questdb_7_client__OIDC_MAIN_PARK_SCHEDULED)); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-2L))) __PYX_ERR(1, 567, __pyx_L10_except_error)
      __pyx_t_1 = (__pyx_t_4 >= 0);


      if (__pyx_t_1) {
/* … */
      }
 0568:             # Let normal exception normalization chain these, rather than
 0569:             # invoking a subclass's __setattr__ or creating a context cycle
 0570:             # when two handlers raise the same reusable exception instance.
 0571:             # Recursion is bounded by _OIDC_MAIN_PARKED_MAX (64).
+0572:             return _oidc_take_unscheduled_main()
        __pyx_t_12 = __pyx_f_7questdb_7_client__oidc_take_unscheduled_main(); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 572, __pyx_L10_except_error)
        __Pyx_GOTREF(__pyx_t_12);
        {
          PyObject *__pyx_temp;
          {
            __pyx_temp = __pyx_r;
            __pyx_r = __pyx_t_12;
          }
          __Pyx_XDECREF(__pyx_temp);
        }
        __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L11_except_return;
+0573:         return exc
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __Pyx_INCREF(__pyx_v_exc);
          __pyx_r = __pyx_v_exc;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L11_except_return;
    }
    goto __pyx_L10_except_error;
 0574: 
 0575: 
+0576: cdef void_int _oidc_raise_unscheduled_main() except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(void) {
  PyObject *__pyx_v_exc = 0;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._oidc_raise_unscheduled_main", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0577:     cdef object exc = _oidc_take_unscheduled_main()
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_take_unscheduled_main(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 577, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_exc = __pyx_t_1;
  __pyx_t_1 = 0;
+0578:     if exc is not None:
  __pyx_t_2 = (__pyx_v_exc != Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+0579:         raise exc
    __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
    __PYX_ERR(1, 579, __pyx_L1_error)
+0580:     return 0
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 0581: 
 0582: 
+0583: def _debug_oidc_fail_pending_calls(int count):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11_debug_oidc_fail_pending_calls(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_10_debug_oidc_fail_pending_calls, "Internal test hook: fail the next count pending-call registrations.");
static PyMethodDef __pyx_mdef_7questdb_7_client_11_debug_oidc_fail_pending_calls = {"_debug_oidc_fail_pending_calls", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11_debug_oidc_fail_pending_calls, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_10_debug_oidc_fail_pending_calls};
static PyObject *__pyx_pw_7questdb_7_client_11_debug_oidc_fail_pending_calls(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_count;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_fail_pending_calls (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_count,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 583, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 583, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_fail_pending_calls", 0) < (0)) __PYX_ERR(1, 583, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_oidc_fail_pending_calls", 1, 1, 1, i); __PYX_ERR(1, 583, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 583, __pyx_L3_error)
    }
    __pyx_v_count = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_count == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 583, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_oidc_fail_pending_calls", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 583, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_oidc_fail_pending_calls", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_10_debug_oidc_fail_pending_calls(__pyx_self, __pyx_v_count);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_10_debug_oidc_fail_pending_calls(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_count) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._debug_oidc_fail_pending_calls", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11_debug_oidc_fail_pending_calls, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_fail_pending_calls, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[26])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_fail_pending_calls, __pyx_t_18) < (0)) __PYX_ERR(1, 583, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0584:     """Internal test hook: fail the next count pending-call registrations."""
 0585:     global _OIDC_PENDING_CALL_FAILURES_REMAINING
+0586:     if count < 0:
  __pyx_t_1 = (__pyx_v_count < 0);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0587:         raise ValueError('count must be non-negative')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_count_must_be_non_negative};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 587, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 587, __pyx_L1_error)
+0588:     _OIDC_PENDING_CALL_FAILURES_REMAINING = count
  __pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING = __pyx_v_count;
 0589: 
 0590: 
+0591: def _debug_oidc_pending_call_failures_remaining():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_13_debug_oidc_pending_call_failures_remaining(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_13_debug_oidc_pending_call_failures_remaining = {"_debug_oidc_pending_call_failures_remaining", (PyCFunction)__pyx_pw_7questdb_7_client_13_debug_oidc_pending_call_failures_remaining, METH_NOARGS, 0};
static PyObject *__pyx_pw_7questdb_7_client_13_debug_oidc_pending_call_failures_remaining(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_pending_call_failures_remaining (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_12_debug_oidc_pending_call_failures_remaining(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_12_debug_oidc_pending_call_failures_remaining(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._debug_oidc_pending_call_failures_remaining", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_13_debug_oidc_pending_call_failures_remaining, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_pending_call_failure, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[27])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_pending_call_failure, __pyx_t_18) < (0)) __PYX_ERR(1, 591, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+0592:     return _OIDC_PENDING_CALL_FAILURES_REMAINING
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 592, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0593: 
 0594: 
+0595: def _debug_oidc_deliver_test_exceptions(tuple exceptions, bint fail_initial):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15_debug_oidc_deliver_test_exceptions(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14_debug_oidc_deliver_test_exceptions, "Exercise initial and successive enqueue failures without native races.");
static PyMethodDef __pyx_mdef_7questdb_7_client_15_debug_oidc_deliver_test_exceptions = {"_debug_oidc_deliver_test_exceptions", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_15_debug_oidc_deliver_test_exceptions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14_debug_oidc_deliver_test_exceptions};
static PyObject *__pyx_pw_7questdb_7_client_15_debug_oidc_deliver_test_exceptions(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_exceptions = 0;
  int __pyx_v_fail_initial;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_deliver_test_exceptions (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_exceptions,&__pyx_mstate_global->__pyx_n_u_fail_initial,0};
  PyObject* values[2] = {0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 595, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 595, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 595, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_deliver_test_exceptions", 0) < (0)) __PYX_ERR(1, 595, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_oidc_deliver_test_exceptions", 1, 2, 2, i); __PYX_ERR(1, 595, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 595, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 595, __pyx_L3_error)
    }
    __pyx_v_exceptions = ((PyObject*)values[0]);
    __pyx_v_fail_initial = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_fail_initial == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 595, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_oidc_deliver_test_exceptions", 1, 2, 2, __pyx_nargs); __PYX_ERR(1, 595, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_oidc_deliver_test_exceptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_exceptions), (&PyTuple_Type), 1, "exceptions", 1))) __PYX_ERR(1, 595, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_14_debug_oidc_deliver_test_exceptions(__pyx_self, __pyx_v_exceptions, __pyx_v_fail_initial);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14_debug_oidc_deliver_test_exceptions(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_exceptions, int __pyx_v_fail_initial) {
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._debug_oidc_deliver_test_exceptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_15_debug_oidc_deliver_test_exceptions, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_deliver_test_excepti, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[28])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 595, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_deliver_test_excepti, __pyx_t_18) < (0)) __PYX_ERR(1, 595, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0596:     """Exercise initial and successive enqueue failures without native races."""
 0597:     global _OIDC_PENDING_CALL_FAILURES_REMAINING
+0598:     for exc in exceptions:
  if (unlikely(__pyx_v_exceptions == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
    __PYX_ERR(1, 598, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_v_exceptions; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 598, __pyx_L1_error)
      #endif
      if (__pyx_t_2 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
    #else
    __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
    #endif
    ++__pyx_t_2;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 598, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_exc, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0599:         if not isinstance(exc, BaseException):
    __pyx_t_4 = __Pyx_PyExc_BaseException_Check(__pyx_v_exc); 
    __pyx_t_5 = (!__pyx_t_4);


    if (unlikely(__pyx_t_5)) {
/* … */
    }
+0600:             raise TypeError('expected exception instances')
      __pyx_t_6 = NULL;
      __pyx_t_7 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_expected_exception_instances};
        __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 600, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(1, 600, __pyx_L1_error)
+0601:     for exc in exceptions:
  if (unlikely(__pyx_v_exceptions == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
    __PYX_ERR(1, 601, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_v_exceptions; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 601, __pyx_L1_error)
      #endif
      if (__pyx_t_2 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
    #else
    __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
    #endif
    ++__pyx_t_2;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 601, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_exc, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0602:         _oidc_park_main(exc)
    __pyx_f_7questdb_7_client__oidc_park_main(__pyx_v_exc);
+0603:     if fail_initial:
  if (__pyx_v_fail_initial) {
/* … */
  }
+0604:         _OIDC_PENDING_CALL_FAILURES_REMAINING = 1
    __pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING = 1;
+0605:     _oidc_schedule_parked_main()
  __pyx_f_7questdb_7_client__oidc_schedule_parked_main();
+0606:     if not fail_initial:
  __pyx_t_5 = (!__pyx_v_fail_initial);

  if (__pyx_t_5) {
/* … */
  }
 0607:         # No bytecode runs between successful C registration and this write.
 0608:         # The already-queued callback will fail to enqueue its successor.
+0609:         _OIDC_PENDING_CALL_FAILURES_REMAINING = 1
    __pyx_v_7questdb_7_client__OIDC_PENDING_CALL_FAILURES_REMAINING = 1;
+0610:     _oidc_raise_unscheduled_main()
  __pyx_t_8 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 610, __pyx_L1_error)

 0611: 
 0612: 
+0613: def _debug_oidc_native_free_counts(bint enabled=False):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17_debug_oidc_native_free_counts(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_16_debug_oidc_native_free_counts, "Count actual native release calls; enabling starts a fresh measurement.");
static PyMethodDef __pyx_mdef_7questdb_7_client_17_debug_oidc_native_free_counts = {"_debug_oidc_native_free_counts", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17_debug_oidc_native_free_counts, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_16_debug_oidc_native_free_counts};
static PyObject *__pyx_pw_7questdb_7_client_17_debug_oidc_native_free_counts(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  int __pyx_v_enabled;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_native_free_counts (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_enabled,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 613, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 613, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_native_free_counts", 0) < (0)) __PYX_ERR(1, 613, __pyx_L3_error)
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 613, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_enabled = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_enabled == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 613, __pyx_L3_error)
    } else {
      __pyx_v_enabled = ((int)((int)0));
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_oidc_native_free_counts", 0, 0, 1, __pyx_nargs); __PYX_ERR(1, 613, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_oidc_native_free_counts", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_16_debug_oidc_native_free_counts(__pyx_self, __pyx_v_enabled);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_16_debug_oidc_native_free_counts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_enabled) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._debug_oidc_native_free_counts", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_18};
    __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 613, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17_debug_oidc_native_free_counts, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_native_free_counts, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[29])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_18, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_native_free_counts, __pyx_t_18) < (0)) __PYX_ERR(1, 613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0614:     """Count actual native release calls; enabling starts a fresh measurement."""
 0615:     global _OIDC_COUNT_NATIVE_FREES, _OIDC_TOKEN_FREES, _OIDC_ERROR_FREES
+0616:     if enabled:
  if (__pyx_v_enabled) {
/* … */
  }
+0617:         _OIDC_TOKEN_FREES = 0
    __pyx_v_7questdb_7_client__OIDC_TOKEN_FREES = 0;
+0618:         _OIDC_ERROR_FREES = 0
    __pyx_v_7questdb_7_client__OIDC_ERROR_FREES = 0;
+0619:     _OIDC_COUNT_NATIVE_FREES = enabled
  __pyx_v_7questdb_7_client__OIDC_COUNT_NATIVE_FREES = __pyx_v_enabled;
+0620:     return (_OIDC_TOKEN_FREES, _OIDC_ERROR_FREES)
  __pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__OIDC_TOKEN_FREES); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__OIDC_ERROR_FREES); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(1, 620, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(1, 620, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
 0621: 
 0622: 
+0623: cdef void _oidc_release_token(questdb_oidc_token* token) noexcept:
static void __pyx_f_7questdb_7_client__oidc_release_token(struct questdb_oidc_token *__pyx_v_token) {
  int __pyx_v_counted;
/* … */
  /* function exit code */


}
 0624:     global _OIDC_TOKEN_FREES
+0625:     cdef bint counted = _OIDC_COUNT_NATIVE_FREES and token != NULL
  if (__pyx_v_7questdb_7_client__OIDC_COUNT_NATIVE_FREES) {
  } else {

    __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_COUNT_NATIVE_FREES;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_token != NULL);


  __pyx_t_1 = __pyx_t_2;

  __pyx_L3_bool_binop_done:;
  __pyx_v_counted = __pyx_t_1;
+0626:     questdb_oidc_token_free(token)
  questdb_oidc_token_free(__pyx_v_token);
+0627:     if counted:
  if (__pyx_v_counted) {
/* … */
  }
+0628:         _OIDC_TOKEN_FREES += 1
    __pyx_v_7questdb_7_client__OIDC_TOKEN_FREES = (__pyx_v_7questdb_7_client__OIDC_TOKEN_FREES + 1);
 0629: 
 0630: 
+0631: cdef void _oidc_release_error(questdb_error* err) noexcept:
static void __pyx_f_7questdb_7_client__oidc_release_error(questdb_error *__pyx_v_err) {
  int __pyx_v_counted;
/* … */
  /* function exit code */


}
 0632:     global _OIDC_ERROR_FREES
+0633:     cdef bint counted = _OIDC_COUNT_NATIVE_FREES and err != NULL
  if (__pyx_v_7questdb_7_client__OIDC_COUNT_NATIVE_FREES) {
  } else {

    __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_COUNT_NATIVE_FREES;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_err != NULL);


  __pyx_t_1 = __pyx_t_2;

  __pyx_L3_bool_binop_done:;
  __pyx_v_counted = __pyx_t_1;
+0634:     questdb_error_free(err)
  questdb_error_free(__pyx_v_err);
+0635:     if counted:
  if (__pyx_v_counted) {
/* … */
  }
+0636:         _OIDC_ERROR_FREES += 1
    __pyx_v_7questdb_7_client__OIDC_ERROR_FREES = (__pyx_v_7questdb_7_client__OIDC_ERROR_FREES + 1);
 0637: 
 0638: 
 0639: # Live providers, keyed by the opaque integer handed to native as `user_data`.
 0640: #
 0641: # Native is given a key rather than a `PyObject*` so that the release callback
 0642: # -- which can run on an abandoned acquisition worker long after the owning
 0643: # handles are gone, potentially past the start of interpreter finalization --
 0644: # owns no Python reference and never needs the GIL.
 0645: #
 0646: # The value is a weakref: the registry must not keep a provider alive, or a
 0647: # `with` block's exit would never collect one.
 0648: #
 0649: # This is BOOKKEEPING ONLY. The native handle is owned by the provider itself
 0650: # (`OidcDeviceAuth._native`), not by `_OIDC_NATIVE_HANDLES`, so evicting or
 0651: # losing an entry here cannot free a handle a live provider still points at.
 0652: # It used to be the sole owner, and that was a use-after-free: the cyclic
 0653: # collector runs weakref callbacks BEFORE finalizers, so a provider in a cycle
 0654: # had its handle freed by this callback and was then handed to a `__del__` in
 0655: # the same cycle that called `close()` on the dangling pointer.
 0656: #
 0657: # `_OIDC_REGISTRY_LOCK` guards the id counter and every paired dict update. It
 0658: # is re-entrant because a weakref callback can run synchronously inside a
 0659: # collection triggered while the same thread already holds it; an ordinary lock
 0660: # would deadlock there. The RLock keeps the registry invariant independent of
 0661: # the GIL without changing a hot path -- it is taken only during provider
 0662: # construction, collection, and the one shutdown snapshot.
 0663: #
 0664: # A module-level `cdef object` is a C static rather than an entry in the module
 0665: # dict, so `_PyModule_Clear` never swaps it for None at interpreter shutdown:
 0666: # readers need no None guard.
+0667: cdef object _OIDC_PROVIDERS = {}
  __pyx_t_18 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 667, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_PROVIDERS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_PROVIDERS, __pyx_t_18);
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
+0668: cdef object _OIDC_NATIVE_HANDLES = {}
  __pyx_t_18 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 668, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES, __pyx_t_18);
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
+0669: cdef object _OIDC_REGISTRY_LOCK = threading.RLock()
  __pyx_t_17 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 669, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_RLock); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 669, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_17, NULL};
    __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 669, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
  }
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_t_18);
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
 0670: # Count callbacks by the opaque provider id given to native, as well as by
 0671: # thread: a logging handler may delegate db.close() to another thread and wait
 0672: # for it. A pool close must not join a provider worker that is still inside its
 0673: # own warning callback, even when no Python lease is currently outstanding.
 0674: # Protected by _OIDC_REGISTRY_LOCK; keys never retain a provider.
+0675: cdef dict _OIDC_DIAGNOSTICS_ACTIVE = {}
  __pyx_t_18 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, ((PyObject*)__pyx_t_18));
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
 0676: # Notified whenever a provider's count drops, so a close on a thread that is
 0677: # not itself inside the callback can wait for it instead of failing.
+0678: cdef object _OIDC_DIAGNOSTICS_DRAINED = threading.Condition(_OIDC_REGISTRY_LOCK)
  __pyx_t_16 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 678, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_Condition); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 678, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK};
    __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
  }
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_DRAINED);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_DRAINED, __pyx_t_18);
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
 0679: # The provider ids whose diagnostic is being dispatched on the current thread.
+0680: cdef object _OIDC_DIAGNOSTIC_LOCAL = threading.local()
  __pyx_t_19 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 680, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_local); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 680, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_19, NULL};
    __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 680, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
  }
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTIC_LOCAL);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTIC_LOCAL, __pyx_t_18);
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
+0681: cdef size_t _oidc_last_provider_id = 0
  __pyx_v_7questdb_7_client__oidc_last_provider_id = 0;
 0682: 
 0683: # How long a pool close waits for a persistence-warning callback of its
 0684: # provider that runs on another thread. Bounded, because a callback that
 0685: # delegated this very close and joins it can never return first: the wait must
 0686: # give up so that callback can. Unrelated closers simply wait it out.
+0687: cdef double _OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS = 2.0
  __pyx_v_7questdb_7_client__OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS = 2.0;
 0688: 
 0689: 
+0690: cdef bint _oidc_diagnostic_on_this_thread(object provider) except -1:
static int __pyx_f_7questdb_7_client__oidc_diagnostic_on_this_thread(PyObject *__pyx_v_provider) {
  PyObject *__pyx_v_ids = NULL;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._oidc_diagnostic_on_this_thread", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ids);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0691:     if provider is None:
  __pyx_t_1 = (__pyx_v_provider == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0692:         return False
    {

      __pyx_r = 0;
    }
    goto __pyx_L0;
+0693:     ids = getattr(_OIDC_DIAGNOSTIC_LOCAL, 'ids', None)
  __pyx_t_2 = __pyx_v_7questdb_7_client__OIDC_DIAGNOSTIC_LOCAL;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_GetAttr3(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ids, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_ids = __pyx_t_3;
  __pyx_t_3 = 0;
+0694:     return bool(ids) and (<OidcDeviceAuth>provider)._provider_id in ids
  __pyx_t_2 = NULL;
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_ids};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 694, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_3);
  }
  __pyx_t_5 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_3)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(1, 694, __pyx_L1_error)
  __Pyx_DECREF((PyObject *)__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_5) {

  } else {

    __pyx_t_1 = __pyx_t_5;

    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_provider_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_v_ids, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(1, 694, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  __pyx_t_1 = __pyx_t_5;

  __pyx_L4_bool_binop_done:;
  {
    __pyx_r = __pyx_t_1;
  }
  goto __pyx_L0;
 0695: 
 0696: 
+0697: cdef bint _oidc_wait_diagnostics_drained(
static int __pyx_f_7questdb_7_client__oidc_wait_diagnostics_drained(PyObject *__pyx_v_provider, double __pyx_v_timeout) {
  size_t __pyx_v_provider_id;
  PyObject *__pyx_v_deadline = NULL;
  PyObject *__pyx_v_remaining = NULL;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._oidc_wait_diagnostics_drained", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;

  __Pyx_XDECREF(__pyx_v_deadline);
  __Pyx_XDECREF(__pyx_v_remaining);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0698:         object provider, double timeout) except -1:
 0699:     """Wait until no persistence-warning callback for ``provider`` runs.
 0700: 
 0701:     Returns False if one is still running after ``timeout`` seconds. Never
 0702:     call it while holding a lock that callback might need.
 0703:     """
+0704:     if provider is None:
  __pyx_t_1 = (__pyx_v_provider == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0705:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+0706:     provider_id = (<OidcDeviceAuth>provider)._provider_id
  __pyx_t_2 = ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_provider_id;

  __pyx_v_provider_id = __pyx_t_2;
+0707:     deadline = time.monotonic() + timeout
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_2 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_2 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_2, (1-__pyx_t_2) | (__pyx_t_2*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 707, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_timeout); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyNumber_Add_object_float(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_deadline = __pyx_t_4;
  __pyx_t_4 = 0;
 0708:     # The RLock's own `with`, whose `__enter__` and `__exit__` are C. The
 0709:     # Condition's are Python, and a pending Ctrl-C raised in them left this
 0710:     # process-wide lock held (see `QuestDB.close()`). `wait()` shares the lock.
+0711:     with _OIDC_REGISTRY_LOCK:
  /*with:*/ {
    __pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 711, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = NULL;
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 711, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
      __pyx_t_2 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_2, (1-__pyx_t_2) | (__pyx_t_2*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 711, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client._oidc_wait_diagnostics_drained", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(1, 711, __pyx_L10_except_error)
          __Pyx_XGOTREF(__pyx_t_5);
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_4);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_5, __pyx_t_3, __pyx_t_4};
            __pyx_t_6 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 711, __pyx_L10_except_error)
            __Pyx_GOTREF(__pyx_t_6);
          }
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, NULL);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 711, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (__pyx_t_1 < (0)) __PYX_ERR(1, 711, __pyx_L10_except_error)
          __pyx_t_12 = (!__pyx_t_1);


          if (unlikely(__pyx_t_12)) {

            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_4);
            __Pyx_ErrRestoreWithState(__pyx_t_5, __pyx_t_3, __pyx_t_4);
            __pyx_t_5 = 0;  __pyx_t_3 = 0;  __pyx_t_4 = 0; 
            __PYX_ERR(1, 711, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        goto __pyx_L1_error;
        __pyx_L12_try_return:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        goto __pyx_L5_return;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_7) {
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 711, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L5_return: {
        __pyx_t_12 = __pyx_r;
        if (__pyx_t_7) {
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 711, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        __pyx_r = __pyx_t_12;
        goto __pyx_L0;
      }
      __pyx_L7:;
    }
    goto __pyx_L20;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L1_error;
    __pyx_L20:;
  }
/* … */
  {
    PyObject* __pyx_temp[3] = {Py_None, Py_None, Py_None};
    __pyx_mstate_global->__pyx_tuple[6] = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[6])) __PYX_ERR(1, 711, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[6]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[6]);
+0712:         while _OIDC_DIAGNOSTICS_ACTIVE.get(provider_id, 0) != 0:
          while (1) {
            if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
              __PYX_ERR(1, 712, __pyx_L8_error)
            }
            __pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 712, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_4, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 712, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __pyx_t_1 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 712, __pyx_L8_error)
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

            if (!__pyx_t_1) break;
+0713:             remaining = deadline - time.monotonic()
            __pyx_t_4 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 713, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 713, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_2 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_5))) {
              __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
              assert(__pyx_t_4);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
              __Pyx_INCREF(__pyx_t_4);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
              __pyx_t_2 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
              __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_2, (1-__pyx_t_2) | (__pyx_t_2*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 713, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_3);
            }
            __pyx_t_5 = __Pyx_PyNumber_Subtract_object_object(__pyx_v_deadline, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 713, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_XDECREF_SET(__pyx_v_remaining, __pyx_t_5);
            __pyx_t_5 = 0;
+0714:             if remaining <= 0:
            __pyx_t_1 = __Pyx_PyObject_CompareBoolLe_object_int(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_0, Py_LE); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 714, __pyx_L8_error)
            if (__pyx_t_1) {
/* … */
            }
+0715:                 return False
              {

                __pyx_r = 0;
              }
              goto __pyx_L12_try_return;
+0716:             _OIDC_DIAGNOSTICS_DRAINED.wait(remaining)
            __pyx_t_3 = __pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_DRAINED;
            __Pyx_INCREF(__pyx_t_3);
            __pyx_t_2 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_remaining};
              __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_wait, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
              if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 716, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_5);
            }
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          }
+0717:     return True
  {

    __pyx_r = 1;
  }
  goto __pyx_L0;
 0718: 
 0719: 
 0720: # Set before the atexit hook snapshots the registry. A provider whose native
 0721: # build completes after that snapshot observes the flag under the same lock and
 0722: # detaches its callbacks before construction returns, closing the new-provider
 0723: # race while the hook releases the GIL to drain an older callback.
+0724: cdef bint _oidc_callbacks_shutting_down = False
  __pyx_v_7questdb_7_client__oidc_callbacks_shutting_down = 0;
 0725: 
 0726: 
+0727: def _debug_oidc_registry_size():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_19_debug_oidc_registry_size(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_18_debug_oidc_registry_size, "Internal test hook: live entries in the provider registry.\n\n    Native owns no Python reference. A provider weakref callback removes both\n    registry entries; either one left behind would retain bookkeeping or the\n    native auth handle for the life of the process.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_19_debug_oidc_registry_size = {"_debug_oidc_registry_size", (PyCFunction)__pyx_pw_7questdb_7_client_19_debug_oidc_registry_size, METH_NOARGS, __pyx_doc_7questdb_7_client_18_debug_oidc_registry_size};
static PyObject *__pyx_pw_7questdb_7_client_19_debug_oidc_registry_size(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_registry_size (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_18_debug_oidc_registry_size(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_18_debug_oidc_registry_size(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._debug_oidc_registry_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_19_debug_oidc_registry_size, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_registry_size, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[30])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_registry_size, __pyx_t_18) < (0)) __PYX_ERR(1, 727, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0728:     """Internal test hook: live entries in the provider registry.
 0729: 
 0730:     Native owns no Python reference. A provider weakref callback removes both
 0731:     registry entries; either one left behind would retain bookkeeping or the
 0732:     native auth handle for the life of the process.
 0733:     """
+0734:     if len(_OIDC_PROVIDERS) != len(_OIDC_NATIVE_HANDLES):
  __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_PROVIDERS;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 734, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 734, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = (__pyx_t_2 != __pyx_t_3);



  if (unlikely(__pyx_t_4)) {
/* … */
  }
+0735:         raise AssertionError('OIDC provider/native registries are out of sync')
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_OIDC_provider_native_registries};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AssertionError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 735, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 735, __pyx_L1_error)
+0736:     return len(_OIDC_PROVIDERS)
  __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_PROVIDERS;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 736, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyLong_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0737: 
 0738: 
+0739: def _debug_oidc_registry_snapshot():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_21_debug_oidc_registry_snapshot(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_20_debug_oidc_registry_snapshot, "Internal test hook: paired registry ids observed under their lock.");
static PyMethodDef __pyx_mdef_7questdb_7_client_21_debug_oidc_registry_snapshot = {"_debug_oidc_registry_snapshot", (PyCFunction)__pyx_pw_7questdb_7_client_21_debug_oidc_registry_snapshot, METH_NOARGS, __pyx_doc_7questdb_7_client_20_debug_oidc_registry_snapshot};
static PyObject *__pyx_pw_7questdb_7_client_21_debug_oidc_registry_snapshot(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_registry_snapshot (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_20_debug_oidc_registry_snapshot(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_20_debug_oidc_registry_snapshot(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._debug_oidc_registry_snapshot", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_21_debug_oidc_registry_snapshot, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_registry_snapshot, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[31])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_registry_snapshot, __pyx_t_18) < (0)) __PYX_ERR(1, 739, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0740:     """Internal test hook: paired registry ids observed under their lock."""
+0741:     with _OIDC_REGISTRY_LOCK:
  /*with:*/ {
    __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 741, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 741, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client._debug_oidc_registry_snapshot", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(1, 741, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_2);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_3, __pyx_t_4, __pyx_t_2};
            __pyx_t_9 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 741, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_9);
          }
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 741, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_11 < (0)) __PYX_ERR(1, 741, __pyx_L9_except_error)
          __pyx_t_12 = (!__pyx_t_11);


          if (unlikely(__pyx_t_12)) {

            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_XGIVEREF(__pyx_t_2);
            __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_4, __pyx_t_2);
            __pyx_t_3 = 0;  __pyx_t_4 = 0;  __pyx_t_2 = 0; 
            __PYX_ERR(1, 741, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L11_try_return:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L4_return;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_1) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 741, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L4_return: {
        __pyx_t_8 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_1) {
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 741, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __pyx_r = __pyx_t_8;
        __pyx_t_8 = 0;
        goto __pyx_L0;
      }
      __pyx_L6:;
    }
    goto __pyx_L16;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L16:;
  }
+0742:         return (frozenset(_OIDC_PROVIDERS),
          __pyx_t_2 = __Pyx_PyFrozenSet_New(__pyx_v_7questdb_7_client__OIDC_PROVIDERS); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 742, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_2);
/* … */
          __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 742, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_2);
          if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2) != (0)) __PYX_ERR(1, 742, __pyx_L7_error);
          __Pyx_GIVEREF(__pyx_t_4);
          if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4) != (0)) __PYX_ERR(1, 742, __pyx_L7_error);
          __pyx_t_2 = 0;
          __pyx_t_4 = 0;
          {
            PyObject *__pyx_temp;
            {
              __pyx_temp = __pyx_r;
              __pyx_r = __pyx_t_3;
            }
            __Pyx_XDECREF(__pyx_temp);
          }
          __pyx_t_3 = 0;
          goto __pyx_L11_try_return;
+0743:                 frozenset(_OIDC_NATIVE_HANDLES))
          __pyx_t_4 = __Pyx_PyFrozenSet_New(__pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 743, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_4);
 0744: 
 0745: 
+0746: def _debug_oidc_registry_lock():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_23_debug_oidc_registry_lock(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_22_debug_oidc_registry_lock, "Internal test hook: the lock guarding the provider registry and the\n    persistence-diagnostic counts.");
static PyMethodDef __pyx_mdef_7questdb_7_client_23_debug_oidc_registry_lock = {"_debug_oidc_registry_lock", (PyCFunction)__pyx_pw_7questdb_7_client_23_debug_oidc_registry_lock, METH_NOARGS, __pyx_doc_7questdb_7_client_22_debug_oidc_registry_lock};
static PyObject *__pyx_pw_7questdb_7_client_23_debug_oidc_registry_lock(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_registry_lock (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_22_debug_oidc_registry_lock(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_22_debug_oidc_registry_lock(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_23_debug_oidc_registry_lock, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_registry_lock, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[32])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 746, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_registry_lock, __pyx_t_18) < (0)) __PYX_ERR(1, 746, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0747:     """Internal test hook: the lock guarding the provider registry and the
 0748:     persistence-diagnostic counts."""
+0749:     return _OIDC_REGISTRY_LOCK
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK);
      __pyx_r = __pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 0750: 
 0751: 
+0752: def _debug_oidc_last_provider_id():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_25_debug_oidc_last_provider_id(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_24_debug_oidc_last_provider_id, "Internal test hook: the most recently allocated provider id.\n\n    Ids are monotonic and never reused, so every provider built after a reading\n    has a larger id. That lets a test track exactly the providers it created,\n    regardless of what earlier tests left for the collector to finalize.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_25_debug_oidc_last_provider_id = {"_debug_oidc_last_provider_id", (PyCFunction)__pyx_pw_7questdb_7_client_25_debug_oidc_last_provider_id, METH_NOARGS, __pyx_doc_7questdb_7_client_24_debug_oidc_last_provider_id};
static PyObject *__pyx_pw_7questdb_7_client_25_debug_oidc_last_provider_id(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_last_provider_id (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_24_debug_oidc_last_provider_id(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_24_debug_oidc_last_provider_id(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._debug_oidc_last_provider_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_25_debug_oidc_last_provider_id, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_last_provider_id, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[33])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_last_provider_id, __pyx_t_18) < (0)) __PYX_ERR(1, 752, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0753:     """Internal test hook: the most recently allocated provider id.
 0754: 
 0755:     Ids are monotonic and never reused, so every provider built after a reading
 0756:     has a larger id. That lets a test track exactly the providers it created,
 0757:     regardless of what earlier tests left for the collector to finalize.
 0758:     """
+0759:     with _OIDC_REGISTRY_LOCK:
  /*with:*/ {
    __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 759, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 759, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client._debug_oidc_last_provider_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(1, 759, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_9 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 759, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_9);
          }
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 759, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_11 < (0)) __PYX_ERR(1, 759, __pyx_L9_except_error)
          __pyx_t_12 = (!__pyx_t_11);


          if (unlikely(__pyx_t_12)) {

            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_XGIVEREF(__pyx_t_3);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
            __pyx_t_2 = 0;  __pyx_t_4 = 0;  __pyx_t_3 = 0; 
            __PYX_ERR(1, 759, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L11_try_return:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L4_return;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_1) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 759, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L4_return: {
        __pyx_t_8 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_1) {
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 759, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __pyx_r = __pyx_t_8;
        __pyx_t_8 = 0;
        goto __pyx_L0;
      }
      __pyx_L6:;
    }
    goto __pyx_L16;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L16:;
  }
+0760:         return _oidc_last_provider_id
          __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_7questdb_7_client__oidc_last_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 760, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_2);
          {
            PyObject *__pyx_temp;
            {
              __pyx_temp = __pyx_r;
              __pyx_r = __pyx_t_2;
            }
            __Pyx_XDECREF(__pyx_temp);
          }
          __pyx_t_2 = 0;
          goto __pyx_L11_try_return;
 0761: 
 0762: 
+0763: def _debug_oidc_callbacks_shutting_down():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_27_debug_oidc_callbacks_shutting_down(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_26_debug_oidc_callbacks_shutting_down, "Internal test hook: has the callback-detach atexit phase started?");
static PyMethodDef __pyx_mdef_7questdb_7_client_27_debug_oidc_callbacks_shutting_down = {"_debug_oidc_callbacks_shutting_down", (PyCFunction)__pyx_pw_7questdb_7_client_27_debug_oidc_callbacks_shutting_down, METH_NOARGS, __pyx_doc_7questdb_7_client_26_debug_oidc_callbacks_shutting_down};
static PyObject *__pyx_pw_7questdb_7_client_27_debug_oidc_callbacks_shutting_down(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_callbacks_shutting_down (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_26_debug_oidc_callbacks_shutting_down(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_26_debug_oidc_callbacks_shutting_down(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._debug_oidc_callbacks_shutting_down", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_27_debug_oidc_callbacks_shutting_down, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_callbacks_shutting_d, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[34])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 763, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_callbacks_shutting_d, __pyx_t_18) < (0)) __PYX_ERR(1, 763, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0764:     """Internal test hook: has the callback-detach atexit phase started?"""
+0765:     with _OIDC_REGISTRY_LOCK:
  /*with:*/ {
    __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 765, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 765, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client._debug_oidc_callbacks_shutting_down", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(1, 765, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_4);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_4};
            __pyx_t_9 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 765, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_9);
          }
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 765, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_11 < (0)) __PYX_ERR(1, 765, __pyx_L9_except_error)
          __pyx_t_12 = (!__pyx_t_11);


          if (unlikely(__pyx_t_12)) {

            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_4);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_4);
            __pyx_t_2 = 0;  __pyx_t_3 = 0;  __pyx_t_4 = 0; 
            __PYX_ERR(1, 765, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L11_try_return:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L4_return;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_1) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 765, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L4_return: {
        __pyx_t_8 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_1) {
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 765, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __pyx_r = __pyx_t_8;
        __pyx_t_8 = 0;
        goto __pyx_L0;
      }
      __pyx_L6:;
    }
    goto __pyx_L16;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L16:;
  }
+0766:         return bool(_oidc_callbacks_shutting_down)
          __pyx_t_4 = NULL;
          __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_7questdb_7_client__oidc_callbacks_shutting_down); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 766, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3};
            __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 766, __pyx_L7_error)
            __Pyx_GOTREF((PyObject *)__pyx_t_2);
          }
          {
            PyObject *__pyx_temp;
            {
              __pyx_temp = __pyx_r;
              __pyx_r = ((PyObject *)__pyx_t_2);
            }
            __Pyx_XDECREF(__pyx_temp);
          }
          __pyx_t_2 = 0;
          goto __pyx_L11_try_return;
 0767: 
 0768: 
+0769: def _debug_oidc_reset_callback_shutdown():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_29_debug_oidc_reset_callback_shutdown(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_28_debug_oidc_reset_callback_shutdown, "Internal test hook: undo a manually invoked atexit phase.");
static PyMethodDef __pyx_mdef_7questdb_7_client_29_debug_oidc_reset_callback_shutdown = {"_debug_oidc_reset_callback_shutdown", (PyCFunction)__pyx_pw_7questdb_7_client_29_debug_oidc_reset_callback_shutdown, METH_NOARGS, __pyx_doc_7questdb_7_client_28_debug_oidc_reset_callback_shutdown};
static PyObject *__pyx_pw_7questdb_7_client_29_debug_oidc_reset_callback_shutdown(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_reset_callback_shutdown (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_28_debug_oidc_reset_callback_shutdown(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_28_debug_oidc_reset_callback_shutdown(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._debug_oidc_reset_callback_shutdown", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_29_debug_oidc_reset_callback_shutdown, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_reset_callback_shutd, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[35])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_reset_callback_shutd, __pyx_t_18) < (0)) __PYX_ERR(1, 769, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0770:     """Internal test hook: undo a manually invoked atexit phase."""
 0771:     global _oidc_callbacks_shutting_down
+0772:     if not qdb_oidc_callback_reopen_for_test():
  __pyx_t_1 = (!qdb_oidc_callback_reopen_for_test());

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0773:         raise RuntimeError('OIDC callbacks are still active')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_OIDC_callbacks_are_still_active};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 773, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 773, __pyx_L1_error)
+0774:     with _OIDC_REGISTRY_LOCK:
  /*with:*/ {
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 774, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = NULL;
    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 774, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
      __pyx_t_4 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 774, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_5) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 774, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    goto __pyx_L14;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L1_error;
    __pyx_L14:;
  }
+0775:         _oidc_callbacks_shutting_down = False
          __pyx_v_7questdb_7_client__oidc_callbacks_shutting_down = 0;
 0776: 
 0777: 
+0778: def _debug_oidc_pause_callback_before_gil():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_31_debug_oidc_pause_callback_before_gil(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_30_debug_oidc_pause_callback_before_gil, "Park the next admitted callback at a native-only pre-GIL barrier.");
static PyMethodDef __pyx_mdef_7questdb_7_client_31_debug_oidc_pause_callback_before_gil = {"_debug_oidc_pause_callback_before_gil", (PyCFunction)__pyx_pw_7questdb_7_client_31_debug_oidc_pause_callback_before_gil, METH_NOARGS, __pyx_doc_7questdb_7_client_30_debug_oidc_pause_callback_before_gil};
static PyObject *__pyx_pw_7questdb_7_client_31_debug_oidc_pause_callback_before_gil(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_pause_callback_before_gil (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_30_debug_oidc_pause_callback_before_gil(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_30_debug_oidc_pause_callback_before_gil(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._debug_oidc_pause_callback_before_gil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_31_debug_oidc_pause_callback_before_gil, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_pause_callback_befor, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[36])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_pause_callback_befor, __pyx_t_18) < (0)) __PYX_ERR(1, 778, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0779:     """Park the next admitted callback at a native-only pre-GIL barrier."""
+0780:     if not qdb_oidc_callback_pause_next_for_test():
  __pyx_t_1 = (!qdb_oidc_callback_pause_next_for_test());

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0781:         raise MemoryError('Could not allocate the callback test barrier')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_allocate_the_callback};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 781, __pyx_L1_error)
 0782: 
 0783: 
+0784: def _debug_oidc_wait_callback_before_gil(double timeout=5):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_33_debug_oidc_wait_callback_before_gil(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_33_debug_oidc_wait_callback_before_gil = {"_debug_oidc_wait_callback_before_gil", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_33_debug_oidc_wait_callback_before_gil, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_33_debug_oidc_wait_callback_before_gil(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  double __pyx_v_timeout;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_wait_callback_before_gil (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_timeout,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 784, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 784, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_wait_callback_before_gil", 0) < (0)) __PYX_ERR(1, 784, __pyx_L3_error)
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 784, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_timeout = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_timeout == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 784, __pyx_L3_error)
    } else {
      __pyx_v_timeout = ((double)((double)5.0));
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_oidc_wait_callback_before_gil", 0, 0, 1, __pyx_nargs); __PYX_ERR(1, 784, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_oidc_wait_callback_before_gil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_32_debug_oidc_wait_callback_before_gil(__pyx_self, __pyx_v_timeout);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_32_debug_oidc_wait_callback_before_gil(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_timeout) {
  int __pyx_v_paused;
  double __pyx_v_deadline;
  double __pyx_v_remaining;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._debug_oidc_wait_callback_before_gil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;



  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = PyFloat_FromDouble(((double)5.0)); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  {
    PyObject* __pyx_temp[1] = {__pyx_t_18};
    __pyx_t_17 = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 784, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_33_debug_oidc_wait_callback_before_gil, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_wait_callback_before, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[37])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_18, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_wait_callback_before, __pyx_t_18) < (0)) __PYX_ERR(1, 784, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+0785:     if not 0 <= timeout <= 30:
  __pyx_t_1 = (0.0 <= __pyx_v_timeout);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_timeout <= 30.0);
  }
  __pyx_t_2 = (!__pyx_t_1);


  if (unlikely(__pyx_t_2)) {
/* … */
  }
+0786:         raise ValueError('timeout must be between 0 and 30 seconds')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_timeout_must_be_between_0_and_30};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 786, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(1, 786, __pyx_L1_error)
 0787:     cdef bint paused
+0788:     cdef double deadline = time.monotonic() + timeout
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 788, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_timeout); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = __Pyx_PyNumber_Add_object_float(__pyx_t_3, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_8 = __Pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 788, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_deadline = __pyx_t_8;
 0789:     cdef double remaining
+0790:     while True:
  while (1) {
+0791:         with nogil:
    {
        PyThreadState * _save;
        _save = PyEval_SaveThread();
        __Pyx_FastGIL_Remember();
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_FastGIL_Forget();
            PyEval_RestoreThread(_save);
            goto __pyx_L10;
          }
          __pyx_L10:;
        }
    }
+0792:             paused = qdb_oidc_callback_try_paused_for_test()
          __pyx_v_paused = qdb_oidc_callback_try_paused_for_test();
        }
+0793:         if paused:
    if (__pyx_v_paused) {
/* … */
    }
+0794:             return True
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __Pyx_INCREF(Py_True);
          __pyx_r = Py_True;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
+0795:         remaining = deadline - time.monotonic()
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_deadline); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __pyx_t_9 = __Pyx_PyNumber_Subtract_float_object(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8 = __Pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 795, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_v_remaining = __pyx_t_8;
+0796:         if remaining <= 0:
    __pyx_t_2 = (__pyx_v_remaining <= 0.0);

    if (__pyx_t_2) {
/* … */
    }
+0797:             return False
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __Pyx_INCREF(Py_False);
          __pyx_r = Py_False;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L0;
+0798:         time.sleep(min(remaining, 0.001))
    __pyx_t_7 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 798, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sleep); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 798, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    __pyx_t_8 = 0.001;

    __pyx_t_10 = __pyx_v_remaining;
    __pyx_t_2 = (__pyx_t_8 < __pyx_t_10);

    if (__pyx_t_2) {

      __pyx_t_11 = __pyx_t_8;
    } else {

      __pyx_t_11 = __pyx_t_10;
    }

    __pyx_t_4 = PyFloat_FromDouble(__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 798, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);

    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_7);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_4};
      __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 798, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
 0799: 
 0800: 
+0801: def _debug_oidc_resume_callback_before_gil():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_35_debug_oidc_resume_callback_before_gil(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_35_debug_oidc_resume_callback_before_gil = {"_debug_oidc_resume_callback_before_gil", (PyCFunction)__pyx_pw_7questdb_7_client_35_debug_oidc_resume_callback_before_gil, METH_NOARGS, 0};
static PyObject *__pyx_pw_7questdb_7_client_35_debug_oidc_resume_callback_before_gil(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_resume_callback_before_gil (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_34_debug_oidc_resume_callback_before_gil(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_34_debug_oidc_resume_callback_before_gil(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_35_debug_oidc_resume_callback_before_gil, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_resume_callback_befo, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[38])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_resume_callback_befo, __pyx_t_18) < (0)) __PYX_ERR(1, 801, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+0802:     qdb_oidc_callback_resume_for_test()
  qdb_oidc_callback_resume_for_test();
 0803: 
 0804: 
+0805: def _debug_oidc_reset_errors_module():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_37_debug_oidc_reset_errors_module(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_36_debug_oidc_reset_errors_module, "Internal test hook: drop the cached ``questdb.auth._errors`` module.");
static PyMethodDef __pyx_mdef_7questdb_7_client_37_debug_oidc_reset_errors_module = {"_debug_oidc_reset_errors_module", (PyCFunction)__pyx_pw_7questdb_7_client_37_debug_oidc_reset_errors_module, METH_NOARGS, __pyx_doc_7questdb_7_client_36_debug_oidc_reset_errors_module};
static PyObject *__pyx_pw_7questdb_7_client_37_debug_oidc_reset_errors_module(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_reset_errors_module (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_36_debug_oidc_reset_errors_module(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_36_debug_oidc_reset_errors_module(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_37_debug_oidc_reset_errors_module, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_reset_errors_module, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[39])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_reset_errors_module, __pyx_t_18) < (0)) __PYX_ERR(1, 805, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0806:     """Internal test hook: drop the cached ``questdb.auth._errors`` module."""
 0807:     global _OIDC_ERRORS_MOD
+0808:     _OIDC_ERRORS_MOD = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD, Py_None);
  __Pyx_GIVEREF(Py_None);
 0809: 
 0810: 
+0811: def _debug_oidc_errors_module_ready():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_39_debug_oidc_errors_module_ready(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_38_debug_oidc_errors_module_ready, "Internal test hook: does the non-importing resolver find a usable module?");
static PyMethodDef __pyx_mdef_7questdb_7_client_39_debug_oidc_errors_module_ready = {"_debug_oidc_errors_module_ready", (PyCFunction)__pyx_pw_7questdb_7_client_39_debug_oidc_errors_module_ready, METH_NOARGS, __pyx_doc_7questdb_7_client_38_debug_oidc_errors_module_ready};
static PyObject *__pyx_pw_7questdb_7_client_39_debug_oidc_errors_module_ready(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_errors_module_ready (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_38_debug_oidc_errors_module_ready(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_38_debug_oidc_errors_module_ready(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._debug_oidc_errors_module_ready", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_39_debug_oidc_errors_module_ready, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_errors_module_ready, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[40])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 811, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_errors_module_ready, __pyx_t_18) < (0)) __PYX_ERR(1, 811, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0812:     """Internal test hook: does the non-importing resolver find a usable module?"""
+0813:     return _oidc_errors_module_if_ready() is not None
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_errors_module_if_ready(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 813, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 != Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 813, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0814: 
 0815: 
+0816: def _debug_oidc_errors_module_resolved():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_41_debug_oidc_errors_module_resolved(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_40_debug_oidc_errors_module_resolved, "Internal test hook: does the importing resolver find a usable module?");
static PyMethodDef __pyx_mdef_7questdb_7_client_41_debug_oidc_errors_module_resolved = {"_debug_oidc_errors_module_resolved", (PyCFunction)__pyx_pw_7questdb_7_client_41_debug_oidc_errors_module_resolved, METH_NOARGS, __pyx_doc_7questdb_7_client_40_debug_oidc_errors_module_resolved};
static PyObject *__pyx_pw_7questdb_7_client_41_debug_oidc_errors_module_resolved(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_errors_module_resolved (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_40_debug_oidc_errors_module_resolved(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_40_debug_oidc_errors_module_resolved(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._debug_oidc_errors_module_resolved", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_41_debug_oidc_errors_module_resolved, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_errors_module_resolv, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[41])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_errors_module_resolv, __pyx_t_18) < (0)) __PYX_ERR(1, 816, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0817:     """Internal test hook: does the importing resolver find a usable module?"""
+0818:     return _oidc_errors_module() is not None
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_errors_module(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 818, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 != Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 818, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0819: 
 0820: 
+0821: def _oidc_provider_collected(size_t provider_id, object provider_ref):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_43_oidc_provider_collected(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_42_oidc_provider_collected, "Drop the registry bookkeeping for a collected provider.\n\n    Ids come from a monotonic counter and are never reused, so both entries\n    belong to this provider alone and are dropped unconditionally. The previous\n    identity guard returned early when the `_OIDC_PROVIDERS` entry was already\n    gone, without touching `_OIDC_NATIVE_HANDLES` -- so anything that removed\n    one and not the other left the two permanently out of sync, retaining the\n    stale entry for the life of the process.\n\n    Frees nothing: the provider owns its native handle (`OidcDeviceAuth.\n    _native`), so neither this callback nor a caller invoking it with a forged\n    id can release a handle that is still in use.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_43_oidc_provider_collected = {"_oidc_provider_collected", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_43_oidc_provider_collected, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_42_oidc_provider_collected};
static PyObject *__pyx_pw_7questdb_7_client_43_oidc_provider_collected(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  size_t __pyx_v_provider_id;
  CYTHON_UNUSED PyObject *__pyx_v_provider_ref = 0;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_oidc_provider_collected (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_provider_id,&__pyx_mstate_global->__pyx_n_u_provider_ref,0};
  PyObject* values[2] = {0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 821, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 821, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 821, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_oidc_provider_collected", 0) < (0)) __PYX_ERR(1, 821, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_oidc_provider_collected", 1, 2, 2, i); __PYX_ERR(1, 821, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 821, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 821, __pyx_L3_error)
    }
    __pyx_v_provider_id = __Pyx_PyLong_As_size_t(values[0]); if (unlikely((__pyx_v_provider_id == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 821, __pyx_L3_error)
    __pyx_v_provider_ref = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_oidc_provider_collected", 1, 2, 2, __pyx_nargs); __PYX_ERR(1, 821, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._oidc_provider_collected", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_42_oidc_provider_collected(__pyx_self, __pyx_v_provider_id, __pyx_v_provider_ref);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_42_oidc_provider_collected(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_provider_id, CYTHON_UNUSED PyObject *__pyx_v_provider_ref) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._oidc_provider_collected", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_43_oidc_provider_collected, 0, __pyx_mstate_global->__pyx_n_u_oidc_provider_collected, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[42])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 821, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_oidc_provider_collected, __pyx_t_18) < (0)) __PYX_ERR(1, 821, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0822:     """Drop the registry bookkeeping for a collected provider.
 0823: 
 0824:     Ids come from a monotonic counter and are never reused, so both entries
 0825:     belong to this provider alone and are dropped unconditionally. The previous
 0826:     identity guard returned early when the `_OIDC_PROVIDERS` entry was already
 0827:     gone, without touching `_OIDC_NATIVE_HANDLES` -- so anything that removed
 0828:     one and not the other left the two permanently out of sync, retaining the
 0829:     stale entry for the life of the process.
 0830: 
 0831:     Frees nothing: the provider owns its native handle (`OidcDeviceAuth.
 0832:     _native`), so neither this callback nor a caller invoking it with a forged
 0833:     id can release a handle that is still in use.
 0834:     """
+0835:     with _OIDC_REGISTRY_LOCK:
  /*with:*/ {
    __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 835, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 835, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L12_try_end;
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client._oidc_provider_collected", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(1, 835, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          {
            PyObject* __pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_t_3};
            __pyx_t_9 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 835, __pyx_L9_except_error)
            __Pyx_GOTREF(__pyx_t_9);
          }
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 835, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_11 < (0)) __PYX_ERR(1, 835, __pyx_L9_except_error)
          __pyx_t_12 = (!__pyx_t_11);


          if (unlikely(__pyx_t_12)) {

            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_XGIVEREF(__pyx_t_3);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
            __pyx_t_2 = 0;  __pyx_t_4 = 0;  __pyx_t_3 = 0; 
            __PYX_ERR(1, 835, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L12_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_1) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 835, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L16;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L16:;
  }
+0836:         _OIDC_PROVIDERS.pop(provider_id, None)
          __pyx_t_4 = __pyx_v_7questdb_7_client__OIDC_PROVIDERS;
          __Pyx_INCREF(__pyx_t_4);
          __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 836, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = 0;
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, Py_None};
            __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_pop, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 836, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0837:         _OIDC_NATIVE_HANDLES.pop(provider_id, None)
          __pyx_t_3 = __pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES;
          __Pyx_INCREF(__pyx_t_3);
          __pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 837, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = 0;
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, Py_None};
            __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_pop, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 837, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0838: 
 0839: 
+0840: cdef void _oidc_detach_handle_callbacks(
static void __pyx_f_7questdb_7_client__oidc_detach_handle_callbacks(struct __pyx_obj_7questdb_7_client__OidcNativeHandle *__pyx_v_handle, int __pyx_v_wait_for_events) {
  PyThreadState *__pyx_v_gs;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_WriteUnraisable("questdb._client._oidc_detach_handle_callbacks", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;


  __Pyx_RefNannyFinishContext();
}
 0841:         _OidcNativeHandle handle, bint wait_for_events) noexcept:
 0842:     """Stop one native auth handle delivering managed-runtime callbacks.
 0843: 
 0844:     Both native detaches are idempotent and NULL-tolerant. The process-wide
 0845:     callback gate handles interpreter-exit admission and draining, including
 0846:     callbacks from providers no longer present in the registry. Native nowait
 0847:     detach remains necessary for finalizers that may own a logging lock.
 0848:     """
+0849:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+0850:     if handle is None or handle.raw == NULL or handle.pid != os.getpid():
  __pyx_t_2 = (((PyObject *)__pyx_v_handle) == Py_None);
  if (!__pyx_t_2) {

  } else {

    __pyx_t_1 = __pyx_t_2;

    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_handle->raw == NULL);

  if (!__pyx_t_2) {

  } else {

    __pyx_t_1 = __pyx_t_2;

    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_handle->pid); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_getpid); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_8 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    assert(__pyx_t_5);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 850, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_int_object(__pyx_t_3, __pyx_t_4, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 850, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  __pyx_t_1 = __pyx_t_2;

  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0851:         return
    {
    }
    goto __pyx_L0;
+0852:     _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+0853:     if wait_for_events:
  if (__pyx_v_wait_for_events) {
/* … */
    goto __pyx_L7;
  }
+0854:         questdb_oidc_auth_detach_events(handle.raw)
    questdb_oidc_auth_detach_events(__pyx_v_handle->raw);
+0855:         questdb_oidc_auth_detach_diagnostics(handle.raw)
    questdb_oidc_auth_detach_diagnostics(__pyx_v_handle->raw);
 0856:     else:
+0857:         questdb_oidc_auth_detach_events_nowait(handle.raw)
  /*else*/ {
    questdb_oidc_auth_detach_events_nowait(__pyx_v_handle->raw);
+0858:         questdb_oidc_auth_detach_diagnostics_nowait(handle.raw)
    questdb_oidc_auth_detach_diagnostics_nowait(__pyx_v_handle->raw);
  }
  __pyx_L7:;
+0859:     _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
 0860: 
 0861: 
+0862: def _oidc_detach_diagnostics_at_exit():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_45_oidc_detach_diagnostics_at_exit(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_44_oidc_detach_diagnostics_at_exit, "Suppress new Python callbacks and drain admitted ones before finalization.\n\n    Native nowait detach alone cannot drain a callback already admitted but\n    paused before GIL acquisition. The C-level gate counts that entire interval\n    and every callback body, even for a provider removed from the registry.\n    Close admission first, detach without holding Python locks, then wait with\n    the GIL released while the interpreter is still alive. Callback code must\n    return: abandoning its Python frames can force an unwind through Rust on\n    CPython <=3.13/glibc. A daemon sign-in does not exempt its active renderer.\n    The one exception is a greenlet suspended inside a callback on this, the\n    main, thread -- a token provider waiting on gevent I/O, say. It cannot\n    resume until this hook returns, so waiting for it hung the exit for good;\n    the drain skips it, and its thread is the one finishing the interpreter.\n\n    Providers stay open so transports can finish their bounded close-flush drain\n    during subsequent module teardown. We do not wait for an IdP request that\n    has not entered a Python callback; its later callback is refused by the gate.\n    The one exception is a token-provider callback the main thread makes from\n    inside its own native call while the interpreter is not yet finalizing --\n    an ILP/HTTP flush from a later atexit callback or from `logging.shutdown()`\n    -- which still runs (see `_tp_main_thread_before_finalization`).\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_45_oidc_detach_diagnostics_at_exit = {"_oidc_detach_diagnostics_at_exit", (PyCFunction)__pyx_pw_7questdb_7_client_45_oidc_detach_diagnostics_at_exit, METH_NOARGS, __pyx_doc_7questdb_7_client_44_oidc_detach_diagnostics_at_exit};
static PyObject *__pyx_pw_7questdb_7_client_45_oidc_detach_diagnostics_at_exit(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_oidc_detach_diagnostics_at_exit (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_44_oidc_detach_diagnostics_at_exit(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_44_oidc_detach_diagnostics_at_exit(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_v_handles = NULL;
  PyObject *__pyx_v_handle = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client._oidc_detach_diagnostics_at_exit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_handles);
  __Pyx_XDECREF(__pyx_v_handle);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_45_oidc_detach_diagnostics_at_exit, 0, __pyx_mstate_global->__pyx_n_u_oidc_detach_diagnostics_at_exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[43])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_oidc_detach_diagnostics_at_exit, __pyx_t_18) < (0)) __PYX_ERR(1, 862, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0863:     """Suppress new Python callbacks and drain admitted ones before finalization.
 0864: 
 0865:     Native nowait detach alone cannot drain a callback already admitted but
 0866:     paused before GIL acquisition. The C-level gate counts that entire interval
 0867:     and every callback body, even for a provider removed from the registry.
 0868:     Close admission first, detach without holding Python locks, then wait with
 0869:     the GIL released while the interpreter is still alive. Callback code must
 0870:     return: abandoning its Python frames can force an unwind through Rust on
 0871:     CPython <=3.13/glibc. A daemon sign-in does not exempt its active renderer.
 0872:     The one exception is a greenlet suspended inside a callback on this, the
 0873:     main, thread -- a token provider waiting on gevent I/O, say. It cannot
 0874:     resume until this hook returns, so waiting for it hung the exit for good;
 0875:     the drain skips it, and its thread is the one finishing the interpreter.
 0876: 
 0877:     Providers stay open so transports can finish their bounded close-flush drain
 0878:     during subsequent module teardown. We do not wait for an IdP request that
 0879:     has not entered a Python callback; its later callback is refused by the gate.
 0880:     The one exception is a token-provider callback the main thread makes from
 0881:     inside its own native call while the interpreter is not yet finalizing --
 0882:     an ILP/HTTP flush from a later atexit callback or from `logging.shutdown()`
 0883:     -- which still runs (see `_tp_main_thread_before_finalization`).
 0884:     """
 0885:     global _oidc_callbacks_shutting_down
+0886:     if _oidc_callback_on_this_thread():
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_callback_on_this_thread(); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 886, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0887:         raise RuntimeError('Cannot drain OIDC callbacks from inside a callback')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Cannot_drain_OIDC_callbacks_from};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 887, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 887, __pyx_L1_error)
+0888:     qdb_oidc_callback_stop()
  qdb_oidc_callback_stop();
+0889:     try:
  /*try:*/ {
+0890:         with _OIDC_REGISTRY_LOCK:
    /*with:*/ {
      __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 890, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = NULL;
      __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 890, __pyx_L7_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_4 = 1;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
        __pyx_t_4 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 890, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      /*try:*/ {
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          goto __pyx_L16_try_end;
          __pyx_L11_error:;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          /*except:*/ {
            __Pyx_AddTraceback("questdb._client._oidc_detach_diagnostics_at_exit", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(1, 890, __pyx_L13_except_error)
            __Pyx_XGOTREF(__pyx_t_6);
            __Pyx_XGOTREF(__pyx_t_2);
            __Pyx_XGOTREF(__pyx_t_3);
            {
              PyObject* __pyx_temp[3] = {__pyx_t_6, __pyx_t_2, __pyx_t_3};
              __pyx_t_10 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 890, __pyx_L13_except_error)
              __Pyx_GOTREF(__pyx_t_10);
            }
            __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_10, NULL);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 890, __pyx_L13_except_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (__pyx_t_1 < (0)) __PYX_ERR(1, 890, __pyx_L13_except_error)
            __pyx_t_12 = (!__pyx_t_1);


            if (unlikely(__pyx_t_12)) {

              __Pyx_GIVEREF(__pyx_t_6);
              __Pyx_GIVEREF(__pyx_t_2);
              __Pyx_XGIVEREF(__pyx_t_3);
              __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_2, __pyx_t_3);
              __pyx_t_6 = 0;  __pyx_t_2 = 0;  __pyx_t_3 = 0; 
              __PYX_ERR(1, 890, __pyx_L13_except_error)
            }
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            goto __pyx_L12_exception_handled;
          }
          __pyx_L13_except_error:;
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
          goto __pyx_L5_error;
          __pyx_L12_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
          __pyx_L16_try_end:;
        }
      }
      /*finally:*/ {
        /*normal exit:*/{
          if (__pyx_t_5) {
            __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[6], NULL);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 890, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          }
          goto __pyx_L10;
        }
        __pyx_L10:;
      }
      goto __pyx_L20;
      __pyx_L7_error:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L5_error;
      __pyx_L20:;
    }
+0891:             _oidc_callbacks_shutting_down = True
            __pyx_v_7questdb_7_client__oidc_callbacks_shutting_down = 1;
+0892:             handles = list(_OIDC_NATIVE_HANDLES.values())
            __pyx_t_6 = __pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES;
            __Pyx_INCREF(__pyx_t_6);
            __pyx_t_4 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
              __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_values, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 892, __pyx_L11_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __pyx_t_6 = __Pyx_PySequence_ListKeepNew(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 892, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_v_handles = ((PyObject*)__pyx_t_6);
            __pyx_t_6 = 0;
+0893:         for handle in handles:
    if (unlikely(!__pyx_v_handles)) { __Pyx_RaiseUnboundLocalError("handles"); __PYX_ERR(1, 893, __pyx_L5_error) }
    __pyx_t_3 = __pyx_v_handles; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_13 = 0;
    for (;;) {
      {
        Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 893, __pyx_L5_error)
        #endif
        if (__pyx_t_13 >= __pyx_temp) break;
      }
      __pyx_t_2 = __Pyx_PyList_GET_ITEM_REF(__pyx_t_3, __pyx_t_13, __Pyx_ReferenceSharing_OwnStrongReference);
      ++__pyx_t_13;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 893, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF_SET(__pyx_v_handle, __pyx_t_2);
      __pyx_t_2 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
+0894:             _oidc_detach_handle_callbacks(handle, False)
      if (!(likely(((__pyx_v_handle) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_handle, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__OidcNativeHandle))))) __PYX_ERR(1, 894, __pyx_L5_error)
      __pyx_f_7questdb_7_client__oidc_detach_handle_callbacks(((struct __pyx_obj_7questdb_7_client__OidcNativeHandle *)__pyx_v_handle), 0);
 0895:     finally:
 0896:         # No registry or user logging lock is held here. Drain even if snapshot
 0897:         # allocation/detach was interrupted: admission is already closed.
+0898:         with nogil:
  /*finally:*/ {
    /*normal exit:*/{
      {
          PyThreadState * _save;
          _save = PyEval_SaveThread();
          __Pyx_FastGIL_Remember();
          /*try:*/ {
/* … */
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_FastGIL_Forget();
              PyEval_RestoreThread(_save);
              goto __pyx_L26;
            }
            __pyx_L26:;
          }
      }
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_5 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_11 = 0; __pyx_t_17 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_7, &__pyx_t_11, &__pyx_t_17);
      if ( unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_9, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_9, &__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_17);
      __pyx_t_14 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
      {
        {
            PyThreadState * _save;
            _save = PyEval_SaveThread();
            __Pyx_FastGIL_Remember();
            /*try:*/ {
/* … */
            /*finally:*/ {
              /*normal exit:*/{
                __Pyx_FastGIL_Forget();
                PyEval_RestoreThread(_save);
                goto __pyx_L31;
              }
              __pyx_L31:;
            }
        }
      }
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_11, __pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_9, __pyx_t_8);
      __pyx_t_5 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_11 = 0; __pyx_t_17 = 0;
      __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }
+0899:             qdb_oidc_callback_drain()
            qdb_oidc_callback_drain();
          }
/* … */
              qdb_oidc_callback_drain();
            }
 0900: 
 0901: 
+0902: atexit.register(_oidc_detach_diagnostics_at_exit)
  __pyx_t_17 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_atexit); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_register); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_oidc_detach_diagnostics_at_exit); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_19};
    __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
  }
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0903: 
 0904: 
+0905: cdef inline object _oidc_text(const char* buf, size_t length):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client__oidc_text(char const *__pyx_v_buf, size_t __pyx_v_length) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._oidc_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0906:     if buf == NULL:
  __pyx_t_1 = (__pyx_v_buf == NULL);

  if (__pyx_t_1) {
/* … */
  }
+0907:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+0908:     return PyUnicode_FromStringAndSize(buf, <Py_ssize_t>length)
  __pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_buf, ((Py_ssize_t)__pyx_v_length)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0909: 
 0910: 
+0911: cdef inline size_t _oidc_error_view_v1_size() noexcept nogil:
static CYTHON_INLINE size_t __pyx_f_7questdb_7_client__oidc_error_view_v1_size(void) {
  struct questdb_oidc_error_view __pyx_v_layout;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;

  return __pyx_r;
}
 0912:     # Mirrors native's `QUESTDB_OIDC_ERROR_VIEW_V1_SIZE`: the prefix through
 0913:     # `retry_after_seconds`. `acquisition_busy` was appended after v1, and
 0914:     # `questdb_error_oidc_get_view` accepts -- and reports -- any capacity from
 0915:     # this size up. Computed from the declared layout rather than hardcoded, so
 0916:     # it tracks the header on every ABI the extension is compiled for.
 0917:     cdef questdb_oidc_error_view layout
 0918:     return (<size_t>(<char*>&layout.retry_after_seconds - <char*>&layout)
+0919:             + sizeof(uint64_t))
  {

    __pyx_r = (((size_t)(((char *)(&__pyx_v_layout.retry_after_seconds)) - ((char *)(&__pyx_v_layout)))) + (sizeof(uint64_t)));
  }
  goto __pyx_L0;
 0920: 
 0921: 
+0922: cdef inline bint _oidc_error_view_has_v1(size_t struct_size) noexcept nogil:
static CYTHON_INLINE int __pyx_f_7questdb_7_client__oidc_error_view_has_v1(size_t __pyx_v_struct_size) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0923:     # kind, idp_error, idp_error_description, status and retry_after.
+0924:     return struct_size >= _oidc_error_view_v1_size()
  {

    __pyx_r = (__pyx_v_struct_size >= __pyx_f_7questdb_7_client__oidc_error_view_v1_size());
  }
  goto __pyx_L0;
 0925: 
 0926: 
+0927: cdef inline size_t _oidc_error_view_size() noexcept nogil:
static CYTHON_INLINE size_t __pyx_f_7questdb_7_client__oidc_error_view_size(void) {
  struct questdb_oidc_error_view __pyx_v_layout;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;

  return __pyx_r;
}
 0928:     # Mirrors native's `QUESTDB_OIDC_ERROR_VIEW_SIZE`: the prefix through
 0929:     # `acquisition_busy`, which is what a current library writes back. Not
 0930:     # `sizeof`: the trailing `bool` leaves padding a later field can occupy
 0931:     # without changing `sizeof`, so native reports the end of the field.
 0932:     cdef questdb_oidc_error_view layout
 0933:     return (<size_t>(<char*>&layout.acquisition_busy - <char*>&layout)
+0934:             + sizeof(cbool))
  {

    __pyx_r = (((size_t)(((char *)(&__pyx_v_layout.acquisition_busy)) - ((char *)(&__pyx_v_layout)))) + (sizeof(bool)));
  }
  goto __pyx_L0;
 0935: 
 0936: 
+0937: cdef inline bint _oidc_error_view_has_acquisition_busy(
static CYTHON_INLINE int __pyx_f_7questdb_7_client__oidc_error_view_has_acquisition_busy(size_t __pyx_v_struct_size) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0938:         size_t struct_size) noexcept nogil:
 0939:     # The appended tail. Gated separately: a library that predates it still
 0940:     # reports a complete, classifiable v1 prefix, and collapsing that to a bare
 0941:     # OidcError would drop the kind the foreground fail-fast gate and every
 0942:     # `except OidcInteractionRequired` / `except OidcTimeoutError` key on.
+0943:     return struct_size >= _oidc_error_view_size()
  {

    __pyx_r = (__pyx_v_struct_size >= __pyx_f_7questdb_7_client__oidc_error_view_size());
  }
  goto __pyx_L0;
 0944: 
 0945: 
+0946: cdef inline bint _oidc_config_view_is_full(size_t struct_size):
static CYTHON_INLINE int __pyx_f_7questdb_7_client__oidc_config_view_is_full(size_t __pyx_v_struct_size) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;

  return __pyx_r;
}
 0947:     # Native's config-view v1 ends at `issuer_len`, which is also the last
 0948:     # declared field, so v1 and the full struct coincide today.
+0949:     return struct_size >= sizeof(questdb_oidc_config_view)
  {

    __pyx_r = (__pyx_v_struct_size >= (sizeof(struct questdb_oidc_config_view)));
  }
  goto __pyx_L0;
 0950: 
 0951: 
+0952: def _debug_oidc_view_prefix_support(size_t error_size, size_t config_size):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_47_debug_oidc_view_prefix_support(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_46_debug_oidc_view_prefix_support, "Internal test hook for config/error view write-back gates.\n\n    Returns ``(error_has_v1, error_has_acquisition_busy, config_is_full)``.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_47_debug_oidc_view_prefix_support = {"_debug_oidc_view_prefix_support", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_47_debug_oidc_view_prefix_support, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_46_debug_oidc_view_prefix_support};
static PyObject *__pyx_pw_7questdb_7_client_47_debug_oidc_view_prefix_support(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  size_t __pyx_v_error_size;
  size_t __pyx_v_config_size;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_view_prefix_support (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_error_size,&__pyx_mstate_global->__pyx_n_u_config_size,0};
  PyObject* values[2] = {0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 952, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 952, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 952, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_view_prefix_support", 0) < (0)) __PYX_ERR(1, 952, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_oidc_view_prefix_support", 1, 2, 2, i); __PYX_ERR(1, 952, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 952, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 952, __pyx_L3_error)
    }
    __pyx_v_error_size = __Pyx_PyLong_As_size_t(values[0]); if (unlikely((__pyx_v_error_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 952, __pyx_L3_error)
    __pyx_v_config_size = __Pyx_PyLong_As_size_t(values[1]); if (unlikely((__pyx_v_config_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 952, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_oidc_view_prefix_support", 1, 2, 2, __pyx_nargs); __PYX_ERR(1, 952, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_oidc_view_prefix_support", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_46_debug_oidc_view_prefix_support(__pyx_self, __pyx_v_error_size, __pyx_v_config_size);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }


  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_46_debug_oidc_view_prefix_support(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_error_size, size_t __pyx_v_config_size) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._debug_oidc_view_prefix_support", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_47_debug_oidc_view_prefix_support, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_view_prefix_support, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[44])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_view_prefix_support, __pyx_t_18) < (0)) __PYX_ERR(1, 952, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0953:     """Internal test hook for config/error view write-back gates.
 0954: 
 0955:     Returns ``(error_has_v1, error_has_acquisition_busy, config_is_full)``.
 0956:     """
+0957:     return (_oidc_error_view_has_v1(error_size),
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_f_7questdb_7_client__oidc_error_view_has_v1(__pyx_v_error_size)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1) != (0)) __PYX_ERR(1, 957, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2) != (0)) __PYX_ERR(1, 957, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4) != (0)) __PYX_ERR(1, 957, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_5;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_5 = 0;
  goto __pyx_L0;
+0958:             _oidc_error_view_has_acquisition_busy(error_size),
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_f_7questdb_7_client__oidc_error_view_has_acquisition_busy(__pyx_v_error_size)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
+0959:             _oidc_config_view_is_full(config_size))
  __pyx_t_3 = __pyx_f_7questdb_7_client__oidc_config_view_is_full(__pyx_v_config_size); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 959, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

 0960: 
 0961: 
+0962: def _debug_oidc_view_sizes():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_49_debug_oidc_view_sizes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_48_debug_oidc_view_sizes, "Internal test hook: ``(error_v1, error_full, config_full)`` sizes.");
static PyMethodDef __pyx_mdef_7questdb_7_client_49_debug_oidc_view_sizes = {"_debug_oidc_view_sizes", (PyCFunction)__pyx_pw_7questdb_7_client_49_debug_oidc_view_sizes, METH_NOARGS, __pyx_doc_7questdb_7_client_48_debug_oidc_view_sizes};
static PyObject *__pyx_pw_7questdb_7_client_49_debug_oidc_view_sizes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_view_sizes (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_48_debug_oidc_view_sizes(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_48_debug_oidc_view_sizes(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._debug_oidc_view_sizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_49_debug_oidc_view_sizes, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_view_sizes, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[45])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 962, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_view_sizes, __pyx_t_18) < (0)) __PYX_ERR(1, 962, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0963:     """Internal test hook: ``(error_v1, error_full, config_full)`` sizes."""
+0964:     return (_oidc_error_view_v1_size(),
  __pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_f_7questdb_7_client__oidc_error_view_v1_size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1) != (0)) __PYX_ERR(1, 964, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2) != (0)) __PYX_ERR(1, 964, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3) != (0)) __PYX_ERR(1, 964, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_4;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_4 = 0;
  goto __pyx_L0;
+0965:             _oidc_error_view_size(),
  __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_f_7questdb_7_client__oidc_error_view_size()); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
+0966:             sizeof(questdb_oidc_config_view))
  __pyx_t_3 = __Pyx_PyLong_FromSize_t((sizeof(struct questdb_oidc_config_view))); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
 0967: 
 0968: 
+0969: def _debug_oidc_error_from_view_prefix(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_51_debug_oidc_error_from_view_prefix(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_50_debug_oidc_error_from_view_prefix, "Internal test hook: convert a synthetic error view of a given prefix.\n\n    Drives the same classification an older shared library\047s write-back would,\n    so the per-tier gates are tested through the real conversion rather than\n    only through the predicates.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_51_debug_oidc_error_from_view_prefix = {"_debug_oidc_error_from_view_prefix", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_51_debug_oidc_error_from_view_prefix, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_50_debug_oidc_error_from_view_prefix};
static PyObject *__pyx_pw_7questdb_7_client_51_debug_oidc_error_from_view_prefix(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  size_t __pyx_v_struct_size;
  int __pyx_v_kind;
  int __pyx_v_acquisition_busy;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_error_from_view_prefix (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_struct_size,&__pyx_mstate_global->__pyx_n_u_kind,&__pyx_mstate_global->__pyx_n_u_acquisition_busy,0};
  PyObject* values[3] = {0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 969, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(1, 969, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 969, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 969, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_error_from_view_prefix", 0) < (0)) __PYX_ERR(1, 969, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_oidc_error_from_view_prefix", 1, 3, 3, i); __PYX_ERR(1, 969, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 969, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 969, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(1, 969, __pyx_L3_error)
    }
    __pyx_v_struct_size = __Pyx_PyLong_As_size_t(values[0]); if (unlikely((__pyx_v_struct_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 970, __pyx_L3_error)
    __pyx_v_kind = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_kind == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 970, __pyx_L3_error)
    __pyx_v_acquisition_busy = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_acquisition_busy == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 970, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_oidc_error_from_view_prefix", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 969, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_oidc_error_from_view_prefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_50_debug_oidc_error_from_view_prefix(__pyx_self, __pyx_v_struct_size, __pyx_v_kind, __pyx_v_acquisition_busy);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }



  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_50_debug_oidc_error_from_view_prefix(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_struct_size, int __pyx_v_kind, int __pyx_v_acquisition_busy) {
  struct questdb_oidc_error_view __pyx_v_view;
  PyObject *__pyx_v_errors = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._debug_oidc_error_from_view_prefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;

  __Pyx_XDECREF(__pyx_v_errors);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_51_debug_oidc_error_from_view_prefix, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_error_from_view_pref, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[46])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 969, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_error_from_view_pref, __pyx_t_18) < (0)) __PYX_ERR(1, 969, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0970:         size_t struct_size, int kind, bint acquisition_busy):
 0971:     """Internal test hook: convert a synthetic error view of a given prefix.
 0972: 
 0973:     Drives the same classification an older shared library's write-back would,
 0974:     so the per-tier gates are tested through the real conversion rather than
 0975:     only through the predicates.
 0976:     """
 0977:     cdef questdb_oidc_error_view view
+0978:     errors = _oidc_errors_module()
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_errors_module(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_errors = __pyx_t_1;
  __pyx_t_1 = 0;
+0979:     if errors is None:
  __pyx_t_2 = (__pyx_v_errors == Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+0980:         raise RuntimeError('questdb.auth._errors is unavailable')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_questdb_auth__errors_is_unavaila};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 980, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 980, __pyx_L1_error)
+0981:     memset(&view, 0, sizeof(questdb_oidc_error_view))
  (void)(memset((&__pyx_v_view), 0, (sizeof(struct questdb_oidc_error_view))));
+0982:     view.struct_size = struct_size
  __pyx_v_view.struct_size = __pyx_v_struct_size;
+0983:     view.kind = <questdb_oidc_error_kind>kind
  __pyx_v_view.kind = ((enum questdb_oidc_error_kind)__pyx_v_kind);
+0984:     view.has_status = True
  __pyx_v_view.has_status = 1;
+0985:     view.status = 400
  __pyx_v_view.status = 0x190;
+0986:     view.has_retry_after = True
  __pyx_v_view.has_retry_after = 1;
+0987:     view.retry_after_seconds = 7
  __pyx_v_view.retry_after_seconds = 7;
+0988:     view.acquisition_busy = acquisition_busy
  __pyx_v_view.acquisition_busy = __pyx_v_acquisition_busy;
+0989:     return _oidc_exc_from_view(
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_exc_from_view(__pyx_v_errors, __pyx_mstate_global->__pyx_kp_u_synthetic_OIDC_error, (&__pyx_v_view), 0, __pyx_t_3, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0990:         errors, 'synthetic OIDC error', &view, False,
+0991:         QuestDBErrorCode.AuthError, None)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 991, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_AuthError); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 991, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0992: 
 0993: 
 0994: # Resolved on first use and cached. See `_oidc_errors_module`.
+0995: cdef object _OIDC_ERRORS_MOD = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD, Py_None);
  __Pyx_GIVEREF(Py_None);
 0996: 
 0997: 
 0998: # Every class `_oidc_err_to_py_unowned` and `_is_oidc_terminal_for_foreground`
 0999: # resolve off the module. The readiness test must cover all of them, not just
 1000: # the first: a module is published in `sys.modules` before its body runs, so a
 1001: # sentinel on the first-defined class (`OidcError`, which `_errors.py` defines
 1002: # ahead of the other six) accepts a module on which the rest do not exist yet
 1003: # -- exactly the half-built window the test is there to reject.
 1004: cdef tuple _OIDC_ERROR_NAMES = (
+1005:     'OidcError', 'OidcConfigError', 'OidcNetworkError',
  __Pyx_INCREF(__pyx_mstate_global->__pyx_tuple[61]);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_ERROR_NAMES);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_ERROR_NAMES, __pyx_mstate_global->__pyx_tuple[61]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[61]);
/* … */
  {
    PyObject* __pyx_temp[7] = {__pyx_mstate_global->__pyx_n_u_OidcError, __pyx_mstate_global->__pyx_n_u_OidcConfigError, __pyx_mstate_global->__pyx_n_u_OidcNetworkError, __pyx_mstate_global->__pyx_n_u_OidcInteractionRequired, __pyx_mstate_global->__pyx_n_u_OidcCancelledError, __pyx_mstate_global->__pyx_n_u_OidcDeviceFlowError, __pyx_mstate_global->__pyx_n_u_OidcTimeoutError};
    __pyx_mstate_global->__pyx_tuple[61] = __Pyx_PyTuple_FromArray(__pyx_temp, 7); if (unlikely(!__pyx_mstate_global->__pyx_tuple[61])) __PYX_ERR(1, 1005, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[61]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[61]);
 1006:     'OidcInteractionRequired', 'OidcCancelledError',
 1007:     'OidcDeviceFlowError', 'OidcTimeoutError')
 1008: 
 1009: 
+1010: cdef bint _oidc_errors_module_complete(object mod):
static int __pyx_f_7questdb_7_client__oidc_errors_module_complete(PyObject *__pyx_v_mod) {
  PyObject *__pyx_v_name = NULL;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._oidc_errors_module_complete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_name);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1011:     """Does ``mod`` carry every class the error paths resolve off it?
 1012: 
 1013:     Checked as a whole rather than one sentinel, so a module caught partway
 1014:     through its body is treated as absent by every caller.
 1015:     """
+1016:     for name in _OIDC_ERROR_NAMES:
  if (unlikely(__pyx_v_7questdb_7_client__OIDC_ERROR_NAMES == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not iterable");
    __PYX_ERR(1, 1016, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_ERROR_NAMES; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 1016, __pyx_L1_error)
      #endif
      if (__pyx_t_2 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
    #else
    __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
    #endif
    ++__pyx_t_2;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1016, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1017:         if getattr(mod, name, None) is None:
    __pyx_t_3 = __Pyx_GetAttr3(__pyx_v_mod, __pyx_v_name, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1017, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = (__pyx_t_3 == Py_None);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {
/* … */
    }
+1018:             return False
      {

        __pyx_r = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
+1019:     return True
  {

    __pyx_r = 1;
  }
  goto __pyx_L0;
 1020: 
 1021: 
+1022: cdef object _oidc_errors_module_if_ready():
static PyObject *__pyx_f_7questdb_7_client__oidc_errors_module_if_ready(void) {
  PyObject *__pyx_v_mod = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._oidc_errors_module_if_ready", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1023:     """``questdb.auth._errors`` if it is already imported and usable, else None.
 1024: 
 1025:     Never imports, so a caller on the ordinary (non-OIDC) error path pays one
 1026:     dict lookup and nothing else.
 1027: 
 1028:     A module is published in ``sys.modules`` *before* its body runs, and
 1029:     ``_errors.py`` imports ``._render`` and ``questdb._client`` before defining
 1030:     a single class. A concurrent first import -- or a re-entrant one reached
 1031:     from this very error path -- therefore hands back a module object with none
 1032:     of the ``Oidc*`` attributes on it, and reading one raises ``AttributeError``
 1033:     *over* the failure being reported, defeating every ``except QuestDBError``
 1034:     handler. That is precisely the substitution the untyped fallback exists to
 1035:     prevent, so a half-built module counts as absent and is deliberately not
 1036:     cached: a later call gets the finished one.
 1037: 
 1038:     This is also the single source of class identity for the whole extension.
 1039:     Resolving the classes here but testing ``isinstance`` against a separate
 1040:     ``sys.modules`` lookup elsewhere would let the two disagree after any
 1041:     ``sys.modules`` swap, silently disabling the check that used the other.
 1042:     """
 1043:     global _OIDC_ERRORS_MOD
+1044:     if _OIDC_ERRORS_MOD is not None:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+1045:         return _OIDC_ERRORS_MOD
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD);
        __pyx_r = __pyx_v_7questdb_7_client__OIDC_ERRORS_MOD;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+1046:     mod = sys.modules.get('questdb.auth._errors')
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = __pyx_t_5;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_6 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_questdb_auth__errors};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v_mod = __pyx_t_2;
  __pyx_t_2 = 0;
+1047:     if mod is None or not _oidc_errors_module_complete(mod):
  __pyx_t_7 = (__pyx_v_mod == Py_None);
  if (!__pyx_t_7) {

  } else {

    __pyx_t_1 = __pyx_t_7;

    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_7 = __pyx_f_7questdb_7_client__oidc_errors_module_complete(__pyx_v_mod); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1047, __pyx_L1_error)
  __pyx_t_8 = (!__pyx_t_7);



  __pyx_t_1 = __pyx_t_8;

  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+1048:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+1049:     _OIDC_ERRORS_MOD = mod
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD, __pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
+1050:     return mod
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_mod);
      __pyx_r = __pyx_v_mod;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 1051: 
 1052: 
+1053: cdef object _oidc_errors_module():
static PyObject *__pyx_f_7questdb_7_client__oidc_errors_module(void) {
  PyObject *__pyx_v_mod = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._oidc_errors_module", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1054:     """The ``questdb.auth._errors`` module, or None if it cannot be reached.
 1055: 
 1056:     Deliberately not imported eagerly from ``questdb/__init__.py``: that would
 1057:     pull ``unicodedata`` / ``re`` / ``urllib.parse`` into every process that
 1058:     imports questdb, for a module only an auth failure needs. Cached after the
 1059:     first success so a long-running sender pays the lookup once rather than
 1060:     re-entering the import machinery on every failure.
 1061: 
 1062:     Returns None instead of raising. This runs while a failure is already being
 1063:     reported, and it can be the *first* import of the package -- a caller who
 1064:     took ``from questdb._client import OidcDeviceAuth`` never touches
 1065:     ``questdb.auth``. If that first import lands during interpreter
 1066:     finalization, where ``sys.meta_path`` is None and any import raises
 1067:     ``ImportError``, letting it propagate would replace the flush or connect
 1068:     error the caller actually needs with a misleading one about the import.
 1069:     ``_oidc_err_to_py_unowned`` falls back to a plain ``QuestDBError`` carrying
 1070:     the same native message and code, which is strictly better than that.
 1071:     """
 1072:     global _OIDC_ERRORS_MOD
+1073:     mod = _oidc_errors_module_if_ready()
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_errors_module_if_ready(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_mod = __pyx_t_1;
  __pyx_t_1 = 0;
+1074:     if mod is not None:
  __pyx_t_2 = (__pyx_v_mod != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+1075:         return mod
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF(__pyx_v_mod);
        __pyx_r = __pyx_v_mod;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+1076:     if 'questdb.auth._errors' in sys.modules:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1076, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_kp_u_questdb_auth__errors, __pyx_t_3, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1076, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_2) {
/* … */
  }
 1077:         # Present but half-built (see `_oidc_errors_module_if_ready`). Importing
 1078:         # again just returns the same partial object out of `sys.modules`, so
 1079:         # there is nothing to gain and a re-entrant import to risk.
+1080:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+1081:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L10_try_end;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
    __pyx_L7_except_error:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_except_return:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L0;
    __pyx_L10_try_end:;
  }
+1082:         import questdb.auth._errors as mod
      __pyx_t_7 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, 0, 0, NULL, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1082, __pyx_L5_error)
      __pyx_t_8 = __Pyx_ImportFrom(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_auth);
      Py_DECREF(__pyx_t_7);
      if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1082, __pyx_L5_error)
      __pyx_t_7 = __pyx_t_8;
      __pyx_t_8 = __Pyx_ImportFrom(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_errors);
      Py_DECREF(__pyx_t_7);
      if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1082, __pyx_L5_error)
      __pyx_t_7 = __pyx_t_8;
      __pyx_t_3 = __pyx_t_7;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_mod, __pyx_t_3);
      __pyx_t_3 = 0;
+1083:     except BaseException:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_9) {
      __Pyx_ErrRestore(0,0,0);
+1084:         return None
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L8_except_return;
    }
    goto __pyx_L7_except_error;
+1085:     if not _oidc_errors_module_complete(mod):
  __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_errors_module_complete(__pyx_v_mod); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1085, __pyx_L1_error)
  __pyx_t_10 = (!__pyx_t_2);


  if (__pyx_t_10) {
/* … */
  }
+1086:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+1087:     _OIDC_ERRORS_MOD = mod
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_ERRORS_MOD, __pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
+1088:     return mod
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_mod);
      __pyx_r = __pyx_v_mod;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 1089: 
 1090: 
+1091: cdef object _oidc_err_to_py_unowned(questdb_error* err):
static PyObject *__pyx_f_7questdb_7_client__oidc_err_to_py_unowned(questdb_error *__pyx_v_err) {
  char const *__pyx_v_msg_buf;
  size_t __pyx_v_msg_len;
  struct questdb_oidc_error_view __pyx_v_view;
  struct line_sender_qwpws_error_view __pyx_v_qwp_ws_view;
  PyObject *__pyx_v_message = 0;
  PyObject *__pyx_v_sender_error = 0;
  int __pyx_v_in_doubt;
  PyObject *__pyx_v_code = 0;
  PyObject *__pyx_v_exc = 0;
  PyObject *__pyx_v_errors = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._oidc_err_to_py_unowned", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;




  __Pyx_XDECREF(__pyx_v_message);
  __Pyx_XDECREF(__pyx_v_sender_error);

  __Pyx_XDECREF(__pyx_v_code);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XDECREF(__pyx_v_errors);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1092:     cdef const char* msg_buf = NULL
  __pyx_v_msg_buf = NULL;
+1093:     cdef size_t msg_len = 0
  __pyx_v_msg_len = 0;
 1094:     cdef questdb_oidc_error_view view
 1095:     cdef line_sender_qwpws_error_view qwp_ws_view
 1096:     cdef object message
+1097:     cdef object sender_error = None
  __Pyx_INCREF(Py_None);
  __pyx_v_sender_error = Py_None;
+1098:     cdef bint in_doubt = False
  __pyx_v_in_doubt = 0;
 1099:     cdef object code
 1100:     cdef object exc
 1101: 
+1102:     errors = _oidc_errors_module()
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_errors_module(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_errors = __pyx_t_1;
  __pyx_t_1 = 0;
+1103:     if errors is None:
  __pyx_t_2 = (__pyx_v_errors == Py_None);
  if (__pyx_t_2) {
/* … */
  }
 1104:         # The typed classes are unreachable (see `_oidc_errors_module`). Report
 1105:         # the native failure untyped rather than losing it: `except
 1106:         # QuestDBError` still catches this, only `except OidcError` does not.
+1107:         if err == NULL:
    __pyx_t_2 = (__pyx_v_err == NULL);

    if (__pyx_t_2) {
/* … */
    }
+1108:             return QuestDBError(
      __pyx_t_3 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1108, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
+1109:                 QuestDBErrorCode.AuthError, 'Unknown native OIDC error.')
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1109, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_AuthError); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1109, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unknown_native_OIDC_error};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1108, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = __pyx_t_1;
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      __pyx_t_1 = 0;
      goto __pyx_L0;
+1110:         msg_buf = questdb_error_msg(err, &msg_len)
    __pyx_v_msg_buf = questdb_error_msg(__pyx_v_err, (&__pyx_v_msg_len));
+1111:         if line_sender_error_qwpws_get_view(err, &qwp_ws_view):
    __pyx_t_2 = line_sender_error_qwpws_get_view(__pyx_v_err, (&__pyx_v_qwp_ws_view));

    if (__pyx_t_2) {
/* … */
    }
+1112:             sender_error = c_sender_error_view_to_raw(qwp_ws_view)
      __pyx_t_1 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_qwp_ws_view); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1112, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_sender_error, __pyx_t_1);
      __pyx_t_1 = 0;
+1113:         return QuestDBError(
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
/* … */
    #endif
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[5] = {__pyx_t_4, __pyx_t_3, __pyx_t_5, __pyx_v_sender_error, __pyx_t_8};
      #if CYTHON_VECTORCALL
      __pyx_t_9 = __pyx_mstate_global->__pyx_tuple[7];
      if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1113, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_9);
      #else
      {
        PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
        __pyx_t_9 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+4, 1);
        if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1113, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      #endif
      __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      #if CYTHON_VECTORCALL
      #endif
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1113, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_in_doubt};
    __pyx_mstate_global->__pyx_tuple[7] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[7])) __PYX_ERR(1, 1113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[7]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[7]);
+1114:             c_err_code_to_py(questdb_error_get_code(err)),
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_code_to_py(questdb_error_get_code(__pyx_v_err)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1114, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+1115:             _oidc_text(msg_buf, msg_len) or 'Unknown native OIDC error.',
    __pyx_t_8 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_msg_buf, __pyx_v_msg_len); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1115, __pyx_L1_error)
    if (!__pyx_t_2) {
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_5 = __pyx_t_8;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L6_bool_binop_done;
    }
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_Unknown_native_OIDC_error);
    __pyx_t_5 = __pyx_mstate_global->__pyx_kp_u_Unknown_native_OIDC_error;
    __pyx_L6_bool_binop_done:;
 1116:             sender_error,
+1117:             in_doubt=questdb_error_in_doubt(err))
    __pyx_t_8 = __Pyx_PyBool_FromLong(questdb_error_in_doubt(__pyx_v_err)); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    #if CYTHON_VECTORCALL
 1118: 
+1119:     if err == NULL:
  __pyx_t_2 = (__pyx_v_err == NULL);

  if (__pyx_t_2) {
/* … */
  }
+1120:         return errors.OidcError('Unknown native OIDC error.')
    __pyx_t_6 = __pyx_v_errors;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unknown_native_OIDC_error};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_OidcError, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1120, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
+1121:     msg_buf = questdb_error_msg(err, &msg_len)
  __pyx_v_msg_buf = questdb_error_msg(__pyx_v_err, (&__pyx_v_msg_len));
+1122:     message = _oidc_text(msg_buf, msg_len) or 'Unknown native OIDC error.'
  __pyx_t_6 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_msg_buf, __pyx_v_msg_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1122, __pyx_L1_error)
  if (!__pyx_t_2) {
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_1 = __pyx_t_6;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L9_bool_binop_done;
  }
  __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_Unknown_native_OIDC_error);
  __pyx_t_1 = __pyx_mstate_global->__pyx_kp_u_Unknown_native_OIDC_error;
  __pyx_L9_bool_binop_done:;
  __pyx_v_message = __pyx_t_1;
  __pyx_t_1 = 0;
 1123:     # A provider failure following an HTTP retry-loop 401 can carry delivery
 1124:     # uncertainty from an earlier write. Preserve it just as c_err_to_fields
 1125:     # does: retry/dead-letter handlers must not replay a possibly landed write.
+1126:     in_doubt = questdb_error_in_doubt(err)
  __pyx_v_in_doubt = questdb_error_in_doubt(__pyx_v_err);
 1127:     # Carry the native classification too. The non-OIDC path does this via
 1128:     # c_err_to_fields; the OIDC path used to hardcode AuthError and drop it.
 1129:     # Native deliberately reclassifies a recoverable token-provider failure as a
 1130:     # retryable SocketError so failover polls it again, and QuestDB.dataframe()'s
 1131:     # reconnect loop gates on exactly that code -- stamping AuthError turned a
 1132:     # retryable reconnect into an immediate raise, so `oidc_auth=` silently lost
 1133:     # the retry that `token=` still had.
+1134:     code = c_err_code_to_py(questdb_error_get_code(err))
  __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_code_to_py(questdb_error_get_code(__pyx_v_err)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_code = __pyx_t_1;
  __pyx_t_1 = 0;
 1135:     # Native reports an OIDC cause anywhere in the causal chain, so a
 1136:     # QWP/WebSocket rejection whose root cause was a token refresh reaches this
 1137:     # branch with the transport's structured payload still attached. This is
 1138:     # the only path that builds it, since returning here skips `c_err_to_fields`
 1139:     # -- without this the payload, and `.sender_error` with it, was silently
 1140:     # dropped for exactly the errors an `oidc_auth` transport produces.
+1141:     if line_sender_error_qwpws_get_view(err, &qwp_ws_view):
  __pyx_t_2 = line_sender_error_qwpws_get_view(__pyx_v_err, (&__pyx_v_qwp_ws_view));

  if (__pyx_t_2) {
/* … */
  }
+1142:         sender_error = c_sender_error_view_to_raw(qwp_ws_view)
    __pyx_t_1 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_qwp_ws_view); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1142, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_sender_error, __pyx_t_1);
    __pyx_t_1 = 0;
+1143:     memset(&view, 0, sizeof(questdb_oidc_error_view))
  (void)(memset((&__pyx_v_view), 0, (sizeof(struct questdb_oidc_error_view))));
+1144:     view.struct_size = sizeof(questdb_oidc_error_view)
  __pyx_v_view.struct_size = (sizeof(struct questdb_oidc_error_view));
+1145:     if questdb_error_oidc_get_view(err, &view):
  __pyx_t_2 = questdb_error_oidc_get_view(__pyx_v_err, (&__pyx_v_view));

  if (__pyx_t_2) {
/* … */
  }
+1146:         return _oidc_exc_from_view(
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_exc_from_view(__pyx_v_errors, __pyx_v_message, (&__pyx_v_view), __pyx_v_in_doubt, __pyx_v_code, __pyx_v_sender_error); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1146, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L0;
 1147:             errors, message, &view, in_doubt, code, sender_error)
+1148:     exc = errors.OidcError(
  __pyx_t_6 = __pyx_v_errors;
  __Pyx_INCREF(__pyx_t_6);
/* … */
  #endif
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_v_message, __pyx_t_9, __pyx_v_code, __pyx_v_sender_error};
    #if CYTHON_VECTORCALL
    __pyx_t_8 = __pyx_mstate_global->__pyx_tuple[8];
    if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1148, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_8);
    #else
    {
      PyObject *__pyx_temp[3] = {__pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
      __pyx_t_8 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 3);
      if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1148, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallMethodKwds((PyObject*)__pyx_mstate_global->__pyx_n_u_OidcError, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    #if CYTHON_VECTORCALL
    #endif
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_exc = __pyx_t_1;
  __pyx_t_1 = 0;
/* … */
  {
    PyObject* __pyx_temp[3] = {__pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
    __pyx_mstate_global->__pyx_tuple[8] = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[8])) __PYX_ERR(1, 1148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[8]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[8]);
+1149:         message, in_doubt=in_doubt, code=code, sender_error=sender_error)
  __pyx_t_9 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_VECTORCALL
+1150:     exc._acquisition_busy = False
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_acquisition_busy_2, Py_False) < (0)) __PYX_ERR(1, 1150, __pyx_L1_error)
+1151:     return exc
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_exc);
      __pyx_r = __pyx_v_exc;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 1152: 
 1153: 
+1154: cdef object _oidc_exc_from_view(
static PyObject *__pyx_f_7questdb_7_client__oidc_exc_from_view(PyObject *__pyx_v_errors, PyObject *__pyx_v_message, struct questdb_oidc_error_view const *__pyx_v_view, int __pyx_v_in_doubt, PyObject *__pyx_v_code, PyObject *__pyx_v_sender_error) {
  PyObject *__pyx_v_idp_error = 0;
  PyObject *__pyx_v_description = 0;
  PyObject *__pyx_v_status = 0;
  PyObject *__pyx_v_retry_after = 0;
  int __pyx_v_acquisition_busy;
  PyObject *__pyx_v_exc = 0;
  PyObject *__pyx_v_OidcConfigError = NULL;
  PyObject *__pyx_v_OidcCancelledError = NULL;
  PyObject *__pyx_v_OidcDeviceFlowError = NULL;
  PyObject *__pyx_v_OidcError = NULL;
  PyObject *__pyx_v_OidcInteractionRequired = NULL;
  PyObject *__pyx_v_OidcNetworkError = NULL;
  PyObject *__pyx_v_OidcTimeoutError = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._oidc_exc_from_view", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_idp_error);
  __Pyx_XDECREF(__pyx_v_description);
  __Pyx_XDECREF(__pyx_v_status);
  __Pyx_XDECREF(__pyx_v_retry_after);

  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XDECREF(__pyx_v_OidcConfigError);
  __Pyx_XDECREF(__pyx_v_OidcCancelledError);
  __Pyx_XDECREF(__pyx_v_OidcDeviceFlowError);
  __Pyx_XDECREF(__pyx_v_OidcError);
  __Pyx_XDECREF(__pyx_v_OidcInteractionRequired);
  __Pyx_XDECREF(__pyx_v_OidcNetworkError);
  __Pyx_XDECREF(__pyx_v_OidcTimeoutError);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1155:         object errors,
 1156:         object message,
 1157:         const questdb_oidc_error_view* view,
 1158:         bint in_doubt,
 1159:         object code,
 1160:         object sender_error):
 1161:     """Build the typed exception a populated error view describes.
 1162: 
 1163:     ``view.struct_size`` is the prefix the library wrote back, which an older
 1164:     shared library reports as its own (smaller) size. Each field is read only
 1165:     when that prefix covers it, in the same two tiers as the native contract:
 1166:     the v1 prefix (kind, IdP fields, status, retry-after) and the appended
 1167:     ``acquisition_busy`` tail. An unwritten tail keeps its zero default.
 1168:     """
+1169:     cdef object idp_error = None
  __Pyx_INCREF(Py_None);
  __pyx_v_idp_error = Py_None;
+1170:     cdef object description = None
  __Pyx_INCREF(Py_None);
  __pyx_v_description = Py_None;
+1171:     cdef object status = None
  __Pyx_INCREF(Py_None);
  __pyx_v_status = Py_None;
+1172:     cdef object retry_after = None
  __Pyx_INCREF(Py_None);
  __pyx_v_retry_after = Py_None;
+1173:     cdef bint acquisition_busy = False
  __pyx_v_acquisition_busy = 0;
 1174:     cdef object exc
+1175:     OidcConfigError = errors.OidcConfigError
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcConfigError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_OidcConfigError = __pyx_t_1;
  __pyx_t_1 = 0;
+1176:     OidcCancelledError = errors.OidcCancelledError
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcCancelledError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_OidcCancelledError = __pyx_t_1;
  __pyx_t_1 = 0;
+1177:     OidcDeviceFlowError = errors.OidcDeviceFlowError
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcDeviceFlowError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_OidcDeviceFlowError = __pyx_t_1;
  __pyx_t_1 = 0;
+1178:     OidcError = errors.OidcError
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_OidcError = __pyx_t_1;
  __pyx_t_1 = 0;
+1179:     OidcInteractionRequired = errors.OidcInteractionRequired
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcInteractionRequired); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_OidcInteractionRequired = __pyx_t_1;
  __pyx_t_1 = 0;
+1180:     OidcNetworkError = errors.OidcNetworkError
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcNetworkError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_OidcNetworkError = __pyx_t_1;
  __pyx_t_1 = 0;
+1181:     OidcTimeoutError = errors.OidcTimeoutError
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcTimeoutError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_OidcTimeoutError = __pyx_t_1;
  __pyx_t_1 = 0;
 1182: 
+1183:     if _oidc_error_view_has_v1(view.struct_size):
  __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_error_view_has_v1(__pyx_v_view->struct_size);

  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1184:         idp_error = _oidc_text(view.idp_error, view.idp_error_len)
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view->idp_error, __pyx_v_view->idp_error_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1184, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_idp_error, __pyx_t_1);
    __pyx_t_1 = 0;
+1185:         description = _oidc_text(
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view->idp_error_description, __pyx_v_view->idp_error_description_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1185, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_description, __pyx_t_1);
    __pyx_t_1 = 0;
 1186:             view.idp_error_description, view.idp_error_description_len)
+1187:         status = view.status if view.has_status else None
    __pyx_t_2 = (__pyx_v_view->has_status != 0);

    if (__pyx_t_2) {
      __pyx_t_3 = __Pyx_PyLong_From_uint16_t(__pyx_v_view->status); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1187, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __pyx_t_3;
      __pyx_t_3 = 0;
    } else {
      __Pyx_INCREF(Py_None);
      __pyx_t_1 = Py_None;
    }

    __Pyx_DECREF_SET(__pyx_v_status, __pyx_t_1);
    __pyx_t_1 = 0;
 1188:         retry_after = (
+1189:             view.retry_after_seconds if view.has_retry_after else None)
    __pyx_t_2 = (__pyx_v_view->has_retry_after != 0);

    if (__pyx_t_2) {
      __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_view->retry_after_seconds); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1189, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __pyx_t_3;
      __pyx_t_3 = 0;
    } else {
      __Pyx_INCREF(Py_None);
      __pyx_t_1 = Py_None;
    }

    __Pyx_DECREF_SET(__pyx_v_retry_after, __pyx_t_1);
    __pyx_t_1 = 0;
+1190:         if _oidc_error_view_has_acquisition_busy(view.struct_size):
    __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_error_view_has_acquisition_busy(__pyx_v_view->struct_size);

    if (__pyx_t_2) {
/* … */
    }
+1191:             acquisition_busy = view.acquisition_busy
      __pyx_t_4 = __pyx_v_view->acquisition_busy;

      __pyx_v_acquisition_busy = __pyx_t_4;
+1192:         if view.kind == QUESTDB_OIDC_ERROR_CONFIG:
    switch (__pyx_v_view->kind) {
      case QUESTDB_OIDC_ERROR_CONFIG:
/* … */
      break;
      case QUESTDB_OIDC_ERROR_NETWORK:
+1193:             exc = OidcConfigError(
      __pyx_t_3 = NULL;
      __Pyx_INCREF(__pyx_v_OidcConfigError);
      __pyx_t_5 = __pyx_v_OidcConfigError; 
/* … */
      #endif
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[7] = {__pyx_t_3, __pyx_v_message, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
        #if CYTHON_VECTORCALL
        __pyx_t_8 = __pyx_mstate_global->__pyx_tuple[9];
        if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1193, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_8);
        #else
        {
          PyObject *__pyx_temp[5] = {__pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
          __pyx_t_8 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 5);
          if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1193, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
        }
        #endif
        __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        #if CYTHON_VECTORCALL
        #endif
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1193, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_v_exc = __pyx_t_1;
      __pyx_t_1 = 0;
/* … */
  {
    PyObject* __pyx_temp[5] = {__pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
    __pyx_mstate_global->__pyx_tuple[9] = __Pyx_PyTuple_FromArray(__pyx_temp, 5); if (unlikely(!__pyx_mstate_global->__pyx_tuple[9])) __PYX_ERR(1, 1193, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[9]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[9]);
 1194:                 message, status=status, retry_after=retry_after,
+1195:                 in_doubt=in_doubt, code=code, sender_error=sender_error)
      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1195, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #if CYTHON_VECTORCALL
+1196:         elif view.kind == QUESTDB_OIDC_ERROR_NETWORK:
      break;
      case QUESTDB_OIDC_ERROR_DEVICE_FLOW:
+1197:             exc = OidcNetworkError(
      __pyx_t_5 = NULL;
      __Pyx_INCREF(__pyx_v_OidcNetworkError);
      __pyx_t_8 = __pyx_v_OidcNetworkError; 
/* … */
      #endif
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
        assert(__pyx_t_5);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[7] = {__pyx_t_5, __pyx_v_message, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
        #if CYTHON_VECTORCALL
        __pyx_t_3 = __pyx_mstate_global->__pyx_tuple[9];
        if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1197, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_3);
        #else
        {
          PyObject *__pyx_temp[5] = {__pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
          __pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 5);
          if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1197, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        #endif
        __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        #if CYTHON_VECTORCALL
        #endif
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1197, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_v_exc = __pyx_t_1;
      __pyx_t_1 = 0;
 1198:                 message, status=status, retry_after=retry_after,
+1199:                 in_doubt=in_doubt, code=code, sender_error=sender_error)
      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1199, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #if CYTHON_VECTORCALL
+1200:         elif view.kind == QUESTDB_OIDC_ERROR_DEVICE_FLOW:
      break;
      case QUESTDB_OIDC_ERROR_TIMEOUT:
+1201:             exc = OidcDeviceFlowError(
      __pyx_t_8 = NULL;
      __Pyx_INCREF(__pyx_v_OidcDeviceFlowError);
      __pyx_t_3 = __pyx_v_OidcDeviceFlowError; 
/* … */
      #endif
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
        assert(__pyx_t_8);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[9] = {__pyx_t_8, __pyx_v_message, __pyx_v_idp_error, __pyx_v_description, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
        #if CYTHON_VECTORCALL
        __pyx_t_5 = __pyx_mstate_global->__pyx_tuple[10];
        if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1201, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_5);
        #else
        {
          PyObject *__pyx_temp[7] = {__pyx_mstate_global->__pyx_n_u_error, __pyx_mstate_global->__pyx_n_u_error_description, __pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
          __pyx_t_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 7);
          if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1201, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        #endif
        __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        #if CYTHON_VECTORCALL
        #endif
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1201, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_v_exc = __pyx_t_1;
      __pyx_t_1 = 0;
/* … */
  {
    PyObject* __pyx_temp[7] = {__pyx_mstate_global->__pyx_n_u_error, __pyx_mstate_global->__pyx_n_u_error_description, __pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
    __pyx_mstate_global->__pyx_tuple[10] = __Pyx_PyTuple_FromArray(__pyx_temp, 7); if (unlikely(!__pyx_mstate_global->__pyx_tuple[10])) __PYX_ERR(1, 1201, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[10]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[10]);
 1202:                 message,
 1203:                 error=idp_error,
 1204:                 error_description=description,
 1205:                 status=status,
 1206:                 retry_after=retry_after,
+1207:                 in_doubt=in_doubt, code=code, sender_error=sender_error)
      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1207, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #if CYTHON_VECTORCALL
+1208:         elif view.kind == QUESTDB_OIDC_ERROR_TIMEOUT:
      break;
      case QUESTDB_OIDC_ERROR_INTERACTION_REQUIRED:
 1209:             # OidcTimeoutError is an OidcDeviceFlowError, and the native side
 1210:             # attaches the IdP error (e.g. "expired_token"); carry it through
 1211:             # like the DEVICE_FLOW branch instead of dropping it.
+1212:             exc = OidcTimeoutError(
      __pyx_t_3 = NULL;
      __Pyx_INCREF(__pyx_v_OidcTimeoutError);
      __pyx_t_5 = __pyx_v_OidcTimeoutError; 
/* … */
      #endif
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[9] = {__pyx_t_3, __pyx_v_message, __pyx_v_idp_error, __pyx_v_description, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
        #if CYTHON_VECTORCALL
        __pyx_t_8 = __pyx_mstate_global->__pyx_tuple[10];
        if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1212, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_8);
        #else
        {
          PyObject *__pyx_temp[7] = {__pyx_mstate_global->__pyx_n_u_error, __pyx_mstate_global->__pyx_n_u_error_description, __pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
          __pyx_t_8 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 7);
          if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1212, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
        }
        #endif
        __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        #if CYTHON_VECTORCALL
        #endif
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1212, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_v_exc = __pyx_t_1;
      __pyx_t_1 = 0;
 1213:                 message,
 1214:                 error=idp_error,
 1215:                 error_description=description,
 1216:                 status=status,
 1217:                 retry_after=retry_after,
+1218:                 in_doubt=in_doubt, code=code, sender_error=sender_error)
      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1218, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #if CYTHON_VECTORCALL
+1219:         elif view.kind == QUESTDB_OIDC_ERROR_INTERACTION_REQUIRED:
      break;
      case QUESTDB_OIDC_ERROR_CANCELLED:
+1220:             exc = OidcInteractionRequired(
      __pyx_t_5 = NULL;
      __Pyx_INCREF(__pyx_v_OidcInteractionRequired);
      __pyx_t_8 = __pyx_v_OidcInteractionRequired; 
/* … */
      #endif
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
        assert(__pyx_t_5);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[7] = {__pyx_t_5, __pyx_v_message, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
        #if CYTHON_VECTORCALL
        __pyx_t_3 = __pyx_mstate_global->__pyx_tuple[9];
        if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1220, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_3);
        #else
        {
          PyObject *__pyx_temp[5] = {__pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
          __pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 5);
          if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1220, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        #endif
        __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        #if CYTHON_VECTORCALL
        #endif
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1220, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_v_exc = __pyx_t_1;
      __pyx_t_1 = 0;
 1221:                 message, status=status, retry_after=retry_after,
+1222:                 in_doubt=in_doubt, code=code, sender_error=sender_error)
      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1222, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #if CYTHON_VECTORCALL
+1223:         elif view.kind == QUESTDB_OIDC_ERROR_CANCELLED:
      break;
      default:
+1224:             exc = OidcCancelledError(
      __pyx_t_8 = NULL;
      __Pyx_INCREF(__pyx_v_OidcCancelledError);
      __pyx_t_3 = __pyx_v_OidcCancelledError; 
/* … */
      #endif
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
        assert(__pyx_t_8);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[7] = {__pyx_t_8, __pyx_v_message, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
        #if CYTHON_VECTORCALL
        __pyx_t_5 = __pyx_mstate_global->__pyx_tuple[9];
        if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1224, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_5);
        #else
        {
          PyObject *__pyx_temp[5] = {__pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
          __pyx_t_5 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 5);
          if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1224, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        #endif
        __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        #if CYTHON_VECTORCALL
        #endif
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1224, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_v_exc = __pyx_t_1;
      __pyx_t_1 = 0;
 1225:                 message, status=status, retry_after=retry_after,
+1226:                 in_doubt=in_doubt, code=code, sender_error=sender_error)
      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1226, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #if CYTHON_VECTORCALL
 1227:         else:
+1228:             exc = OidcError(
      __pyx_t_3 = NULL;
      __Pyx_INCREF(__pyx_v_OidcError);
      __pyx_t_5 = __pyx_v_OidcError; 
/* … */
      #endif
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[7] = {__pyx_t_3, __pyx_v_message, __pyx_v_status, __pyx_v_retry_after, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
        #if CYTHON_VECTORCALL
        __pyx_t_8 = __pyx_mstate_global->__pyx_tuple[9];
        if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1228, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_8);
        #else
        {
          PyObject *__pyx_temp[5] = {__pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_n_u_retry_after, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
          __pyx_t_8 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 5);
          if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1228, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
        }
        #endif
        __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        #if CYTHON_VECTORCALL
        #endif
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1228, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_v_exc = __pyx_t_1;
      __pyx_t_1 = 0;
      break;
    }
 1229:                 message, status=status, retry_after=retry_after,
+1230:                 in_doubt=in_doubt, code=code, sender_error=sender_error)
      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1230, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #if CYTHON_VECTORCALL
 1231:     else:
+1232:         exc = OidcError(
  /*else*/ {
    __pyx_t_5 = NULL;
    __Pyx_INCREF(__pyx_v_OidcError);
    __pyx_t_8 = __pyx_v_OidcError; 
/* … */
    #endif
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_v_message, __pyx_t_6, __pyx_v_code, __pyx_v_sender_error};
      #if CYTHON_VECTORCALL
      __pyx_t_3 = __pyx_mstate_global->__pyx_tuple[8];
      if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1232, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_3);
      #else
      {
        PyObject *__pyx_temp[3] = {__pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_mstate_global->__pyx_n_u_code, __pyx_mstate_global->__pyx_n_u_sender_error};
        __pyx_t_3 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 3);
        if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1232, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      #endif
      __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      #if CYTHON_VECTORCALL
      #endif
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1232, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_v_exc = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_L3:;
+1233:             message, in_doubt=in_doubt, code=code, sender_error=sender_error)
    __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1233, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    #if CYTHON_VECTORCALL
 1234:     # Internal transport-retry discriminator. Keeping it on the converted
 1235:     # exception makes the decision describe the native error that actually
 1236:     # occurred, rather than racing a later read of provider state.
+1237:     exc._acquisition_busy = bool(acquisition_busy)
  __pyx_t_8 = NULL;
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_acquisition_busy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_7 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1237, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_acquisition_busy_2, ((PyObject *)__pyx_t_1)) < (0)) __PYX_ERR(1, 1237, __pyx_L1_error)
  __Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
+1238:     return exc
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_exc);
      __pyx_r = __pyx_v_exc;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 1239: 
 1240: 
+1241: cdef int _raise_oidc_auth_closed() except -1:
static int __pyx_f_7questdb_7_client__raise_oidc_auth_closed(void) {
  PyObject *__pyx_v_OidcCancelledError = NULL;
  PyObject *__pyx_v_exc = NULL;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._raise_oidc_auth_closed", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __Pyx_XDECREF(__pyx_v_OidcCancelledError);
  __Pyx_XDECREF(__pyx_v_exc);

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1242:     """Raise the error every use of a closed provider reports.
 1243: 
 1244:     Its own operations and attaching it to a transport report the same typed
 1245:     `OidcCancelledError` -- the error native raises for a closed provider, and
 1246:     the one a transport already attached to it raises once it is closed --
 1247:     so one `except OidcError` covers every path.
 1248: 
 1249:     It is marked as a closed `RefreshingTokenProvider`'s failure is
 1250:     (`_provider_closed`). A provider of your own that calls `token()` and lets
 1251:     the error escape -- `bearer_token_provider=lambda: auth.token()` -- then
 1252:     ends its clients, as `oidc_auth=auth` does, instead of leaving them
 1253:     retrying a provider that can never serve again.
 1254:     """
+1255:     from questdb.auth._errors import OidcCancelledError
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcCancelledError};
    __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1255, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcCancelledError};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1255, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      switch (__pyx_t_3) {
        case 0:
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v_OidcCancelledError = __pyx_t_4;
        break;
        default:;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1256:     exc = OidcCancelledError('The OIDC authentication provider is closed.')
  __pyx_t_4 = NULL;
  __Pyx_INCREF(__pyx_v_OidcCancelledError);
  __pyx_t_5 = __pyx_v_OidcCancelledError; 
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_The_OIDC_authentication_provider};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_exc = __pyx_t_1;
  __pyx_t_1 = 0;
+1257:     exc._provider_closed = True
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_provider_closed, Py_True) < (0)) __PYX_ERR(1, 1257, __pyx_L1_error)
+1258:     raise exc
  __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
  __PYX_ERR(1, 1258, __pyx_L1_error)
 1259: 
 1260: 
+1261: cdef void_int _oidc_require_native_token(object oidc_auth) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__oidc_require_native_token(PyObject *__pyx_v_oidc_auth) {
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._oidc_require_native_token", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1262:     """Refuse an ``oidc_auth=`` provider whose ``token()`` is overridden, by a
 1263:     subclass or an instance attribute.
 1264: 
 1265:     Connections take the token from the native provider and never call a
 1266:     Python ``token()``, so they would skip an override that ``headers()`` and
 1267:     the PG-wire adapters do call.
 1268:     """
+1269:     if not _method_not_overridden(oidc_auth, OidcDeviceAuth, 'token'):
  __pyx_t_1 = __pyx_f_7questdb_7_client__method_not_overridden(__pyx_v_oidc_auth, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_token); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 1269, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);


  if (unlikely(__pyx_t_2)) {
/* … */
  }
+1270:         raise _ConfigTypeError(
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ConfigTypeError); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_oidc_auth_must_not_override_tok};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1270, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(1, 1270, __pyx_L1_error)
 1271:             '"oidc_auth" must not override token(): connections take the '
 1272:             'token from the native provider and never call the override, '
 1273:             'which runs only where Python calls token() itself, such as the '
 1274:             'PG-wire adapters. Remove the override.')
+1275:     return 0
  {

    __pyx_r = 0;
  }
  goto __pyx_L0;
 1276: 
 1277: 
+1278: cdef object _oidc_err_to_py(questdb_error* err):
static PyObject *__pyx_f_7questdb_7_client__oidc_err_to_py(questdb_error *__pyx_v_err) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._oidc_err_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1279:     if err == NULL:
  __pyx_t_1 = (__pyx_v_err == NULL);

  if (__pyx_t_1) {
/* … */
  }
+1280:         return _oidc_err_to_py_unowned(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_err_to_py_unowned(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1280, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1281:     try:
  /*try:*/ {
+1282:         return _oidc_err_to_py_unowned(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_err_to_py_unowned(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1282, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_2;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_2 = 0;
    goto __pyx_L4_return;
  }
 1283:     finally:
+1284:         _oidc_release_error(err)
  /*finally:*/ {
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
      {
        __pyx_f_7questdb_7_client__oidc_release_error(__pyx_v_err);
/* … */
      __pyx_f_7questdb_7_client__oidc_release_error(__pyx_v_err);
+1285:         _oidc_raise_unscheduled_main()
        __pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 1285, __pyx_L8_error)

      }
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
      goto __pyx_L1_error;
      __pyx_L8_error:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L4_return: {
      __pyx_t_11 = __pyx_r;
      __pyx_r = 0;
/* … */
      __pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 1285, __pyx_L1_error)

      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
  }
 1286: 
 1287: 
+1288: cdef inline bytes _oidc_required_utf8(object value, str name):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client__oidc_required_utf8(PyObject *__pyx_v_value, PyObject *__pyx_v_name) {
  PyObject *__pyx_v_OidcConfigError = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("questdb._client._oidc_required_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_OidcConfigError);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1289:     from questdb.auth._errors import OidcConfigError
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
    __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1289, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      switch (__pyx_t_3) {
        case 0:
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v_OidcConfigError = __pyx_t_4;
        break;
        default:;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1290:     if not isinstance(value, str) or not value:
  __pyx_t_6 = PyUnicode_Check(__pyx_v_value); 
  __pyx_t_7 = (!__pyx_t_6);


  if (!__pyx_t_7) {

  } else {

    __pyx_t_5 = __pyx_t_7;

    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(1, 1290, __pyx_L1_error)
  __pyx_t_6 = (!__pyx_t_7);



  __pyx_t_5 = __pyx_t_6;

  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_5)) {
/* … */
  }
+1291:         raise OidcConfigError(
    __pyx_t_4 = NULL;
    __Pyx_INCREF(__pyx_v_OidcConfigError);
    __pyx_t_8 = __pyx_v_OidcConfigError; 
+1292:             f'{name} is required and must be a non-empty string')
    __pyx_t_9 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1292, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_is_required_and_must_be_a_non_e); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1292, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_11 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
      __pyx_t_11 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_10};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1291, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 1291, __pyx_L1_error)
+1293:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L6_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __pyx_L8_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_XGIVEREF(__pyx_t_13);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_12, __pyx_t_13);
    goto __pyx_L1_error;
    __pyx_L10_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_XGIVEREF(__pyx_t_13);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_12, __pyx_t_13);
    goto __pyx_L0;
  }
+1294:         return value.encode('utf-8')
      __pyx_t_8 = __pyx_v_value;
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_11 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_utf_8};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1294, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_1))) __PYX_ERR(1, 1294, __pyx_L6_error)
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = ((PyObject*)__pyx_t_1);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      __pyx_t_1 = 0;
      goto __pyx_L10_try_return;
+1295:     except UnicodeEncodeError as exc:
    __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_UnicodeEncodeError))));
    if (__pyx_t_14) {
      __Pyx_AddTraceback("questdb._client._oidc_required_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_8, &__pyx_t_10) < 0) __PYX_ERR(1, 1295, __pyx_L8_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_8);
      __pyx_v_exc = __pyx_t_8;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L17_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
          if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __Pyx_XGOTREF(__pyx_t_25);
          __pyx_t_14 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_XGIVEREF(__pyx_t_25);
          __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
          __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
          __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
          goto __pyx_L8_except_error;
        }
      }
    }
    goto __pyx_L8_except_error;
+1296:         raise OidcConfigError(
        __pyx_t_9 = NULL;
        __Pyx_INCREF(__pyx_v_OidcConfigError);
        __pyx_t_15 = __pyx_v_OidcConfigError; 
+1297:             f'{name} must contain valid Unicode text') from exc
        __pyx_t_16 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 1297, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_17 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_16, __pyx_mstate_global->__pyx_kp_u_must_contain_valid_Unicode_text); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 1297, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_11 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_15))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_15);
          assert(__pyx_t_9);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_15, __pyx__function);
          __pyx_t_11 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_17};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1296, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_Raise(__pyx_t_4, 0, 0, __pyx_v_exc);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __PYX_ERR(1, 1296, __pyx_L17_error)
      }
 1298: 
 1299: 
+1300: cdef inline bytes _oidc_optional_utf8(object value, str name):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client__oidc_optional_utf8(PyObject *__pyx_v_value, PyObject *__pyx_v_name) {
  PyObject *__pyx_v_OidcConfigError = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("questdb._client._oidc_optional_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_OidcConfigError);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1301:     from questdb.auth._errors import OidcConfigError
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
    __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1301, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1301, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      switch (__pyx_t_3) {
        case 0:
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v_OidcConfigError = __pyx_t_4;
        break;
        default:;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1302:     if value is None:
  __pyx_t_5 = (__pyx_v_value == Py_None);
  if (__pyx_t_5) {
/* … */
  }
+1303:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+1304:     if not isinstance(value, str):
  __pyx_t_5 = PyUnicode_Check(__pyx_v_value); 
  __pyx_t_6 = (!__pyx_t_5);


  if (unlikely(__pyx_t_6)) {
/* … */
  }
+1305:         raise OidcConfigError(f'{name} must be a string or None')
    __pyx_t_4 = NULL;
    __Pyx_INCREF(__pyx_v_OidcConfigError);
    __pyx_t_7 = __pyx_v_OidcConfigError; 
    __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_must_be_a_string_or_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_9};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1305, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 1305, __pyx_L1_error)
+1306:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __pyx_L7_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_11);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_11, __pyx_t_12);
    goto __pyx_L1_error;
    __pyx_L9_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_11);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_11, __pyx_t_12);
    goto __pyx_L0;
  }
+1307:         return value.encode('utf-8')
      __pyx_t_7 = __pyx_v_value;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_10 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_utf_8};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1307, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_1))) __PYX_ERR(1, 1307, __pyx_L5_error)
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = ((PyObject*)__pyx_t_1);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      __pyx_t_1 = 0;
      goto __pyx_L9_try_return;
+1308:     except UnicodeEncodeError as exc:
    __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_UnicodeEncodeError))));
    if (__pyx_t_13) {
      __Pyx_AddTraceback("questdb._client._oidc_optional_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_9) < 0) __PYX_ERR(1, 1308, __pyx_L7_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_v_exc = __pyx_t_7;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L16_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __pyx_t_13 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
          goto __pyx_L7_except_error;
        }
      }
    }
    goto __pyx_L7_except_error;
+1309:         raise OidcConfigError(
        __pyx_t_8 = NULL;
        __Pyx_INCREF(__pyx_v_OidcConfigError);
        __pyx_t_14 = __pyx_v_OidcConfigError; 
+1310:             f'{name} must contain valid Unicode text') from exc
        __pyx_t_15 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 1310, __pyx_L16_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_16 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_must_contain_valid_Unicode_text); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 1310, __pyx_L16_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_10 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_14))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14);
          assert(__pyx_t_8);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_14);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_14, __pyx__function);
          __pyx_t_10 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_16};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_14, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1309, __pyx_L16_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_Raise(__pyx_t_4, 0, 0, __pyx_v_exc);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __PYX_ERR(1, 1309, __pyx_L16_error)
      }
 1311: 
 1312: 
+1313: cdef inline void _oidc_validate_bool(
static CYTHON_INLINE void __pyx_f_7questdb_7_client__oidc_validate_bool(PyObject *__pyx_v_value, PyObject *__pyx_v_name, int __pyx_v_allow_none) {
  PyObject *__pyx_v_OidcConfigError = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._oidc_validate_bool", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_OidcConfigError);

  __Pyx_RefNannyFinishContext();
}
 1314:         object value, str name, bint allow_none) except *:
+1315:     if (value is None and allow_none) or isinstance(value, bool):
  __pyx_t_2 = (__pyx_v_value == Py_None);
  if (!__pyx_t_2) {

    goto __pyx_L5_next_or;
  } else {

  }
  if (!__pyx_v_allow_none) {
  } else {

    __pyx_t_1 = __pyx_v_allow_none;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_L5_next_or:;
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 

  __pyx_t_1 = __pyx_t_2;

  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+1316:         return
    {
    }
    goto __pyx_L0;
+1317:     from questdb.auth._errors import OidcConfigError
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
    __pyx_t_4 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1317, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_t_4;
  __Pyx_GOTREF(__pyx_t_3);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
    __pyx_t_5 = 0; {
      __pyx_t_6 = __Pyx_ImportFrom(__pyx_t_3, __pyx_imported_names[__pyx_t_5]); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1317, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      switch (__pyx_t_5) {
        case 0:
        __Pyx_INCREF(__pyx_t_6);
        __pyx_v_OidcConfigError = __pyx_t_6;
        break;
        default:;
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1318:     if allow_none:
  if (unlikely(__pyx_v_allow_none)) {
/* … */
  }
+1319:         raise OidcConfigError(f'{name} must be a bool or None')
    __pyx_t_6 = NULL;
    __Pyx_INCREF(__pyx_v_OidcConfigError);
    __pyx_t_7 = __pyx_v_OidcConfigError; 
    __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1319, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_must_be_a_bool_or_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1319, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_9};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1319, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(1, 1319, __pyx_L1_error)
+1320:     raise OidcConfigError(f'{name} must be a bool')
  __pyx_t_7 = NULL;
  __Pyx_INCREF(__pyx_v_OidcConfigError);
  __pyx_t_9 = __pyx_v_OidcConfigError; 
  __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_must_be_a_bool); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_10 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
    assert(__pyx_t_7);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_7);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
    __pyx_t_10 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_8};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1320, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(1, 1320, __pyx_L1_error)
 1321: 
 1322: 
+1323: cdef void _oidc_cancel_sign_in_from_callback(
static void __pyx_f_7questdb_7_client__oidc_cancel_sign_in_from_callback(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_provider) {
  questdb_error *__pyx_v_err;
  int __pyx_v_ok;
  PyThreadState *__pyx_v_gs;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_WriteUnraisable("questdb._client._oidc_cancel_sign_in_from_callback", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;




  __Pyx_RefNannyFinishContext();
}
 1324:         OidcDeviceAuth provider) noexcept:
 1325:     """Cancel only this device flow from inside its event callback.
 1326: 
 1327:     Native's attempt-scoped signal wakes the poll wait without taking the
 1328:     authentication lock held around this callback. It does not close the shared
 1329:     provider, discard credentials, or disable attached transports. Errors are
 1330:     swallowed deliberately: this runs on the interrupt path, where the pending
 1331:     ``KeyboardInterrupt`` or ``SystemExit`` is the thing worth surfacing.
 1332: 
 1333:     The GIL is released around the native call for consistency with every other
 1334:     native call in this file, not because a deadlock is known here: native's
 1335:     ``cancel_sign_in`` takes only ``close_wait``, and ``CEventHandler::
 1336:     cancel_sign_in`` takes ``callback_gate``, which is free while a callback
 1337:     runs. Holding the GIL across a native lock acquisition is the shape this
 1338:     file otherwise treats as a rule, so it is not worth being the one exception
 1339:     should either of those lock disciplines change.
 1340:     """
+1341:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 1342:     cdef bint ok
+1343:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+1344:     if provider._raw == NULL or provider._pid != os.getpid():
  __pyx_t_2 = (__pyx_v_provider->_raw == NULL);

  if (!__pyx_t_2) {

  } else {

    __pyx_t_1 = __pyx_t_2;

    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_provider->_pid); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_getpid); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_8 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
    assert(__pyx_t_5);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1344, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_int_object(__pyx_t_3, __pyx_t_4, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1344, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  __pyx_t_1 = __pyx_t_2;

  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+1345:         return
    {
    }
    goto __pyx_L0;
+1346:     _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+1347:     ok = questdb_oidc_auth_cancel_sign_in(provider._raw, &err)
  __pyx_v_ok = questdb_oidc_auth_cancel_sign_in(__pyx_v_provider->_raw, (&__pyx_v_err));
+1348:     _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+1349:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);

  if (__pyx_t_1) {
/* … */
  }
+1350:         if err != NULL:
    __pyx_t_1 = (__pyx_v_err != NULL);

    if (__pyx_t_1) {
/* … */
    }
+1351:             _oidc_release_error(err)
      __pyx_f_7questdb_7_client__oidc_release_error(__pyx_v_err);
 1352: 
 1353: 
+1354: cdef inline bint _oidc_event_has_browser_target(size_t struct_size):
static CYTHON_INLINE int __pyx_f_7questdb_7_client__oidc_event_has_browser_target(size_t __pyx_v_struct_size) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;

  return __pyx_r;
}
 1355:     # browser_target_len immediately precedes the appended uint64 interval.
 1356:     # A struct from the ABI revision before interval therefore ends here.
 1357:     return struct_size >= (
+1358:         sizeof(questdb_oidc_event) - sizeof(uint64_t))
  {

    __pyx_r = (__pyx_v_struct_size >= ((sizeof(struct questdb_oidc_event)) - (sizeof(uint64_t))));
  }
  goto __pyx_L0;
 1359: 
 1360: 
+1361: cdef inline bint _oidc_event_has_interval(size_t struct_size):
static CYTHON_INLINE int __pyx_f_7questdb_7_client__oidc_event_has_interval(size_t __pyx_v_struct_size) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;

  return __pyx_r;
}
+1362:     return struct_size >= sizeof(questdb_oidc_event)
  {

    __pyx_r = (__pyx_v_struct_size >= (sizeof(struct questdb_oidc_event)));
  }
  goto __pyx_L0;
 1363: 
 1364: 
+1365: def _debug_oidc_event_tail_support(size_t struct_size):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_53_debug_oidc_event_tail_support(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_52_debug_oidc_event_tail_support, "Internal test hook for the event ABI\047s appended-field gates.");
static PyMethodDef __pyx_mdef_7questdb_7_client_53_debug_oidc_event_tail_support = {"_debug_oidc_event_tail_support", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_53_debug_oidc_event_tail_support, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_52_debug_oidc_event_tail_support};
static PyObject *__pyx_pw_7questdb_7_client_53_debug_oidc_event_tail_support(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  size_t __pyx_v_struct_size;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_event_tail_support (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_struct_size,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 1365, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 1365, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_event_tail_support", 0) < (0)) __PYX_ERR(1, 1365, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_oidc_event_tail_support", 1, 1, 1, i); __PYX_ERR(1, 1365, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 1365, __pyx_L3_error)
    }
    __pyx_v_struct_size = __Pyx_PyLong_As_size_t(values[0]); if (unlikely((__pyx_v_struct_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1365, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_oidc_event_tail_support", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 1365, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_oidc_event_tail_support", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_52_debug_oidc_event_tail_support(__pyx_self, __pyx_v_struct_size);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_52_debug_oidc_event_tail_support(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_struct_size) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._debug_oidc_event_tail_support", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_53_debug_oidc_event_tail_support, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_event_tail_support, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[47])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 1365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_event_tail_support, __pyx_t_18) < (0)) __PYX_ERR(1, 1365, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 1366:     """Internal test hook for the event ABI's appended-field gates."""
+1367:     return (_oidc_event_has_browser_target(struct_size),
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_event_has_browser_target(__pyx_v_struct_size); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1367, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2) != (0)) __PYX_ERR(1, 1367, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3) != (0)) __PYX_ERR(1, 1367, __pyx_L1_error);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_4;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_4 = 0;
  goto __pyx_L0;
+1368:             _oidc_event_has_interval(struct_size))
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_event_has_interval(__pyx_v_struct_size); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1368, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

 1369: 
 1370: 
+1371: def _debug_oidc_event_tail_sizes():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_55_debug_oidc_event_tail_sizes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_54_debug_oidc_event_tail_sizes, "Internal test hook: minimum ABI sizes for browser URL and interval.");
static PyMethodDef __pyx_mdef_7questdb_7_client_55_debug_oidc_event_tail_sizes = {"_debug_oidc_event_tail_sizes", (PyCFunction)__pyx_pw_7questdb_7_client_55_debug_oidc_event_tail_sizes, METH_NOARGS, __pyx_doc_7questdb_7_client_54_debug_oidc_event_tail_sizes};
static PyObject *__pyx_pw_7questdb_7_client_55_debug_oidc_event_tail_sizes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_event_tail_sizes (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_54_debug_oidc_event_tail_sizes(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_54_debug_oidc_event_tail_sizes(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._debug_oidc_event_tail_sizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_55_debug_oidc_event_tail_sizes, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_event_tail_sizes, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[48])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 1371, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_event_tail_sizes, __pyx_t_18) < (0)) __PYX_ERR(1, 1371, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 1372:     """Internal test hook: minimum ABI sizes for browser URL and interval."""
+1373:     return (sizeof(questdb_oidc_event) - sizeof(uint64_t),
  __pyx_t_1 = __Pyx_PyLong_FromSize_t(((sizeof(struct questdb_oidc_event)) - (sizeof(uint64_t)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(1, 1373, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(1, 1373, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_3;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_3 = 0;
  goto __pyx_L0;
+1374:             sizeof(questdb_oidc_event))
  __pyx_t_2 = __Pyx_PyLong_FromSize_t((sizeof(struct questdb_oidc_event))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1374, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
 1375: 
 1376: 
+1377: cdef class _OidcForegroundCall:
struct __pyx_obj_7questdb_7_client__OidcForegroundCall {
  PyObject_HEAD
  PyObject *provider;
  PyObject *interrupt;
  PyObject *previous;
};

 1378:     """One ``sign_in()`` / ``token()`` / ``clear()`` running on this thread.
 1379: 
 1380:     Those calls release the GIL for the whole native operation, so the only
 1381:     Python bytecode that runs on the caller's thread meanwhile is a callback
 1382:     native makes from inside it -- a renderer event, or a persistence
 1383:     diagnostic -- and CPython delivers a pending signal at the first bytecode
 1384:     it runs. A ``KeyboardInterrupt`` (or ``SystemExit``) raised there must not
 1385:     unwind through native, so the callback parks it here for the call to
 1386:     re-raise once native returns.
 1387:     """
 1388:     # The provider whose `sign_in()` this is, or None for token() / clear().
 1389:     # A sign-in parks on the provider's own `_interrupt` slot, which the event
 1390:     # dispatcher also reads, and is additionally cancelled.
 1391:     cdef object provider
 1392:     cdef object interrupt
 1393:     # The record this one shadows: a renderer callback may itself call token().
 1394:     cdef object previous
 1395: 
 1396: 
 1397: # Per-thread stack of `_OidcForegroundCall` records. The diagnostic callback's
 1398: # `user_data` is an opaque integer provider id, never a Python object; it
 1399: # cannot identify which foreground call (if any) a background worker's warning
 1400: # interrupted. Only the current thread can associate a diagnostic with that
 1401: # call.
 1402: # `with gil` on a thread that released the GIL through `PyEval_SaveThread`
 1403: # resumes that thread's own state, so this sees the caller's record. A native
 1404: # worker thread gets a fresh state and correctly sees none.
+1405: cdef object _OIDC_FOREGROUND = threading.local()
  __pyx_t_16 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_local); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 1405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_16, NULL};
    __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 1405, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
  }
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__OIDC_FOREGROUND);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__OIDC_FOREGROUND, __pyx_t_18);
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
 1406: 
 1407: 
+1408: cdef bint _oidc_callback_on_this_thread() except -1:
static int __pyx_f_7questdb_7_client__oidc_callback_on_this_thread(void) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._oidc_callback_on_this_thread", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1409:     """Whether this thread is running Python code inside an OIDC callback.
 1410: 
 1411:     That is a persistence-warning diagnostic of any provider, or -- while a
 1412:     ``sign_in()`` / ``token()`` / ``clear()`` runs on this thread with the GIL
 1413:     released -- one of its renderer events: the only Python code that thread
 1414:     can run meanwhile is a callback native makes from inside the call.
 1415:     """
+1416:     if getattr(_OIDC_DIAGNOSTIC_LOCAL, 'ids', None):
  __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_DIAGNOSTIC_LOCAL;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ids, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 1416, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
/* … */
  }
+1417:         return True
    {

      __pyx_r = 1;
    }
    goto __pyx_L0;
+1418:     return getattr(_OIDC_FOREGROUND, 'call', None) is not None
  __pyx_t_2 = __pyx_v_7questdb_7_client__OIDC_FOREGROUND;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_call_2, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = (__pyx_t_1 != Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  {
    __pyx_r = __pyx_t_3;
  }
  goto __pyx_L0;
 1419: 
 1420: 
+1421: cdef _OidcForegroundCall _oidc_foreground_enter(object provider):
static struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_f_7questdb_7_client__oidc_foreground_enter(PyObject *__pyx_v_provider) {
  struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_v_call = 0;
  struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._oidc_foreground_enter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_call);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1422:     cdef _OidcForegroundCall call = _OidcForegroundCall.__new__(
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client__OidcForegroundCall(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__OidcForegroundCall), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_call = ((struct __pyx_obj_7questdb_7_client__OidcForegroundCall *)__pyx_t_1);
  __pyx_t_1 = 0;
 1423:         _OidcForegroundCall)
+1424:     call.provider = provider
  __Pyx_INCREF(__pyx_v_provider);
  __Pyx_GIVEREF(__pyx_v_provider);
  __Pyx_GOTREF(__pyx_v_call->provider);
  __Pyx_DECREF_SET(__pyx_v_call->provider, __pyx_v_provider);
+1425:     call.interrupt = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_call->interrupt);
  __Pyx_DECREF_SET(__pyx_v_call->interrupt, Py_None);
+1426:     call.previous = getattr(_OIDC_FOREGROUND, 'call', None)
  __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_FOREGROUND;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_call_2, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1426, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_call->previous);
  __Pyx_DECREF_SET(__pyx_v_call->previous, __pyx_t_2);
  __pyx_t_2 = 0;
+1427:     _OIDC_FOREGROUND.call = call
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_7questdb_7_client__OIDC_FOREGROUND, __pyx_mstate_global->__pyx_n_u_call_2, ((PyObject *)__pyx_v_call)) < (0)) __PYX_ERR(1, 1427, __pyx_L1_error)
+1428:     return call
  {
    struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_call);
      __pyx_r = __pyx_v_call;
    }
    __Pyx_XDECREF((PyObject *)__pyx_temp);
  }
  goto __pyx_L0;
 1429: 
 1430: 
+1431: cdef object _oidc_foreground_exit(_OidcForegroundCall call):
static PyObject *__pyx_f_7questdb_7_client__oidc_foreground_exit(struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_v_call) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._oidc_foreground_exit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1432:     """Pop ``call`` and return the interrupt a callback parked on it."""
+1433:     _OIDC_FOREGROUND.call = call.previous
  __pyx_t_1 = __pyx_v_call->previous;
  __Pyx_INCREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_7questdb_7_client__OIDC_FOREGROUND, __pyx_mstate_global->__pyx_n_u_call_2, __pyx_t_1) < (0)) __PYX_ERR(1, 1433, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1434:     call.previous = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_call->previous);
  __Pyx_DECREF_SET(__pyx_v_call->previous, Py_None);
+1435:     return call.interrupt
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(__pyx_v_call->interrupt);
      __pyx_r = __pyx_v_call->interrupt;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 1436: 
 1437: 
+1438: cdef void _oidc_park_foreground_interrupt(object exc) noexcept:
static void __pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(PyObject *__pyx_v_exc) {
  struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_v_call = 0;
  struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_provider = 0;
  PyObject *__pyx_v_record = NULL;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_WriteUnraisable("questdb._client._oidc_park_foreground_interrupt", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_call);
  __Pyx_XDECREF((PyObject *)__pyx_v_provider);
  __Pyx_XDECREF(__pyx_v_record);

  __Pyx_RefNannyFinishContext();
}
 1439:     """Hand an interrupt raised inside a diagnostic to the call it stopped.
 1440: 
 1441:     Must not raise: it runs on the error path of a ``noexcept`` callback. It
 1442:     also runs no bytecode: CPython runs the next pending signal handler at any
 1443:     bytecode boundary, and an exception raised there -- before ``exc`` was
 1444:     stored -- was swallowed below together with ``exc``. That lost both of two
 1445:     signals arriving together (Ctrl-C plus a SIGALRM deadline, say), which is
 1446:     why the main-thread test is a plain C comparison and not
 1447:     ``threading.main_thread()``.
 1448:     """
 1449:     cdef _OidcForegroundCall call
 1450:     cdef OidcDeviceAuth provider
+1451:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }
+1452:         record = getattr(_OIDC_FOREGROUND, 'call', None)
      __pyx_t_4 = __pyx_v_7questdb_7_client__OIDC_FOREGROUND;
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_GetAttr3(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_call_2, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1452, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_record = __pyx_t_5;
      __pyx_t_5 = 0;
+1453:         if record is not None:
      __pyx_t_6 = (__pyx_v_record != Py_None);
      if (__pyx_t_6) {
/* … */
      }
+1454:             call = <_OidcForegroundCall>record
        __pyx_t_5 = __pyx_v_record;
        __Pyx_INCREF(__pyx_t_5);
        __pyx_v_call = ((struct __pyx_obj_7questdb_7_client__OidcForegroundCall *)__pyx_t_5);
        __pyx_t_5 = 0;
+1455:             if call.provider is not None:
        __pyx_t_6 = (__pyx_v_call->provider != Py_None);
        if (__pyx_t_6) {
/* … */
          goto __pyx_L10;
        }
 1456:                 # A sign-in. Park where the renderer path parks, so sign_in()
 1457:                 # has one slot to read, and cancel the device flow so the call
 1458:                 # actually returns. A diagnostic can also fire before the flow
 1459:                 # starts (a failed store read, or the save after a refresh that
 1460:                 # did not yield a servable token), when there is nothing to
 1461:                 # cancel yet; `_oidc_event_dispatch` then cancels at the first
 1462:                 # prompt instead of painting it.
+1463:                 provider = <OidcDeviceAuth>call.provider
          __pyx_t_5 = __pyx_v_call->provider;
          __Pyx_INCREF(__pyx_t_5);
          __pyx_v_provider = ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_t_5);
          __pyx_t_5 = 0;
+1464:                 if provider._interrupt is None:
          __pyx_t_6 = (__pyx_v_provider->_interrupt == Py_None);
          if (__pyx_t_6) {
/* … */
          }
+1465:                     provider._interrupt = exc
            __Pyx_INCREF(__pyx_v_exc);
            __Pyx_GIVEREF(__pyx_v_exc);
            __Pyx_GOTREF(__pyx_v_provider->_interrupt);
            __Pyx_DECREF_SET(__pyx_v_provider->_interrupt, __pyx_v_exc);
+1466:                     _oidc_cancel_sign_in_from_callback(provider)
            __pyx_f_7questdb_7_client__oidc_cancel_sign_in_from_callback(__pyx_v_provider);
+1467:                     return
            {
            }
            goto __pyx_L7_try_return;
+1468:                 _oidc_cancel_sign_in_from_callback(provider)
          __pyx_f_7questdb_7_client__oidc_cancel_sign_in_from_callback(__pyx_v_provider);
+1469:             elif call.interrupt is None:
        __pyx_t_6 = (__pyx_v_call->interrupt == Py_None);
        if (__pyx_t_6) {
/* … */
        }
        __pyx_L10:;
+1470:                 call.interrupt = exc
          __Pyx_INCREF(__pyx_v_exc);
          __Pyx_GIVEREF(__pyx_v_exc);
          __Pyx_GOTREF(__pyx_v_call->interrupt);
          __Pyx_DECREF_SET(__pyx_v_call->interrupt, __pyx_v_exc);
+1471:                 return
          {
          }
          goto __pyx_L7_try_return;
 1472:             # The call already holds an interrupt to raise. A second signal's
 1473:             # exception is not dropped: queue it for the main thread, which
 1474:             # raises it at the following boundary, as CPython would have.
+1475:         if questdb_thread_ident() != _OIDC_MAIN_THREAD_IDENT:
      __pyx_t_6 = (PyThread_get_thread_ident() != __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);

      if (__pyx_t_6) {
/* … */
      }
 1476:             # A native worker thread: signals are never delivered here and
 1477:             # there is no caller to hand an exception to.
+1478:             return
        {
        }
        goto __pyx_L7_try_return;
 1479:         # No foreground call to re-raise it (or one that already has an
 1480:         # interrupt), yet this is the main thread: an attached transport
 1481:         # pulled a token on the caller's thread with the GIL released.
 1482:         # Catching the exception cleared CPython's tripped-signal state, so
 1483:         # hand the SAME exception back to the main thread; it surfaces at the
 1484:         # first bytecode after that native call returns, exactly where an
 1485:         # uncaught one would have. This covers every class a handler can raise
 1486:         # -- a SIGTERM handler's SystemExit and a SIGALRM deadline's
 1487:         # TimeoutError were discarded before -- and runs the user's handler
 1488:         # once. Re-arming SIGINT instead ran a custom handler again at each
 1489:         # later bytecode of this callback. The dispatcher schedules it on its
 1490:         # way out, once no more Python code of this callback remains to run;
 1491:         # on PyPy, which delivers no pending call, the native-return boundary
 1492:         # raises it, as it does for a token callback.
+1493:         _oidc_park_main(exc)
      __pyx_f_7questdb_7_client__oidc_park_main(__pyx_v_exc);
+1494:     except BaseException:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_7) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
 1495:         pass
 1496: 
 1497: 
+1498: cdef void _oidc_park_pending_signals() noexcept:
static void __pyx_f_7questdb_7_client__oidc_park_pending_signals(void) {
  CYTHON_UNUSED int __pyx_v_attempt;
  PyObject *__pyx_v_exc = NULL;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_WriteUnraisable("questdb._client._oidc_park_pending_signals", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;

  __Pyx_XDECREF(__pyx_v_exc);

  __Pyx_RefNannyFinishContext();
}
 1499:     """Run every other Python signal handler that is pending right now and
 1500:     park what each raises, after a first one raised inside a diagnostic.
 1501: 
 1502:     CPython leaves the remaining handlers tripped when one raises, to run at
 1503:     the next bytecode boundary; left for later from inside this callback, the
 1504:     next one was observed never to run at all. Running them here, while the
 1505:     callback holds the GIL, runs each handler once and in signal order, and
 1506:     parks every exception for the caller. Bounded, in case a handler keeps
 1507:     re-raising its own signal.
 1508:     """
 1509:     cdef int attempt
+1510:     for attempt in range(8):
  for (__pyx_t_1 = 0; __pyx_t_1 < 8; __pyx_t_1+=1) {
    __pyx_v_attempt = __pyx_t_1;
+1511:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L5_error:;
/* … */
      __pyx_L7_except_error:;
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
      goto __pyx_L1_error;
      __pyx_L9_try_return:;
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
      goto __pyx_L0;
      __pyx_L6_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    }
  }
+1512:             PyErr_CheckSignals()
        __pyx_t_5 = PyErr_CheckSignals(); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 1512, __pyx_L5_error)

+1513:             return
        {
        }
        goto __pyx_L9_try_return;
+1514:         except BaseException as exc:
      __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
      if (__pyx_t_5) {
        __Pyx_AddTraceback("questdb._client._oidc_park_pending_signals", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(1, 1514, __pyx_L7_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_v_exc = __pyx_t_7;
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            goto __pyx_L19;
          }
          __pyx_L19:;
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L6_exception_handled;
      }
      goto __pyx_L7_except_error;
+1515:             _oidc_park_foreground_interrupt(exc)
          __pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(__pyx_v_exc);
        }
 1516: 
 1517: 
+1518: cdef _oidc_report_unfinished_prompt(object renderer, object exc):
static PyObject *__pyx_f_7questdb_7_client__oidc_report_unfinished_prompt(PyObject *__pyx_v_renderer, PyObject *__pyx_v_exc) {
  PyObject *__pyx_v_errors = NULL;
  PyObject *__pyx_v_message = NULL;
  PyObject *__pyx_v_signal_codes = NULL;
  PyObject *__pyx_v_renderer_exc = NULL;
  PyObject *__pyx_v_log_exc = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_AddTraceback("questdb._client._oidc_report_unfinished_prompt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_errors);
  __Pyx_XDECREF(__pyx_v_message);
  __Pyx_XDECREF(__pyx_v_signal_codes);
  __Pyx_XDECREF(__pyx_v_renderer_exc);
  __Pyx_XDECREF(__pyx_v_log_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1519:     """Tell a renderer whose prompt got no SUCCESS/FAILURE event that the
 1520:     sign-in ended.
 1521: 
 1522:     Native emits no terminal event when a device flow is cancelled, its
 1523:     provider is closed, or Ctrl-C interrupts it, so without this the renderer's
 1524:     output keeps showing the waiting status and a link that no client will
 1525:     redeem. Best-effort, like every renderer callback.
 1526:     """
+1527:     if renderer is None:
  __pyx_t_1 = (__pyx_v_renderer == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+1528:         return
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+1529:     errors = _oidc_errors_module()
  __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_errors_module(); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1529, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_errors = __pyx_t_2;
  __pyx_t_2 = 0;
+1530:     if exc is None or (errors is not None
  __pyx_t_3 = (__pyx_v_exc == Py_None);
  if (!__pyx_t_3) {

  } else {

    __pyx_t_1 = __pyx_t_3;

    goto __pyx_L5_bool_binop_done;
  }
/* … */
  __pyx_t_3 = (__pyx_v_errors != Py_None);
  if (__pyx_t_3) {

  } else {

    __pyx_t_1 = __pyx_t_3;

    goto __pyx_L5_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+1531:                        and isinstance(exc, errors.OidcCancelledError)):
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_errors, __pyx_mstate_global->__pyx_n_u_OidcCancelledError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1531, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_exc, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1531, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  __pyx_t_1 = __pyx_t_3;

  __pyx_L5_bool_binop_done:;
+1532:         message = 'Sign-in cancelled.'
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_Sign_in_cancelled);
    __pyx_v_message = __pyx_mstate_global->__pyx_kp_u_Sign_in_cancelled;
 1533:     else:
+1534:         message = str(exc) or 'OIDC sign-in failed.'
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1534, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 1534, __pyx_L1_error)
    if (!__pyx_t_1) {
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_2 = __pyx_t_4;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L8_bool_binop_done;
    }
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_OIDC_sign_in_failed);
    __pyx_t_2 = __pyx_mstate_global->__pyx_kp_u_OIDC_sign_in_failed;
    __pyx_L8_bool_binop_done:;
    __pyx_v_message = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __pyx_L4:;
+1535:     signal_codes = _oidc_signal_handler_codes()
  __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_signal_handler_codes(); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1535, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_signal_codes = __pyx_t_2;
  __pyx_t_2 = 0;
+1536:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L15_try_end;
    __pyx_L10_error:;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_L12_except_error:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L11_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    __pyx_L15_try_end:;
  }
+1537:         renderer.on_failure(message)
      __pyx_t_4 = __pyx_v_renderer;
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_message};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_on_failure, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1537, __pyx_L10_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1538:     except Exception as renderer_exc:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_9) {
      __Pyx_AddTraceback("questdb._client._oidc_report_unfinished_prompt", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_10) < 0) __PYX_ERR(1, 1538, __pyx_L12_except_error)
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_renderer_exc = __pyx_t_4;
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_DECREF(__pyx_v_renderer_exc); __pyx_v_renderer_exc = 0;
          goto __pyx_L22;
        }
        __pyx_L21_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_27, &__pyx_t_26, &__pyx_t_25);
          if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_13);
          __Pyx_XGOTREF(__pyx_t_12);
          __Pyx_XGOTREF(__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_27);
          __Pyx_XGOTREF(__pyx_t_26);
          __Pyx_XGOTREF(__pyx_t_25);
          __pyx_t_20 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_21 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_renderer_exc); __pyx_v_renderer_exc = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_27);
          __Pyx_XGIVEREF(__pyx_t_26);
          __Pyx_XGIVEREF(__pyx_t_25);
          __Pyx_ExceptionReset(__pyx_t_27, __pyx_t_26, __pyx_t_25);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_ErrRestore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
          __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0;
          __pyx_lineno = __pyx_t_20; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_21;
          goto __pyx_L12_except_error;
        }
        __pyx_L22:;
      }
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L11_exception_handled;
    }
    goto __pyx_L12_except_error;
+1539:         if _oidc_raised_in_signal_handler(renderer_exc, signal_codes):
        __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(__pyx_v_renderer_exc, __pyx_v_signal_codes); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 1539, __pyx_L21_error)
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+1540:             raise
          __Pyx_GIVEREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_4);
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_10);
          __pyx_t_2 = 0;  __pyx_t_4 = 0;  __pyx_t_10 = 0; 
          __PYX_ERR(1, 1540, __pyx_L21_error)
+1541:         try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          goto __pyx_L31_try_end;
          __pyx_L24_error:;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
/* … */
          __pyx_L26_except_error:;
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
          goto __pyx_L21_error;
          __pyx_L25_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
          __pyx_L31_try_end:;
        }
      }
+1542:             logging.getLogger('questdb').exception(
            __pyx_t_17 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 1542, __pyx_L24_error)
            __Pyx_GOTREF(__pyx_t_18);
            __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1542, __pyx_L24_error)
            __Pyx_GOTREF(__pyx_t_19);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __pyx_t_8 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_19))) {
              __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_19);
              assert(__pyx_t_17);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_19);
              __Pyx_INCREF(__pyx_t_17);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_19, __pyx__function);
              __pyx_t_8 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_mstate_global->__pyx_n_u_questdb};
              __pyx_t_16 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 1542, __pyx_L24_error)
              __Pyx_GOTREF(__pyx_t_16);
            }
            __pyx_t_15 = __pyx_t_16;
            __Pyx_INCREF(__pyx_t_15);
            __pyx_t_8 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_OIDC_renderer_callback_failed};
              __pyx_t_14 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exception, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 1542, __pyx_L24_error)
              __Pyx_GOTREF(__pyx_t_14);
            }
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 1543:                 'OIDC renderer callback failed')
+1544:         except Exception as log_exc:
          __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
          if (__pyx_t_9) {
            __Pyx_AddTraceback("questdb._client._oidc_report_unfinished_prompt", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_16, &__pyx_t_15) < 0) __PYX_ERR(1, 1544, __pyx_L26_except_error)
            __Pyx_XGOTREF(__pyx_t_14);
            __Pyx_XGOTREF(__pyx_t_16);
            __Pyx_XGOTREF(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_16);
            __pyx_v_log_exc = __pyx_t_16;
            /*try:*/ {
/* … */
            /*finally:*/ {
              /*normal exit:*/{
                __Pyx_DECREF(__pyx_v_log_exc); __pyx_v_log_exc = 0;
                goto __pyx_L38;
              }
              __pyx_L37_error:;
              /*exception exit:*/{
                __Pyx_PyThreadState_declare
                __Pyx_PyThreadState_assign
                __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0;
                __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
                __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
                 __Pyx_ExceptionSwap(&__pyx_t_25, &__pyx_t_26, &__pyx_t_27);
                if ( unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
                __Pyx_XGOTREF(__pyx_t_22);
                __Pyx_XGOTREF(__pyx_t_23);
                __Pyx_XGOTREF(__pyx_t_24);
                __Pyx_XGOTREF(__pyx_t_25);
                __Pyx_XGOTREF(__pyx_t_26);
                __Pyx_XGOTREF(__pyx_t_27);
                __pyx_t_9 = __pyx_lineno; __pyx_t_20 = __pyx_clineno; __pyx_t_21 = __pyx_filename;
                {
                  __Pyx_DECREF(__pyx_v_log_exc); __pyx_v_log_exc = 0;
                }
                __Pyx_XGIVEREF(__pyx_t_25);
                __Pyx_XGIVEREF(__pyx_t_26);
                __Pyx_XGIVEREF(__pyx_t_27);
                __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_26, __pyx_t_27);
                __Pyx_XGIVEREF(__pyx_t_22);
                __Pyx_XGIVEREF(__pyx_t_23);
                __Pyx_XGIVEREF(__pyx_t_24);
                __Pyx_ErrRestore(__pyx_t_22, __pyx_t_23, __pyx_t_24);
                __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0;
                __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_20; __pyx_filename = __pyx_t_21;
                goto __pyx_L26_except_error;
              }
              __pyx_L38:;
            }
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            goto __pyx_L25_exception_handled;
          }
          goto __pyx_L26_except_error;
 1545:             # Ordinary diagnostics must not replace the saved sign-in error.
 1546:             # A freshly delivered signal (even one raising Exception rather
 1547:             # than BaseException) remains an interruption, not a logging bug.
+1548:             if _oidc_raised_in_signal_handler(log_exc, signal_codes):
              __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(__pyx_v_log_exc, __pyx_v_signal_codes); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 1548, __pyx_L37_error)
              if (unlikely(__pyx_t_1)) {
/* … */
              }
            }
+1549:                 raise
                __Pyx_GIVEREF(__pyx_t_14);
                __Pyx_GIVEREF(__pyx_t_16);
                __Pyx_XGIVEREF(__pyx_t_15);
                __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_16, __pyx_t_15);
                __pyx_t_14 = 0;  __pyx_t_16 = 0;  __pyx_t_15 = 0; 
                __PYX_ERR(1, 1549, __pyx_L37_error)
 1550: 
 1551: 
+1552: cdef void _oidc_event_dispatch(
static void __pyx_f_7questdb_7_client__oidc_event_dispatch(void *__pyx_v_user_data, struct questdb_oidc_event const *__pyx_v_event) {
  PyObject *__pyx_v_browser_target = 0;
  PyObject *__pyx_v_signal_codes = 0;
  uint64_t __pyx_v_interval_seconds;
  PyObject *__pyx_v_provider = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_v_renderer = NULL;
  int __pyx_v_interrupted;
  PyObject *__pyx_v_check_exc = NULL;
  PyObject *__pyx_v_log_exc = NULL;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_WriteUnraisable("questdb._client._oidc_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_browser_target);
  __Pyx_XDECREF(__pyx_v_signal_codes);

  __Pyx_XDECREF(__pyx_v_provider);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XDECREF(__pyx_v_renderer);

  __Pyx_XDECREF(__pyx_v_check_exc);
  __Pyx_XDECREF(__pyx_v_log_exc);



  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
}
 1553:         void* user_data,
 1554:         const questdb_oidc_event* event) noexcept with gil:
+1555:     cdef object browser_target = None
  __Pyx_INCREF(Py_None);
  __pyx_v_browser_target = Py_None;
+1556:     cdef object signal_codes = ()
  __Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple);
  __pyx_v_signal_codes = __pyx_mstate_global->__pyx_empty_tuple;
+1557:     cdef uint64_t interval_seconds = 0
  __pyx_v_interval_seconds = 0;
+1558:     provider = _oidc_provider_from_user_data(user_data)
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_provider_from_user_data(__pyx_v_user_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_provider = __pyx_t_1;
  __pyx_t_1 = 0;
+1559:     if provider is None:
  __pyx_t_2 = (__pyx_v_provider == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+1560:         return
    {
    }
    goto __pyx_L0;
+1561:     if ((<OidcDeviceAuth>provider)._interrupt is not None
  __pyx_t_3 = (((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_interrupt != Py_None);
  if (__pyx_t_3) {

  } else {

    __pyx_t_2 = __pyx_t_3;

    goto __pyx_L5_bool_binop_done;
  }
/* … */
  if (__pyx_t_2) {
/* … */
  }
+1562:             and event.kind in (
  switch (__pyx_v_event->kind) {
    case QUESTDB_OIDC_EVENT_PROMPT:
/* … */
    __pyx_t_3 = 1;
    break;
    default:
    __pyx_t_3 = 0;
    break;
  }
  __pyx_t_4 = __pyx_t_3;



  __pyx_t_2 = __pyx_t_4;

  __pyx_L5_bool_binop_done:;
+1563:                 QUESTDB_OIDC_EVENT_PROMPT, QUESTDB_OIDC_EVENT_WAITING)):
    case QUESTDB_OIDC_EVENT_WAITING:
 1564:         # An interrupt was parked before the device flow could be cancelled --
 1565:         # by a persistence diagnostic ahead of the prompt, or by an earlier
 1566:         # event racing the cancellation. Stop instead of painting a prompt
 1567:         # nobody should answer.
+1568:         _oidc_cancel_sign_in_from_callback(<OidcDeviceAuth>provider)
    __pyx_f_7questdb_7_client__oidc_cancel_sign_in_from_callback(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider));
+1569:         return
    {
    }
    goto __pyx_L0;
+1570:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L12_try_end;
    __pyx_L7_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
    __pyx_L9_except_error:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L10_except_return:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L0;
    __pyx_L12_try_end:;
  }
 1571:         # sign_in() runs with the GIL released, so this callback is where
 1572:         # CPython runs Python signal handlers for the caller's thread. Run the
 1573:         # pending ones HERE, before any renderer code: whatever they raise --
 1574:         # KeyboardInterrupt, but equally a SIGALRM timeout or pytest-timeout's
 1575:         # BaseException -- is an interruption of sign_in(), not a renderer
 1576:         # failure. Letting the first renderer bytecode run them instead
 1577:         # attributed their exception to the renderer, which logged it and let
 1578:         # sign_in() poll on until the device code expired.
+1579:         PyErr_CheckSignals()
      __pyx_t_8 = PyErr_CheckSignals(); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 1579, __pyx_L7_error)

+1580:         if CYTHON_COMPILING_IN_PYPY:
      __pyx_t_2 = (CYTHON_COMPILING_IN_PYPY != 0);

      if (__pyx_t_2) {
/* … */
      }
 1581:             # PyPy's cpyext does NOT run pending handlers from
 1582:             # PyErr_CheckSignals(); it delivers a signal only while
 1583:             # interpreting bytecode, and every frame from the C signal
 1584:             # handler to here is compiled C. Without a boundary of our own
 1585:             # the first bytecode is renderer code, where an ordinary
 1586:             # `Exception` raised by a SIGALRM handler is indistinguishable
 1587:             # from a renderer bug -- logged, swallowed, and sign_in() polls
 1588:             # to the device-code deadline.
+1589:             _oidc_signal_tick()
        __pyx_t_9 = __pyx_f_7questdb_7_client__oidc_signal_tick(); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 1589, __pyx_L7_error)

+1590:         signal_codes = _oidc_signal_handler_codes()
      __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_signal_handler_codes(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1590, __pyx_L7_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_signal_codes, __pyx_t_1);
      __pyx_t_1 = 0;
+1591:     except BaseException as exc:
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_8) {
      __Pyx_AddTraceback("questdb._client._oidc_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_10, &__pyx_t_11) < 0) __PYX_ERR(1, 1591, __pyx_L9_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_10);
      __pyx_v_exc = __pyx_t_10;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L18_return: {
          __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          goto __pyx_L10_except_return;
        }
      }
    }
    goto __pyx_L9_except_error;
+1592:         _oidc_park_event_interrupt(<OidcDeviceAuth>provider, exc, event.kind)
        __pyx_f_7questdb_7_client__oidc_park_event_interrupt(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider), __pyx_v_exc, __pyx_v_event->kind);
+1593:         return
        {
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L18_return;
      }
+1594:     renderer = (<OidcDeviceAuth>provider)._renderer
  __pyx_t_11 = ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_renderer;
  __Pyx_INCREF(__pyx_t_11);
  __pyx_v_renderer = __pyx_t_11;
  __pyx_t_11 = 0;
+1595:     if renderer is None:
  __pyx_t_2 = (__pyx_v_renderer == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+1596:         return
    {
    }
    goto __pyx_L0;
+1597:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L27_try_end;
    __pyx_L22_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
/* … */
    __pyx_L24_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L25_except_return:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
    goto __pyx_L0;
    __pyx_L23_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
    __pyx_L27_try_end:;
  }
+1598:         if event.kind == QUESTDB_OIDC_EVENT_PROMPT:
      switch (__pyx_v_event->kind) {
        case QUESTDB_OIDC_EVENT_PROMPT:
/* … */
        break;
        case QUESTDB_OIDC_EVENT_WAITING:
 1599:             # These fields were appended to the public C struct. Static linkage
 1600:             # makes this build use matching layouts today, but the callback ABI
 1601:             # explicitly supports an older shared library: never read beyond
 1602:             # the size that producer reported.
+1603:             if _oidc_event_has_browser_target(event.struct_size):
        __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_event_has_browser_target(__pyx_v_event->struct_size); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1603, __pyx_L22_error)
        if (__pyx_t_2) {
/* … */
        }
+1604:                 browser_target = _oidc_text(
          __pyx_t_11 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_event->browser_target, __pyx_v_event->browser_target_len); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1604, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF_SET(__pyx_v_browser_target, __pyx_t_11);
          __pyx_t_11 = 0;
 1605:                     event.browser_target, event.browser_target_len)
+1606:             if _oidc_event_has_interval(event.struct_size):
        __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_event_has_interval(__pyx_v_event->struct_size); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 1606, __pyx_L22_error)
        if (__pyx_t_2) {
/* … */
        }
+1607:                 interval_seconds = event.interval_seconds
          __pyx_t_12 = __pyx_v_event->interval_seconds;

          __pyx_v_interval_seconds = __pyx_t_12;
+1608:             (<OidcDeviceAuth>provider)._prompt_renderer = renderer
        __Pyx_INCREF(__pyx_v_renderer);
        __Pyx_GIVEREF(__pyx_v_renderer);
        __Pyx_GOTREF(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_prompt_renderer);
        __Pyx_DECREF_SET(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_prompt_renderer, __pyx_v_renderer);
+1609:             renderer.on_prompt({
        __pyx_t_10 = __pyx_v_renderer;
        __Pyx_INCREF(__pyx_t_10);
+1610:                 'user_code': _oidc_text(event.user_code, event.user_code_len),
        __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1610, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_13 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_event->user_code, __pyx_v_event->user_code_len); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 1610, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_13);
        if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_user_code, __pyx_t_13) < (0)) __PYX_ERR(1, 1610, __pyx_L22_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+1611:                 'verification_uri': _oidc_text(
        __pyx_t_13 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_event->verification_uri, __pyx_v_event->verification_uri_len); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 1611, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_13);
        if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_verification_uri, __pyx_t_13) < (0)) __PYX_ERR(1, 1610, __pyx_L22_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 1612:                     event.verification_uri, event.verification_uri_len),
+1613:                 'verification_uri_complete': _oidc_text(
        __pyx_t_13 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_event->verification_uri_complete, __pyx_v_event->verification_uri_complete_len); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 1613, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_13);
        if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_verification_uri_complete, __pyx_t_13) < (0)) __PYX_ERR(1, 1610, __pyx_L22_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 1614:                     event.verification_uri_complete,
 1615:                     event.verification_uri_complete_len),
 1616:                 # The bounded values the native polling loop actually uses,
 1617:                 # matching Java's complete device challenge. Each is passed with
 1618:                 # the C type the event declares -- `expires_in` a double (as
 1619:                 # `on_waiting` and `on_success` also pass it), `interval` a
 1620:                 # uint64 -- rather than narrowed here: a C double->unsigned cast
 1621:                 # is in range only because native happens to clamp the lifetime.
+1622:                 'expires_in': event.expires_in_seconds,
        __pyx_t_13 = PyFloat_FromDouble(__pyx_v_event->expires_in_seconds); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 1622, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_13);
        if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_expires_in, __pyx_t_13) < (0)) __PYX_ERR(1, 1610, __pyx_L22_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+1623:                 'interval': interval_seconds,
        __pyx_t_13 = __Pyx_PyLong_From_uint64_t(__pyx_v_interval_seconds); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 1623, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_13);
        if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_interval, __pyx_t_13) < (0)) __PYX_ERR(1, 1610, __pyx_L22_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 1624:                 # This is the only native-vetted actionable URL. Built-in
 1625:                 # renderers prefer it for links and QR codes.
+1626:                 'browser_target': browser_target,
        if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_browser_target, __pyx_v_browser_target) < (0)) __PYX_ERR(1, 1610, __pyx_L22_error)
        __pyx_t_14 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_1};
          __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_on_prompt, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1609, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_11);
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 1627:             })
+1628:         elif event.kind == QUESTDB_OIDC_EVENT_WAITING:
        break;
        case QUESTDB_OIDC_EVENT_SUCCESS:
+1629:             renderer.on_waiting(event.seconds_left)
        __pyx_t_1 = __pyx_v_renderer;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_10 = PyFloat_FromDouble(__pyx_v_event->seconds_left); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1629, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_14 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_10};
          __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_on_waiting, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1629, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_11);
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+1630:         elif event.kind == QUESTDB_OIDC_EVENT_SUCCESS:
        break;
        case QUESTDB_OIDC_EVENT_FAILURE:
+1631:             (<OidcDeviceAuth>provider)._prompt_renderer = None
        __Pyx_INCREF(Py_None);
        __Pyx_GIVEREF(Py_None);
        __Pyx_GOTREF(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_prompt_renderer);
        __Pyx_DECREF_SET(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_prompt_renderer, Py_None);
+1632:             renderer.on_success(
        __pyx_t_10 = __pyx_v_renderer;
        __Pyx_INCREF(__pyx_t_10);
+1633:                 _oidc_text(event.identity, event.identity_len),
        __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_event->identity, __pyx_v_event->identity_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1633, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_1);
+1634:                 event.expires_in_seconds)
        __pyx_t_13 = PyFloat_FromDouble(__pyx_v_event->expires_in_seconds); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 1634, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_14 = 0;
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_1, __pyx_t_13};
          __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_on_success, __pyx_callargs+__pyx_t_14, (3-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1632, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_11);
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+1635:         elif event.kind == QUESTDB_OIDC_EVENT_FAILURE:
        break;
        default: break;
      }
+1636:             (<OidcDeviceAuth>provider)._prompt_renderer = None
        __Pyx_INCREF(Py_None);
        __Pyx_GIVEREF(Py_None);
        __Pyx_GOTREF(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_prompt_renderer);
        __Pyx_DECREF_SET(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider)->_prompt_renderer, Py_None);
+1637:             renderer.on_failure(
        __pyx_t_13 = __pyx_v_renderer;
        __Pyx_INCREF(__pyx_t_13);
+1638:                 _oidc_text(event.message, event.message_len) or
        __pyx_t_10 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_event->message, __pyx_v_event->message_len); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1638, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1638, __pyx_L22_error)
        if (!__pyx_t_2) {
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        } else {
          __Pyx_INCREF(__pyx_t_10);
          __pyx_t_1 = __pyx_t_10;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          goto __pyx_L30_bool_binop_done;
        }
+1639:                 'OIDC sign-in failed.')
        __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_OIDC_sign_in_failed);
        __pyx_t_1 = __pyx_mstate_global->__pyx_kp_u_OIDC_sign_in_failed;
        __pyx_L30_bool_binop_done:;
        __pyx_t_14 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_1};
          __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_on_failure, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 1637, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_11);
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+1640:     except BaseException as exc:
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_8) {
      __Pyx_AddTraceback("questdb._client._oidc_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_1, &__pyx_t_13) < 0) __PYX_ERR(1, 1640, __pyx_L24_except_error)
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_v_exc = __pyx_t_1;
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          goto __pyx_L38;
        }
        __pyx_L37_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_30 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_30, &__pyx_t_29, &__pyx_t_28);
          if ( unlikely(__Pyx_GetException(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_16);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_30);
          __Pyx_XGOTREF(__pyx_t_29);
          __Pyx_XGOTREF(__pyx_t_28);
          __pyx_t_26 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_27 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_30);
          __Pyx_XGIVEREF(__pyx_t_29);
          __Pyx_XGIVEREF(__pyx_t_28);
          __Pyx_ExceptionReset(__pyx_t_30, __pyx_t_29, __pyx_t_28);
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ErrRestore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
          __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_30 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0;
          __pyx_lineno = __pyx_t_26; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_27;
          goto __pyx_L24_except_error;
        }
        __pyx_L36_return: {
          __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          goto __pyx_L25_except_return;
        }
        __pyx_L38:;
      }
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      goto __pyx_L23_exception_handled;
    }
    goto __pyx_L24_except_error;
+1641:         try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          goto __pyx_L46_try_end;
          __pyx_L39_error:;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
          __pyx_L41_except_error:;
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
          goto __pyx_L37_error;
          __pyx_L42_except_return:;
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
          goto __pyx_L36_return;
          __pyx_L46_try_end:;
        }
+1642:             interrupted = (not isinstance(exc, Exception)
            __pyx_t_4 = __Pyx_PyExc_Exception_Check(__pyx_v_exc); 
            __pyx_t_3 = (!__pyx_t_4);


            if (!__pyx_t_3) {

            } else {

              __pyx_t_2 = __pyx_t_3;

              goto __pyx_L47_bool_binop_done;
            }
+1643:                            or _oidc_raised_in_signal_handler(exc, signal_codes))
            __pyx_t_3 = __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(__pyx_v_exc, __pyx_v_signal_codes); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1643, __pyx_L39_error)

            __pyx_t_2 = __pyx_t_3;

            __pyx_L47_bool_binop_done:;
            __pyx_v_interrupted = __pyx_t_2;
+1644:         except BaseException as check_exc:
          __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
          if (__pyx_t_8) {
            __Pyx_AddTraceback("questdb._client._oidc_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_18, &__pyx_t_19) < 0) __PYX_ERR(1, 1644, __pyx_L41_except_error)
            __Pyx_XGOTREF(__pyx_t_10);
            __Pyx_XGOTREF(__pyx_t_18);
            __Pyx_XGOTREF(__pyx_t_19);
            __Pyx_INCREF(__pyx_t_18);
            __pyx_v_check_exc = __pyx_t_18;
            /*try:*/ {
/* … */
            /*finally:*/ {
              __pyx_L53_return: {
                __Pyx_DECREF(__pyx_v_check_exc); __pyx_v_check_exc = 0;
                goto __pyx_L42_except_return;
              }
            }
          }
          goto __pyx_L41_except_error;
 1645:             # A second signal can arrive while examining the first traceback.
+1646:             _oidc_park_event_interrupt(
              __pyx_f_7questdb_7_client__oidc_park_event_interrupt(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider), __pyx_v_check_exc, __pyx_v_event->kind);
 1647:                 <OidcDeviceAuth>provider, check_exc, event.kind)
+1648:             return
              {
              }
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              goto __pyx_L53_return;
            }
+1649:         if interrupted:
        if (__pyx_v_interrupted) {
/* … */
        }
 1650:             # An arbitrary Python signal handler may raise an Exception, not
 1651:             # just KeyboardInterrupt/SystemExit. The signal handler's frame
 1652:             # distinguishes it from an ordinary best-effort renderer failure.
+1653:             _oidc_park_event_interrupt(
          __pyx_f_7questdb_7_client__oidc_park_event_interrupt(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider), __pyx_v_exc, __pyx_v_event->kind);
 1654:                 <OidcDeviceAuth>provider, exc, event.kind)
+1655:             return
          {
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          goto __pyx_L36_return;
+1656:         try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          goto __pyx_L64_try_end;
          __pyx_L57_error:;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
/* … */
          __pyx_L59_except_error:;
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_16, __pyx_t_15);
          goto __pyx_L37_error;
          __pyx_L60_except_return:;
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_16, __pyx_t_15);
          goto __pyx_L36_return;
          __pyx_L58_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_16, __pyx_t_15);
          __pyx_L64_try_end:;
        }
      }
+1657:             logging.getLogger('questdb').exception(
            __pyx_t_20 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 1657, __pyx_L57_error)
            __Pyx_GOTREF(__pyx_t_21);
            __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 1657, __pyx_L57_error)
            __Pyx_GOTREF(__pyx_t_22);
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __pyx_t_14 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_22))) {
              __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_22);
              assert(__pyx_t_20);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_22);
              __Pyx_INCREF(__pyx_t_20);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_22, __pyx__function);
              __pyx_t_14 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_mstate_global->__pyx_n_u_questdb};
              __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_22, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
              __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
              if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1657, __pyx_L57_error)
              __Pyx_GOTREF(__pyx_t_10);
            }
            __pyx_t_18 = __pyx_t_10;
            __Pyx_INCREF(__pyx_t_18);
            __pyx_t_14 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_mstate_global->__pyx_kp_u_OIDC_renderer_callback_failed};
              __pyx_t_19 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exception, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1657, __pyx_L57_error)
              __Pyx_GOTREF(__pyx_t_19);
            }
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 1658:                 'OIDC renderer callback failed')
+1659:         except BaseException as log_exc:
          __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
          if (__pyx_t_8) {
            __Pyx_AddTraceback("questdb._client._oidc_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_19, &__pyx_t_10, &__pyx_t_18) < 0) __PYX_ERR(1, 1659, __pyx_L59_except_error)
            __Pyx_XGOTREF(__pyx_t_19);
            __Pyx_XGOTREF(__pyx_t_10);
            __Pyx_XGOTREF(__pyx_t_18);
            __Pyx_INCREF(__pyx_t_10);
            __pyx_v_log_exc = __pyx_t_10;
            /*try:*/ {
/* … */
            /*finally:*/ {
              /*normal exit:*/{
                __Pyx_DECREF(__pyx_v_log_exc); __pyx_v_log_exc = 0;
                goto __pyx_L71;
              }
              __pyx_L70_error:;
              /*exception exit:*/{
                __Pyx_PyThreadState_declare
                __Pyx_PyThreadState_assign
                __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0;
                __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
                __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
                __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
                 __Pyx_ExceptionSwap(&__pyx_t_28, &__pyx_t_29, &__pyx_t_30);
                if ( unlikely(__Pyx_GetException(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23);
                __Pyx_XGOTREF(__pyx_t_25);
                __Pyx_XGOTREF(__pyx_t_24);
                __Pyx_XGOTREF(__pyx_t_23);
                __Pyx_XGOTREF(__pyx_t_28);
                __Pyx_XGOTREF(__pyx_t_29);
                __Pyx_XGOTREF(__pyx_t_30);
                __pyx_t_8 = __pyx_lineno; __pyx_t_26 = __pyx_clineno; __pyx_t_27 = __pyx_filename;
                {
                  __Pyx_DECREF(__pyx_v_log_exc); __pyx_v_log_exc = 0;
                }
                __Pyx_XGIVEREF(__pyx_t_28);
                __Pyx_XGIVEREF(__pyx_t_29);
                __Pyx_XGIVEREF(__pyx_t_30);
                __Pyx_ExceptionReset(__pyx_t_28, __pyx_t_29, __pyx_t_30);
                __Pyx_XGIVEREF(__pyx_t_25);
                __Pyx_XGIVEREF(__pyx_t_24);
                __Pyx_XGIVEREF(__pyx_t_23);
                __Pyx_ErrRestore(__pyx_t_25, __pyx_t_24, __pyx_t_23);
                __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0;
                __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_26; __pyx_filename = __pyx_t_27;
                goto __pyx_L59_except_error;
              }
              __pyx_L69_return: {
                __Pyx_DECREF(__pyx_v_log_exc); __pyx_v_log_exc = 0;
                goto __pyx_L60_except_return;
              }
              __pyx_L71:;
            }
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
            goto __pyx_L58_exception_handled;
          }
          goto __pyx_L59_except_error;
 1660:             # Signals can also arrive *inside* the logger reporting a broken
 1661:             # renderer. Neither exception may unwind across the native ABI.
+1662:             try:
              {
                /*try:*/ {
/* … */
                }
                __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
                __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
                __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
                goto __pyx_L79_try_end;
                __pyx_L72_error:;
                __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
                __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
                __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
/* … */
                __pyx_L74_except_error:;
                __Pyx_XGIVEREF(__pyx_t_23);
                __Pyx_XGIVEREF(__pyx_t_24);
                __Pyx_XGIVEREF(__pyx_t_25);
                __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
                goto __pyx_L70_error;
                __pyx_L75_except_return:;
                __Pyx_XGIVEREF(__pyx_t_23);
                __Pyx_XGIVEREF(__pyx_t_24);
                __Pyx_XGIVEREF(__pyx_t_25);
                __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
                goto __pyx_L69_return;
                __pyx_L79_try_end:;
              }
 1663:                 interrupted = (
+1664:                     not isinstance(log_exc, Exception)
                  __pyx_t_3 = __Pyx_PyExc_Exception_Check(__pyx_v_log_exc); 
                  __pyx_t_4 = (!__pyx_t_3);


                  if (!__pyx_t_4) {

                  } else {

                    __pyx_t_2 = __pyx_t_4;

                    goto __pyx_L80_bool_binop_done;
                  }
+1665:                     or _oidc_raised_in_signal_handler(log_exc, signal_codes))
                  __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(__pyx_v_log_exc, __pyx_v_signal_codes); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1665, __pyx_L72_error)

                  __pyx_t_2 = __pyx_t_4;

                  __pyx_L80_bool_binop_done:;
                  __pyx_v_interrupted = __pyx_t_2;
+1666:             except BaseException as check_exc:
                __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
                if (__pyx_t_8) {
                  __Pyx_AddTraceback("questdb._client._oidc_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
                  if (__Pyx_GetException(&__pyx_t_22, &__pyx_t_20, &__pyx_t_21) < 0) __PYX_ERR(1, 1666, __pyx_L74_except_error)
                  __Pyx_XGOTREF(__pyx_t_22);
                  __Pyx_XGOTREF(__pyx_t_20);
                  __Pyx_XGOTREF(__pyx_t_21);
                  __Pyx_INCREF(__pyx_t_20);
                  __pyx_v_check_exc = __pyx_t_20;
                  /*try:*/ {
/* … */
                  /*finally:*/ {
                    __pyx_L86_return: {
                      __Pyx_DECREF(__pyx_v_check_exc); __pyx_v_check_exc = 0;
                      goto __pyx_L75_except_return;
                    }
                  }
                }
                goto __pyx_L74_except_error;
+1667:                 _oidc_park_event_interrupt(
                    __pyx_f_7questdb_7_client__oidc_park_event_interrupt(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider), __pyx_v_check_exc, __pyx_v_event->kind);
 1668:                     <OidcDeviceAuth>provider, check_exc, event.kind)
+1669:                 return
                    {
                    }
                    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
                    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                    __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
                    goto __pyx_L86_return;
                  }
+1670:             if interrupted:
              if (__pyx_v_interrupted) {
/* … */
              }
            }
+1671:                 _oidc_park_event_interrupt(
                __pyx_f_7questdb_7_client__oidc_park_event_interrupt(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_provider), __pyx_v_log_exc, __pyx_v_event->kind);
 1672:                     <OidcDeviceAuth>provider, log_exc, event.kind)
 1673: 
 1674: 
+1675: cdef void _oidc_park_event_interrupt(
static void __pyx_f_7questdb_7_client__oidc_park_event_interrupt(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_provider, PyObject *__pyx_v_exc, int __pyx_v_kind) {
/* … */
  /* function exit code */

  __Pyx_RefNannyFinishContext();
}
 1676:         OidcDeviceAuth provider, object exc, int kind) noexcept:
 1677:     """Stash an interruption raised in a renderer event for sign_in() to
 1678:     re-raise, and cancel the device flow so it actually stops.
 1679: 
 1680:     sign_in() releases the GIL for the whole native flow, so the event callback
 1681:     -- and the persistence diagnostic, see `_OidcForegroundCall` -- is where
 1682:     Python bytecode, and therefore Python signal handling, runs on the caller's
 1683:     thread. Swallowing an interruption there made Ctrl-C print a traceback and
 1684:     change nothing, leaving sign_in() polling until the device code expired.
 1685:     Must not raise: it runs on the error path of a ``noexcept`` callback.
 1686: 
 1687:     A second interruption -- two signals arriving together, or one whose
 1688:     exception was queued for the main thread and is raised here by its pending
 1689:     call -- is queued for the main thread rather than dropped, as
 1690:     `_oidc_park_foreground_interrupt` does. Left unscheduled, it surfaces from
 1691:     sign_in()'s native-return boundary, chained to the first.
 1692:     """
+1693:     try:
  {
    /*try:*/ {
/* … */
    }
  }
+1694:         if provider._interrupt is None:
      __pyx_t_4 = (__pyx_v_provider->_interrupt == Py_None);
      if (__pyx_t_4) {
/* … */
        goto __pyx_L9;
      }
+1695:             provider._interrupt = exc
        __Pyx_INCREF(__pyx_v_exc);
        __Pyx_GIVEREF(__pyx_v_exc);
        __Pyx_GOTREF(__pyx_v_provider->_interrupt);
        __Pyx_DECREF_SET(__pyx_v_provider->_interrupt, __pyx_v_exc);
+1696:         elif questdb_thread_ident() == _OIDC_MAIN_THREAD_IDENT:
      __pyx_t_4 = (PyThread_get_thread_ident() == __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);

      if (__pyx_t_4) {
/* … */
      }
      __pyx_L9:;
+1697:             _oidc_park_main(exc)
        __pyx_f_7questdb_7_client__oidc_park_main(__pyx_v_exc);
+1698:         if kind in (QUESTDB_OIDC_EVENT_PROMPT, QUESTDB_OIDC_EVENT_WAITING):
      switch (__pyx_v_kind) {
        case QUESTDB_OIDC_EVENT_PROMPT:
        case QUESTDB_OIDC_EVENT_WAITING:
/* … */
        break;
        default: break;
      }
 1699:             # Only the waiting phase needs cancelling. On SUCCESS/FAILURE the
 1700:             # flow is already ending; in particular, SUCCESS has already
 1701:             # committed the token that the interrupt must not discard.
+1702:             _oidc_cancel_sign_in_from_callback(provider)
        __pyx_f_7questdb_7_client__oidc_cancel_sign_in_from_callback(__pyx_v_provider);
 1703:     except BaseException:
 1704:         pass
 1705: 
 1706: 
+1707: cdef void _oidc_diagnostic_dispatch(
static void __pyx_f_7questdb_7_client__oidc_diagnostic_dispatch(void *__pyx_v_user_data, struct questdb_oidc_diagnostic const *__pyx_v_diagnostic) {
  size_t __pyx_v_provider_id;
  int __pyx_v_on_main;
  int __pyx_v_registered;
  PyObject *__pyx_v_signal_codes = 0;
  PyObject *__pyx_v_thread_ids = 0;
  PyObject *__pyx_v_lock = 0;
  PyObject *__pyx_v_region = 0;
  PyObject *__pyx_v_exc = NULL;
  int __pyx_v_interrupted;
  PyObject *__pyx_v_check_exc = NULL;
  PyObject *__pyx_v_remaining = NULL;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_WriteUnraisable("questdb._client._oidc_diagnostic_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;



  __Pyx_XDECREF(__pyx_v_signal_codes);
  __Pyx_XDECREF(__pyx_v_thread_ids);
  __Pyx_XDECREF(__pyx_v_lock);
  __Pyx_XDECREF(__pyx_v_region);
  __Pyx_XDECREF(__pyx_v_exc);

  __Pyx_XDECREF(__pyx_v_check_exc);
  __Pyx_XDECREF(__pyx_v_remaining);



  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
}
 1708:         void* user_data,
 1709:         const questdb_oidc_diagnostic* diagnostic) noexcept with gil:
+1710:     cdef size_t provider_id = <size_t>user_data
  __pyx_v_provider_id = ((size_t)__pyx_v_user_data);
+1711:     cdef bint on_main = questdb_thread_ident() == _OIDC_MAIN_THREAD_IDENT
  __pyx_v_on_main = (PyThread_get_thread_ident() == __pyx_v_7questdb_7_client__OIDC_MAIN_THREAD_IDENT);
+1712:     cdef bint registered = False
  __pyx_v_registered = 0;
+1713:     cdef object signal_codes = ()
  __Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple);
  __pyx_v_signal_codes = __pyx_mstate_global->__pyx_empty_tuple;
+1714:     cdef object thread_ids = None
  __Pyx_INCREF(Py_None);
  __pyx_v_thread_ids = Py_None;
 1715:     cdef object lock
+1716:     cdef object region = None
  __Pyx_INCREF(Py_None);
  __pyx_v_region = Py_None;
+1717:     if on_main:
  if (__pyx_v_on_main) {
/* … */
  }
+1718:         region = _oidc_main_region_enter(_OIDC_REGION_DIAGNOSTIC)
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_main_region_enter(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_region, __pyx_t_1);
    __pyx_t_1 = 0;
+1719:     try:
  /*try:*/ {
+1720:         lock = _oidc_registry_lock_acquire()
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_registry_lock_acquire(); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1720, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_lock = __pyx_t_1;
    __pyx_t_1 = 0;
+1721:         try:
    /*try:*/ {
+1722:             _OIDC_DIAGNOSTICS_ACTIVE[provider_id] = (
      if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
        __PYX_ERR(1, 1722, __pyx_L8_error)
      }
      __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1722, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely((PyDict_SetItem(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_2, __pyx_t_1) < 0))) __PYX_ERR(1, 1722, __pyx_L8_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1723:                 _OIDC_DIAGNOSTICS_ACTIVE.get(provider_id, 0) + 1)
      if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
        __PYX_ERR(1, 1723, __pyx_L8_error)
      }
      __pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1723, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_1, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1723, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyLong_AddObjC(__pyx_t_2, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1723, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1724:             registered = True
      __pyx_v_registered = 1;
    }
 1725:         finally:
+1726:             lock.release()
    /*finally:*/ {
      /*normal exit:*/{
        __pyx_t_2 = __pyx_v_lock;
        __Pyx_INCREF(__pyx_t_2);
        __pyx_t_3 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
          __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1726, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L9;
      }
      __pyx_L8_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
        if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_12);
        __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
        {
          __pyx_t_2 = __pyx_v_lock;
          __Pyx_INCREF(__pyx_t_2);
          __pyx_t_3 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
            __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1726, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
        __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
        goto __pyx_L5_error;
        __pyx_L11_error:;
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
        goto __pyx_L5_error;
      }
      __pyx_L9:;
    }
+1727:         thread_ids = getattr(_OIDC_DIAGNOSTIC_LOCAL, 'ids', None)
    __pyx_t_1 = __pyx_v_7questdb_7_client__OIDC_DIAGNOSTIC_LOCAL;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ids, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1727, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_thread_ids, __pyx_t_2);
    __pyx_t_2 = 0;
+1728:         if thread_ids is None:
    __pyx_t_13 = (__pyx_v_thread_ids == Py_None);
    if (__pyx_t_13) {
/* … */
    }
+1729:             thread_ids = _OIDC_DIAGNOSTIC_LOCAL.ids = []
      __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1729, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_thread_ids, __pyx_t_2);
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTIC_LOCAL, __pyx_mstate_global->__pyx_n_u_ids, __pyx_t_2) < (0)) __PYX_ERR(1, 1729, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1730:         thread_ids.append(provider_id)
    __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1730, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_14 = __Pyx_PyObject_Append(__pyx_v_thread_ids, __pyx_t_2); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(1, 1730, __pyx_L5_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

+1731:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L18_try_end;
      __pyx_L13_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
      __pyx_L15_except_error:;
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10);
      goto __pyx_L5_error;
      __pyx_L16_except_return:;
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10);
      goto __pyx_L4_return;
      __pyx_L18_try_end:;
    }
 1732:             # On the thread running sign_in(), token(), clear() or an attached
 1733:             # transport's token pull, this callback is where CPython runs the
 1734:             # Python signal handlers that became pending while native ran with
 1735:             # the GIL released. Run them HERE, before any logging code, exactly
 1736:             # as the renderer event path does: whatever they raise -- Ctrl-C,
 1737:             # a SIGTERM handler's SystemExit, but equally a SIGALRM deadline's
 1738:             # ordinary TimeoutError -- interrupts the call this diagnostic runs
 1739:             # inside, and must not be mistaken for a logging-handler failure
 1740:             # and swallowed.
+1741:             PyErr_CheckSignals()
        __pyx_t_5 = PyErr_CheckSignals(); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 1741, __pyx_L13_error)

+1742:             if CYTHON_COMPILING_IN_PYPY:
        __pyx_t_13 = (CYTHON_COMPILING_IN_PYPY != 0);

        if (__pyx_t_13) {
/* … */
        }
 1743:                 # See `_oidc_event_dispatch`: cpyext delivers signals only at
 1744:                 # bytecode boundaries.
+1745:                 _oidc_signal_tick()
          __pyx_t_15 = __pyx_f_7questdb_7_client__oidc_signal_tick(); if (unlikely(__pyx_t_15 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 1745, __pyx_L13_error)

+1746:             signal_codes = _oidc_signal_handler_codes()
        __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_signal_handler_codes(); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1746, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF_SET(__pyx_v_signal_codes, __pyx_t_2);
        __pyx_t_2 = 0;
+1747:         except BaseException as exc:
      __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
      if (__pyx_t_5) {
        __Pyx_AddTraceback("questdb._client._oidc_diagnostic_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_16) < 0) __PYX_ERR(1, 1747, __pyx_L15_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_16);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_v_exc = __pyx_t_1;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L24_return: {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            goto __pyx_L16_except_return;
          }
        }
      }
      goto __pyx_L15_except_error;
+1748:             _oidc_park_foreground_interrupt(exc)
          __pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(__pyx_v_exc);
+1749:             _oidc_park_pending_signals()
          __pyx_f_7questdb_7_client__oidc_park_pending_signals();
+1750:             return
          {
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          goto __pyx_L24_return;
        }
+1751:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      goto __pyx_L32_try_end;
      __pyx_L27_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
      __pyx_L29_except_error:;
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
      goto __pyx_L5_error;
      __pyx_L30_except_return:;
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
      goto __pyx_L4_return;
      __pyx_L28_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
      __pyx_L32_try_end:;
    }
  }
+1752:             if diagnostic.kind == QUESTDB_OIDC_DIAGNOSTIC_PERSISTENCE_WARNING:
        __pyx_t_13 = (__pyx_v_diagnostic->kind == QUESTDB_OIDC_DIAGNOSTIC_PERSISTENCE_WARNING);

        if (__pyx_t_13) {
/* … */
        }
+1753:                 logging.getLogger('questdb').warning(
          __pyx_t_17 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 1753, __pyx_L27_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1753, __pyx_L27_error)
          __Pyx_GOTREF(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_3 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_19))) {
            __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_19);
            assert(__pyx_t_17);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_19);
            __Pyx_INCREF(__pyx_t_17);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_19, __pyx__function);
            __pyx_t_3 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_mstate_global->__pyx_n_u_questdb};
            __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1753, __pyx_L27_error)
            __Pyx_GOTREF(__pyx_t_2);
          }
          __pyx_t_1 = __pyx_t_2;
          __Pyx_INCREF(__pyx_t_1);
 1754:                     'OIDC %s',
+1755:                     _oidc_text(diagnostic.message, diagnostic.message_len) or
          __pyx_t_17 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_diagnostic->message, __pyx_v_diagnostic->message_len); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 1755, __pyx_L27_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(1, 1755, __pyx_L27_error)
          if (!__pyx_t_13) {
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          } else {
            __Pyx_INCREF(__pyx_t_17);
            __pyx_t_19 = __pyx_t_17;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            goto __pyx_L34_bool_binop_done;
          }
+1756:                     'token-store persistence operation failed')
          __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_token_store_persistence_operatio);
          __pyx_t_19 = __pyx_mstate_global->__pyx_kp_u_token_store_persistence_operatio;
          __pyx_L34_bool_binop_done:;
          __pyx_t_3 = 0;
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_OIDC_s, __pyx_t_19};
            __pyx_t_16 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_warning, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 1753, __pyx_L27_error)
            __Pyx_GOTREF(__pyx_t_16);
          }
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+1757:         except BaseException as exc:
      __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
      if (__pyx_t_5) {
        __Pyx_AddTraceback("questdb._client._oidc_diagnostic_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_16, &__pyx_t_2, &__pyx_t_19) < 0) __PYX_ERR(1, 1757, __pyx_L29_except_error)
        __Pyx_XGOTREF(__pyx_t_16);
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_19);
        __Pyx_INCREF(__pyx_t_2);
        __pyx_v_exc = __pyx_t_2;
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            goto __pyx_L42;
          }
          __pyx_L41_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
            if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
            __Pyx_XGOTREF(__pyx_t_7);
            __Pyx_XGOTREF(__pyx_t_8);
            __Pyx_XGOTREF(__pyx_t_9);
            __Pyx_XGOTREF(__pyx_t_22);
            __Pyx_XGOTREF(__pyx_t_23);
            __Pyx_XGOTREF(__pyx_t_24);
            __pyx_t_5 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_7);
            __Pyx_XGIVEREF(__pyx_t_8);
            __Pyx_XGIVEREF(__pyx_t_9);
            __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
            __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
            __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_6;
            goto __pyx_L29_except_error;
          }
          __pyx_L40_return: {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            goto __pyx_L30_except_return;
          }
          __pyx_L42:;
        }
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
        goto __pyx_L28_exception_handled;
      }
      goto __pyx_L29_except_error;
+1758:             try:
          {
            /*try:*/ {
/* … */
            }
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            goto __pyx_L50_try_end;
            __pyx_L43_error:;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
            __pyx_L45_except_error:;
            __Pyx_XGIVEREF(__pyx_t_9);
            __Pyx_XGIVEREF(__pyx_t_8);
            __Pyx_XGIVEREF(__pyx_t_7);
            __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
            goto __pyx_L41_error;
            __pyx_L46_except_return:;
            __Pyx_XGIVEREF(__pyx_t_9);
            __Pyx_XGIVEREF(__pyx_t_8);
            __Pyx_XGIVEREF(__pyx_t_7);
            __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
            goto __pyx_L40_return;
            __pyx_L50_try_end:;
          }
+1759:                 interrupted = (not isinstance(exc, Exception)
              __pyx_t_20 = __Pyx_PyExc_Exception_Check(__pyx_v_exc); 
              __pyx_t_21 = (!__pyx_t_20);


              if (!__pyx_t_21) {

              } else {

                __pyx_t_13 = __pyx_t_21;

                goto __pyx_L51_bool_binop_done;
              }
+1760:                                or _oidc_raised_in_signal_handler(
              __pyx_t_21 = __pyx_f_7questdb_7_client__oidc_raised_in_signal_handler(__pyx_v_exc, __pyx_v_signal_codes); if (unlikely(__pyx_t_21 == ((int)-1))) __PYX_ERR(1, 1760, __pyx_L43_error)

              __pyx_t_13 = __pyx_t_21;

              __pyx_L51_bool_binop_done:;
              __pyx_v_interrupted = __pyx_t_13;
 1761:                                    exc, signal_codes))
+1762:             except BaseException as check_exc:
            __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
            if (__pyx_t_5) {
              __Pyx_AddTraceback("questdb._client._oidc_diagnostic_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_17, &__pyx_t_18) < 0) __PYX_ERR(1, 1762, __pyx_L45_except_error)
              __Pyx_XGOTREF(__pyx_t_1);
              __Pyx_XGOTREF(__pyx_t_17);
              __Pyx_XGOTREF(__pyx_t_18);
              __Pyx_INCREF(__pyx_t_17);
              __pyx_v_check_exc = __pyx_t_17;
              /*try:*/ {
/* … */
              /*finally:*/ {
                __pyx_L57_return: {
                  __Pyx_DECREF(__pyx_v_check_exc); __pyx_v_check_exc = 0;
                  goto __pyx_L46_except_return;
                }
              }
            }
            goto __pyx_L45_except_error;
+1763:                 _oidc_park_foreground_interrupt(check_exc)
                __pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(__pyx_v_check_exc);
+1764:                 return
                {
                }
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                goto __pyx_L57_return;
              }
+1765:             if interrupted:
          if (__pyx_v_interrupted) {
/* … */
          }
        }
 1766:                 # A signal delivered during logging is not an ordinary
 1767:                 # best-effort handler failure, even when its handler raises
 1768:                 # TimeoutError (an Exception). Do not lose the caller's timer.
+1769:                 _oidc_park_foreground_interrupt(exc)
            __pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(__pyx_v_exc);
+1770:                 _oidc_park_pending_signals()
            __pyx_f_7questdb_7_client__oidc_park_pending_signals();
 1771:             # Otherwise the diagnostic remains best-effort: a logging handler
 1772:             # failure must not turn a usable token into an auth failure.
 1773:     finally:
 1774:         # Apart from waiting for the registry lock and the notification,
 1775:         # everything here is C-level and runs no bytecode, so no pending signal
 1776:         # handler can interrupt it. A contended lock wait and `notify_all()`
 1777:         # both run pending handlers: one that raises there (Ctrl-C, a SIGALRM
 1778:         # deadline) must neither skip this bookkeeping -- leaving this thread
 1779:         # marked as inside the callback, which made every later pool close
 1780:         # fail, and the main-thread depth stuck above zero -- nor be lost in
 1781:         # this `noexcept` callback. Park it like any other interrupt delivered
 1782:         # here.
+1783:         if thread_ids is not None and thread_ids:
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_21 = (__pyx_v_thread_ids != Py_None);
      if (__pyx_t_21) {

      } else {

        __pyx_t_13 = __pyx_t_21;

        goto __pyx_L66_bool_binop_done;
      }
      __pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_v_thread_ids); if (unlikely((__pyx_t_21 < 0))) __PYX_ERR(1, 1783, __pyx_L1_error)

      __pyx_t_13 = __pyx_t_21;

      __pyx_L66_bool_binop_done:;
      if (__pyx_t_13) {
/* … */
      }
/* … */
        __pyx_t_21 = (__pyx_v_thread_ids != Py_None);
        if (__pyx_t_21) {

        } else {

          __pyx_t_13 = __pyx_t_21;

          goto __pyx_L80_bool_binop_done;
        }
        __pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_v_thread_ids); if (unlikely((__pyx_t_21 < 0))) __PYX_ERR(1, 1783, __pyx_L78_error)

        __pyx_t_13 = __pyx_t_21;

        __pyx_L80_bool_binop_done:;
        if (__pyx_t_13) {
/* … */
        }
/* … */
      __pyx_t_21 = (__pyx_v_thread_ids != Py_None);
      if (__pyx_t_21) {

      } else {

        __pyx_t_13 = __pyx_t_21;

        goto __pyx_L92_bool_binop_done;
      }
      __pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_v_thread_ids); if (unlikely((__pyx_t_21 < 0))) __PYX_ERR(1, 1783, __pyx_L1_error)

      __pyx_t_13 = __pyx_t_21;

      __pyx_L92_bool_binop_done:;
      if (__pyx_t_13) {
/* … */
      }
+1784:             thread_ids.pop()
        __pyx_t_19 = __Pyx_PyObject_Pop(__pyx_v_thread_ids); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1784, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
/* … */
          __pyx_t_2 = __Pyx_PyObject_Pop(__pyx_v_thread_ids); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1784, __pyx_L78_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
        __pyx_t_19 = __Pyx_PyObject_Pop(__pyx_v_thread_ids); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1784, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+1785:         if registered:
      if (__pyx_v_registered) {
/* … */
      }
/* … */
        if (__pyx_v_registered) {
/* … */
        }
/* … */
      if (__pyx_v_registered) {
/* … */
      }
+1786:             lock = _oidc_registry_lock_acquire()
        __pyx_t_19 = __pyx_f_7questdb_7_client__oidc_registry_lock_acquire(); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1786, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF_SET(__pyx_v_lock, __pyx_t_19);
        __pyx_t_19 = 0;
/* … */
          __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_registry_lock_acquire(); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1786, __pyx_L78_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_XDECREF_SET(__pyx_v_lock, __pyx_t_2);
          __pyx_t_2 = 0;
/* … */
        __pyx_t_19 = __pyx_f_7questdb_7_client__oidc_registry_lock_acquire(); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1786, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF_SET(__pyx_v_lock, __pyx_t_19);
        __pyx_t_19 = 0;
+1787:             try:
        /*try:*/ {
/* … */
          /*try:*/ {
/* … */
        /*try:*/ {
 1788:                 # Fork inside a logging handler resets the child's active
 1789:                 # callbacks; its inherited stack still runs this finally.
+1790:                 remaining = _OIDC_DIAGNOSTICS_ACTIVE.get(provider_id, 0)
          if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
            __PYX_ERR(1, 1790, __pyx_L70_error)
          }
          __pyx_t_19 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1790, __pyx_L70_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_19, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1790, __pyx_L70_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __pyx_v_remaining = __pyx_t_2;
          __pyx_t_2 = 0;
/* … */
            if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
              __PYX_ERR(1, 1790, __pyx_L84_error)
            }
            __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1790, __pyx_L84_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_19 = __Pyx_PyDict_GetItemDefault(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_2, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1790, __pyx_L84_error)
            __Pyx_GOTREF(__pyx_t_19);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_v_remaining = __pyx_t_19;
            __pyx_t_19 = 0;
/* … */
          if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "get");
            __PYX_ERR(1, 1790, __pyx_L96_error)
          }
          __pyx_t_19 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1790, __pyx_L96_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_19, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1790, __pyx_L96_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __pyx_v_remaining = __pyx_t_2;
          __pyx_t_2 = 0;
+1791:                 if remaining > 1:
          __pyx_t_13 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_1, Py_GT); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(1, 1791, __pyx_L70_error)
          if (__pyx_t_13) {
/* … */
            goto __pyx_L72;
          }
/* … */
            __pyx_t_13 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_1, Py_GT); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(1, 1791, __pyx_L84_error)
            if (__pyx_t_13) {
/* … */
              goto __pyx_L86;
            }
/* … */
          __pyx_t_13 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_1, Py_GT); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(1, 1791, __pyx_L96_error)
          if (__pyx_t_13) {
/* … */
            goto __pyx_L98;
          }
+1792:                     _OIDC_DIAGNOSTICS_ACTIVE[provider_id] = remaining - 1
            __pyx_t_2 = __Pyx_PyLong_SubtractObjC(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1792, __pyx_L70_error)
            __Pyx_GOTREF(__pyx_t_2);
            if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
              __PYX_ERR(1, 1792, __pyx_L70_error)
            }
            __pyx_t_19 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1792, __pyx_L70_error)
            __Pyx_GOTREF(__pyx_t_19);
            if (unlikely((PyDict_SetItem(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_19, __pyx_t_2) < 0))) __PYX_ERR(1, 1792, __pyx_L70_error)
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
              __pyx_t_19 = __Pyx_PyLong_SubtractObjC(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1792, __pyx_L84_error)
              __Pyx_GOTREF(__pyx_t_19);
              if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
                PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
                __PYX_ERR(1, 1792, __pyx_L84_error)
              }
              __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1792, __pyx_L84_error)
              __Pyx_GOTREF(__pyx_t_2);
              if (unlikely((PyDict_SetItem(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_2, __pyx_t_19) < 0))) __PYX_ERR(1, 1792, __pyx_L84_error)
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
/* … */
            __pyx_t_2 = __Pyx_PyLong_SubtractObjC(__pyx_v_remaining, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1792, __pyx_L96_error)
            __Pyx_GOTREF(__pyx_t_2);
            if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "\047NoneType\047 object is not subscriptable");
              __PYX_ERR(1, 1792, __pyx_L96_error)
            }
            __pyx_t_19 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1792, __pyx_L96_error)
            __Pyx_GOTREF(__pyx_t_19);
            if (unlikely((PyDict_SetItem(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_19, __pyx_t_2) < 0))) __PYX_ERR(1, 1792, __pyx_L96_error)
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 1793:                 else:
+1794:                     _OIDC_DIAGNOSTICS_ACTIVE.pop(provider_id, None)
          /*else*/ {
            if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "pop");
              __PYX_ERR(1, 1794, __pyx_L70_error)
            }
            __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1794, __pyx_L70_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_4 = __Pyx_PyDict_Pop_ignore(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_2, Py_None); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1794, __pyx_L70_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

          }
          __pyx_L72:;
/* … */
            /*else*/ {
              if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
                PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "pop");
                __PYX_ERR(1, 1794, __pyx_L84_error)
              }
              __pyx_t_19 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1794, __pyx_L84_error)
              __Pyx_GOTREF(__pyx_t_19);
              __pyx_t_25 = __Pyx_PyDict_Pop_ignore(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_19, Py_None); if (unlikely(__pyx_t_25 == ((int)-1))) __PYX_ERR(1, 1794, __pyx_L84_error)
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;

            }
            __pyx_L86:;
/* … */
          /*else*/ {
            if (unlikely(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "\047NoneType\047 object has no attribute \047%.30s\047", "pop");
              __PYX_ERR(1, 1794, __pyx_L96_error)
            }
            __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1794, __pyx_L96_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_4 = __Pyx_PyDict_Pop_ignore(__pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_ACTIVE, __pyx_t_2, Py_None); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1794, __pyx_L96_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

          }
          __pyx_L98:;
+1795:                 _oidc_notify_diagnostics_drained()
          __pyx_f_7questdb_7_client__oidc_notify_diagnostics_drained();
        }
/* … */
            __pyx_f_7questdb_7_client__oidc_notify_diagnostics_drained();
          }
/* … */
          __pyx_f_7questdb_7_client__oidc_notify_diagnostics_drained();
        }
 1796:             finally:
+1797:                 lock.release()
        /*finally:*/ {
          /*normal exit:*/{
            __pyx_t_19 = __pyx_v_lock;
            __Pyx_INCREF(__pyx_t_19);
            __pyx_t_3 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_19, NULL};
              __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1797, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            goto __pyx_L71;
          }
          __pyx_L70_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22);
            if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
            __Pyx_XGOTREF(__pyx_t_12);
            __Pyx_XGOTREF(__pyx_t_11);
            __Pyx_XGOTREF(__pyx_t_10);
            __Pyx_XGOTREF(__pyx_t_24);
            __Pyx_XGOTREF(__pyx_t_23);
            __Pyx_XGOTREF(__pyx_t_22);
            __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
            {
              __pyx_t_19 = __pyx_v_lock;
              __Pyx_INCREF(__pyx_t_19);
              __pyx_t_3 = 0;
              {
                PyObject *__pyx_callargs[2] = {__pyx_t_19, NULL};
                __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
                if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1797, __pyx_L74_error)
                __Pyx_GOTREF(__pyx_t_2);
              }
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_23, __pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_12);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
            __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
            __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
            goto __pyx_L1_error;
            __pyx_L74_error:;
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_23, __pyx_t_22);
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
            goto __pyx_L1_error;
          }
          __pyx_L71:;
        }
/* … */
          /*finally:*/ {
            /*normal exit:*/{
              __pyx_t_2 = __pyx_v_lock;
              __Pyx_INCREF(__pyx_t_2);
              __pyx_t_3 = 0;
              {
                PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
                __pyx_t_19 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1797, __pyx_L78_error)
                __Pyx_GOTREF(__pyx_t_19);
              }
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              goto __pyx_L85;
            }
            __pyx_L84_error:;
            /*exception exit:*/{
              __Pyx_PyThreadState_declare
              __Pyx_PyThreadState_assign
              __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
               __Pyx_ExceptionSwap(&__pyx_t_28, &__pyx_t_29, &__pyx_t_30);
              if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
              __Pyx_XGOTREF(__pyx_t_9);
              __Pyx_XGOTREF(__pyx_t_8);
              __Pyx_XGOTREF(__pyx_t_7);
              __Pyx_XGOTREF(__pyx_t_28);
              __Pyx_XGOTREF(__pyx_t_29);
              __Pyx_XGOTREF(__pyx_t_30);
              __pyx_t_25 = __pyx_lineno; __pyx_t_26 = __pyx_clineno; __pyx_t_27 = __pyx_filename;
              {
                __pyx_t_2 = __pyx_v_lock;
                __Pyx_INCREF(__pyx_t_2);
                __pyx_t_3 = 0;
                {
                  PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
                  __pyx_t_19 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                  if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 1797, __pyx_L88_error)
                  __Pyx_GOTREF(__pyx_t_19);
                }
                __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              }
              __Pyx_XGIVEREF(__pyx_t_28);
              __Pyx_XGIVEREF(__pyx_t_29);
              __Pyx_XGIVEREF(__pyx_t_30);
              __Pyx_ExceptionReset(__pyx_t_28, __pyx_t_29, __pyx_t_30);
              __Pyx_XGIVEREF(__pyx_t_9);
              __Pyx_XGIVEREF(__pyx_t_8);
              __Pyx_XGIVEREF(__pyx_t_7);
              __Pyx_ErrRestore(__pyx_t_9, __pyx_t_8, __pyx_t_7);
              __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0;
              __pyx_lineno = __pyx_t_25; __pyx_clineno = __pyx_t_26; __pyx_filename = __pyx_t_27;
              goto __pyx_L78_error;
              __pyx_L88_error:;
              __Pyx_XGIVEREF(__pyx_t_28);
              __Pyx_XGIVEREF(__pyx_t_29);
              __Pyx_XGIVEREF(__pyx_t_30);
              __Pyx_ExceptionReset(__pyx_t_28, __pyx_t_29, __pyx_t_30);
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
              __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0;
              goto __pyx_L78_error;
            }
            __pyx_L85:;
          }
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __pyx_t_19 = __pyx_v_lock;
            __Pyx_INCREF(__pyx_t_19);
            __pyx_t_3 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_19, NULL};
              __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1797, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            goto __pyx_L97;
          }
          __pyx_L96_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22);
            if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
            __Pyx_XGOTREF(__pyx_t_12);
            __Pyx_XGOTREF(__pyx_t_11);
            __Pyx_XGOTREF(__pyx_t_10);
            __Pyx_XGOTREF(__pyx_t_24);
            __Pyx_XGOTREF(__pyx_t_23);
            __Pyx_XGOTREF(__pyx_t_22);
            __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
            {
              __pyx_t_19 = __pyx_v_lock;
              __Pyx_INCREF(__pyx_t_19);
              __pyx_t_3 = 0;
              {
                PyObject *__pyx_callargs[2] = {__pyx_t_19, NULL};
                __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
                if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1797, __pyx_L100_error)
                __Pyx_GOTREF(__pyx_t_2);
              }
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_23, __pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_12);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
            __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
            __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
            goto __pyx_L1_error;
            __pyx_L100_error:;
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_23, __pyx_t_22);
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0;
            goto __pyx_L1_error;
          }
          __pyx_L97:;
        }
+1798:         if on_main:
      if (__pyx_v_on_main) {
/* … */
      }
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
      if ( unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
      __Pyx_XGOTREF(__pyx_t_22);
      __Pyx_XGOTREF(__pyx_t_23);
      __Pyx_XGOTREF(__pyx_t_24);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __pyx_t_5 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
      {
/* … */
        if (__pyx_v_on_main) {
/* … */
        }
      }
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_22);
      __Pyx_XGIVEREF(__pyx_t_23);
      __Pyx_XGIVEREF(__pyx_t_24);
      __Pyx_ErrRestore(__pyx_t_22, __pyx_t_23, __pyx_t_24);
      __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_6;
      goto __pyx_L1_error;
      __pyx_L78_error:;
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
      __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
      __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
      __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
      __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L4_return: {
/* … */
      if (__pyx_v_on_main) {
/* … */
      }
      goto __pyx_L0;
    }
    __pyx_L6:;
  }
+1799:             _oidc_main_region_exit(_OIDC_REGION_DIAGNOSTIC, region)
        __pyx_f_7questdb_7_client__oidc_main_region_exit(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC, __pyx_v_region);
/* … */
          __pyx_f_7questdb_7_client__oidc_main_region_exit(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC, __pyx_v_region);
/* … */
        __pyx_f_7questdb_7_client__oidc_main_region_exit(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC, __pyx_v_region);
+1800:             if not _oidc_main_region_active(_OIDC_REGION_DIAGNOSTIC):
        __pyx_t_13 = (!__pyx_f_7questdb_7_client__oidc_main_region_active(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC));

        if (__pyx_t_13) {
/* … */
        }
/* … */
          __pyx_t_13 = (!__pyx_f_7questdb_7_client__oidc_main_region_active(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC));

          if (__pyx_t_13) {
/* … */
          }
/* … */
        __pyx_t_13 = (!__pyx_f_7questdb_7_client__oidc_main_region_active(__pyx_e_7questdb_7_client__OIDC_REGION_DIAGNOSTIC));

        if (__pyx_t_13) {
/* … */
        }
+1801:                 _oidc_schedule_parked_main()
          __pyx_f_7questdb_7_client__oidc_schedule_parked_main();
/* … */
            __pyx_f_7questdb_7_client__oidc_schedule_parked_main();
/* … */
          __pyx_f_7questdb_7_client__oidc_schedule_parked_main();
 1802: 
 1803: 
+1804: cdef object _oidc_registry_lock_acquire():
static PyObject *__pyx_f_7questdb_7_client__oidc_registry_lock_acquire(void) {
  PyObject *__pyx_v_lock = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._oidc_registry_lock_acquire", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_lock);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1805:     """Acquire `_OIDC_REGISTRY_LOCK` from a diagnostic callback; return it.
 1806: 
 1807:     A contended acquire waits with the GIL released and runs pending signal
 1808:     handlers. Whatever one raises is parked for the call the diagnostic runs
 1809:     inside, and the wait resumes: the callback's bookkeeping must still run.
 1810:     Returns the lock acquired, so the caller releases that same object even if
 1811:     a fork in between replaced the module's lock.
 1812:     """
+1813:     while True:
  while (1) {
+1814:         lock = _OIDC_REGISTRY_LOCK
    __Pyx_INCREF(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK);
    __Pyx_XDECREF_SET(__pyx_v_lock, __pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK);
+1815:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L5_error:;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
      __pyx_L7_except_error:;
      __Pyx_XGIVEREF(__pyx_t_1);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
      goto __pyx_L1_error;
      __pyx_L9_try_return:;
      __Pyx_XGIVEREF(__pyx_t_1);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
      goto __pyx_L0;
      __pyx_L6_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_1);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    }
  }
+1816:             lock.acquire()
        __pyx_t_5 = __pyx_v_lock;
        __Pyx_INCREF(__pyx_t_5);
        __pyx_t_6 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
          __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1816, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1817:             return lock
        {
          PyObject *__pyx_temp;
          {
            __pyx_temp = __pyx_r;
            __Pyx_INCREF(__pyx_v_lock);
            __pyx_r = __pyx_v_lock;
          }
          __Pyx_XDECREF(__pyx_temp);
        }
        goto __pyx_L9_try_return;
+1818:         except BaseException as exc:
      __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
      if (__pyx_t_7) {
        __Pyx_AddTraceback("questdb._client._oidc_registry_lock_acquire", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_8) < 0) __PYX_ERR(1, 1818, __pyx_L7_except_error)
        __Pyx_XGOTREF(__pyx_t_4);
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_5);
        __pyx_v_exc = __pyx_t_5;
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            goto __pyx_L19;
          }
          __pyx_L19:;
        }
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L6_exception_handled;
      }
      goto __pyx_L7_except_error;
+1819:             _oidc_park_foreground_interrupt(exc)
          __pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(__pyx_v_exc);
+1820:             _oidc_park_pending_signals()
          __pyx_f_7questdb_7_client__oidc_park_pending_signals();
        }
 1821: 
 1822: 
+1823: cdef void _oidc_notify_diagnostics_drained() noexcept:
static void __pyx_f_7questdb_7_client__oidc_notify_diagnostics_drained(void) {
  CYTHON_UNUSED int __pyx_v_attempt;
  PyObject *__pyx_v_exc = NULL;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_WriteUnraisable("questdb._client._oidc_notify_diagnostics_drained", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;

  __Pyx_XDECREF(__pyx_v_exc);

  __Pyx_RefNannyFinishContext();
}
 1824:     """Wake pool closes waiting for a diagnostic, parking any interrupt.
 1825: 
 1826:     Caller holds `_OIDC_REGISTRY_LOCK`. An interrupt raised at the first
 1827:     bytecode of `notify_all()` may preempt the wake-up, so retry once after
 1828:     running and parking the remaining pending handlers; a waiter that still
 1829:     misses it re-checks the count when its bounded wait times out.
 1830:     """
 1831:     cdef int attempt
+1832:     for attempt in range(2):
  for (__pyx_t_1 = 0; __pyx_t_1 < 2; __pyx_t_1+=1) {
    __pyx_v_attempt = __pyx_t_1;
+1833:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L5_error:;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
      __pyx_L7_except_error:;
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
      goto __pyx_L1_error;
      __pyx_L9_try_return:;
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
      goto __pyx_L0;
      __pyx_L6_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    }
  }
+1834:             _OIDC_DIAGNOSTICS_DRAINED.notify_all()
        __pyx_t_6 = __pyx_v_7questdb_7_client__OIDC_DIAGNOSTICS_DRAINED;
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
          __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_notify_all, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1834, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1835:             return
        {
        }
        goto __pyx_L9_try_return;
+1836:         except BaseException as exc:
      __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
      if (__pyx_t_8) {
        __Pyx_AddTraceback("questdb._client._oidc_notify_diagnostics_drained", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_9) < 0) __PYX_ERR(1, 1836, __pyx_L7_except_error)
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_v_exc = __pyx_t_6;
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            goto __pyx_L19;
          }
          __pyx_L19:;
        }
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L6_exception_handled;
      }
      goto __pyx_L7_except_error;
+1837:             _oidc_park_foreground_interrupt(exc)
          __pyx_f_7questdb_7_client__oidc_park_foreground_interrupt(__pyx_v_exc);
+1838:             _oidc_park_pending_signals()
          __pyx_f_7questdb_7_client__oidc_park_pending_signals();
        }
 1839: 
 1840: 
+1841: cdef void _oidc_diagnostic_trampoline(
static void __pyx_f_7questdb_7_client__oidc_diagnostic_trampoline(void *__pyx_v_user_data, struct questdb_oidc_diagnostic const *__pyx_v_diagnostic) {
  qdb_oidc_callback_gate *__pyx_v_gate;
/* … */
  /* function exit code */
  __pyx_L0:;

}
 1842:         void* user_data,
 1843:         const questdb_oidc_diagnostic* diagnostic) noexcept nogil:
+1844:     cdef qdb_oidc_callback_gate* gate = qdb_oidc_callback_enter()
  __pyx_v_gate = qdb_oidc_callback_enter();
+1845:     if gate == NULL:
  __pyx_t_1 = (__pyx_v_gate == NULL);

  if (__pyx_t_1) {
/* … */
  }
+1846:         return
    {
    }
    goto __pyx_L0;
+1847:     try:
  /*try:*/ {
+1848:         if qdb_py_is_finalizing():
    __pyx_t_1 = qdb_py_is_finalizing();

    if (__pyx_t_1) {
/* … */
    }
+1849:             return
      {
      }
      goto __pyx_L4_return;
+1850:         qdb_oidc_callback_before_gil(gate)
    qdb_oidc_callback_before_gil(__pyx_v_gate);
+1851:         if not qdb_oidc_callback_stopped(gate):
    __pyx_t_1 = (!qdb_oidc_callback_stopped(__pyx_v_gate));

    if (__pyx_t_1) {
/* … */
    }
  }
+1852:             _oidc_diagnostic_dispatch(user_data, diagnostic)
      __pyx_f_7questdb_7_client__oidc_diagnostic_dispatch(__pyx_v_user_data, __pyx_v_diagnostic);
 1853:     finally:
+1854:         qdb_oidc_callback_leave(gate)
  /*finally:*/ {
    /*normal exit:*/{
      qdb_oidc_callback_leave(__pyx_v_gate);
      goto __pyx_L6;
    }
    __pyx_L4_return: {
      qdb_oidc_callback_leave(__pyx_v_gate);
      goto __pyx_L0;
    }
    __pyx_L6:;
  }
 1855: 
 1856: 
+1857: cdef void _oidc_event_trampoline(
static void __pyx_f_7questdb_7_client__oidc_event_trampoline(void *__pyx_v_user_data, struct questdb_oidc_event const *__pyx_v_event) {
  qdb_oidc_callback_gate *__pyx_v_gate;
/* … */
  /* function exit code */
  __pyx_L0:;

}
 1858:         void* user_data,
 1859:         const questdb_oidc_event* event) noexcept nogil:
 1860:     # Admission precedes GIL acquisition; atexit drains this entire frame,
 1861:     # including a daemon sign-in's renderer, before finalization may begin.
+1862:     cdef qdb_oidc_callback_gate* gate = qdb_oidc_callback_enter()
  __pyx_v_gate = qdb_oidc_callback_enter();
+1863:     if gate == NULL:
  __pyx_t_1 = (__pyx_v_gate == NULL);

  if (__pyx_t_1) {
/* … */
  }
+1864:         return
    {
    }
    goto __pyx_L0;
+1865:     try:
  /*try:*/ {
+1866:         if qdb_py_is_finalizing():
    __pyx_t_1 = qdb_py_is_finalizing();

    if (__pyx_t_1) {
/* … */
    }
+1867:             return
      {
      }
      goto __pyx_L4_return;
+1868:         qdb_oidc_callback_before_gil(gate)
    qdb_oidc_callback_before_gil(__pyx_v_gate);
+1869:         if not qdb_oidc_callback_stopped(gate):
    __pyx_t_1 = (!qdb_oidc_callback_stopped(__pyx_v_gate));

    if (__pyx_t_1) {
/* … */
    }
  }
+1870:             _oidc_event_dispatch(user_data, event)
      __pyx_f_7questdb_7_client__oidc_event_dispatch(__pyx_v_user_data, __pyx_v_event);
 1871:     finally:
+1872:         qdb_oidc_callback_leave(gate)
  /*finally:*/ {
    /*normal exit:*/{
      qdb_oidc_callback_leave(__pyx_v_gate);
      goto __pyx_L6;
    }
    __pyx_L4_return: {
      qdb_oidc_callback_leave(__pyx_v_gate);
      goto __pyx_L0;
    }
    __pyx_L6:;
  }
 1873: 
 1874: 
+1875: cdef void _oidc_user_data_release_trampoline(
static void __pyx_f_7questdb_7_client__oidc_user_data_release_trampoline(CYTHON_UNUSED void *__pyx_v_user_data) {

  /* function exit code */
}
 1876:         void* user_data) noexcept nogil:
 1877:     """Deliberately empty: the final release must never enter Python.
 1878: 
 1879:     ``user_data`` is an opaque integer key, not a Python object pointer, and
 1880:     nothing was allocated for it -- so there is nothing to free here and no
 1881:     reason to acquire the GIL.
 1882: 
 1883:     This has to hold because the release can run on a thread the interpreter
 1884:     does not manage and cannot join. A token provider's acquisition is isolated
 1885:     onto its own worker so shutdown can abandon it (``bearer_header_isolated_
 1886:     until``); that worker keeps the provider closure -- and therefore the
 1887:     callback state -- until its own HTTP call returns, which may be well after
 1888:     the owning handles are gone and the interpreter has begun finalizing.
 1889:     Dropping the last reference there used to run a ``Py_DECREF`` behind a
 1890:     ``Py_IsFinalizing`` check, and no such check can be made safe: finalization
 1891:     can begin between the test and ``PyGILState_Ensure``, which then hangs the
 1892:     thread or faults. Holding no Python reference at all removes the hazard
 1893:     rather than narrowing its window.
 1894: 
 1895:     The provider is instead reached through ``_OIDC_PROVIDERS`` under the GIL,
 1896:     and its weakref callback drops both registry entries and the native-handle
 1897:     owner on a managed thread.
 1898:     """
 1899:     pass
 1900: 
 1901: 
+1902: cdef void _oidc_builder_set_string(
static void __pyx_f_7questdb_7_client__oidc_builder_set_string(struct questdb_oidc_builder *__pyx_v_builder, PyObject *__pyx_v_value, PyObject *__pyx_v_name, int __pyx_v_setting) {
  PyObject *__pyx_v_encoded = 0;
  questdb_error *__pyx_v_err;
  int __pyx_v_ok;
  PyObject *__pyx_v_OidcConfigError = NULL;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._oidc_builder_set_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_encoded);


  __Pyx_XDECREF(__pyx_v_OidcConfigError);

  __Pyx_RefNannyFinishContext();
}
 1903:         questdb_oidc_builder* builder,
 1904:         object value,
 1905:         str name,
 1906:         int setting) except *:
+1907:     cdef bytes encoded = _oidc_optional_utf8(value, name)
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_optional_utf8(__pyx_v_value, __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_encoded = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+1908:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
+1909:     cdef bint ok = True
  __pyx_v_ok = 1;
+1910:     if encoded is None:
  __pyx_t_2 = (__pyx_v_encoded == ((PyObject*)Py_None));
  if (__pyx_t_2) {
/* … */
  }
+1911:         return
    {
    }
    goto __pyx_L0;
 1912:     # All six, not just 0..3. `token_endpoint` (4) and
 1913:     # `device_authorization_endpoint` (5) were omitted, so
 1914:     # `from_questdb(url, token_endpoint='')` sailed past validation and only
 1915:     # failed later at parse time -- and an empty override still counts as
 1916:     # EXPLICIT on the native side, which suppresses the IdP-discovery fallback
 1917:     # for that endpoint. An endpoint is a URL; empty is never meaningful.
+1918:     if PyBytes_GET_SIZE(encoded) == 0:
  __pyx_t_2 = (PyBytes_GET_SIZE(__pyx_v_encoded) == 0);

  if (__pyx_t_2) {
/* … */
  }
+1919:         from questdb.auth._errors import OidcConfigError
    {
      PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
      __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1919, __pyx_L1_error)
    }
    __pyx_t_1 = __pyx_t_3;
    __Pyx_GOTREF(__pyx_t_1);
    {
      PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
      __pyx_t_4 = 0; {
        __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_4]); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1919, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        switch (__pyx_t_4) {
          case 0:
          __Pyx_INCREF(__pyx_t_5);
          __pyx_v_OidcConfigError = __pyx_t_5;
          break;
          default:;
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1920:         raise OidcConfigError(
    __pyx_t_5 = NULL;
    __Pyx_INCREF(__pyx_v_OidcConfigError);
    __pyx_t_6 = __pyx_v_OidcConfigError; 
+1921:             f'{name} must be a non-empty string or None')
    __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1921, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_must_be_a_non_empty_string_or_N); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1921, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1920, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 1920, __pyx_L1_error)
+1922:     if setting == 0:
  switch (__pyx_v_setting) {
    case 0:
/* … */
    break;
    case 1:
+1923:         ok = questdb_oidc_builder_client_id(
    __pyx_v_ok = questdb_oidc_builder_client_id(__pyx_v_builder, __pyx_t_10, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err));

+1924:             builder, PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err)
    __pyx_t_10 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(1, 1924, __pyx_L1_error)
+1925:     elif setting == 1:
    break;
    case 2:
+1926:         ok = questdb_oidc_builder_scope(
    __pyx_v_ok = questdb_oidc_builder_scope(__pyx_v_builder, __pyx_t_10, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err));

+1927:             builder, PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err)
    __pyx_t_10 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(1, 1927, __pyx_L1_error)
+1928:     elif setting == 2:
    break;
    case 3:
+1929:         ok = questdb_oidc_builder_audience(
    __pyx_v_ok = questdb_oidc_builder_audience(__pyx_v_builder, __pyx_t_10, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err));

+1930:             builder, PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err)
    __pyx_t_10 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(1, 1930, __pyx_L1_error)
+1931:     elif setting == 3:
    break;
    case 4:
+1932:         ok = questdb_oidc_builder_issuer(
    __pyx_v_ok = questdb_oidc_builder_issuer(__pyx_v_builder, __pyx_t_10, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err));

+1933:             builder, PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err)
    __pyx_t_10 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(1, 1933, __pyx_L1_error)
+1934:     elif setting == 4:
    break;
    case 5:
+1935:         ok = questdb_oidc_builder_token_endpoint(
    __pyx_v_ok = questdb_oidc_builder_token_endpoint(__pyx_v_builder, __pyx_t_10, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err));

+1936:             builder, PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err)
    __pyx_t_10 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(1, 1936, __pyx_L1_error)
+1937:     elif setting == 5:
    break;
    default:
+1938:         ok = questdb_oidc_builder_device_authorization_endpoint(
    __pyx_v_ok = questdb_oidc_builder_device_authorization_endpoint(__pyx_v_builder, __pyx_t_10, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err));

+1939:             builder, PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err)
    __pyx_t_10 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(1, 1939, __pyx_L1_error)
 1940:     else:
+1941:         raise AssertionError(
    __pyx_t_6 = NULL;
+1942:             f'_oidc_builder_set_string: unknown setting {setting!r}')
    __pyx_t_8 = __Pyx_PyUnicode_From_int(__pyx_v_setting, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1942, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_oidc_builder_set_string_unknown, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1942, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AssertionError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1941, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 1941, __pyx_L1_error)
    break;
  }
+1943:     if not ok:
  __pyx_t_2 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_2)) {
/* … */
  }
+1944:         raise _oidc_err_to_py(err)
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1944, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 1944, __pyx_L1_error)
 1945: 
 1946: 
+1947: cdef class _OidcNativeHandle:
struct __pyx_obj_7questdb_7_client__OidcNativeHandle {
  PyObject_HEAD
  struct questdb_oidc_auth *raw;
  size_t pid;
};

 1948:     """Registry-owned leaf that releases one native auth handle."""
 1949: 
 1950:     cdef questdb_oidc_auth* raw
 1951:     cdef size_t pid
 1952: 
+1953:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_17_OidcNativeHandle_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_17_OidcNativeHandle_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_7questdb_7_client_17_OidcNativeHandle___cinit__(((struct __pyx_obj_7questdb_7_client__OidcNativeHandle *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7questdb_7_client_17_OidcNativeHandle___cinit__(struct __pyx_obj_7questdb_7_client__OidcNativeHandle *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._OidcNativeHandle.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1954:         self.raw = NULL
  __pyx_v_self->raw = NULL;
+1955:         self.pid = os.getpid()
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_getpid); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1955, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_5 = __Pyx_PyLong_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1955, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_self->pid = __pyx_t_5;
 1956: 
+1957:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_17_OidcNativeHandle_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_17_OidcNativeHandle_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_7questdb_7_client_17_OidcNativeHandle_2__dealloc__(((struct __pyx_obj_7questdb_7_client__OidcNativeHandle *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_7questdb_7_client_17_OidcNativeHandle_2__dealloc__(struct __pyx_obj_7questdb_7_client__OidcNativeHandle *__pyx_v_self) {
  struct questdb_oidc_auth *__pyx_v_raw;
  PyThreadState *__pyx_v_gs;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_WriteUnraisable("questdb._client._OidcNativeHandle.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;



  __Pyx_RefNannyFinishContext();
}
+1958:         cdef questdb_oidc_auth* raw = self.raw
  __pyx_t_1 = __pyx_v_self->raw;

  __pyx_v_raw = __pyx_t_1;
+1959:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+1960:         if raw == NULL:
  __pyx_t_2 = (__pyx_v_raw == NULL);

  if (__pyx_t_2) {
/* … */
  }
+1961:             return
    {
    }
    goto __pyx_L0;
+1962:         self.raw = NULL
  __pyx_v_self->raw = NULL;
 1963:         # The copy in a child may contain locks owned by vanished parent
 1964:         # threads. Discard this Python reference, never detach or free native.
+1965:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L8_try_return:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L0;
    __pyx_L7_except_return:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L0;
    __pyx_L9_try_end:;
  }
+1966:             if self.pid != os.getpid():
      __pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_self->pid); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1966, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1966, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_getpid); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 1966, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_11 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_10);
        assert(__pyx_t_8);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_10, __pyx__function);
        __pyx_t_11 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
        __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_11, (1-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1966, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_7);
      }
      __pyx_t_2 = __Pyx_PyObject_CompareBoolNe_int_object(__pyx_t_6, __pyx_t_7, Py_NE); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 1966, __pyx_L4_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (__pyx_t_2) {
/* … */
      }
+1967:                 return
        {
        }
        goto __pyx_L8_try_return;
+1968:         except BaseException:
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_12) {
      __Pyx_ErrRestore(0,0,0);
+1969:             return
      {
      }
      goto __pyx_L7_except_return;
    }
    goto __pyx_L6_except_error;
 1970:         # Reaching here means the provider that owned this handle has been
 1971:         # collected, so nothing in Python can close it any more -- but a
 1972:         # cancelled token-acquisition worker, which Rust starts detached and
 1973:         # never joins, can still hold a clone of the same shared state and
 1974:         # reach a token-store write. Detach while Python is alive so later
 1975:         # persistence warnings cannot target a collected provider. The atexit
 1976:         # registry snapshot cannot see this handle after the weakref callback
 1977:         # drops it, but the C gate still protects any admitted callback.
 1978:         #
 1979:         # Nowait detach suppresses future native admissions, but is not itself
 1980:         # a finalization fence. The process-wide C gate also counts callbacks
 1981:         # from collected providers and drains them in the atexit hook.
 1982:         #
 1983:         # The non-waiting form, because this runs wherever a collection fired
 1984:         # and so cannot know what this thread already holds. The waiting form
 1985:         # blocks on the callback gate, and the callback -- once it has the
 1986:         # gate -- logs through `logging`, which takes the handler's lock. A
 1987:         # collection triggered by an allocation inside that handler's `emit`
 1988:         # runs this finalizer on a thread already owning that lock, so waiting
 1989:         # parks both threads permanently: this one for the gate, the callback
 1990:         # for the handler lock. Releasing the GIL below does not prevent it,
 1991:         # because the GIL is not the lock in contention -- which is exactly
 1992:         # what the waiting form's own contract now warns about.
 1993:         #
 1994:         # The GIL is still released: a diagnostic already inside the gate is
 1995:         # blocked acquiring it, and even the bounded drain should let that
 1996:         # callback finish rather than spin against it.
 1997:         #
 1998:         # Once finalization begins the process-wide gate is closed and drained;
 1999:         # no admitted OIDC callback can still attempt GIL entry.
+2000:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2001:         if not qdb_py_is_finalizing():
  __pyx_t_2 = (!qdb_py_is_finalizing());

  if (__pyx_t_2) {
/* … */
  }
+2002:             questdb_oidc_auth_detach_diagnostics_nowait(raw)
    questdb_oidc_auth_detach_diagnostics_nowait(__pyx_v_raw);
+2003:         questdb_oidc_auth_free(raw)
  questdb_oidc_auth_free(__pyx_v_raw);
+2004:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
 2005: 
 2006: 
+2007: cdef class OidcDeviceAuth:
struct __pyx_obj_7questdb_7_client_OidcDeviceAuth {
  PyObject_HEAD
  struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *__pyx_vtab;
  PyObject *__weakref__;
  struct __pyx_obj_7questdb_7_client__OidcNativeHandle *_native;
  struct questdb_oidc_auth *_raw;
  size_t _provider_id;
  size_t _pid;
  PyObject *_renderer;
  int _closed;
  PyObject *_interrupt;
  PyObject *_prompt_renderer;
  PyObject *_sign_in_lock;
  int _opens_browser;
};
/* … */
struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth {
  void (*_require_same_process)(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *);
  void (*_require_open)(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *);
  void (*_finish_builder)(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *, struct questdb_oidc_builder *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *);
};
static struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *__pyx_vtabptr_7questdb_7_client_OidcDeviceAuth;

 2008:     """Native-backed OAuth 2.0 device-flow token provider for QuestDB.
 2009: 
 2010:     An instance inherited across ``fork()`` cannot be used or closed in the
 2011:     child: its native locks may belong to parent threads that no longer exist.
 2012:     Once the parent has constructed any ``OidcDeviceAuth`` -- constructing one
 2013:     is enough, it need not have been used -- creating a new provider in a
 2014:     forked child raises :class:`~questdb.auth.OidcConfigError` as well. Use
 2015:     ``fork()`` followed by ``exec()`` (for example the ``spawn`` or
 2016:     ``forkserver`` :mod:`multiprocessing` start methods) to start fresh, or
 2017:     construct the provider only in the child. See :ref:`auth-fork`.
 2018: 
 2019:     Connections attached with ``oidc_auth=`` take tokens from the native
 2020:     provider, never from a Python :meth:`token`, so a subclass that overrides
 2021:     :meth:`token` is refused there with :class:`TypeError`.
 2022:     """
 2023: 
 2024:     cdef object __weakref__
 2025:     # The owner of the native handle. Holding it here -- rather than letting
 2026:     # `_OIDC_NATIVE_HANDLES` be the sole owner -- is what makes `_raw` safe:
 2027:     # `_raw` cannot outlive `self`, because the handle is released only when
 2028:     # this reference goes. That matters for a provider caught in a cycle, which
 2029:     # is the documented shape (a renderer holding its own provider, or a
 2030:     # subclass instance): the cyclic collector runs weakref callbacks BEFORE
 2031:     # finalizers, so a registry-owned handle was freed by the callback and then
 2032:     # dereferenced by a `__del__` in the same cycle -- a use-after-free that
 2033:     # segfaulted the interpreter with no traceback.
 2034:     #
 2035:     # Cycle collection is unaffected. `_OidcNativeHandle` has no object fields,
 2036:     # so Cython gives it no `tp_traverse` and CPython does not track it: it can
 2037:     # be referenced by a cycle but never part of one, and it is released by this
 2038:     # class's `tp_clear`, which runs after every finalizer. `OidcDeviceAuth`
 2039:     # deliberately carries no `@cython.no_gc_clear` for the same reason.
 2040:     cdef _OidcNativeHandle _native
 2041:     # Cached from `_native.raw` so the hot calls need no attribute lookup; the
 2042:     # reference above is the ownership.
 2043:     cdef questdb_oidc_auth* _raw
 2044:     cdef size_t _provider_id
 2045:     cdef size_t _pid
 2046:     cdef object _renderer
 2047:     cdef bint _closed
 2048:     # A KeyboardInterrupt/SystemExit delivered inside a renderer callback,
 2049:     # parked for the sole active sign_in() to re-raise once native returns.
 2050:     cdef object _interrupt
 2051:     # The renderer that was shown a device-code prompt in the running
 2052:     # sign_in() and has not yet received its SUCCESS/FAILURE event. A sign-in
 2053:     # that ends without one (cancel, close, Ctrl-C) reports the end to it, so
 2054:     # its output does not stay on "waiting" with a live link.
 2055:     cdef object _prompt_renderer
 2056:     # Native serializes acquisition, but a second native call can regain the
 2057:     # GIL before the callback-owning call and steal `_interrupt`. Reject it
 2058:     # before releasing the GIL so callback exceptions remain invocation-owned.
 2059:     cdef object _sign_in_lock
 2060:     # The resolved `open_browser` setting handed to native: whether a sign-in
 2061:     # can still reach the user once interpreter shutdown detached the renderer.
 2062:     cdef bint _opens_browser
 2063: 
+2064:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_14OidcDeviceAuth_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static int __pyx_pw_7questdb_7_client_14OidcDeviceAuth_1__cinit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth___cinit__(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7questdb_7_client_14OidcDeviceAuth___cinit__(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;

  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2065:         self._pid = os.getpid()
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2065, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_getpid); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2065, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_5 = __Pyx_PyLong_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 2065, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_self->_pid = __pyx_t_5;
+2066:         self._native = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_native);
  __Pyx_DECREF_SET(__pyx_v_self->_native, ((struct __pyx_obj_7questdb_7_client__OidcNativeHandle *)Py_None));
+2067:         self._raw = NULL
  __pyx_v_self->_raw = NULL;
+2068:         self._provider_id = 0
  __pyx_v_self->_provider_id = 0;
+2069:         self._renderer = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_renderer);
  __Pyx_DECREF_SET(__pyx_v_self->_renderer, Py_None);
+2070:         self._closed = False
  __pyx_v_self->_closed = 0;
+2071:         self._interrupt = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_interrupt);
  __Pyx_DECREF_SET(__pyx_v_self->_interrupt, Py_None);
+2072:         self._prompt_renderer = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_prompt_renderer);
  __Pyx_DECREF_SET(__pyx_v_self->_prompt_renderer, Py_None);
+2073:         self._sign_in_lock = threading.Lock()
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Lock); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2073, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_sign_in_lock);
  __Pyx_DECREF_SET(__pyx_v_self->_sign_in_lock, __pyx_t_1);
  __pyx_t_1 = 0;
+2074:         self._opens_browser = False
  __pyx_v_self->_opens_browser = 0;
 2075: 
+2076:     cdef void _require_same_process(self) except *:
static void __pyx_f_7questdb_7_client_14OidcDeviceAuth__require_same_process(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  PyObject *__pyx_v_message = NULL;
  PyObject *__pyx_v_errors = NULL;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._require_same_process", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_message);
  __Pyx_XDECREF(__pyx_v_errors);

  __Pyx_RefNannyFinishContext();
}
+2077:         if self._pid != os.getpid():
  __pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_pid); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_getpid); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 2077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_7 = __Pyx_PyObject_CompareBoolNe_int_object(__pyx_t_1, __pyx_t_2, Py_NE); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(1, 2077, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_7) {
/* … */
  }
+2078:             message = ('This OIDC provider was inherited across fork and '
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_This_OIDC_provider_was_inherited);
    __pyx_v_message = __pyx_mstate_global->__pyx_kp_u_This_OIDC_provider_was_inherited;
 2079:                        'cannot be reused; exec a fresh process before '
 2080:                        'creating a new provider.')
 2081:             # Never import in a forked child: another parent thread may have
 2082:             # been importing this module while fork ran. Use the typed class
 2083:             # when already available, and the same ConfigError code otherwise.
+2084:             errors = _oidc_errors_module_if_ready()
    __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_errors_module_if_ready(); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2084, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_errors = __pyx_t_2;
    __pyx_t_2 = 0;
+2085:             if errors is not None:
    __pyx_t_7 = (__pyx_v_errors != Py_None);
    if (unlikely(__pyx_t_7)) {
/* … */
    }
+2086:                 raise errors.OidcConfigError(message)
      __pyx_t_1 = __pyx_v_errors;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_6 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_message};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_OidcConfigError, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2086, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2086, __pyx_L1_error)
+2087:             raise QuestDBError(QuestDBErrorCode.ConfigError, message)
    __pyx_t_1 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 2087, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2087, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2087, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_1);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_4, __pyx_v_message};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2087, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 2087, __pyx_L1_error)
 2088: 
+2089:     cdef void _require_open(self) except *:
static void __pyx_f_7questdb_7_client_14OidcDeviceAuth__require_open(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._require_open", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;

  __Pyx_RefNannyFinishContext();
}
+2090:         self._require_same_process()
  ((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2090, __pyx_L1_error)
+2091:         if self._raw == NULL:
  __pyx_t_1 = (__pyx_v_self->_raw == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
 2092:             # Never __init__'d (e.g. cls.__new__ without construction) -- not
 2093:             # the same state as closed, which is reported below.
+2094:             raise RuntimeError('OidcDeviceAuth is not initialized')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_OidcDeviceAuth_is_not_initialize};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2094, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 2094, __pyx_L1_error)
+2095:         if self._closed:
  if (__pyx_v_self->_closed) {
/* … */
  }
+2096:             _raise_oidc_auth_closed()
    __pyx_t_5 = __pyx_f_7questdb_7_client__raise_oidc_auth_closed(); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 2096, __pyx_L1_error)

 2097: 
+2098:     def __init__(
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_14OidcDeviceAuth_3__init__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_2__init__, "Configure a provider from explicit IdP endpoints.\n\n        ``client_id``, ``device_authorization_endpoint`` and ``token_endpoint``\n        are required. The two endpoints are keyword-only so their order cannot\n        be accidentally reversed. Use :meth:`from_questdb` to discover them\n        from a QuestDB server instead.\n\n        ``groups_in_token`` selects the token kind: ``False`` (the default)\n        returns the access token; ``True`` selects the ID token.\n        It does not modify ``scope``; include ``openid`` explicitly when the\n        identity provider requires it to issue an ID token. Unlike\n        :meth:`from_questdb` there is no server-advertised default to inherit\n        here, so the kind is always chosen explicitly and defaults to ``False``.\n\n        Because this is an extension type, ``help()`` and the rendered API\n        reference cannot introspect the signature, so every parameter is\n        documented here:\n\n        * ``scope`` \342\200\224 the non-empty OAuth scope string sent verbatim on the\n          initial request. Refresh requests omit it so the identity provider\n          preserves the scope originally granted, as required by RFC 6749\n          section 6.\n        * ``audience`` / ``issuer`` \342\200\224 optional, but must be non-empty when\n          provided. ``issuer`` additionally pins the credential endpoints:\n          here both explicit endpoints must be on the issuer\047s origin (scheme,\n          host and port). Some providers host their endpoints on a different\n          origin from their issuer (Google: issuer\n          ``https://accounts.google.com``, endpoints on\n          ``https://oauth2.googleapis.com``); configure those without\n          ``issuer``.\n        * ``device_authorization_endpoint`` and ``token_endpoint`` must share\n          one origin; construction raises\n          :class:`~questdb.auth.OidcConfigError` otherwise.\n        * ``insecure`` \342\200\224 permits plaintext HTTP for t""he **QuestDB discovery\n          request only**. The identity provider is always held to HTTPS (or\n          loopback); this flag never relaxes that.\n        * ``ca_bundle`` \342\200\224 path (``str``, ``bytes`` or any ``os.PathLike``;\n          ``~`` is expanded and the path made absolute, as for\n          :class:`~questdb.auth.FileTokenStore`) to a PEM bundle used when\n          contacting QuestDB and the IdP, instead of the default roots: the Mozilla root bundle\n          compiled into the client together with the operating system\047s trust\n          store. An OS trust store that reports a load error (for example\n          ``SSL_CERT_DIR`` naming a missing directory) fails construction;\n          setting ``ca_bundle`` avoids consulting it.\n        * ``open_browser`` \342\200\224 whether :meth:`sign_in` launches a browser at the\n          verification URL. ``None`` (the default) opens one, except inside a\n          Jupyter kernel, where the kernel may be on a different machine from\n          the person reading the notebook and the browser would open where\n          nobody is looking. Pass ``True`` to open one anyway \342\200\224 correct for a\n          *local* ``jupyter lab``, where that guess is wrong \342\200\224 or ``False`` to\n          never open one.\n        * ``interactive`` \342\200\224 whether :meth:`sign_in` may prompt at all.\n          ``False`` makes it fail immediately with\n          :class:`~questdb.auth.OidcInteractionRequired` rather than print a\n          device code nobody will read and poll until it expires, which is what\n          a headless service or a CI job wants. ``None`` (the default) prompts,\n          except in a notebook executed headlessly (papermill / ``nbclient`` /\n          ``nbconvert --execute``), whose kernel reports that no human can\n          answer. There is no terminal detection: a missing TTY is not evidence\n          of a missing human.\n        * ``qr`` \342\200\224 also render the verification ""URL as a QR code, for signing in\n          from a phone. The terminal QR needs ``qrcode``; the notebook PNG QR\n          additionally needs Pillow (install ``qrcode[pil]``). Ignored when a\n          custom ``renderer`` is supplied.\n        * ``renderer`` \342\200\224 a :class:`~questdb.auth.Renderer` presenting the prompt.\n          Its callbacks receive native display-normalised but still untrusted\n          identity-provider text; see that class for sink-encoding, actionable-\n          URL and re-entrancy rules.\n        * ``default_interval`` \342\200\224 seconds between device-code polls when the\n          identity provider does not specify one (default 5, minimum 5,\n          maximum 1800, the longest a device code may live). Native clamps the\n          value to that range, so a smaller number would be accepted here and\n          silently become 5; it is rejected instead. A server-supplied\n          interval, and any ``Retry-After``, take precedence.\n        * ``timeout`` \342\200\224 the per-HTTP-request timeout, in seconds or as a\n          :class:`datetime.timedelta` (default 30, maximum 120 seconds). This\n          is **not** a deadline for the sign-in as a whole, which is bounded\n          by the device code\047s own lifetime. It also bounds\n          how long an attached transport waits for a credential: a flush or\n          connect that needs a fresh token resolves it before its first\n          request, and that can take one refresh (up to ``timeout``) or wait\n          behind a refresh already running on another thread for up to six\n          times ``timeout``. The sender\047s ``request_timeout``,\n          ``retry_timeout`` and reconnect budget do not cap that wait.\n          Call :meth:`sign_in` before starting the sender to avoid the first,\n          longest acquisition.\n        * ``token_store`` \342\200\224 a :class:`~questdb.auth.FileTokenStore` enabling\n          plaintext on-disk persistence. Credentials stay in memory ""when this is\n          ``None``.\n        ");
#if CYTHON_UPDATE_DESCRIPTOR_DOC
struct wrapperbase __pyx_wrapperbase_7questdb_7_client_14OidcDeviceAuth_2__init__;
#endif
static int __pyx_pw_7questdb_7_client_14OidcDeviceAuth_3__init__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL_TPNEW
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_client_id = 0;
  PyObject *__pyx_v_device_authorization_endpoint = 0;
  PyObject *__pyx_v_token_endpoint = 0;
  PyObject *__pyx_v_scope = 0;
  PyObject *__pyx_v_groups_in_token = 0;
  PyObject *__pyx_v_audience = 0;
  PyObject *__pyx_v_issuer = 0;
  PyObject *__pyx_v_insecure = 0;
  PyObject *__pyx_v_ca_bundle = 0;
  PyObject *__pyx_v_open_browser = 0;
  PyObject *__pyx_v_interactive = 0;
  PyObject *__pyx_v_qr = 0;
  PyObject *__pyx_v_renderer = 0;
  PyObject *__pyx_v_default_interval = 0;
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_v_token_store = 0;
  #if !CYTHON_VECTORCALL_TPNEW
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL_TPNEW
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL_TPNEW(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_client_id,&__pyx_mstate_global->__pyx_n_u_device_authorization_endpoint,&__pyx_mstate_global->__pyx_n_u_token_endpoint,&__pyx_mstate_global->__pyx_n_u_scope,&__pyx_mstate_global->__pyx_n_u_groups_in_token,&__pyx_mstate_global->__pyx_n_u_audience,&__pyx_mstate_global->__pyx_n_u_issuer,&__pyx_mstate_global->__pyx_n_u_insecure,&__pyx_mstate_global->__pyx_n_u_ca_bundle,&__pyx_mstate_global->__pyx_n_u_open_browser,&__pyx_mstate_global->__pyx_n_u_interactive,&__pyx_mstate_global->__pyx_n_u_qr,&__pyx_mstate_global->__pyx_n_u_renderer,&__pyx_mstate_global->__pyx_n_u_default_interval,&__pyx_mstate_global->__pyx_n_u_timeout,&__pyx_mstate_global->__pyx_n_u_token_store,0};
  PyObject* values[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL_TPNEW(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 2098, __pyx_L3_error)
    if (likely(__pyx_kwds_len > 0)) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL_TPNEW(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2098, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(1, 2098, __pyx_L3_error)
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_openid));
/* … */
  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7questdb_7_client_14OidcDeviceAuth_2__init__(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self, PyObject *__pyx_v_client_id, PyObject *__pyx_v_device_authorization_endpoint, PyObject *__pyx_v_token_endpoint, PyObject *__pyx_v_scope, PyObject *__pyx_v_groups_in_token, PyObject *__pyx_v_audience, PyObject *__pyx_v_issuer, PyObject *__pyx_v_insecure, PyObject *__pyx_v_ca_bundle, PyObject *__pyx_v_open_browser, PyObject *__pyx_v_interactive, PyObject *__pyx_v_qr, PyObject *__pyx_v_renderer, PyObject *__pyx_v_default_interval, PyObject *__pyx_v_timeout, PyObject *__pyx_v_token_store) {
  struct questdb_oidc_builder *__pyx_v_builder;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;


  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2099:             self,
 2100:             client_id,
 2101:             *,
 2102:             device_authorization_endpoint,
 2103:             token_endpoint,
 2104:             scope='openid',
+2105:             groups_in_token=False,
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_False));
+2106:             audience=None,
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None));
+2107:             issuer=None,
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None));
+2108:             insecure=False,
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_False));
+2109:             ca_bundle=None,
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None));
+2110:             open_browser=None,
      if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None));
+2111:             interactive=None,
      if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None));
+2112:             qr=False,
      if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_False));
+2113:             renderer=None,
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_5));
      if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_30));
 2114:             default_interval=5,
 2115:             timeout=30,
+2116:             token_store=None):
      if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, i); __PYX_ERR(1, 2098, __pyx_L3_error) }
      }
      for (Py_ssize_t i = 1; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("__init__", *(__pyx_pyargnames[i - 0])); __PYX_ERR(1, 2098, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      __Pyx_RaiseKeywordRequired("__init__", __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint); __PYX_ERR(1, 2098, __pyx_L3_error)
    }
    __pyx_v_client_id = values[0];
    __pyx_v_device_authorization_endpoint = values[1];
    __pyx_v_token_endpoint = values[2];
    __pyx_v_scope = values[3];
    __pyx_v_groups_in_token = values[4];
    __pyx_v_audience = values[5];
    __pyx_v_issuer = values[6];
    __pyx_v_insecure = values[7];
    __pyx_v_ca_bundle = values[8];
    __pyx_v_open_browser = values[9];
    __pyx_v_interactive = values[10];
    __pyx_v_qr = values[11];
    __pyx_v_renderer = values[12];
    __pyx_v_default_interval = values[13];
    __pyx_v_timeout = values[14];
    __pyx_v_token_store = values[15];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 2098, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_2__init__(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self), __pyx_v_client_id, __pyx_v_device_authorization_endpoint, __pyx_v_token_endpoint, __pyx_v_scope, __pyx_v_groups_in_token, __pyx_v_audience, __pyx_v_issuer, __pyx_v_insecure, __pyx_v_ca_bundle, __pyx_v_open_browser, __pyx_v_interactive, __pyx_v_qr, __pyx_v_renderer, __pyx_v_default_interval, __pyx_v_timeout, __pyx_v_token_store);
 2117:         """Configure a provider from explicit IdP endpoints.
 2118: 
 2119:         ``client_id``, ``device_authorization_endpoint`` and ``token_endpoint``
 2120:         are required. The two endpoints are keyword-only so their order cannot
 2121:         be accidentally reversed. Use :meth:`from_questdb` to discover them
 2122:         from a QuestDB server instead.
 2123: 
 2124:         ``groups_in_token`` selects the token kind: ``False`` (the default)
 2125:         returns the access token; ``True`` selects the ID token.
 2126:         It does not modify ``scope``; include ``openid`` explicitly when the
 2127:         identity provider requires it to issue an ID token. Unlike
 2128:         :meth:`from_questdb` there is no server-advertised default to inherit
 2129:         here, so the kind is always chosen explicitly and defaults to ``False``.
 2130: 
 2131:         Because this is an extension type, ``help()`` and the rendered API
 2132:         reference cannot introspect the signature, so every parameter is
 2133:         documented here:
 2134: 
 2135:         * ``scope`` — the non-empty OAuth scope string sent verbatim on the
 2136:           initial request. Refresh requests omit it so the identity provider
 2137:           preserves the scope originally granted, as required by RFC 6749
 2138:           section 6.
 2139:         * ``audience`` / ``issuer`` — optional, but must be non-empty when
 2140:           provided. ``issuer`` additionally pins the credential endpoints:
 2141:           here both explicit endpoints must be on the issuer's origin (scheme,
 2142:           host and port). Some providers host their endpoints on a different
 2143:           origin from their issuer (Google: issuer
 2144:           ``https://accounts.google.com``, endpoints on
 2145:           ``https://oauth2.googleapis.com``); configure those without
 2146:           ``issuer``.
 2147:         * ``device_authorization_endpoint`` and ``token_endpoint`` must share
 2148:           one origin; construction raises
 2149:           :class:`~questdb.auth.OidcConfigError` otherwise.
 2150:         * ``insecure`` — permits plaintext HTTP for the **QuestDB discovery
 2151:           request only**. The identity provider is always held to HTTPS (or
 2152:           loopback); this flag never relaxes that.
 2153:         * ``ca_bundle`` — path (``str``, ``bytes`` or any ``os.PathLike``;
 2154:           ``~`` is expanded and the path made absolute, as for
 2155:           :class:`~questdb.auth.FileTokenStore`) to a PEM bundle used when
 2156:           contacting QuestDB and the IdP, instead of the default roots: the Mozilla root bundle
 2157:           compiled into the client together with the operating system's trust
 2158:           store. An OS trust store that reports a load error (for example
 2159:           ``SSL_CERT_DIR`` naming a missing directory) fails construction;
 2160:           setting ``ca_bundle`` avoids consulting it.
 2161:         * ``open_browser`` — whether :meth:`sign_in` launches a browser at the
 2162:           verification URL. ``None`` (the default) opens one, except inside a
 2163:           Jupyter kernel, where the kernel may be on a different machine from
 2164:           the person reading the notebook and the browser would open where
 2165:           nobody is looking. Pass ``True`` to open one anyway — correct for a
 2166:           *local* ``jupyter lab``, where that guess is wrong — or ``False`` to
 2167:           never open one.
 2168:         * ``interactive`` — whether :meth:`sign_in` may prompt at all.
 2169:           ``False`` makes it fail immediately with
 2170:           :class:`~questdb.auth.OidcInteractionRequired` rather than print a
 2171:           device code nobody will read and poll until it expires, which is what
 2172:           a headless service or a CI job wants. ``None`` (the default) prompts,
 2173:           except in a notebook executed headlessly (papermill / ``nbclient`` /
 2174:           ``nbconvert --execute``), whose kernel reports that no human can
 2175:           answer. There is no terminal detection: a missing TTY is not evidence
 2176:           of a missing human.
 2177:         * ``qr`` — also render the verification URL as a QR code, for signing in
 2178:           from a phone. The terminal QR needs ``qrcode``; the notebook PNG QR
 2179:           additionally needs Pillow (install ``qrcode[pil]``). Ignored when a
 2180:           custom ``renderer`` is supplied.
 2181:         * ``renderer`` — a :class:`~questdb.auth.Renderer` presenting the prompt.
 2182:           Its callbacks receive native display-normalised but still untrusted
 2183:           identity-provider text; see that class for sink-encoding, actionable-
 2184:           URL and re-entrancy rules.
 2185:         * ``default_interval`` — seconds between device-code polls when the
 2186:           identity provider does not specify one (default 5, minimum 5,
 2187:           maximum 1800, the longest a device code may live). Native clamps the
 2188:           value to that range, so a smaller number would be accepted here and
 2189:           silently become 5; it is rejected instead. A server-supplied
 2190:           interval, and any ``Retry-After``, take precedence.
 2191:         * ``timeout`` — the per-HTTP-request timeout, in seconds or as a
 2192:           :class:`datetime.timedelta` (default 30, maximum 120 seconds). This
 2193:           is **not** a deadline for the sign-in as a whole, which is bounded
 2194:           by the device code's own lifetime. It also bounds
 2195:           how long an attached transport waits for a credential: a flush or
 2196:           connect that needs a fresh token resolves it before its first
 2197:           request, and that can take one refresh (up to ``timeout``) or wait
 2198:           behind a refresh already running on another thread for up to six
 2199:           times ``timeout``. The sender's ``request_timeout``,
 2200:           ``retry_timeout`` and reconnect budget do not cap that wait.
 2201:           Call :meth:`sign_in` before starting the sender to avoid the first,
 2202:           longest acquisition.
 2203:         * ``token_store`` — a :class:`~questdb.auth.FileTokenStore` enabling
 2204:           plaintext on-disk persistence. Credentials stay in memory when this is
 2205:           ``None``.
 2206:         """
 2207:         cdef questdb_oidc_builder* builder
+2208:         self._require_same_process()
  ((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2208, __pyx_L1_error)
+2209:         _oidc_validate_bool(groups_in_token, 'groups_in_token', False)
  __pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_groups_in_token, __pyx_mstate_global->__pyx_n_u_groups_in_token, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2209, __pyx_L1_error)
+2210:         _oidc_validate_bool(insecure, 'insecure', False)
  __pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_insecure, __pyx_mstate_global->__pyx_n_u_insecure, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2210, __pyx_L1_error)
+2211:         _oidc_validate_bool(open_browser, 'open_browser', True)
  __pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_open_browser, __pyx_mstate_global->__pyx_n_u_open_browser, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2211, __pyx_L1_error)
+2212:         _oidc_validate_bool(interactive, 'interactive', True)
  __pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_interactive, __pyx_mstate_global->__pyx_n_u_interactive, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2212, __pyx_L1_error)
+2213:         _oidc_validate_bool(qr, 'qr', False)
  __pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_qr, __pyx_mstate_global->__pyx_n_u_qr, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2213, __pyx_L1_error)
+2214:         builder = questdb_oidc_builder_new()
  __pyx_v_builder = questdb_oidc_builder_new();
+2215:         if builder == NULL:
  __pyx_t_1 = (__pyx_v_builder == NULL);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2216:             raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(1, 2216, __pyx_L1_error)
+2217:         try:
  /*try:*/ {
 2218:             # These three are required positionals, so validate them as such
 2219:             # here rather than letting the optional-string path drop a None and
 2220:             # leave the field unset. Native then reports the field as missing
 2221:             # from QuestDB's /settings and tells the caller to pass it
 2222:             # explicitly -- advice that makes no sense for a constructor that
 2223:             # never contacts /settings, and names a builder method this API does
 2224:             # not have. `from_questdb` keeps the optional path, where they are
 2225:             # genuine overrides.
+2226:             _oidc_required_utf8(client_id, 'client_id')
    __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_required_utf8(__pyx_v_client_id, __pyx_mstate_global->__pyx_n_u_client_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2226, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2227:             _oidc_required_utf8(token_endpoint, 'token_endpoint')
    __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_required_utf8(__pyx_v_token_endpoint, __pyx_mstate_global->__pyx_n_u_token_endpoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2227, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2228:             _oidc_required_utf8(
    __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_required_utf8(__pyx_v_device_authorization_endpoint, __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2228, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 2229:                 device_authorization_endpoint, 'device_authorization_endpoint')
+2230:             _oidc_builder_set_string(builder, client_id, 'client_id', 0)
    __pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_client_id, __pyx_mstate_global->__pyx_n_u_client_id, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2230, __pyx_L5_error)
+2231:             _oidc_builder_set_string(builder, scope, 'scope', 1)
    __pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_scope, __pyx_mstate_global->__pyx_n_u_scope, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2231, __pyx_L5_error)
+2232:             _oidc_builder_set_string(builder, audience, 'audience', 2)
    __pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_audience, __pyx_mstate_global->__pyx_n_u_audience, 2); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2232, __pyx_L5_error)
+2233:             _oidc_builder_set_string(builder, issuer, 'issuer', 3)
    __pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_issuer, __pyx_mstate_global->__pyx_n_u_issuer, 3); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2233, __pyx_L5_error)
+2234:             _oidc_builder_set_string(builder, token_endpoint, 'token_endpoint', 4)
    __pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_token_endpoint, __pyx_mstate_global->__pyx_n_u_token_endpoint, 4); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2234, __pyx_L5_error)
+2235:             _oidc_builder_set_string(
    __pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_device_authorization_endpoint, __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint, 5); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2235, __pyx_L5_error)
 2236:                 builder, device_authorization_endpoint,
 2237:                 'device_authorization_endpoint', 5)
+2238:             self._finish_builder(
    ((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_finish_builder(__pyx_v_self, __pyx_v_builder, __pyx_v_groups_in_token, __pyx_v_insecure, __pyx_v_ca_bundle, __pyx_v_open_browser, __pyx_v_interactive, __pyx_v_qr, __pyx_v_renderer, __pyx_v_default_interval, __pyx_v_timeout, __pyx_v_token_store); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2238, __pyx_L5_error)
  }
 2239:                 builder,
 2240:                 groups_in_token=groups_in_token,
 2241:                 insecure=insecure,
 2242:                 ca_bundle=ca_bundle,
 2243:                 open_browser=open_browser,
 2244:                 interactive=interactive,
 2245:                 qr=qr,
 2246:                 renderer=renderer,
 2247:                 default_interval=default_interval,
 2248:                 timeout=timeout,
 2249:                 token_store=token_store)
 2250:         finally:
+2251:             questdb_oidc_builder_free(builder)
  /*finally:*/ {
    /*normal exit:*/{
      questdb_oidc_builder_free(__pyx_v_builder);
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
      {
        questdb_oidc_builder_free(__pyx_v_builder);
      }
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }
 2252: 
+2253:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_5from_questdb(PyObject *__pyx_v_cls, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_4from_questdb, "Discover OIDC configuration from a QuestDB server\047s ``/settings``.\n\n        Explicit keyword arguments override discovery. ``groups_in_token``\n        defaults to ``None``, meaning \"inherit whatever the server advertises\"\n        (``acl.oidc.groups.encoded.in.token``); pass ``True`` or ``False`` to\n        force the ID-token or access-token kind regardless of the server. This\n        differs from the direct constructor, whose ``groups_in_token`` defaults\n        to ``False``.\n\n        ``url`` is the QuestDB server to discover from; ``client_id``,\n        ``scope``, ``audience``, ``token_endpoint`` and\n        ``device_authorization_endpoint`` default to ``None``, meaning \"take\n        the server\047s value\", and any you pass override it. ``issuer`` is an\n        optional, explicit out-of-band trust pin, never inherited from the\n        server; supply it when either endpoint must be discovered from the\n        identity provider. ``client_id``,\n        ``scope``, ``audience``, ``issuer``, ``token_endpoint`` and\n        ``device_authorization_endpoint`` must be non-empty when provided.\n        The remaining parameters \342\200\224 ``insecure``, ``ca_bundle``, ``open_browser``,\n        ``interactive``, ``qr``, ``renderer``, ``default_interval``,\n        ``timeout`` and ``token_store`` \342\200\224 are not discovered at all and behave\n        exactly as documented on :meth:`__init__`; see there for each.\n\n        Note this call performs blocking network I/O: it fetches\n        ``/settings``, and may follow up with the identity provider\047s own\n        discovery document to confirm the advertised endpoints. Each request\n        is bounded by ``timeout``.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_5from_questdb = {"from_questdb", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_5from_questdb, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_4from_questdb};
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_5from_questdb(PyObject *__pyx_v_cls, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_url = 0;
  PyObject *__pyx_v_client_id = 0;
  PyObject *__pyx_v_scope = 0;
  PyObject *__pyx_v_audience = 0;
  PyObject *__pyx_v_groups_in_token = 0;
  PyObject *__pyx_v_issuer = 0;
  PyObject *__pyx_v_token_endpoint = 0;
  PyObject *__pyx_v_device_authorization_endpoint = 0;
  PyObject *__pyx_v_insecure = 0;
  PyObject *__pyx_v_ca_bundle = 0;
  PyObject *__pyx_v_open_browser = 0;
  PyObject *__pyx_v_interactive = 0;
  PyObject *__pyx_v_qr = 0;
  PyObject *__pyx_v_renderer = 0;
  PyObject *__pyx_v_default_interval = 0;
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_v_token_store = 0;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("from_questdb (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_url,&__pyx_mstate_global->__pyx_n_u_client_id,&__pyx_mstate_global->__pyx_n_u_scope,&__pyx_mstate_global->__pyx_n_u_audience,&__pyx_mstate_global->__pyx_n_u_groups_in_token,&__pyx_mstate_global->__pyx_n_u_issuer,&__pyx_mstate_global->__pyx_n_u_token_endpoint,&__pyx_mstate_global->__pyx_n_u_device_authorization_endpoint,&__pyx_mstate_global->__pyx_n_u_insecure,&__pyx_mstate_global->__pyx_n_u_ca_bundle,&__pyx_mstate_global->__pyx_n_u_open_browser,&__pyx_mstate_global->__pyx_n_u_interactive,&__pyx_mstate_global->__pyx_n_u_qr,&__pyx_mstate_global->__pyx_n_u_renderer,&__pyx_mstate_global->__pyx_n_u_default_interval,&__pyx_mstate_global->__pyx_n_u_timeout,&__pyx_mstate_global->__pyx_n_u_token_store,0};
  PyObject* values[17] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 2253, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2253, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_questdb", 0) < (0)) __PYX_ERR(1, 2253, __pyx_L3_error)
/* … */
  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_4from_questdb(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_url, PyObject *__pyx_v_client_id, PyObject *__pyx_v_scope, PyObject *__pyx_v_audience, PyObject *__pyx_v_groups_in_token, PyObject *__pyx_v_issuer, PyObject *__pyx_v_token_endpoint, PyObject *__pyx_v_device_authorization_endpoint, PyObject *__pyx_v_insecure, PyObject *__pyx_v_ca_bundle, PyObject *__pyx_v_open_browser, PyObject *__pyx_v_interactive, PyObject *__pyx_v_qr, PyObject *__pyx_v_renderer, PyObject *__pyx_v_default_interval, PyObject *__pyx_v_timeout, PyObject *__pyx_v_token_store) {
  PyObject *__pyx_v_encoded_url = 0;
  questdb_error *__pyx_v_err;
  struct questdb_oidc_builder *__pyx_v_builder;
  struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_auth = 0;
  PyThreadState *__pyx_v_gs;
  char const *__pyx_v_encoded_url_ptr;
  size_t __pyx_v_encoded_url_len;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.from_questdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_encoded_url);


  __Pyx_XDECREF((PyObject *)__pyx_v_auth);



  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_PyDict_NewPresized(16); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_5from_questdb, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_from_questdb, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[53])); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 2253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_18);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_from_questdb, __pyx_t_17) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_GetNameInClass(__pyx_t_17, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_from_questdb); if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 2253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = __Pyx_Method_ClassMethod(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_from_questdb, __pyx_t_18) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2254:     def from_questdb(
 2255:             cls,
 2256:             url,
 2257:             *,
+2258:             client_id=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_client_id, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2259:             scope=None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_scope, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2260:             audience=None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_audience, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2261:             groups_in_token=None,
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_groups_in_token, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2262:             issuer=None,
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_issuer, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2263:             token_endpoint=None,
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_token_endpoint, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2264:             device_authorization_endpoint=None,
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2265:             insecure=False,
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_False));
/* … */
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_False));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_insecure, Py_False) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2266:             ca_bundle=None,
      if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_ca_bundle, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2267:             open_browser=None,
      if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_open_browser, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2268:             interactive=None,
      if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_interactive, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2269:             qr=False,
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_False));
/* … */
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_False));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_qr, Py_False) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
+2270:             renderer=None,
      if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_5));
      if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_30));
/* … */
      if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_5));
      if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_30));
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_renderer, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_default_interval, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_timeout, __pyx_mstate_global->__pyx_int_30) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
 2271:             default_interval=5,
 2272:             timeout=30,
+2273:             token_store=None):
      if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_questdb", 1, 1, 1, i); __PYX_ERR(1, 2253, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2253, __pyx_L3_error)
/* … */
      if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_url = values[0];
    __pyx_v_client_id = values[1];
    __pyx_v_scope = values[2];
    __pyx_v_audience = values[3];
    __pyx_v_groups_in_token = values[4];
    __pyx_v_issuer = values[5];
    __pyx_v_token_endpoint = values[6];
    __pyx_v_device_authorization_endpoint = values[7];
    __pyx_v_insecure = values[8];
    __pyx_v_ca_bundle = values[9];
    __pyx_v_open_browser = values[10];
    __pyx_v_interactive = values[11];
    __pyx_v_qr = values[12];
    __pyx_v_renderer = values[13];
    __pyx_v_default_interval = values[14];
    __pyx_v_timeout = values[15];
    __pyx_v_token_store = values[16];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_questdb", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 2253, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.from_questdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_4from_questdb(((PyTypeObject*)__pyx_v_cls), __pyx_v_url, __pyx_v_client_id, __pyx_v_scope, __pyx_v_audience, __pyx_v_groups_in_token, __pyx_v_issuer, __pyx_v_token_endpoint, __pyx_v_device_authorization_endpoint, __pyx_v_insecure, __pyx_v_ca_bundle, __pyx_v_open_browser, __pyx_v_interactive, __pyx_v_qr, __pyx_v_renderer, __pyx_v_default_interval, __pyx_v_timeout, __pyx_v_token_store);
/* … */
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_token_store, Py_None) < (0)) __PYX_ERR(1, 2253, __pyx_L1_error)
 2274:         """Discover OIDC configuration from a QuestDB server's ``/settings``.
 2275: 
 2276:         Explicit keyword arguments override discovery. ``groups_in_token``
 2277:         defaults to ``None``, meaning "inherit whatever the server advertises"
 2278:         (``acl.oidc.groups.encoded.in.token``); pass ``True`` or ``False`` to
 2279:         force the ID-token or access-token kind regardless of the server. This
 2280:         differs from the direct constructor, whose ``groups_in_token`` defaults
 2281:         to ``False``.
 2282: 
 2283:         ``url`` is the QuestDB server to discover from; ``client_id``,
 2284:         ``scope``, ``audience``, ``token_endpoint`` and
 2285:         ``device_authorization_endpoint`` default to ``None``, meaning "take
 2286:         the server's value", and any you pass override it. ``issuer`` is an
 2287:         optional, explicit out-of-band trust pin, never inherited from the
 2288:         server; supply it when either endpoint must be discovered from the
 2289:         identity provider. ``client_id``,
 2290:         ``scope``, ``audience``, ``issuer``, ``token_endpoint`` and
 2291:         ``device_authorization_endpoint`` must be non-empty when provided.
 2292:         The remaining parameters — ``insecure``, ``ca_bundle``, ``open_browser``,
 2293:         ``interactive``, ``qr``, ``renderer``, ``default_interval``,
 2294:         ``timeout`` and ``token_store`` — are not discovered at all and behave
 2295:         exactly as documented on :meth:`__init__`; see there for each.
 2296: 
 2297:         Note this call performs blocking network I/O: it fetches
 2298:         ``/settings``, and may follow up with the identity provider's own
 2299:         discovery document to confirm the advertised endpoints. Each request
 2300:         is bounded by ``timeout``.
 2301:         """
 2302:         cdef bytes encoded_url
+2303:         cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2304:         cdef questdb_oidc_builder* builder
 2305:         cdef OidcDeviceAuth auth
+2306:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 2307:         cdef const char* encoded_url_ptr
 2308:         cdef size_t encoded_url_len
 2309: 
+2310:         _oidc_validate_bool(groups_in_token, 'groups_in_token', True)
  __pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_groups_in_token, __pyx_mstate_global->__pyx_n_u_groups_in_token, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2310, __pyx_L1_error)
+2311:         _oidc_validate_bool(insecure, 'insecure', False)
  __pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_insecure, __pyx_mstate_global->__pyx_n_u_insecure, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2311, __pyx_L1_error)
+2312:         _oidc_validate_bool(open_browser, 'open_browser', True)
  __pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_open_browser, __pyx_mstate_global->__pyx_n_u_open_browser, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2312, __pyx_L1_error)
+2313:         _oidc_validate_bool(interactive, 'interactive', True)
  __pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_interactive, __pyx_mstate_global->__pyx_n_u_interactive, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2313, __pyx_L1_error)
+2314:         _oidc_validate_bool(qr, 'qr', False)
  __pyx_f_7questdb_7_client__oidc_validate_bool(__pyx_v_qr, __pyx_mstate_global->__pyx_n_u_qr, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2314, __pyx_L1_error)
+2315:         encoded_url = _oidc_required_utf8(url, 'url')
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_required_utf8(__pyx_v_url, __pyx_mstate_global->__pyx_n_u_url); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2315, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_encoded_url = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2316:         auth = cls.__new__(cls)
  if (unlikely(((PyObject *)__pyx_v_cls) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object.__new__(X): X is not a type object (NoneType)");
    __PYX_ERR(1, 2316, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_v_cls), __pyx_mstate_global->__pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth)))) __PYX_ERR(1, 2316, __pyx_L1_error)
  __pyx_v_auth = ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_t_1);
  __pyx_t_1 = 0;
+2317:         encoded_url_ptr = PyBytes_AsString(encoded_url)
  __pyx_t_2 = PyBytes_AsString(__pyx_v_encoded_url); if (unlikely(__pyx_t_2 == ((void *)NULL))) __PYX_ERR(1, 2317, __pyx_L1_error)
  __pyx_v_encoded_url_ptr = __pyx_t_2;
+2318:         encoded_url_len = PyBytes_GET_SIZE(encoded_url)
  __pyx_v_encoded_url_len = PyBytes_GET_SIZE(__pyx_v_encoded_url);
 2319: 
+2320:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2321:         builder = questdb_oidc_builder_from_questdb(
  __pyx_v_builder = questdb_oidc_builder_from_questdb(__pyx_v_encoded_url_ptr, __pyx_v_encoded_url_len, (&__pyx_v_err));
 2322:             encoded_url_ptr, encoded_url_len, &err)
+2323:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2324:         if builder == NULL:
  __pyx_t_3 = (__pyx_v_builder == NULL);

  if (unlikely(__pyx_t_3)) {
/* … */
  }
+2325:             raise _oidc_err_to_py(err)
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2325, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2325, __pyx_L1_error)
+2326:         try:
  /*try:*/ {
+2327:             _oidc_builder_set_string(builder, client_id, 'client_id', 0)
    __pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_client_id, __pyx_mstate_global->__pyx_n_u_client_id, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2327, __pyx_L5_error)
+2328:             _oidc_builder_set_string(builder, scope, 'scope', 1)
    __pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_scope, __pyx_mstate_global->__pyx_n_u_scope, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2328, __pyx_L5_error)
+2329:             _oidc_builder_set_string(builder, audience, 'audience', 2)
    __pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_audience, __pyx_mstate_global->__pyx_n_u_audience, 2); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2329, __pyx_L5_error)
+2330:             _oidc_builder_set_string(builder, issuer, 'issuer', 3)
    __pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_issuer, __pyx_mstate_global->__pyx_n_u_issuer, 3); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2330, __pyx_L5_error)
+2331:             _oidc_builder_set_string(builder, token_endpoint, 'token_endpoint', 4)
    __pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_token_endpoint, __pyx_mstate_global->__pyx_n_u_token_endpoint, 4); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2331, __pyx_L5_error)
+2332:             _oidc_builder_set_string(
    __pyx_f_7questdb_7_client__oidc_builder_set_string(__pyx_v_builder, __pyx_v_device_authorization_endpoint, __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint, 5); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2332, __pyx_L5_error)
 2333:                 builder, device_authorization_endpoint,
 2334:                 'device_authorization_endpoint', 5)
+2335:             auth._finish_builder(
    ((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_auth->__pyx_vtab)->_finish_builder(__pyx_v_auth, __pyx_v_builder, __pyx_v_groups_in_token, __pyx_v_insecure, __pyx_v_ca_bundle, __pyx_v_open_browser, __pyx_v_interactive, __pyx_v_qr, __pyx_v_renderer, __pyx_v_default_interval, __pyx_v_timeout, __pyx_v_token_store); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2335, __pyx_L5_error)
 2336:                 builder,
 2337:                 groups_in_token=groups_in_token,
 2338:                 insecure=insecure,
 2339:                 ca_bundle=ca_bundle,
 2340:                 open_browser=open_browser,
 2341:                 interactive=interactive,
 2342:                 qr=qr,
 2343:                 renderer=renderer,
 2344:                 default_interval=default_interval,
 2345:                 timeout=timeout,
 2346:                 token_store=token_store)
+2347:             return auth
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __Pyx_INCREF((PyObject *)__pyx_v_auth);
        __pyx_r = ((PyObject *)__pyx_v_auth);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L4_return;
  }
 2348:         finally:
+2349:             questdb_oidc_builder_free(builder)
  /*finally:*/ {
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
      if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
      {
        questdb_oidc_builder_free(__pyx_v_builder);
      }
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
      goto __pyx_L1_error;
    }
    __pyx_L4_return: {
      __pyx_t_12 = __pyx_r;
      __pyx_r = 0;
      questdb_oidc_builder_free(__pyx_v_builder);
      __pyx_r = __pyx_t_12;
      __pyx_t_12 = 0;
      goto __pyx_L0;
    }
  }
 2350: 
+2351:     cdef void _finish_builder(
static void __pyx_f_7questdb_7_client_14OidcDeviceAuth__finish_builder(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self, struct questdb_oidc_builder *__pyx_v_builder, PyObject *__pyx_v_groups_in_token, PyObject *__pyx_v_insecure, PyObject *__pyx_v_ca_bundle, PyObject *__pyx_v_open_browser, PyObject *__pyx_v_interactive, PyObject *__pyx_v_qr, PyObject *__pyx_v_renderer, PyObject *__pyx_v_default_interval, PyObject *__pyx_v_timeout, PyObject *__pyx_v_token_store) {
  questdb_error *__pyx_v_err;
  PyObject *__pyx_v_encoded = 0;
  uint64_t __pyx_v_timeout_ms;
  PyThreadState *__pyx_v_gs;
  struct __pyx_obj_7questdb_7_client__OidcNativeHandle *__pyx_v_native = 0;
  struct questdb_oidc_auth *__pyx_v_built_raw;
  size_t __pyx_v_provider_id;
  int __pyx_v_detach_callbacks_after_build;
  PyObject *__pyx_v_selected_renderer = 0;
  PyObject *__pyx_v_OidcConfigError = NULL;
  PyObject *__pyx_v_detect_interactive = NULL;
  PyObject *__pyx_v_in_ipython_kernel = NULL;
  PyObject *__pyx_v_make_renderer = NULL;
  PyObject *__pyx_v_FileTokenStore = NULL;
  PyObject *__pyx_v__expand_path_argument = NULL;
  PyObject *__pyx_v_callback_name = NULL;
  PyObject *__pyx_v_partial = NULL;
  PyObject *__pyx_v_provider_ref = NULL;
  __Pyx_INCREF(__pyx_v_ca_bundle);
  __Pyx_INCREF(__pyx_v_open_browser);
  __Pyx_INCREF(__pyx_v_interactive);
  __Pyx_INCREF(__pyx_v_timeout);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._finish_builder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;

  __Pyx_XDECREF(__pyx_v_encoded);


  __Pyx_XDECREF((PyObject *)__pyx_v_native);



  __Pyx_XDECREF(__pyx_v_selected_renderer);
  __Pyx_XDECREF(__pyx_v_OidcConfigError);
  __Pyx_XDECREF(__pyx_v_detect_interactive);
  __Pyx_XDECREF(__pyx_v_in_ipython_kernel);
  __Pyx_XDECREF(__pyx_v_make_renderer);
  __Pyx_XDECREF(__pyx_v_FileTokenStore);
  __Pyx_XDECREF(__pyx_v__expand_path_argument);
  __Pyx_XDECREF(__pyx_v_callback_name);
  __Pyx_XDECREF(__pyx_v_partial);
  __Pyx_XDECREF(__pyx_v_provider_ref);
  __Pyx_XDECREF(__pyx_v_ca_bundle);
  __Pyx_XDECREF(__pyx_v_open_browser);
  __Pyx_XDECREF(__pyx_v_interactive);
  __Pyx_XDECREF(__pyx_v_timeout);

  __Pyx_RefNannyFinishContext();
}
 2352:             self,
 2353:             questdb_oidc_builder* builder,
 2354:             object groups_in_token,
 2355:             object insecure,
 2356:             object ca_bundle,
 2357:             object open_browser,
 2358:             object interactive,
 2359:             object qr,
 2360:             object renderer,
 2361:             object default_interval,
 2362:             object timeout,
 2363:             object token_store) except *:
+2364:         cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2365:         cdef bytes encoded
 2366:         cdef uint64_t timeout_ms
+2367:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 2368:         cdef _OidcNativeHandle native
+2369:         cdef questdb_oidc_auth* built_raw = NULL
  __pyx_v_built_raw = NULL;
 2370:         cdef size_t provider_id
 2371:         cdef bint detach_callbacks_after_build
 2372:         cdef object selected_renderer
+2373:         from questdb.auth._errors import OidcConfigError
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
    __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2373, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfigError};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      switch (__pyx_t_3) {
        case 0:
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v_OidcConfigError = __pyx_t_4;
        break;
        default:;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2374:         from questdb.auth._render import (
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_detect_interactive,__pyx_mstate_global->__pyx_n_u_in_ipython_kernel,__pyx_mstate_global->__pyx_n_u_make_renderer};
    __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__render, __pyx_imported_names, 3, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2374, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_detect_interactive,__pyx_mstate_global->__pyx_n_u_in_ipython_kernel,__pyx_mstate_global->__pyx_n_u_make_renderer};
    for (__pyx_t_3=0; __pyx_t_3 < 3; __pyx_t_3++) {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2374, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      switch (__pyx_t_3) {
        case 0:
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v_detect_interactive = __pyx_t_4;
        break;
        case 1:
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v_in_ipython_kernel = __pyx_t_4;
        break;
        case 2:
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v_make_renderer = __pyx_t_4;
        break;
        default:;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2375:             detect_interactive, in_ipython_kernel, make_renderer)
+2376:         from questdb.auth._store import FileTokenStore
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_FileTokenStore};
    __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__store, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2376, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_FileTokenStore};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2376, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      switch (__pyx_t_3) {
        case 0:
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v_FileTokenStore = __pyx_t_4;
        break;
        default:;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2377: 
+2378:         if self._raw != NULL:
  __pyx_t_5 = (__pyx_v_self->_raw != NULL);

  if (unlikely(__pyx_t_5)) {
/* … */
  }
+2379:             self._require_same_process()
    ((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2379, __pyx_L1_error)
+2380:             raise OidcConfigError('OidcDeviceAuth is already initialized')
    __pyx_t_4 = NULL;
    __Pyx_INCREF(__pyx_v_OidcConfigError);
    __pyx_t_6 = __pyx_v_OidcConfigError; 
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_OidcDeviceAuth_is_already_initia};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2380, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2380, __pyx_L1_error)
+2381:         if groups_in_token is not None and not questdb_oidc_builder_groups_in_token(
  __pyx_t_8 = (__pyx_v_groups_in_token != Py_None);
  if (__pyx_t_8) {

  } else {

    __pyx_t_5 = __pyx_t_8;

    goto __pyx_L5_bool_binop_done;
  }
/* … */
  __pyx_t_9 = (!questdb_oidc_builder_groups_in_token(__pyx_v_builder, __pyx_t_8, (&__pyx_v_err)));



  __pyx_t_5 = __pyx_t_9;

  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_5)) {
/* … */
  }
+2382:                 builder, groups_in_token is True, &err):
  __pyx_t_8 = (__pyx_v_groups_in_token == Py_True);
+2383:             raise _oidc_err_to_py(err)
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2383, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2383, __pyx_L1_error)
+2384:         if not questdb_oidc_builder_allow_insecure_transport(
  __pyx_t_9 = (!questdb_oidc_builder_allow_insecure_transport(__pyx_v_builder, __pyx_t_5, (&__pyx_v_err)));


  if (unlikely(__pyx_t_9)) {
/* … */
  }
+2385:                 builder, insecure is True, &err):
  __pyx_t_5 = (__pyx_v_insecure == Py_True);
+2386:             raise _oidc_err_to_py(err)
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2386, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2386, __pyx_L1_error)
+2387:         if open_browser is None:
  __pyx_t_9 = (__pyx_v_open_browser == Py_None);
  if (__pyx_t_9) {
/* … */
  }
 2388:             # Auto: suppress inside a Jupyter/ZMQ kernel, where the kernel may
 2389:             # well be on a different machine from the person reading the
 2390:             # notebook, so the browser would open where nobody is looking.
 2391:             # That guess is wrong for a LOCAL `jupyter lab`, which is why an
 2392:             # explicit True now overrides it instead of being silently dropped
 2393:             # -- previously `open_browser=True` was a no-op in every kernel,
 2394:             # with no way to ask for the browser at all.
+2395:             open_browser = not in_ipython_kernel()
    __pyx_t_6 = NULL;
    __Pyx_INCREF(__pyx_v_in_ipython_kernel);
    __pyx_t_4 = __pyx_v_in_ipython_kernel; 
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2395, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(1, 2395, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyBool_FromLong((!__pyx_t_9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);

    __Pyx_DECREF_SET(__pyx_v_open_browser, __pyx_t_1);
    __pyx_t_1 = 0;
+2396:         if not questdb_oidc_builder_open_browser(
  __pyx_t_5 = (!questdb_oidc_builder_open_browser(__pyx_v_builder, __pyx_t_9, (&__pyx_v_err)));


  if (unlikely(__pyx_t_5)) {
/* … */
  }
 2397:                 builder,
+2398:                 open_browser is True,
  __pyx_t_9 = (__pyx_v_open_browser == Py_True);
 2399:                 &err):
+2400:             raise _oidc_err_to_py(err)
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2400, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2400, __pyx_L1_error)
+2401:         self._opens_browser = open_browser is True
  __pyx_t_5 = (__pyx_v_open_browser == Py_True);
  __pyx_v_self->_opens_browser = __pyx_t_5;
+2402:         if interactive is None:
  __pyx_t_5 = (__pyx_v_interactive == Py_None);
  if (__pyx_t_5) {
/* … */
  }
+2403:             interactive = detect_interactive()
    __pyx_t_4 = NULL;
    __Pyx_INCREF(__pyx_v_detect_interactive);
    __pyx_t_6 = __pyx_v_detect_interactive; 
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2403, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF_SET(__pyx_v_interactive, __pyx_t_1);
    __pyx_t_1 = 0;
+2404:         if not questdb_oidc_builder_interactive(
  __pyx_t_9 = (!questdb_oidc_builder_interactive(__pyx_v_builder, __pyx_t_5, (&__pyx_v_err)));


  if (unlikely(__pyx_t_9)) {
/* … */
  }
+2405:                 builder, interactive is True, &err):
  __pyx_t_5 = (__pyx_v_interactive == Py_True);
+2406:             raise _oidc_err_to_py(err)
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2406, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2406, __pyx_L1_error)
 2407: 
 2408:         # Bounded at the device code's own maximum lifetime, which is the
 2409:         # ceiling native clamps the interval to anyway. The old bound was the
 2410:         # full uint64 range, and native casts the value to i64 before clamping
 2411:         # -- so anything at or above 2**63 wrapped negative, floored to 0, and
 2412:         # came back out as the 5s MINIMUM. The largest value the validator
 2413:         # accepted therefore produced the fastest possible polling, which is
 2414:         # the opposite of what it asked for.
+2415:         if (not isinstance(default_interval, int)
  __pyx_t_5 = PyLong_Check(__pyx_v_default_interval); 
  __pyx_t_8 = (!__pyx_t_5);


  if (!__pyx_t_8) {

  } else {

    __pyx_t_9 = __pyx_t_8;

    goto __pyx_L13_bool_binop_done;
  }
/* … */
  if (unlikely(__pyx_t_9)) {
/* … */
  }
+2416:                 or isinstance(default_interval, bool)
  __pyx_t_8 = __Pyx_TypeCheck(__pyx_v_default_interval, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  if (!__pyx_t_8) {

  } else {

    __pyx_t_9 = __pyx_t_8;

    goto __pyx_L13_bool_binop_done;
  }
+2417:                 or default_interval < 5
  __pyx_t_8 = __Pyx_PyObject_CompareBoolLt_object_int(__pyx_v_default_interval, __pyx_mstate_global->__pyx_int_5, Py_LT); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(1, 2417, __pyx_L1_error)
  if (!__pyx_t_8) {

  } else {

    __pyx_t_9 = __pyx_t_8;

    goto __pyx_L13_bool_binop_done;
  }
+2418:                 or default_interval > 1800):
  __pyx_t_8 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_default_interval, __pyx_mstate_global->__pyx_int_1800, Py_GT); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(1, 2418, __pyx_L1_error)

  __pyx_t_9 = __pyx_t_8;

  __pyx_L13_bool_binop_done:;
+2419:             raise OidcConfigError(
    __pyx_t_6 = NULL;
    __Pyx_INCREF(__pyx_v_OidcConfigError);
    __pyx_t_4 = __pyx_v_OidcConfigError; 
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_default_interval_must_be_an_inte};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2419, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2419, __pyx_L1_error)
 2420:                 'default_interval must be an integer number of seconds '
 2421:                 'between 5 and 1800 (the maximum device-code lifetime)')
+2422:         if not questdb_oidc_builder_default_interval_seconds(
  __pyx_t_9 = (!questdb_oidc_builder_default_interval_seconds(__pyx_v_builder, ((uint64_t)__pyx_t_10), (&__pyx_v_err)));


  if (unlikely(__pyx_t_9)) {
/* … */
  }
+2423:                 builder, <uint64_t>default_interval, &err):
  __pyx_t_10 = __Pyx_PyLong_As_uint64_t(__pyx_v_default_interval); if (unlikely((__pyx_t_10 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 2423, __pyx_L1_error)
+2424:             raise _oidc_err_to_py(err)
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2424, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2424, __pyx_L1_error)
 2425: 
+2426:         if isinstance(timeout, datetime.timedelta):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2426, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_timedelta); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2426, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = PyObject_IsInstance(__pyx_v_timeout, __pyx_t_4); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 2426, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_9) {
/* … */
    goto __pyx_L18;
  }
+2427:             timeout = timeout.total_seconds()
    __pyx_t_1 = __pyx_v_timeout;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_total_seconds, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2427, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_DECREF_SET(__pyx_v_timeout, __pyx_t_4);
    __pyx_t_4 = 0;
+2428:         elif (not isinstance(timeout, (int, float))
  __pyx_t_5 = PyLong_Check(__pyx_v_timeout); 
  if (!__pyx_t_5) {

  } else {

    __pyx_t_8 = __pyx_t_5;

    goto __pyx_L21_bool_binop_done;
  }
  __pyx_t_5 = PyFloat_Check(__pyx_v_timeout); 

  __pyx_t_8 = __pyx_t_5;

  __pyx_L21_bool_binop_done:;
  __pyx_t_5 = (!__pyx_t_8);


  if (!__pyx_t_5) {

  } else {

    __pyx_t_9 = __pyx_t_5;

    goto __pyx_L19_bool_binop_done;
  }
/* … */
  if (unlikely(__pyx_t_9)) {
/* … */
  }
  __pyx_L18:;
+2429:                 or isinstance(timeout, bool)):
  __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 

  __pyx_t_9 = __pyx_t_5;

  __pyx_L19_bool_binop_done:;
+2430:             raise OidcConfigError(
    __pyx_t_1 = NULL;
    __Pyx_INCREF(__pyx_v_OidcConfigError);
    __pyx_t_6 = __pyx_v_OidcConfigError; 
+2431:                 'timeout must be a number of seconds or a datetime.timedelta, '
    __pyx_t_11 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_timeout_must_be_a_number_of_seco, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2431, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_1);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_11};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2430, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(1, 2430, __pyx_L1_error)
+2432:                 f'not {_fqn(type(timeout))}')
    __pyx_t_11 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_timeout)))); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2432, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = __Pyx_PyUnicode_Unicode(__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 2432, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+2433:         if (timeout <= 0
  __pyx_t_5 = __Pyx_PyObject_CompareBoolLe_object_int(__pyx_v_timeout, __pyx_mstate_global->__pyx_int_0, Py_LE); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(1, 2433, __pyx_L1_error)
  if (!__pyx_t_5) {

  } else {

    __pyx_t_9 = __pyx_t_5;

    goto __pyx_L24_bool_binop_done;
  }
/* … */
  if (unlikely(__pyx_t_9)) {
/* … */
  }
+2434:                 or timeout > 120
  __pyx_t_5 = __Pyx_PyObject_CompareBoolGt_object_int(__pyx_v_timeout, __pyx_mstate_global->__pyx_int_120, Py_GT); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(1, 2434, __pyx_L1_error)
  if (!__pyx_t_5) {

  } else {

    __pyx_t_9 = __pyx_t_5;

    goto __pyx_L24_bool_binop_done;
  }
+2435:                 or (isinstance(timeout, float) and isnan(timeout))):
  __pyx_t_5 = PyFloat_Check(__pyx_v_timeout); 
  if (__pyx_t_5) {

  } else {

    __pyx_t_9 = __pyx_t_5;

    goto __pyx_L24_bool_binop_done;
  }
  __pyx_t_13 = __Pyx_PyFloat_AsDouble(__pyx_v_timeout); if (unlikely((__pyx_t_13 == (long double)-1) && PyErr_Occurred())) __PYX_ERR(1, 2435, __pyx_L1_error)
  __pyx_t_5 = isnan(__pyx_t_13);



  __pyx_t_9 = __pyx_t_5;

  __pyx_L24_bool_binop_done:;
+2436:             raise OidcConfigError(
    __pyx_t_6 = NULL;
    __Pyx_INCREF(__pyx_v_OidcConfigError);
    __pyx_t_11 = __pyx_v_OidcConfigError; 
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_timeout_must_be_a_positive_finit};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2436, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(1, 2436, __pyx_L1_error)
 2437:                 'timeout must be a positive, finite number no greater than 120 seconds')
+2438:         timeout_ms = <uint64_t>round(timeout * 1000)
  __pyx_t_11 = NULL;
  __pyx_t_6 = __Pyx_PyLong_MultiplyObjC(__pyx_v_timeout, __pyx_mstate_global->__pyx_int_1000, 0x3E8, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_6};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_10 = __Pyx_PyLong_As_uint64_t(__pyx_t_4); if (unlikely((__pyx_t_10 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 2438, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_timeout_ms = ((uint64_t)__pyx_t_10);

+2439:         if timeout_ms == 0 or not questdb_oidc_builder_timeout_ms(
  __pyx_t_5 = (__pyx_v_timeout_ms == 0);

  if (!__pyx_t_5) {

  } else {

    __pyx_t_9 = __pyx_t_5;

    goto __pyx_L29_bool_binop_done;
  }
/* … */
  __pyx_t_5 = (!questdb_oidc_builder_timeout_ms(__pyx_v_builder, __pyx_v_timeout_ms, (&__pyx_v_err)));


  __pyx_t_9 = __pyx_t_5;

  __pyx_L29_bool_binop_done:;
/* … */
  if (__pyx_t_9) {
/* … */
  }
 2440:                 builder, timeout_ms, &err):
+2441:             if err != NULL:
    __pyx_t_9 = (__pyx_v_err != NULL);

    if (unlikely(__pyx_t_9)) {
/* … */
    }
+2442:                 raise _oidc_err_to_py(err)
      __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2442, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(1, 2442, __pyx_L1_error)
+2443:             raise OidcConfigError('timeout is too small')
    __pyx_t_6 = NULL;
    __Pyx_INCREF(__pyx_v_OidcConfigError);
    __pyx_t_11 = __pyx_v_OidcConfigError; 
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_timeout_is_too_small};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2443, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(1, 2443, __pyx_L1_error)
 2444: 
+2445:         if ca_bundle is not None:
  __pyx_t_9 = (__pyx_v_ca_bundle != Py_None);
  if (__pyx_t_9) {
/* … */
  }
 2446:             # Accept the same path forms as FileTokenStore: str, bytes or any
 2447:             # os.PathLike, with `~` expanded and the result made absolute.
+2448:             from questdb.auth._store import _expand_path_argument
    {
      PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_expand_path_argument};
      __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__store, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2448, __pyx_L1_error)
    }
    __pyx_t_4 = __pyx_t_2;
    __Pyx_GOTREF(__pyx_t_4);
    {
      PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_expand_path_argument};
      __pyx_t_3 = 0; {
        __pyx_t_11 = __Pyx_ImportFrom(__pyx_t_4, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2448, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        switch (__pyx_t_3) {
          case 0:
          __Pyx_INCREF(__pyx_t_11);
          __pyx_v__expand_path_argument = __pyx_t_11;
          break;
          default:;
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2449:             ca_bundle = _expand_path_argument(
    __pyx_t_11 = NULL;
    __Pyx_INCREF(__pyx_v__expand_path_argument);
    __pyx_t_6 = __pyx_v__expand_path_argument; 
+2450:                 ca_bundle, 'ca_bundle', 'the OIDC CA bundle')
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_11);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[4] = {__pyx_t_11, __pyx_v_ca_bundle, __pyx_mstate_global->__pyx_n_u_ca_bundle, __pyx_mstate_global->__pyx_kp_u_the_OIDC_CA_bundle};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2449, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_DECREF_SET(__pyx_v_ca_bundle, __pyx_t_4);
    __pyx_t_4 = 0;
+2451:         encoded = _oidc_optional_utf8(ca_bundle, 'ca_bundle')
  __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_optional_utf8(__pyx_v_ca_bundle, __pyx_mstate_global->__pyx_n_u_ca_bundle); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2451, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_encoded = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+2452:         if encoded is not None and not questdb_oidc_builder_ca_bundle(
  __pyx_t_5 = (__pyx_v_encoded != ((PyObject*)Py_None));
  if (__pyx_t_5) {

  } else {

    __pyx_t_9 = __pyx_t_5;

    goto __pyx_L34_bool_binop_done;
  }
/* … */
  __pyx_t_5 = (!questdb_oidc_builder_ca_bundle(__pyx_v_builder, __pyx_t_14, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err)));



  __pyx_t_9 = __pyx_t_5;

  __pyx_L34_bool_binop_done:;
  if (unlikely(__pyx_t_9)) {
/* … */
  }
 2453:                 builder,
+2454:                 PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err):
  __pyx_t_14 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_14 == ((void *)NULL))) __PYX_ERR(1, 2454, __pyx_L1_error)
+2455:             raise _oidc_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(1, 2455, __pyx_L1_error)
 2456: 
+2457:         if token_store is not None:
  __pyx_t_9 = (__pyx_v_token_store != Py_None);
  if (__pyx_t_9) {
/* … */
  }
+2458:             if not isinstance(token_store, FileTokenStore):
    __pyx_t_9 = PyObject_IsInstance(__pyx_v_token_store, __pyx_v_FileTokenStore); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 2458, __pyx_L1_error)
    __pyx_t_5 = (!__pyx_t_9);


    if (unlikely(__pyx_t_5)) {
/* … */
    }
+2459:                 raise OidcConfigError(
      __pyx_t_6 = NULL;
      __Pyx_INCREF(__pyx_v_OidcConfigError);
      __pyx_t_11 = __pyx_v_OidcConfigError; 
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
        assert(__pyx_t_6);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_native_OIDC_supports_FileTokenSt};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2459, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(1, 2459, __pyx_L1_error)
 2460:                     'native OIDC supports FileTokenStore persistence only')
 2461:             # The native ABI accepts UTF-8 text, not arbitrary POSIX path
 2462:             # bytes. FileTokenStore uses os.fsdecode(), which intentionally
 2463:             # preserves undecodable bytes as surrogate characters; translate
 2464:             # that unsupported case into the public configuration error type.
+2465:             encoded = _oidc_required_utf8(
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_required_utf8(__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_token_store_directory); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2465, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_encoded, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;
+2466:                 os.fspath(token_store.directory), 'token_store directory')
    __pyx_t_11 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2466, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_fspath); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2466, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_token_store, __pyx_mstate_global->__pyx_n_u_directory); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2466, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
      assert(__pyx_t_11);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_6};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2466, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
+2467:             if not questdb_oidc_builder_file_token_store(
    __pyx_t_5 = (!questdb_oidc_builder_file_token_store(__pyx_v_builder, __pyx_t_14, PyBytes_GET_SIZE(__pyx_v_encoded), (&__pyx_v_err)));


    if (unlikely(__pyx_t_5)) {
/* … */
    }
 2468:                     builder,
+2469:                     PyBytes_AsString(encoded), PyBytes_GET_SIZE(encoded), &err):
    __pyx_t_14 = PyBytes_AsString(__pyx_v_encoded); if (unlikely(__pyx_t_14 == ((void *)NULL))) __PYX_ERR(1, 2469, __pyx_L1_error)
+2470:                 raise _oidc_err_to_py(err)
      __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2470, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 2470, __pyx_L1_error)
 2471: 
 2472:         # Validate a local before publishing it on `self`. A renderer is allowed
 2473:         # to hold its provider, so assigning first made a validation failure a
 2474:         # provider <-> renderer cycle that PyPy cpyext cannot reclaim.
 2475:         selected_renderer = (
+2476:             renderer if renderer is not None else make_renderer(qr=qr is True))
  __pyx_t_5 = (__pyx_v_renderer != Py_None);
  if (__pyx_t_5) {
    __Pyx_INCREF(__pyx_v_renderer);
    __pyx_t_1 = __pyx_v_renderer;
  } else {
    __pyx_t_6 = NULL;
    __Pyx_INCREF(__pyx_v_make_renderer);
    __pyx_t_11 = __pyx_v_make_renderer; 
    __pyx_t_9 = (__pyx_v_qr == Py_True);
    __pyx_t_12 = __Pyx_PyBool_FromLong(__pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 2476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);

    #if CYTHON_VECTORCALL
    #endif
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_12};
      #if CYTHON_VECTORCALL
      __pyx_t_15 = __pyx_mstate_global->__pyx_tuple[11];
      if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2476, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_15);
      #else
      {
        PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_qr};
        __pyx_t_15 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 1);
        if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2476, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
      }
      #endif
      __pyx_t_4 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_15);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      #if CYTHON_VECTORCALL
      #endif
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2476, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  }

  __pyx_v_selected_renderer = __pyx_t_1;
  __pyx_t_1 = 0;
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_qr};
    __pyx_mstate_global->__pyx_tuple[11] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[11])) __PYX_ERR(1, 2476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[11]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[11]);
+2477:         for callback_name in (
  __pyx_t_1 = __pyx_mstate_global->__pyx_tuple[12]; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = 0;
  for (;;) {
    if (__pyx_t_3 >= 4) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3));
    #else
    __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_3);
    #endif
    ++__pyx_t_3;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2477, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(1, 2477, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_callback_name, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2478:                 'on_prompt', 'on_waiting', 'on_success', 'on_failure'):
  {
    PyObject* __pyx_temp[4] = {__pyx_mstate_global->__pyx_n_u_on_prompt, __pyx_mstate_global->__pyx_n_u_on_waiting, __pyx_mstate_global->__pyx_n_u_on_success, __pyx_mstate_global->__pyx_n_u_on_failure};
    __pyx_mstate_global->__pyx_tuple[12] = __Pyx_PyTuple_FromArray(__pyx_temp, 4); if (unlikely(!__pyx_mstate_global->__pyx_tuple[12])) __PYX_ERR(1, 2478, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[12]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[12]);
+2479:             if not callable(getattr(selected_renderer, callback_name, None)):
    __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_selected_renderer, __pyx_v_callback_name, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2479, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyCallable_Check(__pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 2479, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_9 = (!__pyx_t_5);


    if (unlikely(__pyx_t_9)) {
/* … */
    }
+2480:                 raise OidcConfigError(
      __pyx_t_11 = NULL;
      __Pyx_INCREF(__pyx_v_OidcConfigError);
      __pyx_t_15 = __pyx_v_OidcConfigError; 
+2481:                     f'renderer callback {callback_name} must be callable')
      __pyx_t_12 = __Pyx_PyUnicode_Unicode(__pyx_v_callback_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 2481, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_renderer_callback;
      __pyx_t_16[1] = __pyx_t_12;
      __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_must_be_callable;
      __pyx_t_17 = 35;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_17 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16[1]);
      #endif
      __pyx_t_18 = 0;
      #if __Pyx_PyUnicode_Join_CAN_USE_KIND_AND_LENGTH
      __pyx_t_18 |= __Pyx_PyUnicode_KIND_04(__pyx_t_16[1]);
      #endif
      __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_16, 3, __pyx_t_17, __pyx_t_18);
      if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2481, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_15))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_15);
        assert(__pyx_t_11);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_15, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_6};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2480, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(1, 2480, __pyx_L1_error)
 2482:         # Hand native an opaque integer key, not a `PyObject*`. Native callback
 2483:         # state then owns no Python reference, so its release callback -- which
 2484:         # can run on an abandoned acquisition worker after the interpreter has
 2485:         # begun finalizing -- never needs the GIL. See
 2486:         # `_oidc_user_data_release_trampoline`.
 2487:         global _oidc_last_provider_id
+2488:         with _OIDC_REGISTRY_LOCK:
  /*with:*/ {
    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2488, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = NULL;
    __pyx_t_15 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2488, __pyx_L43_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_15))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_15);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_15, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2488, __pyx_L43_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_2) {
          __pyx_t_21 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[6], NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_21)) __PYX_ERR(1, 2488, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_21);
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
        }
        goto __pyx_L46;
      }
      __pyx_L46:;
    }
    goto __pyx_L53;
    __pyx_L43_error:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L1_error;
    __pyx_L53:;
  }
+2489:             _oidc_last_provider_id += 1
          __pyx_v_7questdb_7_client__oidc_last_provider_id = (__pyx_v_7questdb_7_client__oidc_last_provider_id + 1);
+2490:             provider_id = _oidc_last_provider_id
          __pyx_v_provider_id = __pyx_v_7questdb_7_client__oidc_last_provider_id;
+2491:         self._provider_id = provider_id
  __pyx_v_self->_provider_id = __pyx_v_provider_id;
+2492:         native = _OidcNativeHandle()
  __pyx_t_15 = NULL;
  __pyx_t_7 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_15, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__OidcNativeHandle, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2492, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_v_native = ((struct __pyx_obj_7questdb_7_client__OidcNativeHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
 2493:         # The provider owns the handle; take that reference before anything can
 2494:         # fail, so no path can build a handle the provider does not hold.
+2495:         self._native = native
  __Pyx_INCREF((PyObject *)__pyx_v_native);
  __Pyx_GIVEREF((PyObject *)__pyx_v_native);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_native);
  __Pyx_DECREF_SET(__pyx_v_self->_native, __pyx_v_native);
 2496:         # The registry keeps only a weakref, so it never keeps a provider alive
 2497:         # and a `with` block's exit still collects one. The provider owns the
 2498:         # renderer. Cython exposes that edge to CPython's cyclic GC; PyPy's
 2499:         # cpyext cannot reclaim a cycle crossing the extension-object boundary
 2500:         # (PyPy issue #3848), so callers there should explicitly close or use a
 2501:         # weak renderer back-reference. Attached transports retain the provider
 2502:         # separately, and native holds its own cloned handle on top of that.
+2503:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
    goto __pyx_L59_try_end;
    __pyx_L54_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __pyx_L56_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_21);
    __Pyx_XGIVEREF(__pyx_t_20);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_21, __pyx_t_20);
    goto __pyx_L1_error;
    __pyx_L59_try_end:;
  }
+2504:             self._renderer = selected_renderer
      __Pyx_INCREF(__pyx_v_selected_renderer);
      __Pyx_GIVEREF(__pyx_v_selected_renderer);
      __Pyx_GOTREF(__pyx_v_self->_renderer);
      __Pyx_DECREF_SET(__pyx_v_self->_renderer, __pyx_v_selected_renderer);
+2505:             from functools import partial
      {
        PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_partial};
        __pyx_t_19 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_functools, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 2505, __pyx_L54_error)
      }
      __pyx_t_1 = __pyx_t_19;
      __Pyx_GOTREF(__pyx_t_1);
      {
        PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_partial};
        __pyx_t_3 = 0; {
          __pyx_t_15 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2505, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_15);
          switch (__pyx_t_3) {
            case 0:
            __Pyx_INCREF(__pyx_t_15);
            __pyx_v_partial = __pyx_t_15;
            break;
            default:;
          }
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2506:             provider_ref = PyWeakref_NewRef(
      __pyx_t_4 = PyWeakref_NewRef(((PyObject *)__pyx_v_self), __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2506, __pyx_L54_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_provider_ref = __pyx_t_4;
      __pyx_t_4 = 0;
+2507:                 self, partial(_oidc_provider_collected, provider_id))
      __pyx_t_15 = NULL;
      __Pyx_INCREF(__pyx_v_partial);
      __pyx_t_4 = __pyx_v_partial; 
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_oidc_provider_collected); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2507, __pyx_L54_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_11 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2507, __pyx_L54_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_4);
        assert(__pyx_t_15);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_15);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_6, __pyx_t_11};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2507, __pyx_L54_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
 2508:             # The lock is released before the blocking native build below: it
 2509:             # guards the registry, not the construction.
+2510:             with _OIDC_REGISTRY_LOCK:
      /*with:*/ {
        __pyx_t_19 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 2510, __pyx_L54_error)
        __Pyx_GOTREF(__pyx_t_19);
        __pyx_t_1 = NULL;
        __pyx_t_11 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2510, __pyx_L60_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_7 = 1;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_11))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_11);
          assert(__pyx_t_1);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
          __pyx_t_7 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2510, __pyx_L60_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        /*try:*/ {
          {
            /*try:*/ {
/* … */
            }
            __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
            __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
            __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
            goto __pyx_L69_try_end;
            __pyx_L64_error:;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            /*except:*/ {
              __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._finish_builder", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_1) < 0) __PYX_ERR(1, 2510, __pyx_L66_except_error)
              __Pyx_XGOTREF(__pyx_t_4);
              __Pyx_XGOTREF(__pyx_t_11);
              __Pyx_XGOTREF(__pyx_t_1);
              {
                PyObject* __pyx_temp[3] = {__pyx_t_4, __pyx_t_11, __pyx_t_1};
                __pyx_t_6 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2510, __pyx_L66_except_error)
                __Pyx_GOTREF(__pyx_t_6);
              }
              __pyx_t_25 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_t_6, NULL);
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              if (unlikely(!__pyx_t_25)) __PYX_ERR(1, 2510, __pyx_L66_except_error)
              __Pyx_GOTREF(__pyx_t_25);
              __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_25);
              __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
              if (__pyx_t_9 < (0)) __PYX_ERR(1, 2510, __pyx_L66_except_error)
              __pyx_t_5 = (!__pyx_t_9);


              if (unlikely(__pyx_t_5)) {

                __Pyx_GIVEREF(__pyx_t_4);
                __Pyx_GIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_1);
                __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_11, __pyx_t_1);
                __pyx_t_4 = 0;  __pyx_t_11 = 0;  __pyx_t_1 = 0; 
                __PYX_ERR(1, 2510, __pyx_L66_except_error)
              }
              __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              goto __pyx_L65_exception_handled;
            }
            __pyx_L66_except_error:;
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
            goto __pyx_L54_error;
            __pyx_L65_exception_handled:;
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
            __pyx_L69_try_end:;
          }
        }
        /*finally:*/ {
          /*normal exit:*/{
            if (__pyx_t_19) {
              __pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[6], NULL);
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              if (unlikely(!__pyx_t_24)) __PYX_ERR(1, 2510, __pyx_L54_error)
              __Pyx_GOTREF(__pyx_t_24);
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            }
            goto __pyx_L63;
          }
          __pyx_L63:;
        }
        goto __pyx_L73;
        __pyx_L60_error:;
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        goto __pyx_L54_error;
        __pyx_L73:;
      }
+2511:                 _OIDC_PROVIDERS[provider_id] = provider_ref
              if (unlikely((__Pyx_SetItemInt(__pyx_v_7questdb_7_client__OIDC_PROVIDERS, __pyx_v_provider_id, __pyx_v_provider_ref, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference) < 0))) __PYX_ERR(1, 2511, __pyx_L64_error)
+2512:                 _OIDC_NATIVE_HANDLES[provider_id] = native
              if (unlikely((__Pyx_SetItemInt(__pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES, __pyx_v_provider_id, ((PyObject *)__pyx_v_native), size_t, 0, __Pyx_PyLong_FromSize_t, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference) < 0))) __PYX_ERR(1, 2512, __pyx_L64_error)
 2513:             # Registered <=> built. Every failure after registration must drop
 2514:             # both entries immediately, rather than waiting for the half-built
 2515:             # provider to be collected. That also lets a subclass retry
 2516:             # `__init__` without stranding a dead weakref or a registry entry.
+2517:             if not questdb_oidc_builder_event_handler(
      __pyx_t_5 = (!questdb_oidc_builder_event_handler(__pyx_v_builder, __pyx_f_7questdb_7_client__oidc_event_trampoline, ((void *)__pyx_v_provider_id), __pyx_f_7questdb_7_client__oidc_user_data_release_trampoline, (&__pyx_v_err)));

      if (unlikely(__pyx_t_5)) {
/* … */
      }
 2518:                     builder,
 2519:                     _oidc_event_trampoline,
 2520:                     <void*>provider_id,
 2521:                     _oidc_user_data_release_trampoline,
 2522:                     &err):
+2523:                 raise _oidc_err_to_py(err)
        __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2523, __pyx_L54_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_Raise(__pyx_t_1, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(1, 2523, __pyx_L54_error)
 2524:             # Persistence warnings use a separate callback because they can
 2525:             # originate on background provider threads. Its user_data carries
 2526:             # only the provider id; it never retains a Python object or enters
 2527:             # the user renderer.
 2528:             #
 2529:             # Installed only alongside a token store. Every native
 2530:             # `warn_persistence` site sits behind a store gate, so a provider
 2531:             # without one emits no diagnostic and the handler would be nothing
 2532:             # but added interpreter-shutdown surface. The process-wide gate
 2533:             # synchronizes any callbacks installed here. Native's default
 2534:             # stderr handler stays registered otherwise and is equally
 2535:             # unreachable, so nothing escapes the `questdb` logger.
+2536:             if token_store is not None:
      __pyx_t_5 = (__pyx_v_token_store != Py_None);
      if (__pyx_t_5) {
/* … */
      }
+2537:                 if not questdb_oidc_builder_diagnostic_handler(
        __pyx_t_5 = (!questdb_oidc_builder_diagnostic_handler(__pyx_v_builder, __pyx_f_7questdb_7_client__oidc_diagnostic_trampoline, ((void *)__pyx_v_provider_id), __pyx_f_7questdb_7_client__oidc_user_data_release_trampoline, (&__pyx_v_err)));

        if (unlikely(__pyx_t_5)) {
/* … */
        }
 2538:                         builder,
 2539:                         _oidc_diagnostic_trampoline,
 2540:                         <void*>provider_id,
 2541:                         _oidc_user_data_release_trampoline,
 2542:                         &err):
+2543:                     raise _oidc_err_to_py(err)
          __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2543, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_Raise(__pyx_t_1, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __PYX_ERR(1, 2543, __pyx_L54_error)
 2544:             # Build into a thread-local C pointer while the GIL is released.
 2545:             # Publishing directly into `native.raw` here races the atexit hook:
 2546:             # it can acquire the GIL, snapshot this registered handle, and read
 2547:             # that field while native is writing it. Reacquiring the GIL before
 2548:             # publication makes the field obey the same synchronization as every
 2549:             # reader; the marker check below then self-detaches a build that the
 2550:             # shutdown snapshot observed while its raw field was still NULL.
+2551:             _ensure_doesnt_have_gil(&gs)
      (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2552:             built_raw = questdb_oidc_builder_build(builder, &err)
      __pyx_v_built_raw = questdb_oidc_builder_build(__pyx_v_builder, (&__pyx_v_err));
+2553:             _ensure_has_gil(&gs)
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2554:             if built_raw == NULL:
      __pyx_t_5 = (__pyx_v_built_raw == NULL);

      if (unlikely(__pyx_t_5)) {
/* … */
      }
+2555:                 raise _oidc_err_to_py(err)
        __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2555, __pyx_L54_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_Raise(__pyx_t_1, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(1, 2555, __pyx_L54_error)
+2556:             native.raw = built_raw
      __pyx_v_native->raw = __pyx_v_built_raw;
+2557:             with _OIDC_REGISTRY_LOCK:
      /*with:*/ {
        __pyx_t_19 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 2557, __pyx_L54_error)
        __Pyx_GOTREF(__pyx_t_19);
        __pyx_t_11 = NULL;
        __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2557, __pyx_L78_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_7 = 1;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
          assert(__pyx_t_11);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
          __pyx_t_7 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2557, __pyx_L78_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        /*try:*/ {
          {
            /*try:*/ {
/* … */
            }
          }
        }
        /*finally:*/ {
          /*normal exit:*/{
            if (__pyx_t_19) {
              __pyx_t_22 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[6], NULL);
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              if (unlikely(!__pyx_t_22)) __PYX_ERR(1, 2557, __pyx_L54_error)
              __Pyx_GOTREF(__pyx_t_22);
              __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            }
            goto __pyx_L81;
          }
          __pyx_L81:;
        }
        goto __pyx_L88;
        __pyx_L78_error:;
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        goto __pyx_L54_error;
        __pyx_L88:;
      }
+2558:                 detach_callbacks_after_build = _oidc_callbacks_shutting_down
              __pyx_v_detach_callbacks_after_build = __pyx_v_7questdb_7_client__oidc_callbacks_shutting_down;
+2559:             if detach_callbacks_after_build:
      if (__pyx_v_detach_callbacks_after_build) {
/* … */
      }
 2560:                 # This provider finished after the atexit snapshot while an
 2561:                 # older callback drain had released the GIL. No Python caller
 2562:                 # can use it before __init__ returns, so detach both callback
 2563:                 # targets now, before exposing the completed provider.
+2564:                 _oidc_detach_handle_callbacks(native, True)
        __pyx_f_7questdb_7_client__oidc_detach_handle_callbacks(__pyx_v_native, 1);
+2565:             self._raw = native.raw
      __pyx_t_26 = __pyx_v_native->raw;

      __pyx_v_self->_raw = __pyx_t_26;
 2566:             # A failed build leaves `_raw` NULL and this function supports
 2567:             # re-initialisation from that state, but `close()` latches
 2568:             # `_closed` even on a NULL handle -- and `__cinit__`, the only
 2569:             # other place the flag is cleared, does not re-run. Without this a
 2570:             # retried `__init__` would build a perfectly usable provider that
 2571:             # every entry point then refused as "closed", with no way back.
+2572:             self._closed = False
      __pyx_v_self->_closed = 0;
+2573:         except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._finish_builder", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_11) < 0) __PYX_ERR(1, 2573, __pyx_L56_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_11);
 2574:             # Dropping `_native` releases the handle if the build got that far;
 2575:             # `_OidcNativeHandle.__dealloc__` is NULL-safe when it did not.
+2576:             self._raw = NULL
      __pyx_v_self->_raw = NULL;
+2577:             self._native = None
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      __Pyx_GOTREF((PyObject *)__pyx_v_self->_native);
      __Pyx_DECREF_SET(__pyx_v_self->_native, ((struct __pyx_obj_7questdb_7_client__OidcNativeHandle *)Py_None));
+2578:             self._provider_id = 0
      __pyx_v_self->_provider_id = 0;
 2579:             # Match close(): break the supported renderer -> provider back-edge
 2580:             # on every failed native build. Validation failures never publish
 2581:             # the renderer at all.
+2582:             self._renderer = None
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      __Pyx_GOTREF(__pyx_v_self->_renderer);
      __Pyx_DECREF_SET(__pyx_v_self->_renderer, Py_None);
+2583:             with _OIDC_REGISTRY_LOCK:
      /*with:*/ {
        __pyx_t_19 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_19)) __PYX_ERR(1, 2583, __pyx_L56_except_error)
        __Pyx_GOTREF(__pyx_t_19);
        __pyx_t_15 = NULL;
        __pyx_t_12 = __Pyx_PyObject_LookupSpecial(__pyx_v_7questdb_7_client__OIDC_REGISTRY_LOCK, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 2583, __pyx_L92_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_7 = 1;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_12))) {
          __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_12);
          assert(__pyx_t_15);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12);
          __Pyx_INCREF(__pyx_t_15);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_12, __pyx__function);
          __pyx_t_7 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_15, NULL};
          __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2583, __pyx_L92_error)
          __Pyx_GOTREF(__pyx_t_6);
        }
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        /*try:*/ {
          {
            /*try:*/ {
/* … */
            }
            __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
            __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
            __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
            goto __pyx_L105_try_end;
            __pyx_L98_error:;
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            /*except:*/ {
              __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._finish_builder", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_12, &__pyx_t_15) < 0) __PYX_ERR(1, 2583, __pyx_L100_except_error)
              __Pyx_XGOTREF(__pyx_t_6);
              __Pyx_XGOTREF(__pyx_t_12);
              __Pyx_XGOTREF(__pyx_t_15);
              {
                PyObject* __pyx_temp[3] = {__pyx_t_6, __pyx_t_12, __pyx_t_15};
                __pyx_t_27 = __Pyx_PyTuple_FromArray(__pyx_temp, 3); if (unlikely(!__pyx_t_27)) __PYX_ERR(1, 2583, __pyx_L100_except_error)
                __Pyx_GOTREF(__pyx_t_27);
              }
              __pyx_t_25 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_t_27, NULL);
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
              if (unlikely(!__pyx_t_25)) __PYX_ERR(1, 2583, __pyx_L100_except_error)
              __Pyx_GOTREF(__pyx_t_25);
              __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_25);
              __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
              if (__pyx_t_5 < (0)) __PYX_ERR(1, 2583, __pyx_L100_except_error)
              __pyx_t_9 = (!__pyx_t_5);


              if (unlikely(__pyx_t_9)) {

                __Pyx_GIVEREF(__pyx_t_6);
                __Pyx_GIVEREF(__pyx_t_12);
                __Pyx_XGIVEREF(__pyx_t_15);
                __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_12, __pyx_t_15);
                __pyx_t_6 = 0;  __pyx_t_12 = 0;  __pyx_t_15 = 0; 
                __PYX_ERR(1, 2583, __pyx_L100_except_error)
              }
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
              goto __pyx_L99_exception_handled;
            }
            __pyx_L100_except_error:;
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
            goto __pyx_L56_except_error;
            __pyx_L99_exception_handled:;
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
            __pyx_L105_try_end:;
          }
        }
        /*finally:*/ {
          /*normal exit:*/{
            if (__pyx_t_19) {
              __pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[6], NULL);
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              if (unlikely(!__pyx_t_24)) __PYX_ERR(1, 2583, __pyx_L56_except_error)
              __Pyx_GOTREF(__pyx_t_24);
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            }
            goto __pyx_L97;
          }
          __pyx_L97:;
        }
        goto __pyx_L109;
        __pyx_L92_error:;
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        goto __pyx_L56_except_error;
        __pyx_L109:;
      }
+2584:                 _OIDC_PROVIDERS.pop(provider_id, None)
              __pyx_t_12 = __pyx_v_7questdb_7_client__OIDC_PROVIDERS;
              __Pyx_INCREF(__pyx_t_12);
              __pyx_t_15 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2584, __pyx_L98_error)
              __Pyx_GOTREF(__pyx_t_15);
              __pyx_t_7 = 0;
              {
                PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_15, Py_None};
                __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_pop, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2584, __pyx_L98_error)
                __Pyx_GOTREF(__pyx_t_6);
              }
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2585:                 _OIDC_NATIVE_HANDLES.pop(provider_id, None)
              __pyx_t_15 = __pyx_v_7questdb_7_client__OIDC_NATIVE_HANDLES;
              __Pyx_INCREF(__pyx_t_15);
              __pyx_t_12 = __Pyx_PyLong_FromSize_t(__pyx_v_provider_id); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 2585, __pyx_L98_error)
              __Pyx_GOTREF(__pyx_t_12);
              __pyx_t_7 = 0;
              {
                PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_12, Py_None};
                __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_pop, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
                if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2585, __pyx_L98_error)
                __Pyx_GOTREF(__pyx_t_6);
              }
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2586:             raise
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_4, __pyx_t_11);
      __pyx_t_1 = 0;  __pyx_t_4 = 0;  __pyx_t_11 = 0; 
      __PYX_ERR(1, 2586, __pyx_L56_except_error)
    }
 2587: 
+2588:     def sign_in(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_7sign_in(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_6sign_in, "Run interactive sign-in if no cached or refreshable token exists.\n\n        ``Ctrl-C`` during the wait cancels only this sign-in attempt and raises\n        ``KeyboardInterrupt``. The provider remains open, attached transports\n        remain usable, and a later ``sign_in()`` on the same provider can retry.\n\n        Only one ``sign_in()`` call may run on a provider at a time. A concurrent\n        call raises :class:`~questdb.auth.OidcError` with code\n        ``InvalidApiCall`` instead of waiting behind the interactive flow; the\n        provider and the running sign-in are unaffected.\n\n        Once interpreter shutdown has begun (from an ``atexit`` handler that\n        runs after this module\047s own), renderer callbacks are detached. A\n        sign-in that would need to prompt then raises\n        :class:`~questdb.auth.OidcInteractionRequired` at once unless the\n        provider opens a browser, rather than waiting for a device code nobody\n        can see.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_7sign_in = {"sign_in", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_7sign_in, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_6sign_in};
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_7sign_in(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sign_in (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("sign_in", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("sign_in", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_6sign_in(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_6sign_in(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  questdb_error *__pyx_v_err;
  int __pyx_v_ok;
  PyThreadState *__pyx_v_gs;
  struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_v_call = 0;
  PyObject *__pyx_v_OidcError = NULL;
  PyObject *__pyx_v_interrupt = NULL;
  PyObject *__pyx_v_prompted = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.sign_in", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;



  __Pyx_XDECREF((PyObject *)__pyx_v_call);
  __Pyx_XDECREF(__pyx_v_OidcError);
  __Pyx_XDECREF(__pyx_v_interrupt);
  __Pyx_XDECREF(__pyx_v_prompted);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_7sign_in, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_sign_in, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[54])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2588, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_sign_in, __pyx_t_18) < (0)) __PYX_ERR(1, 2588, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2589:         """Run interactive sign-in if no cached or refreshable token exists.
 2590: 
 2591:         ``Ctrl-C`` during the wait cancels only this sign-in attempt and raises
 2592:         ``KeyboardInterrupt``. The provider remains open, attached transports
 2593:         remain usable, and a later ``sign_in()`` on the same provider can retry.
 2594: 
 2595:         Only one ``sign_in()`` call may run on a provider at a time. A concurrent
 2596:         call raises :class:`~questdb.auth.OidcError` with code
 2597:         ``InvalidApiCall`` instead of waiting behind the interactive flow; the
 2598:         provider and the running sign-in are unaffected.
 2599: 
 2600:         Once interpreter shutdown has begun (from an ``atexit`` handler that
 2601:         runs after this module's own), renderer callbacks are detached. A
 2602:         sign-in that would need to prompt then raises
 2603:         :class:`~questdb.auth.OidcInteractionRequired` at once unless the
 2604:         provider opens a browser, rather than waiting for a device code nobody
 2605:         can see.
 2606:         """
+2607:         cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2608:         cdef bint ok
+2609:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 2610:         cdef _OidcForegroundCall call
+2611:         self._require_open()
  ((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_open(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2611, __pyx_L1_error)
+2612:         if not self._sign_in_lock.acquire(False):
  __pyx_t_2 = __pyx_v_self->_sign_in_lock;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, Py_False};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2612, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 2612, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = (!__pyx_t_4);


  if (__pyx_t_5) {
/* … */
  }
+2613:             from questdb.auth._errors import OidcError
    {
      PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcError};
      __pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2613, __pyx_L1_error)
    }
    __pyx_t_1 = __pyx_t_6;
    __Pyx_GOTREF(__pyx_t_1);
    {
      PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcError};
      __pyx_t_7 = 0; {
        __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_7]); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2613, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        switch (__pyx_t_7) {
          case 0:
          __Pyx_INCREF(__pyx_t_2);
          __pyx_v_OidcError = __pyx_t_2;
          break;
          default:;
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2614:             # InvalidApiCall, as native reports every other refusal to enter
 2615:             # a busy provider (a clear() behind a sign-in, or a call made from
 2616:             # a callback). The class default, AuthError, is documented as a
 2617:             # terminal auth failure, and this is neither: the provider stays
 2618:             # open and the running sign-in continues.
+2619:             raise OidcError(
    __pyx_t_2 = NULL;
    __Pyx_INCREF(__pyx_v_OidcError);
    __pyx_t_8 = __pyx_v_OidcError; 
/* … */
    #endif
    __pyx_t_3 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
      assert(__pyx_t_2);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
      __pyx_t_3 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_OIDC_sign_in_is_already_in_progr, __pyx_t_10};
      #if CYTHON_VECTORCALL
      __pyx_t_9 = __pyx_mstate_global->__pyx_tuple[13];
      if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2619, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_9);
      #else
      {
        PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_code};
        __pyx_t_9 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
        if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2619, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      #endif
      __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      #if CYTHON_VECTORCALL
      #endif
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2619, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2619, __pyx_L1_error)
/* … */
  {
    PyObject* __pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_code};
    __pyx_mstate_global->__pyx_tuple[13] = __Pyx_PyTuple_FromArray(__pyx_temp, 1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[13])) __PYX_ERR(1, 2619, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[13]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[13]);
 2620:                 'OIDC sign_in() is already in progress on this provider.',
+2621:                 code=QuestDBErrorCode.InvalidApiCall)
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2621, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2621, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    #if CYTHON_VECTORCALL
+2622:         try:
  /*try:*/ {
+2623:             if _oidc_callbacks_shutting_down and not self._opens_browser:
    if (__pyx_v_7questdb_7_client__oidc_callbacks_shutting_down) {
    } else {

      __pyx_t_5 = __pyx_v_7questdb_7_client__oidc_callbacks_shutting_down;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_4 = (!__pyx_v_self->_opens_browser);


    __pyx_t_5 = __pyx_t_4;

    __pyx_L8_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
    }
+2624:                 self._sign_in_without_renderer()
      __pyx_t_8 = ((PyObject *)__pyx_v_self);
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_3 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sign_in_without_renderer, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2624, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2625:                 return
      {
        PyObject *__pyx_temp;
        {
          __pyx_temp = __pyx_r;
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        }
        __Pyx_XDECREF(__pyx_temp);
      }
      goto __pyx_L4_return;
 2626:             # A callback may park an interrupt only for this invocation: the
 2627:             # non-blocking lock above prevents another sign_in() from entering
 2628:             # native and winning the race to consume the provider field.
+2629:             self._interrupt = None
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->_interrupt);
    __Pyx_DECREF_SET(__pyx_v_self->_interrupt, Py_None);
+2630:             self._prompt_renderer = None
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->_prompt_renderer);
    __Pyx_DECREF_SET(__pyx_v_self->_prompt_renderer, Py_None);
 2631:             # Lets a persistence diagnostic on this thread find this provider:
 2632:             # its callback carries no user_data.
+2633:             call = _oidc_foreground_enter(self)
    __pyx_t_1 = ((PyObject *)__pyx_f_7questdb_7_client__oidc_foreground_enter(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2633, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_call = ((struct __pyx_obj_7questdb_7_client__OidcForegroundCall *)__pyx_t_1);
    __pyx_t_1 = 0;
+2634:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2635:             ok = questdb_oidc_auth_sign_in(self._raw, &err)
    __pyx_v_ok = questdb_oidc_auth_sign_in(__pyx_v_self->_raw, (&__pyx_v_err));
+2636:             _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2637:             _oidc_foreground_exit(call)
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_foreground_exit(__pyx_v_call); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2637, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2638:             interrupt = self._interrupt
    __pyx_t_1 = __pyx_v_self->_interrupt;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_interrupt = __pyx_t_1;
    __pyx_t_1 = 0;
+2639:             self._interrupt = None
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->_interrupt);
    __Pyx_DECREF_SET(__pyx_v_self->_interrupt, Py_None);
+2640:             prompted = self._prompt_renderer
    __pyx_t_1 = __pyx_v_self->_prompt_renderer;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_prompted = __pyx_t_1;
    __pyx_t_1 = 0;
+2641:             self._prompt_renderer = None
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->_prompt_renderer);
    __Pyx_DECREF_SET(__pyx_v_self->_prompt_renderer, Py_None);
+2642:             if interrupt is not None:
    __pyx_t_5 = (__pyx_v_interrupt != Py_None);
    if (__pyx_t_5) {
/* … */
    }
 2643:                 # The interrupt is what the user asked for; the native error is
 2644:                 # just the cancellation it caused.
+2645:                 if err != NULL:
      __pyx_t_5 = (__pyx_v_err != NULL);

      if (__pyx_t_5) {
/* … */
      }
+2646:                     _oidc_release_error(err)
        __pyx_f_7questdb_7_client__oidc_release_error(__pyx_v_err);
+2647:                 _oidc_report_unfinished_prompt(prompted, None)
      __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_report_unfinished_prompt(__pyx_v_prompted, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2647, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2648:                 raise interrupt
      __Pyx_Raise(__pyx_v_interrupt, 0, 0, 0);
      __PYX_ERR(1, 2648, __pyx_L5_error)
+2649:             if not ok:
    __pyx_t_5 = (!__pyx_v_ok);

    if (unlikely(__pyx_t_5)) {
/* … */
    }
  }
+2650:                 exc = _oidc_err_to_py(err)
      __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2650, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_exc = __pyx_t_1;
      __pyx_t_1 = 0;
+2651:                 _oidc_report_unfinished_prompt(prompted, exc)
      __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_report_unfinished_prompt(__pyx_v_prompted, __pyx_v_exc); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2651, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2652:                 raise exc
      __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
      __PYX_ERR(1, 2652, __pyx_L5_error)
 2653:         finally:
+2654:             self._sign_in_lock.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_8 = __pyx_v_self->_sign_in_lock;
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_3 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2654, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
        __pyx_t_8 = __pyx_v_self->_sign_in_lock;
        __Pyx_INCREF(__pyx_t_8);
        __pyx_t_3 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
          __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2654, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_t_8 = __pyx_v_self->_sign_in_lock;
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_3 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2654, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2655:             _oidc_raise_unscheduled_main()
      __pyx_t_11 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2655, __pyx_L1_error)

      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_6 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
      if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_15, &__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_18);
      __Pyx_XGOTREF(__pyx_t_19);
      __pyx_t_12 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename;
      {
/* … */
        __pyx_t_11 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2655, __pyx_L14_error)

      }
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_15, __pyx_t_16);
      __pyx_t_6 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14;
      goto __pyx_L1_error;
      __pyx_L14_error:;
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L4_return: {
      __pyx_t_19 = __pyx_r;
      __pyx_r = 0;
/* … */
      __pyx_t_11 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2655, __pyx_L1_error)

      __pyx_r = __pyx_t_19;
      __pyx_t_19 = 0;
      goto __pyx_L0;
    }
    __pyx_L6:;
  }
 2656: 
+2657:     def _sign_in_without_renderer(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_9_sign_in_without_renderer(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_8_sign_in_without_renderer, "``sign_in()`` once interpreter shutdown has detached the renderer.\n\n        The atexit hook suppresses every callback into Python, so a device-code\n        prompt can no longer be shown, and this provider opens no browser: an\n        interactive flow would poll silently until the code expired. A cached\n        or silently refreshable credential still satisfies ``sign_in()``;\n        anything that needs the user fails fast instead.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_9_sign_in_without_renderer = {"_sign_in_without_renderer", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_9_sign_in_without_renderer, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_8_sign_in_without_renderer};
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_9_sign_in_without_renderer(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_sign_in_without_renderer (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("_sign_in_without_renderer", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("_sign_in_without_renderer", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_8_sign_in_without_renderer(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_8_sign_in_without_renderer(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  PyObject *__pyx_v_OidcInteractionRequired = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._sign_in_without_renderer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_OidcInteractionRequired);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_9_sign_in_without_renderer, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth__sign_in_without, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[55])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2657, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_sign_in_without_renderer, __pyx_t_18) < (0)) __PYX_ERR(1, 2657, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2658:         """``sign_in()`` once interpreter shutdown has detached the renderer.
 2659: 
 2660:         The atexit hook suppresses every callback into Python, so a device-code
 2661:         prompt can no longer be shown, and this provider opens no browser: an
 2662:         interactive flow would poll silently until the code expired. A cached
 2663:         or silently refreshable credential still satisfies ``sign_in()``;
 2664:         anything that needs the user fails fast instead.
 2665:         """
+2666:         from questdb.auth._errors import OidcInteractionRequired
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcInteractionRequired};
    __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__errors, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2666, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcInteractionRequired};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2666, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      switch (__pyx_t_3) {
        case 0:
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v_OidcInteractionRequired = __pyx_t_4;
        break;
        default:;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2667:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+2668:             self.token()
      __pyx_t_4 = ((PyObject *)__pyx_v_self);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_token, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2668, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2669:         except OidcInteractionRequired as exc:
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_v_OidcInteractionRequired);
    if (__pyx_t_8) {
      __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._sign_in_without_renderer", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_9) < 0) __PYX_ERR(1, 2669, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_exc = __pyx_t_4;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L14_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
          if ( unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __pyx_t_8 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
          __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
          __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
+2670:             if getattr(exc, '_acquisition_busy', False):
        __pyx_t_10 = __Pyx_GetAttr3(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_acquisition_busy_2, Py_False); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2670, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(1, 2670, __pyx_L14_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(__pyx_t_11)) {
/* … */
        }
+2671:                 raise
          __Pyx_GIVEREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_4);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_4, __pyx_t_9);
          __pyx_t_1 = 0;  __pyx_t_4 = 0;  __pyx_t_9 = 0; 
          __PYX_ERR(1, 2671, __pyx_L14_error)
+2672:             raise OidcInteractionRequired(
        __pyx_t_12 = NULL;
        __Pyx_INCREF(__pyx_v_OidcInteractionRequired);
        __pyx_t_13 = __pyx_v_OidcInteractionRequired; 
/* … */
        #endif
        __pyx_t_7 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_13))) {
          __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
          assert(__pyx_t_12);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_13);
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_13, __pyx__function);
          __pyx_t_7 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_mstate_global->__pyx_kp_u_OIDC_sign_in_cannot_prompt_durin, __pyx_t_14};
          #if CYTHON_VECTORCALL
          __pyx_t_15 = __pyx_mstate_global->__pyx_tuple[13];
          if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2672, __pyx_L14_error)
          __Pyx_INCREF(__pyx_t_15);
          #else
          {
            PyObject *__pyx_temp[1] = {__pyx_mstate_global->__pyx_n_u_code};
            __pyx_t_15 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+2, 1);
            if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2672, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_15);
          }
          #endif
          __pyx_t_10 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_13, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_15);
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          #if CYTHON_VECTORCALL
          #endif
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2672, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_10);
        }
 2673:                 'OIDC sign_in() cannot prompt during interpreter shutdown: '
 2674:                 'renderer callbacks are detached and this provider does not '
 2675:                 'open a browser, so nobody could see the device code. Sign '
 2676:                 'in before the interpreter starts exiting.',
+2677:                 code=exc.code) from exc
        __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 2677, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_14);
        #if CYTHON_VECTORCALL
/* … */
        __Pyx_Raise(__pyx_t_10, 0, 0, __pyx_v_exc);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __PYX_ERR(1, 2672, __pyx_L14_error)
      }
 2678: 
+2679:     def cancel_sign_in(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_11cancel_sign_in(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_10cancel_sign_in, "Cancel the current interactive sign-in without closing the provider.\n\n        The active :meth:`sign_in` raises\n        :class:`~questdb.auth.OidcCancelledError`. Cached credentials are not\n        discarded, attached senders, pools and readers remain usable, and a\n        later ``sign_in()`` on this provider can succeed. If no device flow is\n        running, this is an idempotent no-op that does not affect the next one.\n        It is also a no-op once the identity provider has issued tokens for the\n        running flow: that sign-in is committed and completes normally, and the\n        renderer receives its ``on_success`` or ``on_failure`` call. A terminal\n        failure is also committed before ``on_failure`` runs: cancelling from\n        that callback is a no-op and preserves the original failure.\n\n        Safe from any thread, including a renderer callback. Use :meth:`close`\n        instead only when the provider and every attached transport should be\n        disabled permanently.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_11cancel_sign_in = {"cancel_sign_in", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_11cancel_sign_in, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_10cancel_sign_in};
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_11cancel_sign_in(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cancel_sign_in (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("cancel_sign_in", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("cancel_sign_in", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_10cancel_sign_in(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_10cancel_sign_in(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  questdb_error *__pyx_v_err;
  int __pyx_v_ok;
  PyThreadState *__pyx_v_gs;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.cancel_sign_in", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;



  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_11cancel_sign_in, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_cancel_sign_in, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[56])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2679, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_cancel_sign_in, __pyx_t_18) < (0)) __PYX_ERR(1, 2679, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2680:         """Cancel the current interactive sign-in without closing the provider.
 2681: 
 2682:         The active :meth:`sign_in` raises
 2683:         :class:`~questdb.auth.OidcCancelledError`. Cached credentials are not
 2684:         discarded, attached senders, pools and readers remain usable, and a
 2685:         later ``sign_in()`` on this provider can succeed. If no device flow is
 2686:         running, this is an idempotent no-op that does not affect the next one.
 2687:         It is also a no-op once the identity provider has issued tokens for the
 2688:         running flow: that sign-in is committed and completes normally, and the
 2689:         renderer receives its ``on_success`` or ``on_failure`` call. A terminal
 2690:         failure is also committed before ``on_failure`` runs: cancelling from
 2691:         that callback is a no-op and preserves the original failure.
 2692: 
 2693:         Safe from any thread, including a renderer callback. Use :meth:`close`
 2694:         instead only when the provider and every attached transport should be
 2695:         disabled permanently.
 2696:         """
+2697:         cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2698:         cdef bint ok
+2699:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+2700:         self._require_same_process()
  ((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2700, __pyx_L1_error)
+2701:         if self._raw == NULL:
  __pyx_t_1 = (__pyx_v_self->_raw == NULL);

  if (__pyx_t_1) {
/* … */
  }
+2702:             return
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+2703:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2704:         ok = questdb_oidc_auth_cancel_sign_in(self._raw, &err)
  __pyx_v_ok = questdb_oidc_auth_cancel_sign_in(__pyx_v_self->_raw, (&__pyx_v_err));
+2705:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2706:         if not ok:
  __pyx_t_1 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2707:             raise _oidc_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2707, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 2707, __pyx_L1_error)
 2708: 
+2709:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_20_sign_in_in_progress_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_20_sign_in_in_progress_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_20_sign_in_in_progress___get__(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_20_sign_in_in_progress___get__(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._sign_in_in_progress.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2710:     def _sign_in_in_progress(self):
 2711:         """Whether this wrapper's local :meth:`sign_in` lock is held.
 2712: 
 2713:         Internal diagnostic/test property. Transport retry classification does
 2714:         not consult this mutable state; it uses the immutable
 2715:         ``_acquisition_busy`` bit captured in the native error instead.
 2716:         """
+2717:         return self._sign_in_lock.locked()
  __pyx_t_2 = __pyx_v_self->_sign_in_lock;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_locked, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2717, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2718: 
+2719:     def token(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_13token(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_12token, "Return a cached or silently refreshed token; never prompt.\n\n        Raises :class:`~questdb.auth.OidcInteractionRequired` when no cached or\n        silently refreshable credential is available -- notably before the first\n        :meth:`sign_in`, and once a refresh token has expired. This method never\n        displays a prompt, so that condition can only be cleared by calling\n        :meth:`sign_in` on a thread that may interact with the user.\n\n        A cached token returns at once. Otherwise this call refreshes the\n        token (up to the provider\047s ``timeout``), or waits for a refresh\n        already running on another thread for up to six times ``timeout``.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_13token = {"token", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_13token, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_12token};
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_13token(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("token (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("token", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("token", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_12token(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_12token(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  questdb_error *__pyx_v_err;
  struct questdb_oidc_token *__pyx_v_token;
  char const *__pyx_v_data;
  size_t __pyx_v_length;
  PyThreadState *__pyx_v_gs;
  struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_v_call = 0;
  PyObject *__pyx_v_interrupt = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.token", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;





  __Pyx_XDECREF((PyObject *)__pyx_v_call);
  __Pyx_XDECREF(__pyx_v_interrupt);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_13token, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_token, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[57])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2719, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_token, __pyx_t_18) < (0)) __PYX_ERR(1, 2719, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2720:         """Return a cached or silently refreshed token; never prompt.
 2721: 
 2722:         Raises :class:`~questdb.auth.OidcInteractionRequired` when no cached or
 2723:         silently refreshable credential is available -- notably before the first
 2724:         :meth:`sign_in`, and once a refresh token has expired. This method never
 2725:         displays a prompt, so that condition can only be cleared by calling
 2726:         :meth:`sign_in` on a thread that may interact with the user.
 2727: 
 2728:         A cached token returns at once. Otherwise this call refreshes the
 2729:         token (up to the provider's ``timeout``), or waits for a refresh
 2730:         already running on another thread for up to six times ``timeout``.
 2731:         """
+2732:         cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
+2733:         cdef questdb_oidc_token* token = NULL
  __pyx_v_token = NULL;
+2734:         cdef const char* data = NULL
  __pyx_v_data = NULL;
+2735:         cdef size_t length = 0
  __pyx_v_length = 0;
+2736:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 2737:         cdef _OidcForegroundCall call
+2738:         self._require_open()
  ((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_open(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2738, __pyx_L1_error)
+2739:         call = _oidc_foreground_enter(None)
  __pyx_t_1 = ((PyObject *)__pyx_f_7questdb_7_client__oidc_foreground_enter(Py_None)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_call = ((struct __pyx_obj_7questdb_7_client__OidcForegroundCall *)__pyx_t_1);
  __pyx_t_1 = 0;
+2740:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2741:         token = questdb_oidc_auth_token(self._raw, &err)
  __pyx_v_token = questdb_oidc_auth_token(__pyx_v_self->_raw, (&__pyx_v_err));
+2742:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2743:         interrupt = _oidc_foreground_exit(call)
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_foreground_exit(__pyx_v_call); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2743, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_interrupt = __pyx_t_1;
  __pyx_t_1 = 0;
+2744:         if interrupt is not None:
  __pyx_t_2 = (__pyx_v_interrupt != Py_None);
  if (__pyx_t_2) {
/* … */
  }
 2745:             # Ctrl-C landed in a persistence diagnostic during a refresh. The
 2746:             # user asked to stop; the outcome of the call is moot.
+2747:             if token != NULL:
    __pyx_t_2 = (__pyx_v_token != NULL);

    if (__pyx_t_2) {
/* … */
    }
+2748:                 _oidc_release_token(token)
      __pyx_f_7questdb_7_client__oidc_release_token(__pyx_v_token);
+2749:             if err != NULL:
    __pyx_t_2 = (__pyx_v_err != NULL);

    if (__pyx_t_2) {
/* … */
    }
+2750:                 _oidc_release_error(err)
      __pyx_f_7questdb_7_client__oidc_release_error(__pyx_v_err);
+2751:             try:
    /*try:*/ {
+2752:                 raise interrupt
      __Pyx_Raise(__pyx_v_interrupt, 0, 0, 0);
      __PYX_ERR(1, 2752, __pyx_L7_error)
    }
 2753:             finally:
+2754:                 _oidc_raise_unscheduled_main()
    /*finally:*/ {
      __pyx_L7_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
        if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
        {
          __pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2754, __pyx_L10_error)

        }
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
        __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
        goto __pyx_L1_error;
        __pyx_L10_error:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
        goto __pyx_L1_error;
      }
    }
+2755:         if token == NULL:
  __pyx_t_2 = (__pyx_v_token == NULL);

  if (__pyx_t_2) {
/* … */
  }
+2756:             try:
    /*try:*/ {
+2757:                 raise _oidc_err_to_py(err)
      __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2757, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(1, 2757, __pyx_L13_error)
    }
 2758:             finally:
+2759:                 _oidc_raise_unscheduled_main()
    /*finally:*/ {
      __pyx_L13_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
        if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_6);
        __pyx_t_4 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
        {
          __pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2759, __pyx_L16_error)

        }
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ErrRestore(__pyx_t_11, __pyx_t_10, __pyx_t_9);
        __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
        __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_5;
        goto __pyx_L1_error;
        __pyx_L16_error:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
        goto __pyx_L1_error;
      }
    }
+2760:         try:
  /*try:*/ {
+2761:             data = questdb_oidc_token_data(token)
    __pyx_v_data = questdb_oidc_token_data(__pyx_v_token);
+2762:             length = questdb_oidc_token_len(token)
    __pyx_v_length = questdb_oidc_token_len(__pyx_v_token);
 2763:             # Guard NULL like every other native span in this file does, via
 2764:             # _oidc_text. The header promises non-NULL for a non-NULL token and
 2765:             # native returns a Rust String's pointer, so this is unreachable
 2766:             # today -- but PyUnicode_FromStringAndSize(NULL, n) returns an
 2767:             # *uninitialized* str on CPython 3.10/3.11 rather than raising, and
 2768:             # this is the one function that returns a credential.
+2769:             return _oidc_text(data, length) or ''
    __pyx_t_13 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_data, __pyx_v_length); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 2769, __pyx_L18_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 2769, __pyx_L18_error)
    if (!__pyx_t_2) {
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_13);
      __pyx_t_1 = __pyx_t_13;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      goto __pyx_L20_bool_binop_done;
    }
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__6);
    __pyx_t_1 = __pyx_mstate_global->__pyx_kp_u__6;
    __pyx_L20_bool_binop_done:;
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = __pyx_t_1;
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    __pyx_t_1 = 0;
    goto __pyx_L17_return;
  }
 2770:         finally:
+2771:             _oidc_release_token(token)
  /*finally:*/ {
    __pyx_L18_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
      {
        __pyx_f_7questdb_7_client__oidc_release_token(__pyx_v_token);
/* … */
      __pyx_f_7questdb_7_client__oidc_release_token(__pyx_v_token);
+2772:             _oidc_raise_unscheduled_main()
        __pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2772, __pyx_L23_error)

      }
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
      goto __pyx_L1_error;
      __pyx_L23_error:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L17_return: {
      __pyx_t_11 = __pyx_r;
      __pyx_r = 0;
/* … */
      __pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2772, __pyx_L1_error)

      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
  }
 2773: 
+2774:     def _foreground_token(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_15_foreground_token(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_14_foreground_token, "The native provider\047s token, as the fail-fast probe of\n        `QuestDB.dataframe()` reads it (`_direct_dataframe_run`).\n\n        The native-backed `token()`, which is what connections get. Private\n        so that tests can intercept the probe.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_15_foreground_token = {"_foreground_token", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_15_foreground_token, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_14_foreground_token};
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_15_foreground_token(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_foreground_token (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("_foreground_token", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("_foreground_token", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_14_foreground_token(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_14_foreground_token(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth._foreground_token", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_15_foreground_token, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth__foreground_token, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[58])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2774, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_foreground_token, __pyx_t_18) < (0)) __PYX_ERR(1, 2774, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2775:         """The native provider's token, as the fail-fast probe of
 2776:         `QuestDB.dataframe()` reads it (`_direct_dataframe_run`).
 2777: 
 2778:         The native-backed `token()`, which is what connections get. Private
 2779:         so that tests can intercept the probe.
 2780:         """
+2781:         return OidcDeviceAuth.token(self)
  __pyx_t_2 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_self)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_token, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2781, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2782: 
+2783:     def headers(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_17headers(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_16headers, "Return an HTTP Authorization header containing the current token.\n\n        A fresh ``{\"Authorization\": \"Bearer ...\"}`` dict on each call. Raises\n        whatever :meth:`token` raises, including\n        :class:`~questdb.auth.OidcInteractionRequired` before sign-in.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_17headers = {"headers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_17headers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_16headers};
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_17headers(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("headers (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("headers", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("headers", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_16headers(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_16headers(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.headers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_17headers, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_headers, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[59])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_headers, __pyx_t_18) < (0)) __PYX_ERR(1, 2783, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2784:         """Return an HTTP Authorization header containing the current token.
 2785: 
 2786:         A fresh ``{"Authorization": "Bearer ..."}`` dict on each call. Raises
 2787:         whatever :meth:`token` raises, including
 2788:         :class:`~questdb.auth.OidcInteractionRequired` before sign-in.
 2789:         """
+2790:         return {'Authorization': 'Bearer ' + self.token()}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2790, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_token, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2790, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_3 = PyNumber_Add(__pyx_mstate_global->__pyx_kp_u_Bearer, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2790, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Authorization, __pyx_t_3) < (0)) __PYX_ERR(1, 2790, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2791: 
+2792:     def clear(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_19clear(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_18clear, "Clear memory and persisted credentials without revoking at the IdP.\n\n        Works after :meth:`close`. ``close`` drops the in-memory credential but\n        deliberately leaves the persisted entry, so clearing has to stay\n        available afterwards -- otherwise the ``with`` form, whose exit closes\n        the provider, would leave a long-lived plaintext refresh token on disk\n        with no supported way to remove it.\n\n        Never waits behind an interactive :meth:`sign_in` running on another\n        thread, which can hold the provider for the device code\047s whole\n        lifetime (the GIL is released for the call, so it would not even see\n        ``Ctrl-C``). It raises :class:`~questdb.QuestDBError` with code\n        ``InvalidApiCall`` instead and clears **nothing**: call\n        :meth:`cancel_sign_in` first, or retry once the sign-in completes.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_19clear = {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_19clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_18clear};
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_19clear(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clear", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clear", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_18clear(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_18clear(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  questdb_error *__pyx_v_err;
  int __pyx_v_ok;
  PyThreadState *__pyx_v_gs;
  struct __pyx_obj_7questdb_7_client__OidcForegroundCall *__pyx_v_call = 0;
  PyObject *__pyx_v_interrupt = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;



  __Pyx_XDECREF((PyObject *)__pyx_v_call);
  __Pyx_XDECREF(__pyx_v_interrupt);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_19clear, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_clear, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[60])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2792, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_clear, __pyx_t_18) < (0)) __PYX_ERR(1, 2792, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2793:         """Clear memory and persisted credentials without revoking at the IdP.
 2794: 
 2795:         Works after :meth:`close`. ``close`` drops the in-memory credential but
 2796:         deliberately leaves the persisted entry, so clearing has to stay
 2797:         available afterwards -- otherwise the ``with`` form, whose exit closes
 2798:         the provider, would leave a long-lived plaintext refresh token on disk
 2799:         with no supported way to remove it.
 2800: 
 2801:         Never waits behind an interactive :meth:`sign_in` running on another
 2802:         thread, which can hold the provider for the device code's whole
 2803:         lifetime (the GIL is released for the call, so it would not even see
 2804:         ``Ctrl-C``). It raises :class:`~questdb.QuestDBError` with code
 2805:         ``InvalidApiCall`` instead and clears **nothing**: call
 2806:         :meth:`cancel_sign_in` first, or retry once the sign-in completes.
 2807:         """
+2808:         cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2809:         cdef bint ok
+2810:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 2811:         cdef _OidcForegroundCall call
+2812:         self._require_same_process()
  ((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2812, __pyx_L1_error)
+2813:         if self._raw == NULL:
  __pyx_t_1 = (__pyx_v_self->_raw == NULL);

  if (__pyx_t_1) {
/* … */
  }
+2814:             return
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+2815:         call = _oidc_foreground_enter(None)
  __pyx_t_2 = ((PyObject *)__pyx_f_7questdb_7_client__oidc_foreground_enter(Py_None)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_call = ((struct __pyx_obj_7questdb_7_client__OidcForegroundCall *)__pyx_t_2);
  __pyx_t_2 = 0;
+2816:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2817:         ok = questdb_oidc_auth_clear(self._raw, &err)
  __pyx_v_ok = questdb_oidc_auth_clear(__pyx_v_self->_raw, (&__pyx_v_err));
+2818:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2819:         interrupt = _oidc_foreground_exit(call)
  __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_foreground_exit(__pyx_v_call); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2819, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_interrupt = __pyx_t_2;
  __pyx_t_2 = 0;
+2820:         if interrupt is not None:
  __pyx_t_1 = (__pyx_v_interrupt != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+2821:             if err != NULL:
    __pyx_t_1 = (__pyx_v_err != NULL);

    if (__pyx_t_1) {
/* … */
    }
+2822:                 _oidc_release_error(err)
      __pyx_f_7questdb_7_client__oidc_release_error(__pyx_v_err);
+2823:             try:
    /*try:*/ {
+2824:                 raise interrupt
      __Pyx_Raise(__pyx_v_interrupt, 0, 0, 0);
      __PYX_ERR(1, 2824, __pyx_L7_error)
    }
 2825:             finally:
+2826:                 _oidc_raise_unscheduled_main()
    /*finally:*/ {
      __pyx_L7_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
        if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
        {
          __pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2826, __pyx_L10_error)

        }
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
        __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
        goto __pyx_L1_error;
        __pyx_L10_error:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
        goto __pyx_L1_error;
      }
    }
+2827:         try:
  /*try:*/ {
+2828:             if not ok:
    __pyx_t_1 = (!__pyx_v_ok);

    if (unlikely(__pyx_t_1)) {
/* … */
    }
  }
+2829:                 raise _oidc_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2829, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(1, 2829, __pyx_L12_error)
 2830:         finally:
+2831:             _oidc_raise_unscheduled_main()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2831, __pyx_L1_error)

      goto __pyx_L13;
    }
    __pyx_L12_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
      if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_6);
      __pyx_t_4 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
      {
        __pyx_t_12 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_12 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(1, 2831, __pyx_L16_error)

      }
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ErrRestore(__pyx_t_11, __pyx_t_10, __pyx_t_9);
      __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
      __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_5;
      goto __pyx_L1_error;
      __pyx_L16_error:;
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L13:;
  }
 2832: 
+2833:     def close(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_21close(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_20close, "Permanently close this provider and cancel interruptible waits.\n\n        A sign-in, silent-refresh coordination, or bundled file-store lock wait\n        running on another thread is asked to stop, and the in-memory credential\n        is dropped. Cloned native handles retained by attached transports share\n        the closed state. Idempotent.\n\n        The call ordinarily waits for the running operation to leave the native\n        authentication critical section. While this provider\047s renderer callback\n        is active, however, it publishes the close, drops the in-memory credential,\n        and returns without waiting, regardless of which thread called it. A\n        callback may delegate ``close()`` to another thread and join that thread,\n        so waiting there could deadlock just as it would on the callback thread\n        itself. A later ``close()`` after the callback returns performs the wait.\n\n        The persisted entry is deliberately left behind so :meth:`clear` can\n        still remove it after closing.\n\n        .. warning::\n\n           Closing is **terminal for every attached transport**, not merely a\n           state they observe. Closing is monotonic, so every\n           :class:`~questdb.Sender`, :func:`questdb.connect` pool and reader\n           built from this provider fails its next token pull non-retryably:\n           reconnect loops stop, a QWP/WebSocket publication store is\n           terminalized with accepted frames still queued, and there is no way\n           to attach a replacement provider to an existing handle. Disk-backed\n           store-and-forward slots are not deleted and stay drainable by a\n           later process, but this one will not send them.\n\n           To recover, build a new provider **and** rebuild each sender, pool\n           and reader that used the old one. Where that matters, sign in on a\n           provider before attaching it and keep re-authentication on a\n           separate, unattac""hed provider.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_21close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_21close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_20close};
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_21close(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("close (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("close", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("close", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_20close(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_20close(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  questdb_error *__pyx_v_err;
  int __pyx_v_ok;
  PyThreadState *__pyx_v_gs;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;



  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_21close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[61])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_18) < (0)) __PYX_ERR(1, 2833, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2834:         """Permanently close this provider and cancel interruptible waits.
 2835: 
 2836:         A sign-in, silent-refresh coordination, or bundled file-store lock wait
 2837:         running on another thread is asked to stop, and the in-memory credential
 2838:         is dropped. Cloned native handles retained by attached transports share
 2839:         the closed state. Idempotent.
 2840: 
 2841:         The call ordinarily waits for the running operation to leave the native
 2842:         authentication critical section. While this provider's renderer callback
 2843:         is active, however, it publishes the close, drops the in-memory credential,
 2844:         and returns without waiting, regardless of which thread called it. A
 2845:         callback may delegate ``close()`` to another thread and join that thread,
 2846:         so waiting there could deadlock just as it would on the callback thread
 2847:         itself. A later ``close()`` after the callback returns performs the wait.
 2848: 
 2849:         The persisted entry is deliberately left behind so :meth:`clear` can
 2850:         still remove it after closing.
 2851: 
 2852:         .. warning::
 2853: 
 2854:            Closing is **terminal for every attached transport**, not merely a
 2855:            state they observe. Closing is monotonic, so every
 2856:            :class:`~questdb.Sender`, :func:`questdb.connect` pool and reader
 2857:            built from this provider fails its next token pull non-retryably:
 2858:            reconnect loops stop, a QWP/WebSocket publication store is
 2859:            terminalized with accepted frames still queued, and there is no way
 2860:            to attach a replacement provider to an existing handle. Disk-backed
 2861:            store-and-forward slots are not deleted and stay drainable by a
 2862:            later process, but this one will not send them.
 2863: 
 2864:            To recover, build a new provider **and** rebuild each sender, pool
 2865:            and reader that used the old one. Where that matters, sign in on a
 2866:            provider before attaching it and keep re-authentication on a
 2867:            separate, unattached provider.
 2868:         """
+2869:         cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2870:         cdef bint ok
+2871:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+2872:         self._require_same_process()
  ((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2872, __pyx_L1_error)
+2873:         if self._raw == NULL:
  __pyx_t_1 = (__pyx_v_self->_raw == NULL);

  if (__pyx_t_1) {
/* … */
  }
+2874:             self._closed = True
    __pyx_v_self->_closed = 1;
+2875:             self._renderer = None
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->_renderer);
    __Pyx_DECREF_SET(__pyx_v_self->_renderer, Py_None);
+2876:             return
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
 2877:         # Deliberately NOT short-circuited on ``self._closed``. A close
 2878:         # published while a renderer callback is active marks the provider
 2879:         # closed without draining, because the callback runs inside the very
 2880:         # critical section the drain waits on.
 2881:         # Skipping the native call here on that flag left the drain permanently
 2882:         # unperformed: the later ``close()`` (or ``__exit__``) that could safely
 2883:         # drain became a no-op. Native close is idempotent and cheap on an
 2884:         # already-closed provider, so calling through unconditionally restores
 2885:         # the documented behaviour at no meaningful cost.
+2886:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+2887:         ok = questdb_oidc_auth_close(self._raw, &err)
  __pyx_v_ok = questdb_oidc_auth_close(__pyx_v_self->_raw, (&__pyx_v_err));
+2888:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+2889:         if not ok:
  __pyx_t_1 = (!__pyx_v_ok);

  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2890:             raise _oidc_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(1, 2890, __pyx_L1_error)
+2891:         self._closed = True
  __pyx_v_self->_closed = 1;
 2892:         # Detach presentation state eagerly. Besides releasing resources owned
 2893:         # by a renderer, this breaks a renderer -> provider back-reference on
 2894:         # explicit close without waiting for cyclic GC.
+2895:         self._renderer = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_renderer);
  __Pyx_DECREF_SET(__pyx_v_self->_renderer, Py_None);
 2896: 
+2897:     def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_23__enter__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_22__enter__, "Return this open provider for use as a context manager.");
static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_23__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_23__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_22__enter__};
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_23__enter__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__enter__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__enter__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_22__enter__(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_22__enter__(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_23__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[62])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2897, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_18) < (0)) __PYX_ERR(1, 2897, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2898:         """Return this open provider for use as a context manager."""
+2899:         self._require_open()
  ((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_open(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2899, __pyx_L1_error)
+2900:         return self
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 2901: 
+2902:     def __exit__(self, exc_type, exc_value, traceback):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_25__exit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_14OidcDeviceAuth_24__exit__, "Close the provider permanently when leaving a ``with`` block.");
static PyMethodDef __pyx_mdef_7questdb_7_client_14OidcDeviceAuth_25__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14OidcDeviceAuth_25__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14OidcDeviceAuth_24__exit__};
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_25__exit__(PyObject *__pyx_v_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_exc_type = 0;
  CYTHON_UNUSED PyObject *__pyx_v_exc_value = 0;
  CYTHON_UNUSED PyObject *__pyx_v_traceback = 0;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__exit__ (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_value,&__pyx_mstate_global->__pyx_n_u_traceback_2,0};
  PyObject* values[3] = {0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 2902, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(1, 2902, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 2902, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2902, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(1, 2902, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(1, 2902, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2902, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 2902, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(1, 2902, __pyx_L3_error)
    }
    __pyx_v_exc_type = values[0];
    __pyx_v_exc_value = values[1];
    __pyx_v_traceback = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 2902, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_24__exit__(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self), __pyx_v_exc_type, __pyx_v_exc_value, __pyx_v_traceback);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_24__exit__(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_value, CYTHON_UNUSED PyObject *__pyx_v_traceback) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14OidcDeviceAuth_25__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[63])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_18) < (0)) __PYX_ERR(1, 2902, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2903:         """Close the provider permanently when leaving a ``with`` block."""
+2904:         self.close()
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2904, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2905:         return False
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __Pyx_INCREF(Py_False);
      __pyx_r = Py_False;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  goto __pyx_L0;
 2906: 
+2907:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_6config_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_14OidcDeviceAuth_6config_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_14OidcDeviceAuth_6config___get__(((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_14OidcDeviceAuth_6config___get__(struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_self) {
  struct questdb_oidc_config_view __pyx_v_view;
  PyObject *__pyx_v_OidcConfig = NULL;
  PyObject *__pyx_v_client_id = NULL;
  PyObject *__pyx_v_token_endpoint = NULL;
  PyObject *__pyx_v_device_authorization_endpoint = NULL;
  PyObject *__pyx_v_scope = NULL;
  PyObject *__pyx_v_audience = NULL;
  PyObject *__pyx_v_issuer = NULL;
  PyObject *__pyx_v__strip_control = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("questdb._client.OidcDeviceAuth.config.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;

  __Pyx_XDECREF(__pyx_v_OidcConfig);
  __Pyx_XDECREF(__pyx_v_client_id);
  __Pyx_XDECREF(__pyx_v_token_endpoint);
  __Pyx_XDECREF(__pyx_v_device_authorization_endpoint);
  __Pyx_XDECREF(__pyx_v_scope);
  __Pyx_XDECREF(__pyx_v_audience);
  __Pyx_XDECREF(__pyx_v_issuer);
  __Pyx_XDECREF(__pyx_v__strip_control);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2908:     def config(self):
 2909:         """The resolved OIDC configuration as an :class:`OidcConfig`.
 2910: 
 2911:         Reports the client id, the token and device-authorization endpoints, the
 2912:         scope, the selected token kind (``groups_in_token``), and the optional
 2913:         audience / issuer.
 2914: 
 2915:         Readable after :meth:`close`: the resolved configuration is immutable
 2916:         native state that closing does not invalidate. Raises ``RuntimeError``
 2917:         only on a provider that was never initialized.
 2918:         """
 2919:         cdef questdb_oidc_config_view view
+2920:         self._require_same_process()
  ((struct __pyx_vtabstruct_7questdb_7_client_OidcDeviceAuth *)__pyx_v_self->__pyx_vtab)->_require_same_process(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 2920, __pyx_L1_error)
+2921:         from questdb.auth._config import OidcConfig
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfig};
    __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__config, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2921, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_OidcConfig};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2921, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      switch (__pyx_t_3) {
        case 0:
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v_OidcConfig = __pyx_t_4;
        break;
        default:;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2922:         if self._raw == NULL:
  __pyx_t_5 = (__pyx_v_self->_raw == NULL);

  if (unlikely(__pyx_t_5)) {
/* … */
  }
+2923:             raise RuntimeError('OidcDeviceAuth is not initialized')
    __pyx_t_4 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_OidcDeviceAuth_is_not_initialize};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2923, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2923, __pyx_L1_error)
+2924:         memset(&view, 0, sizeof(questdb_oidc_config_view))
  (void)(memset((&__pyx_v_view), 0, (sizeof(struct questdb_oidc_config_view))));
+2925:         view.struct_size = sizeof(questdb_oidc_config_view)
  __pyx_v_view.struct_size = (sizeof(struct questdb_oidc_config_view));
+2926:         if not questdb_oidc_auth_get_config(self._raw, &view):
  __pyx_t_5 = (!questdb_oidc_auth_get_config(__pyx_v_self->_raw, (&__pyx_v_view)));

  if (unlikely(__pyx_t_5)) {
/* … */
  }
+2927:             raise RuntimeError('native OIDC config view is unavailable')
    __pyx_t_4 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_native_OIDC_config_view_is_unava};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2927, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2927, __pyx_L1_error)
 2928:         # The callee replaces struct_size with the prefix it wrote. Static
 2929:         # linkage supplies the full v1 view today; checking still prevents an
 2930:         # out-of-prefix read if packaging ever loads an older shared library.
+2931:         if not _oidc_config_view_is_full(view.struct_size):
  __pyx_t_5 = __pyx_f_7questdb_7_client__oidc_config_view_is_full(__pyx_v_view.struct_size); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2931, __pyx_L1_error)
  __pyx_t_7 = (!__pyx_t_5);


  if (unlikely(__pyx_t_7)) {
/* … */
  }
+2932:             raise RuntimeError('native OIDC config view is shorter than v1')
    __pyx_t_4 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_native_OIDC_config_view_is_short};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2932, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2932, __pyx_L1_error)
+2933:         client_id = _oidc_text(view.client_id, view.client_id_len)
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view.client_id, __pyx_v_view.client_id_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_client_id = __pyx_t_1;
  __pyx_t_1 = 0;
+2934:         token_endpoint = _oidc_text(
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view.token_endpoint, __pyx_v_view.token_endpoint_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_token_endpoint = __pyx_t_1;
  __pyx_t_1 = 0;
 2935:             view.token_endpoint, view.token_endpoint_len)
+2936:         device_authorization_endpoint = _oidc_text(
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view.device_authorization_endpoint, __pyx_v_view.device_authorization_endpoint_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2936, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_device_authorization_endpoint = __pyx_t_1;
  __pyx_t_1 = 0;
 2937:             view.device_authorization_endpoint,
 2938:             view.device_authorization_endpoint_len)
+2939:         scope = _oidc_text(view.scope, view.scope_len)
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view.scope, __pyx_v_view.scope_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2939, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_scope = __pyx_t_1;
  __pyx_t_1 = 0;
+2940:         audience = _oidc_text(view.audience, view.audience_len)
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view.audience, __pyx_v_view.audience_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_audience = __pyx_t_1;
  __pyx_t_1 = 0;
+2941:         issuer = _oidc_text(view.issuer, view.issuer_len)
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_text(__pyx_v_view.issuer, __pyx_v_view.issuer_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2941, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_issuer = __pyx_t_1;
  __pyx_t_1 = 0;
 2942:         # A built provider always resolves these; guard anyway so a weakened
 2943:         # native invariant surfaces clearly instead of seating None into
 2944:         # OidcConfig's non-optional str fields. audience / issuer stay optional.
+2945:         if (client_id is None or token_endpoint is None
  __pyx_t_5 = (__pyx_v_client_id == Py_None);
  if (!__pyx_t_5) {

  } else {

    __pyx_t_7 = __pyx_t_5;

    goto __pyx_L7_bool_binop_done;
  }
/* … */
  __pyx_t_5 = (__pyx_v_token_endpoint == Py_None);
  if (!__pyx_t_5) {

  } else {

    __pyx_t_7 = __pyx_t_5;

    goto __pyx_L7_bool_binop_done;
  }
/* … */
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+2946:                 or device_authorization_endpoint is None or scope is None):
  __pyx_t_5 = (__pyx_v_device_authorization_endpoint == Py_None);
  if (!__pyx_t_5) {

  } else {

    __pyx_t_7 = __pyx_t_5;

    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_scope == Py_None);

  __pyx_t_7 = __pyx_t_5;

  __pyx_L7_bool_binop_done:;
+2947:             raise RuntimeError(
    __pyx_t_4 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_native_OIDC_config_view_is_missi};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2947, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(1, 2947, __pyx_L1_error)
 2948:                 'native OIDC config view is missing a required field')
 2949:         # Native config-view strings are not guaranteed display-sanitized (only
 2950:         # the device-flow event text is), yet OidcConfig's repr can reach a
 2951:         # terminal / notebook or a logged traceback. Strip control/bidi/zero-
 2952:         # width chars from every field so a MITM'd or hostile /settings response
 2953:         # cannot inject ANSI/bidi through this sink -- matching the sanitize-
 2954:         # every-sink posture of the renderers and OidcError. _render is stdlib-
 2955:         # only, so this lazy import introduces no cycle. Optional fields keep
 2956:         # None (absent) distinct from '' (present-but-empty).
 2957:         #
 2958:         # OidcConfig.__post_init__ enforces the same strip for every instance,
 2959:         # so this is belt-and-braces: it keeps the sanitization visible at the
 2960:         # native boundary, where the untrusted input actually enters, and
 2961:         # _strip_control is idempotent.
+2962:         from questdb.auth._render import _strip_control
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_strip_control};
    __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_questdb_auth__render, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2962, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_strip_control};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_1, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 2962, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      switch (__pyx_t_3) {
        case 0:
        __Pyx_INCREF(__pyx_t_4);
        __pyx_v__strip_control = __pyx_t_4;
        break;
        default:;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2963:         return OidcConfig(
  __pyx_t_4 = NULL;
  __Pyx_INCREF(__pyx_v_OidcConfig);
  __pyx_t_8 = __pyx_v_OidcConfig; 
/* … */
  #endif
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[8] = {__pyx_t_4, __pyx_t_9, __pyx_t_11, __pyx_t_12, __pyx_t_13, ((PyObject *)__pyx_t_14), __pyx_t_15, __pyx_t_10};
    #if CYTHON_VECTORCALL
    __pyx_t_17 = __pyx_mstate_global->__pyx_tuple[14];
    if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 2963, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_17);
    #else
    {
      PyObject *__pyx_temp[7] = {__pyx_mstate_global->__pyx_n_u_client_id, __pyx_mstate_global->__pyx_n_u_token_endpoint, __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint, __pyx_mstate_global->__pyx_n_u_scope, __pyx_mstate_global->__pyx_n_u_groups_in_token, __pyx_mstate_global->__pyx_n_u_audience, __pyx_mstate_global->__pyx_n_u_issuer};
      __pyx_t_17 = __Pyx_MakeKwargDict(__pyx_temp, __pyx_callargs+1, 7);
      if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 2963, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
    }
    #endif
    __pyx_t_1 = __Pyx_Object_VectorcallKwds((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_17);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    #if CYTHON_VECTORCALL
    #endif
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF((PyObject *)__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;
/* … */
  {
    PyObject* __pyx_temp[7] = {__pyx_mstate_global->__pyx_n_u_client_id, __pyx_mstate_global->__pyx_n_u_token_endpoint, __pyx_mstate_global->__pyx_n_u_device_authorization_endpoint, __pyx_mstate_global->__pyx_n_u_scope, __pyx_mstate_global->__pyx_n_u_groups_in_token, __pyx_mstate_global->__pyx_n_u_audience, __pyx_mstate_global->__pyx_n_u_issuer};
    __pyx_mstate_global->__pyx_tuple[14] = __Pyx_PyTuple_FromArray(__pyx_temp, 7); if (unlikely(!__pyx_mstate_global->__pyx_tuple[14])) __PYX_ERR(1, 2963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[14]);
  }
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[14]);
+2964:             client_id=_strip_control(client_id),
  __pyx_t_10 = NULL;
  __Pyx_INCREF(__pyx_v__strip_control);
  __pyx_t_11 = __pyx_v__strip_control; 
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
    assert(__pyx_t_10);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_client_id};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 2964, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
+2965:             token_endpoint=_strip_control(token_endpoint),
  __pyx_t_10 = NULL;
  __Pyx_INCREF(__pyx_v__strip_control);
  __pyx_t_12 = __pyx_v__strip_control; 
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_12))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_12);
    assert(__pyx_t_10);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_12, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_token_endpoint};
    __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 2965, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
  }
+2966:             device_authorization_endpoint=_strip_control(
  __pyx_t_10 = NULL;
  __Pyx_INCREF(__pyx_v__strip_control);
  __pyx_t_13 = __pyx_v__strip_control; 
+2967:                 device_authorization_endpoint),
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_13))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_13);
    assert(__pyx_t_10);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_13, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_device_authorization_endpoint};
    __pyx_t_12 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_13, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 2966, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
  }
+2968:             scope=_strip_control(scope),
  __pyx_t_10 = NULL;
  __Pyx_INCREF(__pyx_v__strip_control);
  __pyx_t_14 = __pyx_v__strip_control; 
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_14);
    assert(__pyx_t_10);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_14);
    __Pyx_INCREF(__pyx_t_10);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_14, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_scope};
    __pyx_t_13 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_14, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 2968, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
  }
+2969:             groups_in_token=bool(view.groups_in_token),
  __pyx_t_10 = NULL;
  __pyx_t_15 = __Pyx_PyLong_From_bool(__pyx_v_view.groups_in_token); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 2969, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_15};
    __pyx_t_14 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 2969, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_14);
  }
+2970:             audience=(_strip_control(audience)
    __pyx_t_16 = NULL;
    __Pyx_INCREF(__pyx_v__strip_control);
    __pyx_t_17 = __pyx_v__strip_control; 
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_17))) {
      __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_17);
      assert(__pyx_t_16);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
      __Pyx_INCREF(__pyx_t_16);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_v_audience};
      __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 2970, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
    }
    __pyx_t_15 = __pyx_t_10;
    __pyx_t_10 = 0;
  } else {
+2971:                       if audience is not None else None),
  __pyx_t_7 = (__pyx_v_audience != Py_None);
  if (__pyx_t_7) {
/* … */
    __Pyx_INCREF(Py_None);
    __pyx_t_15 = Py_None;
  }

+2972:             issuer=_strip_control(issuer) if issuer is not None else None)
  __pyx_t_7 = (__pyx_v_issuer != Py_None);
  if (__pyx_t_7) {
    __pyx_t_16 = NULL;
    __Pyx_INCREF(__pyx_v__strip_control);
    __pyx_t_18 = __pyx_v__strip_control; 
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_18))) {
      __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_18);
      assert(__pyx_t_16);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18);
      __Pyx_INCREF(__pyx_t_16);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_18, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_v_issuer};
      __pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      if (unlikely(!__pyx_t_17)) __PYX_ERR(1, 2972, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
    }
    __pyx_t_10 = __pyx_t_17;
    __pyx_t_17 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_10 = Py_None;
  }

  #if CYTHON_VECTORCALL
 2973: 
 2974: 
+2975: def _debug_oidc_renderer_attached(OidcDeviceAuth provider not None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_57_debug_oidc_renderer_attached(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_56_debug_oidc_renderer_attached, "Internal test seam: whether construction published a renderer edge.");
static PyMethodDef __pyx_mdef_7questdb_7_client_57_debug_oidc_renderer_attached = {"_debug_oidc_renderer_attached", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_57_debug_oidc_renderer_attached, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_56_debug_oidc_renderer_attached};
static PyObject *__pyx_pw_7questdb_7_client_57_debug_oidc_renderer_attached(PyObject *__pyx_self, 
#if CYTHON_VECTORCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_provider = 0;
  #if !CYTHON_VECTORCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_oidc_renderer_attached (wrapper)", 0);
  #if !CYTHON_VECTORCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_provider,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(1, 2975, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2975, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_oidc_renderer_attached", 0) < (0)) __PYX_ERR(1, 2975, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_oidc_renderer_attached", 1, 1, 1, i); __PYX_ERR(1, 2975, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 2975, __pyx_L3_error)
    }
    __pyx_v_provider = ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_oidc_renderer_attached", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 2975, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_oidc_renderer_attached", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_provider), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth, 0, "provider", 0))) __PYX_ERR(1, 2975, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_56_debug_oidc_renderer_attached(__pyx_self, __pyx_v_provider);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_56_debug_oidc_renderer_attached(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *__pyx_v_provider) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._debug_oidc_renderer_attached", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_57_debug_oidc_renderer_attached, 0, __pyx_mstate_global->__pyx_n_u_debug_oidc_renderer_attached, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[66])); if (unlikely(!__pyx_t_18)) __PYX_ERR(1, 2975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_oidc_renderer_attached, __pyx_t_18) < (0)) __PYX_ERR(1, 2975, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2976:     """Internal test seam: whether construction published a renderer edge."""
+2977:     return provider._renderer is not None
  __pyx_t_1 = (__pyx_v_provider->_renderer != Py_None);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 2977, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_2;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_2 = 0;
  goto __pyx_L0;
 2978: 
 2979: 
+2980: cdef object _oidc_provider_from_user_data(void* user_data):
static PyObject *__pyx_f_7questdb_7_client__oidc_provider_from_user_data(void *__pyx_v_user_data) {
  PyObject *__pyx_v_ref = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._oidc_provider_from_user_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ref);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2981:     """Resolve the provider a native event belongs to. Requires the GIL.
 2982: 
 2983:     ``user_data`` is the integer key handed to native at registration, never a
 2984:     Python object pointer -- see ``_oidc_user_data_release_trampoline``. A
 2985:     missing key or a dead weakref both mean the provider is gone, which is not
 2986:     an error: the flow is simply no longer observed.
 2987:     """
+2988:     ref = _OIDC_PROVIDERS.get(<size_t>user_data)
  __pyx_t_2 = __pyx_v_7questdb_7_client__OIDC_PROVIDERS;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(((size_t)__pyx_v_user_data)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 2988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2988, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_ref = __pyx_t_1;
  __pyx_t_1 = 0;
+2989:     if ref is None:
  __pyx_t_5 = (__pyx_v_ref == Py_None);
  if (__pyx_t_5) {
/* … */
  }
+2990:         return None
    {
      PyObject *__pyx_temp;
      {
        __pyx_temp = __pyx_r;
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      }
      __Pyx_XDECREF(__pyx_temp);
    }
    goto __pyx_L0;
+2991:     return ref()
  __pyx_t_3 = NULL;
  __Pyx_INCREF(__pyx_v_ref);
  __pyx_t_2 = __pyx_v_ref; 
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2991, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  {
    PyObject *__pyx_temp;
    {
      __pyx_temp = __pyx_r;
      __pyx_r = __pyx_t_1;
    }
    __Pyx_XDECREF(__pyx_temp);
  }
  __pyx_t_1 = 0;
  goto __pyx_L0;