all:
  children:
    tempest:
      hosts:
        controller: null
    zuul_unreachable:
      hosts: {}
  hosts:
    controller:
      ansible_connection: ssh
      ansible_host: 162.253.55.52
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      configure_swap_size: 8192
      devstack_local_conf:
        post-config:
          $NEUTRON_CONF:
            DEFAULT:
              global_physnet_mtu: '{{ external_bridge_mtu }}'
          /etc/magnum/magnum.conf:
            cluster_template:
              kubernetes_allowed_network_drivers: calico,cilium
              kubernetes_default_network_driver: calico
            nova_client:
              api_version: 2.15
          /etc/manila/manila.conf:
            generic:
              connect_share_server_to_tenant_network: true
              driver_handles_share_servers: true
      devstack_localrc:
        ADMIN_PASSWORD: secretadmin
        DATABASE_PASSWORD: secretdatabase
        DEBUG_LIBVIRT_COREDUMPS: true
        DISABLE_AMP_IMAGE_BUILD: true
        ENABLE_SYSCTL_MEM_TUNING: true
        ENABLE_SYSCTL_NET_TUNING: true
        ENABLE_ZSWAP: true
        ERROR_ON_CLONE: true
        FIXED_RANGE: 10.1.0.0/20
        FLOATING_RANGE: 172.24.5.0/24
        GIT_BASE: https://github.com
        HOST_IP: '{{ hostvars[''controller''][''nodepool''][''private_ipv4''] }}'
        IPV4_ADDRS_SAFE_TO_USE: 10.1.0.0/20
        LIBVIRT_TYPE: '{{ devstack_libvirt_type | default("qemu") }}'
        LOGFILE: /opt/stack/logs/devstacklog.txt
        LOG_COLOR: false
        MAGNUM_GUEST_IMAGE_URL: '{{ image_url }}'
        MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS: snapshot_support=True create_share_from_snapshot_support=True
        MANILA_ENABLED_BACKENDS: generic
        MANILA_USE_SERVICE_INSTANCE_PASSWORD: true
        NETWORK_GATEWAY: 10.1.0.1
        NOVA_LIBVIRT_TB_CACHE_SIZE: 128
        NOVA_VNC_ENABLED: true
        OCTAVIA_NODE: api
        OVN_DBS_LOG_LEVEL: dbg
        PUBLIC_BRIDGE_MTU: '{{ external_bridge_mtu }}'
        PUBLIC_NETWORK_GATEWAY: 172.24.5.1
        RABBIT_PASSWORD: secretrabbit
        SERVICE_HOST: '{{ hostvars[''controller''][''nodepool''][''private_ipv4'']
          }}'
        SERVICE_PASSWORD: secretservice
        SWIFT_HASH: 1234123412341234
        SWIFT_REPLICAS: 1
        SWIFT_START_ALL_SERVICES: false
        VERBOSE: true
        VERBOSE_NO_TIMESTAMP: true
      devstack_plugins:
        barbican: https://github.com/openstack/barbican
        magnum: https://review.opendev.org/openstack/magnum
        magnum-cluster-api: https://github.com/vexxhost/magnum-cluster-api
        manila: https://github.com/openstack/manila
        octavia: https://github.com/openstack/octavia
        ovn-octavia-provider: https://github.com/openstack/ovn-octavia-provider
      devstack_services:
        base: false
        c-api: true
        c-bak: true
        c-sch: true
        c-vol: true
        dstat: false
        etcd3: true
        file_tracker: true
        g-api: true
        horizon: false
        key: true
        memory_tracker: true
        mysql: true
        n-api: true
        n-api-meta: true
        n-cond: true
        n-cpu: true
        n-novnc: true
        n-sch: true
        o-api: true
        o-da: true
        o-hk: true
        octavia: true
        openstack-cli-server: true
        ovn-controller: true
        ovn-northd: true
        ovs-vswitchd: true
        ovsdb-server: true
        placement-api: true
        q-ovn-agent: true
        q-svc: true
        rabbit: true
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
        tempest: false
        tls-proxy: true
      extensions_to_txt:
        auto: true
        conf: true
        localrc: true
        log: true
        stackenv: true
      image_url: https://github.com/vexxhost/capo-image-elements/releases/latest/download/ubuntu-22.04-{{
        kube_tag }}.qcow2
      kube_tag: v1.32.12
      network_driver: cilium
      nodepool:
        az: nova
        cloud: public
        external_id: 9da956be-f332-46f0-869f-27b42ae188fe
        host_id: 75d3a86f985f0d60e3cff8f4ecdf5573fc58e724d10889e9f3cb3f12
        interface_ip: 162.253.55.52
        label: ubuntu-noble-16
        node_properties: {}
        private_ipv4: 162.253.55.52
        private_ipv6: null
        provider: yul1
        public_ipv4: 162.253.55.52
        public_ipv6: 2604:e100:1:0:f816:3eff:fe99:9a8a
        region: ca-ymq-1
        slot: null
      zuul_copy_output:
        /etc/ceph: logs
        /etc/glusterfs/glusterd.vol: logs
        /etc/libvirt: logs
        /etc/lvm: logs
        /etc/resolv.conf: logs
        /etc/sudoers: logs
        /etc/sudoers.d: logs
        /var/log/ceph: logs
        /var/log/glusterfs: logs
        /var/log/libvirt: logs
        /var/log/mysql: logs
        /var/log/openvswitch: logs
        /var/log/postgresql: logs
        /var/log/rabbitmq: logs
        /var/log/unbound.log: logs
        '{{ devstack_conf_dir }}/.localrc.auto': logs
        '{{ devstack_conf_dir }}/.stackenv': logs
        '{{ devstack_conf_dir }}/local.conf': logs
        '{{ devstack_conf_dir }}/localrc': logs
        '{{ devstack_full_log}}': logs
        '{{ devstack_log_dir }}/atop': logs
        '{{ devstack_log_dir }}/devstacklog.txt': logs
        '{{ devstack_log_dir }}/devstacklog.txt.summary': logs
        '{{ devstack_log_dir }}/dstat-csv.log': logs
        '{{ devstack_log_dir }}/qemu.coredump': logs
        '{{ devstack_log_dir }}/tcpdump.pcap': logs
        '{{ devstack_log_dir }}/worlddump-latest.txt': logs
        '{{ stage_dir }}/apache': logs
        '{{ stage_dir }}/apache_config': logs
        '{{ stage_dir }}/audit.log': logs
        '{{ stage_dir }}/core': logs
        '{{ stage_dir }}/deprecations.log': logs
        '{{ stage_dir }}/df.txt': logs
        '{{ stage_dir }}/dpkg-l.txt': logs
        '{{ stage_dir }}/etc': logs
        '{{ stage_dir }}/iptables.txt': logs
        '{{ stage_dir }}/listen53.txt': logs
        '{{ stage_dir }}/mount.txt': logs
        '{{ stage_dir }}/performance.json': logs
        '{{ stage_dir }}/pip2-freeze.txt': logs
        '{{ stage_dir }}/pip3-freeze.txt': logs
        '{{ stage_dir }}/rpm-qa.txt': logs
        '{{ stage_dir }}/services.txt': logs
        '{{ stage_dir }}/verify_tempest_conf.log': logs
      zuul_node:
        az: nova
        cloud: public
        external_id: 9da956be-f332-46f0-869f-27b42ae188fe
        host_id: 75d3a86f985f0d60e3cff8f4ecdf5573fc58e724d10889e9f3cb3f12
        interface_ip: 162.253.55.52
        label: ubuntu-noble-16
        node_properties: {}
        private_ipv4: 162.253.55.52
        private_ipv6: null
        provider: yul1
        public_ipv4: 162.253.55.52
        public_ipv6: 2604:e100:1:0:f816:3eff:fe99:9a8a
        region: ca-ymq-1
        slot: null
        uuid: null
  vars:
    configure_swap_size: 8192
    devstack_local_conf:
      post-config:
        $NEUTRON_CONF:
          DEFAULT:
            global_physnet_mtu: '{{ external_bridge_mtu }}'
        /etc/magnum/magnum.conf:
          cluster_template:
            kubernetes_allowed_network_drivers: calico,cilium
            kubernetes_default_network_driver: calico
          nova_client:
            api_version: 2.15
        /etc/manila/manila.conf:
          generic:
            connect_share_server_to_tenant_network: true
            driver_handles_share_servers: true
    devstack_localrc:
      ADMIN_PASSWORD: secretadmin
      DATABASE_PASSWORD: secretdatabase
      DEBUG_LIBVIRT_COREDUMPS: true
      DISABLE_AMP_IMAGE_BUILD: true
      ENABLE_SYSCTL_MEM_TUNING: true
      ENABLE_SYSCTL_NET_TUNING: true
      ENABLE_ZSWAP: true
      ERROR_ON_CLONE: true
      FIXED_RANGE: 10.1.0.0/20
      FLOATING_RANGE: 172.24.5.0/24
      GIT_BASE: https://github.com
      HOST_IP: '{{ hostvars[''controller''][''nodepool''][''private_ipv4''] }}'
      IPV4_ADDRS_SAFE_TO_USE: 10.1.0.0/20
      LIBVIRT_TYPE: '{{ devstack_libvirt_type | default("qemu") }}'
      LOGFILE: /opt/stack/logs/devstacklog.txt
      LOG_COLOR: false
      MAGNUM_GUEST_IMAGE_URL: '{{ image_url }}'
      MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS: snapshot_support=True create_share_from_snapshot_support=True
      MANILA_ENABLED_BACKENDS: generic
      MANILA_USE_SERVICE_INSTANCE_PASSWORD: true
      NETWORK_GATEWAY: 10.1.0.1
      NOVA_LIBVIRT_TB_CACHE_SIZE: 128
      NOVA_VNC_ENABLED: true
      OCTAVIA_NODE: api
      OVN_DBS_LOG_LEVEL: dbg
      PUBLIC_BRIDGE_MTU: '{{ external_bridge_mtu }}'
      PUBLIC_NETWORK_GATEWAY: 172.24.5.1
      RABBIT_PASSWORD: secretrabbit
      SERVICE_HOST: '{{ hostvars[''controller''][''nodepool''][''private_ipv4''] }}'
      SERVICE_PASSWORD: secretservice
      SWIFT_HASH: 1234123412341234
      SWIFT_REPLICAS: 1
      SWIFT_START_ALL_SERVICES: false
      VERBOSE: true
      VERBOSE_NO_TIMESTAMP: true
    devstack_plugins:
      barbican: https://github.com/openstack/barbican
      magnum: https://review.opendev.org/openstack/magnum
      magnum-cluster-api: https://github.com/vexxhost/magnum-cluster-api
      manila: https://github.com/openstack/manila
      octavia: https://github.com/openstack/octavia
      ovn-octavia-provider: https://github.com/openstack/ovn-octavia-provider
    devstack_services:
      base: false
      c-api: true
      c-bak: true
      c-sch: true
      c-vol: true
      dstat: false
      etcd3: true
      file_tracker: true
      g-api: true
      horizon: false
      key: true
      memory_tracker: true
      mysql: true
      n-api: true
      n-api-meta: true
      n-cond: true
      n-cpu: true
      n-novnc: true
      n-sch: true
      o-api: true
      o-da: true
      o-hk: true
      octavia: true
      openstack-cli-server: true
      ovn-controller: true
      ovn-northd: true
      ovs-vswitchd: true
      ovsdb-server: true
      placement-api: true
      q-ovn-agent: true
      q-svc: true
      rabbit: true
      s-account: false
      s-container: false
      s-object: false
      s-proxy: false
      tempest: false
      tls-proxy: true
    extensions_to_txt:
      auto: true
      conf: true
      localrc: true
      log: true
      stackenv: true
    image_url: https://github.com/vexxhost/capo-image-elements/releases/latest/download/ubuntu-22.04-{{
      kube_tag }}.qcow2
    kube_tag: v1.32.12
    network_driver: cilium
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: zuul-config/zuul.d/jobs.yaml@main#1>'
      - '<Job openstack-multinode-fips explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: zuul-config/zuul.d/jobs.yaml@main#17>'
      - '<Job devstack-base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: openstack/devstack/.zuul.yaml@master#426>'
      - '<Job devstack-minimal explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: openstack/devstack/.zuul.yaml@master#558>'
      - '<Job devstack explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: openstack/devstack/.zuul.yaml@master#601>'
      - '<Job magnum-cluster-api-devstack explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#1>'
      - '<Job magnum-cluster-api-hydrophone explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#60>'
      - '<Job magnum-cluster-api-hydrophone-v1.32.12 explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#72>'
      - '<Job magnum-cluster-api-hydrophone-v1.32.12-cilium explicit: None implied:
        {MatchAny:{ImpliedBranchMatcher:main}} source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#84>'
      - '<Job magnum-cluster-api-hydrophone-v1.32.12-cilium explicit: None implied:
        None source: vexxhost/magnum-cluster-api/zuul.d/project.yaml@main#1>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 36a419106c4c47928b3802f5996a0d3e
      build_refs:
      - branch: main
        change: '837'
        change_message: "fix(deps): update pyo3\n\nThis PR contains the following
          updates:\n\n| Package | Type | Update | Change |\n|---|---|---|---|\n| [pyo3](https://redirect.github.com/pyo3/pyo3)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-async-runtimes](https://redirect.github.com/PyO3/pyo3-async-runtimes)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-log](https://redirect.github.com/vorner/pyo3-log)
          | dependencies | patch | `0.13.1` \u2192 `0.13.3` |\n| [pythonize](https://redirect.github.com/davidhewitt/pythonize)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n\n---\n\n### Release
          Notes\n\n<details>\n<summary>pyo3/pyo3 (pyo3)</summary>\n\n### [`v0.28.2`](https://redirect.github.com/PyO3/pyo3/releases/tag/v0.28.2):
          PyO3 0.28.2\n\n[Compare Source](https://redirect.github.com/pyo3/pyo3/compare/v0.28.1...v0.28.2)\n\nThis
          patch release contains a soundness fix for subclassing native types such
          as `PyList` with the `abi3` feature enabled when targeting a minimum version
          of Python 3.12 or higher. (Support for doing such subclassing was newly
          added in PyO3 0.28.0.)\n\nPyO3 0.28.0 and 0.28.1 will be yanked.\n\nThis
          release also contains a correction to the FFI definition `PyType_GetTypeDataSize`
          and incorrectly-generated `__qualname__` on `#[pyclass]` enum variant types
          when using `#[pyo3(name = \"...\")]` option to rename the enum and/or variant.\n\nThank
          you to the following contributors for the improvements:\n\n[@&#8203;davidhewitt](https://redirect.github.com/davidhewitt)\n[@&#8203;Icxolu](https://redirect.github.com/Icxolu)\n[@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum)\n\n###
          [`v0.28.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0281---2026-02-14)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.28.0...v0.28.1)\n\n#####
          Fixed\n\n- Fix `*args` / `**kwargs` support in` experimental-async` feature
          (regressed in 0.28.0). [#&#8203;5771](https://redirect.github.com/PyO3/pyo3/pull/5771)\n-
          Fix `clippy::declare_interior_mutable_const` warning inside `#[pyclass]`
          generated code on enums. [#&#8203;5772](https://redirect.github.com/PyO3/pyo3/pull/5772)\n-
          Fix `ambiguous_associated_items` compilation error when deriving `FromPyObject`
          or using `#[pyclass(from_py_object)]` macro on enums with `Error` variant.
          [#&#8203;5784](https://redirect.github.com/PyO3/pyo3/pull/5784)\n- Fix `__qualname__`
          for complex `#[pyclass]` enum variants to include the enum name. [#&#8203;5796](https://redirect.github.com/PyO3/pyo3/pull/5796)\n\n###
          [`v0.28.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0280---2026-02-01)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.2...v0.28.0)\n\n#####
          Packaging\n\n- Bump MSRV to Rust 1.83. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
          Bump minimum supported `quote` version to 1.0.37. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
          Bump supported GraalPy version to 25.0. [#&#8203;5542](https://redirect.github.com/PyO3/pyo3/pull/5542)\n-
          Drop `memoffset` dependency. [#&#8203;5545](https://redirect.github.com/PyO3/pyo3/pull/5545)\n-
          Support for free-threaded Python is now opt-out rather than opt-in. [#&#8203;5564](https://redirect.github.com/PyO3/pyo3/pull/5564)\n-
          Bump `target-lexicon` dependency to 0.13.3. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
          Drop `indoc` and `unindent` dependencies. [#&#8203;5608](https://redirect.github.com/PyO3/pyo3/pull/5608)\n\n#####
          Added\n\n- Add `__init__` support in `#[pymethods]`. [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
          Expose `PySuper` on PyPy, GraalPy and ABI3 [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
          Add `PyString::from_fmt` and `py_format!` macro. [#&#8203;5199](https://redirect.github.com/PyO3/pyo3/pull/5199)\n-
          Add `#[pyclass(new = \"from_fields\")]` option. [#&#8203;5421](https://redirect.github.com/PyO3/pyo3/pull/5421)\n-
          Add `pyo3::buffer::PyUntypedBuffer`, a type-erased form of `PyBuffer<T>`.
          [#&#8203;5458](https://redirect.github.com/PyO3/pyo3/pull/5458)\n- Add `PyBytes::new_with_writer`
          [#&#8203;5517](https://redirect.github.com/PyO3/pyo3/pull/5517)\n- Add `PyClass::NAME`.
          [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n- Add `pyo3_build_config::add_libpython_rpath_link_args`.
          [#&#8203;5624](https://redirect.github.com/PyO3/pyo3/pull/5624)\n- Add `PyBackedStr::clone_ref`
          and `PyBackedBytes::clone_ref` methods. [#&#8203;5654](https://redirect.github.com/PyO3/pyo3/pull/5654)\n-
          Add `PyCapsule::new_with_pointer` and `PyCapsule::new_with_pointer_and_destructor`
          for creating capsules with raw pointers. [#&#8203;5689](https://redirect.github.com/PyO3/pyo3/pull/5689)\n-
          Add `#[deleter]` attribute to implement property deleters in `#[methods]`.
          [#&#8203;5699](https://redirect.github.com/PyO3/pyo3/pull/5699)\n- Add `IntoPyObject`
          and `FromPyObject` implementations for `uuid::NonNilUuid`. [#&#8203;5707](https://redirect.github.com/PyO3/pyo3/pull/5707)\n-
          Add `PyBackedStr::as_str` and `PyBackedStr::as_py_str` methods. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
          Add support for subclassing native types (`PyDict`, exceptions, ...) when
          building for abi3 on Python 3.12+. [#&#8203;5733](https://redirect.github.com/PyO3/pyo3/pull/5733)\n-
          Add support for subclassing `PyList` when building for Python 3.12+. [#&#8203;5734](https://redirect.github.com/PyO3/pyo3/pull/5734)\n-
          FFI definitions:\n  - Add FFI definitions `PyEval_GetFrameBuiltins`, `PyEval_GetFrameGlobals`
          and `PyEval_GetFrameLocals` on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Add FFI definitions `PyObject_New`, `PyObject_NewVar`, `PyObject_GC_Resize`,
          `PyObject_GC_New`, and `PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
          \ - Added FFI definitions and an unsafe Rust API wrapping `Py_BEGIN_CRITICAL_SECTION_MUTEX`
          and `Py_BEGIN_CRITICAL_SECTION_MUTEX2`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n
          \ - Add FFI definition `PyDict_GetItemStringRef` on Python 3.13 and up.
          [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Add
          FFI definition `PyIter_NextItem` on Python 3.14 and up, and `compat::PyIter_NextItem`
          for older versions. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n
          \ - Add FFI definitions `PyThreadState_GetInterpreter` and `PyThreadState_GetID`
          on Python 3.9+, `PyThreadState_EnterTracing` and `PyThreadState_LeaveTracing`
          on Python 3.11+, `PyThreadState_GetUnchecked` on Python 3.13+, and `compat::PyThreadState_GetUnchecked`.
          [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n  - Add
          FFI definitions `PyImport_ImportModuleAttr` and `PyImport_ImportModuleAttrString`
          on Python 3.14+. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n
          \ - Add FFI definitions for the `PyABIInfo` and `PyModExport` APIs available
          in Python 3.15. [#&#8203;5746](https://redirect.github.com/PyO3/pyo3/pull/5746)\n-
          `experimental-inspect`:\n  - Emit base classes. [#&#8203;5331](https://redirect.github.com/PyO3/pyo3/pull/5331)\n
          \ - Emit `@typing.final` on final classes. [#&#8203;5552](https://redirect.github.com/PyO3/pyo3/pull/5552)\n
          \ - Generate nested classes for complex enums. [#&#8203;5708](https://redirect.github.com/PyO3/pyo3/pull/5708)\n
          \ - Emit `async` keyword for async functions. [#&#8203;5731](https://redirect.github.com/PyO3/pyo3/pull/5731)\n\n#####
          Changed\n\n- Call `sys.unraisablehook` instead of `PyErr_Print` if panicking
          on null FFI pointer in `Bound`, `Borrowed` and `Py` constructors. [#&#8203;5496](https://redirect.github.com/PyO3/pyo3/pull/5496)\n-
          Use PEP-489 multi-phase initialization for `#[pymodule]`. [#&#8203;5525](https://redirect.github.com/PyO3/pyo3/pull/5525)\n-
          Deprecate implicit by-value implementation of `FromPyObject` for `#[pyclass]`.
          [#&#8203;5550](https://redirect.github.com/PyO3/pyo3/pull/5550)\n- Deprecate
          `PyTypeInfo::NAME` and `PyTypeInfo::MODULE`. [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n-
          Deprecate `Py<T>::from_{owned,borrowed}[or_{err,opt}]` constructors from
          raw pointer. [#&#8203;5585](https://redirect.github.com/PyO3/pyo3/pull/5585)\n-
          Deprecate FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`.
          [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n- Relax
          `'py: 'a` bound in `Py::extract`. [#&#8203;5594](https://redirect.github.com/PyO3/pyo3/pull/5594)\n-
          Add a `T: PyTypeCheck` bound to the `IntoPyObject` implementations on `Bound<T>`,
          `Borrowed<T>` and `Py<T>`. [#&#8203;5640](https://redirect.github.com/PyO3/pyo3/pull/5640)\n-
          The `with_critical_section` and `with_critical_section2` functions are moved
          to `pyo3::sync::critical_section`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n-
          Use `PyIter_NextItem` in `PyIterator::next` implementation. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n-
          `IntoPyObject` for simple enums now uses a singleton value, allowing identity
          (python `is`) comparisons. [#&#8203;5665](https://redirect.github.com/PyO3/pyo3/pull/5665)\n-
          Allow any `Sequence[int]` in `FromPyObject` on `Cow<[u8]>` and change the
          error type to `PyErr`. [#&#8203;5667](https://redirect.github.com/PyO3/pyo3/pull/5667)\n-
          `async` pymethods now borrow `self` only for the duration of awaiting the
          future, not the entire method call. [#&#8203;5684](https://redirect.github.com/PyO3/pyo3/pull/5684)\n-
          Change `CastError` formatted message to directly describe the \"is not an
          instance of\" failure condition. [#&#8203;5693](https://redirect.github.com/PyO3/pyo3/pull/5693)\n-
          Add `#[inline]` hints to many methods on `PyBackedStr`. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
          Remove redundant internal counters from `BoundSetIterator` and `BoundFrozenSetIterator`.
          [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n- Implement
          `PyIterator::size_hint` on abi3 builds (previously was only on unlimited
          API builds). [#&#8203;5727](https://redirect.github.com/PyO3/pyo3/pull/5727)\n-
          Deprecate FFI definition `PyImport_ImportModuleNoBlock` (deprecated in Python
          3.13). [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
          `#[new]` can now return arbitrary Python objects. [#&#8203;5739](https://redirect.github.com/PyO3/pyo3/pull/5739)\n-
          `experimental-inspect`:\n  - Introduce `TypeHint` and make use of it to
          encode type hint annotations. [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438)\n
          \ - Rename `PyType{Info,Check}::TYPE_INFO` into `PyType{Info,Check}::TYPE_HINT`.
          [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438) [#&#8203;5619](https://redirect.github.com/PyO3/pyo3/pull/5619)
          [#&#8203;5641](https://redirect.github.com/PyO3/pyo3/pull/5641)\n  - Fill
          annotations on function arguments and return values for all types supported
          natively by PyO3. [#&#8203;5634](https://redirect.github.com/PyO3/pyo3/pull/5634)
          [#&#8203;5637](https://redirect.github.com/PyO3/pyo3/pull/5637) [#&#8203;5639](https://redirect.github.com/PyO3/pyo3/pull/5639)\n
          \ - Use `_typeshed.Incomplete` instead of `typing.Any` as default type hint,
          to make it easier to spot incomplete trait implementations. [#&#8203;5744](https://redirect.github.com/PyO3/pyo3/pull/5744)\n
          \ - Use general Python expression syntax for type hints. [#&#8203;5671](https://redirect.github.com/PyO3/pyo3/pull/5671)\n\n#####
          Removed\n\n- Remove all functionality deprecated in PyO3 0.25 and 0.26.
          [#&#8203;5740](https://redirect.github.com/PyO3/pyo3/pull/5740)\n- FFI definitions:\n
          \ - Remove FFI definition `PyEval_GetCallStats` (removed from CPython in
          Python 3.7). [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Remove FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`
          on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Remove private FFI definitions `_PyObject_New`, `_PyObject_NewVar`,
          `_PyObject_GC_Resize`, `_PyObject_GC_New`, and `_PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
          \ - Remove private FFI definitions `_PyDict_SetItem_KnownHash`, `_PyDict_Next`,
          `_PyDict_NewPresized`, `_PyDict_Contains_KnownHash`, and `_PyDict_Contains`.
          [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Remove
          private FFI definitions `_PyFrameEvalFunction`, `_PyInterpreterState_GetEvalFrameFunc`
          and `_PyInterpreterState_SetEvalFrameFunc`. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
          \ - Remove private FFI definitions `_PyImport_IsInitialized`, `_PyImport_SetModule`,
          `_PyImport_SetModuleString`, `_PyImport_AcquireLock`, `_PyImport_ReleaseLock`,
          `_PyImport_FindBuiltin`, `_PyImport_FindExtensionObject`, `_PyImport_FixupBuiltin`,
          and `_PyImport_FixupExtensionObject`. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n\n#####
          Fixed\n\n- Fix `PyModuleMethods::add_submodule()` to use the last segment
          of the submodule name as the attribute name on the parent module instead
          of using the full name. [#&#8203;5375](https://redirect.github.com/PyO3/pyo3/pull/5375)\n-
          Link with libpython for Cygwin extension modules. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
          Link against the limited API DLL for Cygwin when abi3 is used. [#&#8203;5574](https://redirect.github.com/PyO3/pyo3/pull/5574)\n-
          Handle errors in `PyIterator` when calling `size_hint` [#&#8203;5604](https://redirect.github.com/PyO3/pyo3/pull/5604)\n-
          Link with libpython for iOS extension modules. [#&#8203;5605](https://redirect.github.com/PyO3/pyo3/pull/5605)\n-
          Correct `IntoPyObject` output type of `PyBackedStr` to be `PyString`, not
          `PyAny`. [#&#8203;5655](https://redirect.github.com/PyO3/pyo3/pull/5655)\n-
          Fix `async` functions to return `None` rather than empty tuple `()`. [#&#8203;5685](https://redirect.github.com/PyO3/pyo3/pull/5685)\n-
          Fix compile error when using references to `#[pyclass]` types (e.g. `&MyClass`)
          as arguments to async `#[pyfunction]`s. [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n-
          FFI definitions:\n  - Fix FFI definition `PyMemberDescrObject.d_member`
          to use `PyMemberDef` for Python 3.11+ (was incorrectly `PyGetSetDef`). [#&#8203;5647](https://redirect.github.com/PyO3/pyo3/pull/5647)\n
          \ - Mark FFI definition `PyThreadState_GetFrame` available with abi3 in
          3.10+. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
          \ - Fix FFI definition `PyImport_GetModule` on PyPy. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
          `experimental-inspect`:\n  - fix `__new__` return type to be the built object
          type and not `None`. [#&#8203;5555](https://redirect.github.com/PyO3/pyo3/pull/5555)\n
          \ - fix imports of decorators. [#&#8203;5618](https://redirect.github.com/PyO3/pyo3/pull/5618)\n
          \ - fix the return type annotation of `PyResult<()>` (must be `None` and
          not `tuple`) [#&#8203;5674](https://redirect.github.com/PyO3/pyo3/pull/5674)\n\n###
          [`v0.27.2`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0272---2025-11-30)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.1...v0.27.2)\n\n#####
          Changed\n\n- Disable subclassing `PyDict` on GraalPy (unsupported for now,
          may crash at runtime). [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n#####
          Fixed\n\n- Fix crash when compiling on Rust 1.92+ with both debug assertions
          and optimizations enabled. [#&#8203;5638](https://redirect.github.com/PyO3/pyo3/pull/5638)\n-
          Fix FFI definition of `PyDictObject` on PyPy. [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n###
          [`v0.27.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0271---2025-10-21)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.0...v0.27.1)\n\n#####
          Fixed\n\n- Fix `clippy:declare_interior_mutable_const` warning from `#[pyfunction]`.
          [#&#8203;5538](https://redirect.github.com/PyO3/pyo3/pull/5538)\n- Expose
          `pyo3::types::PySendResult` in public API. [#&#8203;5539](https://redirect.github.com/PyO3/pyo3/pull/5539)\n\n###
          [`v0.27.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0270---2025-10-19)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.26.0...v0.27.0)\n\n#####
          Packaging\n\n- Extend range of supported versions of `hashbrown` optional
          dependency to include version 0.16. [#&#8203;5428](https://redirect.github.com/PyO3/pyo3/pull/5428)\n-
          Bump optional `num-bigint` dependency minimum version to 0.4.4. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
          Test against Python 3.14 final release. [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
          Drop support for PyPy 3.9 and 3.10. [#&#8203;5516](https://redirect.github.com/PyO3/pyo3/pull/5516)\n-
          Provide a better error message when building an outdated PyO3 for a too-new
          Python version. [#&#8203;5519](https://redirect.github.com/PyO3/pyo3/pull/5519)\n\n#####
          Added\n\n- Add `FromPyObjectOwned` as convenient trait bound for `FromPyObject`
          when the data is not borrowed from Python. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
          Add `Borrowed::extract`, same as `PyAnyMethods::extract`, but does not restrict
          the lifetime by deref. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
          `experimental-inspect`: basic support for `#[derive(IntoPyObject)]` (no
          struct fields support yet). [#&#8203;5365](https://redirect.github.com/PyO3/pyo3/pull/5365)\n-
          `experimental-inspect`: support `#[pyo3(get, set)]` and `#[pyclass(get_all,
          set_all)]`. [#&#8203;5370](https://redirect.github.com/PyO3/pyo3/pull/5370)\n-
          Add `PyTypeCheck::classinfo_object` that returns an object that can be used
          as parameter in `isinstance` or `issubclass`. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
          Implement `PyTypeInfo` on `datetime.*` types even when the limited API is
          enabled. [#&#8203;5388](https://redirect.github.com/PyO3/pyo3/pull/5388)\n-
          Implement `PyTypeInfo` on `PyIterator`, `PyMapping` and `PySequence`. [#&#8203;5402](https://redirect.github.com/PyO3/pyo3/pull/5402)\n-
          Implement `PyTypeInfo` on `PyCode` when using the stable ABI. [#&#8203;5403](https://redirect.github.com/PyO3/pyo3/pull/5403)\n-
          Implement `PyTypeInfo` on `PyWeakrefReference` when using the stable ABI.
          [#&#8203;5404](https://redirect.github.com/PyO3/pyo3/pull/5404)\n- Add `pyo3::sync::RwLockExt`
          trait, analogous to `pyo3::sync::MutexExt` for readwrite locks. [#&#8203;5435](https://redirect.github.com/PyO3/pyo3/pull/5435)\n-
          Add `PyString::from_bytes`. [#&#8203;5437](https://redirect.github.com/PyO3/pyo3/pull/5437)\n-
          Implement `AsRef<[u8]>` for `PyBytes`. [#&#8203;5445](https://redirect.github.com/PyO3/pyo3/pull/5445)\n-
          Add `CastError` and `CastIntoError`. [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n-
          Add `PyCapsuleMethods::pointer_checked` and `PyCapsuleMethods::is_valid_checked`.
          [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Add `Borrowed::cast`,
          `Borrowed::cast_exact` and `Borrowed::cast_unchecked`. [#&#8203;5475](https://redirect.github.com/PyO3/pyo3/pull/5475)\n-
          Add conversions for `jiff::civil::ISOWeekDate`. [#&#8203;5478](https://redirect.github.com/PyO3/pyo3/pull/5478)\n-
          Add conversions for `&Cstr`, `Cstring` and `Cow<Cstr>`. [#&#8203;5482](https://redirect.github.com/PyO3/pyo3/pull/5482)\n-
          add `#[pyclass(skip_from_py_object)]` option, to opt-out of the `FromPyObject:
          PyClass + Clone` blanket impl. [#&#8203;5488](https://redirect.github.com/PyO3/pyo3/pull/5488)\n-
          Add `PyErr::add_note`. [#&#8203;5489](https://redirect.github.com/PyO3/pyo3/pull/5489)\n-
          Add `FromPyObject` impl for `Cow<Path>` & `Cow<OsStr>`. [#&#8203;5497](https://redirect.github.com/PyO3/pyo3/pull/5497)\n-
          Add `#[pyclass(from_py_object)]` pyclass option, to opt-in to the extraction
          of pyclasses by value (requires `Clone`). [#&#8203;5506](https://redirect.github.com/PyO3/pyo3/pull/5506)\n\n#####
          Changed\n\n- Rework `FromPyObject` trait for flexibility and performance:
          [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n  - Add
          a second lifetime to `FromPyObject`, to allow borrowing data from Python
          objects (e.g. `&str` from Python `str`).\n  - Replace `extract_bound` with
          `extract`, which takes `Borrowed<'a, 'py, PyAny>`.\n- Optimize `FromPyObject`
          implementations for `Vec<u8>` and `[u8; N]` from `bytes` and `bytearray`.
          [#&#8203;5244](https://redirect.github.com/PyO3/pyo3/pull/5244)\n- Deprecate
          `#[pyfn]` attribute. [#&#8203;5384](https://redirect.github.com/PyO3/pyo3/pull/5384)\n-
          Fetch type name dynamically on cast errors instead of using `PyTypeCheck::NAME`.
          [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n- Deprecate
          `PyTypeCheck::NAME` in favour of `PyTypeCheck::classinfo_object` which provides
          the type information at runtime. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
          `PyClassGuard(Mut)` and `PyRef(Mut)` extraction now returns an opaque Rust
          error [#&#8203;5413](https://redirect.github.com/PyO3/pyo3/pull/5413)\n-
          Fetch type name dynamically when exporting types implementing `PyTypeInfo`
          with `#[pymodule_use]`. [#&#8203;5414](https://redirect.github.com/PyO3/pyo3/pull/5414)\n-
          Improve `Debug` representation of `PyBuffer<T>`. [#&#8203;5442](https://redirect.github.com/PyO3/pyo3/pull/5442)\n-
          `experimental-inspect`: change the way introspection data is emitted in
          the binaries to avoid a pointer indirection and simplify parsing. [#&#8203;5450](https://redirect.github.com/PyO3/pyo3/pull/5450)\n-
          Optimize `Py<T>::drop` for the case when attached to the Python interpreter.
          [#&#8203;5454](https://redirect.github.com/PyO3/pyo3/pull/5454)\n- Replace
          `DowncastError` and `DowncastIntoError` with `CastError` and `CastIntoError`.
          [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n- Enable
          fast-path for 128-bit integer conversions on `GraalPy`. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
          Deprecate `PyAnyMethods::downcast` functions in favour of `Bound::cast`
          functions. [#&#8203;5472](https://redirect.github.com/PyO3/pyo3/pull/5472)\n-
          Make `PyTypeCheck` an `unsafe trait`. [#&#8203;5473](https://redirect.github.com/PyO3/pyo3/pull/5473)\n-
          Deprecate unchecked `PyCapsuleMethods`: `pointer()`, `reference()`, and
          `is_valid()`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
          Reduce lifetime of return value in `PyCapsuleMethods::reference`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
          `PyCapsuleMethods::name` now returns `CapsuleName` wrapper instead of `&CStr`.
          [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Deprecate
          `import_exception_bound` in favour of `import_exception`. [#&#8203;5480](https://redirect.github.com/PyO3/pyo3/pull/5480)\n-
          `PyList::get_item_unchecked`, `PyTuple::get_item_unchecked`, and `PyTuple::get_borrowed_item_unchecked`
          no longer check for null values at the provided index. [#&#8203;5494](https://redirect.github.com/PyO3/pyo3/pull/5494)\n-
          Allow converting naive datetime into chrono `DateTime<Local>`. [#&#8203;5507](https://redirect.github.com/PyO3/pyo3/pull/5507)\n\n#####
          Removed\n\n- Removed `FromPyObjectBound` trait. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n\n#####
          Fixed\n\n- Fix compilation failure on `wasm32-wasip2`. [#&#8203;5368](https://redirect.github.com/PyO3/pyo3/pull/5368)\n-
          Fix `OsStr` conversion for non-utf8 strings on Windows. [#&#8203;5444](https://redirect.github.com/PyO3/pyo3/pull/5444)\n-
          Fix issue with `cargo vendor` caused by gitignored build artifact `emscripten/pybuilddir.txt`.
          [#&#8203;5456](https://redirect.github.com/PyO3/pyo3/pull/5456)\n- Stop
          leaking `PyMethodDef` instances inside `#[pyfunction]` macro generated code.
          [#&#8203;5459](https://redirect.github.com/PyO3/pyo3/pull/5459)\n- Don't
          export definition of FFI struct `PyObjectObFlagsAndRefcnt` on 32-bit Python
          3.14 (doesn't exist). [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
          Fix failure to build for `abi3` interpreters on Windows using maturin's
          built-in sysconfig in combination with the `generate-import-lib` feature.
          [#&#8203;5503](https://redirect.github.com/PyO3/pyo3/pull/5503)\n- Fix FFI
          definitions `PyModule_ExecDef` and `PyModule_FromDefAndSpec2` on PyPy. [#&#8203;5529](https://redirect.github.com/PyO3/pyo3/pull/5529)\n\n</details>\n\n<details>\n<summary>PyO3/pyo3-async-runtimes
          (pyo3-async-runtimes)</summary>\n\n### [`v0.28.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0280---2026-02-03)\n\n[Compare
          Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.27.0...v0.28.0)\n\n-
          Bump to pyo3 0.28. [#&#8203;76](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/76)\n-
          Check for awaitable instead of coroutine in stream glue [#&#8203;73](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/73)\n-
          Bump MSRV to 1.83.\n- Fix handling of full buffer in `into_stream` functions\n\n###
          [`v0.27.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0270---2025-10-20)\n\n[Compare
          Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.26.0...v0.27.0)\n\n-
          Avoid attaching to the runtime when cloning TaskLocals by using std::sync::Arc.
          [#&#8203;62](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/62)\n-
          **Breaking**: Finalize the future without holding GIL inside async-std/tokio
          runtime.\n  Trait `Runtime` now requires `spawn_blocking` function,\n  `future_into_py`
          functions now require future return type to be `Send`.\n  [#&#8203;60](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/60)\n-
          Change pyo3 `downcast` calls to `cast` calls [#&#8203;65](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/65)\n-
          Use `pyo3::intern!` for method calls and `getattr` calls [#&#8203;66](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/66)\n-
          Fix missing LICENSE file in macros crate by [@&#8203;musicinmybrain](https://redirect.github.com/musicinmybrain)
          in [#&#8203;63](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/63)\n-
          Bump to pyo3 0.27. [#&#8203;68](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/68)\n\n</details>\n\n<details>\n<summary>vorner/pyo3-log
          (pyo3-log)</summary>\n\n### [`v0.13.3`](https://redirect.github.com/vorner/pyo3-log/blob/HEAD/CHANGELOG.md#0133)\n\n[Compare
          Source](https://redirect.github.com/vorner/pyo3-log/compare/v0.13.2...v0.13.3)\n\n-
          Support for pyo3 0.28 ([#&#8203;75](https://redirect.github.com/vorner/pyo3-log/issues/75)).\n\n###
          [`v0.13.2`](https://redirect.github.com/vorner/pyo3-log/blob/HEAD/CHANGELOG.md#0132)\n\n[Compare
          Source](https://redirect.github.com/vorner/pyo3-log/compare/v0.13.1...v0.13.2)\n\n-
          Support for pyo3 0.27 ([#&#8203;72](https://redirect.github.com/vorner/pyo3-log/issues/72)).\n\n</details>\n\n<details>\n<summary>davidhewitt/pythonize
          (pythonize)</summary>\n\n### [`v0.28.0`](https://redirect.github.com/davidhewitt/pythonize/blob/HEAD/CHANGELOG.md#0280---2026-02-18)\n\n[Compare
          Source](https://redirect.github.com/davidhewitt/pythonize/compare/v0.27.0...v0.28.0)\n\n-
          Bump MSRV to 1.83.\n- Update `pyo3` to 0.28.\n- Support deserializing `dataclass`
          instances to struct-like Rust types.\n- Add `arbitrary_precision` feature\n\n###
          [`v0.27.0`](https://redirect.github.com/davidhewitt/pythonize/blob/HEAD/CHANGELOG.md#0270---2025-11-07)\n\n[Compare
          Source](https://redirect.github.com/davidhewitt/pythonize/compare/v0.26.0...v0.27.0)\n\n-
          Update to PyO3 0.27\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
          **Schedule**: Branch creation - At any time (no schedule defined), Automerge
          - At any time (no schedule defined).\n\n\U0001F6A6 **Automerge**: Disabled
          by config. Please merge this manually once you are satisfied.\n\n\u267B
          **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry
          checkbox.\n\n\U0001F47B **Immortal**: This PR will be recreated if closed
          unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions)
          if that's undesired.\n\n---\n\n - [ ] <!-- rebase-check -->If you want to
          rebase/retry this PR, check this box\n\n---\n\nThis PR was generated by
          [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/vexxhost/magnum-cluster-api).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIyLjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->\n"
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/837
        commit_id: c627df14f3f325bb901b8e40dbc5a674c5806f9d
        patchset: c627df14f3f325bb901b8e40dbc5a674c5806f9d
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/magnum-cluster-api
          name: vexxhost/magnum-cluster-api
          short_name: magnum-cluster-api
        src_dir: src/github.com/vexxhost/magnum-cluster-api
        topic: null
      buildset: c2a284ad6dbb479a811517099269e48a
      buildset_refs:
      - branch: main
        change: '837'
        change_message: "fix(deps): update pyo3\n\nThis PR contains the following
          updates:\n\n| Package | Type | Update | Change |\n|---|---|---|---|\n| [pyo3](https://redirect.github.com/pyo3/pyo3)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-async-runtimes](https://redirect.github.com/PyO3/pyo3-async-runtimes)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-log](https://redirect.github.com/vorner/pyo3-log)
          | dependencies | patch | `0.13.1` \u2192 `0.13.3` |\n| [pythonize](https://redirect.github.com/davidhewitt/pythonize)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n\n---\n\n### Release
          Notes\n\n<details>\n<summary>pyo3/pyo3 (pyo3)</summary>\n\n### [`v0.28.2`](https://redirect.github.com/PyO3/pyo3/releases/tag/v0.28.2):
          PyO3 0.28.2\n\n[Compare Source](https://redirect.github.com/pyo3/pyo3/compare/v0.28.1...v0.28.2)\n\nThis
          patch release contains a soundness fix for subclassing native types such
          as `PyList` with the `abi3` feature enabled when targeting a minimum version
          of Python 3.12 or higher. (Support for doing such subclassing was newly
          added in PyO3 0.28.0.)\n\nPyO3 0.28.0 and 0.28.1 will be yanked.\n\nThis
          release also contains a correction to the FFI definition `PyType_GetTypeDataSize`
          and incorrectly-generated `__qualname__` on `#[pyclass]` enum variant types
          when using `#[pyo3(name = \"...\")]` option to rename the enum and/or variant.\n\nThank
          you to the following contributors for the improvements:\n\n[@&#8203;davidhewitt](https://redirect.github.com/davidhewitt)\n[@&#8203;Icxolu](https://redirect.github.com/Icxolu)\n[@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum)\n\n###
          [`v0.28.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0281---2026-02-14)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.28.0...v0.28.1)\n\n#####
          Fixed\n\n- Fix `*args` / `**kwargs` support in` experimental-async` feature
          (regressed in 0.28.0). [#&#8203;5771](https://redirect.github.com/PyO3/pyo3/pull/5771)\n-
          Fix `clippy::declare_interior_mutable_const` warning inside `#[pyclass]`
          generated code on enums. [#&#8203;5772](https://redirect.github.com/PyO3/pyo3/pull/5772)\n-
          Fix `ambiguous_associated_items` compilation error when deriving `FromPyObject`
          or using `#[pyclass(from_py_object)]` macro on enums with `Error` variant.
          [#&#8203;5784](https://redirect.github.com/PyO3/pyo3/pull/5784)\n- Fix `__qualname__`
          for complex `#[pyclass]` enum variants to include the enum name. [#&#8203;5796](https://redirect.github.com/PyO3/pyo3/pull/5796)\n\n###
          [`v0.28.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0280---2026-02-01)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.2...v0.28.0)\n\n#####
          Packaging\n\n- Bump MSRV to Rust 1.83. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
          Bump minimum supported `quote` version to 1.0.37. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
          Bump supported GraalPy version to 25.0. [#&#8203;5542](https://redirect.github.com/PyO3/pyo3/pull/5542)\n-
          Drop `memoffset` dependency. [#&#8203;5545](https://redirect.github.com/PyO3/pyo3/pull/5545)\n-
          Support for free-threaded Python is now opt-out rather than opt-in. [#&#8203;5564](https://redirect.github.com/PyO3/pyo3/pull/5564)\n-
          Bump `target-lexicon` dependency to 0.13.3. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
          Drop `indoc` and `unindent` dependencies. [#&#8203;5608](https://redirect.github.com/PyO3/pyo3/pull/5608)\n\n#####
          Added\n\n- Add `__init__` support in `#[pymethods]`. [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
          Expose `PySuper` on PyPy, GraalPy and ABI3 [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
          Add `PyString::from_fmt` and `py_format!` macro. [#&#8203;5199](https://redirect.github.com/PyO3/pyo3/pull/5199)\n-
          Add `#[pyclass(new = \"from_fields\")]` option. [#&#8203;5421](https://redirect.github.com/PyO3/pyo3/pull/5421)\n-
          Add `pyo3::buffer::PyUntypedBuffer`, a type-erased form of `PyBuffer<T>`.
          [#&#8203;5458](https://redirect.github.com/PyO3/pyo3/pull/5458)\n- Add `PyBytes::new_with_writer`
          [#&#8203;5517](https://redirect.github.com/PyO3/pyo3/pull/5517)\n- Add `PyClass::NAME`.
          [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n- Add `pyo3_build_config::add_libpython_rpath_link_args`.
          [#&#8203;5624](https://redirect.github.com/PyO3/pyo3/pull/5624)\n- Add `PyBackedStr::clone_ref`
          and `PyBackedBytes::clone_ref` methods. [#&#8203;5654](https://redirect.github.com/PyO3/pyo3/pull/5654)\n-
          Add `PyCapsule::new_with_pointer` and `PyCapsule::new_with_pointer_and_destructor`
          for creating capsules with raw pointers. [#&#8203;5689](https://redirect.github.com/PyO3/pyo3/pull/5689)\n-
          Add `#[deleter]` attribute to implement property deleters in `#[methods]`.
          [#&#8203;5699](https://redirect.github.com/PyO3/pyo3/pull/5699)\n- Add `IntoPyObject`
          and `FromPyObject` implementations for `uuid::NonNilUuid`. [#&#8203;5707](https://redirect.github.com/PyO3/pyo3/pull/5707)\n-
          Add `PyBackedStr::as_str` and `PyBackedStr::as_py_str` methods. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
          Add support for subclassing native types (`PyDict`, exceptions, ...) when
          building for abi3 on Python 3.12+. [#&#8203;5733](https://redirect.github.com/PyO3/pyo3/pull/5733)\n-
          Add support for subclassing `PyList` when building for Python 3.12+. [#&#8203;5734](https://redirect.github.com/PyO3/pyo3/pull/5734)\n-
          FFI definitions:\n  - Add FFI definitions `PyEval_GetFrameBuiltins`, `PyEval_GetFrameGlobals`
          and `PyEval_GetFrameLocals` on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Add FFI definitions `PyObject_New`, `PyObject_NewVar`, `PyObject_GC_Resize`,
          `PyObject_GC_New`, and `PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
          \ - Added FFI definitions and an unsafe Rust API wrapping `Py_BEGIN_CRITICAL_SECTION_MUTEX`
          and `Py_BEGIN_CRITICAL_SECTION_MUTEX2`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n
          \ - Add FFI definition `PyDict_GetItemStringRef` on Python 3.13 and up.
          [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Add
          FFI definition `PyIter_NextItem` on Python 3.14 and up, and `compat::PyIter_NextItem`
          for older versions. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n
          \ - Add FFI definitions `PyThreadState_GetInterpreter` and `PyThreadState_GetID`
          on Python 3.9+, `PyThreadState_EnterTracing` and `PyThreadState_LeaveTracing`
          on Python 3.11+, `PyThreadState_GetUnchecked` on Python 3.13+, and `compat::PyThreadState_GetUnchecked`.
          [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n  - Add
          FFI definitions `PyImport_ImportModuleAttr` and `PyImport_ImportModuleAttrString`
          on Python 3.14+. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n
          \ - Add FFI definitions for the `PyABIInfo` and `PyModExport` APIs available
          in Python 3.15. [#&#8203;5746](https://redirect.github.com/PyO3/pyo3/pull/5746)\n-
          `experimental-inspect`:\n  - Emit base classes. [#&#8203;5331](https://redirect.github.com/PyO3/pyo3/pull/5331)\n
          \ - Emit `@typing.final` on final classes. [#&#8203;5552](https://redirect.github.com/PyO3/pyo3/pull/5552)\n
          \ - Generate nested classes for complex enums. [#&#8203;5708](https://redirect.github.com/PyO3/pyo3/pull/5708)\n
          \ - Emit `async` keyword for async functions. [#&#8203;5731](https://redirect.github.com/PyO3/pyo3/pull/5731)\n\n#####
          Changed\n\n- Call `sys.unraisablehook` instead of `PyErr_Print` if panicking
          on null FFI pointer in `Bound`, `Borrowed` and `Py` constructors. [#&#8203;5496](https://redirect.github.com/PyO3/pyo3/pull/5496)\n-
          Use PEP-489 multi-phase initialization for `#[pymodule]`. [#&#8203;5525](https://redirect.github.com/PyO3/pyo3/pull/5525)\n-
          Deprecate implicit by-value implementation of `FromPyObject` for `#[pyclass]`.
          [#&#8203;5550](https://redirect.github.com/PyO3/pyo3/pull/5550)\n- Deprecate
          `PyTypeInfo::NAME` and `PyTypeInfo::MODULE`. [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n-
          Deprecate `Py<T>::from_{owned,borrowed}[or_{err,opt}]` constructors from
          raw pointer. [#&#8203;5585](https://redirect.github.com/PyO3/pyo3/pull/5585)\n-
          Deprecate FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`.
          [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n- Relax
          `'py: 'a` bound in `Py::extract`. [#&#8203;5594](https://redirect.github.com/PyO3/pyo3/pull/5594)\n-
          Add a `T: PyTypeCheck` bound to the `IntoPyObject` implementations on `Bound<T>`,
          `Borrowed<T>` and `Py<T>`. [#&#8203;5640](https://redirect.github.com/PyO3/pyo3/pull/5640)\n-
          The `with_critical_section` and `with_critical_section2` functions are moved
          to `pyo3::sync::critical_section`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n-
          Use `PyIter_NextItem` in `PyIterator::next` implementation. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n-
          `IntoPyObject` for simple enums now uses a singleton value, allowing identity
          (python `is`) comparisons. [#&#8203;5665](https://redirect.github.com/PyO3/pyo3/pull/5665)\n-
          Allow any `Sequence[int]` in `FromPyObject` on `Cow<[u8]>` and change the
          error type to `PyErr`. [#&#8203;5667](https://redirect.github.com/PyO3/pyo3/pull/5667)\n-
          `async` pymethods now borrow `self` only for the duration of awaiting the
          future, not the entire method call. [#&#8203;5684](https://redirect.github.com/PyO3/pyo3/pull/5684)\n-
          Change `CastError` formatted message to directly describe the \"is not an
          instance of\" failure condition. [#&#8203;5693](https://redirect.github.com/PyO3/pyo3/pull/5693)\n-
          Add `#[inline]` hints to many methods on `PyBackedStr`. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
          Remove redundant internal counters from `BoundSetIterator` and `BoundFrozenSetIterator`.
          [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n- Implement
          `PyIterator::size_hint` on abi3 builds (previously was only on unlimited
          API builds). [#&#8203;5727](https://redirect.github.com/PyO3/pyo3/pull/5727)\n-
          Deprecate FFI definition `PyImport_ImportModuleNoBlock` (deprecated in Python
          3.13). [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
          `#[new]` can now return arbitrary Python objects. [#&#8203;5739](https://redirect.github.com/PyO3/pyo3/pull/5739)\n-
          `experimental-inspect`:\n  - Introduce `TypeHint` and make use of it to
          encode type hint annotations. [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438)\n
          \ - Rename `PyType{Info,Check}::TYPE_INFO` into `PyType{Info,Check}::TYPE_HINT`.
          [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438) [#&#8203;5619](https://redirect.github.com/PyO3/pyo3/pull/5619)
          [#&#8203;5641](https://redirect.github.com/PyO3/pyo3/pull/5641)\n  - Fill
          annotations on function arguments and return values for all types supported
          natively by PyO3. [#&#8203;5634](https://redirect.github.com/PyO3/pyo3/pull/5634)
          [#&#8203;5637](https://redirect.github.com/PyO3/pyo3/pull/5637) [#&#8203;5639](https://redirect.github.com/PyO3/pyo3/pull/5639)\n
          \ - Use `_typeshed.Incomplete` instead of `typing.Any` as default type hint,
          to make it easier to spot incomplete trait implementations. [#&#8203;5744](https://redirect.github.com/PyO3/pyo3/pull/5744)\n
          \ - Use general Python expression syntax for type hints. [#&#8203;5671](https://redirect.github.com/PyO3/pyo3/pull/5671)\n\n#####
          Removed\n\n- Remove all functionality deprecated in PyO3 0.25 and 0.26.
          [#&#8203;5740](https://redirect.github.com/PyO3/pyo3/pull/5740)\n- FFI definitions:\n
          \ - Remove FFI definition `PyEval_GetCallStats` (removed from CPython in
          Python 3.7). [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Remove FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`
          on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Remove private FFI definitions `_PyObject_New`, `_PyObject_NewVar`,
          `_PyObject_GC_Resize`, `_PyObject_GC_New`, and `_PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
          \ - Remove private FFI definitions `_PyDict_SetItem_KnownHash`, `_PyDict_Next`,
          `_PyDict_NewPresized`, `_PyDict_Contains_KnownHash`, and `_PyDict_Contains`.
          [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Remove
          private FFI definitions `_PyFrameEvalFunction`, `_PyInterpreterState_GetEvalFrameFunc`
          and `_PyInterpreterState_SetEvalFrameFunc`. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
          \ - Remove private FFI definitions `_PyImport_IsInitialized`, `_PyImport_SetModule`,
          `_PyImport_SetModuleString`, `_PyImport_AcquireLock`, `_PyImport_ReleaseLock`,
          `_PyImport_FindBuiltin`, `_PyImport_FindExtensionObject`, `_PyImport_FixupBuiltin`,
          and `_PyImport_FixupExtensionObject`. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n\n#####
          Fixed\n\n- Fix `PyModuleMethods::add_submodule()` to use the last segment
          of the submodule name as the attribute name on the parent module instead
          of using the full name. [#&#8203;5375](https://redirect.github.com/PyO3/pyo3/pull/5375)\n-
          Link with libpython for Cygwin extension modules. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
          Link against the limited API DLL for Cygwin when abi3 is used. [#&#8203;5574](https://redirect.github.com/PyO3/pyo3/pull/5574)\n-
          Handle errors in `PyIterator` when calling `size_hint` [#&#8203;5604](https://redirect.github.com/PyO3/pyo3/pull/5604)\n-
          Link with libpython for iOS extension modules. [#&#8203;5605](https://redirect.github.com/PyO3/pyo3/pull/5605)\n-
          Correct `IntoPyObject` output type of `PyBackedStr` to be `PyString`, not
          `PyAny`. [#&#8203;5655](https://redirect.github.com/PyO3/pyo3/pull/5655)\n-
          Fix `async` functions to return `None` rather than empty tuple `()`. [#&#8203;5685](https://redirect.github.com/PyO3/pyo3/pull/5685)\n-
          Fix compile error when using references to `#[pyclass]` types (e.g. `&MyClass`)
          as arguments to async `#[pyfunction]`s. [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n-
          FFI definitions:\n  - Fix FFI definition `PyMemberDescrObject.d_member`
          to use `PyMemberDef` for Python 3.11+ (was incorrectly `PyGetSetDef`). [#&#8203;5647](https://redirect.github.com/PyO3/pyo3/pull/5647)\n
          \ - Mark FFI definition `PyThreadState_GetFrame` available with abi3 in
          3.10+. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
          \ - Fix FFI definition `PyImport_GetModule` on PyPy. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
          `experimental-inspect`:\n  - fix `__new__` return type to be the built object
          type and not `None`. [#&#8203;5555](https://redirect.github.com/PyO3/pyo3/pull/5555)\n
          \ - fix imports of decorators. [#&#8203;5618](https://redirect.github.com/PyO3/pyo3/pull/5618)\n
          \ - fix the return type annotation of `PyResult<()>` (must be `None` and
          not `tuple`) [#&#8203;5674](https://redirect.github.com/PyO3/pyo3/pull/5674)\n\n###
          [`v0.27.2`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0272---2025-11-30)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.1...v0.27.2)\n\n#####
          Changed\n\n- Disable subclassing `PyDict` on GraalPy (unsupported for now,
          may crash at runtime). [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n#####
          Fixed\n\n- Fix crash when compiling on Rust 1.92+ with both debug assertions
          and optimizations enabled. [#&#8203;5638](https://redirect.github.com/PyO3/pyo3/pull/5638)\n-
          Fix FFI definition of `PyDictObject` on PyPy. [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n###
          [`v0.27.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0271---2025-10-21)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.0...v0.27.1)\n\n#####
          Fixed\n\n- Fix `clippy:declare_interior_mutable_const` warning from `#[pyfunction]`.
          [#&#8203;5538](https://redirect.github.com/PyO3/pyo3/pull/5538)\n- Expose
          `pyo3::types::PySendResult` in public API. [#&#8203;5539](https://redirect.github.com/PyO3/pyo3/pull/5539)\n\n###
          [`v0.27.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0270---2025-10-19)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.26.0...v0.27.0)\n\n#####
          Packaging\n\n- Extend range of supported versions of `hashbrown` optional
          dependency to include version 0.16. [#&#8203;5428](https://redirect.github.com/PyO3/pyo3/pull/5428)\n-
          Bump optional `num-bigint` dependency minimum version to 0.4.4. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
          Test against Python 3.14 final release. [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
          Drop support for PyPy 3.9 and 3.10. [#&#8203;5516](https://redirect.github.com/PyO3/pyo3/pull/5516)\n-
          Provide a better error message when building an outdated PyO3 for a too-new
          Python version. [#&#8203;5519](https://redirect.github.com/PyO3/pyo3/pull/5519)\n\n#####
          Added\n\n- Add `FromPyObjectOwned` as convenient trait bound for `FromPyObject`
          when the data is not borrowed from Python. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
          Add `Borrowed::extract`, same as `PyAnyMethods::extract`, but does not restrict
          the lifetime by deref. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
          `experimental-inspect`: basic support for `#[derive(IntoPyObject)]` (no
          struct fields support yet). [#&#8203;5365](https://redirect.github.com/PyO3/pyo3/pull/5365)\n-
          `experimental-inspect`: support `#[pyo3(get, set)]` and `#[pyclass(get_all,
          set_all)]`. [#&#8203;5370](https://redirect.github.com/PyO3/pyo3/pull/5370)\n-
          Add `PyTypeCheck::classinfo_object` that returns an object that can be used
          as parameter in `isinstance` or `issubclass`. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
          Implement `PyTypeInfo` on `datetime.*` types even when the limited API is
          enabled. [#&#8203;5388](https://redirect.github.com/PyO3/pyo3/pull/5388)\n-
          Implement `PyTypeInfo` on `PyIterator`, `PyMapping` and `PySequence`. [#&#8203;5402](https://redirect.github.com/PyO3/pyo3/pull/5402)\n-
          Implement `PyTypeInfo` on `PyCode` when using the stable ABI. [#&#8203;5403](https://redirect.github.com/PyO3/pyo3/pull/5403)\n-
          Implement `PyTypeInfo` on `PyWeakrefReference` when using the stable ABI.
          [#&#8203;5404](https://redirect.github.com/PyO3/pyo3/pull/5404)\n- Add `pyo3::sync::RwLockExt`
          trait, analogous to `pyo3::sync::MutexExt` for readwrite locks. [#&#8203;5435](https://redirect.github.com/PyO3/pyo3/pull/5435)\n-
          Add `PyString::from_bytes`. [#&#8203;5437](https://redirect.github.com/PyO3/pyo3/pull/5437)\n-
          Implement `AsRef<[u8]>` for `PyBytes`. [#&#8203;5445](https://redirect.github.com/PyO3/pyo3/pull/5445)\n-
          Add `CastError` and `CastIntoError`. [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n-
          Add `PyCapsuleMethods::pointer_checked` and `PyCapsuleMethods::is_valid_checked`.
          [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Add `Borrowed::cast`,
          `Borrowed::cast_exact` and `Borrowed::cast_unchecked`. [#&#8203;5475](https://redirect.github.com/PyO3/pyo3/pull/5475)\n-
          Add conversions for `jiff::civil::ISOWeekDate`. [#&#8203;5478](https://redirect.github.com/PyO3/pyo3/pull/5478)\n-
          Add conversions for `&Cstr`, `Cstring` and `Cow<Cstr>`. [#&#8203;5482](https://redirect.github.com/PyO3/pyo3/pull/5482)\n-
          add `#[pyclass(skip_from_py_object)]` option, to opt-out of the `FromPyObject:
          PyClass + Clone` blanket impl. [#&#8203;5488](https://redirect.github.com/PyO3/pyo3/pull/5488)\n-
          Add `PyErr::add_note`. [#&#8203;5489](https://redirect.github.com/PyO3/pyo3/pull/5489)\n-
          Add `FromPyObject` impl for `Cow<Path>` & `Cow<OsStr>`. [#&#8203;5497](https://redirect.github.com/PyO3/pyo3/pull/5497)\n-
          Add `#[pyclass(from_py_object)]` pyclass option, to opt-in to the extraction
          of pyclasses by value (requires `Clone`). [#&#8203;5506](https://redirect.github.com/PyO3/pyo3/pull/5506)\n\n#####
          Changed\n\n- Rework `FromPyObject` trait for flexibility and performance:
          [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n  - Add
          a second lifetime to `FromPyObject`, to allow borrowing data from Python
          objects (e.g. `&str` from Python `str`).\n  - Replace `extract_bound` with
          `extract`, which takes `Borrowed<'a, 'py, PyAny>`.\n- Optimize `FromPyObject`
          implementations for `Vec<u8>` and `[u8; N]` from `bytes` and `bytearray`.
          [#&#8203;5244](https://redirect.github.com/PyO3/pyo3/pull/5244)\n- Deprecate
          `#[pyfn]` attribute. [#&#8203;5384](https://redirect.github.com/PyO3/pyo3/pull/5384)\n-
          Fetch type name dynamically on cast errors instead of using `PyTypeCheck::NAME`.
          [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n- Deprecate
          `PyTypeCheck::NAME` in favour of `PyTypeCheck::classinfo_object` which provides
          the type information at runtime. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
          `PyClassGuard(Mut)` and `PyRef(Mut)` extraction now returns an opaque Rust
          error [#&#8203;5413](https://redirect.github.com/PyO3/pyo3/pull/5413)\n-
          Fetch type name dynamically when exporting types implementing `PyTypeInfo`
          with `#[pymodule_use]`. [#&#8203;5414](https://redirect.github.com/PyO3/pyo3/pull/5414)\n-
          Improve `Debug` representation of `PyBuffer<T>`. [#&#8203;5442](https://redirect.github.com/PyO3/pyo3/pull/5442)\n-
          `experimental-inspect`: change the way introspection data is emitted in
          the binaries to avoid a pointer indirection and simplify parsing. [#&#8203;5450](https://redirect.github.com/PyO3/pyo3/pull/5450)\n-
          Optimize `Py<T>::drop` for the case when attached to the Python interpreter.
          [#&#8203;5454](https://redirect.github.com/PyO3/pyo3/pull/5454)\n- Replace
          `DowncastError` and `DowncastIntoError` with `CastError` and `CastIntoError`.
          [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n- Enable
          fast-path for 128-bit integer conversions on `GraalPy`. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
          Deprecate `PyAnyMethods::downcast` functions in favour of `Bound::cast`
          functions. [#&#8203;5472](https://redirect.github.com/PyO3/pyo3/pull/5472)\n-
          Make `PyTypeCheck` an `unsafe trait`. [#&#8203;5473](https://redirect.github.com/PyO3/pyo3/pull/5473)\n-
          Deprecate unchecked `PyCapsuleMethods`: `pointer()`, `reference()`, and
          `is_valid()`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
          Reduce lifetime of return value in `PyCapsuleMethods::reference`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
          `PyCapsuleMethods::name` now returns `CapsuleName` wrapper instead of `&CStr`.
          [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Deprecate
          `import_exception_bound` in favour of `import_exception`. [#&#8203;5480](https://redirect.github.com/PyO3/pyo3/pull/5480)\n-
          `PyList::get_item_unchecked`, `PyTuple::get_item_unchecked`, and `PyTuple::get_borrowed_item_unchecked`
          no longer check for null values at the provided index. [#&#8203;5494](https://redirect.github.com/PyO3/pyo3/pull/5494)\n-
          Allow converting naive datetime into chrono `DateTime<Local>`. [#&#8203;5507](https://redirect.github.com/PyO3/pyo3/pull/5507)\n\n#####
          Removed\n\n- Removed `FromPyObjectBound` trait. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n\n#####
          Fixed\n\n- Fix compilation failure on `wasm32-wasip2`. [#&#8203;5368](https://redirect.github.com/PyO3/pyo3/pull/5368)\n-
          Fix `OsStr` conversion for non-utf8 strings on Windows. [#&#8203;5444](https://redirect.github.com/PyO3/pyo3/pull/5444)\n-
          Fix issue with `cargo vendor` caused by gitignored build artifact `emscripten/pybuilddir.txt`.
          [#&#8203;5456](https://redirect.github.com/PyO3/pyo3/pull/5456)\n- Stop
          leaking `PyMethodDef` instances inside `#[pyfunction]` macro generated code.
          [#&#8203;5459](https://redirect.github.com/PyO3/pyo3/pull/5459)\n- Don't
          export definition of FFI struct `PyObjectObFlagsAndRefcnt` on 32-bit Python
          3.14 (doesn't exist). [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
          Fix failure to build for `abi3` interpreters on Windows using maturin's
          built-in sysconfig in combination with the `generate-import-lib` feature.
          [#&#8203;5503](https://redirect.github.com/PyO3/pyo3/pull/5503)\n- Fix FFI
          definitions `PyModule_ExecDef` and `PyModule_FromDefAndSpec2` on PyPy. [#&#8203;5529](https://redirect.github.com/PyO3/pyo3/pull/5529)\n\n</details>\n\n<details>\n<summary>PyO3/pyo3-async-runtimes
          (pyo3-async-runtimes)</summary>\n\n### [`v0.28.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0280---2026-02-03)\n\n[Compare
          Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.27.0...v0.28.0)\n\n-
          Bump to pyo3 0.28. [#&#8203;76](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/76)\n-
          Check for awaitable instead of coroutine in stream glue [#&#8203;73](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/73)\n-
          Bump MSRV to 1.83.\n- Fix handling of full buffer in `into_stream` functions\n\n###
          [`v0.27.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0270---2025-10-20)\n\n[Compare
          Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.26.0...v0.27.0)\n\n-
          Avoid attaching to the runtime when cloning TaskLocals by using std::sync::Arc.
          [#&#8203;62](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/62)\n-
          **Breaking**: Finalize the future without holding GIL inside async-std/tokio
          runtime.\n  Trait `Runtime` now requires `spawn_blocking` function,\n  `future_into_py`
          functions now require future return type to be `Send`.\n  [#&#8203;60](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/60)\n-
          Change pyo3 `downcast` calls to `cast` calls [#&#8203;65](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/65)\n-
          Use `pyo3::intern!` for method calls and `getattr` calls [#&#8203;66](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/66)\n-
          Fix missing LICENSE file in macros crate by [@&#8203;musicinmybrain](https://redirect.github.com/musicinmybrain)
          in [#&#8203;63](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/63)\n-
          Bump to pyo3 0.27. [#&#8203;68](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/68)\n\n</details>\n\n<details>\n<summary>vorner/pyo3-log
          (pyo3-log)</summary>\n\n### [`v0.13.3`](https://redirect.github.com/vorner/pyo3-log/blob/HEAD/CHANGELOG.md#0133)\n\n[Compare
          Source](https://redirect.github.com/vorner/pyo3-log/compare/v0.13.2...v0.13.3)\n\n-
          Support for pyo3 0.28 ([#&#8203;75](https://redirect.github.com/vorner/pyo3-log/issues/75)).\n\n###
          [`v0.13.2`](https://redirect.github.com/vorner/pyo3-log/blob/HEAD/CHANGELOG.md#0132)\n\n[Compare
          Source](https://redirect.github.com/vorner/pyo3-log/compare/v0.13.1...v0.13.2)\n\n-
          Support for pyo3 0.27 ([#&#8203;72](https://redirect.github.com/vorner/pyo3-log/issues/72)).\n\n</details>\n\n<details>\n<summary>davidhewitt/pythonize
          (pythonize)</summary>\n\n### [`v0.28.0`](https://redirect.github.com/davidhewitt/pythonize/blob/HEAD/CHANGELOG.md#0280---2026-02-18)\n\n[Compare
          Source](https://redirect.github.com/davidhewitt/pythonize/compare/v0.27.0...v0.28.0)\n\n-
          Bump MSRV to 1.83.\n- Update `pyo3` to 0.28.\n- Support deserializing `dataclass`
          instances to struct-like Rust types.\n- Add `arbitrary_precision` feature\n\n###
          [`v0.27.0`](https://redirect.github.com/davidhewitt/pythonize/blob/HEAD/CHANGELOG.md#0270---2025-11-07)\n\n[Compare
          Source](https://redirect.github.com/davidhewitt/pythonize/compare/v0.26.0...v0.27.0)\n\n-
          Update to PyO3 0.27\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
          **Schedule**: Branch creation - At any time (no schedule defined), Automerge
          - At any time (no schedule defined).\n\n\U0001F6A6 **Automerge**: Disabled
          by config. Please merge this manually once you are satisfied.\n\n\u267B
          **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry
          checkbox.\n\n\U0001F47B **Immortal**: This PR will be recreated if closed
          unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions)
          if that's undesired.\n\n---\n\n - [ ] <!-- rebase-check -->If you want to
          rebase/retry this PR, check this box\n\n---\n\nThis PR was generated by
          [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/vexxhost/magnum-cluster-api).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIyLjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->\n"
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/837
        commit_id: c627df14f3f325bb901b8e40dbc5a674c5806f9d
        patchset: c627df14f3f325bb901b8e40dbc5a674c5806f9d
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/magnum-cluster-api
          name: vexxhost/magnum-cluster-api
          short_name: magnum-cluster-api
        src_dir: src/github.com/vexxhost/magnum-cluster-api
        topic: null
      change: '837'
      change_message: "fix(deps): update pyo3\n\nThis PR contains the following updates:\n\n|
        Package | Type | Update | Change |\n|---|---|---|---|\n| [pyo3](https://redirect.github.com/pyo3/pyo3)
        | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-async-runtimes](https://redirect.github.com/PyO3/pyo3-async-runtimes)
        | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-log](https://redirect.github.com/vorner/pyo3-log)
        | dependencies | patch | `0.13.1` \u2192 `0.13.3` |\n| [pythonize](https://redirect.github.com/davidhewitt/pythonize)
        | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n\n---\n\n### Release
        Notes\n\n<details>\n<summary>pyo3/pyo3 (pyo3)</summary>\n\n### [`v0.28.2`](https://redirect.github.com/PyO3/pyo3/releases/tag/v0.28.2):
        PyO3 0.28.2\n\n[Compare Source](https://redirect.github.com/pyo3/pyo3/compare/v0.28.1...v0.28.2)\n\nThis
        patch release contains a soundness fix for subclassing native types such as
        `PyList` with the `abi3` feature enabled when targeting a minimum version
        of Python 3.12 or higher. (Support for doing such subclassing was newly added
        in PyO3 0.28.0.)\n\nPyO3 0.28.0 and 0.28.1 will be yanked.\n\nThis release
        also contains a correction to the FFI definition `PyType_GetTypeDataSize`
        and incorrectly-generated `__qualname__` on `#[pyclass]` enum variant types
        when using `#[pyo3(name = \"...\")]` option to rename the enum and/or variant.\n\nThank
        you to the following contributors for the improvements:\n\n[@&#8203;davidhewitt](https://redirect.github.com/davidhewitt)\n[@&#8203;Icxolu](https://redirect.github.com/Icxolu)\n[@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum)\n\n###
        [`v0.28.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0281---2026-02-14)\n\n[Compare
        Source](https://redirect.github.com/pyo3/pyo3/compare/v0.28.0...v0.28.1)\n\n#####
        Fixed\n\n- Fix `*args` / `**kwargs` support in` experimental-async` feature
        (regressed in 0.28.0). [#&#8203;5771](https://redirect.github.com/PyO3/pyo3/pull/5771)\n-
        Fix `clippy::declare_interior_mutable_const` warning inside `#[pyclass]` generated
        code on enums. [#&#8203;5772](https://redirect.github.com/PyO3/pyo3/pull/5772)\n-
        Fix `ambiguous_associated_items` compilation error when deriving `FromPyObject`
        or using `#[pyclass(from_py_object)]` macro on enums with `Error` variant.
        [#&#8203;5784](https://redirect.github.com/PyO3/pyo3/pull/5784)\n- Fix `__qualname__`
        for complex `#[pyclass]` enum variants to include the enum name. [#&#8203;5796](https://redirect.github.com/PyO3/pyo3/pull/5796)\n\n###
        [`v0.28.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0280---2026-02-01)\n\n[Compare
        Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.2...v0.28.0)\n\n#####
        Packaging\n\n- Bump MSRV to Rust 1.83. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
        Bump minimum supported `quote` version to 1.0.37. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
        Bump supported GraalPy version to 25.0. [#&#8203;5542](https://redirect.github.com/PyO3/pyo3/pull/5542)\n-
        Drop `memoffset` dependency. [#&#8203;5545](https://redirect.github.com/PyO3/pyo3/pull/5545)\n-
        Support for free-threaded Python is now opt-out rather than opt-in. [#&#8203;5564](https://redirect.github.com/PyO3/pyo3/pull/5564)\n-
        Bump `target-lexicon` dependency to 0.13.3. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
        Drop `indoc` and `unindent` dependencies. [#&#8203;5608](https://redirect.github.com/PyO3/pyo3/pull/5608)\n\n#####
        Added\n\n- Add `__init__` support in `#[pymethods]`. [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
        Expose `PySuper` on PyPy, GraalPy and ABI3 [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
        Add `PyString::from_fmt` and `py_format!` macro. [#&#8203;5199](https://redirect.github.com/PyO3/pyo3/pull/5199)\n-
        Add `#[pyclass(new = \"from_fields\")]` option. [#&#8203;5421](https://redirect.github.com/PyO3/pyo3/pull/5421)\n-
        Add `pyo3::buffer::PyUntypedBuffer`, a type-erased form of `PyBuffer<T>`.
        [#&#8203;5458](https://redirect.github.com/PyO3/pyo3/pull/5458)\n- Add `PyBytes::new_with_writer`
        [#&#8203;5517](https://redirect.github.com/PyO3/pyo3/pull/5517)\n- Add `PyClass::NAME`.
        [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n- Add `pyo3_build_config::add_libpython_rpath_link_args`.
        [#&#8203;5624](https://redirect.github.com/PyO3/pyo3/pull/5624)\n- Add `PyBackedStr::clone_ref`
        and `PyBackedBytes::clone_ref` methods. [#&#8203;5654](https://redirect.github.com/PyO3/pyo3/pull/5654)\n-
        Add `PyCapsule::new_with_pointer` and `PyCapsule::new_with_pointer_and_destructor`
        for creating capsules with raw pointers. [#&#8203;5689](https://redirect.github.com/PyO3/pyo3/pull/5689)\n-
        Add `#[deleter]` attribute to implement property deleters in `#[methods]`.
        [#&#8203;5699](https://redirect.github.com/PyO3/pyo3/pull/5699)\n- Add `IntoPyObject`
        and `FromPyObject` implementations for `uuid::NonNilUuid`. [#&#8203;5707](https://redirect.github.com/PyO3/pyo3/pull/5707)\n-
        Add `PyBackedStr::as_str` and `PyBackedStr::as_py_str` methods. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
        Add support for subclassing native types (`PyDict`, exceptions, ...) when
        building for abi3 on Python 3.12+. [#&#8203;5733](https://redirect.github.com/PyO3/pyo3/pull/5733)\n-
        Add support for subclassing `PyList` when building for Python 3.12+. [#&#8203;5734](https://redirect.github.com/PyO3/pyo3/pull/5734)\n-
        FFI definitions:\n  - Add FFI definitions `PyEval_GetFrameBuiltins`, `PyEval_GetFrameGlobals`
        and `PyEval_GetFrameLocals` on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
        \ - Add FFI definitions `PyObject_New`, `PyObject_NewVar`, `PyObject_GC_Resize`,
        `PyObject_GC_New`, and `PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
        \ - Added FFI definitions and an unsafe Rust API wrapping `Py_BEGIN_CRITICAL_SECTION_MUTEX`
        and `Py_BEGIN_CRITICAL_SECTION_MUTEX2`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n
        \ - Add FFI definition `PyDict_GetItemStringRef` on Python 3.13 and up. [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n
        \ - Add FFI definition `PyIter_NextItem` on Python 3.14 and up, and `compat::PyIter_NextItem`
        for older versions. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n
        \ - Add FFI definitions `PyThreadState_GetInterpreter` and `PyThreadState_GetID`
        on Python 3.9+, `PyThreadState_EnterTracing` and `PyThreadState_LeaveTracing`
        on Python 3.11+, `PyThreadState_GetUnchecked` on Python 3.13+, and `compat::PyThreadState_GetUnchecked`.
        [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n  - Add FFI
        definitions `PyImport_ImportModuleAttr` and `PyImport_ImportModuleAttrString`
        on Python 3.14+. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n
        \ - Add FFI definitions for the `PyABIInfo` and `PyModExport` APIs available
        in Python 3.15. [#&#8203;5746](https://redirect.github.com/PyO3/pyo3/pull/5746)\n-
        `experimental-inspect`:\n  - Emit base classes. [#&#8203;5331](https://redirect.github.com/PyO3/pyo3/pull/5331)\n
        \ - Emit `@typing.final` on final classes. [#&#8203;5552](https://redirect.github.com/PyO3/pyo3/pull/5552)\n
        \ - Generate nested classes for complex enums. [#&#8203;5708](https://redirect.github.com/PyO3/pyo3/pull/5708)\n
        \ - Emit `async` keyword for async functions. [#&#8203;5731](https://redirect.github.com/PyO3/pyo3/pull/5731)\n\n#####
        Changed\n\n- Call `sys.unraisablehook` instead of `PyErr_Print` if panicking
        on null FFI pointer in `Bound`, `Borrowed` and `Py` constructors. [#&#8203;5496](https://redirect.github.com/PyO3/pyo3/pull/5496)\n-
        Use PEP-489 multi-phase initialization for `#[pymodule]`. [#&#8203;5525](https://redirect.github.com/PyO3/pyo3/pull/5525)\n-
        Deprecate implicit by-value implementation of `FromPyObject` for `#[pyclass]`.
        [#&#8203;5550](https://redirect.github.com/PyO3/pyo3/pull/5550)\n- Deprecate
        `PyTypeInfo::NAME` and `PyTypeInfo::MODULE`. [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n-
        Deprecate `Py<T>::from_{owned,borrowed}[or_{err,opt}]` constructors from raw
        pointer. [#&#8203;5585](https://redirect.github.com/PyO3/pyo3/pull/5585)\n-
        Deprecate FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n-
        Relax `'py: 'a` bound in `Py::extract`. [#&#8203;5594](https://redirect.github.com/PyO3/pyo3/pull/5594)\n-
        Add a `T: PyTypeCheck` bound to the `IntoPyObject` implementations on `Bound<T>`,
        `Borrowed<T>` and `Py<T>`. [#&#8203;5640](https://redirect.github.com/PyO3/pyo3/pull/5640)\n-
        The `with_critical_section` and `with_critical_section2` functions are moved
        to `pyo3::sync::critical_section`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n-
        Use `PyIter_NextItem` in `PyIterator::next` implementation. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n-
        `IntoPyObject` for simple enums now uses a singleton value, allowing identity
        (python `is`) comparisons. [#&#8203;5665](https://redirect.github.com/PyO3/pyo3/pull/5665)\n-
        Allow any `Sequence[int]` in `FromPyObject` on `Cow<[u8]>` and change the
        error type to `PyErr`. [#&#8203;5667](https://redirect.github.com/PyO3/pyo3/pull/5667)\n-
        `async` pymethods now borrow `self` only for the duration of awaiting the
        future, not the entire method call. [#&#8203;5684](https://redirect.github.com/PyO3/pyo3/pull/5684)\n-
        Change `CastError` formatted message to directly describe the \"is not an
        instance of\" failure condition. [#&#8203;5693](https://redirect.github.com/PyO3/pyo3/pull/5693)\n-
        Add `#[inline]` hints to many methods on `PyBackedStr`. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
        Remove redundant internal counters from `BoundSetIterator` and `BoundFrozenSetIterator`.
        [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n- Implement
        `PyIterator::size_hint` on abi3 builds (previously was only on unlimited API
        builds). [#&#8203;5727](https://redirect.github.com/PyO3/pyo3/pull/5727)\n-
        Deprecate FFI definition `PyImport_ImportModuleNoBlock` (deprecated in Python
        3.13). [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
        `#[new]` can now return arbitrary Python objects. [#&#8203;5739](https://redirect.github.com/PyO3/pyo3/pull/5739)\n-
        `experimental-inspect`:\n  - Introduce `TypeHint` and make use of it to encode
        type hint annotations. [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438)\n
        \ - Rename `PyType{Info,Check}::TYPE_INFO` into `PyType{Info,Check}::TYPE_HINT`.
        [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438) [#&#8203;5619](https://redirect.github.com/PyO3/pyo3/pull/5619)
        [#&#8203;5641](https://redirect.github.com/PyO3/pyo3/pull/5641)\n  - Fill
        annotations on function arguments and return values for all types supported
        natively by PyO3. [#&#8203;5634](https://redirect.github.com/PyO3/pyo3/pull/5634)
        [#&#8203;5637](https://redirect.github.com/PyO3/pyo3/pull/5637) [#&#8203;5639](https://redirect.github.com/PyO3/pyo3/pull/5639)\n
        \ - Use `_typeshed.Incomplete` instead of `typing.Any` as default type hint,
        to make it easier to spot incomplete trait implementations. [#&#8203;5744](https://redirect.github.com/PyO3/pyo3/pull/5744)\n
        \ - Use general Python expression syntax for type hints. [#&#8203;5671](https://redirect.github.com/PyO3/pyo3/pull/5671)\n\n#####
        Removed\n\n- Remove all functionality deprecated in PyO3 0.25 and 0.26. [#&#8203;5740](https://redirect.github.com/PyO3/pyo3/pull/5740)\n-
        FFI definitions:\n  - Remove FFI definition `PyEval_GetCallStats` (removed
        from CPython in Python 3.7). [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
        \ - Remove FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock` on
        Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
        \ - Remove private FFI definitions `_PyObject_New`, `_PyObject_NewVar`, `_PyObject_GC_Resize`,
        `_PyObject_GC_New`, and `_PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
        \ - Remove private FFI definitions `_PyDict_SetItem_KnownHash`, `_PyDict_Next`,
        `_PyDict_NewPresized`, `_PyDict_Contains_KnownHash`, and `_PyDict_Contains`.
        [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Remove
        private FFI definitions `_PyFrameEvalFunction`, `_PyInterpreterState_GetEvalFrameFunc`
        and `_PyInterpreterState_SetEvalFrameFunc`. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
        \ - Remove private FFI definitions `_PyImport_IsInitialized`, `_PyImport_SetModule`,
        `_PyImport_SetModuleString`, `_PyImport_AcquireLock`, `_PyImport_ReleaseLock`,
        `_PyImport_FindBuiltin`, `_PyImport_FindExtensionObject`, `_PyImport_FixupBuiltin`,
        and `_PyImport_FixupExtensionObject`. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n\n#####
        Fixed\n\n- Fix `PyModuleMethods::add_submodule()` to use the last segment
        of the submodule name as the attribute name on the parent module instead of
        using the full name. [#&#8203;5375](https://redirect.github.com/PyO3/pyo3/pull/5375)\n-
        Link with libpython for Cygwin extension modules. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
        Link against the limited API DLL for Cygwin when abi3 is used. [#&#8203;5574](https://redirect.github.com/PyO3/pyo3/pull/5574)\n-
        Handle errors in `PyIterator` when calling `size_hint` [#&#8203;5604](https://redirect.github.com/PyO3/pyo3/pull/5604)\n-
        Link with libpython for iOS extension modules. [#&#8203;5605](https://redirect.github.com/PyO3/pyo3/pull/5605)\n-
        Correct `IntoPyObject` output type of `PyBackedStr` to be `PyString`, not
        `PyAny`. [#&#8203;5655](https://redirect.github.com/PyO3/pyo3/pull/5655)\n-
        Fix `async` functions to return `None` rather than empty tuple `()`. [#&#8203;5685](https://redirect.github.com/PyO3/pyo3/pull/5685)\n-
        Fix compile error when using references to `#[pyclass]` types (e.g. `&MyClass`)
        as arguments to async `#[pyfunction]`s. [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n-
        FFI definitions:\n  - Fix FFI definition `PyMemberDescrObject.d_member` to
        use `PyMemberDef` for Python 3.11+ (was incorrectly `PyGetSetDef`). [#&#8203;5647](https://redirect.github.com/PyO3/pyo3/pull/5647)\n
        \ - Mark FFI definition `PyThreadState_GetFrame` available with abi3 in 3.10+.
        [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n  - Fix FFI
        definition `PyImport_GetModule` on PyPy. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
        `experimental-inspect`:\n  - fix `__new__` return type to be the built object
        type and not `None`. [#&#8203;5555](https://redirect.github.com/PyO3/pyo3/pull/5555)\n
        \ - fix imports of decorators. [#&#8203;5618](https://redirect.github.com/PyO3/pyo3/pull/5618)\n
        \ - fix the return type annotation of `PyResult<()>` (must be `None` and not
        `tuple`) [#&#8203;5674](https://redirect.github.com/PyO3/pyo3/pull/5674)\n\n###
        [`v0.27.2`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0272---2025-11-30)\n\n[Compare
        Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.1...v0.27.2)\n\n#####
        Changed\n\n- Disable subclassing `PyDict` on GraalPy (unsupported for now,
        may crash at runtime). [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n#####
        Fixed\n\n- Fix crash when compiling on Rust 1.92+ with both debug assertions
        and optimizations enabled. [#&#8203;5638](https://redirect.github.com/PyO3/pyo3/pull/5638)\n-
        Fix FFI definition of `PyDictObject` on PyPy. [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n###
        [`v0.27.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0271---2025-10-21)\n\n[Compare
        Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.0...v0.27.1)\n\n#####
        Fixed\n\n- Fix `clippy:declare_interior_mutable_const` warning from `#[pyfunction]`.
        [#&#8203;5538](https://redirect.github.com/PyO3/pyo3/pull/5538)\n- Expose
        `pyo3::types::PySendResult` in public API. [#&#8203;5539](https://redirect.github.com/PyO3/pyo3/pull/5539)\n\n###
        [`v0.27.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0270---2025-10-19)\n\n[Compare
        Source](https://redirect.github.com/pyo3/pyo3/compare/v0.26.0...v0.27.0)\n\n#####
        Packaging\n\n- Extend range of supported versions of `hashbrown` optional
        dependency to include version 0.16. [#&#8203;5428](https://redirect.github.com/PyO3/pyo3/pull/5428)\n-
        Bump optional `num-bigint` dependency minimum version to 0.4.4. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
        Test against Python 3.14 final release. [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
        Drop support for PyPy 3.9 and 3.10. [#&#8203;5516](https://redirect.github.com/PyO3/pyo3/pull/5516)\n-
        Provide a better error message when building an outdated PyO3 for a too-new
        Python version. [#&#8203;5519](https://redirect.github.com/PyO3/pyo3/pull/5519)\n\n#####
        Added\n\n- Add `FromPyObjectOwned` as convenient trait bound for `FromPyObject`
        when the data is not borrowed from Python. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
        Add `Borrowed::extract`, same as `PyAnyMethods::extract`, but does not restrict
        the lifetime by deref. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
        `experimental-inspect`: basic support for `#[derive(IntoPyObject)]` (no struct
        fields support yet). [#&#8203;5365](https://redirect.github.com/PyO3/pyo3/pull/5365)\n-
        `experimental-inspect`: support `#[pyo3(get, set)]` and `#[pyclass(get_all,
        set_all)]`. [#&#8203;5370](https://redirect.github.com/PyO3/pyo3/pull/5370)\n-
        Add `PyTypeCheck::classinfo_object` that returns an object that can be used
        as parameter in `isinstance` or `issubclass`. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
        Implement `PyTypeInfo` on `datetime.*` types even when the limited API is
        enabled. [#&#8203;5388](https://redirect.github.com/PyO3/pyo3/pull/5388)\n-
        Implement `PyTypeInfo` on `PyIterator`, `PyMapping` and `PySequence`. [#&#8203;5402](https://redirect.github.com/PyO3/pyo3/pull/5402)\n-
        Implement `PyTypeInfo` on `PyCode` when using the stable ABI. [#&#8203;5403](https://redirect.github.com/PyO3/pyo3/pull/5403)\n-
        Implement `PyTypeInfo` on `PyWeakrefReference` when using the stable ABI.
        [#&#8203;5404](https://redirect.github.com/PyO3/pyo3/pull/5404)\n- Add `pyo3::sync::RwLockExt`
        trait, analogous to `pyo3::sync::MutexExt` for readwrite locks. [#&#8203;5435](https://redirect.github.com/PyO3/pyo3/pull/5435)\n-
        Add `PyString::from_bytes`. [#&#8203;5437](https://redirect.github.com/PyO3/pyo3/pull/5437)\n-
        Implement `AsRef<[u8]>` for `PyBytes`. [#&#8203;5445](https://redirect.github.com/PyO3/pyo3/pull/5445)\n-
        Add `CastError` and `CastIntoError`. [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n-
        Add `PyCapsuleMethods::pointer_checked` and `PyCapsuleMethods::is_valid_checked`.
        [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Add `Borrowed::cast`,
        `Borrowed::cast_exact` and `Borrowed::cast_unchecked`. [#&#8203;5475](https://redirect.github.com/PyO3/pyo3/pull/5475)\n-
        Add conversions for `jiff::civil::ISOWeekDate`. [#&#8203;5478](https://redirect.github.com/PyO3/pyo3/pull/5478)\n-
        Add conversions for `&Cstr`, `Cstring` and `Cow<Cstr>`. [#&#8203;5482](https://redirect.github.com/PyO3/pyo3/pull/5482)\n-
        add `#[pyclass(skip_from_py_object)]` option, to opt-out of the `FromPyObject:
        PyClass + Clone` blanket impl. [#&#8203;5488](https://redirect.github.com/PyO3/pyo3/pull/5488)\n-
        Add `PyErr::add_note`. [#&#8203;5489](https://redirect.github.com/PyO3/pyo3/pull/5489)\n-
        Add `FromPyObject` impl for `Cow<Path>` & `Cow<OsStr>`. [#&#8203;5497](https://redirect.github.com/PyO3/pyo3/pull/5497)\n-
        Add `#[pyclass(from_py_object)]` pyclass option, to opt-in to the extraction
        of pyclasses by value (requires `Clone`). [#&#8203;5506](https://redirect.github.com/PyO3/pyo3/pull/5506)\n\n#####
        Changed\n\n- Rework `FromPyObject` trait for flexibility and performance:
        [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n  - Add a
        second lifetime to `FromPyObject`, to allow borrowing data from Python objects
        (e.g. `&str` from Python `str`).\n  - Replace `extract_bound` with `extract`,
        which takes `Borrowed<'a, 'py, PyAny>`.\n- Optimize `FromPyObject` implementations
        for `Vec<u8>` and `[u8; N]` from `bytes` and `bytearray`. [#&#8203;5244](https://redirect.github.com/PyO3/pyo3/pull/5244)\n-
        Deprecate `#[pyfn]` attribute. [#&#8203;5384](https://redirect.github.com/PyO3/pyo3/pull/5384)\n-
        Fetch type name dynamically on cast errors instead of using `PyTypeCheck::NAME`.
        [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n- Deprecate
        `PyTypeCheck::NAME` in favour of `PyTypeCheck::classinfo_object` which provides
        the type information at runtime. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
        `PyClassGuard(Mut)` and `PyRef(Mut)` extraction now returns an opaque Rust
        error [#&#8203;5413](https://redirect.github.com/PyO3/pyo3/pull/5413)\n- Fetch
        type name dynamically when exporting types implementing `PyTypeInfo` with
        `#[pymodule_use]`. [#&#8203;5414](https://redirect.github.com/PyO3/pyo3/pull/5414)\n-
        Improve `Debug` representation of `PyBuffer<T>`. [#&#8203;5442](https://redirect.github.com/PyO3/pyo3/pull/5442)\n-
        `experimental-inspect`: change the way introspection data is emitted in the
        binaries to avoid a pointer indirection and simplify parsing. [#&#8203;5450](https://redirect.github.com/PyO3/pyo3/pull/5450)\n-
        Optimize `Py<T>::drop` for the case when attached to the Python interpreter.
        [#&#8203;5454](https://redirect.github.com/PyO3/pyo3/pull/5454)\n- Replace
        `DowncastError` and `DowncastIntoError` with `CastError` and `CastIntoError`.
        [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n- Enable
        fast-path for 128-bit integer conversions on `GraalPy`. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
        Deprecate `PyAnyMethods::downcast` functions in favour of `Bound::cast` functions.
        [#&#8203;5472](https://redirect.github.com/PyO3/pyo3/pull/5472)\n- Make `PyTypeCheck`
        an `unsafe trait`. [#&#8203;5473](https://redirect.github.com/PyO3/pyo3/pull/5473)\n-
        Deprecate unchecked `PyCapsuleMethods`: `pointer()`, `reference()`, and `is_valid()`.
        [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Reduce
        lifetime of return value in `PyCapsuleMethods::reference`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
        `PyCapsuleMethods::name` now returns `CapsuleName` wrapper instead of `&CStr`.
        [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Deprecate
        `import_exception_bound` in favour of `import_exception`. [#&#8203;5480](https://redirect.github.com/PyO3/pyo3/pull/5480)\n-
        `PyList::get_item_unchecked`, `PyTuple::get_item_unchecked`, and `PyTuple::get_borrowed_item_unchecked`
        no longer check for null values at the provided index. [#&#8203;5494](https://redirect.github.com/PyO3/pyo3/pull/5494)\n-
        Allow converting naive datetime into chrono `DateTime<Local>`. [#&#8203;5507](https://redirect.github.com/PyO3/pyo3/pull/5507)\n\n#####
        Removed\n\n- Removed `FromPyObjectBound` trait. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n\n#####
        Fixed\n\n- Fix compilation failure on `wasm32-wasip2`. [#&#8203;5368](https://redirect.github.com/PyO3/pyo3/pull/5368)\n-
        Fix `OsStr` conversion for non-utf8 strings on Windows. [#&#8203;5444](https://redirect.github.com/PyO3/pyo3/pull/5444)\n-
        Fix issue with `cargo vendor` caused by gitignored build artifact `emscripten/pybuilddir.txt`.
        [#&#8203;5456](https://redirect.github.com/PyO3/pyo3/pull/5456)\n- Stop leaking
        `PyMethodDef` instances inside `#[pyfunction]` macro generated code. [#&#8203;5459](https://redirect.github.com/PyO3/pyo3/pull/5459)\n-
        Don't export definition of FFI struct `PyObjectObFlagsAndRefcnt` on 32-bit
        Python 3.14 (doesn't exist). [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
        Fix failure to build for `abi3` interpreters on Windows using maturin's built-in
        sysconfig in combination with the `generate-import-lib` feature. [#&#8203;5503](https://redirect.github.com/PyO3/pyo3/pull/5503)\n-
        Fix FFI definitions `PyModule_ExecDef` and `PyModule_FromDefAndSpec2` on PyPy.
        [#&#8203;5529](https://redirect.github.com/PyO3/pyo3/pull/5529)\n\n</details>\n\n<details>\n<summary>PyO3/pyo3-async-runtimes
        (pyo3-async-runtimes)</summary>\n\n### [`v0.28.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0280---2026-02-03)\n\n[Compare
        Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.27.0...v0.28.0)\n\n-
        Bump to pyo3 0.28. [#&#8203;76](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/76)\n-
        Check for awaitable instead of coroutine in stream glue [#&#8203;73](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/73)\n-
        Bump MSRV to 1.83.\n- Fix handling of full buffer in `into_stream` functions\n\n###
        [`v0.27.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0270---2025-10-20)\n\n[Compare
        Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.26.0...v0.27.0)\n\n-
        Avoid attaching to the runtime when cloning TaskLocals by using std::sync::Arc.
        [#&#8203;62](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/62)\n-
        **Breaking**: Finalize the future without holding GIL inside async-std/tokio
        runtime.\n  Trait `Runtime` now requires `spawn_blocking` function,\n  `future_into_py`
        functions now require future return type to be `Send`.\n  [#&#8203;60](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/60)\n-
        Change pyo3 `downcast` calls to `cast` calls [#&#8203;65](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/65)\n-
        Use `pyo3::intern!` for method calls and `getattr` calls [#&#8203;66](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/66)\n-
        Fix missing LICENSE file in macros crate by [@&#8203;musicinmybrain](https://redirect.github.com/musicinmybrain)
        in [#&#8203;63](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/63)\n-
        Bump to pyo3 0.27. [#&#8203;68](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/68)\n\n</details>\n\n<details>\n<summary>vorner/pyo3-log
        (pyo3-log)</summary>\n\n### [`v0.13.3`](https://redirect.github.com/vorner/pyo3-log/blob/HEAD/CHANGELOG.md#0133)\n\n[Compare
        Source](https://redirect.github.com/vorner/pyo3-log/compare/v0.13.2...v0.13.3)\n\n-
        Support for pyo3 0.28 ([#&#8203;75](https://redirect.github.com/vorner/pyo3-log/issues/75)).\n\n###
        [`v0.13.2`](https://redirect.github.com/vorner/pyo3-log/blob/HEAD/CHANGELOG.md#0132)\n\n[Compare
        Source](https://redirect.github.com/vorner/pyo3-log/compare/v0.13.1...v0.13.2)\n\n-
        Support for pyo3 0.27 ([#&#8203;72](https://redirect.github.com/vorner/pyo3-log/issues/72)).\n\n</details>\n\n<details>\n<summary>davidhewitt/pythonize
        (pythonize)</summary>\n\n### [`v0.28.0`](https://redirect.github.com/davidhewitt/pythonize/blob/HEAD/CHANGELOG.md#0280---2026-02-18)\n\n[Compare
        Source](https://redirect.github.com/davidhewitt/pythonize/compare/v0.27.0...v0.28.0)\n\n-
        Bump MSRV to 1.83.\n- Update `pyo3` to 0.28.\n- Support deserializing `dataclass`
        instances to struct-like Rust types.\n- Add `arbitrary_precision` feature\n\n###
        [`v0.27.0`](https://redirect.github.com/davidhewitt/pythonize/blob/HEAD/CHANGELOG.md#0270---2025-11-07)\n\n[Compare
        Source](https://redirect.github.com/davidhewitt/pythonize/compare/v0.26.0...v0.27.0)\n\n-
        Update to PyO3 0.27\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
        **Schedule**: Branch creation - At any time (no schedule defined), Automerge
        - At any time (no schedule defined).\n\n\U0001F6A6 **Automerge**: Disabled
        by config. Please merge this manually once you are satisfied.\n\n\u267B **Rebasing**:
        Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F47B
        **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions)
        if that's undesired.\n\n---\n\n - [ ] <!-- rebase-check -->If you want to
        rebase/retry this PR, check this box\n\n---\n\nThis PR was generated by [Mend
        Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/vexxhost/magnum-cluster-api).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIyLjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->\n"
      change_url: https://github.com/vexxhost/magnum-cluster-api/pull/837
      child_jobs: []
      commit_id: c627df14f3f325bb901b8e40dbc5a674c5806f9d
      event_id: 87474790-0cdc-11f1-83cb-1707be18ec2f
      executor:
        hostname: 3a2793d2bd32
        inventory_file: /var/lib/zuul/builds/36a419106c4c47928b3802f5996a0d3e/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/36a419106c4c47928b3802f5996a0d3e/work/logs
        result_data_file: /var/lib/zuul/builds/36a419106c4c47928b3802f5996a0d3e/work/results.json
        src_root: /var/lib/zuul/builds/36a419106c4c47928b3802f5996a0d3e/work/src
        work_root: /var/lib/zuul/builds/36a419106c4c47928b3802f5996a0d3e/work
      include_vars: []
      items:
      - branch: main
        change: '837'
        change_message: "fix(deps): update pyo3\n\nThis PR contains the following
          updates:\n\n| Package | Type | Update | Change |\n|---|---|---|---|\n| [pyo3](https://redirect.github.com/pyo3/pyo3)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-async-runtimes](https://redirect.github.com/PyO3/pyo3-async-runtimes)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n| [pyo3-log](https://redirect.github.com/vorner/pyo3-log)
          | dependencies | patch | `0.13.1` \u2192 `0.13.3` |\n| [pythonize](https://redirect.github.com/davidhewitt/pythonize)
          | dependencies | minor | `0.26.0` \u2192 `0.28.0` |\n\n---\n\n### Release
          Notes\n\n<details>\n<summary>pyo3/pyo3 (pyo3)</summary>\n\n### [`v0.28.2`](https://redirect.github.com/PyO3/pyo3/releases/tag/v0.28.2):
          PyO3 0.28.2\n\n[Compare Source](https://redirect.github.com/pyo3/pyo3/compare/v0.28.1...v0.28.2)\n\nThis
          patch release contains a soundness fix for subclassing native types such
          as `PyList` with the `abi3` feature enabled when targeting a minimum version
          of Python 3.12 or higher. (Support for doing such subclassing was newly
          added in PyO3 0.28.0.)\n\nPyO3 0.28.0 and 0.28.1 will be yanked.\n\nThis
          release also contains a correction to the FFI definition `PyType_GetTypeDataSize`
          and incorrectly-generated `__qualname__` on `#[pyclass]` enum variant types
          when using `#[pyo3(name = \"...\")]` option to rename the enum and/or variant.\n\nThank
          you to the following contributors for the improvements:\n\n[@&#8203;davidhewitt](https://redirect.github.com/davidhewitt)\n[@&#8203;Icxolu](https://redirect.github.com/Icxolu)\n[@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum)\n\n###
          [`v0.28.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0281---2026-02-14)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.28.0...v0.28.1)\n\n#####
          Fixed\n\n- Fix `*args` / `**kwargs` support in` experimental-async` feature
          (regressed in 0.28.0). [#&#8203;5771](https://redirect.github.com/PyO3/pyo3/pull/5771)\n-
          Fix `clippy::declare_interior_mutable_const` warning inside `#[pyclass]`
          generated code on enums. [#&#8203;5772](https://redirect.github.com/PyO3/pyo3/pull/5772)\n-
          Fix `ambiguous_associated_items` compilation error when deriving `FromPyObject`
          or using `#[pyclass(from_py_object)]` macro on enums with `Error` variant.
          [#&#8203;5784](https://redirect.github.com/PyO3/pyo3/pull/5784)\n- Fix `__qualname__`
          for complex `#[pyclass]` enum variants to include the enum name. [#&#8203;5796](https://redirect.github.com/PyO3/pyo3/pull/5796)\n\n###
          [`v0.28.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0280---2026-02-01)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.2...v0.28.0)\n\n#####
          Packaging\n\n- Bump MSRV to Rust 1.83. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
          Bump minimum supported `quote` version to 1.0.37. [#&#8203;5531](https://redirect.github.com/PyO3/pyo3/pull/5531)\n-
          Bump supported GraalPy version to 25.0. [#&#8203;5542](https://redirect.github.com/PyO3/pyo3/pull/5542)\n-
          Drop `memoffset` dependency. [#&#8203;5545](https://redirect.github.com/PyO3/pyo3/pull/5545)\n-
          Support for free-threaded Python is now opt-out rather than opt-in. [#&#8203;5564](https://redirect.github.com/PyO3/pyo3/pull/5564)\n-
          Bump `target-lexicon` dependency to 0.13.3. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
          Drop `indoc` and `unindent` dependencies. [#&#8203;5608](https://redirect.github.com/PyO3/pyo3/pull/5608)\n\n#####
          Added\n\n- Add `__init__` support in `#[pymethods]`. [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
          Expose `PySuper` on PyPy, GraalPy and ABI3 [#&#8203;4951](https://redirect.github.com/PyO3/pyo3/pull/4951)\n-
          Add `PyString::from_fmt` and `py_format!` macro. [#&#8203;5199](https://redirect.github.com/PyO3/pyo3/pull/5199)\n-
          Add `#[pyclass(new = \"from_fields\")]` option. [#&#8203;5421](https://redirect.github.com/PyO3/pyo3/pull/5421)\n-
          Add `pyo3::buffer::PyUntypedBuffer`, a type-erased form of `PyBuffer<T>`.
          [#&#8203;5458](https://redirect.github.com/PyO3/pyo3/pull/5458)\n- Add `PyBytes::new_with_writer`
          [#&#8203;5517](https://redirect.github.com/PyO3/pyo3/pull/5517)\n- Add `PyClass::NAME`.
          [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n- Add `pyo3_build_config::add_libpython_rpath_link_args`.
          [#&#8203;5624](https://redirect.github.com/PyO3/pyo3/pull/5624)\n- Add `PyBackedStr::clone_ref`
          and `PyBackedBytes::clone_ref` methods. [#&#8203;5654](https://redirect.github.com/PyO3/pyo3/pull/5654)\n-
          Add `PyCapsule::new_with_pointer` and `PyCapsule::new_with_pointer_and_destructor`
          for creating capsules with raw pointers. [#&#8203;5689](https://redirect.github.com/PyO3/pyo3/pull/5689)\n-
          Add `#[deleter]` attribute to implement property deleters in `#[methods]`.
          [#&#8203;5699](https://redirect.github.com/PyO3/pyo3/pull/5699)\n- Add `IntoPyObject`
          and `FromPyObject` implementations for `uuid::NonNilUuid`. [#&#8203;5707](https://redirect.github.com/PyO3/pyo3/pull/5707)\n-
          Add `PyBackedStr::as_str` and `PyBackedStr::as_py_str` methods. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
          Add support for subclassing native types (`PyDict`, exceptions, ...) when
          building for abi3 on Python 3.12+. [#&#8203;5733](https://redirect.github.com/PyO3/pyo3/pull/5733)\n-
          Add support for subclassing `PyList` when building for Python 3.12+. [#&#8203;5734](https://redirect.github.com/PyO3/pyo3/pull/5734)\n-
          FFI definitions:\n  - Add FFI definitions `PyEval_GetFrameBuiltins`, `PyEval_GetFrameGlobals`
          and `PyEval_GetFrameLocals` on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Add FFI definitions `PyObject_New`, `PyObject_NewVar`, `PyObject_GC_Resize`,
          `PyObject_GC_New`, and `PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
          \ - Added FFI definitions and an unsafe Rust API wrapping `Py_BEGIN_CRITICAL_SECTION_MUTEX`
          and `Py_BEGIN_CRITICAL_SECTION_MUTEX2`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n
          \ - Add FFI definition `PyDict_GetItemStringRef` on Python 3.13 and up.
          [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Add
          FFI definition `PyIter_NextItem` on Python 3.14 and up, and `compat::PyIter_NextItem`
          for older versions. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n
          \ - Add FFI definitions `PyThreadState_GetInterpreter` and `PyThreadState_GetID`
          on Python 3.9+, `PyThreadState_EnterTracing` and `PyThreadState_LeaveTracing`
          on Python 3.11+, `PyThreadState_GetUnchecked` on Python 3.13+, and `compat::PyThreadState_GetUnchecked`.
          [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n  - Add
          FFI definitions `PyImport_ImportModuleAttr` and `PyImport_ImportModuleAttrString`
          on Python 3.14+. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n
          \ - Add FFI definitions for the `PyABIInfo` and `PyModExport` APIs available
          in Python 3.15. [#&#8203;5746](https://redirect.github.com/PyO3/pyo3/pull/5746)\n-
          `experimental-inspect`:\n  - Emit base classes. [#&#8203;5331](https://redirect.github.com/PyO3/pyo3/pull/5331)\n
          \ - Emit `@typing.final` on final classes. [#&#8203;5552](https://redirect.github.com/PyO3/pyo3/pull/5552)\n
          \ - Generate nested classes for complex enums. [#&#8203;5708](https://redirect.github.com/PyO3/pyo3/pull/5708)\n
          \ - Emit `async` keyword for async functions. [#&#8203;5731](https://redirect.github.com/PyO3/pyo3/pull/5731)\n\n#####
          Changed\n\n- Call `sys.unraisablehook` instead of `PyErr_Print` if panicking
          on null FFI pointer in `Bound`, `Borrowed` and `Py` constructors. [#&#8203;5496](https://redirect.github.com/PyO3/pyo3/pull/5496)\n-
          Use PEP-489 multi-phase initialization for `#[pymodule]`. [#&#8203;5525](https://redirect.github.com/PyO3/pyo3/pull/5525)\n-
          Deprecate implicit by-value implementation of `FromPyObject` for `#[pyclass]`.
          [#&#8203;5550](https://redirect.github.com/PyO3/pyo3/pull/5550)\n- Deprecate
          `PyTypeInfo::NAME` and `PyTypeInfo::MODULE`. [#&#8203;5579](https://redirect.github.com/PyO3/pyo3/pull/5579)\n-
          Deprecate `Py<T>::from_{owned,borrowed}[or_{err,opt}]` constructors from
          raw pointer. [#&#8203;5585](https://redirect.github.com/PyO3/pyo3/pull/5585)\n-
          Deprecate FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`.
          [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n- Relax
          `'py: 'a` bound in `Py::extract`. [#&#8203;5594](https://redirect.github.com/PyO3/pyo3/pull/5594)\n-
          Add a `T: PyTypeCheck` bound to the `IntoPyObject` implementations on `Bound<T>`,
          `Borrowed<T>` and `Py<T>`. [#&#8203;5640](https://redirect.github.com/PyO3/pyo3/pull/5640)\n-
          The `with_critical_section` and `with_critical_section2` functions are moved
          to `pyo3::sync::critical_section`. [#&#8203;5642](https://redirect.github.com/PyO3/pyo3/pull/5642)\n-
          Use `PyIter_NextItem` in `PyIterator::next` implementation. [#&#8203;5661](https://redirect.github.com/PyO3/pyo3/pull/5661)\n-
          `IntoPyObject` for simple enums now uses a singleton value, allowing identity
          (python `is`) comparisons. [#&#8203;5665](https://redirect.github.com/PyO3/pyo3/pull/5665)\n-
          Allow any `Sequence[int]` in `FromPyObject` on `Cow<[u8]>` and change the
          error type to `PyErr`. [#&#8203;5667](https://redirect.github.com/PyO3/pyo3/pull/5667)\n-
          `async` pymethods now borrow `self` only for the duration of awaiting the
          future, not the entire method call. [#&#8203;5684](https://redirect.github.com/PyO3/pyo3/pull/5684)\n-
          Change `CastError` formatted message to directly describe the \"is not an
          instance of\" failure condition. [#&#8203;5693](https://redirect.github.com/PyO3/pyo3/pull/5693)\n-
          Add `#[inline]` hints to many methods on `PyBackedStr`. [#&#8203;5723](https://redirect.github.com/PyO3/pyo3/pull/5723)\n-
          Remove redundant internal counters from `BoundSetIterator` and `BoundFrozenSetIterator`.
          [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n- Implement
          `PyIterator::size_hint` on abi3 builds (previously was only on unlimited
          API builds). [#&#8203;5727](https://redirect.github.com/PyO3/pyo3/pull/5727)\n-
          Deprecate FFI definition `PyImport_ImportModuleNoBlock` (deprecated in Python
          3.13). [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
          `#[new]` can now return arbitrary Python objects. [#&#8203;5739](https://redirect.github.com/PyO3/pyo3/pull/5739)\n-
          `experimental-inspect`:\n  - Introduce `TypeHint` and make use of it to
          encode type hint annotations. [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438)\n
          \ - Rename `PyType{Info,Check}::TYPE_INFO` into `PyType{Info,Check}::TYPE_HINT`.
          [#&#8203;5438](https://redirect.github.com/PyO3/pyo3/pull/5438) [#&#8203;5619](https://redirect.github.com/PyO3/pyo3/pull/5619)
          [#&#8203;5641](https://redirect.github.com/PyO3/pyo3/pull/5641)\n  - Fill
          annotations on function arguments and return values for all types supported
          natively by PyO3. [#&#8203;5634](https://redirect.github.com/PyO3/pyo3/pull/5634)
          [#&#8203;5637](https://redirect.github.com/PyO3/pyo3/pull/5637) [#&#8203;5639](https://redirect.github.com/PyO3/pyo3/pull/5639)\n
          \ - Use `_typeshed.Incomplete` instead of `typing.Any` as default type hint,
          to make it easier to spot incomplete trait implementations. [#&#8203;5744](https://redirect.github.com/PyO3/pyo3/pull/5744)\n
          \ - Use general Python expression syntax for type hints. [#&#8203;5671](https://redirect.github.com/PyO3/pyo3/pull/5671)\n\n#####
          Removed\n\n- Remove all functionality deprecated in PyO3 0.25 and 0.26.
          [#&#8203;5740](https://redirect.github.com/PyO3/pyo3/pull/5740)\n- FFI definitions:\n
          \ - Remove FFI definition `PyEval_GetCallStats` (removed from CPython in
          Python 3.7). [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Remove FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`
          on Python 3.13 and up. [#&#8203;5590](https://redirect.github.com/PyO3/pyo3/pull/5590)\n
          \ - Remove private FFI definitions `_PyObject_New`, `_PyObject_NewVar`,
          `_PyObject_GC_Resize`, `_PyObject_GC_New`, and `_PyObject_GC_NewVar`. [#&#8203;5591](https://redirect.github.com/PyO3/pyo3/pull/5591)\n
          \ - Remove private FFI definitions `_PyDict_SetItem_KnownHash`, `_PyDict_Next`,
          `_PyDict_NewPresized`, `_PyDict_Contains_KnownHash`, and `_PyDict_Contains`.
          [#&#8203;5659](https://redirect.github.com/PyO3/pyo3/pull/5659)\n  - Remove
          private FFI definitions `_PyFrameEvalFunction`, `_PyInterpreterState_GetEvalFrameFunc`
          and `_PyInterpreterState_SetEvalFrameFunc`. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
          \ - Remove private FFI definitions `_PyImport_IsInitialized`, `_PyImport_SetModule`,
          `_PyImport_SetModuleString`, `_PyImport_AcquireLock`, `_PyImport_ReleaseLock`,
          `_PyImport_FindBuiltin`, `_PyImport_FindExtensionObject`, `_PyImport_FixupBuiltin`,
          and `_PyImport_FixupExtensionObject`. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n\n#####
          Fixed\n\n- Fix `PyModuleMethods::add_submodule()` to use the last segment
          of the submodule name as the attribute name on the parent module instead
          of using the full name. [#&#8203;5375](https://redirect.github.com/PyO3/pyo3/pull/5375)\n-
          Link with libpython for Cygwin extension modules. [#&#8203;5571](https://redirect.github.com/PyO3/pyo3/pull/5571)\n-
          Link against the limited API DLL for Cygwin when abi3 is used. [#&#8203;5574](https://redirect.github.com/PyO3/pyo3/pull/5574)\n-
          Handle errors in `PyIterator` when calling `size_hint` [#&#8203;5604](https://redirect.github.com/PyO3/pyo3/pull/5604)\n-
          Link with libpython for iOS extension modules. [#&#8203;5605](https://redirect.github.com/PyO3/pyo3/pull/5605)\n-
          Correct `IntoPyObject` output type of `PyBackedStr` to be `PyString`, not
          `PyAny`. [#&#8203;5655](https://redirect.github.com/PyO3/pyo3/pull/5655)\n-
          Fix `async` functions to return `None` rather than empty tuple `()`. [#&#8203;5685](https://redirect.github.com/PyO3/pyo3/pull/5685)\n-
          Fix compile error when using references to `#[pyclass]` types (e.g. `&MyClass`)
          as arguments to async `#[pyfunction]`s. [#&#8203;5725](https://redirect.github.com/PyO3/pyo3/pull/5725)\n-
          FFI definitions:\n  - Fix FFI definition `PyMemberDescrObject.d_member`
          to use `PyMemberDef` for Python 3.11+ (was incorrectly `PyGetSetDef`). [#&#8203;5647](https://redirect.github.com/PyO3/pyo3/pull/5647)\n
          \ - Mark FFI definition `PyThreadState_GetFrame` available with abi3 in
          3.10+. [#&#8203;5711](https://redirect.github.com/PyO3/pyo3/pull/5711)\n
          \ - Fix FFI definition `PyImport_GetModule` on PyPy. [#&#8203;5737](https://redirect.github.com/PyO3/pyo3/pull/5737)\n-
          `experimental-inspect`:\n  - fix `__new__` return type to be the built object
          type and not `None`. [#&#8203;5555](https://redirect.github.com/PyO3/pyo3/pull/5555)\n
          \ - fix imports of decorators. [#&#8203;5618](https://redirect.github.com/PyO3/pyo3/pull/5618)\n
          \ - fix the return type annotation of `PyResult<()>` (must be `None` and
          not `tuple`) [#&#8203;5674](https://redirect.github.com/PyO3/pyo3/pull/5674)\n\n###
          [`v0.27.2`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0272---2025-11-30)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.1...v0.27.2)\n\n#####
          Changed\n\n- Disable subclassing `PyDict` on GraalPy (unsupported for now,
          may crash at runtime). [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n#####
          Fixed\n\n- Fix crash when compiling on Rust 1.92+ with both debug assertions
          and optimizations enabled. [#&#8203;5638](https://redirect.github.com/PyO3/pyo3/pull/5638)\n-
          Fix FFI definition of `PyDictObject` on PyPy. [#&#8203;5653](https://redirect.github.com/PyO3/pyo3/pull/5653)\n\n###
          [`v0.27.1`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0271---2025-10-21)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.27.0...v0.27.1)\n\n#####
          Fixed\n\n- Fix `clippy:declare_interior_mutable_const` warning from `#[pyfunction]`.
          [#&#8203;5538](https://redirect.github.com/PyO3/pyo3/pull/5538)\n- Expose
          `pyo3::types::PySendResult` in public API. [#&#8203;5539](https://redirect.github.com/PyO3/pyo3/pull/5539)\n\n###
          [`v0.27.0`](https://redirect.github.com/pyo3/pyo3/blob/HEAD/CHANGELOG.md#0270---2025-10-19)\n\n[Compare
          Source](https://redirect.github.com/pyo3/pyo3/compare/v0.26.0...v0.27.0)\n\n#####
          Packaging\n\n- Extend range of supported versions of `hashbrown` optional
          dependency to include version 0.16. [#&#8203;5428](https://redirect.github.com/PyO3/pyo3/pull/5428)\n-
          Bump optional `num-bigint` dependency minimum version to 0.4.4. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
          Test against Python 3.14 final release. [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
          Drop support for PyPy 3.9 and 3.10. [#&#8203;5516](https://redirect.github.com/PyO3/pyo3/pull/5516)\n-
          Provide a better error message when building an outdated PyO3 for a too-new
          Python version. [#&#8203;5519](https://redirect.github.com/PyO3/pyo3/pull/5519)\n\n#####
          Added\n\n- Add `FromPyObjectOwned` as convenient trait bound for `FromPyObject`
          when the data is not borrowed from Python. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
          Add `Borrowed::extract`, same as `PyAnyMethods::extract`, but does not restrict
          the lifetime by deref. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n-
          `experimental-inspect`: basic support for `#[derive(IntoPyObject)]` (no
          struct fields support yet). [#&#8203;5365](https://redirect.github.com/PyO3/pyo3/pull/5365)\n-
          `experimental-inspect`: support `#[pyo3(get, set)]` and `#[pyclass(get_all,
          set_all)]`. [#&#8203;5370](https://redirect.github.com/PyO3/pyo3/pull/5370)\n-
          Add `PyTypeCheck::classinfo_object` that returns an object that can be used
          as parameter in `isinstance` or `issubclass`. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
          Implement `PyTypeInfo` on `datetime.*` types even when the limited API is
          enabled. [#&#8203;5388](https://redirect.github.com/PyO3/pyo3/pull/5388)\n-
          Implement `PyTypeInfo` on `PyIterator`, `PyMapping` and `PySequence`. [#&#8203;5402](https://redirect.github.com/PyO3/pyo3/pull/5402)\n-
          Implement `PyTypeInfo` on `PyCode` when using the stable ABI. [#&#8203;5403](https://redirect.github.com/PyO3/pyo3/pull/5403)\n-
          Implement `PyTypeInfo` on `PyWeakrefReference` when using the stable ABI.
          [#&#8203;5404](https://redirect.github.com/PyO3/pyo3/pull/5404)\n- Add `pyo3::sync::RwLockExt`
          trait, analogous to `pyo3::sync::MutexExt` for readwrite locks. [#&#8203;5435](https://redirect.github.com/PyO3/pyo3/pull/5435)\n-
          Add `PyString::from_bytes`. [#&#8203;5437](https://redirect.github.com/PyO3/pyo3/pull/5437)\n-
          Implement `AsRef<[u8]>` for `PyBytes`. [#&#8203;5445](https://redirect.github.com/PyO3/pyo3/pull/5445)\n-
          Add `CastError` and `CastIntoError`. [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n-
          Add `PyCapsuleMethods::pointer_checked` and `PyCapsuleMethods::is_valid_checked`.
          [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Add `Borrowed::cast`,
          `Borrowed::cast_exact` and `Borrowed::cast_unchecked`. [#&#8203;5475](https://redirect.github.com/PyO3/pyo3/pull/5475)\n-
          Add conversions for `jiff::civil::ISOWeekDate`. [#&#8203;5478](https://redirect.github.com/PyO3/pyo3/pull/5478)\n-
          Add conversions for `&Cstr`, `Cstring` and `Cow<Cstr>`. [#&#8203;5482](https://redirect.github.com/PyO3/pyo3/pull/5482)\n-
          add `#[pyclass(skip_from_py_object)]` option, to opt-out of the `FromPyObject:
          PyClass + Clone` blanket impl. [#&#8203;5488](https://redirect.github.com/PyO3/pyo3/pull/5488)\n-
          Add `PyErr::add_note`. [#&#8203;5489](https://redirect.github.com/PyO3/pyo3/pull/5489)\n-
          Add `FromPyObject` impl for `Cow<Path>` & `Cow<OsStr>`. [#&#8203;5497](https://redirect.github.com/PyO3/pyo3/pull/5497)\n-
          Add `#[pyclass(from_py_object)]` pyclass option, to opt-in to the extraction
          of pyclasses by value (requires `Clone`). [#&#8203;5506](https://redirect.github.com/PyO3/pyo3/pull/5506)\n\n#####
          Changed\n\n- Rework `FromPyObject` trait for flexibility and performance:
          [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n  - Add
          a second lifetime to `FromPyObject`, to allow borrowing data from Python
          objects (e.g. `&str` from Python `str`).\n  - Replace `extract_bound` with
          `extract`, which takes `Borrowed<'a, 'py, PyAny>`.\n- Optimize `FromPyObject`
          implementations for `Vec<u8>` and `[u8; N]` from `bytes` and `bytearray`.
          [#&#8203;5244](https://redirect.github.com/PyO3/pyo3/pull/5244)\n- Deprecate
          `#[pyfn]` attribute. [#&#8203;5384](https://redirect.github.com/PyO3/pyo3/pull/5384)\n-
          Fetch type name dynamically on cast errors instead of using `PyTypeCheck::NAME`.
          [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n- Deprecate
          `PyTypeCheck::NAME` in favour of `PyTypeCheck::classinfo_object` which provides
          the type information at runtime. [#&#8203;5387](https://redirect.github.com/PyO3/pyo3/pull/5387)\n-
          `PyClassGuard(Mut)` and `PyRef(Mut)` extraction now returns an opaque Rust
          error [#&#8203;5413](https://redirect.github.com/PyO3/pyo3/pull/5413)\n-
          Fetch type name dynamically when exporting types implementing `PyTypeInfo`
          with `#[pymodule_use]`. [#&#8203;5414](https://redirect.github.com/PyO3/pyo3/pull/5414)\n-
          Improve `Debug` representation of `PyBuffer<T>`. [#&#8203;5442](https://redirect.github.com/PyO3/pyo3/pull/5442)\n-
          `experimental-inspect`: change the way introspection data is emitted in
          the binaries to avoid a pointer indirection and simplify parsing. [#&#8203;5450](https://redirect.github.com/PyO3/pyo3/pull/5450)\n-
          Optimize `Py<T>::drop` for the case when attached to the Python interpreter.
          [#&#8203;5454](https://redirect.github.com/PyO3/pyo3/pull/5454)\n- Replace
          `DowncastError` and `DowncastIntoError` with `CastError` and `CastIntoError`.
          [#&#8203;5468](https://redirect.github.com/PyO3/pyo3/pull/5468)\n- Enable
          fast-path for 128-bit integer conversions on `GraalPy`. [#&#8203;5471](https://redirect.github.com/PyO3/pyo3/pull/5471)\n-
          Deprecate `PyAnyMethods::downcast` functions in favour of `Bound::cast`
          functions. [#&#8203;5472](https://redirect.github.com/PyO3/pyo3/pull/5472)\n-
          Make `PyTypeCheck` an `unsafe trait`. [#&#8203;5473](https://redirect.github.com/PyO3/pyo3/pull/5473)\n-
          Deprecate unchecked `PyCapsuleMethods`: `pointer()`, `reference()`, and
          `is_valid()`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
          Reduce lifetime of return value in `PyCapsuleMethods::reference`. [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n-
          `PyCapsuleMethods::name` now returns `CapsuleName` wrapper instead of `&CStr`.
          [#&#8203;5474](https://redirect.github.com/PyO3/pyo3/pull/5474)\n- Deprecate
          `import_exception_bound` in favour of `import_exception`. [#&#8203;5480](https://redirect.github.com/PyO3/pyo3/pull/5480)\n-
          `PyList::get_item_unchecked`, `PyTuple::get_item_unchecked`, and `PyTuple::get_borrowed_item_unchecked`
          no longer check for null values at the provided index. [#&#8203;5494](https://redirect.github.com/PyO3/pyo3/pull/5494)\n-
          Allow converting naive datetime into chrono `DateTime<Local>`. [#&#8203;5507](https://redirect.github.com/PyO3/pyo3/pull/5507)\n\n#####
          Removed\n\n- Removed `FromPyObjectBound` trait. [#&#8203;4390](https://redirect.github.com/PyO3/pyo3/pull/4390)\n\n#####
          Fixed\n\n- Fix compilation failure on `wasm32-wasip2`. [#&#8203;5368](https://redirect.github.com/PyO3/pyo3/pull/5368)\n-
          Fix `OsStr` conversion for non-utf8 strings on Windows. [#&#8203;5444](https://redirect.github.com/PyO3/pyo3/pull/5444)\n-
          Fix issue with `cargo vendor` caused by gitignored build artifact `emscripten/pybuilddir.txt`.
          [#&#8203;5456](https://redirect.github.com/PyO3/pyo3/pull/5456)\n- Stop
          leaking `PyMethodDef` instances inside `#[pyfunction]` macro generated code.
          [#&#8203;5459](https://redirect.github.com/PyO3/pyo3/pull/5459)\n- Don't
          export definition of FFI struct `PyObjectObFlagsAndRefcnt` on 32-bit Python
          3.14 (doesn't exist). [#&#8203;5499](https://redirect.github.com/PyO3/pyo3/pull/5499)\n-
          Fix failure to build for `abi3` interpreters on Windows using maturin's
          built-in sysconfig in combination with the `generate-import-lib` feature.
          [#&#8203;5503](https://redirect.github.com/PyO3/pyo3/pull/5503)\n- Fix FFI
          definitions `PyModule_ExecDef` and `PyModule_FromDefAndSpec2` on PyPy. [#&#8203;5529](https://redirect.github.com/PyO3/pyo3/pull/5529)\n\n</details>\n\n<details>\n<summary>PyO3/pyo3-async-runtimes
          (pyo3-async-runtimes)</summary>\n\n### [`v0.28.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0280---2026-02-03)\n\n[Compare
          Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.27.0...v0.28.0)\n\n-
          Bump to pyo3 0.28. [#&#8203;76](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/76)\n-
          Check for awaitable instead of coroutine in stream glue [#&#8203;73](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/73)\n-
          Bump MSRV to 1.83.\n- Fix handling of full buffer in `into_stream` functions\n\n###
          [`v0.27.0`](https://redirect.github.com/PyO3/pyo3-async-runtimes/blob/HEAD/CHANGELOG.md#0270---2025-10-20)\n\n[Compare
          Source](https://redirect.github.com/PyO3/pyo3-async-runtimes/compare/v0.26.0...v0.27.0)\n\n-
          Avoid attaching to the runtime when cloning TaskLocals by using std::sync::Arc.
          [#&#8203;62](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/62)\n-
          **Breaking**: Finalize the future without holding GIL inside async-std/tokio
          runtime.\n  Trait `Runtime` now requires `spawn_blocking` function,\n  `future_into_py`
          functions now require future return type to be `Send`.\n  [#&#8203;60](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/60)\n-
          Change pyo3 `downcast` calls to `cast` calls [#&#8203;65](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/65)\n-
          Use `pyo3::intern!` for method calls and `getattr` calls [#&#8203;66](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/66)\n-
          Fix missing LICENSE file in macros crate by [@&#8203;musicinmybrain](https://redirect.github.com/musicinmybrain)
          in [#&#8203;63](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/63)\n-
          Bump to pyo3 0.27. [#&#8203;68](https://redirect.github.com/PyO3/pyo3-async-runtimes/pull/68)\n\n</details>\n\n<details>\n<summary>vorner/pyo3-log
          (pyo3-log)</summary>\n\n### [`v0.13.3`](https://redirect.github.com/vorner/pyo3-log/blob/HEAD/CHANGELOG.md#0133)\n\n[Compare
          Source](https://redirect.github.com/vorner/pyo3-log/compare/v0.13.2...v0.13.3)\n\n-
          Support for pyo3 0.28 ([#&#8203;75](https://redirect.github.com/vorner/pyo3-log/issues/75)).\n\n###
          [`v0.13.2`](https://redirect.github.com/vorner/pyo3-log/blob/HEAD/CHANGELOG.md#0132)\n\n[Compare
          Source](https://redirect.github.com/vorner/pyo3-log/compare/v0.13.1...v0.13.2)\n\n-
          Support for pyo3 0.27 ([#&#8203;72](https://redirect.github.com/vorner/pyo3-log/issues/72)).\n\n</details>\n\n<details>\n<summary>davidhewitt/pythonize
          (pythonize)</summary>\n\n### [`v0.28.0`](https://redirect.github.com/davidhewitt/pythonize/blob/HEAD/CHANGELOG.md#0280---2026-02-18)\n\n[Compare
          Source](https://redirect.github.com/davidhewitt/pythonize/compare/v0.27.0...v0.28.0)\n\n-
          Bump MSRV to 1.83.\n- Update `pyo3` to 0.28.\n- Support deserializing `dataclass`
          instances to struct-like Rust types.\n- Add `arbitrary_precision` feature\n\n###
          [`v0.27.0`](https://redirect.github.com/davidhewitt/pythonize/blob/HEAD/CHANGELOG.md#0270---2025-11-07)\n\n[Compare
          Source](https://redirect.github.com/davidhewitt/pythonize/compare/v0.26.0...v0.27.0)\n\n-
          Update to PyO3 0.27\n\n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5
          **Schedule**: Branch creation - At any time (no schedule defined), Automerge
          - At any time (no schedule defined).\n\n\U0001F6A6 **Automerge**: Disabled
          by config. Please merge this manually once you are satisfied.\n\n\u267B
          **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry
          checkbox.\n\n\U0001F47B **Immortal**: This PR will be recreated if closed
          unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions)
          if that's undesired.\n\n---\n\n - [ ] <!-- rebase-check -->If you want to
          rebase/retry this PR, check this box\n\n---\n\nThis PR was generated by
          [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/vexxhost/magnum-cluster-api).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIyLjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->\n"
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/837
        commit_id: c627df14f3f325bb901b8e40dbc5a674c5806f9d
        patchset: c627df14f3f325bb901b8e40dbc5a674c5806f9d
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/magnum-cluster-api
          name: vexxhost/magnum-cluster-api
          short_name: magnum-cluster-api
          src_dir: src/github.com/vexxhost/magnum-cluster-api
        topic: null
      job: magnum-cluster-api-hydrophone-v1.32.12-cilium
      jobtags: []
      max_attempts: 3
      message: Zml4KGRlcHMpOiB1cGRhdGUgcHlvMwoKVGhpcyBQUiBjb250YWlucyB0aGUgZm9sbG93aW5nIHVwZGF0ZXM6Cgp8IFBhY2thZ2UgfCBUeXBlIHwgVXBkYXRlIHwgQ2hhbmdlIHwKfC0tLXwtLS18LS0tfC0tLXwKfCBbcHlvM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5bzMvcHlvMykgfCBkZXBlbmRlbmNpZXMgfCBtaW5vciB8IGAwLjI2LjBgIOKGkiBgMC4yOC4wYCB8CnwgW3B5bzMtYXN5bmMtcnVudGltZXNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMtYXN5bmMtcnVudGltZXMpIHwgZGVwZW5kZW5jaWVzIHwgbWlub3IgfCBgMC4yNi4wYCDihpIgYDAuMjguMGAgfAp8IFtweW8zLWxvZ10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3Zvcm5lci9weW8zLWxvZykgfCBkZXBlbmRlbmNpZXMgfCBwYXRjaCB8IGAwLjEzLjFgIOKGkiBgMC4xMy4zYCB8CnwgW3B5dGhvbml6ZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2RhdmlkaGV3aXR0L3B5dGhvbml6ZSkgfCBkZXBlbmRlbmNpZXMgfCBtaW5vciB8IGAwLjI2LjBgIOKGkiBgMC4yOC4wYCB8CgotLS0KCiMjIyBSZWxlYXNlIE5vdGVzCgo8ZGV0YWlscz4KPHN1bW1hcnk+cHlvMy9weW8zIChweW8zKTwvc3VtbWFyeT4KCiMjIyBbYHYwLjI4LjJgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3JlbGVhc2VzL3RhZy92MC4yOC4yKTogUHlPMyAwLjI4LjIKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5bzMvcHlvMy9jb21wYXJlL3YwLjI4LjEuLi52MC4yOC4yKQoKVGhpcyBwYXRjaCByZWxlYXNlIGNvbnRhaW5zIGEgc291bmRuZXNzIGZpeCBmb3Igc3ViY2xhc3NpbmcgbmF0aXZlIHR5cGVzIHN1Y2ggYXMgYFB5TGlzdGAgd2l0aCB0aGUgYGFiaTNgIGZlYXR1cmUgZW5hYmxlZCB3aGVuIHRhcmdldGluZyBhIG1pbmltdW0gdmVyc2lvbiBvZiBQeXRob24gMy4xMiBvciBoaWdoZXIuIChTdXBwb3J0IGZvciBkb2luZyBzdWNoIHN1YmNsYXNzaW5nIHdhcyBuZXdseSBhZGRlZCBpbiBQeU8zIDAuMjguMC4pCgpQeU8zIDAuMjguMCBhbmQgMC4yOC4xIHdpbGwgYmUgeWFua2VkLgoKVGhpcyByZWxlYXNlIGFsc28gY29udGFpbnMgYSBjb3JyZWN0aW9uIHRvIHRoZSBGRkkgZGVmaW5pdGlvbiBgUHlUeXBlX0dldFR5cGVEYXRhU2l6ZWAgYW5kIGluY29ycmVjdGx5LWdlbmVyYXRlZCBgX19xdWFsbmFtZV9fYCBvbiBgI1tweWNsYXNzXWAgZW51bSB2YXJpYW50IHR5cGVzIHdoZW4gdXNpbmcgYCNbcHlvMyhuYW1lID0gIi4uLiIpXWAgb3B0aW9uIHRvIHJlbmFtZSB0aGUgZW51bSBhbmQvb3IgdmFyaWFudC4KClRoYW5rIHlvdSB0byB0aGUgZm9sbG93aW5nIGNvbnRyaWJ1dG9ycyBmb3IgdGhlIGltcHJvdmVtZW50czoKCltAJiM4MjAzO2RhdmlkaGV3aXR0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vZGF2aWRoZXdpdHQpCltAJiM4MjAzO0ljeG9sdV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL0ljeG9sdSkKW0AmIzgyMDM7bmdvbGRiYXVtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbmdvbGRiYXVtKQoKIyMjIFtgdjAuMjguMWBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weW8zL3B5bzMvYmxvYi9IRUFEL0NIQU5HRUxPRy5tZCMwMjgxLS0tMjAyNi0wMi0xNCkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5bzMvcHlvMy9jb21wYXJlL3YwLjI4LjAuLi52MC4yOC4xKQoKIyMjIyMgRml4ZWQKCi0gRml4IGAqYXJnc2AgLyBgKiprd2FyZ3NgIHN1cHBvcnQgaW5gIGV4cGVyaW1lbnRhbC1hc3luY2AgZmVhdHVyZSAocmVncmVzc2VkIGluIDAuMjguMCkuIFsjJiM4MjAzOzU3NzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzcxKQotIEZpeCBgY2xpcHB5OjpkZWNsYXJlX2ludGVyaW9yX211dGFibGVfY29uc3RgIHdhcm5pbmcgaW5zaWRlIGAjW3B5Y2xhc3NdYCBnZW5lcmF0ZWQgY29kZSBvbiBlbnVtcy4gWyMmIzgyMDM7NTc3Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3NzIpCi0gRml4IGBhbWJpZ3VvdXNfYXNzb2NpYXRlZF9pdGVtc2AgY29tcGlsYXRpb24gZXJyb3Igd2hlbiBkZXJpdmluZyBgRnJvbVB5T2JqZWN0YCBvciB1c2luZyBgI1tweWNsYXNzKGZyb21fcHlfb2JqZWN0KV1gIG1hY3JvIG9uIGVudW1zIHdpdGggYEVycm9yYCB2YXJpYW50LiBbIyYjODIwMzs1Nzg0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTc4NCkKLSBGaXggYF9fcXVhbG5hbWVfX2AgZm9yIGNvbXBsZXggYCNbcHljbGFzc11gIGVudW0gdmFyaWFudHMgdG8gaW5jbHVkZSB0aGUgZW51bSBuYW1lLiBbIyYjODIwMzs1Nzk2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTc5NikKCiMjIyBbYHYwLjI4LjBgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlvMy9weW8zL2Jsb2IvSEVBRC9DSEFOR0VMT0cubWQjMDI4MC0tLTIwMjYtMDItMDEpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weW8zL3B5bzMvY29tcGFyZS92MC4yNy4yLi4udjAuMjguMCkKCiMjIyMjIFBhY2thZ2luZwoKLSBCdW1wIE1TUlYgdG8gUnVzdCAxLjgzLiBbIyYjODIwMzs1NTMxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTUzMSkKLSBCdW1wIG1pbmltdW0gc3VwcG9ydGVkIGBxdW90ZWAgdmVyc2lvbiB0byAxLjAuMzcuIFsjJiM4MjAzOzU1MzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTMxKQotIEJ1bXAgc3VwcG9ydGVkIEdyYWFsUHkgdmVyc2lvbiB0byAyNS4wLiBbIyYjODIwMzs1NTQyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU0MikKLSBEcm9wIGBtZW1vZmZzZXRgIGRlcGVuZGVuY3kuIFsjJiM4MjAzOzU1NDVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTQ1KQotIFN1cHBvcnQgZm9yIGZyZWUtdGhyZWFkZWQgUHl0aG9uIGlzIG5vdyBvcHQtb3V0IHJhdGhlciB0aGFuIG9wdC1pbi4gWyMmIzgyMDM7NTU2NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1NjQpCi0gQnVtcCBgdGFyZ2V0LWxleGljb25gIGRlcGVuZGVuY3kgdG8gMC4xMy4zLiBbIyYjODIwMzs1NTcxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU3MSkKLSBEcm9wIGBpbmRvY2AgYW5kIGB1bmluZGVudGAgZGVwZW5kZW5jaWVzLiBbIyYjODIwMzs1NjA4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTYwOCkKCiMjIyMjIEFkZGVkCgotIEFkZCBgX19pbml0X19gIHN1cHBvcnQgaW4gYCNbcHltZXRob2RzXWAuIFsjJiM4MjAzOzQ5NTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC80OTUxKQotIEV4cG9zZSBgUHlTdXBlcmAgb24gUHlQeSwgR3JhYWxQeSBhbmQgQUJJMyBbIyYjODIwMzs0OTUxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNDk1MSkKLSBBZGQgYFB5U3RyaW5nOjpmcm9tX2ZtdGAgYW5kIGBweV9mb3JtYXQhYCBtYWNyby4gWyMmIzgyMDM7NTE5OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzUxOTkpCi0gQWRkIGAjW3B5Y2xhc3MobmV3ID0gImZyb21fZmllbGRzIildYCBvcHRpb24uIFsjJiM4MjAzOzU0MjFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDIxKQotIEFkZCBgcHlvMzo6YnVmZmVyOjpQeVVudHlwZWRCdWZmZXJgLCBhIHR5cGUtZXJhc2VkIGZvcm0gb2YgYFB5QnVmZmVyPFQ+YC4gWyMmIzgyMDM7NTQ1OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NTgpCi0gQWRkIGBQeUJ5dGVzOjpuZXdfd2l0aF93cml0ZXJgIFsjJiM4MjAzOzU1MTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTE3KQotIEFkZCBgUHlDbGFzczo6TkFNRWAuIFsjJiM4MjAzOzU1NzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTc5KQotIEFkZCBgcHlvM19idWlsZF9jb25maWc6OmFkZF9saWJweXRob25fcnBhdGhfbGlua19hcmdzYC4gWyMmIzgyMDM7NTYyNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2MjQpCi0gQWRkIGBQeUJhY2tlZFN0cjo6Y2xvbmVfcmVmYCBhbmQgYFB5QmFja2VkQnl0ZXM6OmNsb25lX3JlZmAgbWV0aG9kcy4gWyMmIzgyMDM7NTY1NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2NTQpCi0gQWRkIGBQeUNhcHN1bGU6Om5ld193aXRoX3BvaW50ZXJgIGFuZCBgUHlDYXBzdWxlOjpuZXdfd2l0aF9wb2ludGVyX2FuZF9kZXN0cnVjdG9yYCBmb3IgY3JlYXRpbmcgY2Fwc3VsZXMgd2l0aCByYXcgcG9pbnRlcnMuIFsjJiM4MjAzOzU2ODldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81Njg5KQotIEFkZCBgI1tkZWxldGVyXWAgYXR0cmlidXRlIHRvIGltcGxlbWVudCBwcm9wZXJ0eSBkZWxldGVycyBpbiBgI1ttZXRob2RzXWAuIFsjJiM4MjAzOzU2OTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81Njk5KQotIEFkZCBgSW50b1B5T2JqZWN0YCBhbmQgYEZyb21QeU9iamVjdGAgaW1wbGVtZW50YXRpb25zIGZvciBgdXVpZDo6Tm9uTmlsVXVpZGAuIFsjJiM4MjAzOzU3MDddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzA3KQotIEFkZCBgUHlCYWNrZWRTdHI6OmFzX3N0cmAgYW5kIGBQeUJhY2tlZFN0cjo6YXNfcHlfc3RyYCBtZXRob2RzLiBbIyYjODIwMzs1NzIzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTcyMykKLSBBZGQgc3VwcG9ydCBmb3Igc3ViY2xhc3NpbmcgbmF0aXZlIHR5cGVzIChgUHlEaWN0YCwgZXhjZXB0aW9ucywgLi4uKSB3aGVuIGJ1aWxkaW5nIGZvciBhYmkzIG9uIFB5dGhvbiAzLjEyKy4gWyMmIzgyMDM7NTczM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MzMpCi0gQWRkIHN1cHBvcnQgZm9yIHN1YmNsYXNzaW5nIGBQeUxpc3RgIHdoZW4gYnVpbGRpbmcgZm9yIFB5dGhvbiAzLjEyKy4gWyMmIzgyMDM7NTczNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MzQpCi0gRkZJIGRlZmluaXRpb25zOgogIC0gQWRkIEZGSSBkZWZpbml0aW9ucyBgUHlFdmFsX0dldEZyYW1lQnVpbHRpbnNgLCBgUHlFdmFsX0dldEZyYW1lR2xvYmFsc2AgYW5kIGBQeUV2YWxfR2V0RnJhbWVMb2NhbHNgIG9uIFB5dGhvbiAzLjEzIGFuZCB1cC4gWyMmIzgyMDM7NTU5MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1OTApCiAgLSBBZGQgRkZJIGRlZmluaXRpb25zIGBQeU9iamVjdF9OZXdgLCBgUHlPYmplY3RfTmV3VmFyYCwgYFB5T2JqZWN0X0dDX1Jlc2l6ZWAsIGBQeU9iamVjdF9HQ19OZXdgLCBhbmQgYFB5T2JqZWN0X0dDX05ld1ZhcmAuIFsjJiM4MjAzOzU1OTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTkxKQogIC0gQWRkZWQgRkZJIGRlZmluaXRpb25zIGFuZCBhbiB1bnNhZmUgUnVzdCBBUEkgd3JhcHBpbmcgYFB5X0JFR0lOX0NSSVRJQ0FMX1NFQ1RJT05fTVVURVhgIGFuZCBgUHlfQkVHSU5fQ1JJVElDQUxfU0VDVElPTl9NVVRFWDJgLiBbIyYjODIwMzs1NjQyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY0MikKICAtIEFkZCBGRkkgZGVmaW5pdGlvbiBgUHlEaWN0X0dldEl0ZW1TdHJpbmdSZWZgIG9uIFB5dGhvbiAzLjEzIGFuZCB1cC4gWyMmIzgyMDM7NTY1OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2NTkpCiAgLSBBZGQgRkZJIGRlZmluaXRpb24gYFB5SXRlcl9OZXh0SXRlbWAgb24gUHl0aG9uIDMuMTQgYW5kIHVwLCBhbmQgYGNvbXBhdDo6UHlJdGVyX05leHRJdGVtYCBmb3Igb2xkZXIgdmVyc2lvbnMuIFsjJiM4MjAzOzU2NjFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjYxKQogIC0gQWRkIEZGSSBkZWZpbml0aW9ucyBgUHlUaHJlYWRTdGF0ZV9HZXRJbnRlcnByZXRlcmAgYW5kIGBQeVRocmVhZFN0YXRlX0dldElEYCBvbiBQeXRob24gMy45KywgYFB5VGhyZWFkU3RhdGVfRW50ZXJUcmFjaW5nYCBhbmQgYFB5VGhyZWFkU3RhdGVfTGVhdmVUcmFjaW5nYCBvbiBQeXRob24gMy4xMSssIGBQeVRocmVhZFN0YXRlX0dldFVuY2hlY2tlZGAgb24gUHl0aG9uIDMuMTMrLCBhbmQgYGNvbXBhdDo6UHlUaHJlYWRTdGF0ZV9HZXRVbmNoZWNrZWRgLiBbIyYjODIwMzs1NzExXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTcxMSkKICAtIEFkZCBGRkkgZGVmaW5pdGlvbnMgYFB5SW1wb3J0X0ltcG9ydE1vZHVsZUF0dHJgIGFuZCBgUHlJbXBvcnRfSW1wb3J0TW9kdWxlQXR0clN0cmluZ2Agb24gUHl0aG9uIDMuMTQrLiBbIyYjODIwMzs1NzM3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTczNykKICAtIEFkZCBGRkkgZGVmaW5pdGlvbnMgZm9yIHRoZSBgUHlBQklJbmZvYCBhbmQgYFB5TW9kRXhwb3J0YCBBUElzIGF2YWlsYWJsZSBpbiBQeXRob24gMy4xNS4gWyMmIzgyMDM7NTc0Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3NDYpCi0gYGV4cGVyaW1lbnRhbC1pbnNwZWN0YDoKICAtIEVtaXQgYmFzZSBjbGFzc2VzLiBbIyYjODIwMzs1MzMxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTMzMSkKICAtIEVtaXQgYEB0eXBpbmcuZmluYWxgIG9uIGZpbmFsIGNsYXNzZXMuIFsjJiM4MjAzOzU1NTJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTUyKQogIC0gR2VuZXJhdGUgbmVzdGVkIGNsYXNzZXMgZm9yIGNvbXBsZXggZW51bXMuIFsjJiM4MjAzOzU3MDhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzA4KQogIC0gRW1pdCBgYXN5bmNgIGtleXdvcmQgZm9yIGFzeW5jIGZ1bmN0aW9ucy4gWyMmIzgyMDM7NTczMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MzEpCgojIyMjIyBDaGFuZ2VkCgotIENhbGwgYHN5cy51bnJhaXNhYmxlaG9va2AgaW5zdGVhZCBvZiBgUHlFcnJfUHJpbnRgIGlmIHBhbmlja2luZyBvbiBudWxsIEZGSSBwb2ludGVyIGluIGBCb3VuZGAsIGBCb3Jyb3dlZGAgYW5kIGBQeWAgY29uc3RydWN0b3JzLiBbIyYjODIwMzs1NDk2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ5NikKLSBVc2UgUEVQLTQ4OSBtdWx0aS1waGFzZSBpbml0aWFsaXphdGlvbiBmb3IgYCNbcHltb2R1bGVdYC4gWyMmIzgyMDM7NTUyNV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1MjUpCi0gRGVwcmVjYXRlIGltcGxpY2l0IGJ5LXZhbHVlIGltcGxlbWVudGF0aW9uIG9mIGBGcm9tUHlPYmplY3RgIGZvciBgI1tweWNsYXNzXWAuIFsjJiM4MjAzOzU1NTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTUwKQotIERlcHJlY2F0ZSBgUHlUeXBlSW5mbzo6TkFNRWAgYW5kIGBQeVR5cGVJbmZvOjpNT0RVTEVgLiBbIyYjODIwMzs1NTc5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU3OSkKLSBEZXByZWNhdGUgYFB5PFQ+Ojpmcm9tX3tvd25lZCxib3Jyb3dlZH1bb3Jfe2VycixvcHR9XWAgY29uc3RydWN0b3JzIGZyb20gcmF3IHBvaW50ZXIuIFsjJiM4MjAzOzU1ODVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTg1KQotIERlcHJlY2F0ZSBGRkkgZGVmaW5pdGlvbnMgYFB5RXZhbF9BY3F1aXJlTG9ja2AgYW5kIGBQeUV2YWxfUmVsZWFzZUxvY2tgLiBbIyYjODIwMzs1NTkwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU5MCkKLSBSZWxheCBgJ3B5OiAnYWAgYm91bmQgaW4gYFB5OjpleHRyYWN0YC4gWyMmIzgyMDM7NTU5NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1OTQpCi0gQWRkIGEgYFQ6IFB5VHlwZUNoZWNrYCBib3VuZCB0byB0aGUgYEludG9QeU9iamVjdGAgaW1wbGVtZW50YXRpb25zIG9uIGBCb3VuZDxUPmAsIGBCb3Jyb3dlZDxUPmAgYW5kIGBQeTxUPmAuIFsjJiM4MjAzOzU2NDBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjQwKQotIFRoZSBgd2l0aF9jcml0aWNhbF9zZWN0aW9uYCBhbmQgYHdpdGhfY3JpdGljYWxfc2VjdGlvbjJgIGZ1bmN0aW9ucyBhcmUgbW92ZWQgdG8gYHB5bzM6OnN5bmM6OmNyaXRpY2FsX3NlY3Rpb25gLiBbIyYjODIwMzs1NjQyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY0MikKLSBVc2UgYFB5SXRlcl9OZXh0SXRlbWAgaW4gYFB5SXRlcmF0b3I6Om5leHRgIGltcGxlbWVudGF0aW9uLiBbIyYjODIwMzs1NjYxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY2MSkKLSBgSW50b1B5T2JqZWN0YCBmb3Igc2ltcGxlIGVudW1zIG5vdyB1c2VzIGEgc2luZ2xldG9uIHZhbHVlLCBhbGxvd2luZyBpZGVudGl0eSAocHl0aG9uIGBpc2ApIGNvbXBhcmlzb25zLiBbIyYjODIwMzs1NjY1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY2NSkKLSBBbGxvdyBhbnkgYFNlcXVlbmNlW2ludF1gIGluIGBGcm9tUHlPYmplY3RgIG9uIGBDb3c8W3U4XT5gIGFuZCBjaGFuZ2UgdGhlIGVycm9yIHR5cGUgdG8gYFB5RXJyYC4gWyMmIzgyMDM7NTY2N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2NjcpCi0gYGFzeW5jYCBweW1ldGhvZHMgbm93IGJvcnJvdyBgc2VsZmAgb25seSBmb3IgdGhlIGR1cmF0aW9uIG9mIGF3YWl0aW5nIHRoZSBmdXR1cmUsIG5vdCB0aGUgZW50aXJlIG1ldGhvZCBjYWxsLiBbIyYjODIwMzs1Njg0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY4NCkKLSBDaGFuZ2UgYENhc3RFcnJvcmAgZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZGlyZWN0bHkgZGVzY3JpYmUgdGhlICJpcyBub3QgYW4gaW5zdGFuY2Ugb2YiIGZhaWx1cmUgY29uZGl0aW9uLiBbIyYjODIwMzs1NjkzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY5MykKLSBBZGQgYCNbaW5saW5lXWAgaGludHMgdG8gbWFueSBtZXRob2RzIG9uIGBQeUJhY2tlZFN0cmAuIFsjJiM4MjAzOzU3MjNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzIzKQotIFJlbW92ZSByZWR1bmRhbnQgaW50ZXJuYWwgY291bnRlcnMgZnJvbSBgQm91bmRTZXRJdGVyYXRvcmAgYW5kIGBCb3VuZEZyb3plblNldEl0ZXJhdG9yYC4gWyMmIzgyMDM7NTcyNV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MjUpCi0gSW1wbGVtZW50IGBQeUl0ZXJhdG9yOjpzaXplX2hpbnRgIG9uIGFiaTMgYnVpbGRzIChwcmV2aW91c2x5IHdhcyBvbmx5IG9uIHVubGltaXRlZCBBUEkgYnVpbGRzKS4gWyMmIzgyMDM7NTcyN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MjcpCi0gRGVwcmVjYXRlIEZGSSBkZWZpbml0aW9uIGBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrYCAoZGVwcmVjYXRlZCBpbiBQeXRob24gMy4xMykuIFsjJiM4MjAzOzU3MzddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzM3KQotIGAjW25ld11gIGNhbiBub3cgcmV0dXJuIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gWyMmIzgyMDM7NTczOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MzkpCi0gYGV4cGVyaW1lbnRhbC1pbnNwZWN0YDoKICAtIEludHJvZHVjZSBgVHlwZUhpbnRgIGFuZCBtYWtlIHVzZSBvZiBpdCB0byBlbmNvZGUgdHlwZSBoaW50IGFubm90YXRpb25zLiBbIyYjODIwMzs1NDM4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQzOCkKICAtIFJlbmFtZSBgUHlUeXBle0luZm8sQ2hlY2t9OjpUWVBFX0lORk9gIGludG8gYFB5VHlwZXtJbmZvLENoZWNrfTo6VFlQRV9ISU5UYC4gWyMmIzgyMDM7NTQzOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0MzgpIFsjJiM4MjAzOzU2MTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjE5KSBbIyYjODIwMzs1NjQxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTY0MSkKICAtIEZpbGwgYW5ub3RhdGlvbnMgb24gZnVuY3Rpb24gYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGZvciBhbGwgdHlwZXMgc3VwcG9ydGVkIG5hdGl2ZWx5IGJ5IFB5TzMuIFsjJiM4MjAzOzU2MzRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjM0KSBbIyYjODIwMzs1NjM3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTYzNykgWyMmIzgyMDM7NTYzOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2MzkpCiAgLSBVc2UgYF90eXBlc2hlZC5JbmNvbXBsZXRlYCBpbnN0ZWFkIG9mIGB0eXBpbmcuQW55YCBhcyBkZWZhdWx0IHR5cGUgaGludCwgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3BvdCBpbmNvbXBsZXRlIHRyYWl0IGltcGxlbWVudGF0aW9ucy4gWyMmIzgyMDM7NTc0NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3NDQpCiAgLSBVc2UgZ2VuZXJhbCBQeXRob24gZXhwcmVzc2lvbiBzeW50YXggZm9yIHR5cGUgaGludHMuIFsjJiM4MjAzOzU2NzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjcxKQoKIyMjIyMgUmVtb3ZlZAoKLSBSZW1vdmUgYWxsIGZ1bmN0aW9uYWxpdHkgZGVwcmVjYXRlZCBpbiBQeU8zIDAuMjUgYW5kIDAuMjYuIFsjJiM4MjAzOzU3NDBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NzQwKQotIEZGSSBkZWZpbml0aW9uczoKICAtIFJlbW92ZSBGRkkgZGVmaW5pdGlvbiBgUHlFdmFsX0dldENhbGxTdGF0c2AgKHJlbW92ZWQgZnJvbSBDUHl0aG9uIGluIFB5dGhvbiAzLjcpLiBbIyYjODIwMzs1NTkwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU5MCkKICAtIFJlbW92ZSBGRkkgZGVmaW5pdGlvbnMgYFB5RXZhbF9BY3F1aXJlTG9ja2AgYW5kIGBQeUV2YWxfUmVsZWFzZUxvY2tgIG9uIFB5dGhvbiAzLjEzIGFuZCB1cC4gWyMmIzgyMDM7NTU5MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1OTApCiAgLSBSZW1vdmUgcHJpdmF0ZSBGRkkgZGVmaW5pdGlvbnMgYF9QeU9iamVjdF9OZXdgLCBgX1B5T2JqZWN0X05ld1ZhcmAsIGBfUHlPYmplY3RfR0NfUmVzaXplYCwgYF9QeU9iamVjdF9HQ19OZXdgLCBhbmQgYF9QeU9iamVjdF9HQ19OZXdWYXJgLiBbIyYjODIwMzs1NTkxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU5MSkKICAtIFJlbW92ZSBwcml2YXRlIEZGSSBkZWZpbml0aW9ucyBgX1B5RGljdF9TZXRJdGVtX0tub3duSGFzaGAsIGBfUHlEaWN0X05leHRgLCBgX1B5RGljdF9OZXdQcmVzaXplZGAsIGBfUHlEaWN0X0NvbnRhaW5zX0tub3duSGFzaGAsIGFuZCBgX1B5RGljdF9Db250YWluc2AuIFsjJiM4MjAzOzU2NTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjU5KQogIC0gUmVtb3ZlIHByaXZhdGUgRkZJIGRlZmluaXRpb25zIGBfUHlGcmFtZUV2YWxGdW5jdGlvbmAsIGBfUHlJbnRlcnByZXRlclN0YXRlX0dldEV2YWxGcmFtZUZ1bmNgIGFuZCBgX1B5SW50ZXJwcmV0ZXJTdGF0ZV9TZXRFdmFsRnJhbWVGdW5jYC4gWyMmIzgyMDM7NTcxMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MTEpCiAgLSBSZW1vdmUgcHJpdmF0ZSBGRkkgZGVmaW5pdGlvbnMgYF9QeUltcG9ydF9Jc0luaXRpYWxpemVkYCwgYF9QeUltcG9ydF9TZXRNb2R1bGVgLCBgX1B5SW1wb3J0X1NldE1vZHVsZVN0cmluZ2AsIGBfUHlJbXBvcnRfQWNxdWlyZUxvY2tgLCBgX1B5SW1wb3J0X1JlbGVhc2VMb2NrYCwgYF9QeUltcG9ydF9GaW5kQnVpbHRpbmAsIGBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdGAsIGBfUHlJbXBvcnRfRml4dXBCdWlsdGluYCwgYW5kIGBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3RgLiBbIyYjODIwMzs1NzM3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTczNykKCiMjIyMjIEZpeGVkCgotIEZpeCBgUHlNb2R1bGVNZXRob2RzOjphZGRfc3VibW9kdWxlKClgIHRvIHVzZSB0aGUgbGFzdCBzZWdtZW50IG9mIHRoZSBzdWJtb2R1bGUgbmFtZSBhcyB0aGUgYXR0cmlidXRlIG5hbWUgb24gdGhlIHBhcmVudCBtb2R1bGUgaW5zdGVhZCBvZiB1c2luZyB0aGUgZnVsbCBuYW1lLiBbIyYjODIwMzs1Mzc1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTM3NSkKLSBMaW5rIHdpdGggbGlicHl0aG9uIGZvciBDeWd3aW4gZXh0ZW5zaW9uIG1vZHVsZXMuIFsjJiM4MjAzOzU1NzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTcxKQotIExpbmsgYWdhaW5zdCB0aGUgbGltaXRlZCBBUEkgRExMIGZvciBDeWd3aW4gd2hlbiBhYmkzIGlzIHVzZWQuIFsjJiM4MjAzOzU1NzRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTc0KQotIEhhbmRsZSBlcnJvcnMgaW4gYFB5SXRlcmF0b3JgIHdoZW4gY2FsbGluZyBgc2l6ZV9oaW50YCBbIyYjODIwMzs1NjA0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTYwNCkKLSBMaW5rIHdpdGggbGlicHl0aG9uIGZvciBpT1MgZXh0ZW5zaW9uIG1vZHVsZXMuIFsjJiM4MjAzOzU2MDVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjA1KQotIENvcnJlY3QgYEludG9QeU9iamVjdGAgb3V0cHV0IHR5cGUgb2YgYFB5QmFja2VkU3RyYCB0byBiZSBgUHlTdHJpbmdgLCBub3QgYFB5QW55YC4gWyMmIzgyMDM7NTY1NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2NTUpCi0gRml4IGBhc3luY2AgZnVuY3Rpb25zIHRvIHJldHVybiBgTm9uZWAgcmF0aGVyIHRoYW4gZW1wdHkgdHVwbGUgYCgpYC4gWyMmIzgyMDM7NTY4NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2ODUpCi0gRml4IGNvbXBpbGUgZXJyb3Igd2hlbiB1c2luZyByZWZlcmVuY2VzIHRvIGAjW3B5Y2xhc3NdYCB0eXBlcyAoZS5nLiBgJk15Q2xhc3NgKSBhcyBhcmd1bWVudHMgdG8gYXN5bmMgYCNbcHlmdW5jdGlvbl1gcy4gWyMmIzgyMDM7NTcyNV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MjUpCi0gRkZJIGRlZmluaXRpb25zOgogIC0gRml4IEZGSSBkZWZpbml0aW9uIGBQeU1lbWJlckRlc2NyT2JqZWN0LmRfbWVtYmVyYCB0byB1c2UgYFB5TWVtYmVyRGVmYCBmb3IgUHl0aG9uIDMuMTErICh3YXMgaW5jb3JyZWN0bHkgYFB5R2V0U2V0RGVmYCkuIFsjJiM4MjAzOzU2NDddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjQ3KQogIC0gTWFyayBGRkkgZGVmaW5pdGlvbiBgUHlUaHJlYWRTdGF0ZV9HZXRGcmFtZWAgYXZhaWxhYmxlIHdpdGggYWJpMyBpbiAzLjEwKy4gWyMmIzgyMDM7NTcxMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MTEpCiAgLSBGaXggRkZJIGRlZmluaXRpb24gYFB5SW1wb3J0X0dldE1vZHVsZWAgb24gUHlQeS4gWyMmIzgyMDM7NTczN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU3MzcpCi0gYGV4cGVyaW1lbnRhbC1pbnNwZWN0YDoKICAtIGZpeCBgX19uZXdfX2AgcmV0dXJuIHR5cGUgdG8gYmUgdGhlIGJ1aWx0IG9iamVjdCB0eXBlIGFuZCBub3QgYE5vbmVgLiBbIyYjODIwMzs1NTU1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTU1NSkKICAtIGZpeCBpbXBvcnRzIG9mIGRlY29yYXRvcnMuIFsjJiM4MjAzOzU2MThdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NjE4KQogIC0gZml4IHRoZSByZXR1cm4gdHlwZSBhbm5vdGF0aW9uIG9mIGBQeVJlc3VsdDwoKT5gIChtdXN0IGJlIGBOb25lYCBhbmQgbm90IGB0dXBsZWApIFsjJiM4MjAzOzU2NzRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81Njc0KQoKIyMjIFtgdjAuMjcuMmBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weW8zL3B5bzMvYmxvYi9IRUFEL0NIQU5HRUxPRy5tZCMwMjcyLS0tMjAyNS0xMS0zMCkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5bzMvcHlvMy9jb21wYXJlL3YwLjI3LjEuLi52MC4yNy4yKQoKIyMjIyMgQ2hhbmdlZAoKLSBEaXNhYmxlIHN1YmNsYXNzaW5nIGBQeURpY3RgIG9uIEdyYWFsUHkgKHVuc3VwcG9ydGVkIGZvciBub3csIG1heSBjcmFzaCBhdCBydW50aW1lKS4gWyMmIzgyMDM7NTY1M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2NTMpCgojIyMjIyBGaXhlZAoKLSBGaXggY3Jhc2ggd2hlbiBjb21waWxpbmcgb24gUnVzdCAxLjkyKyB3aXRoIGJvdGggZGVidWcgYXNzZXJ0aW9ucyBhbmQgb3B0aW1pemF0aW9ucyBlbmFibGVkLiBbIyYjODIwMzs1NjM4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTYzOCkKLSBGaXggRkZJIGRlZmluaXRpb24gb2YgYFB5RGljdE9iamVjdGAgb24gUHlQeS4gWyMmIzgyMDM7NTY1M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU2NTMpCgojIyMgW2B2MC4yNy4xYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5bzMvcHlvMy9ibG9iL0hFQUQvQ0hBTkdFTE9HLm1kIzAyNzEtLS0yMDI1LTEwLTIxKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlvMy9weW8zL2NvbXBhcmUvdjAuMjcuMC4uLnYwLjI3LjEpCgojIyMjIyBGaXhlZAoKLSBGaXggYGNsaXBweTpkZWNsYXJlX2ludGVyaW9yX211dGFibGVfY29uc3RgIHdhcm5pbmcgZnJvbSBgI1tweWZ1bmN0aW9uXWAuIFsjJiM4MjAzOzU1MzhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTM4KQotIEV4cG9zZSBgcHlvMzo6dHlwZXM6OlB5U2VuZFJlc3VsdGAgaW4gcHVibGljIEFQSS4gWyMmIzgyMDM7NTUzOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1MzkpCgojIyMgW2B2MC4yNy4wYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5bzMvcHlvMy9ibG9iL0hFQUQvQ0hBTkdFTE9HLm1kIzAyNzAtLS0yMDI1LTEwLTE5KQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlvMy9weW8zL2NvbXBhcmUvdjAuMjYuMC4uLnYwLjI3LjApCgojIyMjIyBQYWNrYWdpbmcKCi0gRXh0ZW5kIHJhbmdlIG9mIHN1cHBvcnRlZCB2ZXJzaW9ucyBvZiBgaGFzaGJyb3duYCBvcHRpb25hbCBkZXBlbmRlbmN5IHRvIGluY2x1ZGUgdmVyc2lvbiAwLjE2LiBbIyYjODIwMzs1NDI4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQyOCkKLSBCdW1wIG9wdGlvbmFsIGBudW0tYmlnaW50YCBkZXBlbmRlbmN5IG1pbmltdW0gdmVyc2lvbiB0byAwLjQuNC4gWyMmIzgyMDM7NTQ3MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NzEpCi0gVGVzdCBhZ2FpbnN0IFB5dGhvbiAzLjE0IGZpbmFsIHJlbGVhc2UuIFsjJiM4MjAzOzU0OTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDk5KQotIERyb3Agc3VwcG9ydCBmb3IgUHlQeSAzLjkgYW5kIDMuMTAuIFsjJiM4MjAzOzU1MTZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTE2KQotIFByb3ZpZGUgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZSB3aGVuIGJ1aWxkaW5nIGFuIG91dGRhdGVkIFB5TzMgZm9yIGEgdG9vLW5ldyBQeXRob24gdmVyc2lvbi4gWyMmIzgyMDM7NTUxOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1MTkpCgojIyMjIyBBZGRlZAoKLSBBZGQgYEZyb21QeU9iamVjdE93bmVkYCBhcyBjb252ZW5pZW50IHRyYWl0IGJvdW5kIGZvciBgRnJvbVB5T2JqZWN0YCB3aGVuIHRoZSBkYXRhIGlzIG5vdCBib3Jyb3dlZCBmcm9tIFB5dGhvbi4gWyMmIzgyMDM7NDM5MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzQzOTApCi0gQWRkIGBCb3Jyb3dlZDo6ZXh0cmFjdGAsIHNhbWUgYXMgYFB5QW55TWV0aG9kczo6ZXh0cmFjdGAsIGJ1dCBkb2VzIG5vdCByZXN0cmljdCB0aGUgbGlmZXRpbWUgYnkgZGVyZWYuIFsjJiM4MjAzOzQzOTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC80MzkwKQotIGBleHBlcmltZW50YWwtaW5zcGVjdGA6IGJhc2ljIHN1cHBvcnQgZm9yIGAjW2Rlcml2ZShJbnRvUHlPYmplY3QpXWAgKG5vIHN0cnVjdCBmaWVsZHMgc3VwcG9ydCB5ZXQpLiBbIyYjODIwMzs1MzY1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTM2NSkKLSBgZXhwZXJpbWVudGFsLWluc3BlY3RgOiBzdXBwb3J0IGAjW3B5bzMoZ2V0LCBzZXQpXWAgYW5kIGAjW3B5Y2xhc3MoZ2V0X2FsbCwgc2V0X2FsbCldYC4gWyMmIzgyMDM7NTM3MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzUzNzApCi0gQWRkIGBQeVR5cGVDaGVjazo6Y2xhc3NpbmZvX29iamVjdGAgdGhhdCByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIHBhcmFtZXRlciBpbiBgaXNpbnN0YW5jZWAgb3IgYGlzc3ViY2xhc3NgLiBbIyYjODIwMzs1Mzg3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTM4NykKLSBJbXBsZW1lbnQgYFB5VHlwZUluZm9gIG9uIGBkYXRldGltZS4qYCB0eXBlcyBldmVuIHdoZW4gdGhlIGxpbWl0ZWQgQVBJIGlzIGVuYWJsZWQuIFsjJiM4MjAzOzUzODhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81Mzg4KQotIEltcGxlbWVudCBgUHlUeXBlSW5mb2Agb24gYFB5SXRlcmF0b3JgLCBgUHlNYXBwaW5nYCBhbmQgYFB5U2VxdWVuY2VgLiBbIyYjODIwMzs1NDAyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQwMikKLSBJbXBsZW1lbnQgYFB5VHlwZUluZm9gIG9uIGBQeUNvZGVgIHdoZW4gdXNpbmcgdGhlIHN0YWJsZSBBQkkuIFsjJiM4MjAzOzU0MDNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDAzKQotIEltcGxlbWVudCBgUHlUeXBlSW5mb2Agb24gYFB5V2Vha3JlZlJlZmVyZW5jZWAgd2hlbiB1c2luZyB0aGUgc3RhYmxlIEFCSS4gWyMmIzgyMDM7NTQwNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0MDQpCi0gQWRkIGBweW8zOjpzeW5jOjpSd0xvY2tFeHRgIHRyYWl0LCBhbmFsb2dvdXMgdG8gYHB5bzM6OnN5bmM6Ok11dGV4RXh0YCBmb3IgcmVhZHdyaXRlIGxvY2tzLiBbIyYjODIwMzs1NDM1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQzNSkKLSBBZGQgYFB5U3RyaW5nOjpmcm9tX2J5dGVzYC4gWyMmIzgyMDM7NTQzN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0MzcpCi0gSW1wbGVtZW50IGBBc1JlZjxbdThdPmAgZm9yIGBQeUJ5dGVzYC4gWyMmIzgyMDM7NTQ0NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NDUpCi0gQWRkIGBDYXN0RXJyb3JgIGFuZCBgQ2FzdEludG9FcnJvcmAuIFsjJiM4MjAzOzU0NjhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDY4KQotIEFkZCBgUHlDYXBzdWxlTWV0aG9kczo6cG9pbnRlcl9jaGVja2VkYCBhbmQgYFB5Q2Fwc3VsZU1ldGhvZHM6OmlzX3ZhbGlkX2NoZWNrZWRgLiBbIyYjODIwMzs1NDc0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ3NCkKLSBBZGQgYEJvcnJvd2VkOjpjYXN0YCwgYEJvcnJvd2VkOjpjYXN0X2V4YWN0YCBhbmQgYEJvcnJvd2VkOjpjYXN0X3VuY2hlY2tlZGAuIFsjJiM4MjAzOzU0NzVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDc1KQotIEFkZCBjb252ZXJzaW9ucyBmb3IgYGppZmY6OmNpdmlsOjpJU09XZWVrRGF0ZWAuIFsjJiM4MjAzOzU0NzhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDc4KQotIEFkZCBjb252ZXJzaW9ucyBmb3IgYCZDc3RyYCwgYENzdHJpbmdgIGFuZCBgQ293PENzdHI+YC4gWyMmIzgyMDM7NTQ4Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0ODIpCi0gYWRkIGAjW3B5Y2xhc3Moc2tpcF9mcm9tX3B5X29iamVjdCldYCBvcHRpb24sIHRvIG9wdC1vdXQgb2YgdGhlIGBGcm9tUHlPYmplY3Q6IFB5Q2xhc3MgKyBDbG9uZWAgYmxhbmtldCBpbXBsLiBbIyYjODIwMzs1NDg4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ4OCkKLSBBZGQgYFB5RXJyOjphZGRfbm90ZWAuIFsjJiM4MjAzOzU0ODldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDg5KQotIEFkZCBgRnJvbVB5T2JqZWN0YCBpbXBsIGZvciBgQ293PFBhdGg+YCAmIGBDb3c8T3NTdHI+YC4gWyMmIzgyMDM7NTQ5N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0OTcpCi0gQWRkIGAjW3B5Y2xhc3MoZnJvbV9weV9vYmplY3QpXWAgcHljbGFzcyBvcHRpb24sIHRvIG9wdC1pbiB0byB0aGUgZXh0cmFjdGlvbiBvZiBweWNsYXNzZXMgYnkgdmFsdWUgKHJlcXVpcmVzIGBDbG9uZWApLiBbIyYjODIwMzs1NTA2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTUwNikKCiMjIyMjIENoYW5nZWQKCi0gUmV3b3JrIGBGcm9tUHlPYmplY3RgIHRyYWl0IGZvciBmbGV4aWJpbGl0eSBhbmQgcGVyZm9ybWFuY2U6IFsjJiM4MjAzOzQzOTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC80MzkwKQogIC0gQWRkIGEgc2Vjb25kIGxpZmV0aW1lIHRvIGBGcm9tUHlPYmplY3RgLCB0byBhbGxvdyBib3Jyb3dpbmcgZGF0YSBmcm9tIFB5dGhvbiBvYmplY3RzIChlLmcuIGAmc3RyYCBmcm9tIFB5dGhvbiBgc3RyYCkuCiAgLSBSZXBsYWNlIGBleHRyYWN0X2JvdW5kYCB3aXRoIGBleHRyYWN0YCwgd2hpY2ggdGFrZXMgYEJvcnJvd2VkPCdhLCAncHksIFB5QW55PmAuCi0gT3B0aW1pemUgYEZyb21QeU9iamVjdGAgaW1wbGVtZW50YXRpb25zIGZvciBgVmVjPHU4PmAgYW5kIGBbdTg7IE5dYCBmcm9tIGBieXRlc2AgYW5kIGBieXRlYXJyYXlgLiBbIyYjODIwMzs1MjQ0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTI0NCkKLSBEZXByZWNhdGUgYCNbcHlmbl1gIGF0dHJpYnV0ZS4gWyMmIzgyMDM7NTM4NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzUzODQpCi0gRmV0Y2ggdHlwZSBuYW1lIGR5bmFtaWNhbGx5IG9uIGNhc3QgZXJyb3JzIGluc3RlYWQgb2YgdXNpbmcgYFB5VHlwZUNoZWNrOjpOQU1FYC4gWyMmIzgyMDM7NTM4N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzUzODcpCi0gRGVwcmVjYXRlIGBQeVR5cGVDaGVjazo6TkFNRWAgaW4gZmF2b3VyIG9mIGBQeVR5cGVDaGVjazo6Y2xhc3NpbmZvX29iamVjdGAgd2hpY2ggcHJvdmlkZXMgdGhlIHR5cGUgaW5mb3JtYXRpb24gYXQgcnVudGltZS4gWyMmIzgyMDM7NTM4N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzUzODcpCi0gYFB5Q2xhc3NHdWFyZChNdXQpYCBhbmQgYFB5UmVmKE11dClgIGV4dHJhY3Rpb24gbm93IHJldHVybnMgYW4gb3BhcXVlIFJ1c3QgZXJyb3IgWyMmIzgyMDM7NTQxM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0MTMpCi0gRmV0Y2ggdHlwZSBuYW1lIGR5bmFtaWNhbGx5IHdoZW4gZXhwb3J0aW5nIHR5cGVzIGltcGxlbWVudGluZyBgUHlUeXBlSW5mb2Agd2l0aCBgI1tweW1vZHVsZV91c2VdYC4gWyMmIzgyMDM7NTQxNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0MTQpCi0gSW1wcm92ZSBgRGVidWdgIHJlcHJlc2VudGF0aW9uIG9mIGBQeUJ1ZmZlcjxUPmAuIFsjJiM4MjAzOzU0NDJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDQyKQotIGBleHBlcmltZW50YWwtaW5zcGVjdGA6IGNoYW5nZSB0aGUgd2F5IGludHJvc3BlY3Rpb24gZGF0YSBpcyBlbWl0dGVkIGluIHRoZSBiaW5hcmllcyB0byBhdm9pZCBhIHBvaW50ZXIgaW5kaXJlY3Rpb24gYW5kIHNpbXBsaWZ5IHBhcnNpbmcuIFsjJiM4MjAzOzU0NTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDUwKQotIE9wdGltaXplIGBQeTxUPjo6ZHJvcGAgZm9yIHRoZSBjYXNlIHdoZW4gYXR0YWNoZWQgdG8gdGhlIFB5dGhvbiBpbnRlcnByZXRlci4gWyMmIzgyMDM7NTQ1NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NTQpCi0gUmVwbGFjZSBgRG93bmNhc3RFcnJvcmAgYW5kIGBEb3duY2FzdEludG9FcnJvcmAgd2l0aCBgQ2FzdEVycm9yYCBhbmQgYENhc3RJbnRvRXJyb3JgLiBbIyYjODIwMzs1NDY4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ2OCkKLSBFbmFibGUgZmFzdC1wYXRoIGZvciAxMjgtYml0IGludGVnZXIgY29udmVyc2lvbnMgb24gYEdyYWFsUHlgLiBbIyYjODIwMzs1NDcxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ3MSkKLSBEZXByZWNhdGUgYFB5QW55TWV0aG9kczo6ZG93bmNhc3RgIGZ1bmN0aW9ucyBpbiBmYXZvdXIgb2YgYEJvdW5kOjpjYXN0YCBmdW5jdGlvbnMuIFsjJiM4MjAzOzU0NzJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDcyKQotIE1ha2UgYFB5VHlwZUNoZWNrYCBhbiBgdW5zYWZlIHRyYWl0YC4gWyMmIzgyMDM7NTQ3M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NzMpCi0gRGVwcmVjYXRlIHVuY2hlY2tlZCBgUHlDYXBzdWxlTWV0aG9kc2A6IGBwb2ludGVyKClgLCBgcmVmZXJlbmNlKClgLCBhbmQgYGlzX3ZhbGlkKClgLiBbIyYjODIwMzs1NDc0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ3NCkKLSBSZWR1Y2UgbGlmZXRpbWUgb2YgcmV0dXJuIHZhbHVlIGluIGBQeUNhcHN1bGVNZXRob2RzOjpyZWZlcmVuY2VgLiBbIyYjODIwMzs1NDc0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ3NCkKLSBgUHlDYXBzdWxlTWV0aG9kczo6bmFtZWAgbm93IHJldHVybnMgYENhcHN1bGVOYW1lYCB3cmFwcGVyIGluc3RlYWQgb2YgYCZDU3RyYC4gWyMmIzgyMDM7NTQ3NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU0NzQpCi0gRGVwcmVjYXRlIGBpbXBvcnRfZXhjZXB0aW9uX2JvdW5kYCBpbiBmYXZvdXIgb2YgYGltcG9ydF9leGNlcHRpb25gLiBbIyYjODIwMzs1NDgwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ4MCkKLSBgUHlMaXN0OjpnZXRfaXRlbV91bmNoZWNrZWRgLCBgUHlUdXBsZTo6Z2V0X2l0ZW1fdW5jaGVja2VkYCwgYW5kIGBQeVR1cGxlOjpnZXRfYm9ycm93ZWRfaXRlbV91bmNoZWNrZWRgIG5vIGxvbmdlciBjaGVjayBmb3IgbnVsbCB2YWx1ZXMgYXQgdGhlIHByb3ZpZGVkIGluZGV4LiBbIyYjODIwMzs1NDk0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ5NCkKLSBBbGxvdyBjb252ZXJ0aW5nIG5haXZlIGRhdGV0aW1lIGludG8gY2hyb25vIGBEYXRlVGltZTxMb2NhbD5gLiBbIyYjODIwMzs1NTA3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTUwNykKCiMjIyMjIFJlbW92ZWQKCi0gUmVtb3ZlZCBgRnJvbVB5T2JqZWN0Qm91bmRgIHRyYWl0LiBbIyYjODIwMzs0MzkwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNDM5MCkKCiMjIyMjIEZpeGVkCgotIEZpeCBjb21waWxhdGlvbiBmYWlsdXJlIG9uIGB3YXNtMzItd2FzaXAyYC4gWyMmIzgyMDM7NTM2OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzUzNjgpCi0gRml4IGBPc1N0cmAgY29udmVyc2lvbiBmb3Igbm9uLXV0Zjggc3RyaW5ncyBvbiBXaW5kb3dzLiBbIyYjODIwMzs1NDQ0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ0NCkKLSBGaXggaXNzdWUgd2l0aCBgY2FyZ28gdmVuZG9yYCBjYXVzZWQgYnkgZ2l0aWdub3JlZCBidWlsZCBhcnRpZmFjdCBgZW1zY3JpcHRlbi9weWJ1aWxkZGlyLnR4dGAuIFsjJiM4MjAzOzU0NTZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDU2KQotIFN0b3AgbGVha2luZyBgUHlNZXRob2REZWZgIGluc3RhbmNlcyBpbnNpZGUgYCNbcHlmdW5jdGlvbl1gIG1hY3JvIGdlbmVyYXRlZCBjb2RlLiBbIyYjODIwMzs1NDU5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zL3B1bGwvNTQ1OSkKLSBEb24ndCBleHBvcnQgZGVmaW5pdGlvbiBvZiBGRkkgc3RydWN0IGBQeU9iamVjdE9iRmxhZ3NBbmRSZWZjbnRgIG9uIDMyLWJpdCBQeXRob24gMy4xNCAoZG9lc24ndCBleGlzdCkuIFsjJiM4MjAzOzU0OTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NDk5KQotIEZpeCBmYWlsdXJlIHRvIGJ1aWxkIGZvciBgYWJpM2AgaW50ZXJwcmV0ZXJzIG9uIFdpbmRvd3MgdXNpbmcgbWF0dXJpbidzIGJ1aWx0LWluIHN5c2NvbmZpZyBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBgZ2VuZXJhdGUtaW1wb3J0LWxpYmAgZmVhdHVyZS4gWyMmIzgyMDM7NTUwM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy9wdWxsLzU1MDMpCi0gRml4IEZGSSBkZWZpbml0aW9ucyBgUHlNb2R1bGVfRXhlY0RlZmAgYW5kIGBQeU1vZHVsZV9Gcm9tRGVmQW5kU3BlYzJgIG9uIFB5UHkuIFsjJiM4MjAzOzU1MjldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMvcHVsbC81NTI5KQoKPC9kZXRhaWxzPgoKPGRldGFpbHM+CjxzdW1tYXJ5PlB5TzMvcHlvMy1hc3luYy1ydW50aW1lcyAocHlvMy1hc3luYy1ydW50aW1lcyk8L3N1bW1hcnk+CgojIyMgW2B2MC4yOC4wYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy1hc3luYy1ydW50aW1lcy9ibG9iL0hFQUQvQ0hBTkdFTE9HLm1kIzAyODAtLS0yMDI2LTAyLTAzKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zLWFzeW5jLXJ1bnRpbWVzL2NvbXBhcmUvdjAuMjcuMC4uLnYwLjI4LjApCgotIEJ1bXAgdG8gcHlvMyAwLjI4LiBbIyYjODIwMzs3Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy1hc3luYy1ydW50aW1lcy9wdWxsLzc2KQotIENoZWNrIGZvciBhd2FpdGFibGUgaW5zdGVhZCBvZiBjb3JvdXRpbmUgaW4gc3RyZWFtIGdsdWUgWyMmIzgyMDM7NzNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMtYXN5bmMtcnVudGltZXMvcHVsbC83MykKLSBCdW1wIE1TUlYgdG8gMS44My4KLSBGaXggaGFuZGxpbmcgb2YgZnVsbCBidWZmZXIgaW4gYGludG9fc3RyZWFtYCBmdW5jdGlvbnMKCiMjIyBbYHYwLjI3LjBgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zLWFzeW5jLXJ1bnRpbWVzL2Jsb2IvSEVBRC9DSEFOR0VMT0cubWQjMDI3MC0tLTIwMjUtMTAtMjApCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMtYXN5bmMtcnVudGltZXMvY29tcGFyZS92MC4yNi4wLi4udjAuMjcuMCkKCi0gQXZvaWQgYXR0YWNoaW5nIHRvIHRoZSBydW50aW1lIHdoZW4gY2xvbmluZyBUYXNrTG9jYWxzIGJ5IHVzaW5nIHN0ZDo6c3luYzo6QXJjLiBbIyYjODIwMzs2Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy1hc3luYy1ydW50aW1lcy9wdWxsLzYyKQotICoqQnJlYWtpbmcqKjogRmluYWxpemUgdGhlIGZ1dHVyZSB3aXRob3V0IGhvbGRpbmcgR0lMIGluc2lkZSBhc3luYy1zdGQvdG9raW8gcnVudGltZS4KICBUcmFpdCBgUnVudGltZWAgbm93IHJlcXVpcmVzIGBzcGF3bl9ibG9ja2luZ2AgZnVuY3Rpb24sCiAgYGZ1dHVyZV9pbnRvX3B5YCBmdW5jdGlvbnMgbm93IHJlcXVpcmUgZnV0dXJlIHJldHVybiB0eXBlIHRvIGJlIGBTZW5kYC4KICBbIyYjODIwMzs2MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1B5TzMvcHlvMy1hc3luYy1ydW50aW1lcy9wdWxsLzYwKQotIENoYW5nZSBweW8zIGBkb3duY2FzdGAgY2FsbHMgdG8gYGNhc3RgIGNhbGxzIFsjJiM4MjAzOzY1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zLWFzeW5jLXJ1bnRpbWVzL3B1bGwvNjUpCi0gVXNlIGBweW8zOjppbnRlcm4hYCBmb3IgbWV0aG9kIGNhbGxzIGFuZCBgZ2V0YXR0cmAgY2FsbHMgWyMmIzgyMDM7NjZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9QeU8zL3B5bzMtYXN5bmMtcnVudGltZXMvcHVsbC82NikKLSBGaXggbWlzc2luZyBMSUNFTlNFIGZpbGUgaW4gbWFjcm9zIGNyYXRlIGJ5IFtAJiM4MjAzO211c2ljaW5teWJyYWluXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbXVzaWNpbm15YnJhaW4pIGluIFsjJiM4MjAzOzYzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zLWFzeW5jLXJ1bnRpbWVzL3B1bGwvNjMpCi0gQnVtcCB0byBweW8zIDAuMjcuIFsjJiM4MjAzOzY4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vUHlPMy9weW8zLWFzeW5jLXJ1bnRpbWVzL3B1bGwvNjgpCgo8L2RldGFpbHM+Cgo8ZGV0YWlscz4KPHN1bW1hcnk+dm9ybmVyL3B5bzMtbG9nIChweW8zLWxvZyk8L3N1bW1hcnk+CgojIyMgW2B2MC4xMy4zYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3Zvcm5lci9weW8zLWxvZy9ibG9iL0hFQUQvQ0hBTkdFTE9HLm1kIzAxMzMpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS92b3JuZXIvcHlvMy1sb2cvY29tcGFyZS92MC4xMy4yLi4udjAuMTMuMykKCi0gU3VwcG9ydCBmb3IgcHlvMyAwLjI4IChbIyYjODIwMzs3NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3Zvcm5lci9weW8zLWxvZy9pc3N1ZXMvNzUpKS4KCiMjIyBbYHYwLjEzLjJgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vdm9ybmVyL3B5bzMtbG9nL2Jsb2IvSEVBRC9DSEFOR0VMT0cubWQjMDEzMikKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3Zvcm5lci9weW8zLWxvZy9jb21wYXJlL3YwLjEzLjEuLi52MC4xMy4yKQoKLSBTdXBwb3J0IGZvciBweW8zIDAuMjcgKFsjJiM4MjAzOzcyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vdm9ybmVyL3B5bzMtbG9nL2lzc3Vlcy83MikpLgoKPC9kZXRhaWxzPgoKPGRldGFpbHM+CjxzdW1tYXJ5PmRhdmlkaGV3aXR0L3B5dGhvbml6ZSAocHl0aG9uaXplKTwvc3VtbWFyeT4KCiMjIyBbYHYwLjI4LjBgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vZGF2aWRoZXdpdHQvcHl0aG9uaXplL2Jsb2IvSEVBRC9DSEFOR0VMT0cubWQjMDI4MC0tLTIwMjYtMDItMTgpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9kYXZpZGhld2l0dC9weXRob25pemUvY29tcGFyZS92MC4yNy4wLi4udjAuMjguMCkKCi0gQnVtcCBNU1JWIHRvIDEuODMuCi0gVXBkYXRlIGBweW8zYCB0byAwLjI4LgotIFN1cHBvcnQgZGVzZXJpYWxpemluZyBgZGF0YWNsYXNzYCBpbnN0YW5jZXMgdG8gc3RydWN0LWxpa2UgUnVzdCB0eXBlcy4KLSBBZGQgYGFyYml0cmFyeV9wcmVjaXNpb25gIGZlYXR1cmUKCiMjIyBbYHYwLjI3LjBgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vZGF2aWRoZXdpdHQvcHl0aG9uaXplL2Jsb2IvSEVBRC9DSEFOR0VMT0cubWQjMDI3MC0tLTIwMjUtMTEtMDcpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9kYXZpZGhld2l0dC9weXRob25pemUvY29tcGFyZS92MC4yNi4wLi4udjAuMjcuMCkKCi0gVXBkYXRlIHRvIFB5TzMgMC4yNwoKPC9kZXRhaWxzPgoKLS0tCgojIyMgQ29uZmlndXJhdGlvbgoK8J+ThSAqKlNjaGVkdWxlKio6IEJyYW5jaCBjcmVhdGlvbiAtIEF0IGFueSB0aW1lIChubyBzY2hlZHVsZSBkZWZpbmVkKSwgQXV0b21lcmdlIC0gQXQgYW55IHRpbWUgKG5vIHNjaGVkdWxlIGRlZmluZWQpLgoK8J+apiAqKkF1dG9tZXJnZSoqOiBEaXNhYmxlZCBieSBjb25maWcuIFBsZWFzZSBtZXJnZSB0aGlzIG1hbnVhbGx5IG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQuCgrimbsgKipSZWJhc2luZyoqOiBXaGVuZXZlciBQUiBiZWNvbWVzIGNvbmZsaWN0ZWQsIG9yIHlvdSB0aWNrIHRoZSByZWJhc2UvcmV0cnkgY2hlY2tib3guCgrwn5G7ICoqSW1tb3J0YWwqKjogVGhpcyBQUiB3aWxsIGJlIHJlY3JlYXRlZCBpZiBjbG9zZWQgdW5tZXJnZWQuIEdldCBbY29uZmlnIGhlbHBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9yZW5vdmF0ZWJvdC9yZW5vdmF0ZS9kaXNjdXNzaW9ucykgaWYgdGhhdCdzIHVuZGVzaXJlZC4KCi0tLQoKIC0gWyBdIDwhLS0gcmViYXNlLWNoZWNrIC0tPklmIHlvdSB3YW50IHRvIHJlYmFzZS9yZXRyeSB0aGlzIFBSLCBjaGVjayB0aGlzIGJveAoKLS0tCgpUaGlzIFBSIHdhcyBnZW5lcmF0ZWQgYnkgW01lbmQgUmVub3ZhdGVdKGh0dHBzOi8vbWVuZC5pby9yZW5vdmF0ZS8pLiBWaWV3IHRoZSBbcmVwb3NpdG9yeSBqb2IgbG9nXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2dpdGh1Yi92ZXh4aG9zdC9tYWdudW0tY2x1c3Rlci1hcGkpLgo8IS0tcmVub3ZhdGUtZGVidWc6ZXlKamNtVmhkR1ZrU1c1V1pYSWlPaUkwTVM0eE5ETXVNU0lzSW5Wd1pHRjBaV1JKYmxabGNpSTZJalF6TGpJeUxqQWlMQ0owWVhKblpYUkNjbUZ1WTJnaU9pSnRZV2x1SWl3aWJHRmlaV3h6SWpwYlhYMD0tLT4K
      override_checkout: master
      patchset: c627df14f3f325bb901b8e40dbc5a674c5806f9d
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/vexxhost.dev/zuul-config:
            canonical_name: vexxhost.dev/zuul-config
            checkout: main
            commit: 9052b5a7781b3346e4cffd452a54448cbff54d8b
          trusted/project_1/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: 571c0efa3491d12ecb8fc1169c510716d55c0fc2
          trusted/project_2/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: a6e68243e02ef030ce5e75f8b67630880c475f33
          untrusted/project_0/opendev.org/openstack/devstack:
            canonical_name: opendev.org/openstack/devstack
            checkout: master
            commit: cc82266a57c97910ef26305f92ea51d358eb015c
          untrusted/project_1/opendev.org/openstack/openstack-zuul-jobs:
            canonical_name: opendev.org/openstack/openstack-zuul-jobs
            checkout: master
            commit: 61be4bf603478e22c2b8b334279a74fd1421b58b
          untrusted/project_2/vexxhost.dev/zuul-config:
            canonical_name: vexxhost.dev/zuul-config
            checkout: main
            commit: 9052b5a7781b3346e4cffd452a54448cbff54d8b
          untrusted/project_3/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: 571c0efa3491d12ecb8fc1169c510716d55c0fc2
          untrusted/project_4/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: a6e68243e02ef030ce5e75f8b67630880c475f33
          untrusted/project_5/github.com/vexxhost/magnum-cluster-api:
            canonical_name: github.com/vexxhost/magnum-cluster-api
            checkout: main
            commit: c627df14f3f325bb901b8e40dbc5a674c5806f9d
        playbooks:
        - path: untrusted/project_5/github.com/vexxhost/magnum-cluster-api/zuul.d/playbooks/hydrophone/run.yml
          roles:
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/playbook_0/role_1/devstack
            link_target: untrusted/project_0/opendev.org/openstack/devstack
            role_path: ansible/playbook_0/role_1/devstack/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/playbook_0/role_2/openstack-zuul-jobs
            link_target: untrusted/project_1/opendev.org/openstack/openstack-zuul-jobs
            role_path: ansible/playbook_0/role_2/openstack-zuul-jobs/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/playbook_0/role_4/zuul-jobs
            link_target: untrusted/project_3/opendev.org/zuul/zuul-jobs
            role_path: ansible/playbook_0/role_4/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_5/zuul-jobs
            link_target: untrusted/project_4/github.com/vexxhost/zuul-jobs
            role_path: ansible/playbook_0/role_5/zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/vexxhost/magnum-cluster-api
        name: vexxhost/magnum-cluster-api
        short_name: magnum-cluster-api
        src_dir: src/github.com/vexxhost/magnum-cluster-api
      projects:
        github.com/novnc/novnc:
          canonical_hostname: github.com
          canonical_name: github.com/novnc/novnc
          checkout: master
          checkout_description: job override ref
          commit: 8e1ebdffba02e651c399dacef841f8941f6ad6e4
          name: novnc/novnc
          required: true
          short_name: novnc
          src_dir: src/github.com/novnc/novnc
        github.com/vexxhost/magnum-cluster-api:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/magnum-cluster-api
          checkout: main
          checkout_description: zuul branch
          commit: c627df14f3f325bb901b8e40dbc5a674c5806f9d
          name: vexxhost/magnum-cluster-api
          required: false
          short_name: magnum-cluster-api
          src_dir: src/github.com/vexxhost/magnum-cluster-api
        opendev.org/openstack/barbican:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/barbican
          checkout: master
          checkout_description: job override ref
          commit: 317e70e98c39c39ce44f22b303cd3aaa739abafd
          name: openstack/barbican
          required: true
          short_name: barbican
          src_dir: src/opendev.org/openstack/barbican
        opendev.org/openstack/cinder:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/cinder
          checkout: master
          checkout_description: job override ref
          commit: 9983dca5017a2fcf6d16bebc7aa6df279182735d
          name: openstack/cinder
          required: true
          short_name: cinder
          src_dir: src/opendev.org/openstack/cinder
        opendev.org/openstack/devstack:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/devstack
          checkout: master
          checkout_description: job override ref
          commit: cc82266a57c97910ef26305f92ea51d358eb015c
          name: openstack/devstack
          required: true
          short_name: devstack
          src_dir: src/opendev.org/openstack/devstack
        opendev.org/openstack/glance:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/glance
          checkout: master
          checkout_description: job override ref
          commit: ad36aa0fd6e1d5786782a35e5eee153045126268
          name: openstack/glance
          required: true
          short_name: glance
          src_dir: src/opendev.org/openstack/glance
        opendev.org/openstack/keystone:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/keystone
          checkout: master
          checkout_description: job override ref
          commit: 7fcad2fedd51b35a8235638035e5cf7419f04acc
          name: openstack/keystone
          required: true
          short_name: keystone
          src_dir: src/opendev.org/openstack/keystone
        opendev.org/openstack/magnum:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/magnum
          checkout: master
          checkout_description: job override ref
          commit: 47e025175c2c902ddbf9b23ae494fcc58994d6af
          name: openstack/magnum
          required: true
          short_name: magnum
          src_dir: src/opendev.org/openstack/magnum
        opendev.org/openstack/manila:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/manila
          checkout: master
          checkout_description: job override ref
          commit: 9e631a614aae0a1d77a65e63d28ab33dc0c02343
          name: openstack/manila
          required: true
          short_name: manila
          src_dir: src/opendev.org/openstack/manila
        opendev.org/openstack/neutron:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/neutron
          checkout: master
          checkout_description: job override ref
          commit: 7a666213cc06df5735d11b2c534ff1068072f7b4
          name: openstack/neutron
          required: true
          short_name: neutron
          src_dir: src/opendev.org/openstack/neutron
        opendev.org/openstack/nova:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/nova
          checkout: master
          checkout_description: job override ref
          commit: 00f554fd9291d1b4716c55ad3bacc979fe7fbde8
          name: openstack/nova
          required: true
          short_name: nova
          src_dir: src/opendev.org/openstack/nova
        opendev.org/openstack/octavia:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/octavia
          checkout: master
          checkout_description: job override ref
          commit: a753d57186923cc8824464e644784519e0317010
          name: openstack/octavia
          required: true
          short_name: octavia
          src_dir: src/opendev.org/openstack/octavia
        opendev.org/openstack/os-test-images:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/os-test-images
          checkout: master
          checkout_description: job override ref
          commit: 5d0367e03788764f41da8effffa14e3eac513201
          name: openstack/os-test-images
          required: true
          short_name: os-test-images
          src_dir: src/opendev.org/openstack/os-test-images
        opendev.org/openstack/ovn-octavia-provider:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/ovn-octavia-provider
          checkout: master
          checkout_description: job override ref
          commit: 0f370ad761133c14d73917d5fdd392e684b4b512
          name: openstack/ovn-octavia-provider
          required: true
          short_name: ovn-octavia-provider
          src_dir: src/opendev.org/openstack/ovn-octavia-provider
        opendev.org/openstack/placement:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/placement
          checkout: master
          checkout_description: job override ref
          commit: 97a81217ba4c586d6148b4c30f6a30f17bffd0dd
          name: openstack/placement
          required: true
          short_name: placement
          src_dir: src/opendev.org/openstack/placement
        opendev.org/openstack/python-magnumclient:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/python-magnumclient
          checkout: master
          checkout_description: job override ref
          commit: 86936ec8421488ca03635962e8a6ccfe070b0756
          name: openstack/python-magnumclient
          required: true
          short_name: python-magnumclient
          src_dir: src/opendev.org/openstack/python-magnumclient
        opendev.org/openstack/requirements:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/requirements
          checkout: master
          checkout_description: job override ref
          commit: 406452a772cb3a563d581aa5a4facf93dc901004
          name: openstack/requirements
          required: true
          short_name: requirements
          src_dir: src/opendev.org/openstack/requirements
        opendev.org/openstack/swift:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/swift
          checkout: master
          checkout_description: job override ref
          commit: 2c980ac94682e8baed89c7f3c3b5af824514e8c3
          name: openstack/swift
          required: true
          short_name: swift
          src_dir: src/opendev.org/openstack/swift
      ref: refs/pull/837/head
      resources: {}
      tenant: oss
      timeout: 7200
      topic: null
      voting: true
    zuul_copy_output:
      /etc/ceph: logs
      /etc/glusterfs/glusterd.vol: logs
      /etc/libvirt: logs
      /etc/lvm: logs
      /etc/resolv.conf: logs
      /etc/sudoers: logs
      /etc/sudoers.d: logs
      /var/log/ceph: logs
      /var/log/glusterfs: logs
      /var/log/libvirt: logs
      /var/log/mysql: logs
      /var/log/openvswitch: logs
      /var/log/postgresql: logs
      /var/log/rabbitmq: logs
      /var/log/unbound.log: logs
      '{{ devstack_conf_dir }}/.localrc.auto': logs
      '{{ devstack_conf_dir }}/.stackenv': logs
      '{{ devstack_conf_dir }}/local.conf': logs
      '{{ devstack_conf_dir }}/localrc': logs
      '{{ devstack_full_log}}': logs
      '{{ devstack_log_dir }}/atop': logs
      '{{ devstack_log_dir }}/devstacklog.txt': logs
      '{{ devstack_log_dir }}/devstacklog.txt.summary': logs
      '{{ devstack_log_dir }}/dstat-csv.log': logs
      '{{ devstack_log_dir }}/qemu.coredump': logs
      '{{ devstack_log_dir }}/tcpdump.pcap': logs
      '{{ devstack_log_dir }}/worlddump-latest.txt': logs
      '{{ stage_dir }}/apache': logs
      '{{ stage_dir }}/apache_config': logs
      '{{ stage_dir }}/audit.log': logs
      '{{ stage_dir }}/core': logs
      '{{ stage_dir }}/deprecations.log': logs
      '{{ stage_dir }}/df.txt': logs
      '{{ stage_dir }}/dpkg-l.txt': logs
      '{{ stage_dir }}/etc': logs
      '{{ stage_dir }}/iptables.txt': logs
      '{{ stage_dir }}/listen53.txt': logs
      '{{ stage_dir }}/mount.txt': logs
      '{{ stage_dir }}/performance.json': logs
      '{{ stage_dir }}/pip2-freeze.txt': logs
      '{{ stage_dir }}/pip3-freeze.txt': logs
      '{{ stage_dir }}/rpm-qa.txt': logs
      '{{ stage_dir }}/services.txt': logs
      '{{ stage_dir }}/verify_tempest_conf.log': logs
