From 09bee042460daf8039b3b036b7b0bef273b1965e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Robert?= Date: Fri, 24 Jul 2026 15:49:01 +0200 Subject: [PATCH] DEP: allow running python helper scripts with any Python 3.12.x patch version --- .github/workflows/publish.yml | 6 +++--- .github/workflows/publish_pure_python.yml | 2 +- .github/workflows/tox.yml | 4 ++-- tools/load_build_targets.py | 4 ++-- tools/set_env.py | 2 +- tools/tox_matrix.py | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f6e3c018..caaebace 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -127,7 +127,7 @@ jobs: python-version: '3.12' - run: echo $LOAD_BUILD_TARGETS_SCRIPT | base64 --decode > load_build_targets.py env: - LOAD_BUILD_TARGETS_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj09My4xMiIKIyBkZXBlbmRlbmNpZXMgPSBbCiMgICAgICJjbGljaz09OC4yLjEiLAojICAgICAicHl5YW1sPT02LjAuMiIsCiMgXQojIC8vLwppbXBvcnQganNvbgppbXBvcnQgb3MKaW1wb3J0IHJlCgppbXBvcnQgY2xpY2sKaW1wb3J0IHlhbWwKCk1BQ0hJTkVfVFlQRSA9IHsKICAgICJsaW51eCI6ICJ1YnVudHUtbGF0ZXN0IiwKICAgICJtYWNvcyI6ICJtYWNvcy1sYXRlc3QiLAogICAgIndpbmRvd3MiOiAid2luZG93cy1sYXRlc3QiLAogICAgIndpbmRvd3MtYXJtIjogIndpbmRvd3MtMTEtYXJtIiwKfQoKQ0lCV19CVUlMRCA9IG9zLmVudmlyb24uZ2V0KCJDSUJXX0JVSUxEIiwgIioiKQpDSUJXX0FSQ0hTID0gb3MuZW52aXJvbi5nZXQoIkNJQldfQVJDSFMiLCAiYXV0byIpCgoKQGNsaWNrLmNvbW1hbmQoKQpAY2xpY2sub3B0aW9uKCItLXRhcmdldHMiLCBkZWZhdWx0PSIiKQpkZWYgbG9hZF9idWlsZF90YXJnZXRzKHRhcmdldHMpOgogICAgIiIiU2NyaXB0IHRvIGxvYWQgY2lidWlsZHdoZWVsIHRhcmdldHMgZm9yIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93LiIiIgogICAgIyBMb2FkIGxpc3Qgb2YgdGFyZ2V0cwogICAgdGFyZ2V0cyA9IHlhbWwubG9hZCh0YXJnZXRzLCBMb2FkZXI9eWFtbC5CYXNlTG9hZGVyKQogICAgcHJpbnQoanNvbi5kdW1wcyh0YXJnZXRzLCBpbmRlbnQ9MikpCgogICAgIyBDcmVhdGUgbWF0cml4CiAgICBtYXRyaXggPSB7ImluY2x1ZGUiOiBbXX0KICAgIGZvciB0YXJnZXQgaW4gdGFyZ2V0czoKICAgICAgICBtYXRyaXhbImluY2x1ZGUiXS5hcHBlbmQoZ2V0X21hdHJpeF9pdGVtKHRhcmdldCkpCgogICAgIyBPdXRwdXQgbWF0cml4CiAgICBwcmludChqc29uLmR1bXBzKG1hdHJpeCwgaW5kZW50PTIpKQogICAgd2l0aCBvcGVuKG9zLmVudmlyb25bIkdJVEhVQl9PVVRQVVQiXSwgImEiKSBhcyBmOgogICAgICAgIGYud3JpdGUoZiJtYXRyaXg9e2pzb24uZHVtcHMobWF0cml4KX1cbiIpCgoKZGVmIGdldF9vcyh0YXJnZXQpOgogICAgaWYgIm1hY29zIiBpbiB0YXJnZXQ6CiAgICAgICAgcmV0dXJuIE1BQ0hJTkVfVFlQRVsibWFjb3MiXQogICAgaWYgIndpbl9hcm0iIGluIHRhcmdldDoKICAgICAgICByZXR1cm4gTUFDSElORV9UWVBFWyJ3aW5kb3dzLWFybSJdCiAgICBpZiAid2luIiBpbiB0YXJnZXQ6CiAgICAgICAgcmV0dXJuIE1BQ0hJTkVfVFlQRVsid2luZG93cyJdCiAgICByZXR1cm4gTUFDSElORV9UWVBFWyJsaW51eCJdCgoKZGVmIGdldF9jaWJ3X2J1aWxkKHRhcmdldCk6CiAgICBpZiB0YXJnZXQgaW4geyJsaW51eCIsICJtYWNvcyIsICJ3aW5kb3dzIn06CiAgICAgICAgcmV0dXJuIENJQldfQlVJTEQKICAgIHJldHVybiB0YXJnZXQKCgpkZWYgZ2V0X2NpYndfYXJjaHModGFyZ2V0KToKICAgICIiIgogICAgSGFuZGxlIG5vbi1uYXRpdmUgYXJjaGl0ZWN0dXJlcwoKICAgIGNpYncgYWxsb3dzIHJ1bm5pbmcgbm9uLW5hdGl2ZSBidWlsZHMgb24gdmFyaW91cyBwbGF0Zm9ybXM6CiAgICBodHRwczovL2NpYnVpbGR3aGVlbC5weXBhLmlvL2VuL3N0YWJsZS9vcHRpb25zLyNhcmNocwoKICAgIFRoaXMgbG9naWMgb3ZlcnJpZGVzIHRoZSAiYXV0byIgZmxhZyBiYXNlZCBvbiBPUyBhbmQgYSBsaXN0IG9mIHN1cHBvcnRlZAogICAgbm9uLW5hdGl2ZSBhcmNoIGlmIGEgbm9uLW5hdGl2ZSBhcmNoIGlzIGdpdmVuIGZvciBhIHBhcnRpY3VsYXIgcGxhdGZvcm0gaW4KICAgIHRhcmdldHMsIHJhdGhlciB0aGFuIHRoZSB1c2VyIGhhdmluZyB0byBkbyB0aGlzIG1hbnVhbGx5LgogICAgIiIiCiAgICBwbGF0Zm9ybV9hcmNocyA9IHsKICAgICAgICAjIFdlIG5vdyBjcm9zcyBjb21waWxlIHg4Nl82NCBvbiBhcm02NCBieSBkZWZhdWx0CiAgICAgICAgIm1hY29zIjogWyJ1bml2ZXJzYWwyIiwgIng4Nl82NCJdLAogICAgICAgICMgVGhpcyBpcyBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGV1bXVsYXRlZCBhcmNoZXMgb24gbGludXgKICAgICAgICAibGludXgiOiBbImFhcmNoNjQiLCAicHBjNjRsZSIsICJzMzkweCIsICJhcm12N2wiXSwKICAgIH0KICAgIGZvciBwbGF0Zm9ybSwgYXJjaHMgaW4gcGxhdGZvcm1fYXJjaHMuaXRlbXMoKToKICAgICAgICBpZiBwbGF0Zm9ybSBpbiB0YXJnZXQ6CiAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hzOgogICAgICAgICAgICAgICAgaWYgdGFyZ2V0LmVuZHN3aXRoKGFyY2gpOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmNoCgogICAgIyBJZiBubyBleHBsaWN0IGFyY2ggaGFzIGJlZW4gc3BlY2lmaWVkIGJ1aWxkIGJvdGggYXJtNjQgYW5kIHg4Nl82NCBvbiBtYWNvcwogICAgaWYgIm1hY29zIiBpbiB0YXJnZXQ6CiAgICAgICAgcmV0dXJuIG9zLmVudmlyb24uZ2V0KCJDSUJXX0FSQ0hTIiwgImFybTY0IHg4Nl82NCIpCgogICAgcmV0dXJuIENJQldfQVJDSFMKCgpkZWYgZ2V0X2FydGlmYWN0X25hbWUodGFyZ2V0KToKICAgIGFydGlmYWN0X25hbWUgPSByZS5zdWIociJbXFwgLzo8PnwqP1wiJ10iLCAiLSIsIHRhcmdldCkKICAgIGFydGlmYWN0X25hbWUgPSByZS5zdWIociItKyIsICItIiwgYXJ0aWZhY3RfbmFtZSkKICAgIHJldHVybiBhcnRpZmFjdF9uYW1lCgoKZGVmIGdldF9tYXRyaXhfaXRlbSh0YXJnZXQpOgogICAgZXh0cmFfdGFyZ2V0X2FyZ3MgPSB7fQogICAgaWYgaXNpbnN0YW5jZSh0YXJnZXQsIGRpY3QpOgogICAgICAgIGV4dHJhX3RhcmdldF9hcmdzID0gdGFyZ2V0CiAgICAgICAgdGFyZ2V0ID0gZXh0cmFfdGFyZ2V0X2FyZ3MucG9wKCJ0YXJnZXQiKQogICAgcmV0dXJuIHsKICAgICAgICAidGFyZ2V0IjogdGFyZ2V0LAogICAgICAgICJydW5zLW9uIjogZ2V0X29zKHRhcmdldCksCiAgICAgICAgIkNJQldfQlVJTEQiOiBnZXRfY2lid19idWlsZCh0YXJnZXQpLAogICAgICAgICJDSUJXX0FSQ0hTIjogZ2V0X2NpYndfYXJjaHModGFyZ2V0KSwKICAgICAgICAiYXJ0aWZhY3QtbmFtZSI6IGdldF9hcnRpZmFjdF9uYW1lKHRhcmdldCksCiAgICAgICAgKipleHRyYV90YXJnZXRfYXJncywKICAgIH0KCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbG9hZF9idWlsZF90YXJnZXRzKCkK + LOAD_BUILD_TARGETS_SCRIPT: 77u/IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj49My4xMiwgPDMuMTMiCiMgZGVwZW5kZW5jaWVzID0gWwojICAgICAiY2xpY2s9PTguMi4xIiwKIyAgICAgInB5eWFtbD09Ni4wLjIiLAojIF0KIyAvLy8KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCByZQoKaW1wb3J0IGNsaWNrCmltcG9ydCB5YW1sCgpNQUNISU5FX1RZUEUgPSB7CiAgICAibGludXgiOiAidWJ1bnR1LWxhdGVzdCIsCiAgICAibWFjb3MiOiAibWFjb3MtbGF0ZXN0IiwKICAgICJ3aW5kb3dzIjogIndpbmRvd3MtbGF0ZXN0IiwKICAgICJ3aW5kb3dzLWFybSI6ICJ3aW5kb3dzLTExLWFybSIsCn0KCkNJQldfQlVJTEQgPSBvcy5lbnZpcm9uLmdldCgiQ0lCV19CVUlMRCIsICIqIikKQ0lCV19BUkNIUyA9IG9zLmVudmlyb24uZ2V0KCJDSUJXX0FSQ0hTIiwgImF1dG8iKQoKCkBjbGljay5jb21tYW5kKCkKQGNsaWNrLm9wdGlvbigiLS10YXJnZXRzIiwgZGVmYXVsdD0iIikKZGVmIGxvYWRfYnVpbGRfdGFyZ2V0cyh0YXJnZXRzKToKICAgICIiIlNjcmlwdCB0byBsb2FkIGNpYnVpbGR3aGVlbCB0YXJnZXRzIGZvciBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvdy4iIiIKICAgICMgTG9hZCBsaXN0IG9mIHRhcmdldHMKICAgIHRhcmdldHMgPSB5YW1sLmxvYWQodGFyZ2V0cywgTG9hZGVyPXlhbWwuQmFzZUxvYWRlcikKICAgIHByaW50KGpzb24uZHVtcHModGFyZ2V0cywgaW5kZW50PTIpKQoKICAgICMgQ3JlYXRlIG1hdHJpeAogICAgbWF0cml4ID0geyJpbmNsdWRlIjogW119CiAgICBmb3IgdGFyZ2V0IGluIHRhcmdldHM6CiAgICAgICAgbWF0cml4WyJpbmNsdWRlIl0uYXBwZW5kKGdldF9tYXRyaXhfaXRlbSh0YXJnZXQpKQoKICAgICMgT3V0cHV0IG1hdHJpeAogICAgcHJpbnQoanNvbi5kdW1wcyhtYXRyaXgsIGluZGVudD0yKSkKICAgIHdpdGggb3Blbihvcy5lbnZpcm9uWyJHSVRIVUJfT1VUUFVUIl0sICJhIikgYXMgZjoKICAgICAgICBmLndyaXRlKGYibWF0cml4PXtqc29uLmR1bXBzKG1hdHJpeCl9XG4iKQoKCmRlZiBnZXRfb3ModGFyZ2V0KToKICAgIGlmICJtYWNvcyIgaW4gdGFyZ2V0OgogICAgICAgIHJldHVybiBNQUNISU5FX1RZUEVbIm1hY29zIl0KICAgIGlmICJ3aW5fYXJtIiBpbiB0YXJnZXQ6CiAgICAgICAgcmV0dXJuIE1BQ0hJTkVfVFlQRVsid2luZG93cy1hcm0iXQogICAgaWYgIndpbiIgaW4gdGFyZ2V0OgogICAgICAgIHJldHVybiBNQUNISU5FX1RZUEVbIndpbmRvd3MiXQogICAgcmV0dXJuIE1BQ0hJTkVfVFlQRVsibGludXgiXQoKCmRlZiBnZXRfY2lid19idWlsZCh0YXJnZXQpOgogICAgaWYgdGFyZ2V0IGluIHsibGludXgiLCAibWFjb3MiLCAid2luZG93cyJ9OgogICAgICAgIHJldHVybiBDSUJXX0JVSUxECiAgICByZXR1cm4gdGFyZ2V0CgoKZGVmIGdldF9jaWJ3X2FyY2hzKHRhcmdldCk6CiAgICAiIiIKICAgIEhhbmRsZSBub24tbmF0aXZlIGFyY2hpdGVjdHVyZXMKCiAgICBjaWJ3IGFsbG93cyBydW5uaW5nIG5vbi1uYXRpdmUgYnVpbGRzIG9uIHZhcmlvdXMgcGxhdGZvcm1zOgogICAgaHR0cHM6Ly9jaWJ1aWxkd2hlZWwucHlwYS5pby9lbi9zdGFibGUvb3B0aW9ucy8jYXJjaHMKCiAgICBUaGlzIGxvZ2ljIG92ZXJyaWRlcyB0aGUgImF1dG8iIGZsYWcgYmFzZWQgb24gT1MgYW5kIGEgbGlzdCBvZiBzdXBwb3J0ZWQKICAgIG5vbi1uYXRpdmUgYXJjaCBpZiBhIG5vbi1uYXRpdmUgYXJjaCBpcyBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHBsYXRmb3JtIGluCiAgICB0YXJnZXRzLCByYXRoZXIgdGhhbiB0aGUgdXNlciBoYXZpbmcgdG8gZG8gdGhpcyBtYW51YWxseS4KICAgICIiIgogICAgcGxhdGZvcm1fYXJjaHMgPSB7CiAgICAgICAgIyBXZSBub3cgY3Jvc3MgY29tcGlsZSB4ODZfNjQgb24gYXJtNjQgYnkgZGVmYXVsdAogICAgICAgICJtYWNvcyI6IFsidW5pdmVyc2FsMiIsICJ4ODZfNjQiXSwKICAgICAgICAjIFRoaXMgaXMgYSBsaXN0IG9mIHN1cHBvcnRlZCBldW11bGF0ZWQgYXJjaGVzIG9uIGxpbnV4CiAgICAgICAgImxpbnV4IjogWyJhYXJjaDY0IiwgInBwYzY0bGUiLCAiczM5MHgiLCAiYXJtdjdsIl0sCiAgICB9CiAgICBmb3IgcGxhdGZvcm0sIGFyY2hzIGluIHBsYXRmb3JtX2FyY2hzLml0ZW1zKCk6CiAgICAgICAgaWYgcGxhdGZvcm0gaW4gdGFyZ2V0OgogICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoczoKICAgICAgICAgICAgICAgIGlmIHRhcmdldC5lbmRzd2l0aChhcmNoKToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJjaAoKICAgICMgSWYgbm8gZXhwbGljdCBhcmNoIGhhcyBiZWVuIHNwZWNpZmllZCBidWlsZCBib3RoIGFybTY0IGFuZCB4ODZfNjQgb24gbWFjb3MKICAgIGlmICJtYWNvcyIgaW4gdGFyZ2V0OgogICAgICAgIHJldHVybiBvcy5lbnZpcm9uLmdldCgiQ0lCV19BUkNIUyIsICJhcm02NCB4ODZfNjQiKQoKICAgIHJldHVybiBDSUJXX0FSQ0hTCgoKZGVmIGdldF9hcnRpZmFjdF9uYW1lKHRhcmdldCk6CiAgICBhcnRpZmFjdF9uYW1lID0gcmUuc3ViKHIiW1xcIC86PD58Kj9cIiddIiwgIi0iLCB0YXJnZXQpCiAgICBhcnRpZmFjdF9uYW1lID0gcmUuc3ViKHIiLSsiLCAiLSIsIGFydGlmYWN0X25hbWUpCiAgICByZXR1cm4gYXJ0aWZhY3RfbmFtZQoKCmRlZiBnZXRfbWF0cml4X2l0ZW0odGFyZ2V0KToKICAgIGV4dHJhX3RhcmdldF9hcmdzID0ge30KICAgIGlmIGlzaW5zdGFuY2UodGFyZ2V0LCBkaWN0KToKICAgICAgICBleHRyYV90YXJnZXRfYXJncyA9IHRhcmdldAogICAgICAgIHRhcmdldCA9IGV4dHJhX3RhcmdldF9hcmdzLnBvcCgidGFyZ2V0IikKICAgIHJldHVybiB7CiAgICAgICAgInRhcmdldCI6IHRhcmdldCwKICAgICAgICAicnVucy1vbiI6IGdldF9vcyh0YXJnZXQpLAogICAgICAgICJDSUJXX0JVSUxEIjogZ2V0X2NpYndfYnVpbGQodGFyZ2V0KSwKICAgICAgICAiQ0lCV19BUkNIUyI6IGdldF9jaWJ3X2FyY2hzKHRhcmdldCksCiAgICAgICAgImFydGlmYWN0LW5hbWUiOiBnZXRfYXJ0aWZhY3RfbmFtZSh0YXJnZXQpLAogICAgICAgICoqZXh0cmFfdGFyZ2V0X2FyZ3MsCiAgICB9CgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGxvYWRfYnVpbGRfdGFyZ2V0cygpCg== - id: set-outputs run: pipx run load_build_targets.py --targets "${INPUTS_TARGETS}" shell: sh @@ -210,7 +210,7 @@ jobs: rm set_env.py shell: sh env: - SET_ENV_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj09My4xMiIKIyBkZXBlbmRlbmNpZXMgPSBbCiMgICAgICJweXlhbWw9PTYuMC4yIiwKIyBdCiMgLy8vCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgc3lzCgppbXBvcnQgeWFtbAoKR0lUSFVCX0VOViA9IG9zLmdldGVudigiR0lUSFVCX0VOViIpCmlmIEdJVEhVQl9FTlYgaXMgTm9uZToKICAgIHJhaXNlIFZhbHVlRXJyb3IoIkdJVEhVQl9FTlYgbm90IHNldC4gTXVzdCBiZSBydW4gaW5zaWRlIEdpdEh1YiBBY3Rpb25zLiIpCgpERUxJTUlURVIgPSAiRU9GIgoKCmRlZiBzZXRfZW52KGVudik6CgogICAgZW52ID0geWFtbC5sb2FkKGVudiwgTG9hZGVyPXlhbWwuQmFzZUxvYWRlcikKICAgIHByaW50KGpzb24uZHVtcHMoZW52LCBpbmRlbnQ9MikpCgogICAgaWYgbm90IGlzaW5zdGFuY2UoZW52LCBkaWN0KToKICAgICAgICB0aXRsZSA9ICJgZW52YCBtdXN0IGJlIG1hcHBpbmciCiAgICAgICAgbWVzc2FnZSA9IGYiYGVudmAgbXVzdCBiZSBtYXBwaW5nIG9mIGVudiB2YXJpYWJsZXMgdG8gdmFsdWVzLCBnb3QgdHlwZSB7dHlwZShlbnYpfSIKICAgICAgICBwcmludChmIjo6ZXJyb3IgdGl0bGU9e3RpdGxlfTo6e21lc3NhZ2V9IikKICAgICAgICBleGl0KDEpCgogICAgZm9yIGssIHYgaW4gZW52Lml0ZW1zKCk6CgogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHYsIHN0cik6CiAgICAgICAgICAgIHRpdGxlID0gImBlbnZgIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MiCiAgICAgICAgICAgIG1lc3NhZ2UgPSBmImBlbnZgIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MsIGJ1dCB2YWx1ZSBvZiB7a30gaGFzIHR5cGUge3R5cGUodil9IgogICAgICAgICAgICBwcmludChmIjo6ZXJyb3IgdGl0bGU9e3RpdGxlfTo6e21lc3NhZ2V9IikKICAgICAgICAgICAgZXhpdCgxKQoKICAgICAgICB2ID0gdi5zcGxpdCgiXG4iKQoKICAgICAgICB3aXRoIG9wZW4oR0lUSFVCX0VOViwgImEiKSBhcyBmOgogICAgICAgICAgICBpZiBsZW4odikgPT0gMToKICAgICAgICAgICAgICAgIGYud3JpdGUoZiJ7a309e3ZbMF19XG4iKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdjoKICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbGluZS5zdHJpcCgpICE9IERFTElNSVRFUgogICAgICAgICAgICAgICAgZi53cml0ZShmIntrfTw8e0RFTElNSVRFUn1cbiIpCiAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB2OgogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZiJ7bGluZX1cbiIpCiAgICAgICAgICAgICAgICBmLndyaXRlKGYie0RFTElNSVRFUn1cbiIpCgogICAgICAgIHByaW50KGYie2t9IHdyaXR0ZW4gdG8gR0lUSFVCX0VOViIpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHNldF9lbnYoc3lzLmFyZ3ZbMV0pCg== + SET_ENV_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj49My4xMiwgPDMuMTMiCiMgZGVwZW5kZW5jaWVzID0gWwojICAgICAicHl5YW1sPT02LjAuMiIsCiMgXQojIC8vLwppbXBvcnQganNvbgppbXBvcnQgb3MKaW1wb3J0IHN5cwoKaW1wb3J0IHlhbWwKCkdJVEhVQl9FTlYgPSBvcy5nZXRlbnYoIkdJVEhVQl9FTlYiKQppZiBHSVRIVUJfRU5WIGlzIE5vbmU6CiAgICByYWlzZSBWYWx1ZUVycm9yKCJHSVRIVUJfRU5WIG5vdCBzZXQuIE11c3QgYmUgcnVuIGluc2lkZSBHaXRIdWIgQWN0aW9ucy4iKQoKREVMSU1JVEVSID0gIkVPRiIKCgpkZWYgc2V0X2VudihlbnYpOgoKICAgIGVudiA9IHlhbWwubG9hZChlbnYsIExvYWRlcj15YW1sLkJhc2VMb2FkZXIpCiAgICBwcmludChqc29uLmR1bXBzKGVudiwgaW5kZW50PTIpKQoKICAgIGlmIG5vdCBpc2luc3RhbmNlKGVudiwgZGljdCk6CiAgICAgICAgdGl0bGUgPSAiYGVudmAgbXVzdCBiZSBtYXBwaW5nIgogICAgICAgIG1lc3NhZ2UgPSBmImBlbnZgIG11c3QgYmUgbWFwcGluZyBvZiBlbnYgdmFyaWFibGVzIHRvIHZhbHVlcywgZ290IHR5cGUge3R5cGUoZW52KX0iCiAgICAgICAgcHJpbnQoZiI6OmVycm9yIHRpdGxlPXt0aXRsZX06OnttZXNzYWdlfSIpCiAgICAgICAgZXhpdCgxKQoKICAgIGZvciBrLCB2IGluIGVudi5pdGVtcygpOgoKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2LCBzdHIpOgogICAgICAgICAgICB0aXRsZSA9ICJgZW52YCB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzIgogICAgICAgICAgICBtZXNzYWdlID0gZiJgZW52YCB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzLCBidXQgdmFsdWUgb2Yge2t9IGhhcyB0eXBlIHt0eXBlKHYpfSIKICAgICAgICAgICAgcHJpbnQoZiI6OmVycm9yIHRpdGxlPXt0aXRsZX06OnttZXNzYWdlfSIpCiAgICAgICAgICAgIGV4aXQoMSkKCiAgICAgICAgdiA9IHYuc3BsaXQoIlxuIikKCiAgICAgICAgd2l0aCBvcGVuKEdJVEhVQl9FTlYsICJhIikgYXMgZjoKICAgICAgICAgICAgaWYgbGVuKHYpID09IDE6CiAgICAgICAgICAgICAgICBmLndyaXRlKGYie2t9PXt2WzBdfVxuIikKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHY6CiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGxpbmUuc3RyaXAoKSAhPSBERUxJTUlURVIKICAgICAgICAgICAgICAgIGYud3JpdGUoZiJ7a308PHtERUxJTUlURVJ9XG4iKQogICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdjoKICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGYie2xpbmV9XG4iKQogICAgICAgICAgICAgICAgZi53cml0ZShmIntERUxJTUlURVJ9XG4iKQoKICAgICAgICBwcmludChmIntrfSB3cml0dGVuIHRvIEdJVEhVQl9FTlYiKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBzZXRfZW52KHN5cy5hcmd2WzFdKQo= INPUTS_ENV: ${{ inputs.env }} - name: Run cibuildwheel uses: pypa/cibuildwheel@f03ac7617d6cff873ccf24cc0d567ef5ba5a9e6d # v4.0.0 @@ -247,7 +247,7 @@ jobs: rm set_env.py shell: sh env: - SET_ENV_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj09My4xMiIKIyBkZXBlbmRlbmNpZXMgPSBbCiMgICAgICJweXlhbWw9PTYuMC4yIiwKIyBdCiMgLy8vCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgc3lzCgppbXBvcnQgeWFtbAoKR0lUSFVCX0VOViA9IG9zLmdldGVudigiR0lUSFVCX0VOViIpCmlmIEdJVEhVQl9FTlYgaXMgTm9uZToKICAgIHJhaXNlIFZhbHVlRXJyb3IoIkdJVEhVQl9FTlYgbm90IHNldC4gTXVzdCBiZSBydW4gaW5zaWRlIEdpdEh1YiBBY3Rpb25zLiIpCgpERUxJTUlURVIgPSAiRU9GIgoKCmRlZiBzZXRfZW52KGVudik6CgogICAgZW52ID0geWFtbC5sb2FkKGVudiwgTG9hZGVyPXlhbWwuQmFzZUxvYWRlcikKICAgIHByaW50KGpzb24uZHVtcHMoZW52LCBpbmRlbnQ9MikpCgogICAgaWYgbm90IGlzaW5zdGFuY2UoZW52LCBkaWN0KToKICAgICAgICB0aXRsZSA9ICJgZW52YCBtdXN0IGJlIG1hcHBpbmciCiAgICAgICAgbWVzc2FnZSA9IGYiYGVudmAgbXVzdCBiZSBtYXBwaW5nIG9mIGVudiB2YXJpYWJsZXMgdG8gdmFsdWVzLCBnb3QgdHlwZSB7dHlwZShlbnYpfSIKICAgICAgICBwcmludChmIjo6ZXJyb3IgdGl0bGU9e3RpdGxlfTo6e21lc3NhZ2V9IikKICAgICAgICBleGl0KDEpCgogICAgZm9yIGssIHYgaW4gZW52Lml0ZW1zKCk6CgogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHYsIHN0cik6CiAgICAgICAgICAgIHRpdGxlID0gImBlbnZgIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MiCiAgICAgICAgICAgIG1lc3NhZ2UgPSBmImBlbnZgIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MsIGJ1dCB2YWx1ZSBvZiB7a30gaGFzIHR5cGUge3R5cGUodil9IgogICAgICAgICAgICBwcmludChmIjo6ZXJyb3IgdGl0bGU9e3RpdGxlfTo6e21lc3NhZ2V9IikKICAgICAgICAgICAgZXhpdCgxKQoKICAgICAgICB2ID0gdi5zcGxpdCgiXG4iKQoKICAgICAgICB3aXRoIG9wZW4oR0lUSFVCX0VOViwgImEiKSBhcyBmOgogICAgICAgICAgICBpZiBsZW4odikgPT0gMToKICAgICAgICAgICAgICAgIGYud3JpdGUoZiJ7a309e3ZbMF19XG4iKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdjoKICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbGluZS5zdHJpcCgpICE9IERFTElNSVRFUgogICAgICAgICAgICAgICAgZi53cml0ZShmIntrfTw8e0RFTElNSVRFUn1cbiIpCiAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB2OgogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZiJ7bGluZX1cbiIpCiAgICAgICAgICAgICAgICBmLndyaXRlKGYie0RFTElNSVRFUn1cbiIpCgogICAgICAgIHByaW50KGYie2t9IHdyaXR0ZW4gdG8gR0lUSFVCX0VOViIpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHNldF9lbnYoc3lzLmFyZ3ZbMV0pCg== + SET_ENV_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj49My4xMiwgPDMuMTMiCiMgZGVwZW5kZW5jaWVzID0gWwojICAgICAicHl5YW1sPT02LjAuMiIsCiMgXQojIC8vLwppbXBvcnQganNvbgppbXBvcnQgb3MKaW1wb3J0IHN5cwoKaW1wb3J0IHlhbWwKCkdJVEhVQl9FTlYgPSBvcy5nZXRlbnYoIkdJVEhVQl9FTlYiKQppZiBHSVRIVUJfRU5WIGlzIE5vbmU6CiAgICByYWlzZSBWYWx1ZUVycm9yKCJHSVRIVUJfRU5WIG5vdCBzZXQuIE11c3QgYmUgcnVuIGluc2lkZSBHaXRIdWIgQWN0aW9ucy4iKQoKREVMSU1JVEVSID0gIkVPRiIKCgpkZWYgc2V0X2VudihlbnYpOgoKICAgIGVudiA9IHlhbWwubG9hZChlbnYsIExvYWRlcj15YW1sLkJhc2VMb2FkZXIpCiAgICBwcmludChqc29uLmR1bXBzKGVudiwgaW5kZW50PTIpKQoKICAgIGlmIG5vdCBpc2luc3RhbmNlKGVudiwgZGljdCk6CiAgICAgICAgdGl0bGUgPSAiYGVudmAgbXVzdCBiZSBtYXBwaW5nIgogICAgICAgIG1lc3NhZ2UgPSBmImBlbnZgIG11c3QgYmUgbWFwcGluZyBvZiBlbnYgdmFyaWFibGVzIHRvIHZhbHVlcywgZ290IHR5cGUge3R5cGUoZW52KX0iCiAgICAgICAgcHJpbnQoZiI6OmVycm9yIHRpdGxlPXt0aXRsZX06OnttZXNzYWdlfSIpCiAgICAgICAgZXhpdCgxKQoKICAgIGZvciBrLCB2IGluIGVudi5pdGVtcygpOgoKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2LCBzdHIpOgogICAgICAgICAgICB0aXRsZSA9ICJgZW52YCB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzIgogICAgICAgICAgICBtZXNzYWdlID0gZiJgZW52YCB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzLCBidXQgdmFsdWUgb2Yge2t9IGhhcyB0eXBlIHt0eXBlKHYpfSIKICAgICAgICAgICAgcHJpbnQoZiI6OmVycm9yIHRpdGxlPXt0aXRsZX06OnttZXNzYWdlfSIpCiAgICAgICAgICAgIGV4aXQoMSkKCiAgICAgICAgdiA9IHYuc3BsaXQoIlxuIikKCiAgICAgICAgd2l0aCBvcGVuKEdJVEhVQl9FTlYsICJhIikgYXMgZjoKICAgICAgICAgICAgaWYgbGVuKHYpID09IDE6CiAgICAgICAgICAgICAgICBmLndyaXRlKGYie2t9PXt2WzBdfVxuIikKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHY6CiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGxpbmUuc3RyaXAoKSAhPSBERUxJTUlURVIKICAgICAgICAgICAgICAgIGYud3JpdGUoZiJ7a308PHtERUxJTUlURVJ9XG4iKQogICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdjoKICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGYie2xpbmV9XG4iKQogICAgICAgICAgICAgICAgZi53cml0ZShmIntERUxJTUlURVJ9XG4iKQoKICAgICAgICBwcmludChmIntrfSB3cml0dGVuIHRvIEdJVEhVQl9FTlYiKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBzZXRfZW52KHN5cy5hcmd2WzFdKQo= INPUTS_ENV: ${{ inputs.env }} - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: diff --git a/.github/workflows/publish_pure_python.yml b/.github/workflows/publish_pure_python.yml index 12343d91..01f7aabf 100644 --- a/.github/workflows/publish_pure_python.yml +++ b/.github/workflows/publish_pure_python.yml @@ -118,7 +118,7 @@ jobs: rm set_env.py shell: sh env: - SET_ENV_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj09My4xMiIKIyBkZXBlbmRlbmNpZXMgPSBbCiMgICAgICJweXlhbWw9PTYuMC4yIiwKIyBdCiMgLy8vCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgc3lzCgppbXBvcnQgeWFtbAoKR0lUSFVCX0VOViA9IG9zLmdldGVudigiR0lUSFVCX0VOViIpCmlmIEdJVEhVQl9FTlYgaXMgTm9uZToKICAgIHJhaXNlIFZhbHVlRXJyb3IoIkdJVEhVQl9FTlYgbm90IHNldC4gTXVzdCBiZSBydW4gaW5zaWRlIEdpdEh1YiBBY3Rpb25zLiIpCgpERUxJTUlURVIgPSAiRU9GIgoKCmRlZiBzZXRfZW52KGVudik6CgogICAgZW52ID0geWFtbC5sb2FkKGVudiwgTG9hZGVyPXlhbWwuQmFzZUxvYWRlcikKICAgIHByaW50KGpzb24uZHVtcHMoZW52LCBpbmRlbnQ9MikpCgogICAgaWYgbm90IGlzaW5zdGFuY2UoZW52LCBkaWN0KToKICAgICAgICB0aXRsZSA9ICJgZW52YCBtdXN0IGJlIG1hcHBpbmciCiAgICAgICAgbWVzc2FnZSA9IGYiYGVudmAgbXVzdCBiZSBtYXBwaW5nIG9mIGVudiB2YXJpYWJsZXMgdG8gdmFsdWVzLCBnb3QgdHlwZSB7dHlwZShlbnYpfSIKICAgICAgICBwcmludChmIjo6ZXJyb3IgdGl0bGU9e3RpdGxlfTo6e21lc3NhZ2V9IikKICAgICAgICBleGl0KDEpCgogICAgZm9yIGssIHYgaW4gZW52Lml0ZW1zKCk6CgogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHYsIHN0cik6CiAgICAgICAgICAgIHRpdGxlID0gImBlbnZgIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MiCiAgICAgICAgICAgIG1lc3NhZ2UgPSBmImBlbnZgIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MsIGJ1dCB2YWx1ZSBvZiB7a30gaGFzIHR5cGUge3R5cGUodil9IgogICAgICAgICAgICBwcmludChmIjo6ZXJyb3IgdGl0bGU9e3RpdGxlfTo6e21lc3NhZ2V9IikKICAgICAgICAgICAgZXhpdCgxKQoKICAgICAgICB2ID0gdi5zcGxpdCgiXG4iKQoKICAgICAgICB3aXRoIG9wZW4oR0lUSFVCX0VOViwgImEiKSBhcyBmOgogICAgICAgICAgICBpZiBsZW4odikgPT0gMToKICAgICAgICAgICAgICAgIGYud3JpdGUoZiJ7a309e3ZbMF19XG4iKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdjoKICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbGluZS5zdHJpcCgpICE9IERFTElNSVRFUgogICAgICAgICAgICAgICAgZi53cml0ZShmIntrfTw8e0RFTElNSVRFUn1cbiIpCiAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB2OgogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZiJ7bGluZX1cbiIpCiAgICAgICAgICAgICAgICBmLndyaXRlKGYie0RFTElNSVRFUn1cbiIpCgogICAgICAgIHByaW50KGYie2t9IHdyaXR0ZW4gdG8gR0lUSFVCX0VOViIpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHNldF9lbnYoc3lzLmFyZ3ZbMV0pCg== + SET_ENV_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj49My4xMiwgPDMuMTMiCiMgZGVwZW5kZW5jaWVzID0gWwojICAgICAicHl5YW1sPT02LjAuMiIsCiMgXQojIC8vLwppbXBvcnQganNvbgppbXBvcnQgb3MKaW1wb3J0IHN5cwoKaW1wb3J0IHlhbWwKCkdJVEhVQl9FTlYgPSBvcy5nZXRlbnYoIkdJVEhVQl9FTlYiKQppZiBHSVRIVUJfRU5WIGlzIE5vbmU6CiAgICByYWlzZSBWYWx1ZUVycm9yKCJHSVRIVUJfRU5WIG5vdCBzZXQuIE11c3QgYmUgcnVuIGluc2lkZSBHaXRIdWIgQWN0aW9ucy4iKQoKREVMSU1JVEVSID0gIkVPRiIKCgpkZWYgc2V0X2VudihlbnYpOgoKICAgIGVudiA9IHlhbWwubG9hZChlbnYsIExvYWRlcj15YW1sLkJhc2VMb2FkZXIpCiAgICBwcmludChqc29uLmR1bXBzKGVudiwgaW5kZW50PTIpKQoKICAgIGlmIG5vdCBpc2luc3RhbmNlKGVudiwgZGljdCk6CiAgICAgICAgdGl0bGUgPSAiYGVudmAgbXVzdCBiZSBtYXBwaW5nIgogICAgICAgIG1lc3NhZ2UgPSBmImBlbnZgIG11c3QgYmUgbWFwcGluZyBvZiBlbnYgdmFyaWFibGVzIHRvIHZhbHVlcywgZ290IHR5cGUge3R5cGUoZW52KX0iCiAgICAgICAgcHJpbnQoZiI6OmVycm9yIHRpdGxlPXt0aXRsZX06OnttZXNzYWdlfSIpCiAgICAgICAgZXhpdCgxKQoKICAgIGZvciBrLCB2IGluIGVudi5pdGVtcygpOgoKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2LCBzdHIpOgogICAgICAgICAgICB0aXRsZSA9ICJgZW52YCB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzIgogICAgICAgICAgICBtZXNzYWdlID0gZiJgZW52YCB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzLCBidXQgdmFsdWUgb2Yge2t9IGhhcyB0eXBlIHt0eXBlKHYpfSIKICAgICAgICAgICAgcHJpbnQoZiI6OmVycm9yIHRpdGxlPXt0aXRsZX06OnttZXNzYWdlfSIpCiAgICAgICAgICAgIGV4aXQoMSkKCiAgICAgICAgdiA9IHYuc3BsaXQoIlxuIikKCiAgICAgICAgd2l0aCBvcGVuKEdJVEhVQl9FTlYsICJhIikgYXMgZjoKICAgICAgICAgICAgaWYgbGVuKHYpID09IDE6CiAgICAgICAgICAgICAgICBmLndyaXRlKGYie2t9PXt2WzBdfVxuIikKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHY6CiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGxpbmUuc3RyaXAoKSAhPSBERUxJTUlURVIKICAgICAgICAgICAgICAgIGYud3JpdGUoZiJ7a308PHtERUxJTUlURVJ9XG4iKQogICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdjoKICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGYie2xpbmV9XG4iKQogICAgICAgICAgICAgICAgZi53cml0ZShmIntERUxJTUlURVJ9XG4iKQoKICAgICAgICBwcmludChmIntrfSB3cml0dGVuIHRvIEdJVEhVQl9FTlYiKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBzZXRfZW52KHN5cy5hcmd2WzFdKQo= INPUTS_ENV: ${{ inputs.env }} - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml index 9136a469..e3346f13 100644 --- a/.github/workflows/tox.yml +++ b/.github/workflows/tox.yml @@ -148,7 +148,7 @@ jobs: persist-credentials: false - run: echo $TOX_MATRIX_SCRIPT | base64 --decode > tox_matrix.py env: - TOX_MATRIX_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj09My4xMiIKIyBkZXBlbmRlbmNpZXMgPSBbCiMgICAgICJjbGljaz09OC4yLjEiLAojICAgICAicGFja2FnaW5nPT0yNS4wIiwKIyAgICAgInB5eWFtbD09Ni4wLjIiLAojIF0KIyAvLy8KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgd2FybmluZ3MKZnJvbSBjb3B5IGltcG9ydCBjb3B5CgppbXBvcnQgY2xpY2sKaW1wb3J0IHlhbWwKZnJvbSBwYWNrYWdpbmcudmVyc2lvbiBpbXBvcnQgVmVyc2lvbgoKCkBjbGljay5jb21tYW5kKCkKQGNsaWNrLm9wdGlvbigiLS1lbnZzIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1saWJyYXJpZXMiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLXBvc2FyZ3MiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLXRveGRlcHMiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLXRveGFyZ3MiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLXB5dGVzdCIsIGRlZmF1bHQ9InRydWUiKQpAY2xpY2sub3B0aW9uKCItLXB5dGVzdC1yZXN1bHRzLXN1bW1hcnkiLCBkZWZhdWx0PSJmYWxzZSIpCkBjbGljay5vcHRpb24oIi0tY292ZXJhZ2UiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLWNvbmRhIiwgZGVmYXVsdD0iYXV0byIpCkBjbGljay5vcHRpb24oIi0tc2V0ZW52IiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1kaXNwbGF5IiwgZGVmYXVsdD0iZmFsc2UiKQpAY2xpY2sub3B0aW9uKCItLWNhY2hlLXBhdGgiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLWNhY2hlLWtleSIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tY2FjaGUtcmVzdG9yZS1rZXlzIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1hcnRpZmFjdC1wYXRoIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1hcnRpZmFjdC1hcmNoaXZlIiwgZGVmYXVsdD0idHJ1ZSIpCkBjbGljay5vcHRpb24oIi0tYXJ0aWZhY3QtaW5jbHVkZS1oaWRkZW4tZmlsZXMiLCBkZWZhdWx0PSJmYWxzZSIpCkBjbGljay5vcHRpb24oIi0tYXJ0aWZhY3QtaWYtbm8tZmlsZXMtZm91bmQiLCBkZWZhdWx0PSJ3YXJuIikKQGNsaWNrLm9wdGlvbigiLS1ydW5zLW9uIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1kZWZhdWx0LXB5dGhvbiIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tdGltZW91dC1taW51dGVzIiwgZGVmYXVsdD0iMzYwIikKQGNsaWNrLm9wdGlvbigiLS1zdXBwb3J0ZWQtcHl0aG9ucyIsIGRlZmF1bHQ9J1siMyJdJykKZGVmIGxvYWRfdG94X3RhcmdldHMoCiAgICBlbnZzLAogICAgbGlicmFyaWVzLAogICAgcG9zYXJncywKICAgIHRveGRlcHMsCiAgICB0b3hhcmdzLAogICAgcHl0ZXN0LAogICAgcHl0ZXN0X3Jlc3VsdHNfc3VtbWFyeSwKICAgIGNvdmVyYWdlLAogICAgY29uZGEsCiAgICBzZXRlbnYsCiAgICBkaXNwbGF5LAogICAgY2FjaGVfcGF0aCwKICAgIGNhY2hlX2tleSwKICAgIGNhY2hlX3Jlc3RvcmVfa2V5cywKICAgIGFydGlmYWN0X3BhdGgsCiAgICBhcnRpZmFjdF9hcmNoaXZlLAogICAgYXJ0aWZhY3RfaW5jbHVkZV9oaWRkZW5fZmlsZXMsCiAgICBhcnRpZmFjdF9pZl9ub19maWxlc19mb3VuZCwKICAgIHJ1bnNfb24sCiAgICBkZWZhdWx0X3B5dGhvbiwKICAgIHRpbWVvdXRfbWludXRlcywKICAgIHN1cHBvcnRlZF9weXRob25zLAopOgogICAgIiIiU2NyaXB0IHRvIGxvYWQgdG94IHRhcmdldHMgZm9yIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93LiIiIgoKICAgIGlmIG5vdCBzdXBwb3J0ZWRfcHl0aG9uczoKICAgICAgICBzdXBwb3J0ZWRfcHl0aG9ucyA9IFsnMyddCiAgICBlbGlmIGlzaW5zdGFuY2Uoc3VwcG9ydGVkX3B5dGhvbnMsIHN0cik6CiAgICAgICAgc3VwcG9ydGVkX3B5dGhvbnMgPSBqc29uLmxvYWRzKHN1cHBvcnRlZF9weXRob25zKQoKICAgICMgTG9hZCBlbnZzIGNvbmZpZwogICAgZW52cyA9IHlhbWwubG9hZChlbnZzLnJlcGxhY2UoIlxcbiIsICJcbiIpLCBMb2FkZXI9eWFtbC5CYXNlTG9hZGVyKQogICAgcHJpbnQoanNvbi5kdW1wcyhlbnZzLCBpbmRlbnQ9MikpCgogICAgIyBMb2FkIGdsb2JhbCBsaWJyYXJpZXMgY29uZmlnCiAgICBnbG9iYWxfbGlicmFyaWVzID0gewogICAgICAgICJicmV3IjogW10sCiAgICAgICAgImJyZXctY2FzayI6IFtdLAogICAgICAgICJhcHQiOiBbXSwKICAgICAgICAiY2hvY28iOiBbXSwKICAgIH0KICAgIGxpYnJhcmllcyA9IHlhbWwubG9hZChsaWJyYXJpZXMsIExvYWRlcj15YW1sLkJhc2VMb2FkZXIpCiAgICBpZiBsaWJyYXJpZXMgaXMgbm90IE5vbmU6CiAgICAgICAgZ2xvYmFsX2xpYnJhcmllcy51cGRhdGUobGlicmFyaWVzKQogICAgcHJpbnQoanNvbi5kdW1wcyhnbG9iYWxfbGlicmFyaWVzLCBpbmRlbnQ9MikpCgogICAgIyBEZWZhdWx0IGltYWdlcyB0byB1c2UgZm9yIHJ1bm5lcnMKICAgIGRlZmF1bHRfcnVuc19vbiA9IHsKICAgICAgICAibGludXgiOiAidWJ1bnR1LWxhdGVzdCIsCiAgICAgICAgIm1hY29zIjogIm1hY29zLWxhdGVzdCIsCiAgICAgICAgIndpbmRvd3MiOiAid2luZG93cy1sYXRlc3QiLAogICAgfQogICAgY3VzdG9tX3J1bnNfb24gPSB5YW1sLmxvYWQocnVuc19vbiwgTG9hZGVyPXlhbWwuQmFzZUxvYWRlcikKICAgIGlmIGlzaW5zdGFuY2UoY3VzdG9tX3J1bnNfb24sIGRpY3QpOgogICAgICAgIGRlZmF1bHRfcnVuc19vbi51cGRhdGUoY3VzdG9tX3J1bnNfb24pCiAgICBwcmludChqc29uLmR1bXBzKGRlZmF1bHRfcnVuc19vbiwgaW5kZW50PTIpKQoKICAgICMgRGVmYXVsdCBzdHJpbmcgcGFyYW1ldGVycyB3aGljaCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgZWFjaCBlbnYKICAgIHN0cmluZ19wYXJhbWV0ZXJzID0gewogICAgICAgICJwb3NhcmdzIjogcG9zYXJncywKICAgICAgICAidG94ZGVwcyI6IHRveGRlcHMsCiAgICAgICAgInRveGFyZ3MiOiB0b3hhcmdzLAogICAgICAgICJweXRlc3QiOiBweXRlc3QsCiAgICAgICAgInB5dGVzdC1yZXN1bHRzLXN1bW1hcnkiOiBweXRlc3RfcmVzdWx0c19zdW1tYXJ5LAogICAgICAgICJjb3ZlcmFnZSI6IGNvdmVyYWdlLAogICAgICAgICJjb25kYSI6IGNvbmRhLAogICAgICAgICJzZXRlbnYiOiBzZXRlbnYsCiAgICAgICAgImRpc3BsYXkiOiBkaXNwbGF5LAogICAgICAgICJjYWNoZS1wYXRoIjogY2FjaGVfcGF0aCwKICAgICAgICAiY2FjaGUta2V5IjogY2FjaGVfa2V5LAogICAgICAgICJjYWNoZS1yZXN0b3JlLWtleXMiOiBjYWNoZV9yZXN0b3JlX2tleXMsCiAgICAgICAgImFydGlmYWN0LXBhdGgiOiBhcnRpZmFjdF9wYXRoLAogICAgICAgICJhcnRpZmFjdC1hcmNoaXZlIjogYXJ0aWZhY3RfYXJjaGl2ZSwKICAgICAgICAiYXJ0aWZhY3QtaW5jbHVkZS1oaWRkZW4tZmlsZXMiOiBhcnRpZmFjdF9pbmNsdWRlX2hpZGRlbl9maWxlcywKICAgICAgICAiYXJ0aWZhY3QtaWYtbm8tZmlsZXMtZm91bmQiOiBhcnRpZmFjdF9pZl9ub19maWxlc19mb3VuZCwKICAgICAgICAidGltZW91dC1taW51dGVzIjogdGltZW91dF9taW51dGVzLAogICAgfQoKICAgICMgQ3JlYXRlIG1hdHJpeAogICAgbWF0cml4ID0geyJpbmNsdWRlIjogW119CiAgICBmb3IgZW52IGluIGVudnM6CiAgICAgICAgbWF0cml4X2l0ZW0gPSBnZXRfbWF0cml4X2l0ZW0oCiAgICAgICAgICAgIGVudiwKICAgICAgICAgICAgZ2xvYmFsX2xpYnJhcmllcz1nbG9iYWxfbGlicmFyaWVzLAogICAgICAgICAgICBnbG9iYWxfc3RyaW5nX3BhcmFtZXRlcnM9c3RyaW5nX3BhcmFtZXRlcnMsCiAgICAgICAgICAgIHJ1bnNfb249ZGVmYXVsdF9ydW5zX29uLAogICAgICAgICAgICBkZWZhdWx0X3B5dGhvbj1kZWZhdWx0X3B5dGhvbiwKICAgICAgICApCgogICAgICAgICMgY2hlY2sgaWYgd2UgbmVlZCB0byBleHBhbmQgcHl0aG9uIHZlcnNpb25zIGZyb20gYSBnbG9iIChpLmUuIHB5KiwgcHkzKiwgcHkzMSosIGV0Yy4pCiAgICAgICAgdG94ZW52ID0gbWF0cml4X2l0ZW1bInRveGVudiJdCiAgICAgICAgaWYgdG94ZW52LnN0YXJ0c3dpdGgoInB5IikgYW5kICIqIiBpbiB0b3hlbnYuc3BsaXQoIi0iKVswXToKICAgICAgICAgICAgdG94ZW52cyA9IGV4cGFuZF9weXRob25fdmVyc2lvbnModG94ZW52LCBweXRob25fdmVyc2lvbnM9c3VwcG9ydGVkX3B5dGhvbnMpCgogICAgICAgICAgICBmb3IgZXhwYW5kZWRfdG94ZW52LCBweXRob25fdmVyc2lvbiBpbiB0b3hlbnZzOgogICAgICAgICAgICAgICAgZXhwYW5kZWRfbWF0cml4X2l0ZW0gPSBjb3B5KG1hdHJpeF9pdGVtKQogICAgICAgICAgICAgICAgZXhwYW5kZWRfbWF0cml4X2l0ZW1bInRveGVudiJdID0gZXhwYW5kZWRfdG94ZW52CiAgICAgICAgICAgICAgICBleHBhbmRlZF9tYXRyaXhfaXRlbVsibmFtZSJdID0gZXhwYW5kZWRfbWF0cml4X2l0ZW1bIm5hbWUiXS5yZXBsYWNlKAogICAgICAgICAgICAgICAgICAgIHRveGVudiwgZXhwYW5kZWRfdG94ZW52CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBleHBhbmRlZF9tYXRyaXhfaXRlbVsicHl0aG9uX3ZlcnNpb24iXSA9IHB5dGhvbl92ZXJzaW9uCiAgICAgICAgICAgICAgICBtYXRyaXhbImluY2x1ZGUiXS5hcHBlbmQoZXhwYW5kZWRfbWF0cml4X2l0ZW0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgbWF0cml4WyJpbmNsdWRlIl0uYXBwZW5kKG1hdHJpeF9pdGVtKQoKICAgICMgT3V0cHV0IG1hdHJpeAogICAgcHJpbnQoanNvbi5kdW1wcyhtYXRyaXgsIGluZGVudD0yKSkKICAgIHdpdGggb3Blbihvcy5lbnZpcm9uWyJHSVRIVUJfT1VUUFVUIl0sICJhIikgYXMgZjoKICAgICAgICBmLndyaXRlKGYibWF0cml4PXtqc29uLmR1bXBzKG1hdHJpeCl9XG4iKQoKCmRlZiBnZXRfbWF0cml4X2l0ZW0oZW52LCBnbG9iYWxfbGlicmFyaWVzLCBnbG9iYWxfc3RyaW5nX3BhcmFtZXRlcnMsIHJ1bnNfb24sIGRlZmF1bHRfcHl0aG9uKToKCiAgICAjIGRlZmluZSBzcGVjIGZvciBlYWNoIG1hdHJpeCBpbmNsdWRlICgrIGdsb2JhbF9zdHJpbmdfcGFyYW1ldGVycykKICAgIGl0ZW0gPSB7CiAgICAgICAgIm9zIjogTm9uZSwKICAgICAgICAidG94ZW52IjogTm9uZSwKICAgICAgICAicHl0aG9uX3ZlcnNpb24iOiBOb25lLAogICAgICAgICJuYW1lIjogTm9uZSwKICAgICAgICAicHl0ZXN0X2ZsYWciOiBOb25lLAogICAgICAgICJsaWJyYXJpZXNfYnJldyI6IE5vbmUsCiAgICAgICAgImxpYnJhcmllc19icmV3X2Nhc2siOiBOb25lLAogICAgICAgICJsaWJyYXJpZXNfYXB0IjogTm9uZSwKICAgICAgICAibGlicmFyaWVzX2Nob2NvIjogTm9uZSwKICAgICAgICAiY2FjaGUtcGF0aCI6IE5vbmUsCiAgICAgICAgImNhY2hlLWtleSI6IE5vbmUsCiAgICAgICAgImNhY2hlLXJlc3RvcmUta2V5cyI6IE5vbmUsCiAgICAgICAgImFydGlmYWN0LW5hbWUiOiBOb25lLAogICAgICAgICJhcnRpZmFjdC1wYXRoIjogTm9uZSwKICAgICAgICAiYXJ0aWZhY3QtYXJjaGl2ZSI6IE5vbmUsCiAgICAgICAgImFydGlmYWN0LWluY2x1ZGUtaGlkZGVuLWZpbGVzIjogTm9uZSwKICAgICAgICAiYXJ0aWZhY3QtaWYtbm8tZmlsZXMtZm91bmQiOiBOb25lLAogICAgICAgICJ0aW1lb3V0LW1pbnV0ZXMiOiBOb25lLAogICAgfQogICAgZm9yIHN0cmluZ19wYXJhbSwgZGVmYXVsdCBpbiBnbG9iYWxfc3RyaW5nX3BhcmFtZXRlcnMuaXRlbXMoKToKICAgICAgICBlbnZfdmFsdWUgPSBlbnYuZ2V0KHN0cmluZ19wYXJhbSkKICAgICAgICBpdGVtW3N0cmluZ19wYXJhbV0gPSBkZWZhdWx0IGlmIGVudl92YWx1ZSBpcyBOb25lIGVsc2UgZW52X3ZhbHVlCgogICAgIyBzZXQgb3MgYW5kIHRveGVudgogICAgZm9yIGssIHYgaW4gcnVuc19vbi5pdGVtcygpOgogICAgICAgIGlmIGsgaW4gZW52OgogICAgICAgICAgICBwbGF0Zm9ybSA9IGsKICAgICAgICAgICAgaXRlbVsib3MiXSA9IGVudi5nZXQoInJ1bnMtb24iLCB2KQogICAgICAgICAgICBpdGVtWyJ0b3hlbnYiXSA9IGVudltrXQogICAgYXNzZXJ0IGl0ZW1bIm9zIl0gaXMgbm90IE5vbmUgYW5kIGl0ZW1bInRveGVudiJdIGlzIG5vdCBOb25lCgogICAgIyBzZXQgcHl0aG9uX3ZlcnNpb24KICAgIHB5dGhvbl92ZXJzaW9uID0gZW52LmdldCgicHl0aG9uLXZlcnNpb24iKQogICAgbSA9IHJlLnNlYXJjaCgiXnB5KDJ8MykoWzAtOV0rdD8pIiwgaXRlbVsidG94ZW52Il0pCiAgICBpZiBweXRob25fdmVyc2lvbiBpcyBub3QgTm9uZToKICAgICAgICBpdGVtWyJweXRob25fdmVyc2lvbiJdID0gcHl0aG9uX3ZlcnNpb24KICAgIGVsaWYgbSBpcyBub3QgTm9uZToKICAgICAgICBtYWpvciwgbWlub3IgPSBtLmdyb3VwcygpCiAgICAgICAgaXRlbVsicHl0aG9uX3ZlcnNpb24iXSA9IGYie21ham9yfS57bWlub3J9IgogICAgZWxzZToKICAgICAgICBpdGVtWyJweXRob25fdmVyc2lvbiJdID0gZW52LmdldCgiZGVmYXVsdF9weXRob24iKSBvciBkZWZhdWx0X3B5dGhvbgoKICAgICMgc2V0IG5hbWUKICAgIGl0ZW1bIm5hbWUiXSA9IGVudi5nZXQoIm5hbWUiKSBvciBmIntpdGVtWyd0b3hlbnYnXX0gKHtpdGVtWydvcyddfSkiCgogICAgIyBzZXQgYXJ0aWZhY3QtbmFtZSAocmVwbGFjZSBpbnZhbGlkIHBhdGggY2hhcmFjdGVycykKICAgIGl0ZW1bImFydGlmYWN0LW5hbWUiXSA9IHJlLnN1YihyIltcXCAvOjw+fCo/XCInXSIsICItIiwgaXRlbVsibmFtZSJdKQogICAgaXRlbVsiYXJ0aWZhY3QtbmFtZSJdID0gcmUuc3ViKHIiLSsiLCAiLSIsIGl0ZW1bImFydGlmYWN0LW5hbWUiXSkKCiAgICAjIHNldCBweXRlc3RfZmxhZwogICAgaXRlbVsicHl0ZXN0X2ZsYWciXSA9ICIiCiAgICBzZXAgPSByIlxcIiBpZiBwbGF0Zm9ybSA9PSAid2luZG93cyIgZWxzZSAiLyIKICAgIGlmIGl0ZW1bInB5dGVzdCJdID09ICJ0cnVlIjoKICAgICAgICBpZiBpdGVtWyJweXRlc3QtcmVzdWx0cy1zdW1tYXJ5Il0gPT0gInRydWUiOgogICAgICAgICAgICBpdGVtWyJweXRlc3RfZmxhZyJdICs9IHJmIi0tanVuaXR4bWwgJHt7R0lUSFVCX1dPUktTUEFDRX19e3NlcH1yZXN1bHRzLnhtbCAiCgogICAgIyBzZXQgbGlicmFyaWVzCiAgICBlbnZfbGlicmFyaWVzID0gZW52LmdldCgibGlicmFyaWVzIikKICAgIGlmIGlzaW5zdGFuY2UoZW52X2xpYnJhcmllcywgc3RyKSBhbmQgbGVuKGVudl9saWJyYXJpZXMuc3RyaXAoKSkgPT0gMDoKICAgICAgICBlbnZfbGlicmFyaWVzID0ge30gICMgbm8gbGlicmFyaWVzIHJlcXVlc3RlZCBmb3IgZW52aXJvbm1lbnQKICAgIGxpYnJhcmllcyA9IGdsb2JhbF9saWJyYXJpZXMgaWYgZW52X2xpYnJhcmllcyBpcyBOb25lIGVsc2UgZW52X2xpYnJhcmllcwogICAgZm9yIG1hbmFnZXIgaW4gWyJicmV3IiwgImJyZXdfY2FzayIsICJhcHQiLCAiY2hvY28iXToKICAgICAgICBpdGVtW2YibGlicmFyaWVzX3ttYW5hZ2VyfSJdID0gIiAiLmpvaW4obGlicmFyaWVzLmdldChtYW5hZ2VyLCBbXSkpCgogICAgaWYgaXRlbVsiY29uZGEiXToKICAgICAgICB3YXJuaW5ncy53YXJuKCJgY29uZGFgIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIikKCiAgICAgICAgIyBzZXQgImF1dG8iIGNvbmRhIHZhbHVlCiAgICAgICAgaWYgaXRlbVsiY29uZGEiXSA9PSAiYXV0byI6CiAgICAgICAgICAgIGl0ZW1bImNvbmRhIl0gPSAidHJ1ZSIgaWYgImNvbmRhIiBpbiBpdGVtWyJ0b3hlbnYiXSBlbHNlICJmYWxzZSIKCiAgICAgICAgIyBpbmplY3QgdG94ZGVwcyBmb3IgY29uZGEKICAgICAgICBpZiBpdGVtWyJjb25kYSJdID09ICJ0cnVlIiBhbmQgInRveC1jb25kYSIgbm90IGluIGl0ZW1bInRveGRlcHMiXS5sb3dlcigpOgogICAgICAgICAgICBpdGVtWyJ0b3hkZXBzIl0gPSAoInRveC1jb25kYSAiICsgaXRlbVsidG94ZGVwcyJdKS5zdHJpcCgpCgogICAgIyBtYWtlIHRpbWVvdXQtbWludXRlcyBhIG51bWJlcgogICAgaXRlbVsidGltZW91dC1taW51dGVzIl0gPSBpbnQoaXRlbVsidGltZW91dC1taW51dGVzIl0pCgogICAgIyB2ZXJpZnkgdmFsdWVzCiAgICBhc3NlcnQgaXRlbVsicHl0ZXN0Il0gaW4geyJ0cnVlIiwgImZhbHNlIn0KICAgIGFzc2VydCBpdGVtWyJjb25kYSJdIGluIHsidHJ1ZSIsICJmYWxzZSJ9CiAgICBhc3NlcnQgaXRlbVsiZGlzcGxheSJdIGluIHsidHJ1ZSIsICJmYWxzZSJ9CgogICAgcmV0dXJuIGl0ZW0KCgpkZWYgZXhwYW5kX3B5dGhvbl92ZXJzaW9ucyh0b3hlbnY6IHN0ciwgcHl0aG9uX3ZlcnNpb25zOiBsaXN0W1ZlcnNpb24gfCBzdHJdKSAtPiBsaXN0WyhzdHIsIHN0cildOgogICAgIiIiCiAgICBleHBhbmQgYHB5MypgIGludG8gYHB5MzExYCwgYHB5MzEyYCwgYHB5MzEzYCwgZXRjLiBiYXNlZCBvbiBjdXJyZW50bHktc3VwcG9ydGVkIFB5dGhvbiB2ZXJzaW9ucwoKICAgIDpwYXJhbSB2ZXJzaW9uX2dsb2I6IGNhbiBiZSBgcHkqYCwgYHB5MypgLCBgcHkzMCpgLCBgcHkzMSpgIGV0Yy4KICAgICIiIgoKICAgIHB5dGhvbl92ZXJzaW9ucyA9IFtWZXJzaW9uKHZlcnNpb24pIGZvciB2ZXJzaW9uIGluIHB5dGhvbl92ZXJzaW9uc10KCiAgICB0b3hlbnZfZmFjdG9ycyA9IHRveGVudi5zcGxpdCgiLSIpCiAgICBweV92ZXJzaW9uX2dsb2IgPSB0b3hlbnZfZmFjdG9yc1swXQogICAgaWYgbm90IHB5X3ZlcnNpb25fZ2xvYi5zdGFydHN3aXRoKCJweSIpOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgIGYnaW5wdXQgIntweV92ZXJzaW9uX2dsb2J9IiBpcyBub3QgYSBQeXRob24gdmVyc2lvbiBUb3ggZmFjdG9yIChtdXN0IHN0YXJ0IHdpdGggYHB5YCknCiAgICAgICAgKQoKICAgIGlmICIqIiBub3QgaW4gcHlfdmVyc2lvbl9nbG9iOgogICAgICAgIHJldHVybiBbcHlfdmVyc2lvbl9nbG9iXQoKICAgIGlmIG5vdCBweV92ZXJzaW9uX2dsb2IuZW5kc3dpdGgoIioiKToKICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICAgICAiUHl0aG9uIHZlcnNpb24gZ2xvYiBtdXN0IGVuZCB3aXRoIGEgYCpgOyBzdWZmaXhlcyBzdWNoIGFzIGB0YCBhcmUgbm90IHlldCBzdXBwb3J0ZWQiCiAgICAgICAgKQoKICAgIG1ham9yX3ZlcnNpb24gPSBweV92ZXJzaW9uX2dsb2JbMl0KICAgIGlmIG1ham9yX3ZlcnNpb24gIT0gIioiOgogICAgICAgIHB5dGhvbl92ZXJzaW9ucyA9IFsKICAgICAgICAgICAgcHl0aG9uX3ZlcnNpb24KICAgICAgICAgICAgZm9yIHB5dGhvbl92ZXJzaW9uIGluIHB5dGhvbl92ZXJzaW9ucwogICAgICAgICAgICBpZiBweXRob25fdmVyc2lvbi5tYWpvciA9PSBpbnQobWFqb3JfdmVyc2lvbikKICAgICAgICBdCgogICAgICAgIG1pbm9yX3ZlcnNpb24gPSBweV92ZXJzaW9uX2dsb2JbMzpdCiAgICAgICAgaWYgbWlub3JfdmVyc2lvbl9zcGVjaWZpZXIgOj0gbWlub3JfdmVyc2lvbi5zcGxpdCgiKiIpWzBdICE9ICIqIjoKICAgICAgICAgICAgbWlub3JfdmVyc2lvbl9iYXNlID0gaW50KG1pbm9yX3ZlcnNpb25fc3BlY2lmaWVyKSAqIDEwCiAgICAgICAgICAgIHB5dGhvbl92ZXJzaW9ucyA9IFsKICAgICAgICAgICAgICAgIHB5dGhvbl92ZXJzaW9uCiAgICAgICAgICAgICAgICBmb3IgcHl0aG9uX3ZlcnNpb24gaW4gcHl0aG9uX3ZlcnNpb25zCiAgICAgICAgICAgICAgICBpZiBtaW5vcl92ZXJzaW9uX2Jhc2UgPD0gcHl0aG9uX3ZlcnNpb24ubWlub3IgPCBtaW5vcl92ZXJzaW9uX2Jhc2UgKyAxMAogICAgICAgICAgICBdCgogICAgcmV0dXJuIFsKICAgICAgICAoCiAgICAgICAgICAgIGYicHl7cHl0aG9uX3ZlcnNpb24ubWFqb3J9e3B5dGhvbl92ZXJzaW9uLm1pbm9yfSIKICAgICAgICAgICAgKyAoZiIteyctJy5qb2luKHRveGVudl9mYWN0b3JzWzE6XSl9IiBpZiBsZW4odG94ZW52X2ZhY3RvcnMpID4gMSBlbHNlICIiKSwKICAgICAgICAgICAgc3RyKHB5dGhvbl92ZXJzaW9uKSwKICAgICAgICApCiAgICAgICAgZm9yIHB5dGhvbl92ZXJzaW9uIGluIHB5dGhvbl92ZXJzaW9ucwogICAgXQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBsb2FkX3RveF90YXJnZXRzKCkK + TOX_MATRIX_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj49My4xMiwgPDMuMTMiCiMgZGVwZW5kZW5jaWVzID0gWwojICAgICAiY2xpY2s9PTguMi4xIiwKIyAgICAgInBhY2thZ2luZz09MjUuMCIsCiMgICAgICJweXlhbWw9PTYuMC4yIiwKIyBdCiMgLy8vCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgcmUKaW1wb3J0IHdhcm5pbmdzCmZyb20gY29weSBpbXBvcnQgY29weQoKaW1wb3J0IGNsaWNrCmltcG9ydCB5YW1sCmZyb20gcGFja2FnaW5nLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KCgpAY2xpY2suY29tbWFuZCgpCkBjbGljay5vcHRpb24oIi0tZW52cyIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tbGlicmFyaWVzIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1wb3NhcmdzIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS10b3hkZXBzIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS10b3hhcmdzIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1weXRlc3QiLCBkZWZhdWx0PSJ0cnVlIikKQGNsaWNrLm9wdGlvbigiLS1weXRlc3QtcmVzdWx0cy1zdW1tYXJ5IiwgZGVmYXVsdD0iZmFsc2UiKQpAY2xpY2sub3B0aW9uKCItLWNvdmVyYWdlIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1jb25kYSIsIGRlZmF1bHQ9ImF1dG8iKQpAY2xpY2sub3B0aW9uKCItLXNldGVudiIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tZGlzcGxheSIsIGRlZmF1bHQ9ImZhbHNlIikKQGNsaWNrLm9wdGlvbigiLS1jYWNoZS1wYXRoIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1jYWNoZS1rZXkiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLWNhY2hlLXJlc3RvcmUta2V5cyIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tYXJ0aWZhY3QtcGF0aCIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tYXJ0aWZhY3QtYXJjaGl2ZSIsIGRlZmF1bHQ9InRydWUiKQpAY2xpY2sub3B0aW9uKCItLWFydGlmYWN0LWluY2x1ZGUtaGlkZGVuLWZpbGVzIiwgZGVmYXVsdD0iZmFsc2UiKQpAY2xpY2sub3B0aW9uKCItLWFydGlmYWN0LWlmLW5vLWZpbGVzLWZvdW5kIiwgZGVmYXVsdD0id2FybiIpCkBjbGljay5vcHRpb24oIi0tcnVucy1vbiIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tZGVmYXVsdC1weXRob24iLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLXRpbWVvdXQtbWludXRlcyIsIGRlZmF1bHQ9IjM2MCIpCkBjbGljay5vcHRpb24oIi0tc3VwcG9ydGVkLXB5dGhvbnMiLCBkZWZhdWx0PSdbIjMiXScpCmRlZiBsb2FkX3RveF90YXJnZXRzKAogICAgZW52cywKICAgIGxpYnJhcmllcywKICAgIHBvc2FyZ3MsCiAgICB0b3hkZXBzLAogICAgdG94YXJncywKICAgIHB5dGVzdCwKICAgIHB5dGVzdF9yZXN1bHRzX3N1bW1hcnksCiAgICBjb3ZlcmFnZSwKICAgIGNvbmRhLAogICAgc2V0ZW52LAogICAgZGlzcGxheSwKICAgIGNhY2hlX3BhdGgsCiAgICBjYWNoZV9rZXksCiAgICBjYWNoZV9yZXN0b3JlX2tleXMsCiAgICBhcnRpZmFjdF9wYXRoLAogICAgYXJ0aWZhY3RfYXJjaGl2ZSwKICAgIGFydGlmYWN0X2luY2x1ZGVfaGlkZGVuX2ZpbGVzLAogICAgYXJ0aWZhY3RfaWZfbm9fZmlsZXNfZm91bmQsCiAgICBydW5zX29uLAogICAgZGVmYXVsdF9weXRob24sCiAgICB0aW1lb3V0X21pbnV0ZXMsCiAgICBzdXBwb3J0ZWRfcHl0aG9ucywKKToKICAgICIiIlNjcmlwdCB0byBsb2FkIHRveCB0YXJnZXRzIGZvciBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvdy4iIiIKCiAgICBpZiBub3Qgc3VwcG9ydGVkX3B5dGhvbnM6CiAgICAgICAgc3VwcG9ydGVkX3B5dGhvbnMgPSBbJzMnXQogICAgZWxpZiBpc2luc3RhbmNlKHN1cHBvcnRlZF9weXRob25zLCBzdHIpOgogICAgICAgIHN1cHBvcnRlZF9weXRob25zID0ganNvbi5sb2FkcyhzdXBwb3J0ZWRfcHl0aG9ucykKCiAgICAjIExvYWQgZW52cyBjb25maWcKICAgIGVudnMgPSB5YW1sLmxvYWQoZW52cy5yZXBsYWNlKCJcXG4iLCAiXG4iKSwgTG9hZGVyPXlhbWwuQmFzZUxvYWRlcikKICAgIHByaW50KGpzb24uZHVtcHMoZW52cywgaW5kZW50PTIpKQoKICAgICMgTG9hZCBnbG9iYWwgbGlicmFyaWVzIGNvbmZpZwogICAgZ2xvYmFsX2xpYnJhcmllcyA9IHsKICAgICAgICAiYnJldyI6IFtdLAogICAgICAgICJicmV3LWNhc2siOiBbXSwKICAgICAgICAiYXB0IjogW10sCiAgICAgICAgImNob2NvIjogW10sCiAgICB9CiAgICBsaWJyYXJpZXMgPSB5YW1sLmxvYWQobGlicmFyaWVzLCBMb2FkZXI9eWFtbC5CYXNlTG9hZGVyKQogICAgaWYgbGlicmFyaWVzIGlzIG5vdCBOb25lOgogICAgICAgIGdsb2JhbF9saWJyYXJpZXMudXBkYXRlKGxpYnJhcmllcykKICAgIHByaW50KGpzb24uZHVtcHMoZ2xvYmFsX2xpYnJhcmllcywgaW5kZW50PTIpKQoKICAgICMgRGVmYXVsdCBpbWFnZXMgdG8gdXNlIGZvciBydW5uZXJzCiAgICBkZWZhdWx0X3J1bnNfb24gPSB7CiAgICAgICAgImxpbnV4IjogInVidW50dS1sYXRlc3QiLAogICAgICAgICJtYWNvcyI6ICJtYWNvcy1sYXRlc3QiLAogICAgICAgICJ3aW5kb3dzIjogIndpbmRvd3MtbGF0ZXN0IiwKICAgIH0KICAgIGN1c3RvbV9ydW5zX29uID0geWFtbC5sb2FkKHJ1bnNfb24sIExvYWRlcj15YW1sLkJhc2VMb2FkZXIpCiAgICBpZiBpc2luc3RhbmNlKGN1c3RvbV9ydW5zX29uLCBkaWN0KToKICAgICAgICBkZWZhdWx0X3J1bnNfb24udXBkYXRlKGN1c3RvbV9ydW5zX29uKQogICAgcHJpbnQoanNvbi5kdW1wcyhkZWZhdWx0X3J1bnNfb24sIGluZGVudD0yKSkKCiAgICAjIERlZmF1bHQgc3RyaW5nIHBhcmFtZXRlcnMgd2hpY2ggY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IGVhY2ggZW52CiAgICBzdHJpbmdfcGFyYW1ldGVycyA9IHsKICAgICAgICAicG9zYXJncyI6IHBvc2FyZ3MsCiAgICAgICAgInRveGRlcHMiOiB0b3hkZXBzLAogICAgICAgICJ0b3hhcmdzIjogdG94YXJncywKICAgICAgICAicHl0ZXN0IjogcHl0ZXN0LAogICAgICAgICJweXRlc3QtcmVzdWx0cy1zdW1tYXJ5IjogcHl0ZXN0X3Jlc3VsdHNfc3VtbWFyeSwKICAgICAgICAiY292ZXJhZ2UiOiBjb3ZlcmFnZSwKICAgICAgICAiY29uZGEiOiBjb25kYSwKICAgICAgICAic2V0ZW52Ijogc2V0ZW52LAogICAgICAgICJkaXNwbGF5IjogZGlzcGxheSwKICAgICAgICAiY2FjaGUtcGF0aCI6IGNhY2hlX3BhdGgsCiAgICAgICAgImNhY2hlLWtleSI6IGNhY2hlX2tleSwKICAgICAgICAiY2FjaGUtcmVzdG9yZS1rZXlzIjogY2FjaGVfcmVzdG9yZV9rZXlzLAogICAgICAgICJhcnRpZmFjdC1wYXRoIjogYXJ0aWZhY3RfcGF0aCwKICAgICAgICAiYXJ0aWZhY3QtYXJjaGl2ZSI6IGFydGlmYWN0X2FyY2hpdmUsCiAgICAgICAgImFydGlmYWN0LWluY2x1ZGUtaGlkZGVuLWZpbGVzIjogYXJ0aWZhY3RfaW5jbHVkZV9oaWRkZW5fZmlsZXMsCiAgICAgICAgImFydGlmYWN0LWlmLW5vLWZpbGVzLWZvdW5kIjogYXJ0aWZhY3RfaWZfbm9fZmlsZXNfZm91bmQsCiAgICAgICAgInRpbWVvdXQtbWludXRlcyI6IHRpbWVvdXRfbWludXRlcywKICAgIH0KCiAgICAjIENyZWF0ZSBtYXRyaXgKICAgIG1hdHJpeCA9IHsiaW5jbHVkZSI6IFtdfQogICAgZm9yIGVudiBpbiBlbnZzOgogICAgICAgIG1hdHJpeF9pdGVtID0gZ2V0X21hdHJpeF9pdGVtKAogICAgICAgICAgICBlbnYsCiAgICAgICAgICAgIGdsb2JhbF9saWJyYXJpZXM9Z2xvYmFsX2xpYnJhcmllcywKICAgICAgICAgICAgZ2xvYmFsX3N0cmluZ19wYXJhbWV0ZXJzPXN0cmluZ19wYXJhbWV0ZXJzLAogICAgICAgICAgICBydW5zX29uPWRlZmF1bHRfcnVuc19vbiwKICAgICAgICAgICAgZGVmYXVsdF9weXRob249ZGVmYXVsdF9weXRob24sCiAgICAgICAgKQoKICAgICAgICAjIGNoZWNrIGlmIHdlIG5lZWQgdG8gZXhwYW5kIHB5dGhvbiB2ZXJzaW9ucyBmcm9tIGEgZ2xvYiAoaS5lLiBweSosIHB5MyosIHB5MzEqLCBldGMuKQogICAgICAgIHRveGVudiA9IG1hdHJpeF9pdGVtWyJ0b3hlbnYiXQogICAgICAgIGlmIHRveGVudi5zdGFydHN3aXRoKCJweSIpIGFuZCAiKiIgaW4gdG94ZW52LnNwbGl0KCItIilbMF06CiAgICAgICAgICAgIHRveGVudnMgPSBleHBhbmRfcHl0aG9uX3ZlcnNpb25zKHRveGVudiwgcHl0aG9uX3ZlcnNpb25zPXN1cHBvcnRlZF9weXRob25zKQoKICAgICAgICAgICAgZm9yIGV4cGFuZGVkX3RveGVudiwgcHl0aG9uX3ZlcnNpb24gaW4gdG94ZW52czoKICAgICAgICAgICAgICAgIGV4cGFuZGVkX21hdHJpeF9pdGVtID0gY29weShtYXRyaXhfaXRlbSkKICAgICAgICAgICAgICAgIGV4cGFuZGVkX21hdHJpeF9pdGVtWyJ0b3hlbnYiXSA9IGV4cGFuZGVkX3RveGVudgogICAgICAgICAgICAgICAgZXhwYW5kZWRfbWF0cml4X2l0ZW1bIm5hbWUiXSA9IGV4cGFuZGVkX21hdHJpeF9pdGVtWyJuYW1lIl0ucmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICB0b3hlbnYsIGV4cGFuZGVkX3RveGVudgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgZXhwYW5kZWRfbWF0cml4X2l0ZW1bInB5dGhvbl92ZXJzaW9uIl0gPSBweXRob25fdmVyc2lvbgogICAgICAgICAgICAgICAgbWF0cml4WyJpbmNsdWRlIl0uYXBwZW5kKGV4cGFuZGVkX21hdHJpeF9pdGVtKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG1hdHJpeFsiaW5jbHVkZSJdLmFwcGVuZChtYXRyaXhfaXRlbSkKCiAgICAjIE91dHB1dCBtYXRyaXgKICAgIHByaW50KGpzb24uZHVtcHMobWF0cml4LCBpbmRlbnQ9MikpCiAgICB3aXRoIG9wZW4ob3MuZW52aXJvblsiR0lUSFVCX09VVFBVVCJdLCAiYSIpIGFzIGY6CiAgICAgICAgZi53cml0ZShmIm1hdHJpeD17anNvbi5kdW1wcyhtYXRyaXgpfVxuIikKCgpkZWYgZ2V0X21hdHJpeF9pdGVtKGVudiwgZ2xvYmFsX2xpYnJhcmllcywgZ2xvYmFsX3N0cmluZ19wYXJhbWV0ZXJzLCBydW5zX29uLCBkZWZhdWx0X3B5dGhvbik6CgogICAgIyBkZWZpbmUgc3BlYyBmb3IgZWFjaCBtYXRyaXggaW5jbHVkZSAoKyBnbG9iYWxfc3RyaW5nX3BhcmFtZXRlcnMpCiAgICBpdGVtID0gewogICAgICAgICJvcyI6IE5vbmUsCiAgICAgICAgInRveGVudiI6IE5vbmUsCiAgICAgICAgInB5dGhvbl92ZXJzaW9uIjogTm9uZSwKICAgICAgICAibmFtZSI6IE5vbmUsCiAgICAgICAgInB5dGVzdF9mbGFnIjogTm9uZSwKICAgICAgICAibGlicmFyaWVzX2JyZXciOiBOb25lLAogICAgICAgICJsaWJyYXJpZXNfYnJld19jYXNrIjogTm9uZSwKICAgICAgICAibGlicmFyaWVzX2FwdCI6IE5vbmUsCiAgICAgICAgImxpYnJhcmllc19jaG9jbyI6IE5vbmUsCiAgICAgICAgImNhY2hlLXBhdGgiOiBOb25lLAogICAgICAgICJjYWNoZS1rZXkiOiBOb25lLAogICAgICAgICJjYWNoZS1yZXN0b3JlLWtleXMiOiBOb25lLAogICAgICAgICJhcnRpZmFjdC1uYW1lIjogTm9uZSwKICAgICAgICAiYXJ0aWZhY3QtcGF0aCI6IE5vbmUsCiAgICAgICAgImFydGlmYWN0LWFyY2hpdmUiOiBOb25lLAogICAgICAgICJhcnRpZmFjdC1pbmNsdWRlLWhpZGRlbi1maWxlcyI6IE5vbmUsCiAgICAgICAgImFydGlmYWN0LWlmLW5vLWZpbGVzLWZvdW5kIjogTm9uZSwKICAgICAgICAidGltZW91dC1taW51dGVzIjogTm9uZSwKICAgIH0KICAgIGZvciBzdHJpbmdfcGFyYW0sIGRlZmF1bHQgaW4gZ2xvYmFsX3N0cmluZ19wYXJhbWV0ZXJzLml0ZW1zKCk6CiAgICAgICAgZW52X3ZhbHVlID0gZW52LmdldChzdHJpbmdfcGFyYW0pCiAgICAgICAgaXRlbVtzdHJpbmdfcGFyYW1dID0gZGVmYXVsdCBpZiBlbnZfdmFsdWUgaXMgTm9uZSBlbHNlIGVudl92YWx1ZQoKICAgICMgc2V0IG9zIGFuZCB0b3hlbnYKICAgIGZvciBrLCB2IGluIHJ1bnNfb24uaXRlbXMoKToKICAgICAgICBpZiBrIGluIGVudjoKICAgICAgICAgICAgcGxhdGZvcm0gPSBrCiAgICAgICAgICAgIGl0ZW1bIm9zIl0gPSBlbnYuZ2V0KCJydW5zLW9uIiwgdikKICAgICAgICAgICAgaXRlbVsidG94ZW52Il0gPSBlbnZba10KICAgIGFzc2VydCBpdGVtWyJvcyJdIGlzIG5vdCBOb25lIGFuZCBpdGVtWyJ0b3hlbnYiXSBpcyBub3QgTm9uZQoKICAgICMgc2V0IHB5dGhvbl92ZXJzaW9uCiAgICBweXRob25fdmVyc2lvbiA9IGVudi5nZXQoInB5dGhvbi12ZXJzaW9uIikKICAgIG0gPSByZS5zZWFyY2goIl5weSgyfDMpKFswLTldK3Q/KSIsIGl0ZW1bInRveGVudiJdKQogICAgaWYgcHl0aG9uX3ZlcnNpb24gaXMgbm90IE5vbmU6CiAgICAgICAgaXRlbVsicHl0aG9uX3ZlcnNpb24iXSA9IHB5dGhvbl92ZXJzaW9uCiAgICBlbGlmIG0gaXMgbm90IE5vbmU6CiAgICAgICAgbWFqb3IsIG1pbm9yID0gbS5ncm91cHMoKQogICAgICAgIGl0ZW1bInB5dGhvbl92ZXJzaW9uIl0gPSBmInttYWpvcn0ue21pbm9yfSIKICAgIGVsc2U6CiAgICAgICAgaXRlbVsicHl0aG9uX3ZlcnNpb24iXSA9IGVudi5nZXQoImRlZmF1bHRfcHl0aG9uIikgb3IgZGVmYXVsdF9weXRob24KCiAgICAjIHNldCBuYW1lCiAgICBpdGVtWyJuYW1lIl0gPSBlbnYuZ2V0KCJuYW1lIikgb3IgZiJ7aXRlbVsndG94ZW52J119ICh7aXRlbVsnb3MnXX0pIgoKICAgICMgc2V0IGFydGlmYWN0LW5hbWUgKHJlcGxhY2UgaW52YWxpZCBwYXRoIGNoYXJhY3RlcnMpCiAgICBpdGVtWyJhcnRpZmFjdC1uYW1lIl0gPSByZS5zdWIociJbXFwgLzo8PnwqP1wiJ10iLCAiLSIsIGl0ZW1bIm5hbWUiXSkKICAgIGl0ZW1bImFydGlmYWN0LW5hbWUiXSA9IHJlLnN1YihyIi0rIiwgIi0iLCBpdGVtWyJhcnRpZmFjdC1uYW1lIl0pCgogICAgIyBzZXQgcHl0ZXN0X2ZsYWcKICAgIGl0ZW1bInB5dGVzdF9mbGFnIl0gPSAiIgogICAgc2VwID0gciJcXCIgaWYgcGxhdGZvcm0gPT0gIndpbmRvd3MiIGVsc2UgIi8iCiAgICBpZiBpdGVtWyJweXRlc3QiXSA9PSAidHJ1ZSI6CiAgICAgICAgaWYgaXRlbVsicHl0ZXN0LXJlc3VsdHMtc3VtbWFyeSJdID09ICJ0cnVlIjoKICAgICAgICAgICAgaXRlbVsicHl0ZXN0X2ZsYWciXSArPSByZiItLWp1bml0eG1sICR7e0dJVEhVQl9XT1JLU1BBQ0V9fXtzZXB9cmVzdWx0cy54bWwgIgoKICAgICMgc2V0IGxpYnJhcmllcwogICAgZW52X2xpYnJhcmllcyA9IGVudi5nZXQoImxpYnJhcmllcyIpCiAgICBpZiBpc2luc3RhbmNlKGVudl9saWJyYXJpZXMsIHN0cikgYW5kIGxlbihlbnZfbGlicmFyaWVzLnN0cmlwKCkpID09IDA6CiAgICAgICAgZW52X2xpYnJhcmllcyA9IHt9ICAjIG5vIGxpYnJhcmllcyByZXF1ZXN0ZWQgZm9yIGVudmlyb25tZW50CiAgICBsaWJyYXJpZXMgPSBnbG9iYWxfbGlicmFyaWVzIGlmIGVudl9saWJyYXJpZXMgaXMgTm9uZSBlbHNlIGVudl9saWJyYXJpZXMKICAgIGZvciBtYW5hZ2VyIGluIFsiYnJldyIsICJicmV3X2Nhc2siLCAiYXB0IiwgImNob2NvIl06CiAgICAgICAgaXRlbVtmImxpYnJhcmllc197bWFuYWdlcn0iXSA9ICIgIi5qb2luKGxpYnJhcmllcy5nZXQobWFuYWdlciwgW10pKQoKICAgIGlmIGl0ZW1bImNvbmRhIl06CiAgICAgICAgd2FybmluZ3Mud2FybigiYGNvbmRhYCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCIpCgogICAgICAgICMgc2V0ICJhdXRvIiBjb25kYSB2YWx1ZQogICAgICAgIGlmIGl0ZW1bImNvbmRhIl0gPT0gImF1dG8iOgogICAgICAgICAgICBpdGVtWyJjb25kYSJdID0gInRydWUiIGlmICJjb25kYSIgaW4gaXRlbVsidG94ZW52Il0gZWxzZSAiZmFsc2UiCgogICAgICAgICMgaW5qZWN0IHRveGRlcHMgZm9yIGNvbmRhCiAgICAgICAgaWYgaXRlbVsiY29uZGEiXSA9PSAidHJ1ZSIgYW5kICJ0b3gtY29uZGEiIG5vdCBpbiBpdGVtWyJ0b3hkZXBzIl0ubG93ZXIoKToKICAgICAgICAgICAgaXRlbVsidG94ZGVwcyJdID0gKCJ0b3gtY29uZGEgIiArIGl0ZW1bInRveGRlcHMiXSkuc3RyaXAoKQoKICAgICMgbWFrZSB0aW1lb3V0LW1pbnV0ZXMgYSBudW1iZXIKICAgIGl0ZW1bInRpbWVvdXQtbWludXRlcyJdID0gaW50KGl0ZW1bInRpbWVvdXQtbWludXRlcyJdKQoKICAgICMgdmVyaWZ5IHZhbHVlcwogICAgYXNzZXJ0IGl0ZW1bInB5dGVzdCJdIGluIHsidHJ1ZSIsICJmYWxzZSJ9CiAgICBhc3NlcnQgaXRlbVsiY29uZGEiXSBpbiB7InRydWUiLCAiZmFsc2UifQogICAgYXNzZXJ0IGl0ZW1bImRpc3BsYXkiXSBpbiB7InRydWUiLCAiZmFsc2UifQoKICAgIHJldHVybiBpdGVtCgoKZGVmIGV4cGFuZF9weXRob25fdmVyc2lvbnModG94ZW52OiBzdHIsIHB5dGhvbl92ZXJzaW9uczogbGlzdFtWZXJzaW9uIHwgc3RyXSkgLT4gbGlzdFsoc3RyLCBzdHIpXToKICAgICIiIgogICAgZXhwYW5kIGBweTMqYCBpbnRvIGBweTMxMWAsIGBweTMxMmAsIGBweTMxM2AsIGV0Yy4gYmFzZWQgb24gY3VycmVudGx5LXN1cHBvcnRlZCBQeXRob24gdmVyc2lvbnMKCiAgICA6cGFyYW0gdmVyc2lvbl9nbG9iOiBjYW4gYmUgYHB5KmAsIGBweTMqYCwgYHB5MzAqYCwgYHB5MzEqYCBldGMuCiAgICAiIiIKCiAgICBweXRob25fdmVyc2lvbnMgPSBbVmVyc2lvbih2ZXJzaW9uKSBmb3IgdmVyc2lvbiBpbiBweXRob25fdmVyc2lvbnNdCgogICAgdG94ZW52X2ZhY3RvcnMgPSB0b3hlbnYuc3BsaXQoIi0iKQogICAgcHlfdmVyc2lvbl9nbG9iID0gdG94ZW52X2ZhY3RvcnNbMF0KICAgIGlmIG5vdCBweV92ZXJzaW9uX2dsb2Iuc3RhcnRzd2l0aCgicHkiKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICBmJ2lucHV0ICJ7cHlfdmVyc2lvbl9nbG9ifSIgaXMgbm90IGEgUHl0aG9uIHZlcnNpb24gVG94IGZhY3RvciAobXVzdCBzdGFydCB3aXRoIGBweWApJwogICAgICAgICkKCiAgICBpZiAiKiIgbm90IGluIHB5X3ZlcnNpb25fZ2xvYjoKICAgICAgICByZXR1cm4gW3B5X3ZlcnNpb25fZ2xvYl0KCiAgICBpZiBub3QgcHlfdmVyc2lvbl9nbG9iLmVuZHN3aXRoKCIqIik6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAgICAgIlB5dGhvbiB2ZXJzaW9uIGdsb2IgbXVzdCBlbmQgd2l0aCBhIGAqYDsgc3VmZml4ZXMgc3VjaCBhcyBgdGAgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIgogICAgICAgICkKCiAgICBtYWpvcl92ZXJzaW9uID0gcHlfdmVyc2lvbl9nbG9iWzJdCiAgICBpZiBtYWpvcl92ZXJzaW9uICE9ICIqIjoKICAgICAgICBweXRob25fdmVyc2lvbnMgPSBbCiAgICAgICAgICAgIHB5dGhvbl92ZXJzaW9uCiAgICAgICAgICAgIGZvciBweXRob25fdmVyc2lvbiBpbiBweXRob25fdmVyc2lvbnMKICAgICAgICAgICAgaWYgcHl0aG9uX3ZlcnNpb24ubWFqb3IgPT0gaW50KG1ham9yX3ZlcnNpb24pCiAgICAgICAgXQoKICAgICAgICBtaW5vcl92ZXJzaW9uID0gcHlfdmVyc2lvbl9nbG9iWzM6XQogICAgICAgIGlmIG1pbm9yX3ZlcnNpb25fc3BlY2lmaWVyIDo9IG1pbm9yX3ZlcnNpb24uc3BsaXQoIioiKVswXSAhPSAiKiI6CiAgICAgICAgICAgIG1pbm9yX3ZlcnNpb25fYmFzZSA9IGludChtaW5vcl92ZXJzaW9uX3NwZWNpZmllcikgKiAxMAogICAgICAgICAgICBweXRob25fdmVyc2lvbnMgPSBbCiAgICAgICAgICAgICAgICBweXRob25fdmVyc2lvbgogICAgICAgICAgICAgICAgZm9yIHB5dGhvbl92ZXJzaW9uIGluIHB5dGhvbl92ZXJzaW9ucwogICAgICAgICAgICAgICAgaWYgbWlub3JfdmVyc2lvbl9iYXNlIDw9IHB5dGhvbl92ZXJzaW9uLm1pbm9yIDwgbWlub3JfdmVyc2lvbl9iYXNlICsgMTAKICAgICAgICAgICAgXQoKICAgIHJldHVybiBbCiAgICAgICAgKAogICAgICAgICAgICBmInB5e3B5dGhvbl92ZXJzaW9uLm1ham9yfXtweXRob25fdmVyc2lvbi5taW5vcn0iCiAgICAgICAgICAgICsgKGYiLXsnLScuam9pbih0b3hlbnZfZmFjdG9yc1sxOl0pfSIgaWYgbGVuKHRveGVudl9mYWN0b3JzKSA+IDEgZWxzZSAiIiksCiAgICAgICAgICAgIHN0cihweXRob25fdmVyc2lvbiksCiAgICAgICAgKQogICAgICAgIGZvciBweXRob25fdmVyc2lvbiBpbiBweXRob25fdmVyc2lvbnMKICAgIF0KCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbG9hZF90b3hfdGFyZ2V0cygpCg== - run: cat tox_matrix.py - if: contains(inputs.envs, '*') id: supported-pythons @@ -256,7 +256,7 @@ jobs: uv run set_env.py "${MATRIX_SETENV}" rm set_env.py env: - SET_ENV_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj09My4xMiIKIyBkZXBlbmRlbmNpZXMgPSBbCiMgICAgICJweXlhbWw9PTYuMC4yIiwKIyBdCiMgLy8vCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgc3lzCgppbXBvcnQgeWFtbAoKR0lUSFVCX0VOViA9IG9zLmdldGVudigiR0lUSFVCX0VOViIpCmlmIEdJVEhVQl9FTlYgaXMgTm9uZToKICAgIHJhaXNlIFZhbHVlRXJyb3IoIkdJVEhVQl9FTlYgbm90IHNldC4gTXVzdCBiZSBydW4gaW5zaWRlIEdpdEh1YiBBY3Rpb25zLiIpCgpERUxJTUlURVIgPSAiRU9GIgoKCmRlZiBzZXRfZW52KGVudik6CgogICAgZW52ID0geWFtbC5sb2FkKGVudiwgTG9hZGVyPXlhbWwuQmFzZUxvYWRlcikKICAgIHByaW50KGpzb24uZHVtcHMoZW52LCBpbmRlbnQ9MikpCgogICAgaWYgbm90IGlzaW5zdGFuY2UoZW52LCBkaWN0KToKICAgICAgICB0aXRsZSA9ICJgZW52YCBtdXN0IGJlIG1hcHBpbmciCiAgICAgICAgbWVzc2FnZSA9IGYiYGVudmAgbXVzdCBiZSBtYXBwaW5nIG9mIGVudiB2YXJpYWJsZXMgdG8gdmFsdWVzLCBnb3QgdHlwZSB7dHlwZShlbnYpfSIKICAgICAgICBwcmludChmIjo6ZXJyb3IgdGl0bGU9e3RpdGxlfTo6e21lc3NhZ2V9IikKICAgICAgICBleGl0KDEpCgogICAgZm9yIGssIHYgaW4gZW52Lml0ZW1zKCk6CgogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHYsIHN0cik6CiAgICAgICAgICAgIHRpdGxlID0gImBlbnZgIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MiCiAgICAgICAgICAgIG1lc3NhZ2UgPSBmImBlbnZgIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MsIGJ1dCB2YWx1ZSBvZiB7a30gaGFzIHR5cGUge3R5cGUodil9IgogICAgICAgICAgICBwcmludChmIjo6ZXJyb3IgdGl0bGU9e3RpdGxlfTo6e21lc3NhZ2V9IikKICAgICAgICAgICAgZXhpdCgxKQoKICAgICAgICB2ID0gdi5zcGxpdCgiXG4iKQoKICAgICAgICB3aXRoIG9wZW4oR0lUSFVCX0VOViwgImEiKSBhcyBmOgogICAgICAgICAgICBpZiBsZW4odikgPT0gMToKICAgICAgICAgICAgICAgIGYud3JpdGUoZiJ7a309e3ZbMF19XG4iKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdjoKICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbGluZS5zdHJpcCgpICE9IERFTElNSVRFUgogICAgICAgICAgICAgICAgZi53cml0ZShmIntrfTw8e0RFTElNSVRFUn1cbiIpCiAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB2OgogICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZiJ7bGluZX1cbiIpCiAgICAgICAgICAgICAgICBmLndyaXRlKGYie0RFTElNSVRFUn1cbiIpCgogICAgICAgIHByaW50KGYie2t9IHdyaXR0ZW4gdG8gR0lUSFVCX0VOViIpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHNldF9lbnYoc3lzLmFyZ3ZbMV0pCg== + SET_ENV_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj49My4xMiwgPDMuMTMiCiMgZGVwZW5kZW5jaWVzID0gWwojICAgICAicHl5YW1sPT02LjAuMiIsCiMgXQojIC8vLwppbXBvcnQganNvbgppbXBvcnQgb3MKaW1wb3J0IHN5cwoKaW1wb3J0IHlhbWwKCkdJVEhVQl9FTlYgPSBvcy5nZXRlbnYoIkdJVEhVQl9FTlYiKQppZiBHSVRIVUJfRU5WIGlzIE5vbmU6CiAgICByYWlzZSBWYWx1ZUVycm9yKCJHSVRIVUJfRU5WIG5vdCBzZXQuIE11c3QgYmUgcnVuIGluc2lkZSBHaXRIdWIgQWN0aW9ucy4iKQoKREVMSU1JVEVSID0gIkVPRiIKCgpkZWYgc2V0X2VudihlbnYpOgoKICAgIGVudiA9IHlhbWwubG9hZChlbnYsIExvYWRlcj15YW1sLkJhc2VMb2FkZXIpCiAgICBwcmludChqc29uLmR1bXBzKGVudiwgaW5kZW50PTIpKQoKICAgIGlmIG5vdCBpc2luc3RhbmNlKGVudiwgZGljdCk6CiAgICAgICAgdGl0bGUgPSAiYGVudmAgbXVzdCBiZSBtYXBwaW5nIgogICAgICAgIG1lc3NhZ2UgPSBmImBlbnZgIG11c3QgYmUgbWFwcGluZyBvZiBlbnYgdmFyaWFibGVzIHRvIHZhbHVlcywgZ290IHR5cGUge3R5cGUoZW52KX0iCiAgICAgICAgcHJpbnQoZiI6OmVycm9yIHRpdGxlPXt0aXRsZX06OnttZXNzYWdlfSIpCiAgICAgICAgZXhpdCgxKQoKICAgIGZvciBrLCB2IGluIGVudi5pdGVtcygpOgoKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2LCBzdHIpOgogICAgICAgICAgICB0aXRsZSA9ICJgZW52YCB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzIgogICAgICAgICAgICBtZXNzYWdlID0gZiJgZW52YCB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzLCBidXQgdmFsdWUgb2Yge2t9IGhhcyB0eXBlIHt0eXBlKHYpfSIKICAgICAgICAgICAgcHJpbnQoZiI6OmVycm9yIHRpdGxlPXt0aXRsZX06OnttZXNzYWdlfSIpCiAgICAgICAgICAgIGV4aXQoMSkKCiAgICAgICAgdiA9IHYuc3BsaXQoIlxuIikKCiAgICAgICAgd2l0aCBvcGVuKEdJVEhVQl9FTlYsICJhIikgYXMgZjoKICAgICAgICAgICAgaWYgbGVuKHYpID09IDE6CiAgICAgICAgICAgICAgICBmLndyaXRlKGYie2t9PXt2WzBdfVxuIikKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHY6CiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGxpbmUuc3RyaXAoKSAhPSBERUxJTUlURVIKICAgICAgICAgICAgICAgIGYud3JpdGUoZiJ7a308PHtERUxJTUlURVJ9XG4iKQogICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdjoKICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGYie2xpbmV9XG4iKQogICAgICAgICAgICAgICAgZi53cml0ZShmIntERUxJTUlURVJ9XG4iKQoKICAgICAgICBwcmludChmIntrfSB3cml0dGVuIHRvIEdJVEhVQl9FTlYiKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBzZXRfZW52KHN5cy5hcmd2WzFdKQo= MATRIX_SETENV: ${{ matrix.setenv }} - name: Setup headless display diff --git a/tools/load_build_targets.py b/tools/load_build_targets.py index 561e69e3..14dfcac1 100644 --- a/tools/load_build_targets.py +++ b/tools/load_build_targets.py @@ -1,5 +1,5 @@ -# /// script -# requires-python = "==3.12" +# /// script +# requires-python = ">=3.12, <3.13" # dependencies = [ # "click==8.2.1", # "pyyaml==6.0.2", diff --git a/tools/set_env.py b/tools/set_env.py index ae3a145b..b6c79ac8 100644 --- a/tools/set_env.py +++ b/tools/set_env.py @@ -1,5 +1,5 @@ # /// script -# requires-python = "==3.12" +# requires-python = ">=3.12, <3.13" # dependencies = [ # "pyyaml==6.0.2", # ] diff --git a/tools/tox_matrix.py b/tools/tox_matrix.py index 441227e2..1b00dec0 100644 --- a/tools/tox_matrix.py +++ b/tools/tox_matrix.py @@ -1,5 +1,5 @@ # /// script -# requires-python = "==3.12" +# requires-python = ">=3.12, <3.13" # dependencies = [ # "click==8.2.1", # "packaging==25.0",