all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe23:ef89
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: e1606dfa-1756-4230-9edf-b9afdddfd6a9
        host_id: de4c9765152b8ccf16bcbbf90e33fb083884dc744cc344501046bc88
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe23:ef89
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.203
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.62
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe23:ef89
        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 yamllint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#59>'
      - '<Job yamllint explicit: None implied: None source: osism/cloud-in-a-box/.zuul.yaml@main#15>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 7f476ef87a2c4483a96edf0ea28e07b2
      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.2` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.2?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/25.0/26.2?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pypa/packaging (packaging)</summary>\n\n###
          [`v26.2`](https://redirect.github.com/pypa/packaging/compare/26.1...26.2)\n\n[Compare
          Source](https://redirect.github.com/pypa/packaging/compare/26.1...26.2)\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)~~
          (old name used in implementation, will be fixed in next release)\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:eyJjcmVhdGVkSW5WZXIiOiI0Mi44NS4xIiwidXBkYXRlZEluVmVyIjoiNDMuMTQxLjMiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlIl19-->\n"
        change_url: https://github.com/osism/cloud-in-a-box/pull/425
        commit_id: 6864e0baaae56c32b8f942078aac513f9e8c9ce4
        patchset: 6864e0baaae56c32b8f942078aac513f9e8c9ce4
        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: bb0cf5ce416e47bda73fdcc3c1920bb5
      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.2` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.2?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/25.0/26.2?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pypa/packaging (packaging)</summary>\n\n###
          [`v26.2`](https://redirect.github.com/pypa/packaging/compare/26.1...26.2)\n\n[Compare
          Source](https://redirect.github.com/pypa/packaging/compare/26.1...26.2)\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)~~
          (old name used in implementation, will be fixed in next release)\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:eyJjcmVhdGVkSW5WZXIiOiI0Mi44NS4xIiwidXBkYXRlZEluVmVyIjoiNDMuMTQxLjMiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlIl19-->\n"
        change_url: https://github.com/osism/cloud-in-a-box/pull/425
        commit_id: 6864e0baaae56c32b8f942078aac513f9e8c9ce4
        patchset: 6864e0baaae56c32b8f942078aac513f9e8c9ce4
        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.2` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.2?slim=true)
        | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/25.0/26.2?slim=true)
        |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pypa/packaging (packaging)</summary>\n\n###
        [`v26.2`](https://redirect.github.com/pypa/packaging/compare/26.1...26.2)\n\n[Compare
        Source](https://redirect.github.com/pypa/packaging/compare/26.1...26.2)\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)~~ (old
        name used in implementation, will be fixed in next release)\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:eyJjcmVhdGVkSW5WZXIiOiI0Mi44NS4xIiwidXBkYXRlZEluVmVyIjoiNDMuMTQxLjMiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlIl19-->\n"
      change_url: https://github.com/osism/cloud-in-a-box/pull/425
      child_jobs: []
      commit_id: 6864e0baaae56c32b8f942078aac513f9e8c9ce4
      event_id: 1e36d5b0-401f-11f1-9e31-3ad30ee74cec
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/7f476ef87a2c4483a96edf0ea28e07b2/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/7f476ef87a2c4483a96edf0ea28e07b2/work/logs
        result_data_file: /var/lib/zuul/builds/7f476ef87a2c4483a96edf0ea28e07b2/work/results.json
        src_root: /var/lib/zuul/builds/7f476ef87a2c4483a96edf0ea28e07b2/work/src
        work_root: /var/lib/zuul/builds/7f476ef87a2c4483a96edf0ea28e07b2/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.2` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.2?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/25.0/26.2?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pypa/packaging (packaging)</summary>\n\n###
          [`v26.2`](https://redirect.github.com/pypa/packaging/compare/26.1...26.2)\n\n[Compare
          Source](https://redirect.github.com/pypa/packaging/compare/26.1...26.2)\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)~~
          (old name used in implementation, will be fixed in next release)\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:eyJjcmVhdGVkSW5WZXIiOiI0Mi44NS4xIiwidXBkYXRlZEluVmVyIjoiNDMuMTQxLjMiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlIl19-->\n"
        change_url: https://github.com/osism/cloud-in-a-box/pull/425
        commit_id: 6864e0baaae56c32b8f942078aac513f9e8c9ce4
        patchset: 6864e0baaae56c32b8f942078aac513f9e8c9ce4
        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: yamllint
      jobtags: []
      max_attempts: 3
      message: VXBkYXRlIGRlcGVuZGVuY3kgcGFja2FnaW5nIHRvIHYyNgoKVGhpcyBQUiBjb250YWlucyB0aGUgZm9sbG93aW5nIHVwZGF0ZXM6Cgp8IFBhY2thZ2UgfCBDaGFuZ2UgfCBbQWdlXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFtDb25maWRlbmNlXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8CnwtLS18LS0tfC0tLXwtLS18CnwgW3BhY2thZ2luZ10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nKSB8IGA9PTI1LjBgIOKGkiBgPT0yNi4yYCB8ICFbYWdlXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvYWdlL3B5cGkvcGFja2FnaW5nLzI2LjI/c2xpbT10cnVlKSB8ICFbY29uZmlkZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9hcGkvbWMvYmFkZ2VzL2NvbmZpZGVuY2UvcHlwaS9wYWNrYWdpbmcvMjUuMC8yNi4yP3NsaW09dHJ1ZSkgfAoKLS0tCgojIyMgUmVsZWFzZSBOb3RlcwoKPGRldGFpbHM+CjxzdW1tYXJ5PnB5cGEvcGFja2FnaW5nIChwYWNrYWdpbmcpPC9zdW1tYXJ5PgoKIyMjIFtgdjI2LjJgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvY29tcGFyZS8yNi4xLi4uMjYuMikKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL2NvbXBhcmUvMjYuMS4uLjI2LjIpCgojIyMgW2B2MjYuMWBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9yZWxlYXNlcy90YWcvMjYuMSkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL2NvbXBhcmUvMjYuMC4uLjI2LjEpCgpGZWF0dXJlczoKCi0gfn5QRVAgNzgzOiBhZGQgaGFuZGxpbmcgZm9yIEVtc2NyaXB0ZW4gd2hlZWwgdGFncyBieSBbQCYjODIwMztob29kbWFuZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hvb2RtYW5lKSBpbiBbIyYjODIwMzs4MDRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzgwNCl+fiAob2xkIG5hbWUgdXNlZCBpbiBpbXBsZW1lbnRhdGlvbiwgd2lsbCBiZSBmaXhlZCBpbiBuZXh0IHJlbGVhc2UpCi0gUEVQIDgwMzogYWRkIGhhbmRsaW5nIGZvciB0aGUgYGFiaTMuYWJpM3RgIGZyZWUtdGhyZWFkaW5nIHRhZyBieSBbQCYjODIwMztuZ29sZGJhdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9uZ29sZGJhdW0pIGluIFsjJiM4MjAzOzEwOTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwOTkpCi0gUEVQIDcyMzogYWRkIGBwYWNrYWdpbmcuZGVwZW5kZW5jeV9ncm91cHNgIG1vZHVsZSwgYmFzZWQgb24gdGhlIGBkZXBlbmRlbmN5LWdyb3Vwc2AgcGFja2FnZSBieSBbQCYjODIwMztzaXJvc2VuXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vc2lyb3NlbikgaW4gWyMmIzgyMDM7MTA2NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA2NSkKLSBBZGQgdGhlIGBwYWNrYWdpbmcuZGlyZWN0X3VybGAgbW9kdWxlIGJ5IFtAJiM4MjAzO3NiaWRvdWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9zYmlkb3VsKSBpbiBbIyYjODIwMzs5NDRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk0NCkKLSBBZGQgdGhlIGBwYWNrYWdpbmcuZXJyb3JzYCBtb2R1bGUgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA3MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA3MSkKLSBBZGQgYFNwZWNpZmllclNldC5pc191bnNhdGlzZmlhYmxlYCB1c2luZyByYW5nZXMgKG5ldyBpbnRlcm5hbHMgdGhhdCB3aWxsIGJlIGV4cGFuZGVkIGluIGZ1dHVyZSB2ZXJzaW9ucykgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTE5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTE5KQotIEFkZCBgY3JlYXRlX2NvbXBhdGlibGVfdGFnc19zZWxlY3RvcmAgdG8gc2VsZWN0IGNvbXBhdGlibGUgdGFncyBieSBbQCYjODIwMztzYmlkb3VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vc2JpZG91bCkgaW4gWyMmIzgyMDM7MTExMF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTExMCkKLSBBZGQgYSBga2V5YCBhcmd1bWVudCB0byBgU3BlY2lmaWVyU2V0LmZpbHRlcigpYCBieSBbQCYjODIwMztmcm9zdG1pbmddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9mcm9zdG1pbmcpIGluIFsjJiM4MjAzOzEwNjhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNjgpCi0gU3VwcG9ydCBgJmAgYW5kIGB8YCBmb3IgYE1hcmtlcmAncyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTQ2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTQ2KQotIE5vcm1hbGl6ZSBgVmVyc2lvbi5fX3JlcGxhY2VfX2AgYW5kIGFkZCBgVmVyc2lvbi5mcm9tX3BhcnRzYCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDc4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDc4KQotIEFkZCBhbiBvcHRpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0YWcgc2V0IHNvcnQgb3JkZXIgaW4gYHBhcnNlX3doZWVsX2ZpbGVuYW1lYCBieSBbQCYjODIwMztyMjY2LXRlY2hdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9yMjY2LXRlY2gpIGluIFsjJiM4MjAzOzExNTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExNTApCgpCZWhhdmlvciBhZGFwdGF0aW9uczoKCi0gTmFycm93IGV4Y2x1c2lvbiBvZiBwcmUtcmVsZWFzZXMgZm9yIGA8Vi5wb3N0TmAgdG8gbWF0Y2ggc3BlYyBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExNDBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExNDApCi0gTmFycm93IGV4Y2x1c2lvbiBvZiBwb3N0LXJlbGVhc2VzIGZvciBgPlZgIHRvIG1hdGNoIHNwZWMgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTQxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTQxKQotIFJlbmFtZSBgZm9ybWF0X2Z1bGxfdmVyc2lvbmAgdG8gYF9mb3JtYXRfZnVsbF92ZXJzaW9uYCB0byBtYWtlIGl0IHZpc2libHkgcHJpdmF0ZSBieSBbQCYjODIwMztyMjY2LXRlY2hdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9yMjY2LXRlY2gpIGluIFsjJiM4MjAzOzExMjVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMjUpCi0gUmVzdHJpY3QgbG9jYWwgdmVyc2lvbiB0byBBU0NJSSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTAyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTAyKQoKUHlsb2NrIChQRVAgNzUxKSB1cGRhdGVzOgoKLSBBZGQgcHlsb2NrIGBzZWxlY3RgIGZ1bmN0aW9uIGJ5IFtAJiM4MjAzO3NiaWRvdWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9zYmlkb3VsKSBpbiBbIyYjODIwMzsxMDkyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDkyKQotIERvY3VtZW50IHB5bG9jayBgc2VsZWN0KClgIG1ldGhvZCBhbmQgYFB5bG9ja1NlbGVjdEVycm9yYCBieSBbQCYjODIwMztyMjY2LXRlY2hdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9yMjY2LXRlY2gpIGluIFsjJiM4MjAzOzExNTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExNTMpCi0gQWRkIGBmaWxlbmFtZWAgcHJvcGVydHkgdG8gYFBhY2thZ2VTZGlzdGAgYW5kIGBQYWNrYWdlV2hlZWxgLCBtb3JlIHZhbGlkYXRpb24gYnkgW0AmIzgyMDM7c2JpZG91bF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3NiaWRvdWwpIGluIFsjJiM4MjAzOzEwOTVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwOTUpCi0gR2l2ZSBwcmVmZXJlbmNlIHRvIHBhdGggb3ZlciB1cmwgYnkgW0AmIzgyMDM7c2JpZG91bF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3NiaWRvdWwpIGluIFsjJiM4MjAzOzExMjhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMjgpCi0gVmFsaWRhdGUgbmFtZS92ZXJzaW9uIGNvbnNpc3RlbmN5IGluIGZpbGUgbmFtZXMgYnkgW0AmIzgyMDM7c2JpZG91bF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3NiaWRvdWwpIGluIFsjJiM4MjAzOzExMTRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMTQpCgpGaXhlczoKCi0gRml4IGA+YCBjb21wYXJpc29uIGZvciB2ZXJzaW9ucyB3aXRoIGRlditsb2NhbCBzZWdtZW50cyBieSBbQCYjODIwMzt2ZWVjZWV5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vdmVlY2VleSkgaW4gWyMmIzgyMDM7MTA5N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5NykKLSBGaXggaW5jb3JyZWN0IHNlbGYtY29tcGFyaXNvbiBmb3IgYEluZmluaXR5VHlwZWAgYW5kIGBOZWdhdGl2ZUluZmluaXR5VHlwZWAgYnkgW0AmIzgyMDM7YnlzaWJlcl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2J5c2liZXIpIGluIFsjJiM4MjAzOzEwOTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwOTMpCi0gQ2Fub25pY2FsaXplIHdoZW4gZGVkdXBsaWNhdGluZyBzcGVjaWZpZXJzIGluIGBTcGVjaWZpZXJTZXRgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTEwOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTEwOSkKLSBGaXggY2hhcnNldCBlcnJvciBtZXNzYWdlIGZvcm1hdHRpbmcgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTIxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTIxKQotIEhhbmRsZSB0aGUgYGtleWAgcGFyYW1ldGVyIGluIGBTcGVjaWZpZXJTZXQuZmlsdGVyYCB3aGVuIHNwZWNpZmllcnMgYXJlIGVtcHR5IGFuZCBwcmVyZWxlYXNlIGlzIGBGYWxzZWAgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMDk2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDk2KQotIFN0YW5kYXJkaXplIGlubmVyIGNvbXBvbmVudHMgb2YgYHJlcHJgIG91dHB1dCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDkwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDkwKQotIGBTcGVjaWZpZXJgJ3MgYD09PWAgdXNlcyBvcmlnaW5hbCBzdHJpbmcsIG5vdCBub3JtYWxpemVkLCB3aGVuIGF2YWlsYWJsZSBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMjRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMjQpCi0gUHJvcGFnYXRlIGludC1tYXgtc3RyLWRpZ2l0cyBgVmFsdWVFcnJvcmAgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMTU1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTU1KQoKUGVyZm9ybWFuY2U6CgotIEFkZCBmYXN0IHBhdGggZm9yIHBhcnNpbmcgc2ltcGxlIHZlcnNpb25zIChkaWdpdHMgYW5kIGRvdHMgb25seSkgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMDgyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDgyKQotIEFkZCBmYXN0IHBhdGggZm9yIGBWZXJzaW9uYCB0byBgVmVyc2lvbmAgY29tcGFyaXNvbiBieSBza2lwcGluZyBgX2tleWAgcHJvcGVydHkgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMDgzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDgzKQotIENhY2hlIGBWZXJzaW9uYCBoYXNoIHZhbHVlIGluIGRlZGljYXRlZCBzbG90IGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTExOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTExOCkKLSBPdmVyaGF1bCBgX2NtcGtleWAgdG8gcmVtb3ZlIHVzZSBvZiBjdXN0b20gb2JqZWN0cyBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMTZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMTYpCi0gU2tpcCBgX19yZXBsYWNlX19gIGluIFNwZWNpZmllciBjb21wYXJpc29uIGlmIG5vdCBuZWVkZWQgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMDgxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDgxKQotIGBTcGVjaWZpZXJTZXRgIHVzZSBgdHVwbGVgIGluc3RlYWQgb2YgYGZyb3plbnNldGAgZm9yIGBfc3BlY3NgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTEwOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTEwOCkKLSBTcGVlZCB1cCBjb21wbGV4IGBTcGVjaWZpZXJTZXRgIGZpbHRlcmluZyBieSBpbXBsZW1lbnRpbmcgY29zdC1iYXNlZCBvcmRlcmluZyBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMDVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMDUpCi0gU3BlZWQgdXAgd2lsZGNhcmQgY29tcGFyaXNvbiBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMTEpCi0gU3RyZWFtIFBFUDQ0MCBmaWx0ZXJpbmcgaW4gYFNwZWNpZmllclNldC5maWx0ZXJgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTA3Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA3NikKLSBBZGQgYF9fc2xvdHNfX2AgdG8gYE1hcmtlcmAgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTE0N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTE0NykKLSBTaW1wbHkgYFNwZWNpZmllcmAgcmVnZXggYnkgW0AmIzgyMDM7c2lyb3Nlbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3Npcm9zZW4pIGluIFsjJiM4MjAzOzExMDZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMDYpCi0gU2tpcCB1c2luZyB0aGUgaGFzaCBwcm9wZXJ0eSBpbnRlcm5hbGx5IGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTExNV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTExNSkKCkludGVybmFsOgoKLSBBZGQgZG93bnN0cmVhbSB0ZXN0aW5nIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNDldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNDkpCi0gQmVuY2htYXJraW5nIHN1aXRlIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNTkpCi0gQmVuY2htYXJrIHZhcmlhbmNlIHJlZHVjdGlvbiBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMDddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMDcpCi0gQWRkIHByb3BlcnR5LWJhc2VkIHRlc3RzIGZvciBQRVAgNDQwIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTE0NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTE0NCkKLSBDbGVhbiB1cCBhIGZldyBgY29sbGVjdGlvbnMubmFtZWR0dXBsZWAgaW4gdGVzdHMgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA3MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA3MCkKLSBEbyBub3QgcmVsb2FkIHRoZSB0YWdzIG1vZHVsZSBpbiB0ZXN0cyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTUyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTUyKQotIExpbWl0IGBkaXIoKWAgLyB0YWItY29tcGxldGlvbiBpbiBSRVBMIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMTEpCi0gQWRkIG1vcmUgYF9fYWxsX19gL2BfX2Rpcl9fYCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDY5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDY5KQotIENsZWFudXAgcHJlLWNvbW1pdCBhIGJpdCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDgwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDgwKQotIFBpbiBwcmUtY29tbWl0IGZpbGUsIHVzZSBkZXBlbmRhYm90IGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzExMzNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMzMpCi0gUmVtb3ZlIHNwaGlueC10b29sYm94IGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzExMzVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMzUpCi0gVXNlIGRvY3MgZ3JvdXAsIGZhc3RlciByZWFkdGhlZG9jcyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDYxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDYxKQotIEFkZCBmcmVlLXRocmVhZGVkIFB5dGhvbiB0byBDSSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDk4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDk4KQotIFNpbXBsaWZ5IGNvbWJpbmluZyBgU3BlY2lmaWVyU2V0LnByZXJlbGVhc2VzYCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzEwNzNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNzMpCi0gVXNlIGRpcmVjdCBvcGVyYXRvciBtZXRob2RzIGluIGBfY29tcGFyZV9jb21wYXRpYmxlYCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzExMDBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMDApCi0gUmVtb3ZlIHVubmVjZXNzYXJ5IGlmIHN0YXRlbWVudCBpbiBgU3BlY2lmaWVyLnByZXJlbGVhc2VzYCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzEwNzRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNzQpCi0gUmVtb3ZlIHVubmVlZGVkIG5lc3RpbmcgaW4gYFNwZWNpZmllci5wcmVyZWxlYXNlc2AgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzsxMDcyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDcyKQoKRG9jdW1lbnRhdGlvbjoKCi0gRml4IGRvY3VtZW50YXRpb246IGdyYW1tYXIsIHR5cG9zLCBmb3JtYXR0aW5nLCBhbmQgb3V0ZGF0ZWQgcmVmZXJlbmNlcyBieSBbQCYjODIwMztEaW1pdHJpUGFwYWRvcG91bG9zXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vRGltaXRyaVBhcGFkb3BvdWxvcykgaW4gWyMmIzgyMDM7MTA4NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA4NCkKLSBGaXggdmVyc2lvbmFkZGVkIGZvciBgVmVyc2lvbi5mcm9tX3BhcnRzKClgIGJ5IFtAJiM4MjAzO0phY2tlbm1lbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL0phY2tlbm1lbikgaW4gWyMmIzgyMDM7MTEzNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTEzNCkKLSBEb2N1bWVudCBgJmAgYW5kIGB8YCBvcGVyYXRvcnMgZm9yIGNvbWJpbmluZyBgTWFya2VyYCBvYmplY3RzIGJ5IFtAJiM4MjAzO3IyNjYtdGVjaF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3IyNjYtdGVjaCkgaW4gWyMmIzgyMDM7MTE1MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTE1MSkKLSBFeHBhbmQgYW5kIGNsZWFuIHVwIGBWZXJzaW9uYCBkb2N1bWVudGF0aW9uIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwODldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwODkpCi0gTW92ZSBsaWNlbnNlIGRvY3MgaW5saW5lIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzExMzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMzEpCi0gTW92ZSBtYXJrZXJzIGlubGluZSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTA0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTA0KQotIE1vdmUgdGFncyBkb2NzIHRvIGlubGluZSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMTMwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMTMwKQotIE1vdmUgdXRpbGl0aWVzIGlubGluZSwgbGlrZSBvdGhlciBtb2R1bGVzIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzExMDNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMDMpCgojIyMjIEJlbmNobWFya3MKClBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBzaW5jZSAyNi4wLCBmcm9tIHRoZSBuZXcgaW50ZWdyYXRlZCBiZW5jaG1hcmsgc3VpdGU6CgpgYGAKdXYgcnVuIGFzdiBydW4gMjYuMC4uSEVBRApgYGAKCjxpbWcgd2lkdGg9IjkwOCIgaGVpZ2h0PSI5NjUiIGFsdD0iU2NyZWVuc2hvdCAyMDI2LTA0LTEzIGF0IDExIDMyIDE04oCvUE0iIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzNiZjYzNTY5LWRiYmYtNGYzNC05NjYwLWVkZTNjZWYxNzQ1ZCIgLz4KCjxpbWcgd2lkdGg9IjkwOCIgaGVpZ2h0PSI0NzkiIGFsdD0iU2NyZWVuc2hvdCAyMDI2LTA0LTEzIGF0IDExIDMyIDQz4oCvUE0iIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2Y3OTA2ODAwLWY2ZDktNGFmNi1hM2YzLTM2OWI2NTRiNzNlMyIgLz4KCiMjIyMgTmV3IENvbnRyaWJ1dG9ycwoKLSBbQCYjODIwMzt2ZWVjZWV5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vdmVlY2VleSkgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7MTA5N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5NykKLSBbQCYjODIwMztieXNpYmVyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYnlzaWJlcikgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7MTA5M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA5MykKLSBbQCYjODIwMztzaXJvc2VuXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vc2lyb3NlbikgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7MTEwNl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTEwNikKLSBbQCYjODIwMztKYWNrZW5tZW5dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9KYWNrZW5tZW4pIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzExMzRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzExMzQpCi0gW0AmIzgyMDM7bmdvbGRiYXVtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbmdvbGRiYXVtKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzsxMDk5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDk5KQotIFtAJiM4MjAzO3IyNjYtdGVjaF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3IyNjYtdGVjaCkgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7MTE1MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTE1MSkKLSBbQCYjODIwMztob29kbWFuZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hvb2RtYW5lKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzs4MDRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzgwNCkKCioqRnVsbCBDaGFuZ2Vsb2cqKjogPGh0dHBzOi8vZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9jb21wYXJlLzI2LjAuLi4yNi4xPgoKIyMjIFtgdjI2LjBgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcmVsZWFzZXMvdGFnLzI2LjApCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9jb21wYXJlLzI1LjAuLi4yNi4wKQoKUmVhZCBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGhlcmU6IDxodHRwczovL2lzY2ludW1weS5kZXYvcG9zdC9wYWNrYWdpbmctZmFzdGVyPi4KCiMjIyMgV2hhdCdzIENoYW5nZWQKCkZlYXR1cmVzOgoKLSBQRVAgNzUxOiBzdXBwb3J0IHB5bG9jayBieSBbQCYjODIwMztzYmlkb3VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vc2JpZG91bCkgaW4gWyMmIzgyMDM7OTAwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MDApCi0gUEVQIDc5NDogaW1wb3J0IG5hbWUgbWV0YWRhdGEgYnkgW0AmIzgyMDM7YnJldHRjYW5ub25dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9icmV0dGNhbm5vbikgaW4gWyMmIzgyMDM7OTQ4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NDgpCi0gU3VwcG9ydCB3cml0aW5nIG1ldGFkYXRhIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzg0Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvODQ2KQotIFN1cHBvcnQgYF9fcmVwbGFjZV9fYCBmb3IgYFZlcnNpb25gIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMDNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMDMpCi0gU3VwcG9ydCBwb3NpdGlvbmFsIHBhdHRlcm4gbWF0Y2hpbmcgZm9yIGBWZXJzaW9uYCBhbmQgYFNwZWNpZmllcmAgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAwNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAwNCkKCkJlaGF2aW9yIGFkYXB0YXRpb25zOgoKLSBQRVAgNDQwIGhhbmRsaW5nIG9mIHByZXJlbGVhc2VzIGZvciBgU3BlY2lmaWVyLmNvbnRhaW5zYCwgYFNwZWNpZmllclNldC5jb250YWluc2AsIGFuZCBgU3BlY2lmaWVyU2V0LmZpbHRlcmAgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzs4OTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzg5NykKLSBIYW5kbGUgUEVQIDQ0MCBlZGdlIGNhc2UgaW4gYFNwZWNpZmllclNldC5maWx0ZXJgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7OTQyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NDIpCi0gQWRqdXN0IGFyYml0cmFyeSBlcXVhbGl0eSBpbnRlcnNlY3Rpb24gcHJlc2VydmF0aW9uIGluIGBTcGVjaWZpZXJTZXRgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7OTUxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NTEpCi0gUmV0dXJuIGBGYWxzZWAgaW5zdGVhZCBvZiByYWlzaW5nIGZvciBgLmNvbnRhaW5zYCB3aXRoIGludmFsaWQgdmVyc2lvbiBieSBbQCYjODIwMztMaWFtLURlVm9lXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vTGlhbS1EZVZvZSkgaW4gWyMmIzgyMDM7OTMyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MzIpCi0gU3VwcG9ydCBhcmJpdHJhcnkgZXF1YWxpdHkgb24gYXJiaXRyYXJ5IHN0cmluZ3MgZm9yIGBTcGVjaWZpZXJgIGFuZCBgU3BlY2lmaWVyU2V0YCdzIGBmaWx0ZXJgIGFuZCBgY29udGFpbnNgIG1ldGhvZC4gYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzs5NTRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk1NCkKLSBPbmx5IHRyeSB0byBwYXJzZSBhcyBgVmVyc2lvbmAgb24gY2VydGFpbiBtYXJrZXIga2V5cywgcmV0dXJuIGBGYWxzZWAgb24gdW5lcXVhbCBvcmRlcmVkIGNvbXBhcnNpb25zIGJ5IFtAJiM4MjAzO0pQLUVsbGlzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vSlAtRWxsaXMpIGluIFsjJiM4MjAzOzkzOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTM5KQoKRml4ZXM6CgotIFVwZGF0ZSBgX2hhc2hgIHdoZW4gdW5waWNrbGluZyBgVGFnKClgIGJ5IFtAJiM4MjAzO2Rob2x0aF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2Rob2x0aCkgaW4gWyMmIzgyMDM7ODYwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84NjApCi0gQ29ycmVjdCBjb21tZW50IGFuZCBzaW1wbGlmeSBpbXBsaWNpdCBwcmVyZWxlYXNlIGhhbmRsaW5nIGluIGBTcGVjaWZpZXIucHJlcmVsZWFzZXNgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7ODk2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84OTYpCi0gVXNlIGV4cGxpY2l0IGBfR0xpYkNWZXJzaW9uYCBgTmFtZWRUdXBsZWAgaW4gYF9tYW55bGludXhgIGJ5IFtAJiM4MjAzO2N0aG95dF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2N0aG95dCkgaW4gWyMmIzgyMDM7ODY4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84NjgpCi0gRGV0ZWN0IGludmFsaWQgbGljZW5zZSBleHByZXNzaW9ucyBjb250YWluaW5nIGAoKWAgYnkgW0AmIzgyMDM7Yndvb2RzZW5kXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYndvb2RzZW5kKSBpbiBbIyYjODIwMzs4NzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzg3OSkKLSBDb3JyZWN0IHJlZ2V4IGZvciBtZXRhZGF0YSBgJ25hbWUnYCBmb3JtYXQgYnkgW0AmIzgyMDM7ZGldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9kaSkgaW4gWyMmIzgyMDM7OTI1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MjUpCi0gSW1wcm92ZSB0aGUgbWVzc2FnZSBhcm91bmQgZXhwZWN0aW5nIGEgc2VtaWNvbG9uIGJ5IFtAJiM4MjAzO3ByYWR5dW5zZ10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3ByYWR5dW5zZykgaW4gWyMmIzgyMDM7ODMzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84MzMpCi0gU3VwcG9ydCBuZXN0ZWQgcGFyZW5zIGluIGxpY2Vuc2UgZXhwcmVzc2lvbnMgYnkgW0AmIzgyMDM7TGlhbS1EZVZvZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL0xpYW0tRGVWb2UpIGluIFsjJiM4MjAzOzkzMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTMxKQotIEFkZCBzcGFjZSBiZWZvcmUgYXQgc3ltYm9sIGluIGBSZXF1aXJlbWVudHNgIHN0cmluZyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk1MykKLSBBIHJvb3QgbG9nZ2VyIHVzZSBmb3VuZCBieSBydWZmIExPRywgdXNlIGBwYWNrYWdpbmdgIGxvZ2dlciBpbnN0ZWFkIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk2NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTY1KQotIEJldHRlciBzdXBwb3J0IGZvciBzdWJjbGFzc2luZyBgTWFya2VyYCBhbmQgYFJlcXVpcmVtZW50YCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDIyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDIyKQotIE5vcm1hbGl6ZSBhbGwgZXh0cmFzLCBub3QganVzdCBpZiBpdCBjb21lcyBmaXJzdCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDI0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDI0KQotIERvbid0IHByb2R1Y2UgYSBicm9rZW4gcmVwciBpZiBgTWFya2VyYCBmYWlscyB0byBjb25zdHJ1Y3QgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAzM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAzMykKClBlcmZvcm1hbmNlOgoKLSBBdm9pZCByZWNvbXBpbGluZyByZWdleGVzIGluIHRoZSB0b2tlbml6ZXIgZm9yIGEgM3ggc3BlZWR1cCBieSBbQCYjODIwMztoYXVudHNhbmluamFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oYXVudHNhbmluamEpIGluIFsjJiM4MjAzOzEwMTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMTkpCi0gSW1wcm92ZSBwZXJmb3JtYW5jZSBpbiBgX21hbnlsaW51eC5weWAgYnkgW0AmIzgyMDM7Y3Rob3l0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vY3Rob3l0KSBpbiBbIyYjODIwMzs4NjldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzg2OSkKLSBNaW5vciBjbGVhbnVwcyB0byBgVmVyc2lvbmAgYnkgW0AmIzgyMDM7YmVhcm9tb3JwaGlzbV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2JlYXJvbW9ycGhpc20pIGluIFsjJiM4MjAzOzkxM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTEzKQotIFNraXAgcmVkdW5kYW50IGNyZWF0aW9uIG9mIGBWZXJzaW9uYHMgaW4gc3BlY2lmaWVyIGNvbXBhcmlzb24gYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzs5ODZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk4NikKLSBDYWNoZSBgU3BlY2lmaWVyYCdzIFZlcnNpb24gYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzs5ODVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk4NSkKLSBNYWtlIGBWZXJzaW9uYCBhIGxpdHRsZSBmYXN0ZXIgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTg3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85ODcpCi0gTWlub3IgYFZlcnNpb25gIHJlZ2V4IGNsZWFudXAgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTkwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85OTApCi0gRmFzdGVyIHJlZ2V4IG9uIFB5dGhvbiAzLjExLjUrIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk4OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTg4KSBhbmQgWyMmIzgyMDM7MTA1NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA1NSkKLSBMYXppbHkgY2FsY3VsYXRlIGBfa2V5YCBpbiBgVmVyc2lvbmAgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzs5ODldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk4OSkgYW5kIHJlZ3Jlc3Npb24gZm9yIGBwYWNrYWdpbmdfbGVnYWN5YCBmaXhlZCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDQ4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDQ4KQotIEZhc3RlciBgY2Fub25pY2FsaXplX3ZlcnNpb25gIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk5M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTkzKQotIFVzZSBgZnVsbG1hdGNoYCBpbiBhIGNvdXBsZSBtb3JlIHBsYWNlcyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5OTJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk5MikKLSBVc2UgYGZ1bGxtYXRjaGAgZm9yIG1hcmtlcnMgdG9vIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMjldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMjkpCi0gVXNlIGBtYXBgIGluc3RlYWQgb2YgZ2VuZXJhdG9yIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk5Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTk2KQotIERlcHJlY2F0ZSBgLl92ZXJzaW9uYCAoYF9WZXJzaW9uYCwgYSBgTmFtZWRUdXBsZWApIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk5NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTk1KSBhbmQgWyMmIzgyMDM7MTA2Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA2MikKLSBBdm9pZCBkdXBsaWNhdGUgYFZlcnNpb25gIGNyZWF0aW9uIGluIGBjYW5vbmljYWxpemVfdmVyc2lvbmAgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTk0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85OTQpCi0gQWRkIGBfX3Nsb3RzX19gIHRvIGBWZXJzaW9uYCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDAxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDAxKQotIEFkZCBgX19zbG90c19fYCB0byBgU3BlY2lmaWVyYHMgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAwMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAwMikKLSBBZGQgYF9fc2xvdHNfX2AgdG8gYE5vZGVgcyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDMyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDMyKQotIFVzZSBgdmVyc2lvbi5fX3JlcGxhY2VfX2AgaW4gc3BlY2lmaWVyIGNvbXBhcmlzb24gYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzs5OTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk5OSkKLSBVc2UgYF9nZXRfc3BlY192ZXJzaW9uYCBpbiBtb3JlIHBsYWNlcyBpbiBgU3BlY2lmaWVyYCBieSBbQCYjODIwMztub3RhdGFsbHNoYXddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9ub3RhdGFsbHNoYXcpIGluIFsjJiM4MjAzOzEwMDVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMDUpCi0gUHVsbCBgc2V0YCBjb25zdHJ1Y3Rpb24gb3V0IG9mIGZ1bmN0aW9uIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMTJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMTIpCi0gTGV0dGVyIG5vcm1hbGl6YXRpb24gZGljdCBmb3IgcHJlcmVsZWFzZXMgYW5kIHRoZSBsaWtlIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMTRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMTQpCi0gQXZvaWQgbm9ybWFsaXppbmcgZXh0cmFzIGFnYWluIHdoZW4gY29tcGFyaW5nIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMjhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMjgpCi0gU3BlZWQgdXAgYFZlcnNpb24uX19zdHJfX2AgYnkgYWJvdXQgMTAlIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk5N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTk3KQotIEluY3JlYXNlIHRoZSBwZXJmb3JtYW5jZSBvZiBgY2Fub25pY2FsaXplX25hbWVgIGJ5IGF2b2lkaW5nIGEgcmVnZXggYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAzMF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAzMCksIFsjJiM4MjAzOzEwNDddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNDcpLCBhbmQgWyMmIzgyMDM7MTA2NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA2NCkKLSBGYXN0ZXIgemVybyBzdHJpcHBpbmcgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA1OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA1OCkKClR5cGUgYW5ub3RhdGlvbnM6CgotIEZpeCBhIHR5cGUgYW5ub3RhdGlvbiBieSBbQCYjODIwMzticmV0dGNhbm5vbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2JyZXR0Y2Fubm9uKSBpbiBbIyYjODIwMzs5MDddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkwNykKLSBGaXggdGFncyByZXR1cm4gdHlwZSBpbiBgcGFyc2Vfd2hlZWxfZmlsZW5hbWVgIGRvY3MgYnkgW0AmIzgyMDM7bmNvZ2hsYW5dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9uY29naGxhbikgaW4gWyMmIzgyMDM7OTczXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NzMpCi0gQWRkIHR5cGUgaGludCBmb3IgYF92ZXJzaW9uYCBpbiBgLnZlcnNpb24uVmVyc2lvbmAgYnkgW0AmIzgyMDM7YnJldHRjYW5ub25dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9icmV0dGNhbm5vbikgaW4gWyMmIzgyMDM7OTI3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MjcpCi0gQ2hhbmdlZCBzdGF0aWMgdHlwZSBhbm5vdGF0aW9ucyBpbiBwcmVyZWxlYXNlcyBzZXR0ZXIgbWV0aG9kIGluIGBzcGVjaWZpZXIucHlgIGJ5IFtAJiM4MjAzO3N1Ymhhaml0c2FoYTAxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vc3ViaGFqaXRzYWhhMDEpIGluIFsjJiM4MjAzOzkzMF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTMwKQotIFN0YXRpY2FsbHkgdHlwZSB0aGUgdGVzdHMgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTgyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85ODIpCgpJbnRlcm5hbDoKCi0gVGVzdCBhbmQgZGVjbGFyZSBzdXBwb3J0IFB5dGhvbiAzLjE0IGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzkwMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTAxKQotIE1vZGVybml6ZSBhbmQgc3BlZWQgdXAgdGVzdHMgb24gUHl0aG9uIDMuMTQgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTAzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MDMpCi0gQ2hhbmdlIG91ciBsaWNlbnNlIG1ldGFkYXRhIHRvIHVzZSBhbiBTUERYIGxpY2Vuc2UgZXhwcmVzc2lvbiBieSBbQCYjODIwMztjZGNlOHBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9jZGNlOHApIGluIFsjJiM4MjAzOzg4MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvODgxKQotIE5vIG5lZWQgZm9yIGBsaWNlbnNlLWZpbGVzYCBieSBbQCYjODIwMztEaW1pdHJpUGFwYWRvcG91bG9zXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vRGltaXRyaVBhcGFkb3BvdWxvcykgaW4gWyMmIzgyMDM7OTI0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MjQpCi0gVXBkYXRlIG15cHkgYnkgW0AmIzgyMDM7aGF1bnRzYW5pbmphXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGF1bnRzYW5pbmphKSBpbiBbIyYjODIwMzs4OTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzg5MSkKLSBTb21lIGNvbmZpZyB1cGRhdGVzIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzkwMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTAyKQotIEFkZCBzcGVsbCBjaGVjayBhbmQgcnN0IGNoZWNrIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzkwNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTA0KQotIENsZWFuIHVwIHJ1ZmYgaWdub3JlcyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5MDVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkwNSkKLSBVcGRhdGUgZXhhbXBsZSBmb3IgZW52IG1hcmtlciBgcHl0aG9uX3ZlcnNpb25gIGJ5IFtAJiM4MjAzO3RyaW0yMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3RyaW0yMSkgaW4gWyMmIzgyMDM7OTA4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MDgpCi0gTW92ZSBjb2Rlc3BlbGwgY29uZmlndXJhdGlvbiBpbnRvIHB5cHJvamVjdC50b21sIGJ5IFtAJiM4MjAzO3lhcmlrb3B0aWNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS95YXJpa29wdGljKSBpbiBbIyYjODIwMzs5MTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkxMCkKLSBDaGVjayB3YXJuaW5nIGEgbGl0dGxlIG1vcmUgcHJlY2lzZWx5IGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzgzN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvODM3KQotIFNwZWVkIHVwIG15cHkgYSBsaXR0bGUgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7ODM2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84MzYpCi0gQXBwbHkgcnVmZi9mbGFrZTgtcHlpIHJ1bGVzIChQWUkpIGJ5IFtAJiM4MjAzO0RpbWl0cmlQYXBhZG9wb3Vsb3NdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9EaW1pdHJpUGFwYWRvcG91bG9zKSBpbiBbIyYjODIwMzs4MzVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzgzNSkKLSBCZXR0ZXIgbG9jYWwgcnVucyBmb3IgY29kZXNwZWxsIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzkxMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTExKQotIFJlbW92ZSBvdXRkYXRlZC9jb25mdXNpbmcgR2lzdCBsaW5rIGJ5IFtAJiM4MjAzO3N0ZWZhbjY0MTk4NDZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9zdGVmYW42NDE5ODQ2KSBpbiBbIyYjODIwMzs5MjFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkyMSkKLSBGaXggZG9jcyBhbmQgZG9jcyBjaSBhZnRlciBbIyYjODIwMzs4OTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9pc3N1ZXMvODk3KSBsYW5kZWQgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzs5MjZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkyNikKLSBSdW4gdHdpbmUtY2hlY2sgb24gcHVzaCBpbiBDSSBieSBbQCYjODIwMztFcGljV2lua10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL0VwaWNXaW5rKSBpbiBbIyYjODIwMzs5MjJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkyMikKLSBgcnVmZmAgd2FzIHJlbmFtZWQgYHJ1ZmYtY2hlY2tgIGluIHByZS1jb21taXQgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTMzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MzMpCi0gRml4IGluY29ycmVjdGx5IGltcGxpY2l0bHkgY29uY2F0ZW5hdGVkIHN0cmluZyBpbiBzcGVjaWZpZXJzIHRlc3QgYnkgW0AmIzgyMDM7bm90YXRhbGxzaGF3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbm90YXRhbGxzaGF3KSBpbiBbIyYjODIwMzs5NDZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk0NikKLSBTaW1wbGlmeSBjb25kaXRpb25hbCBieSBbQCYjODIwMztvZmVrXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vb2ZlaykgaW4gWyMmIzgyMDM7OTQ5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NDkpCi0gTW9kZXJuaXplIG5veCwgdXNlIGRlcGVuZGVuY3ktZ3JvdXBzIGZvciB0ZXN0cyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NTJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk1MikKLSBBZGQgbW9yZSBjaGVja3MgdGhhdCBkb24ndCBhZmZlY3QgYW55dGhpbmcgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTU3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NTcpCi0gRW5hYmxlIFJ1ZmYgSVNDIHJ1bGUgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTU5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NTkpCi0gUnVmZiBjb2RlIEZMWSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NjNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk2MykKLSBweXRlc3QgYGxvZ19sZXZlbGAgaXMgYmV0dGVyIHRoYW4gYGxvZ19jbGlfbGV2ZWxgIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk1Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTU2KQotIFJ1ZmYgY29kZSBUUlkgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTYxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NjEpCi0gQWRkIHRoZSBydWZmIFBMIGNoZWNrcyBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NjRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk2NCkKLSBFbmFibGUgUnVmZiBBUkcgcnVsZXMgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTU4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NTgpCi0gUnVmZiBQVCBjb2RlIChweXRlc3QpIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk2MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTYwKQotIEFkZCBydWZmIERUWiBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NjhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk2OCkKLSBBZGQgcnVmZiBCTEUgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTY3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NjcpCi0gQWRkIHRoZSBydWZmIFNJTSBjaGVja3MgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTY2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NjYpCi0gQWRkaW5nIHJ1ZmYgUEVSRiBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5NjldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk2OSkKLSBNb3ZlIHNvbWUgY29uZmlnIGludG8gY292ZXJhZ2UgY29uZmlnIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk3MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTcxKQotIENoZWNrIHJ1ZmYgQzQgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTYyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NjIpCi0gQWRkaW5nIHJ1ZmYgVDIwIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk3Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTcyKQotIEFkZCBhIHRlc3RzIHBhc3Mgam9iIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk3N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTc3KQotIEFkZCBydWZmIFRDIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk4MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTgwKQotIEFkZGluZyBwYXJ0IG9mIHJ1ZmYgUkVUIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzk3OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTc5KQotIFJlb3JkZXIgbXlweSBjaGVjayBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzs5ODNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk4MykKLSBFbmFibGUgcnVmZiBBTEwgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTg0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85ODQpCi0gTGluayBiYWNrIHRvIHJlcG8vc291cmNlIGluIGZ1cm8gYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7OTkxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85OTEpCi0gQWRkIGNhc2UgaW5zZW5zaXRpdml0eSB0ZXN0cyBmb3IgYXJiaXRyYXJ5IGVxdWFsaXR5IGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7OTc1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85NzUpCi0gU3luY2hyb25pemUgZG9jdW1lbnRhdGlvbiBhbmQgY29kZSBmb3IgbWFya2VycyBieSBbQCYjODIwMzt6YWhsbWFuXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vemFobG1hbikgaW4gWyMmIzgyMDM7MTAwOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAwOCkKLSBVc2UgYHBhcnRpdGlvbmAgaW4gYF9wYXJzZV9wcm9qZWN0X3VybHNgIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMTMpCi0gYXV0by1za2lwIHRoZSBkZXBlbmRhYm90IFBScyBpbiB0aGUgcmVsZWFzZSBjaGFuZ2Vsb2cgZ2VuZXJhdGlvbiBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDE2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDE2KQotIFVwZGF0ZSB1bnJlbGVhc2VkIHNlY3Rpb24gaW4gY2hhbmdlbG9nIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMTcpCi0gRml4IFBSIHJvbGUgdG8gbWF0Y2ggZXh0bGlua3MgYnkgW0AmIzgyMDM7aHVnb3ZrXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaHVnb3ZrKSBpbiBbIyYjODIwMzsxMDIwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDIwKQotIE1lbnRpb24gbmV3IHBhcnRzIGluIFJFQURNRSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDIzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDIzKQotIFJlcGxhY2UgYSBjb3VwbGUgb2YgYXNzZXJ0cyB3aXRoIGVsc2UgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAyN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAyNykKLSBTaW1wbGlmeSBhbmQvb3IgY2hlY2sgYSBsaXR0bGUgbW9yZSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDMxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDMxKQotIFVzZSBzbGltIHJ1bm5lciBmb3IgYWxsIGNoZWNrIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMjFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMjEpCi0gVXNlIHR5cG9zIGluc3RlYWQgb2YgY29kZXNwZWxsIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMTVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMTUpCi0gVXBkYXRlIGNoYW5nZWxvZyB3aXRoIHJlY2VudCBhZGRpdGlvbnMgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAzNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAzNCkKLSBQdWJsaXNoIHRvIFB5UEkgdmlhIEdpdEh1YiBDSSBieSBbQCYjODIwMztFcGljV2lua10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL0VwaWNXaW5rKSBpbiBbIyYjODIwMzs4OTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzg5MykKLSBVc2UgcHJlayBmb3IgZmFzdGVyIHByZS1jb21taXQgbGludCBzdGVwIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMzddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMzcpCi0gQWRkIGhlbHAgdGV4dCB0byBub3hmaWxlIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMzhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMzgpCi0gVXBkYXRlIGxpY2Vuc2VzIHRvIDMuMjcgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTAzNl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAzNikKLSBVc2UgcmVsYXRpdmUgaW1wb3J0IGluIGBwYWNrYWdpbmcubGljZW5zZXNgIGJ5IFtAJiM4MjAzO25vdGF0YWxsc2hhd10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25vdGF0YWxsc2hhdykgaW4gWyMmIzgyMDM7MTAzOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAzOSkKLSBBZGQgeml6bW9yIGFuZCB0aWdodGVuIHVwIENJIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwMzVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwMzUpCi0gRml4IHJlbGVhc2Ugc2NyaXB0IGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNDBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNDApCi0gRml4IHVzaW5nIGEgZGV2IHZlcnNpb24gKGFnYWluKSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDQxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDQxKQotIEZpeCB0eXBlIGhpbnQgb2YgZnVuY3Rpb24gdXNlZCB3aXRoIGBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyYCBieSBbQCYjODIwMztTcGVjTGFkXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vU3BlY0xhZCkgaW4gWyMmIzgyMDM7MTA0Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA0NikKLSBBbHdheXMgcnVuIHRlc3RzIGJ5IFtAJiM4MjAzO2hlbnJ5aWlpXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vaGVucnlpaWkpIGluIFsjJiM4MjAzOzEwNDRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNDQpCi0gRml4IGEgY2hhbmdlbG9nIG51bWJlciBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDQyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDQyKQotIEZpeCB0aGUgcHVibGlzaCBqb2IgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA0M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA0MykKLSBHZXQgdGhlIGNvcnJlY3QgdGFnIG9uIHB1Ymxpc2ggYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA0NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA0NSkKLSBUZXN0IG9uIGZpcnN0IHB1YmxpYyByZWxlYXNlIG9mIENQeXRob24gMy4xMSBhbmQgbmV3ZXIgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA1Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA1NikKLSBGaXggcHVibGljYXRpb24gam9iIChhZ2FpbikgYnkgW0AmIzgyMDM7aGVucnlpaWldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9oZW5yeWlpaSkgaW4gWyMmIzgyMDM7MTA1MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA1MSkKLSBVc2UgYGFjdGlvbmxpbnRgIHRvIGNoZWNrIENJIHdvcmtmbG93cyBieSBbQCYjODIwMzttaWtldGhlbWFuXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbWlrZXRoZW1hbikgaW4gWyMmIzgyMDM7MTA1Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTA1MikKLSBGaXggZm9ybWF0dGluZyBvZiBkaXN0cmlidXRpb24gdHlwZXMgaW4gbWV0YWRhdGEucnN0IGJ5IFtAJiM4MjAzO2JyZXR0Y2Fubm9uXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYnJldHRjYW5ub24pIGluIFsjJiM4MjAzOzEwNTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzEwNTMpCgojIyMjIE5ldyBDb250cmlidXRvcnMKCi0gW0AmIzgyMDM7Y2RjZThwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vY2RjZThwKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzs4ODFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzg4MSkKLSBbQCYjODIwMztkaG9sdGhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9kaG9sdGgpIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzg2MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvODYwKQotIFtAJiM4MjAzO3RyaW0yMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3RyaW0yMSkgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7OTA4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MDgpCi0gW0AmIzgyMDM7eWFyaWtvcHRpY10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3lhcmlrb3B0aWMpIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzkxMF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTEwKQotIFtAJiM4MjAzO2N0aG95dF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2N0aG95dCkgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7ODY4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC84NjgpCi0gW0AmIzgyMDM7Yndvb2RzZW5kXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYndvb2RzZW5kKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzs4NzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzg3OSkKLSBbQCYjODIwMztzdGVmYW42NDE5ODQ2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vc3RlZmFuNjQxOTg0NikgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7OTIxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC85MjEpCi0gW0AmIzgyMDM7YmVhcm9tb3JwaGlzbV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2JlYXJvbW9ycGhpc20pIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzkxM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTEzKQotIFtAJiM4MjAzO0VwaWNXaW5rXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vRXBpY1dpbmspIG1hZGUgdGhlaXIgZmlyc3QgY29udHJpYnV0aW9uIGluIFsjJiM4MjAzOzkyMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvOTIyKQotIFtAJiM4MjAzO0xpYW0tRGVWb2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9MaWFtLURlVm9lKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzs5MzJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkzMikKLSBbQCYjODIwMztzdWJoYWppdHNhaGEwMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3N1Ymhhaml0c2FoYTAxKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzs5MzBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkzMCkKLSBbQCYjODIwMztuY29naGxhbl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25jb2dobGFuKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzs5NzNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzk3MykKLSBbQCYjODIwMzt6YWhsbWFuXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vemFobG1hbikgbWFkZSB0aGVpciBmaXJzdCBjb250cmlidXRpb24gaW4gWyMmIzgyMDM7MTAwOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL3B1bGwvMTAwOCkKLSBbQCYjODIwMztKUC1FbGxpc10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL0pQLUVsbGlzKSBtYWRlIHRoZWlyIGZpcnN0IGNvbnRyaWJ1dGlvbiBpbiBbIyYjODIwMzs5MzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9weXBhL3BhY2thZ2luZy9wdWxsLzkzOSkKCiMjIyMgU2luY2UgbGFzdCBSQwoKRml4ZXM6CgotIFJlc3RvcmUgYC5fdmVyc2lvbmAgYXMgYSBjb21wYXQgc2hpbSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDYyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDYyKQoKUGVyZm9ybWFuY2U6CgotIER1YWwgcmVwbGFjZSBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDY0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDY0KQoKRG9jdW1lbnRhaXRvbjoKCi0gUHJlcGFyZSBmb3IgMjYuMCBmaW5hbCBieSBbQCYjODIwMztoZW5yeWlpaV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2hlbnJ5aWlpKSBpbiBbIyYjODIwMzsxMDYzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcHlwYS9wYWNrYWdpbmcvcHVsbC8xMDYzKQoKKipGdWxsIENoYW5nZWxvZyoqOiA8aHR0cHM6Ly9naXRodWIuY29tL3B5cGEvcGFja2FnaW5nL2NvbXBhcmUvMjYuMHJjMy4uLjI2LjA+Cgo8L2RldGFpbHM+CgotLS0KCiMjIyBDb25maWd1cmF0aW9uCgrwn5OFICoqU2NoZWR1bGUqKjogKFVUQykKCi0gQnJhbmNoIGNyZWF0aW9uCiAgLSBBdCBhbnkgdGltZSAobm8gc2NoZWR1bGUgZGVmaW5lZCkKLSBBdXRvbWVyZ2UKICAtIEF0IGFueSB0aW1lIChubyBzY2hlZHVsZSBkZWZpbmVkKQoK8J+apiAqKkF1dG9tZXJnZSoqOiBEaXNhYmxlZCBieSBjb25maWcuIFBsZWFzZSBtZXJnZSB0aGlzIG1hbnVhbGx5IG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQuCgrimbsgKipSZWJhc2luZyoqOiBXaGVuZXZlciBQUiBiZWNvbWVzIGNvbmZsaWN0ZWQsIG9yIHlvdSB0aWNrIHRoZSByZWJhc2UvcmV0cnkgY2hlY2tib3guCgrwn5SVICoqSWdub3JlKio6IENsb3NlIHRoaXMgUFIgYW5kIHlvdSB3b24ndCBiZSByZW1pbmRlZCBhYm91dCB0aGlzIHVwZGF0ZSBhZ2Fpbi4KCi0tLQoKIC0gWyBdIDwhLS0gcmViYXNlLWNoZWNrIC0tPklmIHlvdSB3YW50IHRvIHJlYmFzZS9yZXRyeSB0aGlzIFBSLCBjaGVjayB0aGlzIGJveAoKLS0tCgpUaGlzIFBSIHdhcyBnZW5lcmF0ZWQgYnkgW01lbmQgUmVub3ZhdGVdKGh0dHBzOi8vbWVuZC5pby9yZW5vdmF0ZS8pLiBWaWV3IHRoZSBbcmVwb3NpdG9yeSBqb2IgbG9nXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2dpdGh1Yi9vc2lzbS9jbG91ZC1pbi1hLWJveCkuCjwhLS1yZW5vdmF0ZS1kZWJ1ZzpleUpqY21WaGRHVmtTVzVXWlhJaU9pSTBNaTQ0TlM0eElpd2lkWEJrWVhSbFpFbHVWbVZ5SWpvaU5ETXVNVFF4TGpNaUxDSjBZWEpuWlhSQ2NtRnVZMmdpT2lKdFlXbHVJaXdpYkdGaVpXeHpJanBiSW5KbGJtOTJZWFJsSWwxOS0tPgo=
      patchset: 6864e0baaae56c32b8f942078aac513f9e8c9ce4
      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: 8ad17ed1be1f63229e054fab94af45f2511a98ea
          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/yamllint/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: 6269eeefd7d3b218dcddc17aad231df9267b2321
          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
