diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml index c33ed64..5b7dc5a 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: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj49My4xMiwgPDMuMTMiCiMgZGVwZW5kZW5jaWVzID0gWwojICAgICAiY2xpY2s9PTguMi4xIiwKIyAgICAgInBhY2thZ2luZz09MjUuMCIsCiMgICAgICJweXlhbWw9PTYuMC4yIiwKIyBdCiMgLy8vCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgcmUKaW1wb3J0IHdhcm5pbmdzCmZyb20gY29weSBpbXBvcnQgY29weQoKaW1wb3J0IGNsaWNrCmltcG9ydCB5YW1sCmZyb20gcGFja2FnaW5nLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KCgpAY2xpY2suY29tbWFuZCgpCkBjbGljay5vcHRpb24oIi0tZW52cyIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tbGlicmFyaWVzIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1wb3NhcmdzIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS10b3hkZXBzIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS10b3hhcmdzIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1weXRlc3QiLCBkZWZhdWx0PSJ0cnVlIikKQGNsaWNrLm9wdGlvbigiLS1weXRlc3QtcmVzdWx0cy1zdW1tYXJ5IiwgZGVmYXVsdD0iZmFsc2UiKQpAY2xpY2sub3B0aW9uKCItLWNvdmVyYWdlIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1jb25kYSIsIGRlZmF1bHQ9ImF1dG8iKQpAY2xpY2sub3B0aW9uKCItLXNldGVudiIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tZGlzcGxheSIsIGRlZmF1bHQ9ImZhbHNlIikKQGNsaWNrLm9wdGlvbigiLS1jYWNoZS1wYXRoIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1jYWNoZS1rZXkiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLWNhY2hlLXJlc3RvcmUta2V5cyIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tYXJ0aWZhY3QtcGF0aCIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tYXJ0aWZhY3QtYXJjaGl2ZSIsIGRlZmF1bHQ9InRydWUiKQpAY2xpY2sub3B0aW9uKCItLWFydGlmYWN0LWluY2x1ZGUtaGlkZGVuLWZpbGVzIiwgZGVmYXVsdD0iZmFsc2UiKQpAY2xpY2sub3B0aW9uKCItLWFydGlmYWN0LWlmLW5vLWZpbGVzLWZvdW5kIiwgZGVmYXVsdD0id2FybiIpCkBjbGljay5vcHRpb24oIi0tcnVucy1vbiIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tZGVmYXVsdC1weXRob24iLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLXRpbWVvdXQtbWludXRlcyIsIGRlZmF1bHQ9IjM2MCIpCkBjbGljay5vcHRpb24oIi0tc3VwcG9ydGVkLXB5dGhvbnMiLCBkZWZhdWx0PSdbIjMiXScpCmRlZiBsb2FkX3RveF90YXJnZXRzKAogICAgZW52cywKICAgIGxpYnJhcmllcywKICAgIHBvc2FyZ3MsCiAgICB0b3hkZXBzLAogICAgdG94YXJncywKICAgIHB5dGVzdCwKICAgIHB5dGVzdF9yZXN1bHRzX3N1bW1hcnksCiAgICBjb3ZlcmFnZSwKICAgIGNvbmRhLAogICAgc2V0ZW52LAogICAgZGlzcGxheSwKICAgIGNhY2hlX3BhdGgsCiAgICBjYWNoZV9rZXksCiAgICBjYWNoZV9yZXN0b3JlX2tleXMsCiAgICBhcnRpZmFjdF9wYXRoLAogICAgYXJ0aWZhY3RfYXJjaGl2ZSwKICAgIGFydGlmYWN0X2luY2x1ZGVfaGlkZGVuX2ZpbGVzLAogICAgYXJ0aWZhY3RfaWZfbm9fZmlsZXNfZm91bmQsCiAgICBydW5zX29uLAogICAgZGVmYXVsdF9weXRob24sCiAgICB0aW1lb3V0X21pbnV0ZXMsCiAgICBzdXBwb3J0ZWRfcHl0aG9ucywKKToKICAgICIiIlNjcmlwdCB0byBsb2FkIHRveCB0YXJnZXRzIGZvciBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvdy4iIiIKCiAgICBpZiBub3Qgc3VwcG9ydGVkX3B5dGhvbnM6CiAgICAgICAgc3VwcG9ydGVkX3B5dGhvbnMgPSBbJzMnXQogICAgZWxpZiBpc2luc3RhbmNlKHN1cHBvcnRlZF9weXRob25zLCBzdHIpOgogICAgICAgIHN1cHBvcnRlZF9weXRob25zID0ganNvbi5sb2FkcyhzdXBwb3J0ZWRfcHl0aG9ucykKCiAgICAjIExvYWQgZW52cyBjb25maWcKICAgIGVudnMgPSB5YW1sLmxvYWQoZW52cy5yZXBsYWNlKCJcXG4iLCAiXG4iKSwgTG9hZGVyPXlhbWwuQmFzZUxvYWRlcikKICAgIHByaW50KGpzb24uZHVtcHMoZW52cywgaW5kZW50PTIpKQoKICAgICMgTG9hZCBnbG9iYWwgbGlicmFyaWVzIGNvbmZpZwogICAgZ2xvYmFsX2xpYnJhcmllcyA9IHsKICAgICAgICAiYnJldyI6IFtdLAogICAgICAgICJicmV3LWNhc2siOiBbXSwKICAgICAgICAiYXB0IjogW10sCiAgICAgICAgImNob2NvIjogW10sCiAgICB9CiAgICBsaWJyYXJpZXMgPSB5YW1sLmxvYWQobGlicmFyaWVzLCBMb2FkZXI9eWFtbC5CYXNlTG9hZGVyKQogICAgaWYgbGlicmFyaWVzIGlzIG5vdCBOb25lOgogICAgICAgIGdsb2JhbF9saWJyYXJpZXMudXBkYXRlKGxpYnJhcmllcykKICAgIHByaW50KGpzb24uZHVtcHMoZ2xvYmFsX2xpYnJhcmllcywgaW5kZW50PTIpKQoKICAgICMgRGVmYXVsdCBpbWFnZXMgdG8gdXNlIGZvciBydW5uZXJzCiAgICBkZWZhdWx0X3J1bnNfb24gPSB7CiAgICAgICAgImxpbnV4IjogInVidW50dS1sYXRlc3QiLAogICAgICAgICJtYWNvcyI6ICJtYWNvcy1sYXRlc3QiLAogICAgICAgICJ3aW5kb3dzIjogIndpbmRvd3MtbGF0ZXN0IiwKICAgIH0KICAgIGN1c3RvbV9ydW5zX29uID0geWFtbC5sb2FkKHJ1bnNfb24sIExvYWRlcj15YW1sLkJhc2VMb2FkZXIpCiAgICBpZiBpc2luc3RhbmNlKGN1c3RvbV9ydW5zX29uLCBkaWN0KToKICAgICAgICBkZWZhdWx0X3J1bnNfb24udXBkYXRlKGN1c3RvbV9ydW5zX29uKQogICAgcHJpbnQoanNvbi5kdW1wcyhkZWZhdWx0X3J1bnNfb24sIGluZGVudD0yKSkKCiAgICAjIERlZmF1bHQgc3RyaW5nIHBhcmFtZXRlcnMgd2hpY2ggY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IGVhY2ggZW52CiAgICBzdHJpbmdfcGFyYW1ldGVycyA9IHsKICAgICAgICAicG9zYXJncyI6IHBvc2FyZ3MsCiAgICAgICAgInRveGRlcHMiOiB0b3hkZXBzLAogICAgICAgICJ0b3hhcmdzIjogdG94YXJncywKICAgICAgICAicHl0ZXN0IjogcHl0ZXN0LAogICAgICAgICJweXRlc3QtcmVzdWx0cy1zdW1tYXJ5IjogcHl0ZXN0X3Jlc3VsdHNfc3VtbWFyeSwKICAgICAgICAiY292ZXJhZ2UiOiBjb3ZlcmFnZSwKICAgICAgICAiY29uZGEiOiBjb25kYSwKICAgICAgICAic2V0ZW52Ijogc2V0ZW52LAogICAgICAgICJkaXNwbGF5IjogZGlzcGxheSwKICAgICAgICAiY2FjaGUtcGF0aCI6IGNhY2hlX3BhdGgsCiAgICAgICAgImNhY2hlLWtleSI6IGNhY2hlX2tleSwKICAgICAgICAiY2FjaGUtcmVzdG9yZS1rZXlzIjogY2FjaGVfcmVzdG9yZV9rZXlzLAogICAgICAgICJhcnRpZmFjdC1wYXRoIjogYXJ0aWZhY3RfcGF0aCwKICAgICAgICAiYXJ0aWZhY3QtYXJjaGl2ZSI6IGFydGlmYWN0X2FyY2hpdmUsCiAgICAgICAgImFydGlmYWN0LWluY2x1ZGUtaGlkZGVuLWZpbGVzIjogYXJ0aWZhY3RfaW5jbHVkZV9oaWRkZW5fZmlsZXMsCiAgICAgICAgImFydGlmYWN0LWlmLW5vLWZpbGVzLWZvdW5kIjogYXJ0aWZhY3RfaWZfbm9fZmlsZXNfZm91bmQsCiAgICAgICAgInRpbWVvdXQtbWludXRlcyI6IHRpbWVvdXRfbWludXRlcywKICAgIH0KCiAgICAjIENyZWF0ZSBtYXRyaXgKICAgIG1hdHJpeCA9IHsiaW5jbHVkZSI6IFtdfQogICAgZm9yIGVudiBpbiBlbnZzOgogICAgICAgIG1hdHJpeF9pdGVtID0gZ2V0X21hdHJpeF9pdGVtKAogICAgICAgICAgICBlbnYsCiAgICAgICAgICAgIGdsb2JhbF9saWJyYXJpZXM9Z2xvYmFsX2xpYnJhcmllcywKICAgICAgICAgICAgZ2xvYmFsX3N0cmluZ19wYXJhbWV0ZXJzPXN0cmluZ19wYXJhbWV0ZXJzLAogICAgICAgICAgICBydW5zX29uPWRlZmF1bHRfcnVuc19vbiwKICAgICAgICAgICAgZGVmYXVsdF9weXRob249ZGVmYXVsdF9weXRob24sCiAgICAgICAgKQoKICAgICAgICAjIGNoZWNrIGlmIHdlIG5lZWQgdG8gZXhwYW5kIHB5dGhvbiB2ZXJzaW9ucyBmcm9tIGEgZ2xvYiAoaS5lLiBweSosIHB5MyosIHB5MzEqLCBldGMuKQogICAgICAgIHRveGVudiA9IG1hdHJpeF9pdGVtWyJ0b3hlbnYiXQogICAgICAgIGlmIHRveGVudi5zdGFydHN3aXRoKCJweSIpIGFuZCAiKiIgaW4gdG94ZW52LnNwbGl0KCItIilbMF06CiAgICAgICAgICAgIHRveGVudnMgPSBleHBhbmRfcHl0aG9uX3ZlcnNpb25zKHRveGVudiwgcHl0aG9uX3ZlcnNpb25zPXN1cHBvcnRlZF9weXRob25zKQoKICAgICAgICAgICAgZm9yIGV4cGFuZGVkX3RveGVudiwgcHl0aG9uX3ZlcnNpb24gaW4gdG94ZW52czoKICAgICAgICAgICAgICAgIGV4cGFuZGVkX21hdHJpeF9pdGVtID0gY29weShtYXRyaXhfaXRlbSkKICAgICAgICAgICAgICAgIGV4cGFuZGVkX21hdHJpeF9pdGVtWyJ0b3hlbnYiXSA9IGV4cGFuZGVkX3RveGVudgogICAgICAgICAgICAgICAgZXhwYW5kZWRfbWF0cml4X2l0ZW1bIm5hbWUiXSA9IGV4cGFuZGVkX21hdHJpeF9pdGVtWyJuYW1lIl0ucmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICB0b3hlbnYsIGV4cGFuZGVkX3RveGVudgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgZXhwYW5kZWRfbWF0cml4X2l0ZW1bInB5dGhvbl92ZXJzaW9uIl0gPSBweXRob25fdmVyc2lvbgogICAgICAgICAgICAgICAgbWF0cml4WyJpbmNsdWRlIl0uYXBwZW5kKGV4cGFuZGVkX21hdHJpeF9pdGVtKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG1hdHJpeFsiaW5jbHVkZSJdLmFwcGVuZChtYXRyaXhfaXRlbSkKCiAgICAjIE91dHB1dCBtYXRyaXgKICAgIHByaW50KGpzb24uZHVtcHMobWF0cml4LCBpbmRlbnQ9MikpCiAgICB3aXRoIG9wZW4ob3MuZW52aXJvblsiR0lUSFVCX09VVFBVVCJdLCAiYSIpIGFzIGY6CiAgICAgICAgZi53cml0ZShmIm1hdHJpeD17anNvbi5kdW1wcyhtYXRyaXgpfVxuIikKCgpkZWYgZ2V0X21hdHJpeF9pdGVtKGVudiwgZ2xvYmFsX2xpYnJhcmllcywgZ2xvYmFsX3N0cmluZ19wYXJhbWV0ZXJzLCBydW5zX29uLCBkZWZhdWx0X3B5dGhvbik6CgogICAgIyBkZWZpbmUgc3BlYyBmb3IgZWFjaCBtYXRyaXggaW5jbHVkZSAoKyBnbG9iYWxfc3RyaW5nX3BhcmFtZXRlcnMpCiAgICBpdGVtID0gewogICAgICAgICJvcyI6IE5vbmUsCiAgICAgICAgInRveGVudiI6IE5vbmUsCiAgICAgICAgInB5dGhvbl92ZXJzaW9uIjogTm9uZSwKICAgICAgICAibmFtZSI6IE5vbmUsCiAgICAgICAgInB5dGVzdF9mbGFnIjogTm9uZSwKICAgICAgICAibGlicmFyaWVzX2JyZXciOiBOb25lLAogICAgICAgICJsaWJyYXJpZXNfYnJld19jYXNrIjogTm9uZSwKICAgICAgICAibGlicmFyaWVzX2FwdCI6IE5vbmUsCiAgICAgICAgImxpYnJhcmllc19jaG9jbyI6IE5vbmUsCiAgICAgICAgImNhY2hlLXBhdGgiOiBOb25lLAogICAgICAgICJjYWNoZS1rZXkiOiBOb25lLAogICAgICAgICJjYWNoZS1yZXN0b3JlLWtleXMiOiBOb25lLAogICAgICAgICJhcnRpZmFjdC1uYW1lIjogTm9uZSwKICAgICAgICAiYXJ0aWZhY3QtcGF0aCI6IE5vbmUsCiAgICAgICAgImFydGlmYWN0LWFyY2hpdmUiOiBOb25lLAogICAgICAgICJhcnRpZmFjdC1pbmNsdWRlLWhpZGRlbi1maWxlcyI6IE5vbmUsCiAgICAgICAgImFydGlmYWN0LWlmLW5vLWZpbGVzLWZvdW5kIjogTm9uZSwKICAgICAgICAidGltZW91dC1taW51dGVzIjogTm9uZSwKICAgIH0KICAgIGZvciBzdHJpbmdfcGFyYW0sIGRlZmF1bHQgaW4gZ2xvYmFsX3N0cmluZ19wYXJhbWV0ZXJzLml0ZW1zKCk6CiAgICAgICAgZW52X3ZhbHVlID0gZW52LmdldChzdHJpbmdfcGFyYW0pCiAgICAgICAgaXRlbVtzdHJpbmdfcGFyYW1dID0gZGVmYXVsdCBpZiBlbnZfdmFsdWUgaXMgTm9uZSBlbHNlIGVudl92YWx1ZQoKICAgICMgc2V0IG9zIGFuZCB0b3hlbnYKICAgIGZvciBrLCB2IGluIHJ1bnNfb24uaXRlbXMoKToKICAgICAgICBpZiBrIGluIGVudjoKICAgICAgICAgICAgcGxhdGZvcm0gPSBrCiAgICAgICAgICAgIGl0ZW1bIm9zIl0gPSBlbnYuZ2V0KCJydW5zLW9uIiwgdikKICAgICAgICAgICAgaXRlbVsidG94ZW52Il0gPSBlbnZba10KICAgIGFzc2VydCBpdGVtWyJvcyJdIGlzIG5vdCBOb25lIGFuZCBpdGVtWyJ0b3hlbnYiXSBpcyBub3QgTm9uZQoKICAgICMgc2V0IHB5dGhvbl92ZXJzaW9uCiAgICBweXRob25fdmVyc2lvbiA9IGVudi5nZXQoInB5dGhvbi12ZXJzaW9uIikKICAgIG0gPSByZS5zZWFyY2goIl5weSgyfDMpKFswLTldK3Q/KSIsIGl0ZW1bInRveGVudiJdKQogICAgaWYgcHl0aG9uX3ZlcnNpb24gaXMgbm90IE5vbmU6CiAgICAgICAgaXRlbVsicHl0aG9uX3ZlcnNpb24iXSA9IHB5dGhvbl92ZXJzaW9uCiAgICBlbGlmIG0gaXMgbm90IE5vbmU6CiAgICAgICAgbWFqb3IsIG1pbm9yID0gbS5ncm91cHMoKQogICAgICAgIGl0ZW1bInB5dGhvbl92ZXJzaW9uIl0gPSBmInttYWpvcn0ue21pbm9yfSIKICAgIGVsc2U6CiAgICAgICAgaXRlbVsicHl0aG9uX3ZlcnNpb24iXSA9IGVudi5nZXQoImRlZmF1bHRfcHl0aG9uIikgb3IgZGVmYXVsdF9weXRob24KCiAgICAjIHNldCBuYW1lCiAgICBpdGVtWyJuYW1lIl0gPSBlbnYuZ2V0KCJuYW1lIikgb3IgZiJ7aXRlbVsndG94ZW52J119ICh7aXRlbVsnb3MnXX0pIgoKICAgICMgc2V0IGFydGlmYWN0LW5hbWUgKHJlcGxhY2UgaW52YWxpZCBwYXRoIGNoYXJhY3RlcnMpCiAgICBpdGVtWyJhcnRpZmFjdC1uYW1lIl0gPSByZS5zdWIociJbXFwgLzo8PnwqP1wiJ10iLCAiLSIsIGl0ZW1bIm5hbWUiXSkKICAgIGl0ZW1bImFydGlmYWN0LW5hbWUiXSA9IHJlLnN1YihyIi0rIiwgIi0iLCBpdGVtWyJhcnRpZmFjdC1uYW1lIl0pCgogICAgIyBzZXQgcHl0ZXN0X2ZsYWcKICAgIGl0ZW1bInB5dGVzdF9mbGFnIl0gPSAiIgogICAgc2VwID0gciJcXCIgaWYgcGxhdGZvcm0gPT0gIndpbmRvd3MiIGVsc2UgIi8iCiAgICBpZiBpdGVtWyJweXRlc3QiXSA9PSAidHJ1ZSIgYW5kIGl0ZW1bInB5dGVzdC1yZXN1bHRzLXN1bW1hcnkiXSA9PSAidHJ1ZSI6CiAgICAgICAgaXRlbVsicHl0ZXN0X2ZsYWciXSArPSByZiItLWp1bml0eG1sICR7e0dJVEhVQl9XT1JLU1BBQ0V9fXtzZXB9cmVzdWx0cy54bWwgIgoKICAgICMgc2V0IGxpYnJhcmllcwogICAgZW52X2xpYnJhcmllcyA9IGVudi5nZXQoImxpYnJhcmllcyIpCiAgICBpZiBpc2luc3RhbmNlKGVudl9saWJyYXJpZXMsIHN0cikgYW5kIGxlbihlbnZfbGlicmFyaWVzLnN0cmlwKCkpID09IDA6CiAgICAgICAgZW52X2xpYnJhcmllcyA9IHt9ICAjIG5vIGxpYnJhcmllcyByZXF1ZXN0ZWQgZm9yIGVudmlyb25tZW50CiAgICBsaWJyYXJpZXMgPSBnbG9iYWxfbGlicmFyaWVzIGlmIGVudl9saWJyYXJpZXMgaXMgTm9uZSBlbHNlIGVudl9saWJyYXJpZXMKICAgIGZvciBtYW5hZ2VyIGluIFsiYnJldyIsICJicmV3X2Nhc2siLCAiYXB0IiwgImNob2NvIl06CiAgICAgICAgaXRlbVtmImxpYnJhcmllc197bWFuYWdlcn0iXSA9ICIgIi5qb2luKGxpYnJhcmllcy5nZXQobWFuYWdlciwgW10pKQoKICAgIGlmIGl0ZW1bImNvbmRhIl06CiAgICAgICAgd2FybmluZ3Mud2FybigiYGNvbmRhYCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCIpCgogICAgICAgICMgc2V0ICJhdXRvIiBjb25kYSB2YWx1ZQogICAgICAgIGlmIGl0ZW1bImNvbmRhIl0gPT0gImF1dG8iOgogICAgICAgICAgICBpdGVtWyJjb25kYSJdID0gInRydWUiIGlmICJjb25kYSIgaW4gaXRlbVsidG94ZW52Il0gZWxzZSAiZmFsc2UiCgogICAgICAgICMgaW5qZWN0IHRveGRlcHMgZm9yIGNvbmRhCiAgICAgICAgaWYgaXRlbVsiY29uZGEiXSA9PSAidHJ1ZSIgYW5kICJ0b3gtY29uZGEiIG5vdCBpbiBpdGVtWyJ0b3hkZXBzIl0ubG93ZXIoKToKICAgICAgICAgICAgaXRlbVsidG94ZGVwcyJdID0gKCJ0b3gtY29uZGEgIiArIGl0ZW1bInRveGRlcHMiXSkuc3RyaXAoKQoKICAgICMgbWFrZSB0aW1lb3V0LW1pbnV0ZXMgYSBudW1iZXIKICAgIGl0ZW1bInRpbWVvdXQtbWludXRlcyJdID0gaW50KGl0ZW1bInRpbWVvdXQtbWludXRlcyJdKQoKICAgICMgdmVyaWZ5IHZhbHVlcwogICAgYXNzZXJ0IGl0ZW1bInB5dGVzdCJdIGluIHsidHJ1ZSIsICJmYWxzZSJ9CiAgICBhc3NlcnQgaXRlbVsiY29uZGEiXSBpbiB7InRydWUiLCAiZmFsc2UifQogICAgYXNzZXJ0IGl0ZW1bImRpc3BsYXkiXSBpbiB7InRydWUiLCAiZmFsc2UifQoKICAgIHJldHVybiBpdGVtCgoKZGVmIGV4cGFuZF9weXRob25fdmVyc2lvbnModG94ZW52OiBzdHIsIHB5dGhvbl92ZXJzaW9uczogbGlzdFtWZXJzaW9uIHwgc3RyXSkgLT4gbGlzdFsoc3RyLCBzdHIpXToKICAgICIiIgogICAgZXhwYW5kIGBweTMqYCBpbnRvIGBweTMxMWAsIGBweTMxMmAsIGBweTMxM2AsIGV0Yy4gYmFzZWQgb24gY3VycmVudGx5LXN1cHBvcnRlZCBQeXRob24gdmVyc2lvbnMKCiAgICA6cGFyYW0gdmVyc2lvbl9nbG9iOiBjYW4gYmUgYHB5KmAsIGBweTMqYCwgYHB5MzAqYCwgYHB5MzEqYCBldGMuCiAgICAiIiIKCiAgICBweXRob25fdmVyc2lvbnMgPSBbVmVyc2lvbih2ZXJzaW9uKSBmb3IgdmVyc2lvbiBpbiBweXRob25fdmVyc2lvbnNdCgogICAgdG94ZW52X2ZhY3RvcnMgPSB0b3hlbnYuc3BsaXQoIi0iKQogICAgcHlfdmVyc2lvbl9nbG9iID0gdG94ZW52X2ZhY3RvcnNbMF0KICAgIGlmIG5vdCBweV92ZXJzaW9uX2dsb2Iuc3RhcnRzd2l0aCgicHkiKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICBmJ2lucHV0ICJ7cHlfdmVyc2lvbl9nbG9ifSIgaXMgbm90IGEgUHl0aG9uIHZlcnNpb24gVG94IGZhY3RvciAobXVzdCBzdGFydCB3aXRoIGBweWApJwogICAgICAgICkKCiAgICBpZiAiKiIgbm90IGluIHB5X3ZlcnNpb25fZ2xvYjoKICAgICAgICByZXR1cm4gW3B5X3ZlcnNpb25fZ2xvYl0KCiAgICBpZiBub3QgcHlfdmVyc2lvbl9nbG9iLmVuZHN3aXRoKCIqIik6CiAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAgICAgIlB5dGhvbiB2ZXJzaW9uIGdsb2IgbXVzdCBlbmQgd2l0aCBhIGAqYDsgc3VmZml4ZXMgc3VjaCBhcyBgdGAgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIgogICAgICAgICkKCiAgICBtYWpvcl92ZXJzaW9uID0gcHlfdmVyc2lvbl9nbG9iWzJdCiAgICBpZiBtYWpvcl92ZXJzaW9uICE9ICIqIjoKICAgICAgICBweXRob25fdmVyc2lvbnMgPSBbCiAgICAgICAgICAgIHB5dGhvbl92ZXJzaW9uCiAgICAgICAgICAgIGZvciBweXRob25fdmVyc2lvbiBpbiBweXRob25fdmVyc2lvbnMKICAgICAgICAgICAgaWYgcHl0aG9uX3ZlcnNpb24ubWFqb3IgPT0gaW50KG1ham9yX3ZlcnNpb24pCiAgICAgICAgXQoKICAgICAgICBtaW5vcl92ZXJzaW9uID0gcHlfdmVyc2lvbl9nbG9iWzM6XQogICAgICAgIGlmIG1pbm9yX3ZlcnNpb25fc3BlY2lmaWVyIDo9IG1pbm9yX3ZlcnNpb24uc3BsaXQoIioiKVswXSAhPSAiKiI6CiAgICAgICAgICAgIG1pbm9yX3ZlcnNpb25fYmFzZSA9IGludChtaW5vcl92ZXJzaW9uX3NwZWNpZmllcikgKiAxMAogICAgICAgICAgICBweXRob25fdmVyc2lvbnMgPSBbCiAgICAgICAgICAgICAgICBweXRob25fdmVyc2lvbgogICAgICAgICAgICAgICAgZm9yIHB5dGhvbl92ZXJzaW9uIGluIHB5dGhvbl92ZXJzaW9ucwogICAgICAgICAgICAgICAgaWYgbWlub3JfdmVyc2lvbl9iYXNlIDw9IHB5dGhvbl92ZXJzaW9uLm1pbm9yIDwgbWlub3JfdmVyc2lvbl9iYXNlICsgMTAKICAgICAgICAgICAgXQoKICAgIHJldHVybiBbCiAgICAgICAgKAogICAgICAgICAgICBmInB5e3B5dGhvbl92ZXJzaW9uLm1ham9yfXtweXRob25fdmVyc2lvbi5taW5vcn0iCiAgICAgICAgICAgICsgKGYiLXsnLScuam9pbih0b3hlbnZfZmFjdG9yc1sxOl0pfSIgaWYgbGVuKHRveGVudl9mYWN0b3JzKSA+IDEgZWxzZSAiIiksCiAgICAgICAgICAgIHN0cihweXRob25fdmVyc2lvbiksCiAgICAgICAgKQogICAgICAgIGZvciBweXRob25fdmVyc2lvbiBpbiBweXRob25fdmVyc2lvbnMKICAgIF0KCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbG9hZF90b3hfdGFyZ2V0cygpCg== + TOX_MATRIX_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj49My4xMiIKIyBkZXBlbmRlbmNpZXMgPSBbCiMgICAgICJjbGljaz09OC4yLjEiLAojICAgICAicGFja2FnaW5nPT0yNS4wIiwKIyAgICAgInB5eWFtbD09Ni4wLjIiLAojIF0KIyAvLy8KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgd2FybmluZ3MKZnJvbSBjb3B5IGltcG9ydCBjb3B5CgppbXBvcnQgY2xpY2sKaW1wb3J0IHlhbWwKZnJvbSBwYWNrYWdpbmcudmVyc2lvbiBpbXBvcnQgVmVyc2lvbgoKCkBjbGljay5jb21tYW5kKCkKQGNsaWNrLm9wdGlvbigiLS1lbnZzIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1saWJyYXJpZXMiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLXBvc2FyZ3MiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLXRveGRlcHMiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLXRveGFyZ3MiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLXB5dGVzdCIsIGRlZmF1bHQ9InRydWUiKQpAY2xpY2sub3B0aW9uKCItLXB5dGVzdC1yZXN1bHRzLXN1bW1hcnkiLCBkZWZhdWx0PSJmYWxzZSIpCkBjbGljay5vcHRpb24oIi0tY292ZXJhZ2UiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLWNvbmRhIiwgZGVmYXVsdD0iYXV0byIpCkBjbGljay5vcHRpb24oIi0tc2V0ZW52IiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1kaXNwbGF5IiwgZGVmYXVsdD0iZmFsc2UiKQpAY2xpY2sub3B0aW9uKCItLWNhY2hlLXBhdGgiLCBkZWZhdWx0PSIiKQpAY2xpY2sub3B0aW9uKCItLWNhY2hlLWtleSIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tY2FjaGUtcmVzdG9yZS1rZXlzIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1hcnRpZmFjdC1wYXRoIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1hcnRpZmFjdC1hcmNoaXZlIiwgZGVmYXVsdD0idHJ1ZSIpCkBjbGljay5vcHRpb24oIi0tYXJ0aWZhY3QtaW5jbHVkZS1oaWRkZW4tZmlsZXMiLCBkZWZhdWx0PSJmYWxzZSIpCkBjbGljay5vcHRpb24oIi0tYXJ0aWZhY3QtaWYtbm8tZmlsZXMtZm91bmQiLCBkZWZhdWx0PSJ3YXJuIikKQGNsaWNrLm9wdGlvbigiLS1ydW5zLW9uIiwgZGVmYXVsdD0iIikKQGNsaWNrLm9wdGlvbigiLS1kZWZhdWx0LXB5dGhvbiIsIGRlZmF1bHQ9IiIpCkBjbGljay5vcHRpb24oIi0tdGltZW91dC1taW51dGVzIiwgZGVmYXVsdD0iMzYwIikKQGNsaWNrLm9wdGlvbigiLS1zdXBwb3J0ZWQtcHl0aG9ucyIsIGRlZmF1bHQ9J1siMyJdJykKZGVmIGxvYWRfdG94X3RhcmdldHMoCiAgICBlbnZzLAogICAgbGlicmFyaWVzLAogICAgcG9zYXJncywKICAgIHRveGRlcHMsCiAgICB0b3hhcmdzLAogICAgcHl0ZXN0LAogICAgcHl0ZXN0X3Jlc3VsdHNfc3VtbWFyeSwKICAgIGNvdmVyYWdlLAogICAgY29uZGEsCiAgICBzZXRlbnYsCiAgICBkaXNwbGF5LAogICAgY2FjaGVfcGF0aCwKICAgIGNhY2hlX2tleSwKICAgIGNhY2hlX3Jlc3RvcmVfa2V5cywKICAgIGFydGlmYWN0X3BhdGgsCiAgICBhcnRpZmFjdF9hcmNoaXZlLAogICAgYXJ0aWZhY3RfaW5jbHVkZV9oaWRkZW5fZmlsZXMsCiAgICBhcnRpZmFjdF9pZl9ub19maWxlc19mb3VuZCwKICAgIHJ1bnNfb24sCiAgICBkZWZhdWx0X3B5dGhvbiwKICAgIHRpbWVvdXRfbWludXRlcywKICAgIHN1cHBvcnRlZF9weXRob25zLAopOgogICAgIiIiU2NyaXB0IHRvIGxvYWQgdG94IHRhcmdldHMgZm9yIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93LiIiIgoKICAgIGlmIG5vdCBzdXBwb3J0ZWRfcHl0aG9uczoKICAgICAgICBzdXBwb3J0ZWRfcHl0aG9ucyA9IFsnMyddCiAgICBlbGlmIGlzaW5zdGFuY2Uoc3VwcG9ydGVkX3B5dGhvbnMsIHN0cik6CiAgICAgICAgc3VwcG9ydGVkX3B5dGhvbnMgPSBqc29uLmxvYWRzKHN1cHBvcnRlZF9weXRob25zKQoKICAgICMgTG9hZCBlbnZzIGNvbmZpZwogICAgZW52cyA9IHlhbWwubG9hZChlbnZzLnJlcGxhY2UoIlxcbiIsICJcbiIpLCBMb2FkZXI9eWFtbC5CYXNlTG9hZGVyKQogICAgcHJpbnQoanNvbi5kdW1wcyhlbnZzLCBpbmRlbnQ9MikpCgogICAgIyBMb2FkIGdsb2JhbCBsaWJyYXJpZXMgY29uZmlnCiAgICBnbG9iYWxfbGlicmFyaWVzID0gewogICAgICAgICJicmV3IjogW10sCiAgICAgICAgImJyZXctY2FzayI6IFtdLAogICAgICAgICJhcHQiOiBbXSwKICAgICAgICAiY2hvY28iOiBbXSwKICAgIH0KICAgIGxpYnJhcmllcyA9IHlhbWwubG9hZChsaWJyYXJpZXMsIExvYWRlcj15YW1sLkJhc2VMb2FkZXIpCiAgICBpZiBsaWJyYXJpZXMgaXMgbm90IE5vbmU6CiAgICAgICAgZ2xvYmFsX2xpYnJhcmllcy51cGRhdGUobGlicmFyaWVzKQogICAgcHJpbnQoanNvbi5kdW1wcyhnbG9iYWxfbGlicmFyaWVzLCBpbmRlbnQ9MikpCgogICAgIyBEZWZhdWx0IGltYWdlcyB0byB1c2UgZm9yIHJ1bm5lcnMKICAgIGRlZmF1bHRfcnVuc19vbiA9IHsKICAgICAgICAibGludXgiOiAidWJ1bnR1LWxhdGVzdCIsCiAgICAgICAgIm1hY29zIjogIm1hY29zLWxhdGVzdCIsCiAgICAgICAgIndpbmRvd3MiOiAid2luZG93cy1sYXRlc3QiLAogICAgfQogICAgY3VzdG9tX3J1bnNfb24gPSB5YW1sLmxvYWQocnVuc19vbiwgTG9hZGVyPXlhbWwuQmFzZUxvYWRlcikKICAgIGlmIGlzaW5zdGFuY2UoY3VzdG9tX3J1bnNfb24sIGRpY3QpOgogICAgICAgIGRlZmF1bHRfcnVuc19vbi51cGRhdGUoY3VzdG9tX3J1bnNfb24pCiAgICBwcmludChqc29uLmR1bXBzKGRlZmF1bHRfcnVuc19vbiwgaW5kZW50PTIpKQoKICAgICMgRGVmYXVsdCBzdHJpbmcgcGFyYW1ldGVycyB3aGljaCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgZWFjaCBlbnYKICAgIHN0cmluZ19wYXJhbWV0ZXJzID0gewogICAgICAgICJwb3NhcmdzIjogcG9zYXJncywKICAgICAgICAidG94ZGVwcyI6IHRveGRlcHMsCiAgICAgICAgInRveGFyZ3MiOiB0b3hhcmdzLAogICAgICAgICJweXRlc3QiOiBweXRlc3QsCiAgICAgICAgInB5dGVzdC1yZXN1bHRzLXN1bW1hcnkiOiBweXRlc3RfcmVzdWx0c19zdW1tYXJ5LAogICAgICAgICJjb3ZlcmFnZSI6IGNvdmVyYWdlLAogICAgICAgICJjb25kYSI6IGNvbmRhLAogICAgICAgICJzZXRlbnYiOiBzZXRlbnYsCiAgICAgICAgImRpc3BsYXkiOiBkaXNwbGF5LAogICAgICAgICJjYWNoZS1wYXRoIjogY2FjaGVfcGF0aCwKICAgICAgICAiY2FjaGUta2V5IjogY2FjaGVfa2V5LAogICAgICAgICJjYWNoZS1yZXN0b3JlLWtleXMiOiBjYWNoZV9yZXN0b3JlX2tleXMsCiAgICAgICAgImFydGlmYWN0LXBhdGgiOiBhcnRpZmFjdF9wYXRoLAogICAgICAgICJhcnRpZmFjdC1hcmNoaXZlIjogYXJ0aWZhY3RfYXJjaGl2ZSwKICAgICAgICAiYXJ0aWZhY3QtaW5jbHVkZS1oaWRkZW4tZmlsZXMiOiBhcnRpZmFjdF9pbmNsdWRlX2hpZGRlbl9maWxlcywKICAgICAgICAiYXJ0aWZhY3QtaWYtbm8tZmlsZXMtZm91bmQiOiBhcnRpZmFjdF9pZl9ub19maWxlc19mb3VuZCwKICAgICAgICAidGltZW91dC1taW51dGVzIjogdGltZW91dF9taW51dGVzLAogICAgfQoKICAgICMgQ3JlYXRlIG1hdHJpeAogICAgbWF0cml4ID0geyJpbmNsdWRlIjogW119CiAgICBmb3IgZW52IGluIGVudnM6CiAgICAgICAgbWF0cml4X2l0ZW0gPSBnZXRfbWF0cml4X2l0ZW0oCiAgICAgICAgICAgIGVudiwKICAgICAgICAgICAgZ2xvYmFsX2xpYnJhcmllcz1nbG9iYWxfbGlicmFyaWVzLAogICAgICAgICAgICBnbG9iYWxfc3RyaW5nX3BhcmFtZXRlcnM9c3RyaW5nX3BhcmFtZXRlcnMsCiAgICAgICAgICAgIHJ1bnNfb249ZGVmYXVsdF9ydW5zX29uLAogICAgICAgICAgICBkZWZhdWx0X3B5dGhvbj1kZWZhdWx0X3B5dGhvbiwKICAgICAgICApCgogICAgICAgICMgY2hlY2sgaWYgd2UgbmVlZCB0byBleHBhbmQgcHl0aG9uIHZlcnNpb25zIGZyb20gYSBnbG9iIChpLmUuIHB5KiwgcHkzKiwgcHkzMSosIGV0Yy4pCiAgICAgICAgdG94ZW52ID0gbWF0cml4X2l0ZW1bInRveGVudiJdCiAgICAgICAgaWYgdG94ZW52LnN0YXJ0c3dpdGgoInB5IikgYW5kICIqIiBpbiB0b3hlbnYuc3BsaXQoIi0iKVswXToKICAgICAgICAgICAgdG94ZW52cyA9IGV4cGFuZF9weXRob25fdmVyc2lvbnModG94ZW52LCBweXRob25fdmVyc2lvbnM9c3VwcG9ydGVkX3B5dGhvbnMpCgogICAgICAgICAgICBmb3IgZXhwYW5kZWRfdG94ZW52LCBweXRob25fdmVyc2lvbiBpbiB0b3hlbnZzOgogICAgICAgICAgICAgICAgZXhwYW5kZWRfbWF0cml4X2l0ZW0gPSBjb3B5KG1hdHJpeF9pdGVtKQogICAgICAgICAgICAgICAgZXhwYW5kZWRfbWF0cml4X2l0ZW1bInRveGVudiJdID0gZXhwYW5kZWRfdG94ZW52CiAgICAgICAgICAgICAgICBleHBhbmRlZF9tYXRyaXhfaXRlbVsibmFtZSJdID0gZXhwYW5kZWRfbWF0cml4X2l0ZW1bIm5hbWUiXS5yZXBsYWNlKAogICAgICAgICAgICAgICAgICAgIHRveGVudiwgZXhwYW5kZWRfdG94ZW52CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBleHBhbmRlZF9tYXRyaXhfaXRlbVsicHl0aG9uX3ZlcnNpb24iXSA9IHB5dGhvbl92ZXJzaW9uCiAgICAgICAgICAgICAgICBtYXRyaXhbImluY2x1ZGUiXS5hcHBlbmQoZXhwYW5kZWRfbWF0cml4X2l0ZW0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgdG94ZW52LnNwbGl0KCItIilbMF0gPT0gInB5MyI6CiAgICAgICAgICAgICAgICAjIHJlcGxhY2UgcHkzIHdpdGggbGF0ZXN0IHN1cHBvcnRlZCBQeXRob24KICAgICAgICAgICAgICAgICMgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuQXN0cm9ub215L2dpdGh1Yi1hY3Rpb25zLXdvcmtmbG93cy9pc3N1ZXMvNDI3CiAgICAgICAgICAgICAgICBtYXRyaXhfaXRlbVsicHl0aG9uX3ZlcnNpb24iXSA9IHN1cHBvcnRlZF9weXRob25zWy0xXQogICAgICAgICAgICBtYXRyaXhbImluY2x1ZGUiXS5hcHBlbmQobWF0cml4X2l0ZW0pCgogICAgIyBPdXRwdXQgbWF0cml4CiAgICBwcmludChqc29uLmR1bXBzKG1hdHJpeCwgaW5kZW50PTIpKQogICAgd2l0aCBvcGVuKG9zLmVudmlyb25bIkdJVEhVQl9PVVRQVVQiXSwgImEiKSBhcyBmOgogICAgICAgIGYud3JpdGUoZiJtYXRyaXg9e2pzb24uZHVtcHMobWF0cml4KX1cbiIpCgoKZGVmIGdldF9tYXRyaXhfaXRlbShlbnYsIGdsb2JhbF9saWJyYXJpZXMsIGdsb2JhbF9zdHJpbmdfcGFyYW1ldGVycywgcnVuc19vbiwgZGVmYXVsdF9weXRob24pOgoKICAgICMgZGVmaW5lIHNwZWMgZm9yIGVhY2ggbWF0cml4IGluY2x1ZGUgKCsgZ2xvYmFsX3N0cmluZ19wYXJhbWV0ZXJzKQogICAgaXRlbSA9IHsKICAgICAgICAib3MiOiBOb25lLAogICAgICAgICJ0b3hlbnYiOiBOb25lLAogICAgICAgICJweXRob25fdmVyc2lvbiI6IE5vbmUsCiAgICAgICAgIm5hbWUiOiBOb25lLAogICAgICAgICJweXRlc3RfZmxhZyI6IE5vbmUsCiAgICAgICAgImxpYnJhcmllc19icmV3IjogTm9uZSwKICAgICAgICAibGlicmFyaWVzX2JyZXdfY2FzayI6IE5vbmUsCiAgICAgICAgImxpYnJhcmllc19hcHQiOiBOb25lLAogICAgICAgICJsaWJyYXJpZXNfY2hvY28iOiBOb25lLAogICAgICAgICJjYWNoZS1wYXRoIjogTm9uZSwKICAgICAgICAiY2FjaGUta2V5IjogTm9uZSwKICAgICAgICAiY2FjaGUtcmVzdG9yZS1rZXlzIjogTm9uZSwKICAgICAgICAiYXJ0aWZhY3QtbmFtZSI6IE5vbmUsCiAgICAgICAgImFydGlmYWN0LXBhdGgiOiBOb25lLAogICAgICAgICJhcnRpZmFjdC1hcmNoaXZlIjogTm9uZSwKICAgICAgICAiYXJ0aWZhY3QtaW5jbHVkZS1oaWRkZW4tZmlsZXMiOiBOb25lLAogICAgICAgICJhcnRpZmFjdC1pZi1uby1maWxlcy1mb3VuZCI6IE5vbmUsCiAgICAgICAgInRpbWVvdXQtbWludXRlcyI6IE5vbmUsCiAgICB9CiAgICBmb3Igc3RyaW5nX3BhcmFtLCBkZWZhdWx0IGluIGdsb2JhbF9zdHJpbmdfcGFyYW1ldGVycy5pdGVtcygpOgogICAgICAgIGVudl92YWx1ZSA9IGVudi5nZXQoc3RyaW5nX3BhcmFtKQogICAgICAgIGl0ZW1bc3RyaW5nX3BhcmFtXSA9IGRlZmF1bHQgaWYgZW52X3ZhbHVlIGlzIE5vbmUgZWxzZSBlbnZfdmFsdWUKCiAgICAjIHNldCBvcyBhbmQgdG94ZW52CiAgICBmb3IgaywgdiBpbiBydW5zX29uLml0ZW1zKCk6CiAgICAgICAgaWYgayBpbiBlbnY6CiAgICAgICAgICAgIHBsYXRmb3JtID0gawogICAgICAgICAgICBpdGVtWyJvcyJdID0gZW52LmdldCgicnVucy1vbiIsIHYpCiAgICAgICAgICAgIGl0ZW1bInRveGVudiJdID0gZW52W2tdCiAgICBhc3NlcnQgaXRlbVsib3MiXSBpcyBub3QgTm9uZSBhbmQgaXRlbVsidG94ZW52Il0gaXMgbm90IE5vbmUKCiAgICAjIHNldCBweXRob25fdmVyc2lvbgogICAgcHl0aG9uX3ZlcnNpb24gPSBlbnYuZ2V0KCJweXRob24tdmVyc2lvbiIpCiAgICBtID0gcmUuc2VhcmNoKCJecHkoMnwzKShbMC05XSt0PykiLCBpdGVtWyJ0b3hlbnYiXSkKICAgIGlmIHB5dGhvbl92ZXJzaW9uIGlzIG5vdCBOb25lOgogICAgICAgIGl0ZW1bInB5dGhvbl92ZXJzaW9uIl0gPSBweXRob25fdmVyc2lvbgogICAgZWxpZiBtIGlzIG5vdCBOb25lOgogICAgICAgIG1ham9yLCBtaW5vciA9IG0uZ3JvdXBzKCkKICAgICAgICBpdGVtWyJweXRob25fdmVyc2lvbiJdID0gZiJ7bWFqb3J9LnttaW5vcn0iCiAgICBlbHNlOgogICAgICAgIGl0ZW1bInB5dGhvbl92ZXJzaW9uIl0gPSBlbnYuZ2V0KCJkZWZhdWx0X3B5dGhvbiIpIG9yIGRlZmF1bHRfcHl0aG9uCgogICAgIyBzZXQgbmFtZQogICAgaXRlbVsibmFtZSJdID0gZW52LmdldCgibmFtZSIpIG9yIGYie2l0ZW1bJ3RveGVudiddfSAoe2l0ZW1bJ29zJ119KSIKCiAgICAjIHNldCBhcnRpZmFjdC1uYW1lIChyZXBsYWNlIGludmFsaWQgcGF0aCBjaGFyYWN0ZXJzKQogICAgaXRlbVsiYXJ0aWZhY3QtbmFtZSJdID0gcmUuc3ViKHIiW1xcIC86PD58Kj9cIiddIiwgIi0iLCBpdGVtWyJuYW1lIl0pCiAgICBpdGVtWyJhcnRpZmFjdC1uYW1lIl0gPSByZS5zdWIociItKyIsICItIiwgaXRlbVsiYXJ0aWZhY3QtbmFtZSJdKQoKICAgICMgc2V0IHB5dGVzdF9mbGFnCiAgICBpdGVtWyJweXRlc3RfZmxhZyJdID0gIiIKICAgIHNlcCA9IHIiXFwiIGlmIHBsYXRmb3JtID09ICJ3aW5kb3dzIiBlbHNlICIvIgogICAgaWYgaXRlbVsicHl0ZXN0Il0gPT0gInRydWUiIGFuZCBpdGVtWyJweXRlc3QtcmVzdWx0cy1zdW1tYXJ5Il0gPT0gInRydWUiOgogICAgICAgIGl0ZW1bInB5dGVzdF9mbGFnIl0gKz0gcmYiLS1qdW5pdHhtbCAke3tHSVRIVUJfV09SS1NQQUNFfX17c2VwfXJlc3VsdHMueG1sICIKCiAgICAjIHNldCBsaWJyYXJpZXMKICAgIGVudl9saWJyYXJpZXMgPSBlbnYuZ2V0KCJsaWJyYXJpZXMiKQogICAgaWYgaXNpbnN0YW5jZShlbnZfbGlicmFyaWVzLCBzdHIpIGFuZCBsZW4oZW52X2xpYnJhcmllcy5zdHJpcCgpKSA9PSAwOgogICAgICAgIGVudl9saWJyYXJpZXMgPSB7fSAgIyBubyBsaWJyYXJpZXMgcmVxdWVzdGVkIGZvciBlbnZpcm9ubWVudAogICAgbGlicmFyaWVzID0gZ2xvYmFsX2xpYnJhcmllcyBpZiBlbnZfbGlicmFyaWVzIGlzIE5vbmUgZWxzZSBlbnZfbGlicmFyaWVzCiAgICBmb3IgbWFuYWdlciBpbiBbImJyZXciLCAiYnJld19jYXNrIiwgImFwdCIsICJjaG9jbyJdOgogICAgICAgIGl0ZW1bZiJsaWJyYXJpZXNfe21hbmFnZXJ9Il0gPSAiICIuam9pbihsaWJyYXJpZXMuZ2V0KG1hbmFnZXIsIFtdKSkKCiAgICBpZiBpdGVtWyJjb25kYSJdOgogICAgICAgIHdhcm5pbmdzLndhcm4oImBjb25kYWAgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQiKQoKICAgICAgICAjIHNldCAiYXV0byIgY29uZGEgdmFsdWUKICAgICAgICBpZiBpdGVtWyJjb25kYSJdID09ICJhdXRvIjoKICAgICAgICAgICAgaXRlbVsiY29uZGEiXSA9ICJ0cnVlIiBpZiAiY29uZGEiIGluIGl0ZW1bInRveGVudiJdIGVsc2UgImZhbHNlIgoKICAgICAgICAjIGluamVjdCB0b3hkZXBzIGZvciBjb25kYQogICAgICAgIGlmIGl0ZW1bImNvbmRhIl0gPT0gInRydWUiIGFuZCAidG94LWNvbmRhIiBub3QgaW4gaXRlbVsidG94ZGVwcyJdLmxvd2VyKCk6CiAgICAgICAgICAgIGl0ZW1bInRveGRlcHMiXSA9ICgidG94LWNvbmRhICIgKyBpdGVtWyJ0b3hkZXBzIl0pLnN0cmlwKCkKCiAgICAjIG1ha2UgdGltZW91dC1taW51dGVzIGEgbnVtYmVyCiAgICBpdGVtWyJ0aW1lb3V0LW1pbnV0ZXMiXSA9IGludChpdGVtWyJ0aW1lb3V0LW1pbnV0ZXMiXSkKCiAgICAjIHZlcmlmeSB2YWx1ZXMKICAgIGFzc2VydCBpdGVtWyJweXRlc3QiXSBpbiB7InRydWUiLCAiZmFsc2UifQogICAgYXNzZXJ0IGl0ZW1bImNvbmRhIl0gaW4geyJ0cnVlIiwgImZhbHNlIn0KICAgIGFzc2VydCBpdGVtWyJkaXNwbGF5Il0gaW4geyJ0cnVlIiwgImZhbHNlIn0KCiAgICByZXR1cm4gaXRlbQoKCmRlZiBleHBhbmRfcHl0aG9uX3ZlcnNpb25zKHRveGVudjogc3RyLCBweXRob25fdmVyc2lvbnM6IGxpc3RbVmVyc2lvbiB8IHN0cl0pIC0+IGxpc3RbKHN0ciwgc3RyKV06CiAgICAiIiIKICAgIGV4cGFuZCBgcHkzKmAgaW50byBgcHkzMTFgLCBgcHkzMTJgLCBgcHkzMTNgLCBldGMuIGJhc2VkIG9uIGN1cnJlbnRseS1zdXBwb3J0ZWQgUHl0aG9uIHZlcnNpb25zCgogICAgOnBhcmFtIHZlcnNpb25fZ2xvYjogY2FuIGJlIGBweSpgLCBgcHkzKmAsIGBweTMwKmAsIGBweTMxKmAgZXRjLgogICAgIiIiCgogICAgcHl0aG9uX3ZlcnNpb25zID0gW1ZlcnNpb24odmVyc2lvbikgZm9yIHZlcnNpb24gaW4gcHl0aG9uX3ZlcnNpb25zXQoKICAgIHRveGVudl9mYWN0b3JzID0gdG94ZW52LnNwbGl0KCItIikKICAgIHB5X3ZlcnNpb25fZ2xvYiA9IHRveGVudl9mYWN0b3JzWzBdCiAgICBpZiBub3QgcHlfdmVyc2lvbl9nbG9iLnN0YXJ0c3dpdGgoInB5Iik6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgZidpbnB1dCAie3B5X3ZlcnNpb25fZ2xvYn0iIGlzIG5vdCBhIFB5dGhvbiB2ZXJzaW9uIFRveCBmYWN0b3IgKG11c3Qgc3RhcnQgd2l0aCBgcHlgKScKICAgICAgICApCgogICAgaWYgIioiIG5vdCBpbiBweV92ZXJzaW9uX2dsb2I6CiAgICAgICAgcmV0dXJuIFtweV92ZXJzaW9uX2dsb2JdCgogICAgaWYgbm90IHB5X3ZlcnNpb25fZ2xvYi5lbmRzd2l0aCgiKiIpOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAgICJQeXRob24gdmVyc2lvbiBnbG9iIG11c3QgZW5kIHdpdGggYSBgKmA7IHN1ZmZpeGVzIHN1Y2ggYXMgYHRgIGFyZSBub3QgeWV0IHN1cHBvcnRlZCIKICAgICAgICApCgogICAgbWFqb3JfdmVyc2lvbiA9IHB5X3ZlcnNpb25fZ2xvYlsyXQogICAgaWYgbWFqb3JfdmVyc2lvbiAhPSAiKiI6CiAgICAgICAgcHl0aG9uX3ZlcnNpb25zID0gWwogICAgICAgICAgICBweXRob25fdmVyc2lvbgogICAgICAgICAgICBmb3IgcHl0aG9uX3ZlcnNpb24gaW4gcHl0aG9uX3ZlcnNpb25zCiAgICAgICAgICAgIGlmIHB5dGhvbl92ZXJzaW9uLm1ham9yID09IGludChtYWpvcl92ZXJzaW9uKQogICAgICAgIF0KCiAgICAgICAgbWlub3JfdmVyc2lvbiA9IHB5X3ZlcnNpb25fZ2xvYlszOl0KICAgICAgICBpZiBtaW5vcl92ZXJzaW9uX3NwZWNpZmllciA6PSBtaW5vcl92ZXJzaW9uLnNwbGl0KCIqIilbMF0gIT0gIioiOgogICAgICAgICAgICBtaW5vcl92ZXJzaW9uX2Jhc2UgPSBpbnQobWlub3JfdmVyc2lvbl9zcGVjaWZpZXIpICogMTAKICAgICAgICAgICAgcHl0aG9uX3ZlcnNpb25zID0gWwogICAgICAgICAgICAgICAgcHl0aG9uX3ZlcnNpb24KICAgICAgICAgICAgICAgIGZvciBweXRob25fdmVyc2lvbiBpbiBweXRob25fdmVyc2lvbnMKICAgICAgICAgICAgICAgIGlmIG1pbm9yX3ZlcnNpb25fYmFzZSA8PSBweXRob25fdmVyc2lvbi5taW5vciA8IG1pbm9yX3ZlcnNpb25fYmFzZSArIDEwCiAgICAgICAgICAgIF0KCiAgICByZXR1cm4gWwogICAgICAgICgKICAgICAgICAgICAgZiJweXtweXRob25fdmVyc2lvbi5tYWpvcn17cHl0aG9uX3ZlcnNpb24ubWlub3J9IgogICAgICAgICAgICArIChmIi17Jy0nLmpvaW4odG94ZW52X2ZhY3RvcnNbMTpdKX0iIGlmIGxlbih0b3hlbnZfZmFjdG9ycykgPiAxIGVsc2UgIiIpLAogICAgICAgICAgICBzdHIocHl0aG9uX3ZlcnNpb24pLAogICAgICAgICkKICAgICAgICBmb3IgcHl0aG9uX3ZlcnNpb24gaW4gcHl0aG9uX3ZlcnNpb25zCiAgICBdCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGxvYWRfdG94X3RhcmdldHMoKQo= - run: cat tox_matrix.py - if: contains(inputs.envs, '*') id: supported-pythons diff --git a/tools/tox_matrix.py b/tools/tox_matrix.py index 3f4cdf5..ca09f6b 100644 --- a/tools/tox_matrix.py +++ b/tools/tox_matrix.py @@ -1,5 +1,5 @@ # /// script -# requires-python = ">=3.12, <3.13" +# requires-python = ">=3.12" # dependencies = [ # "click==8.2.1", # "packaging==25.0", @@ -144,6 +144,10 @@ def load_tox_targets( expanded_matrix_item["python_version"] = python_version matrix["include"].append(expanded_matrix_item) else: + if toxenv.split("-")[0] == "py3": + # replace py3 with latest supported Python + # see https://github.com/OpenAstronomy/github-actions-workflows/issues/427 + matrix_item["python_version"] = supported_pythons[-1] matrix["include"].append(matrix_item) # Output matrix