all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe09:5154
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 3d4a79fc-0097-41f5-b083-cc82f4731211
        host_id: 0d3d02185f810c959252bd1d303ec55040bf5bb0b401cceef814c3a7
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe09:5154
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.186
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.1
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe09:5154
        region: null
        slot: null
  vars:
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job ansible-lint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#7>'
      - '<Job ansible-lint explicit: None implied: None source: osism/cloud-in-a-box/.zuul.yaml@main#15>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 751e4e02536f403da0fa2002ddcbb2c9
      build_refs:
      - branch: main
        change: '425'
        change_message: "Update dependency packaging to v26\n\nThis PR contains the
          following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [packaging](https://redirect.github.com/pypa/packaging) | `==25.0` \u2192
          `==26.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.1?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/25.0/26.1?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pypa/packaging (packaging)</summary>\n\n###
          [`v26.1`](https://redirect.github.com/pypa/packaging/releases/tag/26.1)\n\n[Compare
          Source](https://redirect.github.com/pypa/packaging/compare/26.0...26.1)\n\nFeatures:\n\n-
          PEP 783: add handling for Emscripten wheel tags by [@&#8203;hoodmane](https://redirect.github.com/hoodmane)
          in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n-
          PEP 803: add handling for the `abi3.abi3t` free-threading tag by [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum)
          in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
          PEP 723: add `packaging.dependency_groups` module, based on the `dependency-groups`
          package by [@&#8203;sirosen](https://redirect.github.com/sirosen) in [#&#8203;1065](https://redirect.github.com/pypa/packaging/pull/1065)\n-
          Add the `packaging.direct_url` module by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;944](https://redirect.github.com/pypa/packaging/pull/944)\n-
          Add the `packaging.errors` module by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1071](https://redirect.github.com/pypa/packaging/pull/1071)\n-
          Add `SpecifierSet.is_unsatisfiable` using ranges (new internals that will
          be expanded in future versions) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1119](https://redirect.github.com/pypa/packaging/pull/1119)\n-
          Add `create_compatible_tags_selector` to select compatible tags by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1110](https://redirect.github.com/pypa/packaging/pull/1110)\n-
          Add a `key` argument to `SpecifierSet.filter()` by [@&#8203;frostming](https://redirect.github.com/frostming)
          in [#&#8203;1068](https://redirect.github.com/pypa/packaging/pull/1068)\n-
          Support `&` and `|` for `Marker`'s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1146](https://redirect.github.com/pypa/packaging/pull/1146)\n-
          Normalize `Version.__replace__` and add `Version.from_parts` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1078](https://redirect.github.com/pypa/packaging/pull/1078)\n-
          Add an option to validate compressed tag set sort order in `parse_wheel_filename`
          by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in [#&#8203;1150](https://redirect.github.com/pypa/packaging/pull/1150)\n\nBehavior
          adaptations:\n\n- Narrow exclusion of pre-releases for `<V.postN` to match
          spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1140](https://redirect.github.com/pypa/packaging/pull/1140)\n-
          Narrow exclusion of post-releases for `>V` to match spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1141](https://redirect.github.com/pypa/packaging/pull/1141)\n-
          Rename `format_full_version` to `_format_full_version` to make it visibly
          private by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in
          [#&#8203;1125](https://redirect.github.com/pypa/packaging/pull/1125)\n-
          Restrict local version to ASCII by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1102](https://redirect.github.com/pypa/packaging/pull/1102)\n\nPylock
          (PEP 751) updates:\n\n- Add pylock `select` function by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1092](https://redirect.github.com/pypa/packaging/pull/1092)\n-
          Document pylock `select()` method and `PylockSelectError` by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
          in [#&#8203;1153](https://redirect.github.com/pypa/packaging/pull/1153)\n-
          Add `filename` property to `PackageSdist` and `PackageWheel`, more validation
          by [@&#8203;sbidoul](https://redirect.github.com/sbidoul) in [#&#8203;1095](https://redirect.github.com/pypa/packaging/pull/1095)\n-
          Give preference to path over url by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1128](https://redirect.github.com/pypa/packaging/pull/1128)\n-
          Validate name/version consistency in file names by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1114](https://redirect.github.com/pypa/packaging/pull/1114)\n\nFixes:\n\n-
          Fix `>` comparison for versions with dev+local segments by [@&#8203;veeceey](https://redirect.github.com/veeceey)
          in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
          Fix incorrect self-comparison for `InfinityType` and `NegativeInfinityType`
          by [@&#8203;bysiber](https://redirect.github.com/bysiber) in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
          Canonicalize when deduplicating specifiers in `SpecifierSet` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1109](https://redirect.github.com/pypa/packaging/pull/1109)\n-
          Fix charset error message formatting by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1121](https://redirect.github.com/pypa/packaging/pull/1121)\n-
          Handle the `key` parameter in `SpecifierSet.filter` when specifiers are
          empty and prerelease is `False` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1096](https://redirect.github.com/pypa/packaging/pull/1096)\n-
          Standardize inner components of `repr` output by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1090](https://redirect.github.com/pypa/packaging/pull/1090)\n-
          `Specifier`'s `===` uses original string, not normalized, when available
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1124](https://redirect.github.com/pypa/packaging/pull/1124)\n-
          Propagate int-max-str-digits `ValueError` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1155](https://redirect.github.com/pypa/packaging/pull/1155)\n\nPerformance:\n\n-
          Add fast path for parsing simple versions (digits and dots only) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1082](https://redirect.github.com/pypa/packaging/pull/1082)\n-
          Add fast path for `Version` to `Version` comparison by skipping `_key` property
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1083](https://redirect.github.com/pypa/packaging/pull/1083)\n-
          Cache `Version` hash value in dedicated slot by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1118](https://redirect.github.com/pypa/packaging/pull/1118)\n-
          Overhaul `_cmpkey` to remove use of custom objects by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1116](https://redirect.github.com/pypa/packaging/pull/1116)\n-
          Skip `__replace__` in Specifier comparison if not needed by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1081](https://redirect.github.com/pypa/packaging/pull/1081)\n-
          `SpecifierSet` use `tuple` instead of `frozenset` for `_specs` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1108](https://redirect.github.com/pypa/packaging/pull/1108)\n-
          Speed up complex `SpecifierSet` filtering by implementing cost-based ordering
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1105](https://redirect.github.com/pypa/packaging/pull/1105)\n-
          Speed up wildcard comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1111](https://redirect.github.com/pypa/packaging/pull/1111)\n-
          Stream PEP440 filtering in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1076](https://redirect.github.com/pypa/packaging/pull/1076)\n-
          Add `__slots__` to `Marker` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1147](https://redirect.github.com/pypa/packaging/pull/1147)\n-
          Simply `Specifier` regex by [@&#8203;sirosen](https://redirect.github.com/sirosen)
          in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
          Skip using the hash property internally by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1115](https://redirect.github.com/pypa/packaging/pull/1115)\n\nInternal:\n\n-
          Add downstream testing by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1049](https://redirect.github.com/pypa/packaging/pull/1049)\n-
          Benchmarking suite by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1059](https://redirect.github.com/pypa/packaging/pull/1059)\n-
          Benchmark variance reduction by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1107](https://redirect.github.com/pypa/packaging/pull/1107)\n-
          Add property-based tests for PEP 440 by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1144](https://redirect.github.com/pypa/packaging/pull/1144)\n-
          Clean up a few `collections.namedtuple` in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1070](https://redirect.github.com/pypa/packaging/pull/1070)\n-
          Do not reload the tags module in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1152](https://redirect.github.com/pypa/packaging/pull/1152)\n-
          Limit `dir()` / tab-completion in REPL by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1011](https://redirect.github.com/pypa/packaging/pull/1011)\n-
          Add more `__all__`/`__dir__` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1069](https://redirect.github.com/pypa/packaging/pull/1069)\n-
          Cleanup pre-commit a bit by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1080](https://redirect.github.com/pypa/packaging/pull/1080)\n-
          Pin pre-commit file, use dependabot by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1133](https://redirect.github.com/pypa/packaging/pull/1133)\n-
          Remove sphinx-toolbox by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1135](https://redirect.github.com/pypa/packaging/pull/1135)\n-
          Use docs group, faster readthedocs by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1061](https://redirect.github.com/pypa/packaging/pull/1061)\n-
          Add free-threaded Python to CI by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1098](https://redirect.github.com/pypa/packaging/pull/1098)\n-
          Simplify combining `SpecifierSet.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1073](https://redirect.github.com/pypa/packaging/pull/1073)\n-
          Use direct operator methods in `_compare_compatible` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1100](https://redirect.github.com/pypa/packaging/pull/1100)\n-
          Remove unnecessary if statement in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1074](https://redirect.github.com/pypa/packaging/pull/1074)\n-
          Remove unneeded nesting in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1072](https://redirect.github.com/pypa/packaging/pull/1072)\n\nDocumentation:\n\n-
          Fix documentation: grammar, typos, formatting, and outdated references by
          [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
          in [#&#8203;1084](https://redirect.github.com/pypa/packaging/pull/1084)\n-
          Fix versionadded for `Version.from_parts()` by [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen)
          in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
          Document `&` and `|` operators for combining `Marker` objects by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
          in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
          Expand and clean up `Version` documentation by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1089](https://redirect.github.com/pypa/packaging/pull/1089)\n-
          Move license docs inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1131](https://redirect.github.com/pypa/packaging/pull/1131)\n-
          Move markers inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1104](https://redirect.github.com/pypa/packaging/pull/1104)\n-
          Move tags docs to inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1130](https://redirect.github.com/pypa/packaging/pull/1130)\n-
          Move utilities inline, like other modules by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1103](https://redirect.github.com/pypa/packaging/pull/1103)\n\n####
          Benchmarks\n\nPerformance improvements since 26.0, from the new integrated
          benchmark suite:\n\n```\nuv run asv run 26.0..HEAD\n```\n\n<img width=\"908\"
          height=\"965\" alt=\"Screenshot 2026-04-13 at 11 32 14\u202FPM\" src=\"https://github.com/user-attachments/assets/3bf63569-dbbf-4f34-9660-ede3cef1745d\"
          />\n\n<img width=\"908\" height=\"479\" alt=\"Screenshot 2026-04-13 at 11
          32 43\u202FPM\" src=\"https://github.com/user-attachments/assets/f7906800-f6d9-4af6-a3f3-369b654b73e3\"
          />\n\n#### New Contributors\n\n- [@&#8203;veeceey](https://redirect.github.com/veeceey)
          made their first contribution in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
          [@&#8203;bysiber](https://redirect.github.com/bysiber) made their first
          contribution in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
          [@&#8203;sirosen](https://redirect.github.com/sirosen) made their first
          contribution in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
          [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen) made their first
          contribution in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
          [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum) made their first
          contribution in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
          [@&#8203;r266-tech](https://redirect.github.com/r266-tech) made their first
          contribution in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
          [@&#8203;hoodmane](https://redirect.github.com/hoodmane) made their first
          contribution in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n\n**Full
          Changelog**: <https://github.com/pypa/packaging/compare/26.0...26.1>\n\n###
          [`v26.0`](https://redirect.github.com/pypa/packaging/releases/tag/26.0)\n\n[Compare
          Source](https://redirect.github.com/pypa/packaging/compare/25.0...26.0)\n\nRead
          about the performance improvements here: <https://iscinumpy.dev/post/packaging-faster>.\n\n####
          What's Changed\n\nFeatures:\n\n- PEP 751: support pylock by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;900](https://redirect.github.com/pypa/packaging/pull/900)\n-
          PEP 794: import name metadata by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
          in [#&#8203;948](https://redirect.github.com/pypa/packaging/pull/948)\n-
          Support writing metadata by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;846](https://redirect.github.com/pypa/packaging/pull/846)\n-
          Support `__replace__` for `Version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1003](https://redirect.github.com/pypa/packaging/pull/1003)\n-
          Support positional pattern matching for `Version` and `Specifier` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1004](https://redirect.github.com/pypa/packaging/pull/1004)\n\nBehavior
          adaptations:\n\n- PEP 440 handling of prereleases for `Specifier.contains`,
          `SpecifierSet.contains`, and `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;897](https://redirect.github.com/pypa/packaging/pull/897)\n-
          Handle PEP 440 edge case in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;942](https://redirect.github.com/pypa/packaging/pull/942)\n-
          Adjust arbitrary equality intersection preservation in `SpecifierSet` by
          [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;951](https://redirect.github.com/pypa/packaging/pull/951)\n-
          Return `False` instead of raising for `.contains` with invalid version by
          [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe) in [#&#8203;932](https://redirect.github.com/pypa/packaging/pull/932)\n-
          Support arbitrary equality on arbitrary strings for `Specifier` and `SpecifierSet`'s
          `filter` and `contains` method. by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;954](https://redirect.github.com/pypa/packaging/pull/954)\n-
          Only try to parse as `Version` on certain marker keys, return `False` on
          unequal ordered comparsions by [@&#8203;JP-Ellis](https://redirect.github.com/JP-Ellis)
          in [#&#8203;939](https://redirect.github.com/pypa/packaging/pull/939)\n\nFixes:\n\n-
          Update `_hash` when unpickling `Tag()` by [@&#8203;dholth](https://redirect.github.com/dholth)
          in [#&#8203;860](https://redirect.github.com/pypa/packaging/pull/860)\n-
          Correct comment and simplify implicit prerelease handling in `Specifier.prereleases`
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;896](https://redirect.github.com/pypa/packaging/pull/896)\n-
          Use explicit `_GLibCVersion` `NamedTuple` in `_manylinux` by [@&#8203;cthoyt](https://redirect.github.com/cthoyt)
          in [#&#8203;868](https://redirect.github.com/pypa/packaging/pull/868)\n-
          Detect invalid license expressions containing `()` by [@&#8203;bwoodsend](https://redirect.github.com/bwoodsend)
          in [#&#8203;879](https://redirect.github.com/pypa/packaging/pull/879)\n-
          Correct regex for metadata `'name'` format by [@&#8203;di](https://redirect.github.com/di)
          in [#&#8203;925](https://redirect.github.com/pypa/packaging/pull/925)\n-
          Improve the message around expecting a semicolon by [@&#8203;pradyunsg](https://redirect.github.com/pradyunsg)
          in [#&#8203;833](https://redirect.github.com/pypa/packaging/pull/833)\n-
          Support nested parens in license expressions by [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe)
          in [#&#8203;931](https://redirect.github.com/pypa/packaging/pull/931)\n-
          Add space before at symbol in `Requirements` string by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;953](https://redirect.github.com/pypa/packaging/pull/953)\n-
          A root logger use found by ruff LOG, use `packaging` logger instead by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;965](https://redirect.github.com/pypa/packaging/pull/965)\n-
          Better support for subclassing `Marker` and `Requirement` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1022](https://redirect.github.com/pypa/packaging/pull/1022)\n-
          Normalize all extras, not just if it comes first by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1024](https://redirect.github.com/pypa/packaging/pull/1024)\n-
          Don't produce a broken repr if `Marker` fails to construct by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1033](https://redirect.github.com/pypa/packaging/pull/1033)\n\nPerformance:\n\n-
          Avoid recompiling regexes in the tokenizer for a 3x speedup by [@&#8203;hauntsaninja](https://redirect.github.com/hauntsaninja)
          in [#&#8203;1019](https://redirect.github.com/pypa/packaging/pull/1019)\n-
          Improve performance in `_manylinux.py` by [@&#8203;cthoyt](https://redirect.github.com/cthoyt)
          in [#&#8203;869](https://redirect.github.com/pypa/packaging/pull/869)\n-
          Minor cleanups to `Version` by [@&#8203;bearomorphism](https://redirect.github.com/bearomorphism)
          in [#&#8203;913](https://redirect.github.com/pypa/packaging/pull/913)\n-
          Skip redundant creation of `Version`s in specifier comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;986](https://redirect.github.com/pypa/packaging/pull/986)\n-
          Cache `Specifier`'s Version by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;985](https://redirect.github.com/pypa/packaging/pull/985)\n-
          Make `Version` a little faster by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;987](https://redirect.github.com/pypa/packaging/pull/987)\n-
          Minor `Version` regex cleanup by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;990](https://redirect.github.com/pypa/packaging/pull/990)\n-
          Faster regex on Python 3.11.5+ by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;988](https://redirect.github.com/pypa/packaging/pull/988) and
          [#&#8203;1055](https://redirect.github.com/pypa/packaging/pull/1055)\n-
          Lazily calculate `_key` in `Version` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;989](https://redirect.github.com/pypa/packaging/pull/989) and
          regression for `packaging_legacy` fixed by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1048](https://redirect.github.com/pypa/packaging/pull/1048)\n-
          Faster `canonicalize_version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;993](https://redirect.github.com/pypa/packaging/pull/993)\n-
          Use `fullmatch` in a couple more places by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;992](https://redirect.github.com/pypa/packaging/pull/992)\n-
          Use `fullmatch` for markers too by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1029](https://redirect.github.com/pypa/packaging/pull/1029)\n-
          Use `map` instead of generator by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;996](https://redirect.github.com/pypa/packaging/pull/996)\n-
          Deprecate `._version` (`_Version`, a `NamedTuple`) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;995](https://redirect.github.com/pypa/packaging/pull/995) and
          [#&#8203;1062](https://redirect.github.com/pypa/packaging/pull/1062)\n-
          Avoid duplicate `Version` creation in `canonicalize_version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;994](https://redirect.github.com/pypa/packaging/pull/994)\n-
          Add `__slots__` to `Version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1001](https://redirect.github.com/pypa/packaging/pull/1001)\n-
          Add `__slots__` to `Specifier`s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1002](https://redirect.github.com/pypa/packaging/pull/1002)\n-
          Add `__slots__` to `Node`s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1032](https://redirect.github.com/pypa/packaging/pull/1032)\n-
          Use `version.__replace__` in specifier comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;999](https://redirect.github.com/pypa/packaging/pull/999)\n-
          Use `_get_spec_version` in more places in `Specifier` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1005](https://redirect.github.com/pypa/packaging/pull/1005)\n-
          Pull `set` construction out of function by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1012](https://redirect.github.com/pypa/packaging/pull/1012)\n-
          Letter normalization dict for prereleases and the like by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1014](https://redirect.github.com/pypa/packaging/pull/1014)\n-
          Avoid normalizing extras again when comparing by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1028](https://redirect.github.com/pypa/packaging/pull/1028)\n-
          Speed up `Version.__str__` by about 10% by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;997](https://redirect.github.com/pypa/packaging/pull/997)\n-
          Increase the performance of `canonicalize_name` by avoiding a regex by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1030](https://redirect.github.com/pypa/packaging/pull/1030),
          [#&#8203;1047](https://redirect.github.com/pypa/packaging/pull/1047), and
          [#&#8203;1064](https://redirect.github.com/pypa/packaging/pull/1064)\n-
          Faster zero stripping by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1058](https://redirect.github.com/pypa/packaging/pull/1058)\n\nType
          annotations:\n\n- Fix a type annotation by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
          in [#&#8203;907](https://redirect.github.com/pypa/packaging/pull/907)\n-
          Fix tags return type in `parse_wheel_filename` docs by [@&#8203;ncoghlan](https://redirect.github.com/ncoghlan)
          in [#&#8203;973](https://redirect.github.com/pypa/packaging/pull/973)\n-
          Add type hint for `_version` in `.version.Version` by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
          in [#&#8203;927](https://redirect.github.com/pypa/packaging/pull/927)\n-
          Changed static type annotations in prereleases setter method in `specifier.py`
          by [@&#8203;subhajitsaha01](https://redirect.github.com/subhajitsaha01)
          in [#&#8203;930](https://redirect.github.com/pypa/packaging/pull/930)\n-
          Statically type the tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;982](https://redirect.github.com/pypa/packaging/pull/982)\n\nInternal:\n\n-
          Test and declare support Python 3.14 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;901](https://redirect.github.com/pypa/packaging/pull/901)\n-
          Modernize and speed up tests on Python 3.14 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;903](https://redirect.github.com/pypa/packaging/pull/903)\n-
          Change our license metadata to use an SPDX license expression by [@&#8203;cdce8p](https://redirect.github.com/cdce8p)
          in [#&#8203;881](https://redirect.github.com/pypa/packaging/pull/881)\n-
          No need for `license-files` by [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
          in [#&#8203;924](https://redirect.github.com/pypa/packaging/pull/924)\n-
          Update mypy by [@&#8203;hauntsaninja](https://redirect.github.com/hauntsaninja)
          in [#&#8203;891](https://redirect.github.com/pypa/packaging/pull/891)\n-
          Some config updates by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;902](https://redirect.github.com/pypa/packaging/pull/902)\n-
          Add spell check and rst check by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;904](https://redirect.github.com/pypa/packaging/pull/904)\n-
          Clean up ruff ignores by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;905](https://redirect.github.com/pypa/packaging/pull/905)\n-
          Update example for env marker `python_version` by [@&#8203;trim21](https://redirect.github.com/trim21)
          in [#&#8203;908](https://redirect.github.com/pypa/packaging/pull/908)\n-
          Move codespell configuration into pyproject.toml by [@&#8203;yarikoptic](https://redirect.github.com/yarikoptic)
          in [#&#8203;910](https://redirect.github.com/pypa/packaging/pull/910)\n-
          Check warning a little more precisely by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;837](https://redirect.github.com/pypa/packaging/pull/837)\n-
          Speed up mypy a little by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;836](https://redirect.github.com/pypa/packaging/pull/836)\n-
          Apply ruff/flake8-pyi rules (PYI) by [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
          in [#&#8203;835](https://redirect.github.com/pypa/packaging/pull/835)\n-
          Better local runs for codespell by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;911](https://redirect.github.com/pypa/packaging/pull/911)\n-
          Remove outdated/confusing Gist link by [@&#8203;stefan6419846](https://redirect.github.com/stefan6419846)
          in [#&#8203;921](https://redirect.github.com/pypa/packaging/pull/921)\n-
          Fix docs and docs ci after [#&#8203;897](https://redirect.github.com/pypa/packaging/issues/897)
          landed by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;926](https://redirect.github.com/pypa/packaging/pull/926)\n-
          Run twine-check on push in CI by [@&#8203;EpicWink](https://redirect.github.com/EpicWink)
          in [#&#8203;922](https://redirect.github.com/pypa/packaging/pull/922)\n-
          `ruff` was renamed `ruff-check` in pre-commit by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;933](https://redirect.github.com/pypa/packaging/pull/933)\n-
          Fix incorrectly implicitly concatenated string in specifiers test by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;946](https://redirect.github.com/pypa/packaging/pull/946)\n-
          Simplify conditional by [@&#8203;ofek](https://redirect.github.com/ofek)
          in [#&#8203;949](https://redirect.github.com/pypa/packaging/pull/949)\n-
          Modernize nox, use dependency-groups for tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;952](https://redirect.github.com/pypa/packaging/pull/952)\n-
          Add more checks that don't affect anything by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;957](https://redirect.github.com/pypa/packaging/pull/957)\n-
          Enable Ruff ISC rule by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;959](https://redirect.github.com/pypa/packaging/pull/959)\n-
          Ruff code FLY by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;963](https://redirect.github.com/pypa/packaging/pull/963)\n-
          pytest `log_level` is better than `log_cli_level` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;956](https://redirect.github.com/pypa/packaging/pull/956)\n-
          Ruff code TRY by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;961](https://redirect.github.com/pypa/packaging/pull/961)\n-
          Add the ruff PL checks by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;964](https://redirect.github.com/pypa/packaging/pull/964)\n-
          Enable Ruff ARG rules by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;958](https://redirect.github.com/pypa/packaging/pull/958)\n-
          Ruff PT code (pytest) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;960](https://redirect.github.com/pypa/packaging/pull/960)\n-
          Add ruff DTZ by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;968](https://redirect.github.com/pypa/packaging/pull/968)\n-
          Add ruff BLE by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;967](https://redirect.github.com/pypa/packaging/pull/967)\n-
          Add the ruff SIM checks by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;966](https://redirect.github.com/pypa/packaging/pull/966)\n-
          Adding ruff PERF by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;969](https://redirect.github.com/pypa/packaging/pull/969)\n-
          Move some config into coverage config by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;971](https://redirect.github.com/pypa/packaging/pull/971)\n-
          Check ruff C4 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;962](https://redirect.github.com/pypa/packaging/pull/962)\n-
          Adding ruff T20 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;972](https://redirect.github.com/pypa/packaging/pull/972)\n-
          Add a tests pass job by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;977](https://redirect.github.com/pypa/packaging/pull/977)\n-
          Add ruff TC by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;980](https://redirect.github.com/pypa/packaging/pull/980)\n-
          Adding part of ruff RET by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;979](https://redirect.github.com/pypa/packaging/pull/979)\n-
          Reorder mypy check by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;983](https://redirect.github.com/pypa/packaging/pull/983)\n-
          Enable ruff ALL by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;984](https://redirect.github.com/pypa/packaging/pull/984)\n-
          Link back to repo/source in furo by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;991](https://redirect.github.com/pypa/packaging/pull/991)\n-
          Add case insensitivity tests for arbitrary equality by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;975](https://redirect.github.com/pypa/packaging/pull/975)\n-
          Synchronize documentation and code for markers by [@&#8203;zahlman](https://redirect.github.com/zahlman)
          in [#&#8203;1008](https://redirect.github.com/pypa/packaging/pull/1008)\n-
          Use `partition` in `_parse_project_urls` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1013](https://redirect.github.com/pypa/packaging/pull/1013)\n-
          auto-skip the dependabot PRs in the release changelog generation by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1016](https://redirect.github.com/pypa/packaging/pull/1016)\n-
          Update unreleased section in changelog by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1017](https://redirect.github.com/pypa/packaging/pull/1017)\n-
          Fix PR role to match extlinks by [@&#8203;hugovk](https://redirect.github.com/hugovk)
          in [#&#8203;1020](https://redirect.github.com/pypa/packaging/pull/1020)\n-
          Mention new parts in README by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1023](https://redirect.github.com/pypa/packaging/pull/1023)\n-
          Replace a couple of asserts with else by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1027](https://redirect.github.com/pypa/packaging/pull/1027)\n-
          Simplify and/or check a little more by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1031](https://redirect.github.com/pypa/packaging/pull/1031)\n-
          Use slim runner for all check by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1021](https://redirect.github.com/pypa/packaging/pull/1021)\n-
          Use typos instead of codespell by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1015](https://redirect.github.com/pypa/packaging/pull/1015)\n-
          Update changelog with recent additions by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1034](https://redirect.github.com/pypa/packaging/pull/1034)\n-
          Publish to PyPI via GitHub CI by [@&#8203;EpicWink](https://redirect.github.com/EpicWink)
          in [#&#8203;893](https://redirect.github.com/pypa/packaging/pull/893)\n-
          Use prek for faster pre-commit lint step by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1037](https://redirect.github.com/pypa/packaging/pull/1037)\n-
          Add help text to noxfile by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1038](https://redirect.github.com/pypa/packaging/pull/1038)\n-
          Update licenses to 3.27 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1036](https://redirect.github.com/pypa/packaging/pull/1036)\n-
          Use relative import in `packaging.licenses` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1039](https://redirect.github.com/pypa/packaging/pull/1039)\n-
          Add zizmor and tighten up CI by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1035](https://redirect.github.com/pypa/packaging/pull/1035)\n-
          Fix release script by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1040](https://redirect.github.com/pypa/packaging/pull/1040)\n-
          Fix using a dev version (again) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1041](https://redirect.github.com/pypa/packaging/pull/1041)\n-
          Fix type hint of function used with `contextlib.contextmanager` by [@&#8203;SpecLad](https://redirect.github.com/SpecLad)
          in [#&#8203;1046](https://redirect.github.com/pypa/packaging/pull/1046)\n-
          Always run tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1044](https://redirect.github.com/pypa/packaging/pull/1044)\n-
          Fix a changelog number by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1042](https://redirect.github.com/pypa/packaging/pull/1042)\n-
          Fix the publish job by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1043](https://redirect.github.com/pypa/packaging/pull/1043)\n-
          Get the correct tag on publish by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1045](https://redirect.github.com/pypa/packaging/pull/1045)\n-
          Test on first public release of CPython 3.11 and newer by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1056](https://redirect.github.com/pypa/packaging/pull/1056)\n-
          Fix publication job (again) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1051](https://redirect.github.com/pypa/packaging/pull/1051)\n-
          Use `actionlint` to check CI workflows by [@&#8203;miketheman](https://redirect.github.com/miketheman)
          in [#&#8203;1052](https://redirect.github.com/pypa/packaging/pull/1052)\n-
          Fix formatting of distribution types in metadata.rst by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
          in [#&#8203;1053](https://redirect.github.com/pypa/packaging/pull/1053)\n\n####
          New Contributors\n\n- [@&#8203;cdce8p](https://redirect.github.com/cdce8p)
          made their first contribution in [#&#8203;881](https://redirect.github.com/pypa/packaging/pull/881)\n-
          [@&#8203;dholth](https://redirect.github.com/dholth) made their first contribution
          in [#&#8203;860](https://redirect.github.com/pypa/packaging/pull/860)\n-
          [@&#8203;trim21](https://redirect.github.com/trim21) made their first contribution
          in [#&#8203;908](https://redirect.github.com/pypa/packaging/pull/908)\n-
          [@&#8203;yarikoptic](https://redirect.github.com/yarikoptic) made their
          first contribution in [#&#8203;910](https://redirect.github.com/pypa/packaging/pull/910)\n-
          [@&#8203;cthoyt](https://redirect.github.com/cthoyt) made their first contribution
          in [#&#8203;868](https://redirect.github.com/pypa/packaging/pull/868)\n-
          [@&#8203;bwoodsend](https://redirect.github.com/bwoodsend) made their first
          contribution in [#&#8203;879](https://redirect.github.com/pypa/packaging/pull/879)\n-
          [@&#8203;stefan6419846](https://redirect.github.com/stefan6419846) made
          their first contribution in [#&#8203;921](https://redirect.github.com/pypa/packaging/pull/921)\n-
          [@&#8203;bearomorphism](https://redirect.github.com/bearomorphism) made
          their first contribution in [#&#8203;913](https://redirect.github.com/pypa/packaging/pull/913)\n-
          [@&#8203;EpicWink](https://redirect.github.com/EpicWink) made their first
          contribution in [#&#8203;922](https://redirect.github.com/pypa/packaging/pull/922)\n-
          [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe) made their
          first contribution in [#&#8203;932](https://redirect.github.com/pypa/packaging/pull/932)\n-
          [@&#8203;subhajitsaha01](https://redirect.github.com/subhajitsaha01) made
          their first contribution in [#&#8203;930](https://redirect.github.com/pypa/packaging/pull/930)\n-
          [@&#8203;ncoghlan](https://redirect.github.com/ncoghlan) made their first
          contribution in [#&#8203;973](https://redirect.github.com/pypa/packaging/pull/973)\n-
          [@&#8203;zahlman](https://redirect.github.com/zahlman) made their first
          contribution in [#&#8203;1008](https://redirect.github.com/pypa/packaging/pull/1008)\n-
          [@&#8203;JP-Ellis](https://redirect.github.com/JP-Ellis) made their first
          contribution in [#&#8203;939](https://redirect.github.com/pypa/packaging/pull/939)\n\n####
          Since last RC\n\nFixes:\n\n- Restore `._version` as a compat shim by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1062](https://redirect.github.com/pypa/packaging/pull/1062)\n\nPerformance:\n\n-
          Dual replace by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1064](https://redirect.github.com/pypa/packaging/pull/1064)\n\nDocumentaiton:\n\n-
          Prepare for 26.0 final by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1063](https://redirect.github.com/pypa/packaging/pull/1063)\n\n**Full
          Changelog**: <https://github.com/pypa/packaging/compare/26.0rc3...26.0>\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - 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\U0001F515 **Ignore**:
          Close this PR and you won't be reminded about this update again.\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/osism/cloud-in-a-box).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi44NS4xIiwidXBkYXRlZEluVmVyIjoiNDMuMTEwLjIiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlIl19-->\n"
        change_url: https://github.com/osism/cloud-in-a-box/pull/425
        commit_id: 524a0209bd6def60143f9d9c0af2e4dc7e975735
        patchset: 524a0209bd6def60143f9d9c0af2e4dc7e975735
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/cloud-in-a-box
          name: osism/cloud-in-a-box
          short_name: cloud-in-a-box
        src_dir: src/github.com/osism/cloud-in-a-box
        topic: null
      buildset: 9db94a14a80247adb6cbf91c9491133c
      buildset_refs:
      - branch: main
        change: '425'
        change_message: "Update dependency packaging to v26\n\nThis PR contains the
          following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [packaging](https://redirect.github.com/pypa/packaging) | `==25.0` \u2192
          `==26.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.1?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/25.0/26.1?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pypa/packaging (packaging)</summary>\n\n###
          [`v26.1`](https://redirect.github.com/pypa/packaging/releases/tag/26.1)\n\n[Compare
          Source](https://redirect.github.com/pypa/packaging/compare/26.0...26.1)\n\nFeatures:\n\n-
          PEP 783: add handling for Emscripten wheel tags by [@&#8203;hoodmane](https://redirect.github.com/hoodmane)
          in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n-
          PEP 803: add handling for the `abi3.abi3t` free-threading tag by [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum)
          in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
          PEP 723: add `packaging.dependency_groups` module, based on the `dependency-groups`
          package by [@&#8203;sirosen](https://redirect.github.com/sirosen) in [#&#8203;1065](https://redirect.github.com/pypa/packaging/pull/1065)\n-
          Add the `packaging.direct_url` module by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;944](https://redirect.github.com/pypa/packaging/pull/944)\n-
          Add the `packaging.errors` module by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1071](https://redirect.github.com/pypa/packaging/pull/1071)\n-
          Add `SpecifierSet.is_unsatisfiable` using ranges (new internals that will
          be expanded in future versions) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1119](https://redirect.github.com/pypa/packaging/pull/1119)\n-
          Add `create_compatible_tags_selector` to select compatible tags by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1110](https://redirect.github.com/pypa/packaging/pull/1110)\n-
          Add a `key` argument to `SpecifierSet.filter()` by [@&#8203;frostming](https://redirect.github.com/frostming)
          in [#&#8203;1068](https://redirect.github.com/pypa/packaging/pull/1068)\n-
          Support `&` and `|` for `Marker`'s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1146](https://redirect.github.com/pypa/packaging/pull/1146)\n-
          Normalize `Version.__replace__` and add `Version.from_parts` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1078](https://redirect.github.com/pypa/packaging/pull/1078)\n-
          Add an option to validate compressed tag set sort order in `parse_wheel_filename`
          by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in [#&#8203;1150](https://redirect.github.com/pypa/packaging/pull/1150)\n\nBehavior
          adaptations:\n\n- Narrow exclusion of pre-releases for `<V.postN` to match
          spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1140](https://redirect.github.com/pypa/packaging/pull/1140)\n-
          Narrow exclusion of post-releases for `>V` to match spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1141](https://redirect.github.com/pypa/packaging/pull/1141)\n-
          Rename `format_full_version` to `_format_full_version` to make it visibly
          private by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in
          [#&#8203;1125](https://redirect.github.com/pypa/packaging/pull/1125)\n-
          Restrict local version to ASCII by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1102](https://redirect.github.com/pypa/packaging/pull/1102)\n\nPylock
          (PEP 751) updates:\n\n- Add pylock `select` function by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1092](https://redirect.github.com/pypa/packaging/pull/1092)\n-
          Document pylock `select()` method and `PylockSelectError` by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
          in [#&#8203;1153](https://redirect.github.com/pypa/packaging/pull/1153)\n-
          Add `filename` property to `PackageSdist` and `PackageWheel`, more validation
          by [@&#8203;sbidoul](https://redirect.github.com/sbidoul) in [#&#8203;1095](https://redirect.github.com/pypa/packaging/pull/1095)\n-
          Give preference to path over url by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1128](https://redirect.github.com/pypa/packaging/pull/1128)\n-
          Validate name/version consistency in file names by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1114](https://redirect.github.com/pypa/packaging/pull/1114)\n\nFixes:\n\n-
          Fix `>` comparison for versions with dev+local segments by [@&#8203;veeceey](https://redirect.github.com/veeceey)
          in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
          Fix incorrect self-comparison for `InfinityType` and `NegativeInfinityType`
          by [@&#8203;bysiber](https://redirect.github.com/bysiber) in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
          Canonicalize when deduplicating specifiers in `SpecifierSet` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1109](https://redirect.github.com/pypa/packaging/pull/1109)\n-
          Fix charset error message formatting by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1121](https://redirect.github.com/pypa/packaging/pull/1121)\n-
          Handle the `key` parameter in `SpecifierSet.filter` when specifiers are
          empty and prerelease is `False` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1096](https://redirect.github.com/pypa/packaging/pull/1096)\n-
          Standardize inner components of `repr` output by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1090](https://redirect.github.com/pypa/packaging/pull/1090)\n-
          `Specifier`'s `===` uses original string, not normalized, when available
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1124](https://redirect.github.com/pypa/packaging/pull/1124)\n-
          Propagate int-max-str-digits `ValueError` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1155](https://redirect.github.com/pypa/packaging/pull/1155)\n\nPerformance:\n\n-
          Add fast path for parsing simple versions (digits and dots only) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1082](https://redirect.github.com/pypa/packaging/pull/1082)\n-
          Add fast path for `Version` to `Version` comparison by skipping `_key` property
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1083](https://redirect.github.com/pypa/packaging/pull/1083)\n-
          Cache `Version` hash value in dedicated slot by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1118](https://redirect.github.com/pypa/packaging/pull/1118)\n-
          Overhaul `_cmpkey` to remove use of custom objects by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1116](https://redirect.github.com/pypa/packaging/pull/1116)\n-
          Skip `__replace__` in Specifier comparison if not needed by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1081](https://redirect.github.com/pypa/packaging/pull/1081)\n-
          `SpecifierSet` use `tuple` instead of `frozenset` for `_specs` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1108](https://redirect.github.com/pypa/packaging/pull/1108)\n-
          Speed up complex `SpecifierSet` filtering by implementing cost-based ordering
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1105](https://redirect.github.com/pypa/packaging/pull/1105)\n-
          Speed up wildcard comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1111](https://redirect.github.com/pypa/packaging/pull/1111)\n-
          Stream PEP440 filtering in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1076](https://redirect.github.com/pypa/packaging/pull/1076)\n-
          Add `__slots__` to `Marker` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1147](https://redirect.github.com/pypa/packaging/pull/1147)\n-
          Simply `Specifier` regex by [@&#8203;sirosen](https://redirect.github.com/sirosen)
          in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
          Skip using the hash property internally by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1115](https://redirect.github.com/pypa/packaging/pull/1115)\n\nInternal:\n\n-
          Add downstream testing by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1049](https://redirect.github.com/pypa/packaging/pull/1049)\n-
          Benchmarking suite by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1059](https://redirect.github.com/pypa/packaging/pull/1059)\n-
          Benchmark variance reduction by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1107](https://redirect.github.com/pypa/packaging/pull/1107)\n-
          Add property-based tests for PEP 440 by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1144](https://redirect.github.com/pypa/packaging/pull/1144)\n-
          Clean up a few `collections.namedtuple` in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1070](https://redirect.github.com/pypa/packaging/pull/1070)\n-
          Do not reload the tags module in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1152](https://redirect.github.com/pypa/packaging/pull/1152)\n-
          Limit `dir()` / tab-completion in REPL by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1011](https://redirect.github.com/pypa/packaging/pull/1011)\n-
          Add more `__all__`/`__dir__` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1069](https://redirect.github.com/pypa/packaging/pull/1069)\n-
          Cleanup pre-commit a bit by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1080](https://redirect.github.com/pypa/packaging/pull/1080)\n-
          Pin pre-commit file, use dependabot by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1133](https://redirect.github.com/pypa/packaging/pull/1133)\n-
          Remove sphinx-toolbox by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1135](https://redirect.github.com/pypa/packaging/pull/1135)\n-
          Use docs group, faster readthedocs by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1061](https://redirect.github.com/pypa/packaging/pull/1061)\n-
          Add free-threaded Python to CI by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1098](https://redirect.github.com/pypa/packaging/pull/1098)\n-
          Simplify combining `SpecifierSet.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1073](https://redirect.github.com/pypa/packaging/pull/1073)\n-
          Use direct operator methods in `_compare_compatible` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1100](https://redirect.github.com/pypa/packaging/pull/1100)\n-
          Remove unnecessary if statement in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1074](https://redirect.github.com/pypa/packaging/pull/1074)\n-
          Remove unneeded nesting in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1072](https://redirect.github.com/pypa/packaging/pull/1072)\n\nDocumentation:\n\n-
          Fix documentation: grammar, typos, formatting, and outdated references by
          [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
          in [#&#8203;1084](https://redirect.github.com/pypa/packaging/pull/1084)\n-
          Fix versionadded for `Version.from_parts()` by [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen)
          in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
          Document `&` and `|` operators for combining `Marker` objects by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
          in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
          Expand and clean up `Version` documentation by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1089](https://redirect.github.com/pypa/packaging/pull/1089)\n-
          Move license docs inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1131](https://redirect.github.com/pypa/packaging/pull/1131)\n-
          Move markers inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1104](https://redirect.github.com/pypa/packaging/pull/1104)\n-
          Move tags docs to inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1130](https://redirect.github.com/pypa/packaging/pull/1130)\n-
          Move utilities inline, like other modules by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1103](https://redirect.github.com/pypa/packaging/pull/1103)\n\n####
          Benchmarks\n\nPerformance improvements since 26.0, from the new integrated
          benchmark suite:\n\n```\nuv run asv run 26.0..HEAD\n```\n\n<img width=\"908\"
          height=\"965\" alt=\"Screenshot 2026-04-13 at 11 32 14\u202FPM\" src=\"https://github.com/user-attachments/assets/3bf63569-dbbf-4f34-9660-ede3cef1745d\"
          />\n\n<img width=\"908\" height=\"479\" alt=\"Screenshot 2026-04-13 at 11
          32 43\u202FPM\" src=\"https://github.com/user-attachments/assets/f7906800-f6d9-4af6-a3f3-369b654b73e3\"
          />\n\n#### New Contributors\n\n- [@&#8203;veeceey](https://redirect.github.com/veeceey)
          made their first contribution in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
          [@&#8203;bysiber](https://redirect.github.com/bysiber) made their first
          contribution in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
          [@&#8203;sirosen](https://redirect.github.com/sirosen) made their first
          contribution in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
          [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen) made their first
          contribution in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
          [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum) made their first
          contribution in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
          [@&#8203;r266-tech](https://redirect.github.com/r266-tech) made their first
          contribution in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
          [@&#8203;hoodmane](https://redirect.github.com/hoodmane) made their first
          contribution in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n\n**Full
          Changelog**: <https://github.com/pypa/packaging/compare/26.0...26.1>\n\n###
          [`v26.0`](https://redirect.github.com/pypa/packaging/releases/tag/26.0)\n\n[Compare
          Source](https://redirect.github.com/pypa/packaging/compare/25.0...26.0)\n\nRead
          about the performance improvements here: <https://iscinumpy.dev/post/packaging-faster>.\n\n####
          What's Changed\n\nFeatures:\n\n- PEP 751: support pylock by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;900](https://redirect.github.com/pypa/packaging/pull/900)\n-
          PEP 794: import name metadata by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
          in [#&#8203;948](https://redirect.github.com/pypa/packaging/pull/948)\n-
          Support writing metadata by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;846](https://redirect.github.com/pypa/packaging/pull/846)\n-
          Support `__replace__` for `Version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1003](https://redirect.github.com/pypa/packaging/pull/1003)\n-
          Support positional pattern matching for `Version` and `Specifier` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1004](https://redirect.github.com/pypa/packaging/pull/1004)\n\nBehavior
          adaptations:\n\n- PEP 440 handling of prereleases for `Specifier.contains`,
          `SpecifierSet.contains`, and `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;897](https://redirect.github.com/pypa/packaging/pull/897)\n-
          Handle PEP 440 edge case in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;942](https://redirect.github.com/pypa/packaging/pull/942)\n-
          Adjust arbitrary equality intersection preservation in `SpecifierSet` by
          [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;951](https://redirect.github.com/pypa/packaging/pull/951)\n-
          Return `False` instead of raising for `.contains` with invalid version by
          [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe) in [#&#8203;932](https://redirect.github.com/pypa/packaging/pull/932)\n-
          Support arbitrary equality on arbitrary strings for `Specifier` and `SpecifierSet`'s
          `filter` and `contains` method. by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;954](https://redirect.github.com/pypa/packaging/pull/954)\n-
          Only try to parse as `Version` on certain marker keys, return `False` on
          unequal ordered comparsions by [@&#8203;JP-Ellis](https://redirect.github.com/JP-Ellis)
          in [#&#8203;939](https://redirect.github.com/pypa/packaging/pull/939)\n\nFixes:\n\n-
          Update `_hash` when unpickling `Tag()` by [@&#8203;dholth](https://redirect.github.com/dholth)
          in [#&#8203;860](https://redirect.github.com/pypa/packaging/pull/860)\n-
          Correct comment and simplify implicit prerelease handling in `Specifier.prereleases`
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;896](https://redirect.github.com/pypa/packaging/pull/896)\n-
          Use explicit `_GLibCVersion` `NamedTuple` in `_manylinux` by [@&#8203;cthoyt](https://redirect.github.com/cthoyt)
          in [#&#8203;868](https://redirect.github.com/pypa/packaging/pull/868)\n-
          Detect invalid license expressions containing `()` by [@&#8203;bwoodsend](https://redirect.github.com/bwoodsend)
          in [#&#8203;879](https://redirect.github.com/pypa/packaging/pull/879)\n-
          Correct regex for metadata `'name'` format by [@&#8203;di](https://redirect.github.com/di)
          in [#&#8203;925](https://redirect.github.com/pypa/packaging/pull/925)\n-
          Improve the message around expecting a semicolon by [@&#8203;pradyunsg](https://redirect.github.com/pradyunsg)
          in [#&#8203;833](https://redirect.github.com/pypa/packaging/pull/833)\n-
          Support nested parens in license expressions by [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe)
          in [#&#8203;931](https://redirect.github.com/pypa/packaging/pull/931)\n-
          Add space before at symbol in `Requirements` string by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;953](https://redirect.github.com/pypa/packaging/pull/953)\n-
          A root logger use found by ruff LOG, use `packaging` logger instead by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;965](https://redirect.github.com/pypa/packaging/pull/965)\n-
          Better support for subclassing `Marker` and `Requirement` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1022](https://redirect.github.com/pypa/packaging/pull/1022)\n-
          Normalize all extras, not just if it comes first by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1024](https://redirect.github.com/pypa/packaging/pull/1024)\n-
          Don't produce a broken repr if `Marker` fails to construct by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1033](https://redirect.github.com/pypa/packaging/pull/1033)\n\nPerformance:\n\n-
          Avoid recompiling regexes in the tokenizer for a 3x speedup by [@&#8203;hauntsaninja](https://redirect.github.com/hauntsaninja)
          in [#&#8203;1019](https://redirect.github.com/pypa/packaging/pull/1019)\n-
          Improve performance in `_manylinux.py` by [@&#8203;cthoyt](https://redirect.github.com/cthoyt)
          in [#&#8203;869](https://redirect.github.com/pypa/packaging/pull/869)\n-
          Minor cleanups to `Version` by [@&#8203;bearomorphism](https://redirect.github.com/bearomorphism)
          in [#&#8203;913](https://redirect.github.com/pypa/packaging/pull/913)\n-
          Skip redundant creation of `Version`s in specifier comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;986](https://redirect.github.com/pypa/packaging/pull/986)\n-
          Cache `Specifier`'s Version by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;985](https://redirect.github.com/pypa/packaging/pull/985)\n-
          Make `Version` a little faster by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;987](https://redirect.github.com/pypa/packaging/pull/987)\n-
          Minor `Version` regex cleanup by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;990](https://redirect.github.com/pypa/packaging/pull/990)\n-
          Faster regex on Python 3.11.5+ by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;988](https://redirect.github.com/pypa/packaging/pull/988) and
          [#&#8203;1055](https://redirect.github.com/pypa/packaging/pull/1055)\n-
          Lazily calculate `_key` in `Version` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;989](https://redirect.github.com/pypa/packaging/pull/989) and
          regression for `packaging_legacy` fixed by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1048](https://redirect.github.com/pypa/packaging/pull/1048)\n-
          Faster `canonicalize_version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;993](https://redirect.github.com/pypa/packaging/pull/993)\n-
          Use `fullmatch` in a couple more places by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;992](https://redirect.github.com/pypa/packaging/pull/992)\n-
          Use `fullmatch` for markers too by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1029](https://redirect.github.com/pypa/packaging/pull/1029)\n-
          Use `map` instead of generator by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;996](https://redirect.github.com/pypa/packaging/pull/996)\n-
          Deprecate `._version` (`_Version`, a `NamedTuple`) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;995](https://redirect.github.com/pypa/packaging/pull/995) and
          [#&#8203;1062](https://redirect.github.com/pypa/packaging/pull/1062)\n-
          Avoid duplicate `Version` creation in `canonicalize_version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;994](https://redirect.github.com/pypa/packaging/pull/994)\n-
          Add `__slots__` to `Version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1001](https://redirect.github.com/pypa/packaging/pull/1001)\n-
          Add `__slots__` to `Specifier`s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1002](https://redirect.github.com/pypa/packaging/pull/1002)\n-
          Add `__slots__` to `Node`s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1032](https://redirect.github.com/pypa/packaging/pull/1032)\n-
          Use `version.__replace__` in specifier comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;999](https://redirect.github.com/pypa/packaging/pull/999)\n-
          Use `_get_spec_version` in more places in `Specifier` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1005](https://redirect.github.com/pypa/packaging/pull/1005)\n-
          Pull `set` construction out of function by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1012](https://redirect.github.com/pypa/packaging/pull/1012)\n-
          Letter normalization dict for prereleases and the like by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1014](https://redirect.github.com/pypa/packaging/pull/1014)\n-
          Avoid normalizing extras again when comparing by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1028](https://redirect.github.com/pypa/packaging/pull/1028)\n-
          Speed up `Version.__str__` by about 10% by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;997](https://redirect.github.com/pypa/packaging/pull/997)\n-
          Increase the performance of `canonicalize_name` by avoiding a regex by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1030](https://redirect.github.com/pypa/packaging/pull/1030),
          [#&#8203;1047](https://redirect.github.com/pypa/packaging/pull/1047), and
          [#&#8203;1064](https://redirect.github.com/pypa/packaging/pull/1064)\n-
          Faster zero stripping by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1058](https://redirect.github.com/pypa/packaging/pull/1058)\n\nType
          annotations:\n\n- Fix a type annotation by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
          in [#&#8203;907](https://redirect.github.com/pypa/packaging/pull/907)\n-
          Fix tags return type in `parse_wheel_filename` docs by [@&#8203;ncoghlan](https://redirect.github.com/ncoghlan)
          in [#&#8203;973](https://redirect.github.com/pypa/packaging/pull/973)\n-
          Add type hint for `_version` in `.version.Version` by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
          in [#&#8203;927](https://redirect.github.com/pypa/packaging/pull/927)\n-
          Changed static type annotations in prereleases setter method in `specifier.py`
          by [@&#8203;subhajitsaha01](https://redirect.github.com/subhajitsaha01)
          in [#&#8203;930](https://redirect.github.com/pypa/packaging/pull/930)\n-
          Statically type the tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;982](https://redirect.github.com/pypa/packaging/pull/982)\n\nInternal:\n\n-
          Test and declare support Python 3.14 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;901](https://redirect.github.com/pypa/packaging/pull/901)\n-
          Modernize and speed up tests on Python 3.14 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;903](https://redirect.github.com/pypa/packaging/pull/903)\n-
          Change our license metadata to use an SPDX license expression by [@&#8203;cdce8p](https://redirect.github.com/cdce8p)
          in [#&#8203;881](https://redirect.github.com/pypa/packaging/pull/881)\n-
          No need for `license-files` by [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
          in [#&#8203;924](https://redirect.github.com/pypa/packaging/pull/924)\n-
          Update mypy by [@&#8203;hauntsaninja](https://redirect.github.com/hauntsaninja)
          in [#&#8203;891](https://redirect.github.com/pypa/packaging/pull/891)\n-
          Some config updates by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;902](https://redirect.github.com/pypa/packaging/pull/902)\n-
          Add spell check and rst check by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;904](https://redirect.github.com/pypa/packaging/pull/904)\n-
          Clean up ruff ignores by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;905](https://redirect.github.com/pypa/packaging/pull/905)\n-
          Update example for env marker `python_version` by [@&#8203;trim21](https://redirect.github.com/trim21)
          in [#&#8203;908](https://redirect.github.com/pypa/packaging/pull/908)\n-
          Move codespell configuration into pyproject.toml by [@&#8203;yarikoptic](https://redirect.github.com/yarikoptic)
          in [#&#8203;910](https://redirect.github.com/pypa/packaging/pull/910)\n-
          Check warning a little more precisely by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;837](https://redirect.github.com/pypa/packaging/pull/837)\n-
          Speed up mypy a little by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;836](https://redirect.github.com/pypa/packaging/pull/836)\n-
          Apply ruff/flake8-pyi rules (PYI) by [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
          in [#&#8203;835](https://redirect.github.com/pypa/packaging/pull/835)\n-
          Better local runs for codespell by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;911](https://redirect.github.com/pypa/packaging/pull/911)\n-
          Remove outdated/confusing Gist link by [@&#8203;stefan6419846](https://redirect.github.com/stefan6419846)
          in [#&#8203;921](https://redirect.github.com/pypa/packaging/pull/921)\n-
          Fix docs and docs ci after [#&#8203;897](https://redirect.github.com/pypa/packaging/issues/897)
          landed by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;926](https://redirect.github.com/pypa/packaging/pull/926)\n-
          Run twine-check on push in CI by [@&#8203;EpicWink](https://redirect.github.com/EpicWink)
          in [#&#8203;922](https://redirect.github.com/pypa/packaging/pull/922)\n-
          `ruff` was renamed `ruff-check` in pre-commit by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;933](https://redirect.github.com/pypa/packaging/pull/933)\n-
          Fix incorrectly implicitly concatenated string in specifiers test by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;946](https://redirect.github.com/pypa/packaging/pull/946)\n-
          Simplify conditional by [@&#8203;ofek](https://redirect.github.com/ofek)
          in [#&#8203;949](https://redirect.github.com/pypa/packaging/pull/949)\n-
          Modernize nox, use dependency-groups for tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;952](https://redirect.github.com/pypa/packaging/pull/952)\n-
          Add more checks that don't affect anything by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;957](https://redirect.github.com/pypa/packaging/pull/957)\n-
          Enable Ruff ISC rule by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;959](https://redirect.github.com/pypa/packaging/pull/959)\n-
          Ruff code FLY by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;963](https://redirect.github.com/pypa/packaging/pull/963)\n-
          pytest `log_level` is better than `log_cli_level` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;956](https://redirect.github.com/pypa/packaging/pull/956)\n-
          Ruff code TRY by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;961](https://redirect.github.com/pypa/packaging/pull/961)\n-
          Add the ruff PL checks by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;964](https://redirect.github.com/pypa/packaging/pull/964)\n-
          Enable Ruff ARG rules by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;958](https://redirect.github.com/pypa/packaging/pull/958)\n-
          Ruff PT code (pytest) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;960](https://redirect.github.com/pypa/packaging/pull/960)\n-
          Add ruff DTZ by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;968](https://redirect.github.com/pypa/packaging/pull/968)\n-
          Add ruff BLE by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;967](https://redirect.github.com/pypa/packaging/pull/967)\n-
          Add the ruff SIM checks by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;966](https://redirect.github.com/pypa/packaging/pull/966)\n-
          Adding ruff PERF by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;969](https://redirect.github.com/pypa/packaging/pull/969)\n-
          Move some config into coverage config by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;971](https://redirect.github.com/pypa/packaging/pull/971)\n-
          Check ruff C4 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;962](https://redirect.github.com/pypa/packaging/pull/962)\n-
          Adding ruff T20 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;972](https://redirect.github.com/pypa/packaging/pull/972)\n-
          Add a tests pass job by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;977](https://redirect.github.com/pypa/packaging/pull/977)\n-
          Add ruff TC by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;980](https://redirect.github.com/pypa/packaging/pull/980)\n-
          Adding part of ruff RET by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;979](https://redirect.github.com/pypa/packaging/pull/979)\n-
          Reorder mypy check by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;983](https://redirect.github.com/pypa/packaging/pull/983)\n-
          Enable ruff ALL by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;984](https://redirect.github.com/pypa/packaging/pull/984)\n-
          Link back to repo/source in furo by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;991](https://redirect.github.com/pypa/packaging/pull/991)\n-
          Add case insensitivity tests for arbitrary equality by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;975](https://redirect.github.com/pypa/packaging/pull/975)\n-
          Synchronize documentation and code for markers by [@&#8203;zahlman](https://redirect.github.com/zahlman)
          in [#&#8203;1008](https://redirect.github.com/pypa/packaging/pull/1008)\n-
          Use `partition` in `_parse_project_urls` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1013](https://redirect.github.com/pypa/packaging/pull/1013)\n-
          auto-skip the dependabot PRs in the release changelog generation by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1016](https://redirect.github.com/pypa/packaging/pull/1016)\n-
          Update unreleased section in changelog by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1017](https://redirect.github.com/pypa/packaging/pull/1017)\n-
          Fix PR role to match extlinks by [@&#8203;hugovk](https://redirect.github.com/hugovk)
          in [#&#8203;1020](https://redirect.github.com/pypa/packaging/pull/1020)\n-
          Mention new parts in README by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1023](https://redirect.github.com/pypa/packaging/pull/1023)\n-
          Replace a couple of asserts with else by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1027](https://redirect.github.com/pypa/packaging/pull/1027)\n-
          Simplify and/or check a little more by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1031](https://redirect.github.com/pypa/packaging/pull/1031)\n-
          Use slim runner for all check by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1021](https://redirect.github.com/pypa/packaging/pull/1021)\n-
          Use typos instead of codespell by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1015](https://redirect.github.com/pypa/packaging/pull/1015)\n-
          Update changelog with recent additions by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1034](https://redirect.github.com/pypa/packaging/pull/1034)\n-
          Publish to PyPI via GitHub CI by [@&#8203;EpicWink](https://redirect.github.com/EpicWink)
          in [#&#8203;893](https://redirect.github.com/pypa/packaging/pull/893)\n-
          Use prek for faster pre-commit lint step by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1037](https://redirect.github.com/pypa/packaging/pull/1037)\n-
          Add help text to noxfile by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1038](https://redirect.github.com/pypa/packaging/pull/1038)\n-
          Update licenses to 3.27 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1036](https://redirect.github.com/pypa/packaging/pull/1036)\n-
          Use relative import in `packaging.licenses` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1039](https://redirect.github.com/pypa/packaging/pull/1039)\n-
          Add zizmor and tighten up CI by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1035](https://redirect.github.com/pypa/packaging/pull/1035)\n-
          Fix release script by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1040](https://redirect.github.com/pypa/packaging/pull/1040)\n-
          Fix using a dev version (again) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1041](https://redirect.github.com/pypa/packaging/pull/1041)\n-
          Fix type hint of function used with `contextlib.contextmanager` by [@&#8203;SpecLad](https://redirect.github.com/SpecLad)
          in [#&#8203;1046](https://redirect.github.com/pypa/packaging/pull/1046)\n-
          Always run tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1044](https://redirect.github.com/pypa/packaging/pull/1044)\n-
          Fix a changelog number by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1042](https://redirect.github.com/pypa/packaging/pull/1042)\n-
          Fix the publish job by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1043](https://redirect.github.com/pypa/packaging/pull/1043)\n-
          Get the correct tag on publish by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1045](https://redirect.github.com/pypa/packaging/pull/1045)\n-
          Test on first public release of CPython 3.11 and newer by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1056](https://redirect.github.com/pypa/packaging/pull/1056)\n-
          Fix publication job (again) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1051](https://redirect.github.com/pypa/packaging/pull/1051)\n-
          Use `actionlint` to check CI workflows by [@&#8203;miketheman](https://redirect.github.com/miketheman)
          in [#&#8203;1052](https://redirect.github.com/pypa/packaging/pull/1052)\n-
          Fix formatting of distribution types in metadata.rst by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
          in [#&#8203;1053](https://redirect.github.com/pypa/packaging/pull/1053)\n\n####
          New Contributors\n\n- [@&#8203;cdce8p](https://redirect.github.com/cdce8p)
          made their first contribution in [#&#8203;881](https://redirect.github.com/pypa/packaging/pull/881)\n-
          [@&#8203;dholth](https://redirect.github.com/dholth) made their first contribution
          in [#&#8203;860](https://redirect.github.com/pypa/packaging/pull/860)\n-
          [@&#8203;trim21](https://redirect.github.com/trim21) made their first contribution
          in [#&#8203;908](https://redirect.github.com/pypa/packaging/pull/908)\n-
          [@&#8203;yarikoptic](https://redirect.github.com/yarikoptic) made their
          first contribution in [#&#8203;910](https://redirect.github.com/pypa/packaging/pull/910)\n-
          [@&#8203;cthoyt](https://redirect.github.com/cthoyt) made their first contribution
          in [#&#8203;868](https://redirect.github.com/pypa/packaging/pull/868)\n-
          [@&#8203;bwoodsend](https://redirect.github.com/bwoodsend) made their first
          contribution in [#&#8203;879](https://redirect.github.com/pypa/packaging/pull/879)\n-
          [@&#8203;stefan6419846](https://redirect.github.com/stefan6419846) made
          their first contribution in [#&#8203;921](https://redirect.github.com/pypa/packaging/pull/921)\n-
          [@&#8203;bearomorphism](https://redirect.github.com/bearomorphism) made
          their first contribution in [#&#8203;913](https://redirect.github.com/pypa/packaging/pull/913)\n-
          [@&#8203;EpicWink](https://redirect.github.com/EpicWink) made their first
          contribution in [#&#8203;922](https://redirect.github.com/pypa/packaging/pull/922)\n-
          [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe) made their
          first contribution in [#&#8203;932](https://redirect.github.com/pypa/packaging/pull/932)\n-
          [@&#8203;subhajitsaha01](https://redirect.github.com/subhajitsaha01) made
          their first contribution in [#&#8203;930](https://redirect.github.com/pypa/packaging/pull/930)\n-
          [@&#8203;ncoghlan](https://redirect.github.com/ncoghlan) made their first
          contribution in [#&#8203;973](https://redirect.github.com/pypa/packaging/pull/973)\n-
          [@&#8203;zahlman](https://redirect.github.com/zahlman) made their first
          contribution in [#&#8203;1008](https://redirect.github.com/pypa/packaging/pull/1008)\n-
          [@&#8203;JP-Ellis](https://redirect.github.com/JP-Ellis) made their first
          contribution in [#&#8203;939](https://redirect.github.com/pypa/packaging/pull/939)\n\n####
          Since last RC\n\nFixes:\n\n- Restore `._version` as a compat shim by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1062](https://redirect.github.com/pypa/packaging/pull/1062)\n\nPerformance:\n\n-
          Dual replace by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1064](https://redirect.github.com/pypa/packaging/pull/1064)\n\nDocumentaiton:\n\n-
          Prepare for 26.0 final by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1063](https://redirect.github.com/pypa/packaging/pull/1063)\n\n**Full
          Changelog**: <https://github.com/pypa/packaging/compare/26.0rc3...26.0>\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - 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\U0001F515 **Ignore**:
          Close this PR and you won't be reminded about this update again.\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/osism/cloud-in-a-box).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi44NS4xIiwidXBkYXRlZEluVmVyIjoiNDMuMTEwLjIiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlIl19-->\n"
        change_url: https://github.com/osism/cloud-in-a-box/pull/425
        commit_id: 524a0209bd6def60143f9d9c0af2e4dc7e975735
        patchset: 524a0209bd6def60143f9d9c0af2e4dc7e975735
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/cloud-in-a-box
          name: osism/cloud-in-a-box
          short_name: cloud-in-a-box
        src_dir: src/github.com/osism/cloud-in-a-box
        topic: null
      change: '425'
      change_message: "Update dependency packaging to v26\n\nThis PR contains the
        following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
        | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
        [packaging](https://redirect.github.com/pypa/packaging) | `==25.0` \u2192
        `==26.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.1?slim=true)
        | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/25.0/26.1?slim=true)
        |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pypa/packaging (packaging)</summary>\n\n###
        [`v26.1`](https://redirect.github.com/pypa/packaging/releases/tag/26.1)\n\n[Compare
        Source](https://redirect.github.com/pypa/packaging/compare/26.0...26.1)\n\nFeatures:\n\n-
        PEP 783: add handling for Emscripten wheel tags by [@&#8203;hoodmane](https://redirect.github.com/hoodmane)
        in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n- PEP
        803: add handling for the `abi3.abi3t` free-threading tag by [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum)
        in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
        PEP 723: add `packaging.dependency_groups` module, based on the `dependency-groups`
        package by [@&#8203;sirosen](https://redirect.github.com/sirosen) in [#&#8203;1065](https://redirect.github.com/pypa/packaging/pull/1065)\n-
        Add the `packaging.direct_url` module by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
        in [#&#8203;944](https://redirect.github.com/pypa/packaging/pull/944)\n- Add
        the `packaging.errors` module by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1071](https://redirect.github.com/pypa/packaging/pull/1071)\n-
        Add `SpecifierSet.is_unsatisfiable` using ranges (new internals that will
        be expanded in future versions) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1119](https://redirect.github.com/pypa/packaging/pull/1119)\n-
        Add `create_compatible_tags_selector` to select compatible tags by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
        in [#&#8203;1110](https://redirect.github.com/pypa/packaging/pull/1110)\n-
        Add a `key` argument to `SpecifierSet.filter()` by [@&#8203;frostming](https://redirect.github.com/frostming)
        in [#&#8203;1068](https://redirect.github.com/pypa/packaging/pull/1068)\n-
        Support `&` and `|` for `Marker`'s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1146](https://redirect.github.com/pypa/packaging/pull/1146)\n-
        Normalize `Version.__replace__` and add `Version.from_parts` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1078](https://redirect.github.com/pypa/packaging/pull/1078)\n-
        Add an option to validate compressed tag set sort order in `parse_wheel_filename`
        by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in [#&#8203;1150](https://redirect.github.com/pypa/packaging/pull/1150)\n\nBehavior
        adaptations:\n\n- Narrow exclusion of pre-releases for `<V.postN` to match
        spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
        [#&#8203;1140](https://redirect.github.com/pypa/packaging/pull/1140)\n- Narrow
        exclusion of post-releases for `>V` to match spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1141](https://redirect.github.com/pypa/packaging/pull/1141)\n-
        Rename `format_full_version` to `_format_full_version` to make it visibly
        private by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in [#&#8203;1125](https://redirect.github.com/pypa/packaging/pull/1125)\n-
        Restrict local version to ASCII by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1102](https://redirect.github.com/pypa/packaging/pull/1102)\n\nPylock
        (PEP 751) updates:\n\n- Add pylock `select` function by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
        in [#&#8203;1092](https://redirect.github.com/pypa/packaging/pull/1092)\n-
        Document pylock `select()` method and `PylockSelectError` by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
        in [#&#8203;1153](https://redirect.github.com/pypa/packaging/pull/1153)\n-
        Add `filename` property to `PackageSdist` and `PackageWheel`, more validation
        by [@&#8203;sbidoul](https://redirect.github.com/sbidoul) in [#&#8203;1095](https://redirect.github.com/pypa/packaging/pull/1095)\n-
        Give preference to path over url by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
        in [#&#8203;1128](https://redirect.github.com/pypa/packaging/pull/1128)\n-
        Validate name/version consistency in file names by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
        in [#&#8203;1114](https://redirect.github.com/pypa/packaging/pull/1114)\n\nFixes:\n\n-
        Fix `>` comparison for versions with dev+local segments by [@&#8203;veeceey](https://redirect.github.com/veeceey)
        in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
        Fix incorrect self-comparison for `InfinityType` and `NegativeInfinityType`
        by [@&#8203;bysiber](https://redirect.github.com/bysiber) in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
        Canonicalize when deduplicating specifiers in `SpecifierSet` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1109](https://redirect.github.com/pypa/packaging/pull/1109)\n-
        Fix charset error message formatting by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1121](https://redirect.github.com/pypa/packaging/pull/1121)\n-
        Handle the `key` parameter in `SpecifierSet.filter` when specifiers are empty
        and prerelease is `False` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1096](https://redirect.github.com/pypa/packaging/pull/1096)\n-
        Standardize inner components of `repr` output by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1090](https://redirect.github.com/pypa/packaging/pull/1090)\n-
        `Specifier`'s `===` uses original string, not normalized, when available by
        [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1124](https://redirect.github.com/pypa/packaging/pull/1124)\n-
        Propagate int-max-str-digits `ValueError` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1155](https://redirect.github.com/pypa/packaging/pull/1155)\n\nPerformance:\n\n-
        Add fast path for parsing simple versions (digits and dots only) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1082](https://redirect.github.com/pypa/packaging/pull/1082)\n-
        Add fast path for `Version` to `Version` comparison by skipping `_key` property
        by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1083](https://redirect.github.com/pypa/packaging/pull/1083)\n-
        Cache `Version` hash value in dedicated slot by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1118](https://redirect.github.com/pypa/packaging/pull/1118)\n-
        Overhaul `_cmpkey` to remove use of custom objects by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1116](https://redirect.github.com/pypa/packaging/pull/1116)\n-
        Skip `__replace__` in Specifier comparison if not needed by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1081](https://redirect.github.com/pypa/packaging/pull/1081)\n-
        `SpecifierSet` use `tuple` instead of `frozenset` for `_specs` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1108](https://redirect.github.com/pypa/packaging/pull/1108)\n-
        Speed up complex `SpecifierSet` filtering by implementing cost-based ordering
        by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1105](https://redirect.github.com/pypa/packaging/pull/1105)\n-
        Speed up wildcard comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1111](https://redirect.github.com/pypa/packaging/pull/1111)\n-
        Stream PEP440 filtering in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1076](https://redirect.github.com/pypa/packaging/pull/1076)\n-
        Add `__slots__` to `Marker` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1147](https://redirect.github.com/pypa/packaging/pull/1147)\n-
        Simply `Specifier` regex by [@&#8203;sirosen](https://redirect.github.com/sirosen)
        in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
        Skip using the hash property internally by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1115](https://redirect.github.com/pypa/packaging/pull/1115)\n\nInternal:\n\n-
        Add downstream testing by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1049](https://redirect.github.com/pypa/packaging/pull/1049)\n-
        Benchmarking suite by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1059](https://redirect.github.com/pypa/packaging/pull/1059)\n-
        Benchmark variance reduction by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1107](https://redirect.github.com/pypa/packaging/pull/1107)\n-
        Add property-based tests for PEP 440 by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1144](https://redirect.github.com/pypa/packaging/pull/1144)\n-
        Clean up a few `collections.namedtuple` in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1070](https://redirect.github.com/pypa/packaging/pull/1070)\n-
        Do not reload the tags module in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1152](https://redirect.github.com/pypa/packaging/pull/1152)\n-
        Limit `dir()` / tab-completion in REPL by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1011](https://redirect.github.com/pypa/packaging/pull/1011)\n-
        Add more `__all__`/`__dir__` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1069](https://redirect.github.com/pypa/packaging/pull/1069)\n-
        Cleanup pre-commit a bit by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1080](https://redirect.github.com/pypa/packaging/pull/1080)\n-
        Pin pre-commit file, use dependabot by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1133](https://redirect.github.com/pypa/packaging/pull/1133)\n-
        Remove sphinx-toolbox by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1135](https://redirect.github.com/pypa/packaging/pull/1135)\n-
        Use docs group, faster readthedocs by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1061](https://redirect.github.com/pypa/packaging/pull/1061)\n-
        Add free-threaded Python to CI by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1098](https://redirect.github.com/pypa/packaging/pull/1098)\n-
        Simplify combining `SpecifierSet.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1073](https://redirect.github.com/pypa/packaging/pull/1073)\n-
        Use direct operator methods in `_compare_compatible` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1100](https://redirect.github.com/pypa/packaging/pull/1100)\n-
        Remove unnecessary if statement in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1074](https://redirect.github.com/pypa/packaging/pull/1074)\n-
        Remove unneeded nesting in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1072](https://redirect.github.com/pypa/packaging/pull/1072)\n\nDocumentation:\n\n-
        Fix documentation: grammar, typos, formatting, and outdated references by
        [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
        in [#&#8203;1084](https://redirect.github.com/pypa/packaging/pull/1084)\n-
        Fix versionadded for `Version.from_parts()` by [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen)
        in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
        Document `&` and `|` operators for combining `Marker` objects by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
        in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
        Expand and clean up `Version` documentation by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1089](https://redirect.github.com/pypa/packaging/pull/1089)\n-
        Move license docs inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1131](https://redirect.github.com/pypa/packaging/pull/1131)\n-
        Move markers inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1104](https://redirect.github.com/pypa/packaging/pull/1104)\n-
        Move tags docs to inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1130](https://redirect.github.com/pypa/packaging/pull/1130)\n-
        Move utilities inline, like other modules by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1103](https://redirect.github.com/pypa/packaging/pull/1103)\n\n####
        Benchmarks\n\nPerformance improvements since 26.0, from the new integrated
        benchmark suite:\n\n```\nuv run asv run 26.0..HEAD\n```\n\n<img width=\"908\"
        height=\"965\" alt=\"Screenshot 2026-04-13 at 11 32 14\u202FPM\" src=\"https://github.com/user-attachments/assets/3bf63569-dbbf-4f34-9660-ede3cef1745d\"
        />\n\n<img width=\"908\" height=\"479\" alt=\"Screenshot 2026-04-13 at 11
        32 43\u202FPM\" src=\"https://github.com/user-attachments/assets/f7906800-f6d9-4af6-a3f3-369b654b73e3\"
        />\n\n#### New Contributors\n\n- [@&#8203;veeceey](https://redirect.github.com/veeceey)
        made their first contribution in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
        [@&#8203;bysiber](https://redirect.github.com/bysiber) made their first contribution
        in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
        [@&#8203;sirosen](https://redirect.github.com/sirosen) made their first contribution
        in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
        [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen) made their first
        contribution in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
        [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum) made their first
        contribution in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
        [@&#8203;r266-tech](https://redirect.github.com/r266-tech) made their first
        contribution in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
        [@&#8203;hoodmane](https://redirect.github.com/hoodmane) made their first
        contribution in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n\n**Full
        Changelog**: <https://github.com/pypa/packaging/compare/26.0...26.1>\n\n###
        [`v26.0`](https://redirect.github.com/pypa/packaging/releases/tag/26.0)\n\n[Compare
        Source](https://redirect.github.com/pypa/packaging/compare/25.0...26.0)\n\nRead
        about the performance improvements here: <https://iscinumpy.dev/post/packaging-faster>.\n\n####
        What's Changed\n\nFeatures:\n\n- PEP 751: support pylock by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
        in [#&#8203;900](https://redirect.github.com/pypa/packaging/pull/900)\n- PEP
        794: import name metadata by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
        in [#&#8203;948](https://redirect.github.com/pypa/packaging/pull/948)\n- Support
        writing metadata by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;846](https://redirect.github.com/pypa/packaging/pull/846)\n- Support
        `__replace__` for `Version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1003](https://redirect.github.com/pypa/packaging/pull/1003)\n-
        Support positional pattern matching for `Version` and `Specifier` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1004](https://redirect.github.com/pypa/packaging/pull/1004)\n\nBehavior
        adaptations:\n\n- PEP 440 handling of prereleases for `Specifier.contains`,
        `SpecifierSet.contains`, and `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;897](https://redirect.github.com/pypa/packaging/pull/897)\n- Handle
        PEP 440 edge case in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;942](https://redirect.github.com/pypa/packaging/pull/942)\n- Adjust
        arbitrary equality intersection preservation in `SpecifierSet` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;951](https://redirect.github.com/pypa/packaging/pull/951)\n- Return
        `False` instead of raising for `.contains` with invalid version by [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe)
        in [#&#8203;932](https://redirect.github.com/pypa/packaging/pull/932)\n- Support
        arbitrary equality on arbitrary strings for `Specifier` and `SpecifierSet`'s
        `filter` and `contains` method. by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;954](https://redirect.github.com/pypa/packaging/pull/954)\n- Only
        try to parse as `Version` on certain marker keys, return `False` on unequal
        ordered comparsions by [@&#8203;JP-Ellis](https://redirect.github.com/JP-Ellis)
        in [#&#8203;939](https://redirect.github.com/pypa/packaging/pull/939)\n\nFixes:\n\n-
        Update `_hash` when unpickling `Tag()` by [@&#8203;dholth](https://redirect.github.com/dholth)
        in [#&#8203;860](https://redirect.github.com/pypa/packaging/pull/860)\n- Correct
        comment and simplify implicit prerelease handling in `Specifier.prereleases`
        by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;896](https://redirect.github.com/pypa/packaging/pull/896)\n-
        Use explicit `_GLibCVersion` `NamedTuple` in `_manylinux` by [@&#8203;cthoyt](https://redirect.github.com/cthoyt)
        in [#&#8203;868](https://redirect.github.com/pypa/packaging/pull/868)\n- Detect
        invalid license expressions containing `()` by [@&#8203;bwoodsend](https://redirect.github.com/bwoodsend)
        in [#&#8203;879](https://redirect.github.com/pypa/packaging/pull/879)\n- Correct
        regex for metadata `'name'` format by [@&#8203;di](https://redirect.github.com/di)
        in [#&#8203;925](https://redirect.github.com/pypa/packaging/pull/925)\n- Improve
        the message around expecting a semicolon by [@&#8203;pradyunsg](https://redirect.github.com/pradyunsg)
        in [#&#8203;833](https://redirect.github.com/pypa/packaging/pull/833)\n- Support
        nested parens in license expressions by [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe)
        in [#&#8203;931](https://redirect.github.com/pypa/packaging/pull/931)\n- Add
        space before at symbol in `Requirements` string by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;953](https://redirect.github.com/pypa/packaging/pull/953)\n- A
        root logger use found by ruff LOG, use `packaging` logger instead by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;965](https://redirect.github.com/pypa/packaging/pull/965)\n- Better
        support for subclassing `Marker` and `Requirement` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1022](https://redirect.github.com/pypa/packaging/pull/1022)\n-
        Normalize all extras, not just if it comes first by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1024](https://redirect.github.com/pypa/packaging/pull/1024)\n-
        Don't produce a broken repr if `Marker` fails to construct by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1033](https://redirect.github.com/pypa/packaging/pull/1033)\n\nPerformance:\n\n-
        Avoid recompiling regexes in the tokenizer for a 3x speedup by [@&#8203;hauntsaninja](https://redirect.github.com/hauntsaninja)
        in [#&#8203;1019](https://redirect.github.com/pypa/packaging/pull/1019)\n-
        Improve performance in `_manylinux.py` by [@&#8203;cthoyt](https://redirect.github.com/cthoyt)
        in [#&#8203;869](https://redirect.github.com/pypa/packaging/pull/869)\n- Minor
        cleanups to `Version` by [@&#8203;bearomorphism](https://redirect.github.com/bearomorphism)
        in [#&#8203;913](https://redirect.github.com/pypa/packaging/pull/913)\n- Skip
        redundant creation of `Version`s in specifier comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;986](https://redirect.github.com/pypa/packaging/pull/986)\n- Cache
        `Specifier`'s Version by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;985](https://redirect.github.com/pypa/packaging/pull/985)\n- Make
        `Version` a little faster by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;987](https://redirect.github.com/pypa/packaging/pull/987)\n- Minor
        `Version` regex cleanup by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;990](https://redirect.github.com/pypa/packaging/pull/990)\n- Faster
        regex on Python 3.11.5+ by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;988](https://redirect.github.com/pypa/packaging/pull/988) and
        [#&#8203;1055](https://redirect.github.com/pypa/packaging/pull/1055)\n- Lazily
        calculate `_key` in `Version` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;989](https://redirect.github.com/pypa/packaging/pull/989) and
        regression for `packaging_legacy` fixed by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1048](https://redirect.github.com/pypa/packaging/pull/1048)\n-
        Faster `canonicalize_version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;993](https://redirect.github.com/pypa/packaging/pull/993)\n- Use
        `fullmatch` in a couple more places by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;992](https://redirect.github.com/pypa/packaging/pull/992)\n- Use
        `fullmatch` for markers too by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1029](https://redirect.github.com/pypa/packaging/pull/1029)\n-
        Use `map` instead of generator by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;996](https://redirect.github.com/pypa/packaging/pull/996)\n- Deprecate
        `._version` (`_Version`, a `NamedTuple`) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;995](https://redirect.github.com/pypa/packaging/pull/995) and
        [#&#8203;1062](https://redirect.github.com/pypa/packaging/pull/1062)\n- Avoid
        duplicate `Version` creation in `canonicalize_version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;994](https://redirect.github.com/pypa/packaging/pull/994)\n- Add
        `__slots__` to `Version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1001](https://redirect.github.com/pypa/packaging/pull/1001)\n-
        Add `__slots__` to `Specifier`s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1002](https://redirect.github.com/pypa/packaging/pull/1002)\n-
        Add `__slots__` to `Node`s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1032](https://redirect.github.com/pypa/packaging/pull/1032)\n-
        Use `version.__replace__` in specifier comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;999](https://redirect.github.com/pypa/packaging/pull/999)\n- Use
        `_get_spec_version` in more places in `Specifier` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1005](https://redirect.github.com/pypa/packaging/pull/1005)\n-
        Pull `set` construction out of function by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1012](https://redirect.github.com/pypa/packaging/pull/1012)\n-
        Letter normalization dict for prereleases and the like by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1014](https://redirect.github.com/pypa/packaging/pull/1014)\n-
        Avoid normalizing extras again when comparing by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1028](https://redirect.github.com/pypa/packaging/pull/1028)\n-
        Speed up `Version.__str__` by about 10% by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;997](https://redirect.github.com/pypa/packaging/pull/997)\n- Increase
        the performance of `canonicalize_name` by avoiding a regex by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1030](https://redirect.github.com/pypa/packaging/pull/1030), [#&#8203;1047](https://redirect.github.com/pypa/packaging/pull/1047),
        and [#&#8203;1064](https://redirect.github.com/pypa/packaging/pull/1064)\n-
        Faster zero stripping by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1058](https://redirect.github.com/pypa/packaging/pull/1058)\n\nType
        annotations:\n\n- Fix a type annotation by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
        in [#&#8203;907](https://redirect.github.com/pypa/packaging/pull/907)\n- Fix
        tags return type in `parse_wheel_filename` docs by [@&#8203;ncoghlan](https://redirect.github.com/ncoghlan)
        in [#&#8203;973](https://redirect.github.com/pypa/packaging/pull/973)\n- Add
        type hint for `_version` in `.version.Version` by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
        in [#&#8203;927](https://redirect.github.com/pypa/packaging/pull/927)\n- Changed
        static type annotations in prereleases setter method in `specifier.py` by
        [@&#8203;subhajitsaha01](https://redirect.github.com/subhajitsaha01) in [#&#8203;930](https://redirect.github.com/pypa/packaging/pull/930)\n-
        Statically type the tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;982](https://redirect.github.com/pypa/packaging/pull/982)\n\nInternal:\n\n-
        Test and declare support Python 3.14 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;901](https://redirect.github.com/pypa/packaging/pull/901)\n- Modernize
        and speed up tests on Python 3.14 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;903](https://redirect.github.com/pypa/packaging/pull/903)\n- Change
        our license metadata to use an SPDX license expression by [@&#8203;cdce8p](https://redirect.github.com/cdce8p)
        in [#&#8203;881](https://redirect.github.com/pypa/packaging/pull/881)\n- No
        need for `license-files` by [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
        in [#&#8203;924](https://redirect.github.com/pypa/packaging/pull/924)\n- Update
        mypy by [@&#8203;hauntsaninja](https://redirect.github.com/hauntsaninja) in
        [#&#8203;891](https://redirect.github.com/pypa/packaging/pull/891)\n- Some
        config updates by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;902](https://redirect.github.com/pypa/packaging/pull/902)\n- Add
        spell check and rst check by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;904](https://redirect.github.com/pypa/packaging/pull/904)\n- Clean
        up ruff ignores by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;905](https://redirect.github.com/pypa/packaging/pull/905)\n- Update
        example for env marker `python_version` by [@&#8203;trim21](https://redirect.github.com/trim21)
        in [#&#8203;908](https://redirect.github.com/pypa/packaging/pull/908)\n- Move
        codespell configuration into pyproject.toml by [@&#8203;yarikoptic](https://redirect.github.com/yarikoptic)
        in [#&#8203;910](https://redirect.github.com/pypa/packaging/pull/910)\n- Check
        warning a little more precisely by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;837](https://redirect.github.com/pypa/packaging/pull/837)\n- Speed
        up mypy a little by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;836](https://redirect.github.com/pypa/packaging/pull/836)\n- Apply
        ruff/flake8-pyi rules (PYI) by [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
        in [#&#8203;835](https://redirect.github.com/pypa/packaging/pull/835)\n- Better
        local runs for codespell by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;911](https://redirect.github.com/pypa/packaging/pull/911)\n- Remove
        outdated/confusing Gist link by [@&#8203;stefan6419846](https://redirect.github.com/stefan6419846)
        in [#&#8203;921](https://redirect.github.com/pypa/packaging/pull/921)\n- Fix
        docs and docs ci after [#&#8203;897](https://redirect.github.com/pypa/packaging/issues/897)
        landed by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;926](https://redirect.github.com/pypa/packaging/pull/926)\n- Run
        twine-check on push in CI by [@&#8203;EpicWink](https://redirect.github.com/EpicWink)
        in [#&#8203;922](https://redirect.github.com/pypa/packaging/pull/922)\n- `ruff`
        was renamed `ruff-check` in pre-commit by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;933](https://redirect.github.com/pypa/packaging/pull/933)\n- Fix
        incorrectly implicitly concatenated string in specifiers test by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;946](https://redirect.github.com/pypa/packaging/pull/946)\n- Simplify
        conditional by [@&#8203;ofek](https://redirect.github.com/ofek) in [#&#8203;949](https://redirect.github.com/pypa/packaging/pull/949)\n-
        Modernize nox, use dependency-groups for tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;952](https://redirect.github.com/pypa/packaging/pull/952)\n- Add
        more checks that don't affect anything by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;957](https://redirect.github.com/pypa/packaging/pull/957)\n- Enable
        Ruff ISC rule by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;959](https://redirect.github.com/pypa/packaging/pull/959)\n- Ruff
        code FLY by [@&#8203;henryiii](https://redirect.github.com/henryiii) in [#&#8203;963](https://redirect.github.com/pypa/packaging/pull/963)\n-
        pytest `log_level` is better than `log_cli_level` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;956](https://redirect.github.com/pypa/packaging/pull/956)\n- Ruff
        code TRY by [@&#8203;henryiii](https://redirect.github.com/henryiii) in [#&#8203;961](https://redirect.github.com/pypa/packaging/pull/961)\n-
        Add the ruff PL checks by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;964](https://redirect.github.com/pypa/packaging/pull/964)\n- Enable
        Ruff ARG rules by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;958](https://redirect.github.com/pypa/packaging/pull/958)\n- Ruff
        PT code (pytest) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;960](https://redirect.github.com/pypa/packaging/pull/960)\n- Add
        ruff DTZ by [@&#8203;henryiii](https://redirect.github.com/henryiii) in [#&#8203;968](https://redirect.github.com/pypa/packaging/pull/968)\n-
        Add ruff BLE by [@&#8203;henryiii](https://redirect.github.com/henryiii) in
        [#&#8203;967](https://redirect.github.com/pypa/packaging/pull/967)\n- Add
        the ruff SIM checks by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;966](https://redirect.github.com/pypa/packaging/pull/966)\n- Adding
        ruff PERF by [@&#8203;henryiii](https://redirect.github.com/henryiii) in [#&#8203;969](https://redirect.github.com/pypa/packaging/pull/969)\n-
        Move some config into coverage config by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;971](https://redirect.github.com/pypa/packaging/pull/971)\n- Check
        ruff C4 by [@&#8203;henryiii](https://redirect.github.com/henryiii) in [#&#8203;962](https://redirect.github.com/pypa/packaging/pull/962)\n-
        Adding ruff T20 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;972](https://redirect.github.com/pypa/packaging/pull/972)\n- Add
        a tests pass job by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;977](https://redirect.github.com/pypa/packaging/pull/977)\n- Add
        ruff TC by [@&#8203;henryiii](https://redirect.github.com/henryiii) in [#&#8203;980](https://redirect.github.com/pypa/packaging/pull/980)\n-
        Adding part of ruff RET by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;979](https://redirect.github.com/pypa/packaging/pull/979)\n- Reorder
        mypy check by [@&#8203;henryiii](https://redirect.github.com/henryiii) in
        [#&#8203;983](https://redirect.github.com/pypa/packaging/pull/983)\n- Enable
        ruff ALL by [@&#8203;henryiii](https://redirect.github.com/henryiii) in [#&#8203;984](https://redirect.github.com/pypa/packaging/pull/984)\n-
        Link back to repo/source in furo by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;991](https://redirect.github.com/pypa/packaging/pull/991)\n- Add
        case insensitivity tests for arbitrary equality by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;975](https://redirect.github.com/pypa/packaging/pull/975)\n- Synchronize
        documentation and code for markers by [@&#8203;zahlman](https://redirect.github.com/zahlman)
        in [#&#8203;1008](https://redirect.github.com/pypa/packaging/pull/1008)\n-
        Use `partition` in `_parse_project_urls` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1013](https://redirect.github.com/pypa/packaging/pull/1013)\n-
        auto-skip the dependabot PRs in the release changelog generation by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1016](https://redirect.github.com/pypa/packaging/pull/1016)\n-
        Update unreleased section in changelog by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1017](https://redirect.github.com/pypa/packaging/pull/1017)\n-
        Fix PR role to match extlinks by [@&#8203;hugovk](https://redirect.github.com/hugovk)
        in [#&#8203;1020](https://redirect.github.com/pypa/packaging/pull/1020)\n-
        Mention new parts in README by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1023](https://redirect.github.com/pypa/packaging/pull/1023)\n-
        Replace a couple of asserts with else by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1027](https://redirect.github.com/pypa/packaging/pull/1027)\n-
        Simplify and/or check a little more by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1031](https://redirect.github.com/pypa/packaging/pull/1031)\n-
        Use slim runner for all check by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1021](https://redirect.github.com/pypa/packaging/pull/1021)\n-
        Use typos instead of codespell by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1015](https://redirect.github.com/pypa/packaging/pull/1015)\n-
        Update changelog with recent additions by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1034](https://redirect.github.com/pypa/packaging/pull/1034)\n-
        Publish to PyPI via GitHub CI by [@&#8203;EpicWink](https://redirect.github.com/EpicWink)
        in [#&#8203;893](https://redirect.github.com/pypa/packaging/pull/893)\n- Use
        prek for faster pre-commit lint step by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1037](https://redirect.github.com/pypa/packaging/pull/1037)\n-
        Add help text to noxfile by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1038](https://redirect.github.com/pypa/packaging/pull/1038)\n-
        Update licenses to 3.27 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1036](https://redirect.github.com/pypa/packaging/pull/1036)\n-
        Use relative import in `packaging.licenses` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
        in [#&#8203;1039](https://redirect.github.com/pypa/packaging/pull/1039)\n-
        Add zizmor and tighten up CI by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1035](https://redirect.github.com/pypa/packaging/pull/1035)\n-
        Fix release script by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1040](https://redirect.github.com/pypa/packaging/pull/1040)\n-
        Fix using a dev version (again) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1041](https://redirect.github.com/pypa/packaging/pull/1041)\n-
        Fix type hint of function used with `contextlib.contextmanager` by [@&#8203;SpecLad](https://redirect.github.com/SpecLad)
        in [#&#8203;1046](https://redirect.github.com/pypa/packaging/pull/1046)\n-
        Always run tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1044](https://redirect.github.com/pypa/packaging/pull/1044)\n-
        Fix a changelog number by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1042](https://redirect.github.com/pypa/packaging/pull/1042)\n-
        Fix the publish job by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1043](https://redirect.github.com/pypa/packaging/pull/1043)\n-
        Get the correct tag on publish by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1045](https://redirect.github.com/pypa/packaging/pull/1045)\n-
        Test on first public release of CPython 3.11 and newer by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1056](https://redirect.github.com/pypa/packaging/pull/1056)\n-
        Fix publication job (again) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1051](https://redirect.github.com/pypa/packaging/pull/1051)\n-
        Use `actionlint` to check CI workflows by [@&#8203;miketheman](https://redirect.github.com/miketheman)
        in [#&#8203;1052](https://redirect.github.com/pypa/packaging/pull/1052)\n-
        Fix formatting of distribution types in metadata.rst by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
        in [#&#8203;1053](https://redirect.github.com/pypa/packaging/pull/1053)\n\n####
        New Contributors\n\n- [@&#8203;cdce8p](https://redirect.github.com/cdce8p)
        made their first contribution in [#&#8203;881](https://redirect.github.com/pypa/packaging/pull/881)\n-
        [@&#8203;dholth](https://redirect.github.com/dholth) made their first contribution
        in [#&#8203;860](https://redirect.github.com/pypa/packaging/pull/860)\n- [@&#8203;trim21](https://redirect.github.com/trim21)
        made their first contribution in [#&#8203;908](https://redirect.github.com/pypa/packaging/pull/908)\n-
        [@&#8203;yarikoptic](https://redirect.github.com/yarikoptic) made their first
        contribution in [#&#8203;910](https://redirect.github.com/pypa/packaging/pull/910)\n-
        [@&#8203;cthoyt](https://redirect.github.com/cthoyt) made their first contribution
        in [#&#8203;868](https://redirect.github.com/pypa/packaging/pull/868)\n- [@&#8203;bwoodsend](https://redirect.github.com/bwoodsend)
        made their first contribution in [#&#8203;879](https://redirect.github.com/pypa/packaging/pull/879)\n-
        [@&#8203;stefan6419846](https://redirect.github.com/stefan6419846) made their
        first contribution in [#&#8203;921](https://redirect.github.com/pypa/packaging/pull/921)\n-
        [@&#8203;bearomorphism](https://redirect.github.com/bearomorphism) made their
        first contribution in [#&#8203;913](https://redirect.github.com/pypa/packaging/pull/913)\n-
        [@&#8203;EpicWink](https://redirect.github.com/EpicWink) made their first
        contribution in [#&#8203;922](https://redirect.github.com/pypa/packaging/pull/922)\n-
        [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe) made their first
        contribution in [#&#8203;932](https://redirect.github.com/pypa/packaging/pull/932)\n-
        [@&#8203;subhajitsaha01](https://redirect.github.com/subhajitsaha01) made
        their first contribution in [#&#8203;930](https://redirect.github.com/pypa/packaging/pull/930)\n-
        [@&#8203;ncoghlan](https://redirect.github.com/ncoghlan) made their first
        contribution in [#&#8203;973](https://redirect.github.com/pypa/packaging/pull/973)\n-
        [@&#8203;zahlman](https://redirect.github.com/zahlman) made their first contribution
        in [#&#8203;1008](https://redirect.github.com/pypa/packaging/pull/1008)\n-
        [@&#8203;JP-Ellis](https://redirect.github.com/JP-Ellis) made their first
        contribution in [#&#8203;939](https://redirect.github.com/pypa/packaging/pull/939)\n\n####
        Since last RC\n\nFixes:\n\n- Restore `._version` as a compat shim by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1062](https://redirect.github.com/pypa/packaging/pull/1062)\n\nPerformance:\n\n-
        Dual replace by [@&#8203;henryiii](https://redirect.github.com/henryiii) in
        [#&#8203;1064](https://redirect.github.com/pypa/packaging/pull/1064)\n\nDocumentaiton:\n\n-
        Prepare for 26.0 final by [@&#8203;henryiii](https://redirect.github.com/henryiii)
        in [#&#8203;1063](https://redirect.github.com/pypa/packaging/pull/1063)\n\n**Full
        Changelog**: <https://github.com/pypa/packaging/compare/26.0rc3...26.0>\n\n</details>\n\n---\n\n###
        Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
        At any time (no schedule defined)\n- Automerge\n  - 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\U0001F515 **Ignore**:
        Close this PR and you won't be reminded about this update again.\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/osism/cloud-in-a-box).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi44NS4xIiwidXBkYXRlZEluVmVyIjoiNDMuMTEwLjIiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlIl19-->\n"
      change_url: https://github.com/osism/cloud-in-a-box/pull/425
      child_jobs: []
      commit_id: 524a0209bd6def60143f9d9c0af2e4dc7e975735
      event_id: 189b55b0-3848-11f1-962b-850de284e89c
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/751e4e02536f403da0fa2002ddcbb2c9/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/751e4e02536f403da0fa2002ddcbb2c9/work/logs
        result_data_file: /var/lib/zuul/builds/751e4e02536f403da0fa2002ddcbb2c9/work/results.json
        src_root: /var/lib/zuul/builds/751e4e02536f403da0fa2002ddcbb2c9/work/src
        work_root: /var/lib/zuul/builds/751e4e02536f403da0fa2002ddcbb2c9/work
      include_vars: []
      items:
      - branch: main
        change: '425'
        change_message: "Update dependency packaging to v26\n\nThis PR contains the
          following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [packaging](https://redirect.github.com/pypa/packaging) | `==25.0` \u2192
          `==26.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.1?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/25.0/26.1?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pypa/packaging (packaging)</summary>\n\n###
          [`v26.1`](https://redirect.github.com/pypa/packaging/releases/tag/26.1)\n\n[Compare
          Source](https://redirect.github.com/pypa/packaging/compare/26.0...26.1)\n\nFeatures:\n\n-
          PEP 783: add handling for Emscripten wheel tags by [@&#8203;hoodmane](https://redirect.github.com/hoodmane)
          in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n-
          PEP 803: add handling for the `abi3.abi3t` free-threading tag by [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum)
          in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
          PEP 723: add `packaging.dependency_groups` module, based on the `dependency-groups`
          package by [@&#8203;sirosen](https://redirect.github.com/sirosen) in [#&#8203;1065](https://redirect.github.com/pypa/packaging/pull/1065)\n-
          Add the `packaging.direct_url` module by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;944](https://redirect.github.com/pypa/packaging/pull/944)\n-
          Add the `packaging.errors` module by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1071](https://redirect.github.com/pypa/packaging/pull/1071)\n-
          Add `SpecifierSet.is_unsatisfiable` using ranges (new internals that will
          be expanded in future versions) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1119](https://redirect.github.com/pypa/packaging/pull/1119)\n-
          Add `create_compatible_tags_selector` to select compatible tags by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1110](https://redirect.github.com/pypa/packaging/pull/1110)\n-
          Add a `key` argument to `SpecifierSet.filter()` by [@&#8203;frostming](https://redirect.github.com/frostming)
          in [#&#8203;1068](https://redirect.github.com/pypa/packaging/pull/1068)\n-
          Support `&` and `|` for `Marker`'s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1146](https://redirect.github.com/pypa/packaging/pull/1146)\n-
          Normalize `Version.__replace__` and add `Version.from_parts` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1078](https://redirect.github.com/pypa/packaging/pull/1078)\n-
          Add an option to validate compressed tag set sort order in `parse_wheel_filename`
          by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in [#&#8203;1150](https://redirect.github.com/pypa/packaging/pull/1150)\n\nBehavior
          adaptations:\n\n- Narrow exclusion of pre-releases for `<V.postN` to match
          spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1140](https://redirect.github.com/pypa/packaging/pull/1140)\n-
          Narrow exclusion of post-releases for `>V` to match spec by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1141](https://redirect.github.com/pypa/packaging/pull/1141)\n-
          Rename `format_full_version` to `_format_full_version` to make it visibly
          private by [@&#8203;r266-tech](https://redirect.github.com/r266-tech) in
          [#&#8203;1125](https://redirect.github.com/pypa/packaging/pull/1125)\n-
          Restrict local version to ASCII by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1102](https://redirect.github.com/pypa/packaging/pull/1102)\n\nPylock
          (PEP 751) updates:\n\n- Add pylock `select` function by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1092](https://redirect.github.com/pypa/packaging/pull/1092)\n-
          Document pylock `select()` method and `PylockSelectError` by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
          in [#&#8203;1153](https://redirect.github.com/pypa/packaging/pull/1153)\n-
          Add `filename` property to `PackageSdist` and `PackageWheel`, more validation
          by [@&#8203;sbidoul](https://redirect.github.com/sbidoul) in [#&#8203;1095](https://redirect.github.com/pypa/packaging/pull/1095)\n-
          Give preference to path over url by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1128](https://redirect.github.com/pypa/packaging/pull/1128)\n-
          Validate name/version consistency in file names by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;1114](https://redirect.github.com/pypa/packaging/pull/1114)\n\nFixes:\n\n-
          Fix `>` comparison for versions with dev+local segments by [@&#8203;veeceey](https://redirect.github.com/veeceey)
          in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
          Fix incorrect self-comparison for `InfinityType` and `NegativeInfinityType`
          by [@&#8203;bysiber](https://redirect.github.com/bysiber) in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
          Canonicalize when deduplicating specifiers in `SpecifierSet` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1109](https://redirect.github.com/pypa/packaging/pull/1109)\n-
          Fix charset error message formatting by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1121](https://redirect.github.com/pypa/packaging/pull/1121)\n-
          Handle the `key` parameter in `SpecifierSet.filter` when specifiers are
          empty and prerelease is `False` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1096](https://redirect.github.com/pypa/packaging/pull/1096)\n-
          Standardize inner components of `repr` output by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1090](https://redirect.github.com/pypa/packaging/pull/1090)\n-
          `Specifier`'s `===` uses original string, not normalized, when available
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1124](https://redirect.github.com/pypa/packaging/pull/1124)\n-
          Propagate int-max-str-digits `ValueError` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1155](https://redirect.github.com/pypa/packaging/pull/1155)\n\nPerformance:\n\n-
          Add fast path for parsing simple versions (digits and dots only) by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1082](https://redirect.github.com/pypa/packaging/pull/1082)\n-
          Add fast path for `Version` to `Version` comparison by skipping `_key` property
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1083](https://redirect.github.com/pypa/packaging/pull/1083)\n-
          Cache `Version` hash value in dedicated slot by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1118](https://redirect.github.com/pypa/packaging/pull/1118)\n-
          Overhaul `_cmpkey` to remove use of custom objects by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1116](https://redirect.github.com/pypa/packaging/pull/1116)\n-
          Skip `__replace__` in Specifier comparison if not needed by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1081](https://redirect.github.com/pypa/packaging/pull/1081)\n-
          `SpecifierSet` use `tuple` instead of `frozenset` for `_specs` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1108](https://redirect.github.com/pypa/packaging/pull/1108)\n-
          Speed up complex `SpecifierSet` filtering by implementing cost-based ordering
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;1105](https://redirect.github.com/pypa/packaging/pull/1105)\n-
          Speed up wildcard comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1111](https://redirect.github.com/pypa/packaging/pull/1111)\n-
          Stream PEP440 filtering in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1076](https://redirect.github.com/pypa/packaging/pull/1076)\n-
          Add `__slots__` to `Marker` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1147](https://redirect.github.com/pypa/packaging/pull/1147)\n-
          Simply `Specifier` regex by [@&#8203;sirosen](https://redirect.github.com/sirosen)
          in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
          Skip using the hash property internally by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1115](https://redirect.github.com/pypa/packaging/pull/1115)\n\nInternal:\n\n-
          Add downstream testing by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1049](https://redirect.github.com/pypa/packaging/pull/1049)\n-
          Benchmarking suite by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1059](https://redirect.github.com/pypa/packaging/pull/1059)\n-
          Benchmark variance reduction by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1107](https://redirect.github.com/pypa/packaging/pull/1107)\n-
          Add property-based tests for PEP 440 by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1144](https://redirect.github.com/pypa/packaging/pull/1144)\n-
          Clean up a few `collections.namedtuple` in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1070](https://redirect.github.com/pypa/packaging/pull/1070)\n-
          Do not reload the tags module in tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1152](https://redirect.github.com/pypa/packaging/pull/1152)\n-
          Limit `dir()` / tab-completion in REPL by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1011](https://redirect.github.com/pypa/packaging/pull/1011)\n-
          Add more `__all__`/`__dir__` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1069](https://redirect.github.com/pypa/packaging/pull/1069)\n-
          Cleanup pre-commit a bit by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1080](https://redirect.github.com/pypa/packaging/pull/1080)\n-
          Pin pre-commit file, use dependabot by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1133](https://redirect.github.com/pypa/packaging/pull/1133)\n-
          Remove sphinx-toolbox by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1135](https://redirect.github.com/pypa/packaging/pull/1135)\n-
          Use docs group, faster readthedocs by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1061](https://redirect.github.com/pypa/packaging/pull/1061)\n-
          Add free-threaded Python to CI by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1098](https://redirect.github.com/pypa/packaging/pull/1098)\n-
          Simplify combining `SpecifierSet.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1073](https://redirect.github.com/pypa/packaging/pull/1073)\n-
          Use direct operator methods in `_compare_compatible` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1100](https://redirect.github.com/pypa/packaging/pull/1100)\n-
          Remove unnecessary if statement in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1074](https://redirect.github.com/pypa/packaging/pull/1074)\n-
          Remove unneeded nesting in `Specifier.prereleases` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1072](https://redirect.github.com/pypa/packaging/pull/1072)\n\nDocumentation:\n\n-
          Fix documentation: grammar, typos, formatting, and outdated references by
          [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
          in [#&#8203;1084](https://redirect.github.com/pypa/packaging/pull/1084)\n-
          Fix versionadded for `Version.from_parts()` by [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen)
          in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
          Document `&` and `|` operators for combining `Marker` objects by [@&#8203;r266-tech](https://redirect.github.com/r266-tech)
          in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
          Expand and clean up `Version` documentation by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1089](https://redirect.github.com/pypa/packaging/pull/1089)\n-
          Move license docs inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1131](https://redirect.github.com/pypa/packaging/pull/1131)\n-
          Move markers inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1104](https://redirect.github.com/pypa/packaging/pull/1104)\n-
          Move tags docs to inline by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1130](https://redirect.github.com/pypa/packaging/pull/1130)\n-
          Move utilities inline, like other modules by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1103](https://redirect.github.com/pypa/packaging/pull/1103)\n\n####
          Benchmarks\n\nPerformance improvements since 26.0, from the new integrated
          benchmark suite:\n\n```\nuv run asv run 26.0..HEAD\n```\n\n<img width=\"908\"
          height=\"965\" alt=\"Screenshot 2026-04-13 at 11 32 14\u202FPM\" src=\"https://github.com/user-attachments/assets/3bf63569-dbbf-4f34-9660-ede3cef1745d\"
          />\n\n<img width=\"908\" height=\"479\" alt=\"Screenshot 2026-04-13 at 11
          32 43\u202FPM\" src=\"https://github.com/user-attachments/assets/f7906800-f6d9-4af6-a3f3-369b654b73e3\"
          />\n\n#### New Contributors\n\n- [@&#8203;veeceey](https://redirect.github.com/veeceey)
          made their first contribution in [#&#8203;1097](https://redirect.github.com/pypa/packaging/pull/1097)\n-
          [@&#8203;bysiber](https://redirect.github.com/bysiber) made their first
          contribution in [#&#8203;1093](https://redirect.github.com/pypa/packaging/pull/1093)\n-
          [@&#8203;sirosen](https://redirect.github.com/sirosen) made their first
          contribution in [#&#8203;1106](https://redirect.github.com/pypa/packaging/pull/1106)\n-
          [@&#8203;Jackenmen](https://redirect.github.com/Jackenmen) made their first
          contribution in [#&#8203;1134](https://redirect.github.com/pypa/packaging/pull/1134)\n-
          [@&#8203;ngoldbaum](https://redirect.github.com/ngoldbaum) made their first
          contribution in [#&#8203;1099](https://redirect.github.com/pypa/packaging/pull/1099)\n-
          [@&#8203;r266-tech](https://redirect.github.com/r266-tech) made their first
          contribution in [#&#8203;1151](https://redirect.github.com/pypa/packaging/pull/1151)\n-
          [@&#8203;hoodmane](https://redirect.github.com/hoodmane) made their first
          contribution in [#&#8203;804](https://redirect.github.com/pypa/packaging/pull/804)\n\n**Full
          Changelog**: <https://github.com/pypa/packaging/compare/26.0...26.1>\n\n###
          [`v26.0`](https://redirect.github.com/pypa/packaging/releases/tag/26.0)\n\n[Compare
          Source](https://redirect.github.com/pypa/packaging/compare/25.0...26.0)\n\nRead
          about the performance improvements here: <https://iscinumpy.dev/post/packaging-faster>.\n\n####
          What's Changed\n\nFeatures:\n\n- PEP 751: support pylock by [@&#8203;sbidoul](https://redirect.github.com/sbidoul)
          in [#&#8203;900](https://redirect.github.com/pypa/packaging/pull/900)\n-
          PEP 794: import name metadata by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
          in [#&#8203;948](https://redirect.github.com/pypa/packaging/pull/948)\n-
          Support writing metadata by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;846](https://redirect.github.com/pypa/packaging/pull/846)\n-
          Support `__replace__` for `Version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1003](https://redirect.github.com/pypa/packaging/pull/1003)\n-
          Support positional pattern matching for `Version` and `Specifier` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1004](https://redirect.github.com/pypa/packaging/pull/1004)\n\nBehavior
          adaptations:\n\n- PEP 440 handling of prereleases for `Specifier.contains`,
          `SpecifierSet.contains`, and `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;897](https://redirect.github.com/pypa/packaging/pull/897)\n-
          Handle PEP 440 edge case in `SpecifierSet.filter` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;942](https://redirect.github.com/pypa/packaging/pull/942)\n-
          Adjust arbitrary equality intersection preservation in `SpecifierSet` by
          [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;951](https://redirect.github.com/pypa/packaging/pull/951)\n-
          Return `False` instead of raising for `.contains` with invalid version by
          [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe) in [#&#8203;932](https://redirect.github.com/pypa/packaging/pull/932)\n-
          Support arbitrary equality on arbitrary strings for `Specifier` and `SpecifierSet`'s
          `filter` and `contains` method. by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;954](https://redirect.github.com/pypa/packaging/pull/954)\n-
          Only try to parse as `Version` on certain marker keys, return `False` on
          unequal ordered comparsions by [@&#8203;JP-Ellis](https://redirect.github.com/JP-Ellis)
          in [#&#8203;939](https://redirect.github.com/pypa/packaging/pull/939)\n\nFixes:\n\n-
          Update `_hash` when unpickling `Tag()` by [@&#8203;dholth](https://redirect.github.com/dholth)
          in [#&#8203;860](https://redirect.github.com/pypa/packaging/pull/860)\n-
          Correct comment and simplify implicit prerelease handling in `Specifier.prereleases`
          by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in [#&#8203;896](https://redirect.github.com/pypa/packaging/pull/896)\n-
          Use explicit `_GLibCVersion` `NamedTuple` in `_manylinux` by [@&#8203;cthoyt](https://redirect.github.com/cthoyt)
          in [#&#8203;868](https://redirect.github.com/pypa/packaging/pull/868)\n-
          Detect invalid license expressions containing `()` by [@&#8203;bwoodsend](https://redirect.github.com/bwoodsend)
          in [#&#8203;879](https://redirect.github.com/pypa/packaging/pull/879)\n-
          Correct regex for metadata `'name'` format by [@&#8203;di](https://redirect.github.com/di)
          in [#&#8203;925](https://redirect.github.com/pypa/packaging/pull/925)\n-
          Improve the message around expecting a semicolon by [@&#8203;pradyunsg](https://redirect.github.com/pradyunsg)
          in [#&#8203;833](https://redirect.github.com/pypa/packaging/pull/833)\n-
          Support nested parens in license expressions by [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe)
          in [#&#8203;931](https://redirect.github.com/pypa/packaging/pull/931)\n-
          Add space before at symbol in `Requirements` string by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;953](https://redirect.github.com/pypa/packaging/pull/953)\n-
          A root logger use found by ruff LOG, use `packaging` logger instead by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;965](https://redirect.github.com/pypa/packaging/pull/965)\n-
          Better support for subclassing `Marker` and `Requirement` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1022](https://redirect.github.com/pypa/packaging/pull/1022)\n-
          Normalize all extras, not just if it comes first by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1024](https://redirect.github.com/pypa/packaging/pull/1024)\n-
          Don't produce a broken repr if `Marker` fails to construct by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1033](https://redirect.github.com/pypa/packaging/pull/1033)\n\nPerformance:\n\n-
          Avoid recompiling regexes in the tokenizer for a 3x speedup by [@&#8203;hauntsaninja](https://redirect.github.com/hauntsaninja)
          in [#&#8203;1019](https://redirect.github.com/pypa/packaging/pull/1019)\n-
          Improve performance in `_manylinux.py` by [@&#8203;cthoyt](https://redirect.github.com/cthoyt)
          in [#&#8203;869](https://redirect.github.com/pypa/packaging/pull/869)\n-
          Minor cleanups to `Version` by [@&#8203;bearomorphism](https://redirect.github.com/bearomorphism)
          in [#&#8203;913](https://redirect.github.com/pypa/packaging/pull/913)\n-
          Skip redundant creation of `Version`s in specifier comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;986](https://redirect.github.com/pypa/packaging/pull/986)\n-
          Cache `Specifier`'s Version by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;985](https://redirect.github.com/pypa/packaging/pull/985)\n-
          Make `Version` a little faster by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;987](https://redirect.github.com/pypa/packaging/pull/987)\n-
          Minor `Version` regex cleanup by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;990](https://redirect.github.com/pypa/packaging/pull/990)\n-
          Faster regex on Python 3.11.5+ by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;988](https://redirect.github.com/pypa/packaging/pull/988) and
          [#&#8203;1055](https://redirect.github.com/pypa/packaging/pull/1055)\n-
          Lazily calculate `_key` in `Version` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;989](https://redirect.github.com/pypa/packaging/pull/989) and
          regression for `packaging_legacy` fixed by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1048](https://redirect.github.com/pypa/packaging/pull/1048)\n-
          Faster `canonicalize_version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;993](https://redirect.github.com/pypa/packaging/pull/993)\n-
          Use `fullmatch` in a couple more places by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;992](https://redirect.github.com/pypa/packaging/pull/992)\n-
          Use `fullmatch` for markers too by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1029](https://redirect.github.com/pypa/packaging/pull/1029)\n-
          Use `map` instead of generator by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;996](https://redirect.github.com/pypa/packaging/pull/996)\n-
          Deprecate `._version` (`_Version`, a `NamedTuple`) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;995](https://redirect.github.com/pypa/packaging/pull/995) and
          [#&#8203;1062](https://redirect.github.com/pypa/packaging/pull/1062)\n-
          Avoid duplicate `Version` creation in `canonicalize_version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;994](https://redirect.github.com/pypa/packaging/pull/994)\n-
          Add `__slots__` to `Version` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1001](https://redirect.github.com/pypa/packaging/pull/1001)\n-
          Add `__slots__` to `Specifier`s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1002](https://redirect.github.com/pypa/packaging/pull/1002)\n-
          Add `__slots__` to `Node`s by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1032](https://redirect.github.com/pypa/packaging/pull/1032)\n-
          Use `version.__replace__` in specifier comparison by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;999](https://redirect.github.com/pypa/packaging/pull/999)\n-
          Use `_get_spec_version` in more places in `Specifier` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1005](https://redirect.github.com/pypa/packaging/pull/1005)\n-
          Pull `set` construction out of function by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1012](https://redirect.github.com/pypa/packaging/pull/1012)\n-
          Letter normalization dict for prereleases and the like by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1014](https://redirect.github.com/pypa/packaging/pull/1014)\n-
          Avoid normalizing extras again when comparing by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1028](https://redirect.github.com/pypa/packaging/pull/1028)\n-
          Speed up `Version.__str__` by about 10% by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;997](https://redirect.github.com/pypa/packaging/pull/997)\n-
          Increase the performance of `canonicalize_name` by avoiding a regex by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1030](https://redirect.github.com/pypa/packaging/pull/1030),
          [#&#8203;1047](https://redirect.github.com/pypa/packaging/pull/1047), and
          [#&#8203;1064](https://redirect.github.com/pypa/packaging/pull/1064)\n-
          Faster zero stripping by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1058](https://redirect.github.com/pypa/packaging/pull/1058)\n\nType
          annotations:\n\n- Fix a type annotation by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
          in [#&#8203;907](https://redirect.github.com/pypa/packaging/pull/907)\n-
          Fix tags return type in `parse_wheel_filename` docs by [@&#8203;ncoghlan](https://redirect.github.com/ncoghlan)
          in [#&#8203;973](https://redirect.github.com/pypa/packaging/pull/973)\n-
          Add type hint for `_version` in `.version.Version` by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
          in [#&#8203;927](https://redirect.github.com/pypa/packaging/pull/927)\n-
          Changed static type annotations in prereleases setter method in `specifier.py`
          by [@&#8203;subhajitsaha01](https://redirect.github.com/subhajitsaha01)
          in [#&#8203;930](https://redirect.github.com/pypa/packaging/pull/930)\n-
          Statically type the tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;982](https://redirect.github.com/pypa/packaging/pull/982)\n\nInternal:\n\n-
          Test and declare support Python 3.14 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;901](https://redirect.github.com/pypa/packaging/pull/901)\n-
          Modernize and speed up tests on Python 3.14 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;903](https://redirect.github.com/pypa/packaging/pull/903)\n-
          Change our license metadata to use an SPDX license expression by [@&#8203;cdce8p](https://redirect.github.com/cdce8p)
          in [#&#8203;881](https://redirect.github.com/pypa/packaging/pull/881)\n-
          No need for `license-files` by [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
          in [#&#8203;924](https://redirect.github.com/pypa/packaging/pull/924)\n-
          Update mypy by [@&#8203;hauntsaninja](https://redirect.github.com/hauntsaninja)
          in [#&#8203;891](https://redirect.github.com/pypa/packaging/pull/891)\n-
          Some config updates by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;902](https://redirect.github.com/pypa/packaging/pull/902)\n-
          Add spell check and rst check by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;904](https://redirect.github.com/pypa/packaging/pull/904)\n-
          Clean up ruff ignores by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;905](https://redirect.github.com/pypa/packaging/pull/905)\n-
          Update example for env marker `python_version` by [@&#8203;trim21](https://redirect.github.com/trim21)
          in [#&#8203;908](https://redirect.github.com/pypa/packaging/pull/908)\n-
          Move codespell configuration into pyproject.toml by [@&#8203;yarikoptic](https://redirect.github.com/yarikoptic)
          in [#&#8203;910](https://redirect.github.com/pypa/packaging/pull/910)\n-
          Check warning a little more precisely by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;837](https://redirect.github.com/pypa/packaging/pull/837)\n-
          Speed up mypy a little by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;836](https://redirect.github.com/pypa/packaging/pull/836)\n-
          Apply ruff/flake8-pyi rules (PYI) by [@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
          in [#&#8203;835](https://redirect.github.com/pypa/packaging/pull/835)\n-
          Better local runs for codespell by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;911](https://redirect.github.com/pypa/packaging/pull/911)\n-
          Remove outdated/confusing Gist link by [@&#8203;stefan6419846](https://redirect.github.com/stefan6419846)
          in [#&#8203;921](https://redirect.github.com/pypa/packaging/pull/921)\n-
          Fix docs and docs ci after [#&#8203;897](https://redirect.github.com/pypa/packaging/issues/897)
          landed by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;926](https://redirect.github.com/pypa/packaging/pull/926)\n-
          Run twine-check on push in CI by [@&#8203;EpicWink](https://redirect.github.com/EpicWink)
          in [#&#8203;922](https://redirect.github.com/pypa/packaging/pull/922)\n-
          `ruff` was renamed `ruff-check` in pre-commit by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;933](https://redirect.github.com/pypa/packaging/pull/933)\n-
          Fix incorrectly implicitly concatenated string in specifiers test by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;946](https://redirect.github.com/pypa/packaging/pull/946)\n-
          Simplify conditional by [@&#8203;ofek](https://redirect.github.com/ofek)
          in [#&#8203;949](https://redirect.github.com/pypa/packaging/pull/949)\n-
          Modernize nox, use dependency-groups for tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;952](https://redirect.github.com/pypa/packaging/pull/952)\n-
          Add more checks that don't affect anything by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;957](https://redirect.github.com/pypa/packaging/pull/957)\n-
          Enable Ruff ISC rule by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;959](https://redirect.github.com/pypa/packaging/pull/959)\n-
          Ruff code FLY by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;963](https://redirect.github.com/pypa/packaging/pull/963)\n-
          pytest `log_level` is better than `log_cli_level` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;956](https://redirect.github.com/pypa/packaging/pull/956)\n-
          Ruff code TRY by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;961](https://redirect.github.com/pypa/packaging/pull/961)\n-
          Add the ruff PL checks by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;964](https://redirect.github.com/pypa/packaging/pull/964)\n-
          Enable Ruff ARG rules by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;958](https://redirect.github.com/pypa/packaging/pull/958)\n-
          Ruff PT code (pytest) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;960](https://redirect.github.com/pypa/packaging/pull/960)\n-
          Add ruff DTZ by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;968](https://redirect.github.com/pypa/packaging/pull/968)\n-
          Add ruff BLE by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;967](https://redirect.github.com/pypa/packaging/pull/967)\n-
          Add the ruff SIM checks by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;966](https://redirect.github.com/pypa/packaging/pull/966)\n-
          Adding ruff PERF by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;969](https://redirect.github.com/pypa/packaging/pull/969)\n-
          Move some config into coverage config by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;971](https://redirect.github.com/pypa/packaging/pull/971)\n-
          Check ruff C4 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;962](https://redirect.github.com/pypa/packaging/pull/962)\n-
          Adding ruff T20 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;972](https://redirect.github.com/pypa/packaging/pull/972)\n-
          Add a tests pass job by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;977](https://redirect.github.com/pypa/packaging/pull/977)\n-
          Add ruff TC by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;980](https://redirect.github.com/pypa/packaging/pull/980)\n-
          Adding part of ruff RET by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;979](https://redirect.github.com/pypa/packaging/pull/979)\n-
          Reorder mypy check by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;983](https://redirect.github.com/pypa/packaging/pull/983)\n-
          Enable ruff ALL by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;984](https://redirect.github.com/pypa/packaging/pull/984)\n-
          Link back to repo/source in furo by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;991](https://redirect.github.com/pypa/packaging/pull/991)\n-
          Add case insensitivity tests for arbitrary equality by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;975](https://redirect.github.com/pypa/packaging/pull/975)\n-
          Synchronize documentation and code for markers by [@&#8203;zahlman](https://redirect.github.com/zahlman)
          in [#&#8203;1008](https://redirect.github.com/pypa/packaging/pull/1008)\n-
          Use `partition` in `_parse_project_urls` by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1013](https://redirect.github.com/pypa/packaging/pull/1013)\n-
          auto-skip the dependabot PRs in the release changelog generation by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1016](https://redirect.github.com/pypa/packaging/pull/1016)\n-
          Update unreleased section in changelog by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1017](https://redirect.github.com/pypa/packaging/pull/1017)\n-
          Fix PR role to match extlinks by [@&#8203;hugovk](https://redirect.github.com/hugovk)
          in [#&#8203;1020](https://redirect.github.com/pypa/packaging/pull/1020)\n-
          Mention new parts in README by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1023](https://redirect.github.com/pypa/packaging/pull/1023)\n-
          Replace a couple of asserts with else by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1027](https://redirect.github.com/pypa/packaging/pull/1027)\n-
          Simplify and/or check a little more by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1031](https://redirect.github.com/pypa/packaging/pull/1031)\n-
          Use slim runner for all check by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1021](https://redirect.github.com/pypa/packaging/pull/1021)\n-
          Use typos instead of codespell by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1015](https://redirect.github.com/pypa/packaging/pull/1015)\n-
          Update changelog with recent additions by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1034](https://redirect.github.com/pypa/packaging/pull/1034)\n-
          Publish to PyPI via GitHub CI by [@&#8203;EpicWink](https://redirect.github.com/EpicWink)
          in [#&#8203;893](https://redirect.github.com/pypa/packaging/pull/893)\n-
          Use prek for faster pre-commit lint step by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1037](https://redirect.github.com/pypa/packaging/pull/1037)\n-
          Add help text to noxfile by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1038](https://redirect.github.com/pypa/packaging/pull/1038)\n-
          Update licenses to 3.27 by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1036](https://redirect.github.com/pypa/packaging/pull/1036)\n-
          Use relative import in `packaging.licenses` by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw)
          in [#&#8203;1039](https://redirect.github.com/pypa/packaging/pull/1039)\n-
          Add zizmor and tighten up CI by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1035](https://redirect.github.com/pypa/packaging/pull/1035)\n-
          Fix release script by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1040](https://redirect.github.com/pypa/packaging/pull/1040)\n-
          Fix using a dev version (again) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1041](https://redirect.github.com/pypa/packaging/pull/1041)\n-
          Fix type hint of function used with `contextlib.contextmanager` by [@&#8203;SpecLad](https://redirect.github.com/SpecLad)
          in [#&#8203;1046](https://redirect.github.com/pypa/packaging/pull/1046)\n-
          Always run tests by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1044](https://redirect.github.com/pypa/packaging/pull/1044)\n-
          Fix a changelog number by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1042](https://redirect.github.com/pypa/packaging/pull/1042)\n-
          Fix the publish job by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1043](https://redirect.github.com/pypa/packaging/pull/1043)\n-
          Get the correct tag on publish by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1045](https://redirect.github.com/pypa/packaging/pull/1045)\n-
          Test on first public release of CPython 3.11 and newer by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1056](https://redirect.github.com/pypa/packaging/pull/1056)\n-
          Fix publication job (again) by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1051](https://redirect.github.com/pypa/packaging/pull/1051)\n-
          Use `actionlint` to check CI workflows by [@&#8203;miketheman](https://redirect.github.com/miketheman)
          in [#&#8203;1052](https://redirect.github.com/pypa/packaging/pull/1052)\n-
          Fix formatting of distribution types in metadata.rst by [@&#8203;brettcannon](https://redirect.github.com/brettcannon)
          in [#&#8203;1053](https://redirect.github.com/pypa/packaging/pull/1053)\n\n####
          New Contributors\n\n- [@&#8203;cdce8p](https://redirect.github.com/cdce8p)
          made their first contribution in [#&#8203;881](https://redirect.github.com/pypa/packaging/pull/881)\n-
          [@&#8203;dholth](https://redirect.github.com/dholth) made their first contribution
          in [#&#8203;860](https://redirect.github.com/pypa/packaging/pull/860)\n-
          [@&#8203;trim21](https://redirect.github.com/trim21) made their first contribution
          in [#&#8203;908](https://redirect.github.com/pypa/packaging/pull/908)\n-
          [@&#8203;yarikoptic](https://redirect.github.com/yarikoptic) made their
          first contribution in [#&#8203;910](https://redirect.github.com/pypa/packaging/pull/910)\n-
          [@&#8203;cthoyt](https://redirect.github.com/cthoyt) made their first contribution
          in [#&#8203;868](https://redirect.github.com/pypa/packaging/pull/868)\n-
          [@&#8203;bwoodsend](https://redirect.github.com/bwoodsend) made their first
          contribution in [#&#8203;879](https://redirect.github.com/pypa/packaging/pull/879)\n-
          [@&#8203;stefan6419846](https://redirect.github.com/stefan6419846) made
          their first contribution in [#&#8203;921](https://redirect.github.com/pypa/packaging/pull/921)\n-
          [@&#8203;bearomorphism](https://redirect.github.com/bearomorphism) made
          their first contribution in [#&#8203;913](https://redirect.github.com/pypa/packaging/pull/913)\n-
          [@&#8203;EpicWink](https://redirect.github.com/EpicWink) made their first
          contribution in [#&#8203;922](https://redirect.github.com/pypa/packaging/pull/922)\n-
          [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe) made their
          first contribution in [#&#8203;932](https://redirect.github.com/pypa/packaging/pull/932)\n-
          [@&#8203;subhajitsaha01](https://redirect.github.com/subhajitsaha01) made
          their first contribution in [#&#8203;930](https://redirect.github.com/pypa/packaging/pull/930)\n-
          [@&#8203;ncoghlan](https://redirect.github.com/ncoghlan) made their first
          contribution in [#&#8203;973](https://redirect.github.com/pypa/packaging/pull/973)\n-
          [@&#8203;zahlman](https://redirect.github.com/zahlman) made their first
          contribution in [#&#8203;1008](https://redirect.github.com/pypa/packaging/pull/1008)\n-
          [@&#8203;JP-Ellis](https://redirect.github.com/JP-Ellis) made their first
          contribution in [#&#8203;939](https://redirect.github.com/pypa/packaging/pull/939)\n\n####
          Since last RC\n\nFixes:\n\n- Restore `._version` as a compat shim by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1062](https://redirect.github.com/pypa/packaging/pull/1062)\n\nPerformance:\n\n-
          Dual replace by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1064](https://redirect.github.com/pypa/packaging/pull/1064)\n\nDocumentaiton:\n\n-
          Prepare for 26.0 final by [@&#8203;henryiii](https://redirect.github.com/henryiii)
          in [#&#8203;1063](https://redirect.github.com/pypa/packaging/pull/1063)\n\n**Full
          Changelog**: <https://github.com/pypa/packaging/compare/26.0rc3...26.0>\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - 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\U0001F515 **Ignore**:
          Close this PR and you won't be reminded about this update again.\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/osism/cloud-in-a-box).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi44NS4xIiwidXBkYXRlZEluVmVyIjoiNDMuMTEwLjIiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlIl19-->\n"
        change_url: https://github.com/osism/cloud-in-a-box/pull/425
        commit_id: 524a0209bd6def60143f9d9c0af2e4dc7e975735
        patchset: 524a0209bd6def60143f9d9c0af2e4dc7e975735
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/cloud-in-a-box
          name: osism/cloud-in-a-box
          short_name: cloud-in-a-box
          src_dir: src/github.com/osism/cloud-in-a-box
        topic: null
      job: ansible-lint
      jobtags: []
      max_attempts: 3
      message: VXBkYXRlIGRlcGVuZGVuY3kgcGFja2FnaW5nIHRvIHYyNgoKVGhpcyBQUiBjb250YWlucyB0aGUgZm9sbG93aW5nIHVwZGF0ZXM6Cgp8IFBhY2thZ2UgfCBDaGFuZ2UgfCBbQWdlXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFtDb25maWRlbmNlXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8CnwtLS18LS0tfC0tLXwtLS18CnwgW3BhY2thZ2luZ10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nKSB8IGA9PTI1LjBgIOKGkiBgPT0yNi4xYCB8ICFbYWdlXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvYWdlL3B5cGkvcGFja2FnaW5nLzI2LjE/c2xpbT10cnVlKSB8ICFbY29uZmlkZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9hcGkvbWMvYmFkZ2VzL2NvbmZpZGVuY2UvcHlwaS9wYWNrYWdpbmcvMjUuMC8yNi4xP3NsaW09dHJ1ZSkgfAoKLS0tCgojIyMgUmVsZWFzZSBOb3RlcwoKPGRldGFpbHM+CjxzdW1tYXJ5PnB5cGEvcGFja2FnaW5nIChwYWNrYWdpbmcpPC9zdW1tYXJ5PgoKIyMjIFtgdjI2LjFgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcmVsZWFzZXMvdGFnLzI2LjEpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9jb21wYXJlLzI2LjAuLi4yNi4xKQoKRmVhdHVyZXM6CgotIFBFUCA3ODM6IGFkZCBoYW5kbGluZyBmb3IgRW1zY3JpcHRlbiB3aGVlbCB0YWdzIGJ5IFtAJiM4MjAzO2hvb2RtYW5lXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaG9vZG1hbmUpIGluIFsjJiM4MjAzOzgwNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvODA0KQotIFBFUCA4MDM6IGFkZCBoYW5kbGluZyBmb3IgdGhlIGBhYmkzLmFiaTN0YCBmcmVlLXRocmVhZGluZyB0YWcgYnkgW0AmIzgyMDM7bmdvbGRiYXVtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbmdvbGRiYXVtKSBpbiBbIyYjODIwMzsxMDk5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDk5KQotIFBFUCA3MjM6IGFkZCBgcGFja2FnaW5nLmRlcGVuZGVuY3lfZ3JvdXBzYCBtb2R1bGUsIGJhc2VkIG9uIHRoZSBgZGVwZW5kZW5jeS1ncm91cHNgIHBhY2thZ2UgYnkgW0AmIzgyMDM7c2lyb3Nlbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3Npcm9zZW4pIGluIFsjJiM4MjAzOzEwNjVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNjUpCi0gQWRkIHRoZSBgcGFja2FnaW5nLmRpcmVjdF91cmxgIG1vZHVsZSBieSBbQCYjODIwMztzYmlkb3VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vc2JpZG91bCkgaW4gWyMmIzgyMDM7OTQ0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NDQpCi0gQWRkIHRoZSBgcGFja2FnaW5nLmVycm9yc2AgbW9kdWxlIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNzEpCi0gQWRkIGBTcGVjaWZpZXJTZXQuaXNfdW5zYXRpc2ZpYWJsZWAgdXNpbmcgcmFuZ2VzIChuZXcgaW50ZXJuYWxzIHRoYXQgd2lsbCBiZSBleHBhbmRlZCBpbiBmdXR1cmUgdmVyc2lvbnMpIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTExOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTExOSkKLSBBZGQgYGNyZWF0ZV9jb21wYXRpYmxlX3RhZ3Nfc2VsZWN0b3JgIHRvIHNlbGVjdCBjb21wYXRpYmxlIHRhZ3MgYnkgW0AmIzgyMDM7c2JpZG91bF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3NiaWRvdWwpIGluIFsjJiM4MjAzOzExMTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMTApCi0gQWRkIGEgYGtleWAgYXJndW1lbnQgdG8gYFNwZWNpZmllclNldC5maWx0ZXIoKWAgYnkgW0AmIzgyMDM7ZnJvc3RtaW5nXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vZnJvc3RtaW5nKSBpbiBbIyYjODIwMzsxMDY4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDY4KQotIFN1cHBvcnQgYCZgIGFuZCBgfGAgZm9yIGBNYXJrZXJgJ3MgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTE0Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTE0NikKLSBOb3JtYWxpemUgYFZlcnNpb24uX19yZXBsYWNlX19gIGFuZCBhZGQgYFZlcnNpb24uZnJvbV9wYXJ0c2AgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA3OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA3OCkKLSBBZGQgYW4gb3B0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGFnIHNldCBzb3J0IG9yZGVyIGluIGBwYXJzZV93aGVlbF9maWxlbmFtZWAgYnkgW0AmIzgyMDM7cjI2Ni10ZWNoXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcjI2Ni10ZWNoKSBpbiBbIyYjODIwMzsxMTUwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTUwKQoKQmVoYXZpb3IgYWRhcHRhdGlvbnM6CgotIE5hcnJvdyBleGNsdXNpb24gb2YgcHJlLXJlbGVhc2VzIGZvciBgPFYucG9zdE5gIHRvIG1hdGNoIHNwZWMgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTQwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTQwKQotIE5hcnJvdyBleGNsdXNpb24gb2YgcG9zdC1yZWxlYXNlcyBmb3IgYD5WYCB0byBtYXRjaCBzcGVjIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTE0MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTE0MSkKLSBSZW5hbWUgYGZvcm1hdF9mdWxsX3ZlcnNpb25gIHRvIGBfZm9ybWF0X2Z1bGxfdmVyc2lvbmAgdG8gbWFrZSBpdCB2aXNpYmx5IHByaXZhdGUgYnkgW0AmIzgyMDM7cjI2Ni10ZWNoXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcjI2Ni10ZWNoKSBpbiBbIyYjODIwMzsxMTI1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTI1KQotIFJlc3RyaWN0IGxvY2FsIHZlcnNpb24gdG8gQVNDSUkgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTEwMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTEwMikKClB5bG9jayAoUEVQIDc1MSkgdXBkYXRlczoKCi0gQWRkIHB5bG9jayBgc2VsZWN0YCBmdW5jdGlvbiBieSBbQCYjODIwMztzYmlkb3VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vc2JpZG91bCkgaW4gWyMmIzgyMDM7MTA5Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5MikKLSBEb2N1bWVudCBweWxvY2sgYHNlbGVjdCgpYCBtZXRob2QgYW5kIGBQeWxvY2tTZWxlY3RFcnJvcmAgYnkgW0AmIzgyMDM7cjI2Ni10ZWNoXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcjI2Ni10ZWNoKSBpbiBbIyYjODIwMzsxMTUzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTUzKQotIEFkZCBgZmlsZW5hbWVgIHByb3BlcnR5IHRvIGBQYWNrYWdlU2Rpc3RgIGFuZCBgUGFja2FnZVdoZWVsYCwgbW9yZSB2YWxpZGF0aW9uIGJ5IFtAJiM4MjAzO3NiaWRvdWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9zYmlkb3VsKSBpbiBbIyYjODIwMzsxMDk1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDk1KQotIEdpdmUgcHJlZmVyZW5jZSB0byBwYXRoIG92ZXIgdXJsIGJ5IFtAJiM4MjAzO3NiaWRvdWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9zYmlkb3VsKSBpbiBbIyYjODIwMzsxMTI4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTI4KQotIFZhbGlkYXRlIG5hbWUvdmVyc2lvbiBjb25zaXN0ZW5jeSBpbiBmaWxlIG5hbWVzIGJ5IFtAJiM4MjAzO3NiaWRvdWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9zYmlkb3VsKSBpbiBbIyYjODIwMzsxMTE0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTE0KQoKRml4ZXM6CgotIEZpeCBgPmAgY29tcGFyaXNvbiBmb3IgdmVyc2lvbnMgd2l0aCBkZXYrbG9jYWwgc2VnbWVudHMgYnkgW0AmIzgyMDM7dmVlY2VleV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3ZlZWNlZXkpIGluIFsjJiM4MjAzOzEwOTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwOTcpCi0gRml4IGluY29ycmVjdCBzZWxmLWNvbXBhcmlzb24gZm9yIGBJbmZpbml0eVR5cGVgIGFuZCBgTmVnYXRpdmVJbmZpbml0eVR5cGVgIGJ5IFtAJiM4MjAzO2J5c2liZXJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ieXNpYmVyKSBpbiBbIyYjODIwMzsxMDkzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDkzKQotIENhbm9uaWNhbGl6ZSB3aGVuIGRlZHVwbGljYXRpbmcgc3BlY2lmaWVycyBpbiBgU3BlY2lmaWVyU2V0YCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMDldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMDkpCi0gRml4IGNoYXJzZXQgZXJyb3IgbWVzc2FnZSBmb3JtYXR0aW5nIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTEyMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTEyMSkKLSBIYW5kbGUgdGhlIGBrZXlgIHBhcmFtZXRlciBpbiBgU3BlY2lmaWVyU2V0LmZpbHRlcmAgd2hlbiBzcGVjaWZpZXJzIGFyZSBlbXB0eSBhbmQgcHJlcmVsZWFzZSBpcyBgRmFsc2VgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTA5Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5NikKLSBTdGFuZGFyZGl6ZSBpbm5lciBjb21wb25lbnRzIG9mIGByZXByYCBvdXRwdXQgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA5MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5MCkKLSBgU3BlY2lmaWVyYCdzIGA9PT1gIHVzZXMgb3JpZ2luYWwgc3RyaW5nLCBub3Qgbm9ybWFsaXplZCwgd2hlbiBhdmFpbGFibGUgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTI0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTI0KQotIFByb3BhZ2F0ZSBpbnQtbWF4LXN0ci1kaWdpdHMgYFZhbHVlRXJyb3JgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTE1NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTE1NSkKClBlcmZvcm1hbmNlOgoKLSBBZGQgZmFzdCBwYXRoIGZvciBwYXJzaW5nIHNpbXBsZSB2ZXJzaW9ucyAoZGlnaXRzIGFuZCBkb3RzIG9ubHkpIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTA4Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA4MikKLSBBZGQgZmFzdCBwYXRoIGZvciBgVmVyc2lvbmAgdG8gYFZlcnNpb25gIGNvbXBhcmlzb24gYnkgc2tpcHBpbmcgYF9rZXlgIHByb3BlcnR5IGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTA4M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA4MykKLSBDYWNoZSBgVmVyc2lvbmAgaGFzaCB2YWx1ZSBpbiBkZWRpY2F0ZWQgc2xvdCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMThdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMTgpCi0gT3ZlcmhhdWwgYF9jbXBrZXlgIHRvIHJlbW92ZSB1c2Ugb2YgY3VzdG9tIG9iamVjdHMgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTE2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTE2KQotIFNraXAgYF9fcmVwbGFjZV9fYCBpbiBTcGVjaWZpZXIgY29tcGFyaXNvbiBpZiBub3QgbmVlZGVkIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTA4MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA4MSkKLSBgU3BlY2lmaWVyU2V0YCB1c2UgYHR1cGxlYCBpbnN0ZWFkIG9mIGBmcm96ZW5zZXRgIGZvciBgX3NwZWNzYCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMDhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMDgpCi0gU3BlZWQgdXAgY29tcGxleCBgU3BlY2lmaWVyU2V0YCBmaWx0ZXJpbmcgYnkgaW1wbGVtZW50aW5nIGNvc3QtYmFzZWQgb3JkZXJpbmcgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTA1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTA1KQotIFNwZWVkIHVwIHdpbGRjYXJkIGNvbXBhcmlzb24gYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTExXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTExKQotIFN0cmVhbSBQRVA0NDAgZmlsdGVyaW5nIGluIGBTcGVjaWZpZXJTZXQuZmlsdGVyYCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzEwNzZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNzYpCi0gQWRkIGBfX3Nsb3RzX19gIHRvIGBNYXJrZXJgIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzExNDddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExNDcpCi0gU2ltcGx5IGBTcGVjaWZpZXJgIHJlZ2V4IGJ5IFtAJiM4MjAzO3Npcm9zZW5dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9zaXJvc2VuKSBpbiBbIyYjODIwMzsxMTA2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTA2KQotIFNraXAgdXNpbmcgdGhlIGhhc2ggcHJvcGVydHkgaW50ZXJuYWxseSBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMTVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMTUpCgpJbnRlcm5hbDoKCi0gQWRkIGRvd25zdHJlYW0gdGVzdGluZyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDQ5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDQ5KQotIEJlbmNobWFya2luZyBzdWl0ZSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDU5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDU5KQotIEJlbmNobWFyayB2YXJpYW5jZSByZWR1Y3Rpb24gYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTA3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTA3KQotIEFkZCBwcm9wZXJ0eS1iYXNlZCB0ZXN0cyBmb3IgUEVQIDQ0MCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExNDRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExNDQpCi0gQ2xlYW4gdXAgYSBmZXcgYGNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGluIHRlc3RzIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNzBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNzApCi0gRG8gbm90IHJlbG9hZCB0aGUgdGFncyBtb2R1bGUgaW4gdGVzdHMgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTE1Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTE1MikKLSBMaW1pdCBgZGlyKClgIC8gdGFiLWNvbXBsZXRpb24gaW4gUkVQTCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDExXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDExKQotIEFkZCBtb3JlIGBfX2FsbF9fYC9gX19kaXJfX2AgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA2OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA2OSkKLSBDbGVhbnVwIHByZS1jb21taXQgYSBiaXQgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA4MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA4MCkKLSBQaW4gcHJlLWNvbW1pdCBmaWxlLCB1c2UgZGVwZW5kYWJvdCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTMzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTMzKQotIFJlbW92ZSBzcGhpbngtdG9vbGJveCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTM1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTM1KQotIFVzZSBkb2NzIGdyb3VwLCBmYXN0ZXIgcmVhZHRoZWRvY3MgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA2MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA2MSkKLSBBZGQgZnJlZS10aHJlYWRlZCBQeXRob24gdG8gQ0kgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA5OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5OCkKLSBTaW1wbGlmeSBjb21iaW5pbmcgYFNwZWNpZmllclNldC5wcmVyZWxlYXNlc2AgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMDczXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDczKQotIFVzZSBkaXJlY3Qgb3BlcmF0b3IgbWV0aG9kcyBpbiBgX2NvbXBhcmVfY29tcGF0aWJsZWAgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTAwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTAwKQotIFJlbW92ZSB1bm5lY2Vzc2FyeSBpZiBzdGF0ZW1lbnQgaW4gYFNwZWNpZmllci5wcmVyZWxlYXNlc2AgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMDc0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDc0KQotIFJlbW92ZSB1bm5lZWRlZCBuZXN0aW5nIGluIGBTcGVjaWZpZXIucHJlcmVsZWFzZXNgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTA3Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA3MikKCkRvY3VtZW50YXRpb246CgotIEZpeCBkb2N1bWVudGF0aW9uOiBncmFtbWFyLCB0eXBvcywgZm9ybWF0dGluZywgYW5kIG91dGRhdGVkIHJlZmVyZW5jZXMgYnkgW0AmIzgyMDM7RGltaXRyaVBhcGFkb3BvdWxvc10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL0RpbWl0cmlQYXBhZG9wb3Vsb3MpIGluIFsjJiM4MjAzOzEwODRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwODQpCi0gRml4IHZlcnNpb25hZGRlZCBmb3IgYFZlcnNpb24uZnJvbV9wYXJ0cygpYCBieSBbQCYjODIwMztKYWNrZW5tZW5dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9KYWNrZW5tZW4pIGluIFsjJiM4MjAzOzExMzRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMzQpCi0gRG9jdW1lbnQgYCZgIGFuZCBgfGAgb3BlcmF0b3JzIGZvciBjb21iaW5pbmcgYE1hcmtlcmAgb2JqZWN0cyBieSBbQCYjODIwMztyMjY2LXRlY2hdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9yMjY2LXRlY2gpIGluIFsjJiM4MjAzOzExNTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExNTEpCi0gRXhwYW5kIGFuZCBjbGVhbiB1cCBgVmVyc2lvbmAgZG9jdW1lbnRhdGlvbiBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDg5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDg5KQotIE1vdmUgbGljZW5zZSBkb2NzIGlubGluZSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTMxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTMxKQotIE1vdmUgbWFya2VycyBpbmxpbmUgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTEwNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTEwNCkKLSBNb3ZlIHRhZ3MgZG9jcyB0byBpbmxpbmUgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTEzMF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTEzMCkKLSBNb3ZlIHV0aWxpdGllcyBpbmxpbmUsIGxpa2Ugb3RoZXIgbW9kdWxlcyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTAzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTAzKQoKIyMjIyBCZW5jaG1hcmtzCgpQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgc2luY2UgMjYuMCwgZnJvbSB0aGUgbmV3IGludGVncmF0ZWQgYmVuY2htYXJrIHN1aXRlOgoKYGBgCnV2IHJ1biBhc3YgcnVuIDI2LjAuLkhFQUQKYGBgCgo8aW1nIHdpZHRoPSI5MDgiIGhlaWdodD0iOTY1IiBhbHQ9IlNjcmVlbnNob3QgMjAyNi0wNC0xMyBhdCAxMSAzMiAxNOKAr1BNIiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy8zYmY2MzU2OS1kYmJmLTRmMzQtOTY2MC1lZGUzY2VmMTc0NWQiIC8+Cgo8aW1nIHdpZHRoPSI5MDgiIGhlaWdodD0iNDc5IiBhbHQ9IlNjcmVlbnNob3QgMjAyNi0wNC0xMyBhdCAxMSAzMiA0M+KAr1BNIiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9mNzkwNjgwMC1mNmQ5LTRhZjYtYTNmMy0zNjliNjU0YjczZTMiIC8+CgojIyMjIE5ldyBDb250cmlidXRvcnMKCi0gW0AmIzgyMDM7dmVlY2VleV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3ZlZWNlZXkpIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzEwOTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwOTcpCi0gW0AmIzgyMDM7YnlzaWJlcl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2J5c2liZXIpIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzEwOTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwOTMpCi0gW0AmIzgyMDM7c2lyb3Nlbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3Npcm9zZW4pIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzExMDZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMDYpCi0gW0AmIzgyMDM7SmFja2VubWVuXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vSmFja2VubWVuKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzsxMTM0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTM0KQotIFtAJiM4MjAzO25nb2xkYmF1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25nb2xkYmF1bSkgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7MTA5OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5OSkKLSBbQCYjODIwMztyMjY2LXRlY2hdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9yMjY2LXRlY2gpIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzExNTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExNTEpCi0gW0AmIzgyMDM7aG9vZG1hbmVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ob29kbWFuZSkgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7ODA0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84MDQpCgoqKkZ1bGwgQ2hhbmdlbG9nKio6IDxodHRwczovL2dpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvY29tcGFyZS8yNi4wLi4uMjYuMT4KCiMjIyBbYHYyNi4wYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3JlbGVhc2VzL3RhZy8yNi4wKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvY29tcGFyZS8yNS4wLi4uMjYuMCkKClJlYWQgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBoZXJlOiA8aHR0cHM6Ly9pc2NpbnVtcHkuZGV2L3Bvc3QvcGFja2FnaW5nLWZhc3Rlcj4uCgojIyMjIFdoYXQncyBDaGFuZ2VkCgpGZWF0dXJlczoKCi0gUEVQIDc1MTogc3VwcG9ydCBweWxvY2sgYnkgW0AmIzgyMDM7c2JpZG91bF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3NiaWRvdWwpIGluIFsjJiM4MjAzOzkwMF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTAwKQotIFBFUCA3OTQ6IGltcG9ydCBuYW1lIG1ldGFkYXRhIGJ5IFtAJiM4MjAzO2JyZXR0Y2Fubm9uXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYnJldHRjYW5ub24pIGluIFsjJiM4MjAzOzk0OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTQ4KQotIFN1cHBvcnQgd3JpdGluZyBtZXRhZGF0YSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs4NDZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzg0NikKLSBTdXBwb3J0IGBfX3JlcGxhY2VfX2AgZm9yIGBWZXJzaW9uYCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDAzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDAzKQotIFN1cHBvcnQgcG9zaXRpb25hbCBwYXR0ZXJuIG1hdGNoaW5nIGZvciBgVmVyc2lvbmAgYW5kIGBTcGVjaWZpZXJgIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMDRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMDQpCgpCZWhhdmlvciBhZGFwdGF0aW9uczoKCi0gUEVQIDQ0MCBoYW5kbGluZyBvZiBwcmVyZWxlYXNlcyBmb3IgYFNwZWNpZmllci5jb250YWluc2AsIGBTcGVjaWZpZXJTZXQuY29udGFpbnNgLCBhbmQgYFNwZWNpZmllclNldC5maWx0ZXJgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7ODk3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84OTcpCi0gSGFuZGxlIFBFUCA0NDAgZWRnZSBjYXNlIGluIGBTcGVjaWZpZXJTZXQuZmlsdGVyYCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzk0Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTQyKQotIEFkanVzdCBhcmJpdHJhcnkgZXF1YWxpdHkgaW50ZXJzZWN0aW9uIHByZXNlcnZhdGlvbiBpbiBgU3BlY2lmaWVyU2V0YCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzk1MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTUxKQotIFJldHVybiBgRmFsc2VgIGluc3RlYWQgb2YgcmFpc2luZyBmb3IgYC5jb250YWluc2Agd2l0aCBpbnZhbGlkIHZlcnNpb24gYnkgW0AmIzgyMDM7TGlhbS1EZVZvZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL0xpYW0tRGVWb2UpIGluIFsjJiM4MjAzOzkzMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTMyKQotIFN1cHBvcnQgYXJiaXRyYXJ5IGVxdWFsaXR5IG9uIGFyYml0cmFyeSBzdHJpbmdzIGZvciBgU3BlY2lmaWVyYCBhbmQgYFNwZWNpZmllclNldGAncyBgZmlsdGVyYCBhbmQgYGNvbnRhaW5zYCBtZXRob2QuIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7OTU0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NTQpCi0gT25seSB0cnkgdG8gcGFyc2UgYXMgYFZlcnNpb25gIG9uIGNlcnRhaW4gbWFya2VyIGtleXMsIHJldHVybiBgRmFsc2VgIG9uIHVuZXF1YWwgb3JkZXJlZCBjb21wYXJzaW9ucyBieSBbQCYjODIwMztKUC1FbGxpc10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL0pQLUVsbGlzKSBpbiBbIyYjODIwMzs5MzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkzOSkKCkZpeGVzOgoKLSBVcGRhdGUgYF9oYXNoYCB3aGVuIHVucGlja2xpbmcgYFRhZygpYCBieSBbQCYjODIwMztkaG9sdGhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9kaG9sdGgpIGluIFsjJiM4MjAzOzg2MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvODYwKQotIENvcnJlY3QgY29tbWVudCBhbmQgc2ltcGxpZnkgaW1wbGljaXQgcHJlcmVsZWFzZSBoYW5kbGluZyBpbiBgU3BlY2lmaWVyLnByZXJlbGVhc2VzYCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzg5Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvODk2KQotIFVzZSBleHBsaWNpdCBgX0dMaWJDVmVyc2lvbmAgYE5hbWVkVHVwbGVgIGluIGBfbWFueWxpbnV4YCBieSBbQCYjODIwMztjdGhveXRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9jdGhveXQpIGluIFsjJiM4MjAzOzg2OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvODY4KQotIERldGVjdCBpbnZhbGlkIGxpY2Vuc2UgZXhwcmVzc2lvbnMgY29udGFpbmluZyBgKClgIGJ5IFtAJiM4MjAzO2J3b29kc2VuZF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2J3b29kc2VuZCkgaW4gWyMmIzgyMDM7ODc5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84NzkpCi0gQ29ycmVjdCByZWdleCBmb3IgbWV0YWRhdGEgYCduYW1lJ2AgZm9ybWF0IGJ5IFtAJiM4MjAzO2RpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vZGkpIGluIFsjJiM4MjAzOzkyNV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTI1KQotIEltcHJvdmUgdGhlIG1lc3NhZ2UgYXJvdW5kIGV4cGVjdGluZyBhIHNlbWljb2xvbiBieSBbQCYjODIwMztwcmFkeXVuc2ddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wcmFkeXVuc2cpIGluIFsjJiM4MjAzOzgzM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvODMzKQotIFN1cHBvcnQgbmVzdGVkIHBhcmVucyBpbiBsaWNlbnNlIGV4cHJlc3Npb25zIGJ5IFtAJiM4MjAzO0xpYW0tRGVWb2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9MaWFtLURlVm9lKSBpbiBbIyYjODIwMzs5MzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkzMSkKLSBBZGQgc3BhY2UgYmVmb3JlIGF0IHN5bWJvbCBpbiBgUmVxdWlyZW1lbnRzYCBzdHJpbmcgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTUzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NTMpCi0gQSByb290IGxvZ2dlciB1c2UgZm91bmQgYnkgcnVmZiBMT0csIHVzZSBgcGFja2FnaW5nYCBsb2dnZXIgaW5zdGVhZCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NjVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk2NSkKLSBCZXR0ZXIgc3VwcG9ydCBmb3Igc3ViY2xhc3NpbmcgYE1hcmtlcmAgYW5kIGBSZXF1aXJlbWVudGAgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAyMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAyMikKLSBOb3JtYWxpemUgYWxsIGV4dHJhcywgbm90IGp1c3QgaWYgaXQgY29tZXMgZmlyc3QgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAyNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAyNCkKLSBEb24ndCBwcm9kdWNlIGEgYnJva2VuIHJlcHIgaWYgYE1hcmtlcmAgZmFpbHMgdG8gY29uc3RydWN0IGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMzNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMzMpCgpQZXJmb3JtYW5jZToKCi0gQXZvaWQgcmVjb21waWxpbmcgcmVnZXhlcyBpbiB0aGUgdG9rZW5pemVyIGZvciBhIDN4IHNwZWVkdXAgYnkgW0AmIzgyMDM7aGF1bnRzYW5pbmphXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGF1bnRzYW5pbmphKSBpbiBbIyYjODIwMzsxMDE5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDE5KQotIEltcHJvdmUgcGVyZm9ybWFuY2UgaW4gYF9tYW55bGludXgucHlgIGJ5IFtAJiM4MjAzO2N0aG95dF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2N0aG95dCkgaW4gWyMmIzgyMDM7ODY5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84NjkpCi0gTWlub3IgY2xlYW51cHMgdG8gYFZlcnNpb25gIGJ5IFtAJiM4MjAzO2JlYXJvbW9ycGhpc21dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZWFyb21vcnBoaXNtKSBpbiBbIyYjODIwMzs5MTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkxMykKLSBTa2lwIHJlZHVuZGFudCBjcmVhdGlvbiBvZiBgVmVyc2lvbmBzIGluIHNwZWNpZmllciBjb21wYXJpc29uIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7OTg2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85ODYpCi0gQ2FjaGUgYFNwZWNpZmllcmAncyBWZXJzaW9uIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7OTg1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85ODUpCi0gTWFrZSBgVmVyc2lvbmAgYSBsaXR0bGUgZmFzdGVyIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk4N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTg3KQotIE1pbm9yIGBWZXJzaW9uYCByZWdleCBjbGVhbnVwIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk5MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTkwKQotIEZhc3RlciByZWdleCBvbiBQeXRob24gMy4xMS41KyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5ODhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk4OCkgYW5kIFsjJiM4MjAzOzEwNTVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNTUpCi0gTGF6aWx5IGNhbGN1bGF0ZSBgX2tleWAgaW4gYFZlcnNpb25gIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7OTg5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85ODkpIGFuZCByZWdyZXNzaW9uIGZvciBgcGFja2FnaW5nX2xlZ2FjeWAgZml4ZWQgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA0OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA0OCkKLSBGYXN0ZXIgYGNhbm9uaWNhbGl6ZV92ZXJzaW9uYCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5OTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk5MykKLSBVc2UgYGZ1bGxtYXRjaGAgaW4gYSBjb3VwbGUgbW9yZSBwbGFjZXMgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTkyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85OTIpCi0gVXNlIGBmdWxsbWF0Y2hgIGZvciBtYXJrZXJzIHRvbyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDI5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDI5KQotIFVzZSBgbWFwYCBpbnN0ZWFkIG9mIGdlbmVyYXRvciBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5OTZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk5NikKLSBEZXByZWNhdGUgYC5fdmVyc2lvbmAgKGBfVmVyc2lvbmAsIGEgYE5hbWVkVHVwbGVgKSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5OTVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk5NSkgYW5kIFsjJiM4MjAzOzEwNjJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNjIpCi0gQXZvaWQgZHVwbGljYXRlIGBWZXJzaW9uYCBjcmVhdGlvbiBpbiBgY2Fub25pY2FsaXplX3ZlcnNpb25gIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk5NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTk0KQotIEFkZCBgX19zbG90c19fYCB0byBgVmVyc2lvbmAgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAwMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAwMSkKLSBBZGQgYF9fc2xvdHNfX2AgdG8gYFNwZWNpZmllcmBzIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMDJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMDIpCi0gQWRkIGBfX3Nsb3RzX19gIHRvIGBOb2RlYHMgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAzMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAzMikKLSBVc2UgYHZlcnNpb24uX19yZXBsYWNlX19gIGluIHNwZWNpZmllciBjb21wYXJpc29uIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7OTk5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85OTkpCi0gVXNlIGBfZ2V0X3NwZWNfdmVyc2lvbmAgaW4gbW9yZSBwbGFjZXMgaW4gYFNwZWNpZmllcmAgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMDA1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDA1KQotIFB1bGwgYHNldGAgY29uc3RydWN0aW9uIG91dCBvZiBmdW5jdGlvbiBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDEyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDEyKQotIExldHRlciBub3JtYWxpemF0aW9uIGRpY3QgZm9yIHByZXJlbGVhc2VzIGFuZCB0aGUgbGlrZSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDE0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDE0KQotIEF2b2lkIG5vcm1hbGl6aW5nIGV4dHJhcyBhZ2FpbiB3aGVuIGNvbXBhcmluZyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDI4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDI4KQotIFNwZWVkIHVwIGBWZXJzaW9uLl9fc3RyX19gIGJ5IGFib3V0IDEwJSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5OTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk5NykKLSBJbmNyZWFzZSB0aGUgcGVyZm9ybWFuY2Ugb2YgYGNhbm9uaWNhbGl6ZV9uYW1lYCBieSBhdm9pZGluZyBhIHJlZ2V4IGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMzBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMzApLCBbIyYjODIwMzsxMDQ3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDQ3KSwgYW5kIFsjJiM4MjAzOzEwNjRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNjQpCi0gRmFzdGVyIHplcm8gc3RyaXBwaW5nIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNThdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNTgpCgpUeXBlIGFubm90YXRpb25zOgoKLSBGaXggYSB0eXBlIGFubm90YXRpb24gYnkgW0AmIzgyMDM7YnJldHRjYW5ub25dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9icmV0dGNhbm5vbikgaW4gWyMmIzgyMDM7OTA3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MDcpCi0gRml4IHRhZ3MgcmV0dXJuIHR5cGUgaW4gYHBhcnNlX3doZWVsX2ZpbGVuYW1lYCBkb2NzIGJ5IFtAJiM4MjAzO25jb2dobGFuXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbmNvZ2hsYW4pIGluIFsjJiM4MjAzOzk3M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTczKQotIEFkZCB0eXBlIGhpbnQgZm9yIGBfdmVyc2lvbmAgaW4gYC52ZXJzaW9uLlZlcnNpb25gIGJ5IFtAJiM4MjAzO2JyZXR0Y2Fubm9uXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYnJldHRjYW5ub24pIGluIFsjJiM4MjAzOzkyN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTI3KQotIENoYW5nZWQgc3RhdGljIHR5cGUgYW5ub3RhdGlvbnMgaW4gcHJlcmVsZWFzZXMgc2V0dGVyIG1ldGhvZCBpbiBgc3BlY2lmaWVyLnB5YCBieSBbQCYjODIwMztzdWJoYWppdHNhaGEwMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3N1Ymhhaml0c2FoYTAxKSBpbiBbIyYjODIwMzs5MzBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkzMCkKLSBTdGF0aWNhbGx5IHR5cGUgdGhlIHRlc3RzIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk4Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTgyKQoKSW50ZXJuYWw6CgotIFRlc3QgYW5kIGRlY2xhcmUgc3VwcG9ydCBQeXRob24gMy4xNCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5MDFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkwMSkKLSBNb2Rlcm5pemUgYW5kIHNwZWVkIHVwIHRlc3RzIG9uIFB5dGhvbiAzLjE0IGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzkwM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTAzKQotIENoYW5nZSBvdXIgbGljZW5zZSBtZXRhZGF0YSB0byB1c2UgYW4gU1BEWCBsaWNlbnNlIGV4cHJlc3Npb24gYnkgW0AmIzgyMDM7Y2RjZThwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vY2RjZThwKSBpbiBbIyYjODIwMzs4ODFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzg4MSkKLSBObyBuZWVkIGZvciBgbGljZW5zZS1maWxlc2AgYnkgW0AmIzgyMDM7RGltaXRyaVBhcGFkb3BvdWxvc10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL0RpbWl0cmlQYXBhZG9wb3Vsb3MpIGluIFsjJiM4MjAzOzkyNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTI0KQotIFVwZGF0ZSBteXB5IGJ5IFtAJiM4MjAzO2hhdW50c2FuaW5qYV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hhdW50c2FuaW5qYSkgaW4gWyMmIzgyMDM7ODkxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84OTEpCi0gU29tZSBjb25maWcgdXBkYXRlcyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5MDJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkwMikKLSBBZGQgc3BlbGwgY2hlY2sgYW5kIHJzdCBjaGVjayBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5MDRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkwNCkKLSBDbGVhbiB1cCBydWZmIGlnbm9yZXMgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTA1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MDUpCi0gVXBkYXRlIGV4YW1wbGUgZm9yIGVudiBtYXJrZXIgYHB5dGhvbl92ZXJzaW9uYCBieSBbQCYjODIwMzt0cmltMjFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS90cmltMjEpIGluIFsjJiM4MjAzOzkwOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTA4KQotIE1vdmUgY29kZXNwZWxsIGNvbmZpZ3VyYXRpb24gaW50byBweXByb2plY3QudG9tbCBieSBbQCYjODIwMzt5YXJpa29wdGljXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20veWFyaWtvcHRpYykgaW4gWyMmIzgyMDM7OTEwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MTApCi0gQ2hlY2sgd2FybmluZyBhIGxpdHRsZSBtb3JlIHByZWNpc2VseSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs4MzddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzgzNykKLSBTcGVlZCB1cCBteXB5IGEgbGl0dGxlIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzgzNl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvODM2KQotIEFwcGx5IHJ1ZmYvZmxha2U4LXB5aSBydWxlcyAoUFlJKSBieSBbQCYjODIwMztEaW1pdHJpUGFwYWRvcG91bG9zXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vRGltaXRyaVBhcGFkb3BvdWxvcykgaW4gWyMmIzgyMDM7ODM1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84MzUpCi0gQmV0dGVyIGxvY2FsIHJ1bnMgZm9yIGNvZGVzcGVsbCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5MTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkxMSkKLSBSZW1vdmUgb3V0ZGF0ZWQvY29uZnVzaW5nIEdpc3QgbGluayBieSBbQCYjODIwMztzdGVmYW42NDE5ODQ2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vc3RlZmFuNjQxOTg0NikgaW4gWyMmIzgyMDM7OTIxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MjEpCi0gRml4IGRvY3MgYW5kIGRvY3MgY2kgYWZ0ZXIgWyMmIzgyMDM7ODk3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvaXNzdWVzLzg5NykgbGFuZGVkIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7OTI2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MjYpCi0gUnVuIHR3aW5lLWNoZWNrIG9uIHB1c2ggaW4gQ0kgYnkgW0AmIzgyMDM7RXBpY1dpbmtdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9FcGljV2luaykgaW4gWyMmIzgyMDM7OTIyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MjIpCi0gYHJ1ZmZgIHdhcyByZW5hbWVkIGBydWZmLWNoZWNrYCBpbiBwcmUtY29tbWl0IGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzkzM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTMzKQotIEZpeCBpbmNvcnJlY3RseSBpbXBsaWNpdGx5IGNvbmNhdGVuYXRlZCBzdHJpbmcgaW4gc3BlY2lmaWVycyB0ZXN0IGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7OTQ2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NDYpCi0gU2ltcGxpZnkgY29uZGl0aW9uYWwgYnkgW0AmIzgyMDM7b2Zla10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL29mZWspIGluIFsjJiM4MjAzOzk0OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTQ5KQotIE1vZGVybml6ZSBub3gsIHVzZSBkZXBlbmRlbmN5LWdyb3VwcyBmb3IgdGVzdHMgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTUyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NTIpCi0gQWRkIG1vcmUgY2hlY2tzIHRoYXQgZG9uJ3QgYWZmZWN0IGFueXRoaW5nIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk1N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTU3KQotIEVuYWJsZSBSdWZmIElTQyBydWxlIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk1OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTU5KQotIFJ1ZmYgY29kZSBGTFkgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTYzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NjMpCi0gcHl0ZXN0IGBsb2dfbGV2ZWxgIGlzIGJldHRlciB0aGFuIGBsb2dfY2xpX2xldmVsYCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NTZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk1NikKLSBSdWZmIGNvZGUgVFJZIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk2MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTYxKQotIEFkZCB0aGUgcnVmZiBQTCBjaGVja3MgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTY0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NjQpCi0gRW5hYmxlIFJ1ZmYgQVJHIHJ1bGVzIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk1OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTU4KQotIFJ1ZmYgUFQgY29kZSAocHl0ZXN0KSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NjBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk2MCkKLSBBZGQgcnVmZiBEVFogYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTY4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NjgpCi0gQWRkIHJ1ZmYgQkxFIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk2N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTY3KQotIEFkZCB0aGUgcnVmZiBTSU0gY2hlY2tzIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk2Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTY2KQotIEFkZGluZyBydWZmIFBFUkYgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTY5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NjkpCi0gTW92ZSBzb21lIGNvbmZpZyBpbnRvIGNvdmVyYWdlIGNvbmZpZyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk3MSkKLSBDaGVjayBydWZmIEM0IGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk2Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTYyKQotIEFkZGluZyBydWZmIFQyMCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NzJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk3MikKLSBBZGQgYSB0ZXN0cyBwYXNzIGpvYiBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NzddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk3NykKLSBBZGQgcnVmZiBUQyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5ODBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk4MCkKLSBBZGRpbmcgcGFydCBvZiBydWZmIFJFVCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk3OSkKLSBSZW9yZGVyIG15cHkgY2hlY2sgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTgzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85ODMpCi0gRW5hYmxlIHJ1ZmYgQUxMIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk4NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTg0KQotIExpbmsgYmFjayB0byByZXBvL3NvdXJjZSBpbiBmdXJvIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk5MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTkxKQotIEFkZCBjYXNlIGluc2Vuc2l0aXZpdHkgdGVzdHMgZm9yIGFyYml0cmFyeSBlcXVhbGl0eSBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzk3NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTc1KQotIFN5bmNocm9uaXplIGRvY3VtZW50YXRpb24gYW5kIGNvZGUgZm9yIG1hcmtlcnMgYnkgW0AmIzgyMDM7emFobG1hbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3phaGxtYW4pIGluIFsjJiM4MjAzOzEwMDhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMDgpCi0gVXNlIGBwYXJ0aXRpb25gIGluIGBfcGFyc2VfcHJvamVjdF91cmxzYCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDEzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDEzKQotIGF1dG8tc2tpcCB0aGUgZGVwZW5kYWJvdCBQUnMgaW4gdGhlIHJlbGVhc2UgY2hhbmdlbG9nIGdlbmVyYXRpb24gYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAxNl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAxNikKLSBVcGRhdGUgdW5yZWxlYXNlZCBzZWN0aW9uIGluIGNoYW5nZWxvZyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDE3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDE3KQotIEZpeCBQUiByb2xlIHRvIG1hdGNoIGV4dGxpbmtzIGJ5IFtAJiM4MjAzO2h1Z292a10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2h1Z292aykgaW4gWyMmIzgyMDM7MTAyMF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAyMCkKLSBNZW50aW9uIG5ldyBwYXJ0cyBpbiBSRUFETUUgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAyM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAyMykKLSBSZXBsYWNlIGEgY291cGxlIG9mIGFzc2VydHMgd2l0aCBlbHNlIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMjddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMjcpCi0gU2ltcGxpZnkgYW5kL29yIGNoZWNrIGEgbGl0dGxlIG1vcmUgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAzMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAzMSkKLSBVc2Ugc2xpbSBydW5uZXIgZm9yIGFsbCBjaGVjayBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDIxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDIxKQotIFVzZSB0eXBvcyBpbnN0ZWFkIG9mIGNvZGVzcGVsbCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDE1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDE1KQotIFVwZGF0ZSBjaGFuZ2Vsb2cgd2l0aCByZWNlbnQgYWRkaXRpb25zIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMzRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMzQpCi0gUHVibGlzaCB0byBQeVBJIHZpYSBHaXRIdWIgQ0kgYnkgW0AmIzgyMDM7RXBpY1dpbmtdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9FcGljV2luaykgaW4gWyMmIzgyMDM7ODkzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84OTMpCi0gVXNlIHByZWsgZm9yIGZhc3RlciBwcmUtY29tbWl0IGxpbnQgc3RlcCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDM3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDM3KQotIEFkZCBoZWxwIHRleHQgdG8gbm94ZmlsZSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDM4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDM4KQotIFVwZGF0ZSBsaWNlbnNlcyB0byAzLjI3IGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMzZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMzYpCi0gVXNlIHJlbGF0aXZlIGltcG9ydCBpbiBgcGFja2FnaW5nLmxpY2Vuc2VzYCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzEwMzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMzkpCi0gQWRkIHppem1vciBhbmQgdGlnaHRlbiB1cCBDSSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDM1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDM1KQotIEZpeCByZWxlYXNlIHNjcmlwdCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDQwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDQwKQotIEZpeCB1c2luZyBhIGRldiB2ZXJzaW9uIChhZ2FpbikgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA0MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA0MSkKLSBGaXggdHlwZSBoaW50IG9mIGZ1bmN0aW9uIHVzZWQgd2l0aCBgY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcmAgYnkgW0AmIzgyMDM7U3BlY0xhZF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL1NwZWNMYWQpIGluIFsjJiM4MjAzOzEwNDZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNDYpCi0gQWx3YXlzIHJ1biB0ZXN0cyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDQ0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDQ0KQotIEZpeCBhIGNoYW5nZWxvZyBudW1iZXIgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA0Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA0MikKLSBGaXggdGhlIHB1Ymxpc2ggam9iIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNDNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNDMpCi0gR2V0IHRoZSBjb3JyZWN0IHRhZyBvbiBwdWJsaXNoIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNDVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNDUpCi0gVGVzdCBvbiBmaXJzdCBwdWJsaWMgcmVsZWFzZSBvZiBDUHl0aG9uIDMuMTEgYW5kIG5ld2VyIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNTZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNTYpCi0gRml4IHB1YmxpY2F0aW9uIGpvYiAoYWdhaW4pIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNTEpCi0gVXNlIGBhY3Rpb25saW50YCB0byBjaGVjayBDSSB3b3JrZmxvd3MgYnkgW0AmIzgyMDM7bWlrZXRoZW1hbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL21pa2V0aGVtYW4pIGluIFsjJiM4MjAzOzEwNTJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNTIpCi0gRml4IGZvcm1hdHRpbmcgb2YgZGlzdHJpYnV0aW9uIHR5cGVzIGluIG1ldGFkYXRhLnJzdCBieSBbQCYjODIwMzticmV0dGNhbm5vbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2JyZXR0Y2Fubm9uKSBpbiBbIyYjODIwMzsxMDUzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDUzKQoKIyMjIyBOZXcgQ29udHJpYnV0b3JzCgotIFtAJiM4MjAzO2NkY2U4cF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2NkY2U4cCkgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7ODgxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84ODEpCi0gW0AmIzgyMDM7ZGhvbHRoXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vZGhvbHRoKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzs4NjBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzg2MCkKLSBbQCYjODIwMzt0cmltMjFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS90cmltMjEpIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzkwOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTA4KQotIFtAJiM4MjAzO3lhcmlrb3B0aWNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS95YXJpa29wdGljKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzs5MTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkxMCkKLSBbQCYjODIwMztjdGhveXRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9jdGhveXQpIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzg2OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvODY4KQotIFtAJiM4MjAzO2J3b29kc2VuZF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2J3b29kc2VuZCkgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7ODc5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84NzkpCi0gW0AmIzgyMDM7c3RlZmFuNjQxOTg0Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3N0ZWZhbjY0MTk4NDYpIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzkyMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTIxKQotIFtAJiM4MjAzO2JlYXJvbW9ycGhpc21dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9iZWFyb21vcnBoaXNtKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzs5MTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkxMykKLSBbQCYjODIwMztFcGljV2lua10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL0VwaWNXaW5rKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzs5MjJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkyMikKLSBbQCYjODIwMztMaWFtLURlVm9lXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vTGlhbS1EZVZvZSkgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7OTMyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MzIpCi0gW0AmIzgyMDM7c3ViaGFqaXRzYWhhMDFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9zdWJoYWppdHNhaGEwMSkgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7OTMwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MzApCi0gW0AmIzgyMDM7bmNvZ2hsYW5dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9uY29naGxhbikgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7OTczXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NzMpCi0gW0AmIzgyMDM7emFobG1hbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3phaGxtYW4pIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzEwMDhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMDgpCi0gW0AmIzgyMDM7SlAtRWxsaXNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9KUC1FbGxpcykgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7OTM5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MzkpCgojIyMjIFNpbmNlIGxhc3QgUkMKCkZpeGVzOgoKLSBSZXN0b3JlIGAuX3ZlcnNpb25gIGFzIGEgY29tcGF0IHNoaW0gYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA2Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA2MikKClBlcmZvcm1hbmNlOgoKLSBEdWFsIHJlcGxhY2UgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA2NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA2NCkKCkRvY3VtZW50YWl0b246CgotIFByZXBhcmUgZm9yIDI2LjAgZmluYWwgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA2M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA2MykKCioqRnVsbCBDaGFuZ2Vsb2cqKjogPGh0dHBzOi8vZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9jb21wYXJlLzI2LjByYzMuLi4yNi4wPgoKPC9kZXRhaWxzPgoKLS0tCgojIyMgQ29uZmlndXJhdGlvbgoK8J+ThSAqKlNjaGVkdWxlKio6IChVVEMpCgotIEJyYW5jaCBjcmVhdGlvbgogIC0gQXQgYW55IHRpbWUgKG5vIHNjaGVkdWxlIGRlZmluZWQpCi0gQXV0b21lcmdlCiAgLSBBdCBhbnkgdGltZSAobm8gc2NoZWR1bGUgZGVmaW5lZCkKCvCfmqYgKipBdXRvbWVyZ2UqKjogRGlzYWJsZWQgYnkgY29uZmlnLiBQbGVhc2UgbWVyZ2UgdGhpcyBtYW51YWxseSBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkLgoK4pm7ICoqUmViYXNpbmcqKjogV2hlbmV2ZXIgUFIgYmVjb21lcyBjb25mbGljdGVkLCBvciB5b3UgdGljayB0aGUgcmViYXNlL3JldHJ5IGNoZWNrYm94LgoK8J+UlSAqKklnbm9yZSoqOiBDbG9zZSB0aGlzIFBSIGFuZCB5b3Ugd29uJ3QgYmUgcmVtaW5kZWQgYWJvdXQgdGhpcyB1cGRhdGUgYWdhaW4uCgotLS0KCiAtIFsgXSA8IS0tIHJlYmFzZS1jaGVjayAtLT5JZiB5b3Ugd2FudCB0byByZWJhc2UvcmV0cnkgdGhpcyBQUiwgY2hlY2sgdGhpcyBib3gKCi0tLQoKVGhpcyBQUiB3YXMgZ2VuZXJhdGVkIGJ5IFtNZW5kIFJlbm92YXRlXShodHRwczovL21lbmQuaW8vcmVub3ZhdGUvKS4gVmlldyB0aGUgW3JlcG9zaXRvcnkgam9iIGxvZ10oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9naXRodWIvb3Npc20vY2xvdWQtaW4tYS1ib3gpLgo8IS0tcmVub3ZhdGUtZGVidWc6ZXlKamNtVmhkR1ZrU1c1V1pYSWlPaUkwTWk0NE5TNHhJaXdpZFhCa1lYUmxaRWx1Vm1WeUlqb2lORE11TVRFd0xqSWlMQ0owWVhKblpYUkNjbUZ1WTJnaU9pSnRZV2x1SWl3aWJHRmlaV3h6SWpwYkluSmxibTkyWVhSbElsMTktLT4K
      patchset: 524a0209bd6def60143f9d9c0af2e4dc7e975735
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 4f450aa36c28b035ce97359a888edbd7599eaf31
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: a01eed06dffe368c1d01819193bfadccb137414d
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 4f450aa36c28b035ce97359a888edbd7599eaf31
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/ansible-lint/run.yaml
          roles:
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_0/zuul-jobs
            link_target: untrusted/project_0/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_0/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_1/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_1/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_2/openinfra-zuul-jobs
            link_target: untrusted/project_2/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_2/openinfra-zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/cloud-in-a-box
        name: osism/cloud-in-a-box
        short_name: cloud-in-a-box
        src_dir: src/github.com/osism/cloud-in-a-box
      projects:
        github.com/osism/cloud-in-a-box:
          canonical_hostname: github.com
          canonical_name: github.com/osism/cloud-in-a-box
          checkout: main
          checkout_description: zuul branch
          commit: 2f7eb353096f77c5358918d0fc054b731154bdc5
          name: osism/cloud-in-a-box
          required: false
          short_name: cloud-in-a-box
          src_dir: src/github.com/osism/cloud-in-a-box
      ref: refs/pull/425/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
