{
  "appeals": 1,
  "budgets": {
    "baseline_limit_s": 600,
    "verification_timeout_s": 600,
    "worker": {
      "max_completion_tokens": 96000,
      "max_turns": 60,
      "max_wall_seconds": 1500.0,
      "prompt_token_budget": 160000
    }
  },
  "issue": "Refactor CLI tests to call `main()` functions instead of calling the entry points \nCodeCov wants people to switch to their [binary uploader](https://docs.codecov.com/docs/codecov-uploader) instead of using the `codecov` package. However, in my tests (as part of #636), I found that when I switch to the new uploader, we were losing coverage \u2013 mainly because the [coverage subprocess measurement](https://coverage.readthedocs.io/en/7.2.7/subprocess.html) was not working as intended. \r\n\r\nSince we can't stay on the codecov python package forever, we will need to refactor our CLI tests so that instead of calling the entry point directly via `subprocess()`, we call the `main` function as we do in SKLL. \r\n\r\nThere are two tasks in this issue: \r\n- [ ] Refactor CLI tests\r\n- [ ] Switch to the binary CodeCov uploader ",
  "source": {
    "image": "docker.io/swerebenchv2/educationaltestingservice-rsmtool:669-d7e776b",
    "platform": "linux/amd64",
    "python": "python",
    "setup": [
      "python -c 'import base64; from pathlib import Path; Path('\"'\"'/tmp/receipts-educationaltestingservice__rsmtool-669-test.patch'\"'\"').write_bytes(base64.b64decode('\"'\"'ZGlmZiAtLWdpdCBhL3Rlc3RzL3Rlc3RfY2xpLnB5IGIvdGVzdHMvdGVzdF9jbGkucHkKaW5kZXggNzQ1OTBmZTkuLmQzNjgzNjg5IDEwMDY0NAotLS0gYS90ZXN0cy90ZXN0X2NsaS5weQorKysgYi90ZXN0cy90ZXN0X2NsaS5weQpAQCAtMSwxMSArMSwyMCBAQAoraW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwotaW1wb3J0IHNobGV4Ci1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0Citmcm9tIGNvbnRleHRsaWIgaW1wb3J0IHJlZGlyZWN0X3N0ZGVyciwgcmVkaXJlY3Rfc3Rkb3V0Citmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCitmcm9tIHNodXRpbCBpbXBvcnQgcm10cmVlCiBmcm9tIHRlbXBmaWxlIGltcG9ydCBOYW1lZFRlbXBvcmFyeUZpbGUsIFRlbXBvcmFyeURpcmVjdG9yeQotCitmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IHBhdGNoCisKK2Zyb20gcnNtdG9vbC5yc21jb21wYXJlIGltcG9ydCBtYWluIGFzIHJzbWNvbXBhcmVfbWFpbgorZnJvbSByc210b29sLnJzbWV2YWwgaW1wb3J0IG1haW4gYXMgcnNtZXZhbF9tYWluCitmcm9tIHJzbXRvb2wucnNtZXhwbGFpbiBpbXBvcnQgbWFpbiBhcyByc21leHBsYWluX21haW4KK2Zyb20gcnNtdG9vbC5yc21wcmVkaWN0IGltcG9ydCBtYWluIGFzIHJzbXByZWRpY3RfbWFpbgorZnJvbSByc210b29sLnJzbXN1bW1hcml6ZSBpbXBvcnQgbWFpbiBhcyByc21zdW1tYXJpemVfbWFpbgorZnJvbSByc210b29sLnJzbXRvb2wgaW1wb3J0IG1haW4gYXMgcnNtdG9vbF9tYWluCitmcm9tIHJzbXRvb2wucnNteHZhbCBpbXBvcnQgbWFpbiBhcyByc214dmFsX21haW4KIGZyb20gcnNtdG9vbC50ZXN0X3V0aWxzIGltcG9ydCAoCiAgICAgY2hlY2tfZmlsZV9vdXRwdXQsCiAgICAgY2hlY2tfZ2VuZXJhdGVkX291dHB1dCwKQEAgLTI3LDYgKzM2LDE5IEBAIGVsc2U6CiBTVFJJQ1RfTU9ERSA9IG9zLmVudmlyb24uZ2V0KCJTVFJJQ1QiLCBOb25lKQogSUdOT1JFX1dBUk5JTkdTID0gRmFsc2UgaWYgU1RSSUNUX01PREUgZWxzZSBUcnVlCiAKKyMgY3JlYXRlIGEgZGljdGlvbmFyeSBtYXBwaW5nIHRvb2wgbmFtZXMgdG8gdGhlaXIgbWFpbiBmdW5jdGlvbnMKKyMgTk9URTogdGVjaG5pY2FsbHkgd2UgY291bGQgaGF2ZSBqdXN0IHVzZWQgYGdsb2JhbHMoKWAgaW5zdGVhZAorIyBvZiB0aGlzIGRpY3Rpb25hcnksIGJ1dCB0aGF0IHdvdWxkIG5vdCBiZSBhcyBzYWZlCitNQUlOX0ZVTkNUSU9OUyA9IHsKKyAgICAicnNtdG9vbCI6IHJzbXRvb2xfbWFpbiwKKyAgICAicnNtZXZhbCI6IHJzbWV2YWxfbWFpbiwKKyAgICAicnNtY29tcGFyZSI6IHJzbWNvbXBhcmVfbWFpbiwKKyAgICAicnNtcHJlZGljdCI6IHJzbXByZWRpY3RfbWFpbiwKKyAgICAicnNtc3VtbWFyaXplIjogcnNtc3VtbWFyaXplX21haW4sCisgICAgInJzbXh2YWwiOiByc214dmFsX21haW4sCisgICAgInJzbWV4cGxhaW4iOiByc21leHBsYWluX21haW4sCit9CisKIAogY2xhc3MgVGVzdFRvb2xDTEkodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3QgY2xhc3MgZm9yIFRvb2xDTEkgdGVzdHMuIiIiCkBAIC01NCwzMCArNzYsMjUgQEAgY2xhc3MgVGVzdFRvb2xDTEkodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CiAgICAgICAgIGZvciB0ZW1wZGlyIGluIGNscy50ZW1wb3JhcnlfZGlyZWN0b3JpZXM6Ci0gICAgICAgICAgICB0ZW1wZGlyLmNsZWFudXAoKQorICAgICAgICAgICAgcm10cmVlKHRlbXBkaXIubmFtZSwgaWdub3JlX2Vycm9ycz1UcnVlKQogICAgICAgICBmb3IgdGVtcGZpbGUgaW4gY2xzLnRlbXBvcmFyeV9maWxlczoKICAgICAgICAgICAgIG9zLnVubGluayh0ZW1wZmlsZSkKIAogICAgIGRlZiBjaGVja19ub19hcmdzKHNlbGYsIGNvbnRleHQpOgogICAgICAgICAiIiJDaGVjayBydW5uaW5nIHRoZSB0b29sIHdpdGggbm8gYXJndW1lbnRzLiIiIgotICAgICAgICAjIGlmIHRoZSBCSU5QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGRlZmluZWQKLSAgICAgICAgIyB1c2UgdGhhdCB0byBjb25zdHJ1Y3QgdGhlIGNvbW1hbmQgaW5zdGVhZCBvZiBqdXN0Ci0gICAgICAgICMgdGhlIG5hbWU7IHRoaXMgaXMgbmVlZGVkIGZvciB0aGUgQ0kgYnVpbGRzIHdoZXJlCi0gICAgICAgICMgd2UgZG8gbm90IGFsd2F5cyBhY3RpdmF0ZSB0aGUgY29uZGEgZW52aXJvbm1lbnQKLSAgICAgICAgYmlucGF0aCA9IG9zLmVudmlyb24uZ2V0KCJCSU5QQVRIIiwgTm9uZSkKLSAgICAgICAgaWYgYmlucGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGNtZCA9IGYie2JpbnBhdGh9L3tjb250ZXh0fSIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNtZCA9IGYie2NvbnRleHR9IgorICAgICAgICAjIGNhbGwgdGhlIG1haW4gZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBjb250ZXh0CisgICAgICAgICMgd2l0aCBubyBhcmd1bWVudHMgYW5kIGNoZWNrIHRoYXQgaXQgZXhpdHMKKyAgICAgICAgIyB3aXRoIGV4aXQgY29kZSAwIGFuZCBwcmludHMgb3V0IHRoZSB1c2FnZQorICAgICAgICBtYWluX2Z1bmN0aW9uID0gTUFJTl9GVU5DVElPTlNbY29udGV4dF0KKyAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoU3RyaW5nSU8oKSkgYXMgY2FwdHVyZWRfc3Rkb3V0OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KSBhcyBleGNtOgorICAgICAgICAgICAgICAgIG1haW5fZnVuY3Rpb24oW10pCisKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBleGl0IGNvZGUgaXMgMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y20uZXhjZXB0aW9uLmNvZGUsIDApCiAKLSAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MucnVuKAotICAgICAgICAgICAgc2hsZXguc3BsaXQoY21kLCBwb3NpeD0id2luIiBub3QgaW4gc3lzLnBsYXRmb3JtKSwKLSAgICAgICAgICAgIGNoZWNrPUZhbHNlLAotICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCwKLSAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jLnJldHVybmNvZGUsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiInVzYWdlOiAiICsgYnl0ZXMoY29udGV4dCwgZW5jb2Rpbmc9InV0Zi04IikgaW4gcHJvYy5zdGRvdXQpCisgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgYXBwcm9wcmlhdGUgdXNhZ2Ugd2FzIHByaW50ZWQgb3V0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmInVzYWdlOiB7Y29udGV4dH0iIGluIGNhcHR1cmVkX3N0ZG91dC5nZXR2YWx1ZSgpLmxvd2VyKCkpCiAKICAgICBkZWYgdGVzdF9ub19hcmdzKHNlbGYpOgogICAgICAgICAjIHRlc3QgdGhhdCB0aGUgdG9vbCB3aXRob3V0IGFueSBhcmd1bWVudHMgcHJpbnRzIGhlbHAgbWVzc2FnCkBAIC0yNjUsMTggKzI4MiwxNiBAQCBjbGFzcyBUZXN0VG9vbENMSSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXQgPSBleHBlY3RlZGZoLnJlYWQoKS5zdHJpcCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgZXhwZWN0ZWRfb3V0cHV0KQogCi0gICAgZGVmIGNoZWNrX3Rvb2xfY21kKAotICAgICAgICBzZWxmLCBjb250ZXh0LCBzdWJjbWQsIG91dHB1dF9kaXI9Tm9uZSwgd29ya2luZ19kaXI9Tm9uZSwgZ2VuZXJhdGVfb3V0cHV0X2ZpbGU9Tm9uZQotICAgICk6CisgICAgZGVmIGNoZWNrX3Rvb2xfY21kKHNlbGYsIGNvbnRleHQsIGFyZ3MsIG91dHB1dF9kaXI9Tm9uZSwgZ2VuZXJhdGVfb3V0cHV0X2ZpbGU9Tm9uZSk6CiAgICAgICAgICIiIgotICAgICAgICBUZXN0IHRoYXQgdGhlIGBgc3ViY21kYGAgaW52b2NhdGlvbiBmb3IgYGBjb250ZXh0YGAgd29ya3MgYXMgZXhwZWN0ZWQuCisgICAgICAgIFRlc3QgdGhhdCB0aGUgaW52b2NhdGlvbiBmb3IgYGBjb250ZXh0YGAgd2l0aCBgYGFyZ3NgYCB3b3JrcyBhcyBleHBlY3RlZC4KIAogICAgICAgICBQYXJhbWV0ZXJzCiAgICAgICAgIC0tLS0tLS0tLS0KICAgICAgICAgY29udGV4dCA6IHN0cgogICAgICAgICAgICAgTmFtZSBvZiB0aGUgdG9vbCBiZWluZyB0ZXN0ZWQuCi0gICAgICAgIHN1YmNtZCA6IHN0cgotICAgICAgICAgICAgVGhlIHRvb2wgY29tbWFuZC1saW5lIGludm9jYXRpb24gdGhhdCBpcyBiZWluZyB0ZXN0ZWQuCisgICAgICAgIGFyZ3MgOiBMaXN0W3N0cl0KKyAgICAgICAgICAgIFRoZSBsaXN0IG9mIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIHRvb2wuCiAgICAgICAgIG91dHB1dF9kaXIgOiBzdHIsIG9wdGlvbmFsCiAgICAgICAgICAgICBEaXJlY3RvcnkgY29udGFpbmluZyB0aGUgb3V0cHV0IGZvciAicnVuIiBzdWJjb21tYW5kcy4KICAgICAgICAgICAgIFdpbGwgYmUgYGBOb25lYGAgZm9yICJnZW5lcmF0ZSIgc3ViY29tbWFuZHMuCkBAIC0yOTAsNDMgKzMwNSwzNSBAQCBjbGFzcyBUZXN0VG9vbENMSSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgIHdyaXR0ZW4gdG8gYSBzcGVjaWZpYyBvdXRwdXQgZmlsZS4KICAgICAgICAgICAgRGVmYXVsdHMgdG8gYGBOb25lYGAuCiAgICAgICAgICIiIgotICAgICAgICAjIGlmIHRoZSBCSU5QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGRlZmluZWQKLSAgICAgICAgIyB1c2UgdGhhdCB0byBjb25zdHJ1Y3QgdGhlIGNvbW1hbmQgaW5zdGVhZCBvZiBqdXN0Ci0gICAgICAgICMgdGhlIG5hbWU7IHRoaXMgaXMgbmVlZGVkIGZvciB0aGUgQ0kgYnVpbGRzIHdoZXJlCi0gICAgICAgICMgd2UgZG8gbm90IGFsd2F5cyBhY3RpdmF0ZSB0aGUgY29uZGEgZW52aXJvbm1lbnQKLSAgICAgICAgYmlucGF0aCA9IG9zLmVudmlyb24uZ2V0KCJCSU5QQVRIIiwgTm9uZSkKLSAgICAgICAgaWYgYmlucGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGNtZCA9IGYie2JpbnBhdGh9L3tjb250ZXh0fSB7c3ViY21kfSIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNtZCA9IGYie2NvbnRleHR9IHtzdWJjbWR9IgorICAgICAgICAjIGdldCB0aGUgbWFpbiBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIGNvbnRleHQKKyAgICAgICAgbWFpbl9mdW5jdGlvbiA9IE1BSU5fRlVOQ1RJT05TW2NvbnRleHRdCisKKyAgICAgICAgIyBpbmNyZWFzZSB0aGUgbG9nZ2luZyBsZXZlbCBmb3IgdGhlIHRvb2wncyBsb2dnZXIgc2luY2Ugd2UgZG9uJ3QKKyAgICAgICAgIyB3YW50IHRvIHNlZSB0aGUgbG9nZ2luZyBtZXNzYWdlcyB3aGVuIHdlIHJ1biB0aGUgdG9vbCBmb3IgdGhpcyB0ZXN0CisgICAgICAgIGNvbnRleHRfbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoZiJyc210b29sLntjb250ZXh0fSIpCisgICAgICAgIGNvbnRleHRfbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuQ1JJVElDQUwpCisKKyAgICAgICAgIyBkbyB0aGUgc2FtZSBmb3IgdGhlIGB1dGlscy5jb21tYW5kbGluZWAgbG9nZ2VyIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8KKyAgICAgICAgIyBzZWUgdGhlIGxvZ2dpbmcgbWVzc2FnZXMgZm9yIGNvbmZpZ3VyYXRpb24gZ2VuZXJhdGlvbiBlaXRoZXIKKyAgICAgICAgY29tbWFuZGxpbmVfbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInJzbXRvb2wudXRpbHMuY29tbWFuZGxpbmUiKQorICAgICAgICBjb21tYW5kbGluZV9sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5DUklUSUNBTCkKKworICAgICAgICAjIGNhbGwgdGhlIG1haW4gZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBjb250ZXh0IHdpdGggdGhlIGFyZ3VtZW50cworICAgICAgICAjIGJ1dCByZWRpcmVjdCBTVERPVVQgYW5kIFNUREVSUiB0byBTdHJpbmdJTyBvYmplY3RzCisgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KFN0cmluZ0lPKCkpIGFzIGNhcHR1cmVkX3N0ZG91dCwgcmVkaXJlY3Rfc3RkZXJyKFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgbWFpbl9mdW5jdGlvbihhcmdzKQorCisgICAgICAgICMgcmVzdG9yZSB0aGUgbG9nZ2luZyBsZXZlbCBmb3IgYm90aCBsb2dnZXJzCisgICAgICAgIGNvbnRleHRfbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICAgICAgY29tbWFuZGxpbmVfbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKIAogICAgICAgICAjIHJ1biBkaWZmZXJlbnQgY2hlY2tzIGRlcGVuZGluZyBvbiB0aGUgZ2l2ZW4gY29tbWFuZCB0eXBlCi0gICAgICAgIGNtZF90eXBlID0gImdlbmVyYXRlIiBpZiAiIGdlbmVyYXRlIiBpbiBjbWQgZWxzZSAicnVuIgorICAgICAgICBjbWRfdHlwZSA9ICJnZW5lcmF0ZSIgaWYgImdlbmVyYXRlIiBpbiBhcmdzIGVsc2UgInJ1biIKICAgICAgICAgaWYgY21kX3R5cGUgPT0gInJ1biI6Ci0gICAgICAgICAgICAjIGZvciBydW4gc3ViY29tbWFuZHMsIHdlIGNhbiBpZ25vcmUgdGhlIG1lc3NhZ2VzIHByaW50ZWQgdG8gc3Rkb3V0Ci0gICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5ydW4oCi0gICAgICAgICAgICAgICAgc2hsZXguc3BsaXQoY21kLCBwb3NpeD0id2luIiBub3QgaW4gc3lzLnBsYXRmb3JtKSwKLSAgICAgICAgICAgICAgICBjaGVjaz1UcnVlLAotICAgICAgICAgICAgICAgIGN3ZD13b3JraW5nX2RpciwKLSAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsCi0gICAgICAgICAgICAgICAgZW5jb2Rpbmc9InV0Zi04IiwKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgICMgdGhlbiBjaGVjayB0aGF0IHRoZSBjb21tbWFuZCByYW4gc3VjY2Vzc2Z1bGx5Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvYy5yZXR1cm5jb2RlID09IDApCi0gICAgICAgICAgICAjIGFuZCwgZmluYWxseSwgdGhhdCB0aGUgb3V0cHV0IHdhcyBhcyBleHBlY3RlZAorICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGlzIGFzIGV4cGVjdGVkCiAgICAgICAgICAgICBzZWxmLnZhbGlkYXRlX3J1bl9vdXRwdXQoY29udGV4dCwgb3V0cHV0X2RpcikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgZm9yIGdlbmVyYXRlIHN1YmNvbW1hbmRzLCB3ZSBpZ25vcmUgdGhlIHdhcm5pbmdzIHByaW50ZWQgdG8gc3RkZXJyCi0gICAgICAgICAgICBzdWJncm91cHMgPSAiLS1zdWJncm91cHMiIGluIGNtZAotICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MucnVuKAotICAgICAgICAgICAgICAgIHNobGV4LnNwbGl0KGNtZCwgcG9zaXg9IndpbiIgbm90IGluIHN5cy5wbGF0Zm9ybSksCi0gICAgICAgICAgICAgICAgY2hlY2s9VHJ1ZSwKLSAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgZW5jb2Rpbmc9InV0Zi04IiwKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9jLnJldHVybmNvZGUgPT0gMCkKKyAgICAgICAgICAgIHN1Ymdyb3VwcyA9ICItLXN1Ymdyb3VwcyIgaW4gYXJncwogICAgICAgICAgICAgIyBpZiBhbiBvdXRwdXQgZmlsZSB3YXMgc3BlY2lmaWVkLCB3ZSBnZXQgdGhlIG91dHB1dCB0byB2YWxpZGF0ZQogICAgICAgICAgICAgIyBieSByZWFkaW5nIHRoYXQgaW4gaW5zdGVhZCBvZiBmcm9tIFNURE9VVDsgaW4gdGhhdCBjYXNlIFNURE9VVAogICAgICAgICAgICAgIyBvbmx5IGNvbnRhaW5zIGEgbWVzc2FnZSB3aGljaCB3ZSBjYW4gYWxzbyB2YWxpZGF0ZQpAQCAtMzM0LDcgKzM0MSw3IEBAIGNsYXNzIFRlc3RUb29sQ0xJKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZ2VuZXJhdGVfb3V0cHV0X2ZpbGUsICJyIikgYXMgb3V0Zmg6CiAgICAgICAgICAgICAgICAgICAgIG91dHB1dF90b19jaGVjayA9IG91dGZoLnJlYWQoKS5zdHJpcCgpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dHB1dF90b19jaGVjayA9IHByb2Muc3Rkb3V0LnN0cmlwKCkKKyAgICAgICAgICAgICAgICBvdXRwdXRfdG9fY2hlY2sgPSBjYXB0dXJlZF9zdGRvdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCiAKICAgICAgICAgICAgIHNlbGYudmFsaWRhdGVfZ2VuZXJhdGVfb3V0cHV0KGNvbnRleHQsIG91dHB1dF90b19jaGVjaywgc3ViZ3JvdXBzPXN1Ymdyb3VwcykKIApAQCAtMzU3LDggKzM2NCw2MSBAQCBjbGFzcyBUZXN0VG9vbENMSSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAgICAgICAgICMgYW5kIHRlc3QgdGhlIGRlZmF1bHQgc3ViY29tbWFuZAogICAgICAgICAgICAgY29uZmlnX2ZpbGUgPSBnZXRhdHRyKHNlbGYsIGYie2NvbnRleHR9X2NvbmZpZ19maWxlIikKLSAgICAgICAgICAgIHN1YmNtZCA9IGYie2NvbmZpZ19maWxlfSB7dGVtcGRpci5uYW1lfSIKLSAgICAgICAgICAgIHlpZWxkIHNlbGYuY2hlY2tfdG9vbF9jbWQsIGNvbnRleHQsIHN1YmNtZCwgdGVtcGRpci5uYW1lLCBOb25lLCBOb25lCisgICAgICAgICAgICBhcmdzID0gW3N0cihjb25maWdfZmlsZSksIHRlbXBkaXIubmFtZV0KKyAgICAgICAgICAgIHlpZWxkIHNlbGYuY2hlY2tfdG9vbF9jbWQsIGNvbnRleHQsIGFyZ3MsIHRlbXBkaXIubmFtZSwgTm9uZQorCisgICAgZGVmIGNoZWNrX3J1bl93aXRob3V0X291dHB1dF9kaXJlY3Rvcnkoc2VsZiwgY29udGV4dCwgYXJncyk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGF0IHRoZSAicnVuIiBzdWJjb21tYW5kIHdvcmtzIHdpdGhvdXQgYW4gb3V0cHV0IGRpcmVjdG9yeS4KKworICAgICAgICBQYXJhbWV0ZXJzCisgICAgICAgIC0tLS0tLS0tLS0KKyAgICAgICAgY29udGV4dCA6IHN0cgorICAgICAgICAgICAgTmFtZSBvZiB0aGUgdG9vbCBiZWluZyB0ZXN0ZWQuCisgICAgICAgIGFyZ3MgOiBMaXN0W3N0cl0KKyAgICAgICAgICAgIFRoZSBsaXN0IG9mIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIHRvb2wuCisgICAgICAgICIiIgorICAgICAgICAjIGdldCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorICAgICAgICBjdXJyZW50X2RpciA9IG9zLmdldGN3ZCgpCisKKyAgICAgICAgIyBwYXRjaCB0aGUgYXBwcm9wcmlhdGUgcnVubmVyIGZ1bmN0aW9uIGZvciB0aGUgdG9vbCBiZWluZyB0ZXN0ZWQKKyAgICAgICAgaWYgY29udGV4dCA9PSAicnNtdG9vbCI6CisgICAgICAgICAgICBwYXRjaGVyID0gcGF0Y2goInJzbXRvb2wucnNtdG9vbC5ydW5fZXhwZXJpbWVudCIpCisgICAgICAgIGVsaWYgY29udGV4dCA9PSAicnNtZXZhbCI6CisgICAgICAgICAgICBwYXRjaGVyID0gcGF0Y2goInJzbXRvb2wucnNtZXZhbC5ydW5fZXZhbHVhdGlvbiIpCisgICAgICAgIGVsaWYgY29udGV4dCA9PSAicnNtY29tcGFyZSI6CisgICAgICAgICAgICBwYXRjaGVyID0gcGF0Y2goInJzbXRvb2wucnNtY29tcGFyZS5ydW5fY29tcGFyaXNvbiIpCisgICAgICAgIGVsaWYgY29udGV4dCA9PSAicnNtc3VtbWFyaXplIjoKKyAgICAgICAgICAgIHBhdGNoZXIgPSBwYXRjaCgicnNtdG9vbC5yc21zdW1tYXJpemUucnVuX3N1bW1hcnkiKQorICAgICAgICBlbGlmIGNvbnRleHQgPT0gInJzbXh2YWwiOgorICAgICAgICAgICAgcGF0Y2hlciA9IHBhdGNoKCJyc210b29sLnJzbXh2YWwucnVuX2Nyb3NzX3ZhbGlkYXRpb24iKQorICAgICAgICBlbGlmIGNvbnRleHQgPT0gInJzbWV4cGxhaW4iOgorICAgICAgICAgICAgcGF0Y2hlciA9IHBhdGNoKCJyc210b29sLnJzbWV4cGxhaW4uZ2VuZXJhdGVfZXhwbGFuYXRpb24iKQorCisgICAgICAgICMgc3RhcnQgdGhlIHBhdGNoZXIKKyAgICAgICAgbW9ja2VkX3J1bm5lciA9IHBhdGNoZXIuc3RhcnQoKQorCisgICAgICAgICMgaW5jcmVhc2UgdGhlIGxvZ2dpbmcgbGV2ZWwgZm9yIHRoZSB0b29sJ3MgbG9nZ2VyIHNpbmNlIHdlIGRvbid0CisgICAgICAgICMgd2FudCB0byBzZWUgdGhlIGxvZ2dpbmcgbWVzc2FnZXMgd2hlbiB3ZSBydW4gdGhlIHRvb2wgZm9yIHRoaXMgdGVzdAorICAgICAgICBjb250ZXh0X2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKGYicnNtdG9vbC57Y29udGV4dH0iKQorICAgICAgICBjb250ZXh0X2xvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkNSSVRJQ0FMKQorCisgICAgICAgICMgY2FsbCB0aGUgbWFpbiBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIGNvbnRleHQgd2l0aCB0aGUgYXJndW1lbnRzCisgICAgICAgIG1haW5fZnVuY3Rpb24gPSBNQUlOX0ZVTkNUSU9OU1tjb250ZXh0XQorICAgICAgICBtYWluX2Z1bmN0aW9uKGFyZ3MpCisKKyAgICAgICAgIyByZXN0b3JlIHRoZSBsb2dnaW5nIGxldmVsIGZvciB0aGUgdG9vbCdzIGxvZ2dlcgorICAgICAgICBjb250ZXh0X2xvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisKKyAgICAgICAgIyBzdG9wIHRoZSBwYXRjaGVyCisgICAgICAgIHBhdGNoZXIuc3RvcCgpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBydW5uZXIgd2FzIGNhbGxlZCB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMKKyAgICAgICAgIyBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYXMgdGhlIG91dHB1dCBkaXJlY3RvcnkKKyAgICAgICAgY29uZmlnX2ZpbGUgPSBtb2NrZWRfcnVubmVyLmNhbGxfYXJnc1swXVswXQorICAgICAgICBvdXRwdXRfZGlyID0gbW9ja2VkX3J1bm5lci5jYWxsX2FyZ3NbMF1bMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25maWdfZmlsZSwgc3RyKGNvbmZpZ19maWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXRfZGlyLCBjdXJyZW50X2RpcikKIAogICAgIGRlZiB0ZXN0X3J1bl93aXRob3V0X291dHB1dF9kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAgICMgdGVzdCB0aGF0ICJydW4iIHN1YmNvbW1hbmQgd29ya3Mgd2l0aG91dCBhbiBvdXRwdXQgZGlyZWN0b3J5CkBAIC0zNzgsMjcgKzQzOCwyNyBAQCBjbGFzcyBUZXN0VG9vbENMSSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAgICAgICAgICMgYW5kIHRlc3QgdGhlIHJ1biBzdWJjb21tYW5kIHdpdGhvdXQgYW4gb3V0cHV0IGRpcmVjdG9yeQogICAgICAgICAgICAgY29uZmlnX2ZpbGUgPSBnZXRhdHRyKHNlbGYsIGYie2NvbnRleHR9X2NvbmZpZ19maWxlIikKLSAgICAgICAgICAgIHN1YmNtZCA9IGYicnVuIHtjb25maWdfZmlsZX0iCi0gICAgICAgICAgICAjIHdlIGNhbGwgY2hlY2tfdG9vbF9jbWQgd2l0aCBhIHdvcmtpbmcgZGlyZWN0b3J5IGhlcmUgdG8gc2ltdWxhdGUKLSAgICAgICAgICAgICMgdGhlIHVzYWdlIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gdGhlIG91dHB1dCBkaXJlY3RvcnkKLSAgICAgICAgICAgICMgaXMgbm90IHNwZWNpZmllZAotICAgICAgICAgICAgeWllbGQgc2VsZi5jaGVja190b29sX2NtZCwgY29udGV4dCwgc3ViY21kLCB0ZW1wZGlyLm5hbWUsIHRlbXBkaXIubmFtZSwgTm9uZQorICAgICAgICAgICAgYXJncyA9IFsicnVuIiwgc3RyKGNvbmZpZ19maWxlKV0KKyAgICAgICAgICAgIHlpZWxkIHNlbGYuY2hlY2tfcnVuX3dpdGhvdXRfb3V0cHV0X2RpcmVjdG9yeSwgY29udGV4dCwgYXJncwogCi0gICAgZGVmIGNoZWNrX3J1bl9iYWRfb3ZlcndyaXRlKHNlbGYsIGNtZCk6CisgICAgZGVmIGNoZWNrX3J1bl9iYWRfb3ZlcndyaXRlKHNlbGYsIGNvbnRleHQsIGFyZ3MpOgogICAgICAgICAiIiJDaGVjayB0aGF0IHRoZSBvdmVyd3JpdGluZyBlcnJvciBpcyByYWlzZWQgcHJvcGVybHkuIiIiCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpIGFzIGU6Ci0gICAgICAgICAgICBfID0gc3VicHJvY2Vzcy5ydW4oCi0gICAgICAgICAgICAgICAgc2hsZXguc3BsaXQoY21kLCBwb3NpeD0id2luIiBub3QgaW4gc3lzLnBsYXRmb3JtKSwKLSAgICAgICAgICAgICAgICBjaGVjaz1UcnVlLAotICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCi0gICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCwKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiYWxyZWFkeSBjb250YWlucyIgaW4gZS5tc2cpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoIk9TRXJyb3IiIGluIGUubXNnKQorICAgICAgICAjIGluY3JlYXNlIHRoZSBsb2dnaW5nIGxldmVsIGZvciB0aGUgdG9vbCdzIGxvZ2dlciBzaW5jZSB3ZSBkb24ndAorICAgICAgICAjIHdhbnQgdG8gc2VlIHRoZSBsb2dnaW5nIG1lc3NhZ2VzIHdoZW4gd2UgcnVuIHRoZSB0b29sIGZvciB0aGlzIHRlc3QKKyAgICAgICAgY29udGV4dF9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihmInJzbXRvb2wue2NvbnRleHR9IikKKyAgICAgICAgY29udGV4dF9sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5DUklUSUNBTCkKKworICAgICAgICAjIHJ1biB0aGUgY29tbWFuZCBhbmQgY2hlY2sgdGhhdCBpdCBmYWlscyB3aXRoIHRoZSBleHBlY3RlZCBlcnJvciB0aGF0CisgICAgICAgICMgdGhlIG91dHB1dCBkaXJlY3RvcnkgYWxyZWFkeSBjb250YWlucyBhIG5vbi1lbXB0eSBvdXRwdXQgc3ViLWRpcmVjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoT1NFcnJvciwgImFscmVhZHkgY29udGFpbnMgYSBub24tZW1wdHkiKToKKyAgICAgICAgICAgIG1haW5fZnVuY3Rpb24gPSBNQUlOX0ZVTkNUSU9OU1tjb250ZXh0XQorICAgICAgICAgICAgbWFpbl9mdW5jdGlvbihhcmdzKQorCisgICAgICAgICMgcmVzdG9yZSB0aGUgbG9nZ2luZyBsZXZlbCBmb3IgdGhlIHRvb2wncyBsb2dnZXIKKyAgICAgICAgY29udGV4dF9sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQogCiAgICAgZGVmIHRlc3RfcnVuX2JhZF9vdmVyd3JpdGUoc2VsZik6CiAgICAgICAgICMgdGVzdCB0aGF0IHRoZSAicnVuIiBjb21tYW5kIGZhaWxzIHRvIG92ZXJ3cml0ZSB3aGVuICItZiIgaXMgbm90IHNwZWNpZmllZAotCiAgICAgICAgICMgdGhpcyBhcHBsaWVzIHRvIGFsbCB0b29scyBleGNlcHQgcnNtcHJlZGljdCwgcnNtY29tcGFyZSwgYW5kIHJzbXh2YWwKICAgICAgICAgZm9yIGNvbnRleHQgaW4gWyJyc210b29sIiwgInJzbWV2YWwiLCAicnNtc3VtbWFyaXplIiwgInJzbWV4cGxhaW4iXToKICAgICAgICAgICAgIHRlbXBkaXIgPSBUZW1wb3JhcnlEaXJlY3RvcnkoKQpAQCAtNDA5LDE3ICs0NjksMTAgQEAgY2xhc3MgVGVzdFRvb2xDTEkodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgZmFrZV9maWxlID0gUGF0aCh0ZW1wZGlyLm5hbWUpIC8gIm91dHB1dCIgLyAiZm9vLmNzdiIKICAgICAgICAgICAgIGZha2VfZmlsZS50b3VjaCgpCiAKKyAgICAgICAgICAgICMgbm93IHJ1biB0aGUgdG9vbCBhZ2FpbiBhbmQgY2hlY2sgdGhhdCBpdCBmYWlscwogICAgICAgICAgICAgY29uZmlnX2ZpbGUgPSBnZXRhdHRyKHNlbGYsIGYie2NvbnRleHR9X2NvbmZpZ19maWxlIikKLSAgICAgICAgICAgICMgaWYgdGhlIEJJTlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZGVmaW5lZAotICAgICAgICAgICAgIyB1c2UgdGhhdCB0byBjb25zdHJ1Y3QgdGhlIGNvbW1hbmQgaW5zdGVhZCBvZiBqdXN0Ci0gICAgICAgICAgICAjIHRoZSBuYW1lOyB0aGlzIGlzIG5lZWRlZCBmb3IgdGhlIENJIGJ1aWxkcyB3aGVyZQotICAgICAgICAgICAgIyB3ZSBkbyBub3QgYWx3YXlzIGFjdGl2YXRlIHRoZSBjb25kYSBlbnZpcm9ubWVudAotICAgICAgICAgICAgYmlucGF0aCA9IG9zLmVudmlyb24uZ2V0KCJCSU5QQVRIIiwgTm9uZSkKLSAgICAgICAgICAgIGlmIGJpbnBhdGggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgY21kID0gZiJ7YmlucGF0aH0ve2NvbnRleHR9IHtjb25maWdfZmlsZX0ge3RlbXBkaXIubmFtZX0iCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNtZCA9IGYie2NvbnRleHR9IHtjb25maWdfZmlsZX0ge3RlbXBkaXIubmFtZX0iCi0gICAgICAgICAgICB5aWVsZCBzZWxmLmNoZWNrX3J1bl9iYWRfb3ZlcndyaXRlLCBjbWQKKyAgICAgICAgICAgIGFyZ3MgPSBbc3RyKGNvbmZpZ19maWxlKSwgdGVtcGRpci5uYW1lXQorICAgICAgICAgICAgeWllbGQgc2VsZi5jaGVja19ydW5fYmFkX292ZXJ3cml0ZSwgY29udGV4dCwgYXJncwogCiAgICAgZGVmIHRlc3RfcnVuX2dvb2Rfb3ZlcndyaXRlKHNlbGYpOgogICAgICAgICAjICB0ZXN0IHRoYXQgdGhlICJydW4iIGNvbW1hbmQgZG9lcyBvdmVyd3JpdGUgd2hlbiAiLWYiIGlzIHNwZWNpZmllZApAQCAtNDM1LDE5ICs0ODgsMjEgQEAgY2xhc3MgVGVzdFRvb2xDTEkodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgZmFrZV9maWxlLnRvdWNoKCkKIAogICAgICAgICAgICAgY29uZmlnX2ZpbGUgPSBnZXRhdHRyKHNlbGYsIGYie2NvbnRleHR9X2NvbmZpZ19maWxlIikKLSAgICAgICAgICAgIHN1YmNtZCA9IGYie2NvbmZpZ19maWxlfSB7dGVtcGRpci5uYW1lfSAtZiIKLSAgICAgICAgICAgIHlpZWxkIHNlbGYuY2hlY2tfdG9vbF9jbWQsIGNvbnRleHQsIHN1YmNtZCwgdGVtcGRpci5uYW1lLCBOb25lLCBOb25lCisgICAgICAgICAgICBhcmdzID0gW3N0cihjb25maWdfZmlsZSksIHRlbXBkaXIubmFtZSwgIi1mIl0KKyAgICAgICAgICAgIHlpZWxkIHNlbGYuY2hlY2tfdG9vbF9jbWQsIGNvbnRleHQsIGFyZ3MsIHRlbXBkaXIubmFtZSwgTm9uZQogCiAgICAgZGVmIHRlc3RfcnNtcHJlZGljdF9ydW5fZmVhdHVyZXNfZmlsZShzZWxmKToKICAgICAgICAgdGVtcGRpciA9IFRlbXBvcmFyeURpcmVjdG9yeSgpCiAgICAgICAgIHNlbGYudGVtcG9yYXJ5X2RpcmVjdG9yaWVzLmFwcGVuZCh0ZW1wZGlyKQogCi0gICAgICAgIHN1YmNtZCA9ICgKLSAgICAgICAgICAgIGYie3NlbGYucnNtcHJlZGljdF9jb25maWdfZmlsZX0ge3RlbXBkaXIubmFtZX0gIgotICAgICAgICAgICAgZiItLWZlYXR1cmVzIHt0ZW1wZGlyLm5hbWV9L3ByZXByb2Nlc3NlZF9mZWF0dXJlcy5jc3YiCi0gICAgICAgICkKKyAgICAgICAgYXJncyA9IFsKKyAgICAgICAgICAgIHN0cihzZWxmLnJzbXByZWRpY3RfY29uZmlnX2ZpbGUpLAorICAgICAgICAgICAgdGVtcGRpci5uYW1lLAorICAgICAgICAgICAgIi0tZmVhdHVyZXMiLAorICAgICAgICAgICAgZiJ7dGVtcGRpci5uYW1lfS9wcmVwcm9jZXNzZWRfZmVhdHVyZXMuY3N2IiwKKyAgICAgICAgXQogCi0gICAgICAgIHNlbGYuY2hlY2tfdG9vbF9jbWQoInJzbXByZWRpY3QiLCBzdWJjbWQsIHRlbXBkaXIubmFtZSwgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja190b29sX2NtZCgicnNtcHJlZGljdCIsIGFyZ3MsIHRlbXBkaXIubmFtZSwgTm9uZSkKIAogICAgICAgICAjIGNoZWNrIHRoZSBmZWF0dXJlcyBmaWxlIHNlcGFyYXRlbHkKICAgICAgICAgZmlsZTEgPSBQYXRoKHRlbXBkaXIubmFtZSkgLyAicHJlcHJvY2Vzc2VkX2ZlYXR1cmVzLmNzdiIKQEAgLTQ2Nyw3ICs1MjIsNyBAQCBjbGFzcyBUZXN0VG9vbENMSSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAicnNteHZhbCIsCiAgICAgICAgICAgICAicnNtZXhwbGFpbiIsCiAgICAgICAgIF06Ci0gICAgICAgICAgICB5aWVsZCBzZWxmLmNoZWNrX3Rvb2xfY21kLCBjb250ZXh0LCAiZ2VuZXJhdGUiLCBOb25lLCBOb25lLCBOb25lCisgICAgICAgICAgICB5aWVsZCBzZWxmLmNoZWNrX3Rvb2xfY21kLCBjb250ZXh0LCBbImdlbmVyYXRlIl0sIE5vbmUsIE5vbmUKIAogICAgIGRlZiB0ZXN0X2dlbmVyYXRlX3dpdGhfZ3JvdXBzKHNlbGYpOgogICAgICAgICAjIHRlc3QgdGhhdCB0aGUgImdlbmVyYXRlIC0tc3ViZ3JvdXBzIiBzdWJjb21tYW5kIGZvciBhbGwgdG9vbHMgd29ya3MKQEAgLTQ3Nyw3ICs1MzIsNyBAQCBjbGFzcyBUZXN0VG9vbENMSSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICMgcnNteHZhbCBhbmQgcnNtZXhwbGFpbjsgcnNteHZhbCBkb2VzIHN1cHBvcnQgc3ViZ3JvdXBzIGJ1dCBzaW5jZSBpdCBoYXMgbm8gc2VjdGlvbnMKICAgICAgICAgIyBmaWVsZHMsIGl0J3Mgbm90IHJlbGV2YW50IGZvciB0aGlzIHRlc3QKICAgICAgICAgZm9yIGNvbnRleHQgaW4gWyJyc210b29sIiwgInJzbWV2YWwiLCAicnNtY29tcGFyZSJdOgotICAgICAgICAgICAgeWllbGQgc2VsZi5jaGVja190b29sX2NtZCwgY29udGV4dCwgImdlbmVyYXRlIC0tc3ViZ3JvdXBzIiwgTm9uZSwgTm9uZSwgTm9uZQorICAgICAgICAgICAgeWllbGQgc2VsZi5jaGVja190b29sX2NtZCwgY29udGV4dCwgWyJnZW5lcmF0ZSIsICItLXN1Ymdyb3VwcyJdLCBOb25lLCBOb25lCiAKICAgICBkZWYgdGVzdF9nZW5lcmF0ZV93aXRoX291dHB1dF9maWxlKHNlbGYpOgogICAgICAgICAjIHRlc3QgdGhhdCB0aGUgImdlbmVyYXRlIC0tb3V0cHV0IDxmaWxlPiIgc3ViY29tbWFuZCBmb3IgYWxsIHRvb2xzIHdvcmtzCkBAIC00OTcsOCArNTUyLDcgQEAgY2xhc3MgVGVzdFRvb2xDTEkodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgeWllbGQgKAogICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdG9vbF9jbWQsCiAgICAgICAgICAgICAgICAgY29udGV4dCwKLSAgICAgICAgICAgICAgICBmImdlbmVyYXRlIC0tb3V0cHV0IHt0ZW1wZi5uYW1lfSIsCi0gICAgICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICAgICBbImdlbmVyYXRlIiwgIi0tb3V0cHV0IiwgdGVtcGYubmFtZV0sCiAgICAgICAgICAgICAgICAgTm9uZSwKICAgICAgICAgICAgICAgICB0ZW1wZi5uYW1lLAogICAgICAgICAgICAgKQpAQCAtNTA4LDggKzU2Miw4IEBAIGNsYXNzIFRlc3RUb29sQ0xJKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgIyBhcyBleHBlY3RlZCB3aGVuIHdyaXR0ZW4gdG8gb3V0cHV0IGZpbGVzCiAKICAgICAgICAgIyB0aGlzIGFwcGxpZXMgdG8gYWxsIHRvb2xzIGV4Y2VwdCByc21wcmVkaWN0LCByc21zdW1tYXJpemUsCi0gICAgICAgICMgcnNteHZhbCBhbmQgcnNtZXhwbGFpbjsgcnNteHZhbCBkb2VzIHN1cHBvcnQgc3ViZ3JvdXBzIGJ1dCBzaW5jZSBpdCBoYXMgbm8gc2VjdGlvbnMKLSAgICAgICAgIyBmaWVsZHMsIGl0J3Mgbm90IHJlbGV2YW50IGZvciB0aGlzIHRlc3QKKyAgICAgICAgIyByc214dmFsIGFuZCByc21leHBsYWluOyByc214dmFsIGRvZXMgc3VwcG9ydCBzdWJncm91cHMgYnV0CisgICAgICAgICMgc2luY2UgaXQgaGFzIG5vIHNlY3Rpb25zIGZpZWxkcywgaXQncyBub3QgcmVsZXZhbnQgZm9yIHRoaXMgdGVzdAogICAgICAgICBmb3IgY29udGV4dCBpbiBbInJzbXRvb2wiLCAicnNtZXZhbCIsICJyc21jb21wYXJlIl06CiAgICAgICAgICAgICB0ZW1wZiA9IE5hbWVkVGVtcG9yYXJ5RmlsZShtb2RlPSJ3Iiwgc3VmZml4PSIuanNvbiIsIGRlbGV0ZT1GYWxzZSkKICAgICAgICAgICAgIHRlbXBmLmNsb3NlKCkKQEAgLTUxNyw4ICs1NzEsNyBAQCBjbGFzcyBUZXN0VG9vbENMSSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICB5aWVsZCAoCiAgICAgICAgICAgICAgICAgc2VsZi5jaGVja190b29sX2NtZCwKICAgICAgICAgICAgICAgICBjb250ZXh0LAotICAgICAgICAgICAgICAgIGYiZ2VuZXJhdGUgLS1zdWJncm91cHMgLS1vdXRwdXQge3RlbXBmLm5hbWV9IiwKLSAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgIFsiZ2VuZXJhdGUiLCAiLS1zdWJncm91cHMiLCAiLS1vdXRwdXQiLCB0ZW1wZi5uYW1lXSwKICAgICAgICAgICAgICAgICBOb25lLAogICAgICAgICAgICAgICAgIHRlbXBmLm5hbWUsCiAgICAgICAgICAgICApCg=='\"'\"'))'",
      "git apply /tmp/receipts-educationaltestingservice__rsmtool-669-test.patch"
    ],
    "workdir": "/rsmtool"
  },
  "spec_paths": [
    "tests/test_cli.py"
  ],
  "spec_tests": [
    "tests/test_cli.py::TestToolCLI::test_rsmpredict_run_features_file"
  ],
  "suite_scope": "--no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning tests/test_cli.py"
}
