From 2b4db09d3d749929d6404f21ac15626560a00b55 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Wed, 10 Jun 2026 10:32:58 -0500 Subject: [PATCH 1/4] evals: add 3 Python API evals for cuopt-numerical-optimization-api-python skill MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds numopt-py-eval-002, 003, 004 covering skill-specific Python API gotchas: - eval-002: status case sensitivity bug — 'OPTIMAL' vs 'Optimal' silent failure - eval-003: INTEGER vs CONTINUOUS for countable entities (nurses/workers) - eval-004: QP maximize workaround — negate coefficients and MINIMIZE Co-Authored-By: Claude Sonnet 4.6 --- .../evals/evals.json | 49 +++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/skills/cuopt-numerical-optimization-api-python/evals/evals.json b/skills/cuopt-numerical-optimization-api-python/evals/evals.json index e7611880d6..04cbf5a85d 100644 --- a/skills/cuopt-numerical-optimization-api-python/evals/evals.json +++ b/skills/cuopt-numerical-optimization-api-python/evals/evals.json @@ -1,10 +1,10 @@ [ { "id": "numopt-py-eval-001-lp-api-call-sequence", - "question": "I want to solve a small LP (continuous variables only, maximize a linear objective with linear constraints) using the cuOpt Python API. List the API calls in order — name each method, one line per method, no full runnable script.", + "question": "I want to solve a small LP (continuous variables only, maximize a linear objective with linear constraints) using the cuOpt Python API. List the API calls in order \u2014 name each method, one line per method, no full runnable script.", "expected_skill": "cuopt-numerical-optimization-api-python", "expected_script": null, - "ground_truth": "The agent produces an ordered list of API calls without a runnable script. The list, in order: (1) Import Problem, CONTINUOUS, and MAXIMIZE from cuopt.linear_programming.problem, and SolverSettings from cuopt.linear_programming.solver_settings. (2) Construct Problem('name'). (3) For each decision variable, call problem.addVariable(lb=..., vtype=CONTINUOUS, name=...). (4) For each constraint, call problem.addConstraint( <= or >= or == , name=...). (5) Call problem.setObjective(, sense=MAXIMIZE). (6) Construct SolverSettings(); call set_parameter('time_limit', ...) for time budget. (7) Call problem.solve(settings). (8) Check problem.Status.name in ['Optimal', 'PrimalFeasible'] (PascalCase status names — case-sensitive). (9) Read problem.ObjValue for the objective, and each variable's .getValue() for its optimal value. The agent uses LP (not MILP / QP) because all variables are continuous and the objective is linear. Mentions that status names are PascalCase (Optimal, not OPTIMAL or optimal) — case sensitivity matters.", + "ground_truth": "The agent produces an ordered list of API calls without a runnable script. The list, in order: (1) Import Problem, CONTINUOUS, and MAXIMIZE from cuopt.linear_programming.problem, and SolverSettings from cuopt.linear_programming.solver_settings. (2) Construct Problem('name'). (3) For each decision variable, call problem.addVariable(lb=..., vtype=CONTINUOUS, name=...). (4) For each constraint, call problem.addConstraint( <= or >= or == , name=...). (5) Call problem.setObjective(, sense=MAXIMIZE). (6) Construct SolverSettings(); call set_parameter('time_limit', ...) for time budget. (7) Call problem.solve(settings). (8) Check problem.Status.name in ['Optimal', 'PrimalFeasible'] (PascalCase status names \u2014 case-sensitive). (9) Read problem.ObjValue for the objective, and each variable's .getValue() for its optimal value. The agent uses LP (not MILP / QP) because all variables are continuous and the objective is linear. Mentions that status names are PascalCase (Optimal, not OPTIMAL or optimal) \u2014 case sensitivity matters.", "expected_behavior": [ "Selects LP (not MILP or QP) given continuous variables and a linear objective", "Lists the API calls in order without producing a full runnable script", @@ -15,5 +15,48 @@ "Mentions that status names are case-sensitive (PascalCase)", "Does not invent method names that are not in the skill" ] + }, + { + "id": "numopt-py-eval-002-status-case-sensitivity", + "question": "My cuOpt Python LP solve runs without error but the result block never executes. Here is the check I wrote: if problem.Status.name == 'OPTIMAL': print(problem.ObjValue). What is wrong and how do I fix it?", + "expected_skill": "cuopt-numerical-optimization-api-python", + "expected_script": null, + "ground_truth": "The check silently fails because cuOpt status names use PascalCase, not ALL_CAPS. The string 'OPTIMAL' never matches. The correct LP status values to check are 'Optimal' and 'PrimalFeasible'. The fixed check is: if problem.Status.name in ['Optimal', 'PrimalFeasible']: print(problem.ObjValue). For MILP the correct values are 'Optimal' and 'FeasibleFound'. This is a common silent bug \u2014 the solve completes successfully but the code path that reads results is skipped because the string comparison always returns False.", + "expected_behavior": [ + "Identifies the bug as a case mismatch \u2014 'OPTIMAL' is wrong, 'Optimal' is correct", + "States that cuOpt status names are PascalCase, not ALL_CAPS", + "Gives the correct LP check: problem.Status.name in ['Optimal', 'PrimalFeasible']", + "Notes that for MILP the passing status is 'FeasibleFound' not 'FEASIBLE_FOUND' or 'FEASIBLEFOUND'", + "Explains why this is a silent failure \u2014 no exception is raised, the block just never executes" + ] + }, + { + "id": "numopt-py-eval-003-integer-vs-continuous-workers", + "question": "I am modeling a staffing problem where I need to decide how many nurses to assign to each ward. Should the nurse count variables be INTEGER or CONTINUOUS in the cuOpt Python API, and what vtype constant do I use for each?", + "expected_skill": "cuopt-numerical-optimization-api-python", + "expected_script": null, + "ground_truth": "Nurse counts should be INTEGER because nurses are discrete countable entities \u2014 you cannot assign 2.7 nurses to a ward. The vtype constant is INTEGER (imported from cuopt.linear_programming.problem). The addVariable call would be: problem.addVariable(lb=0, vtype=INTEGER, name='ward_a_nurses'). This makes the problem a MILP, not an LP. CONTINUOUS would be wrong here because it allows fractional values, which are meaningless for headcounts. The rule is: 'how many things' (people, vehicles, machines) \u2192 INTEGER; 'how much of something' (hours, tonnes, dollars) \u2192 CONTINUOUS.", + "expected_behavior": [ + "States nurse counts must be INTEGER because nurses are discrete countable entities", + "Names the correct vtype constant: INTEGER (imported from cuopt.linear_programming.problem)", + "Shows or describes the addVariable call with vtype=INTEGER", + "States this makes the problem MILP, not LP", + "Explains why CONTINUOUS is wrong \u2014 it allows fractional nurse counts", + "States the rule: countable things \u2192 INTEGER, measurable amounts \u2192 CONTINUOUS" + ] + }, + { + "id": "numopt-py-eval-004-qp-maximize-workaround", + "question": "I want to maximize a quadratic objective using the cuOpt Python QP API. When I pass sense=MAXIMIZE to setObjective, I get an error. What is the correct approach?", + "expected_skill": "cuopt-numerical-optimization-api-python", + "expected_script": null, + "ground_truth": "The cuOpt QP solver only supports MINIMIZE \u2014 MAXIMIZE is rejected for quadratic objectives. The correct workaround is to negate all coefficients in the objective and minimize the negated expression. For example, to maximize 0.04*x1*x1 + 0.02*x2*x2, minimize -0.04*x1*x1 - 0.02*x2*x2 with sense=MINIMIZE. The resulting problem.ObjValue will be the negated maximum; multiply by -1 to recover the true maximum. All variables must remain CONTINUOUS \u2014 integer QP is not supported. The Q matrix of the original maximization problem should be negative semi-definite (NSD) for the problem to be concave; after negation it becomes PSD, which is what the solver expects.", + "expected_behavior": [ + "States QP only supports MINIMIZE \u2014 MAXIMIZE is rejected", + "Gives the correct workaround: negate all objective coefficients and use sense=MINIMIZE", + "Notes that problem.ObjValue will be negated and must be multiplied by -1 to get the true maximum", + "Reminds that all variables must be CONTINUOUS \u2014 integer QP is not supported", + "Does not suggest a non-existent MAXIMIZE_QP or similar invented API" + ] } -] +] \ No newline at end of file From f87c77a7ce59439dc81736f9247bb4e855ef2749 Mon Sep 17 00:00:00 2001 From: nvskills-svc-account Date: Wed, 10 Jun 2026 17:03:33 +0000 Subject: [PATCH 2/4] Attach NVSkills validation signatures Signed-off-by: nvskills-svc-account --- .../BENCHMARK.md | 35 +++++++++---------- .../skill-card.md | 24 ++++++------- .../skill.oms.sig | 2 +- 3 files changed, 29 insertions(+), 32 deletions(-) diff --git a/skills/cuopt-numerical-optimization-api-python/BENCHMARK.md b/skills/cuopt-numerical-optimization-api-python/BENCHMARK.md index dee9f67004..5f42f4e9b1 100644 --- a/skills/cuopt-numerical-optimization-api-python/BENCHMARK.md +++ b/skills/cuopt-numerical-optimization-api-python/BENCHMARK.md @@ -7,13 +7,14 @@ This benchmark summarizes 3-Tier Evaluation from NVSkills-Eval results for the s ## Evaluation Summary - Skill: `cuopt-numerical-optimization-api-python` -- Evaluation date: 2026-05-29 +- Evaluation date: 2026-06-10 - NVSkills-Eval profile: `external` -- Environment: `local` -- Dataset: 1 evaluation tasks -- Attempts per task: 2 +- Environment: `astra-sandbox` +- Dataset: 4 evaluation tasks +- Attempts per task: 1 - Pass threshold: 50% - Overall verdict: FAIL +The skill should be reviewed before NVSkills-Eval publication. **Skill owners should address the applicable findings below and rerun NVSkills-Eval to refresh this benchmark.** ## Agents Used @@ -42,9 +43,9 @@ Underlying evaluation signals used in this run: ## Test Tasks -The benchmark dataset contained 1 evaluation tasks: +The benchmark dataset contained 4 evaluation tasks: -- Positive tasks: 1 tasks where the skill was expected to activate. +- Positive tasks: 4 tasks where the skill was expected to activate. - Negative tasks: 0 tasks where no skill was expected. - Unlabeled tasks: 0 tasks where positive/negative intent could not be inferred. @@ -54,25 +55,25 @@ Task composition is derived from the evaluation dataset when possible. Entries w | Dimension | Num | `claude-code` | `codex` | |---|---:|---:|---:| -| Security | 2 | 100% (+0%) | 100% (+0%) | -| Correctness | 2 | 100% (+0%) | 82% (+5%) | -| Discoverability | 2 | 100% (+0%) | 84% (+5%) | -| Effectiveness | 2 | 79% (-1%) | 40% (-9%) | -| Efficiency | 2 | 93% (-0%) | 77% (+1%) | +| Security | 4 | 100% (+0%) | 100% (+0%) | +| Correctness | 4 | 62% (+26%) | 84% (+30%) | +| Discoverability | 4 | 50% (+44%) | 62% (+34%) | +| Effectiveness | 4 | 62% (+14%) | 80% (+34%) | +| Efficiency | 4 | 61% (+36%) | 60% (+24%) | Score values show skill-assisted performance. Values in parentheses show uplift versus the no-skill baseline when baseline data is available. ## Tier 1: Static Validation Summary -Tier 1 validation passed with observations. NVSkills-Eval ran 9 checks and found 15 total findings. +Tier 1 validation passed with observations. NVSkills-Eval ran 9 checks and found 11 total findings. Top findings: -- MEDIUM PII/gps_coordinates: GPS coordinates (location information) (`references/qp_examples.md:162`) -- MEDIUM PII/gps_coordinates: GPS coordinates (location information) (`references/qp_examples.md:163`) -- MEDIUM PII/gps_coordinates: GPS coordinates (location information) (`references/qp_examples.md:164`) - MEDIUM PII/phone_numbers: International phone number (`assets/mps_solver/results.md:48`) - MEDIUM PII/phone_numbers: International phone number (`assets/mps_solver/results.md:69`) +- MEDIUM SCHEMA/body_recommended_section: Missing recommended section: '## Instructions' (`skills/cuopt-numerical-optimization-api-python/SKILL.md`) +- MEDIUM SCHEMA/body_recommended_section: Missing recommended section: '## Examples' (`skills/cuopt-numerical-optimization-api-python/SKILL.md`) +- MEDIUM SECURITY/Unknown (SQP-2): The code downloads a file from a hardcoded external URL (miplib.zib.de) using urllib.request.urlretrieve without any int (`assets/mps_solver/model.py:39`) ## Tier 2: Deduplication Summary @@ -97,7 +98,3 @@ Top findings: "# Check status (CRITICAL: use PascalCase!)" in SKILL.md (lines 68-74) vs "# ✅ CORRECT" in SKILL.md (lines 148-151) vs "# Check solution" in assets/mps_solver/README.md (lines 81-85) (`SKILL.md:68`) - -## Publication Recommendation - -The skill should be reviewed before NVSkills-Eval publication. Skill owners should address the findings above and rerun NVSkills-Eval to refresh this benchmark. diff --git a/skills/cuopt-numerical-optimization-api-python/skill-card.md b/skills/cuopt-numerical-optimization-api-python/skill-card.md index d6e0443edb..a852b6d76f 100644 --- a/skills/cuopt-numerical-optimization-api-python/skill-card.md +++ b/skills/cuopt-numerical-optimization-api-python/skill-card.md @@ -7,9 +7,9 @@ This skill is ready for commercial/non-commercial use.
NVIDIA
### License/Terms of Use:
-Apache-2.0
+Apache 2.0
## Use Case:
-Developers and engineers use this skill to formulate and solve linear programming (LP), mixed-integer linear programming (MILP), and quadratic programming (QP) optimization problems using NVIDIA cuOpt's GPU-accelerated Python API.
+Developers and engineers modeling and solving linear programming, mixed-integer linear programming, and quadratic programming problems using the NVIDIA cuOpt GPU-accelerated Python API.
### Deployment Geography for Use:
Global
@@ -19,14 +19,14 @@ Risk: Review before execution as proposals could introduce incorrect or misleadi Mitigation: Review and scan skill before deployment.
## Reference(s):
-- [cuOpt User Guide](https://docs.nvidia.com/cuopt/user-guide/latest/introduction.html)
-- [cuOpt Examples](https://github.com/NVIDIA/cuopt-examples)
- [QP Examples Reference](references/qp_examples.md)
+- [cuOpt User Guide](https://docs.nvidia.com/cuopt/user-guide/latest/introduction.html)
+- [cuOpt Examples Repository](https://github.com/NVIDIA/cuopt-examples)
## Skill Output:
-**Output Type(s):** [Code, API Calls, Analysis]
-**Output Format:** [Python code with inline solver output]
+**Output Type(s):** [Code, Analysis]
+**Output Format:** [Python code with solver output]
**Output Parameters:** [1D]
**Other Properties Related to Output:** [None]
@@ -37,7 +37,7 @@ Mitigation: Review and scan skill before deployment.
## Evaluation Tasks:
-Evaluated against 1 task with 2 attempts per agent; pass threshold 50%. NVSkills-Eval profile: external.
+Evaluated against 4 evaluation tasks (4 positive skill-activation cases) using the NVSkills-Eval external profile in an astra-sandbox environment.
## Evaluation Metrics Used:
Reported benchmark dimensions:
@@ -61,11 +61,11 @@ Underlying evaluation signals used in this run:
## Evaluation Results:
| Dimension | Num | `claude-code` | `codex` | |---|---:|---:|---:| -| Security | 2 | 100% (+0%) | 100% (+0%) | -| Correctness | 2 | 100% (+0%) | 82% (+5%) | -| Discoverability | 2 | 100% (+0%) | 84% (+5%) | -| Effectiveness | 2 | 79% (-1%) | 40% (-9%) | -| Efficiency | 2 | 93% (-0%) | 77% (+1%) | +| Security | 4 | 100% (+0%) | 100% (+0%) | +| Correctness | 4 | 62% (+26%) | 84% (+30%) | +| Discoverability | 4 | 50% (+44%) | 62% (+34%) | +| Effectiveness | 4 | 62% (+14%) | 80% (+34%) | +| Efficiency | 4 | 61% (+36%) | 60% (+24%) | ## Skill Version(s):
26.08.00 (source: frontmatter)
diff --git a/skills/cuopt-numerical-optimization-api-python/skill.oms.sig b/skills/cuopt-numerical-optimization-api-python/skill.oms.sig index 6a685c98ec..2a92e77a59 100644 --- a/skills/cuopt-numerical-optimization-api-python/skill.oms.sig +++ b/skills/cuopt-numerical-optimization-api-python/skill.oms.sig @@ -1 +1 @@ -{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtbnVtZXJpY2FsLW9wdGltaXphdGlvbi1hcGktcHl0aG9uIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImJmODA2NTk5ZTAyOTIwZjk1YzQwNzBkMDhlMGE4MmMyMDg0M2NlMWY5ODhlZjljYzdiZjY2YThkMDQzYTdiYzMiCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJyZXNvdXJjZXMiOiBbCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJCRU5DSE1BUksubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjA5ZWE0N2JlNjA1ZWY4ZGRjMGY5MzRjMTZkNzE2NTUwNGMyYzhmYzc5NTNmYWFhYjJlYWFiMjNiZjk3MDI3MWEiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJTS0lMTC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiNmY0YTQzMmI3ZDY4MTk0ZTdkYzMwZmNkYWQ5NTUzOTg0ZDA4M2ExOTkxMjQ3MzMwN2NlMmY2NTVkMWRkNWQzZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9SRUFETUUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogImU2MjFkZGEyZTVkN2E1MmNhOTdjZDMxOTBiNGI0NmM1NmE0ZDkzMzgyYTdjNWIxYjYzYjcxOGY0NzEyNjM0MWYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJhc3NldHMvbGVhc3Rfc3F1YXJlcy9SRUFETUUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjY2OGI3MmIwZDgxOWFjMzZhZjIzODE2MTRlYmI3OGRiNTM3N2QwOTE3NDVmMjllNDk4MDFmMjhjY2U3ZjZhY2QiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJhc3NldHMvbGVhc3Rfc3F1YXJlcy9tb2RlbC5weSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiMmNhYTgxNDM1YTQxMzZlODcxYTNmYmI0YmJlMTA4Y2MxYjU2ZmEzOTJhNDY2MjU3ODg0ZmMyZjVjMzllNGQ4NyIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9iYXNpYy9SRUFETUUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjRhY2MxN2M3N2QzZGUyOWQ3YWZlNGQ0MTc2MDAxZjk0NWY1OGY0ZjFmMjE5ODU0ZTU3YzdiMjg1MTkyODRkMjUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfYmFzaWMvbW9kZWwucHkiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogImY5NDFmNzk1NmNlNjg5YWZiZTllODAxODg5OWQ2NTFhZTg4MjNmMTM1N2ZjYWFkMTRhYjllNDc1ZTE1ZjM3YmMiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfZHVhbHMvUkVBRE1FLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICIyNGQxNjQ5YjQyMDA2MjFhNmQ1ZjZiZTc0OTIzYzc5N2M3YzhlNTUxZjQzODRkYTUxYTI4MjI2MmRmZjViZWYwIgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX2R1YWxzL21vZGVsLnB5IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI1MDg4OGQ4OGMyZGY5MTU5N2M1ZGZhNGIyMjNlNzU4MDZlZWRhODE4MjMyYWI1Yzc2NjMwMWI3ZDVmMjQ4NDYzIgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX3dhcm1zdGFydC9SRUFETUUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjhkYzM0NTQyMWEzMDAyNTljNjI1MzdlM2ViNmYwNDBiYTI1ZGUzY2NhYmVmMDczNTU0MjNmMzQ0OGFjZTVmODgiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfd2FybXN0YXJ0L21vZGVsLnB5IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI1OTFiYTVmMzc2ZDY2NmY3NzY0ZjkxZDAxNjM1ZTA1MjQ5OTI5ZjRjMGFiZDFkOTBjMTZkZWU2NDdjMDQ1MzZmIgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21heGltaXphdGlvbl93b3JrYXJvdW5kL1JFQURNRS5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiZjkzNmE2YjhhNzE2YTkyYWE5MDlkZTNlOTIxNWM2N2EzMDliMjEyMmE4YTgwOWNkZDlkZDY1NGM1Y2M2MjdiOSIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9tYXhpbWl6YXRpb25fd29ya2Fyb3VuZC9tb2RlbC5weSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiNDE1N2NiZmE4MTVmZTg3ODMxNmI5NWYxZDRmNjY4OGM3N2NkMGFhM2JiOGNhYTA4MzVkOThhNGExMDhmMGJmNyIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX2Jhc2ljL1JFQURNRS5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiMGQ2YzRiYTdkYmEwMTg3NjRjODk2OTliOTcyM2JmNTliYTFhYzRmYzE1NWM3NTUxOTAwNjY1Y2ZlOTI5ZGI0YiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX2Jhc2ljL2luY3VtYmVudF9jYWxsYmFjay5weSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiMTIyMDU5MWZiYmNkNTE4MDdmMWQxMjZmODk2MGZiZDQxNzE3N2Y1NmJhYjJlMjE0Y2JjNzYwMTY5ZmFhY2QxNiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX2Jhc2ljL21vZGVsLnB5IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICJkNDhmMTc5ZTJhOGMwOTdhODBmNTMyYTFiYzIwYzEyOTQ0MDU5YWZmZDQyZDJlNTBlMjI2ZjY2NzY3OTE4YWE0IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfcHJvZHVjdGlvbl9wbGFubmluZy9SRUFETUUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjRkN2IyNDgxZDdlN2NlY2I3YWU3MzY0MDc4ZDM2NjBkYzUxMWZlMTZiNjdmNzI4OGE1MjFjN2E4ZjZhZjM1NTciCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9wcm9kdWN0aW9uX3BsYW5uaW5nL21vZGVsLnB5IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICIwMTA5ZDMxNmJmZGMwMzdmMjcwN2Y5MDllNDEzNGM0MTY5ZDM3MDNiMzQyMGMxMjM5ZjE0MGZlZDQ0MzljY2JmIgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21wc19zb2x2ZXIvUkVBRE1FLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI3OGE5MDc4MDMzZDQ5YTk2Nzc0MjUxYWE3ZWRmMTMyMmNmOTY0YjI5M2E0ZjYzNzZlZDViOTdhYTE5OWNmZmFhIgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21wc19zb2x2ZXIvZGF0YS9SRUFETUUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjE4ZDNiNjA0NzE0OTE2NzM5MmUzOWVjZDQ3MzI2Y2MzZmZlMTI0YzZlZjk0NjhkNTQxNzJhYzY5NjAzZDI1NDkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJhc3NldHMvbXBzX3NvbHZlci9kYXRhL3NhbXBsZS5tcHMiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjMwYjNmODcxOTE4MTYwZTljMWM1ZTc2MGUzOWU5ZTVhOTczZTUxYWFhZDA5Nzk4NzY1YzhjYTc0MTY0MWJiMDQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJhc3NldHMvbXBzX3NvbHZlci9tb2RlbC5weSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiYWU1MmMyNzNjZDM4MjNlOGEyMTYyMDc0ODllYWM5MTlhYWMxYjdjZTU5YmRlNjk2MGVmZWY5NDM0NTdlNGY0ZiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL3Jlc3VsdHMubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogImViMGNjOTNlM2ZiMTVjOTgyYTE4N2NkY2E1MTA2ODY4OTM4MGYyMTk4Y2Q0NDI2YTY0ZjczYjIyN2NlOGJmMGUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJhc3NldHMvcG9ydGZvbGlvL1JFQURNRS5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiOGUwOTc5MWY1MGQzZWRjYzhkMjIwZjI3NWE3ZDYyN2JhNDAwNzAwYTEyNmViMDM5ZDRiZTg4MTJkNzY1OWI5ZiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9wb3J0Zm9saW8vbW9kZWwucHkiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjlkY2YxMTVkNTg4N2U0ZDkwM2E4OTdkYmJiYjQ5ZmUxNGZkOGFkNWY3YWI0MjBmZDYyZGY1NjAxZWViZmMzYjIiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJiZW5jaG1hcmsvU09VUkNFUy5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiZDVmODYwYzc2ODAwYWUzYTM4NmYxNjhmM2ZhNGJkOTMwMjIzNmU1NzQ1ZTZiOWEyN2Y2ZDdhZmZiYzExN2EyZSIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImJlbmNobWFyay9ldmFscy5qc29uIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI3MzMxYTRmMGNmMDEzZmQ3MThjZjQwN2VhMjIxMjFkMzA3MjZjMzczNmNjMjIyMzdmODI2YjE3MzQ2NjNhMzZjIgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiZXZhbHMvZXZhbHMuanNvbiIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiODE4Yzc5YjAxZTM2M2M3MmU4NWIxMTc4NmQ4MDNlMGE1ZTIzYmFhYWE2M2RkMGUyODQ0YWUwZjM1NDNkM2M4ZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcXBfZXhhbXBsZXMubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjZlNWFlY2YzNmQxZDg0NDQwNjI0MmE0YTA0ODQ0YjQzZjZhNmZkNWI2YmJiY2Q4NzNjNTNmMjc5MTJlZWNlOWEiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJza2lsbC1jYXJkLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICJkYjc1YmVjMzJmZDIzNTAyNmRhM2U4MTA2ZDBiYTQyY2FmZmZlZTAxNWFiNTA2ODYwNWFmMGEyYjBjNmMyYmY0IgogICAgICB9CiAgICBdLAogICAgInNlcmlhbGl6YXRpb24iOiB7CiAgICAgICJpZ25vcmVfcGF0aHMiOiBbCiAgICAgICAgIi5naXRhdHRyaWJ1dGVzIiwKICAgICAgICAiLmdpdCIsCiAgICAgICAgIi5naXRpZ25vcmUiLAogICAgICAgICIuZ2l0aHViIgogICAgICBdLAogICAgICAibWV0aG9kIjogImZpbGVzIiwKICAgICAgImFsbG93X3N5bWxpbmtzIjogZmFsc2UsCiAgICAgICJoYXNoX3R5cGUiOiAic2hhMjU2IgogICAgfQogIH0KfQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMAdt4YgbEkMUL/v2X0BIKcs96pT6svltt3UdR2XlbXKOt353OoD/+DHBGM7Yir9Q1QIxAOwNH2NS0aQWKlMPpoXXlyKZ37Bmgo5E13/grzUV0AD3mUK6saJ0Q4AVfKvI7xpocA==","keyid":""}]}} \ No newline at end of file +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtbnVtZXJpY2FsLW9wdGltaXphdGlvbi1hcGktcHl0aG9uIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjI4YTk0OTI5NTMzOThlNjVmMjg3Yjg2ODAyYjQ3ZWIxM2MxNzRhMjQzMDYyMzBkYzk5MTEzMjM5OTYzZjUzNTkiCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJzZXJpYWxpemF0aW9uIjogewogICAgICAiaGFzaF90eXBlIjogInNoYTI1NiIsCiAgICAgICJhbGxvd19zeW1saW5rcyI6IGZhbHNlLAogICAgICAibWV0aG9kIjogImZpbGVzIiwKICAgICAgImlnbm9yZV9wYXRocyI6IFsKICAgICAgICAiLmdpdGh1YiIsCiAgICAgICAgIi5naXRpZ25vcmUiLAogICAgICAgICIuZ2l0IiwKICAgICAgICAiLmdpdGF0dHJpYnV0ZXMiCiAgICAgIF0KICAgIH0sCiAgICAicmVzb3VyY2VzIjogWwogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI3YmUzOTg5M2RmYTcxZDY4Y2IzYzA2Y2IyZmVlZTIwYTIxZDEyNWYyZmRkZjlmZThlZjcyZGI4ZTU2YjY2YjhiIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiQkVOQ0hNQVJLLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJjMmIxYjc1YjVlOThhYmZjODlkOWFhNGNjOGU2N2U4YzM5OTJjZWE3Y2EyNDcxYjhmNjIzOWY4ZjY2NjVkNTIyIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiU0tJTEwubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImU2MjFkZGEyZTVkN2E1MmNhOTdjZDMxOTBiNGI0NmM1NmE0ZDkzMzgyYTdjNWIxYjYzYjcxOGY0NzEyNjM0MWYiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI2NjhiNzJiMGQ4MTlhYzM2YWYyMzgxNjE0ZWJiNzhkYjUzNzdkMDkxNzQ1ZjI5ZTQ5ODAxZjI4Y2NlN2Y2YWNkIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xlYXN0X3NxdWFyZXMvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIyY2FhODE0MzVhNDEzNmU4NzFhM2ZiYjRiYmUxMDhjYzFiNTZmYTM5MmE0NjYyNTc4ODRmYzJmNWMzOWU0ZDg3IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xlYXN0X3NxdWFyZXMvbW9kZWwucHkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjRhY2MxN2M3N2QzZGUyOWQ3YWZlNGQ0MTc2MDAxZjk0NWY1OGY0ZjFmMjE5ODU0ZTU3YzdiMjg1MTkyODRkMjUiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfYmFzaWMvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJmOTQxZjc5NTZjZTY4OWFmYmU5ZTgwMTg4OTlkNjUxYWU4ODIzZjEzNTdmY2FhZDE0YWI5ZTQ3NWUxNWYzN2JjIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX2Jhc2ljL21vZGVsLnB5IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIyNGQxNjQ5YjQyMDA2MjFhNmQ1ZjZiZTc0OTIzYzc5N2M3YzhlNTUxZjQzODRkYTUxYTI4MjI2MmRmZjViZWYwIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX2R1YWxzL1JFQURNRS5tZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNTA4ODhkODhjMmRmOTE1OTdjNWRmYTRiMjIzZTc1ODA2ZWVkYTgxODIzMmFiNWM3NjYzMDFiN2Q1ZjI0ODQ2MyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9kdWFscy9tb2RlbC5weSIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiOGRjMzQ1NDIxYTMwMDI1OWM2MjUzN2UzZWI2ZjA0MGJhMjVkZTNjY2FiZWYwNzM1NTQyM2YzNDQ4YWNlNWY4OCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF93YXJtc3RhcnQvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI1OTFiYTVmMzc2ZDY2NmY3NzY0ZjkxZDAxNjM1ZTA1MjQ5OTI5ZjRjMGFiZDFkOTBjMTZkZWU2NDdjMDQ1MzZmIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX3dhcm1zdGFydC9tb2RlbC5weSIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiZjkzNmE2YjhhNzE2YTkyYWE5MDlkZTNlOTIxNWM2N2EzMDliMjEyMmE4YTgwOWNkZDlkZDY1NGM1Y2M2MjdiOSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tYXhpbWl6YXRpb25fd29ya2Fyb3VuZC9SRUFETUUubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjQxNTdjYmZhODE1ZmU4NzgzMTZiOTVmMWQ0ZjY2ODhjNzdjZDBhYTNiYjhjYWEwODM1ZDk4YTRhMTA4ZjBiZjciLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWF4aW1pemF0aW9uX3dvcmthcm91bmQvbW9kZWwucHkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjBkNmM0YmE3ZGJhMDE4NzY0Yzg5Njk5Yjk3MjNiZjU5YmExYWM0ZmMxNTVjNzU1MTkwMDY2NWNmZTkyOWRiNGIiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9iYXNpYy9SRUFETUUubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjEyMjA1OTFmYmJjZDUxODA3ZjFkMTI2Zjg5NjBmYmQ0MTcxNzdmNTZiYWIyZTIxNGNiYzc2MDE2OWZhYWNkMTYiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9iYXNpYy9pbmN1bWJlbnRfY2FsbGJhY2sucHkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImQ0OGYxNzllMmE4YzA5N2E4MGY1MzJhMWJjMjBjMTI5NDQwNTlhZmZkNDJkMmU1MGUyMjZmNjY3Njc5MThhYTQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9iYXNpYy9tb2RlbC5weSIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNGQ3YjI0ODFkN2U3Y2VjYjdhZTczNjQwNzhkMzY2MGRjNTExZmUxNmI2N2Y3Mjg4YTUyMWM3YThmNmFmMzU1NyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX3Byb2R1Y3Rpb25fcGxhbm5pbmcvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIwMTA5ZDMxNmJmZGMwMzdmMjcwN2Y5MDllNDEzNGM0MTY5ZDM3MDNiMzQyMGMxMjM5ZjE0MGZlZDQ0MzljY2JmIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfcHJvZHVjdGlvbl9wbGFubmluZy9tb2RlbC5weSIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNzhhOTA3ODAzM2Q0OWE5Njc3NDI1MWFhN2VkZjEzMjJjZjk2NGIyOTNhNGY2Mzc2ZWQ1Yjk3YWExOTljZmZhYSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL1JFQURNRS5tZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMThkM2I2MDQ3MTQ5MTY3MzkyZTM5ZWNkNDczMjZjYzNmZmUxMjRjNmVmOTQ2OGQ1NDE3MmFjNjk2MDNkMjU0OSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL2RhdGEvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIzMGIzZjg3MTkxODE2MGU5YzFjNWU3NjBlMzllOWU1YTk3M2U1MWFhYWQwOTc5ODc2NWM4Y2E3NDE2NDFiYjA0IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21wc19zb2x2ZXIvZGF0YS9zYW1wbGUubXBzIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJhZTUyYzI3M2NkMzgyM2U4YTIxNjIwNzQ4OWVhYzkxOWFhYzFiN2NlNTliZGU2OTYwZWZlZjk0MzQ1N2U0ZjRmIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21wc19zb2x2ZXIvbW9kZWwucHkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImViMGNjOTNlM2ZiMTVjOTgyYTE4N2NkY2E1MTA2ODY4OTM4MGYyMTk4Y2Q0NDI2YTY0ZjczYjIyN2NlOGJmMGUiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbXBzX3NvbHZlci9yZXN1bHRzLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI4ZTA5NzkxZjUwZDNlZGNjOGQyMjBmMjc1YTdkNjI3YmE0MDA3MDBhMTI2ZWIwMzlkNGJlODgxMmQ3NjU5YjlmIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL3BvcnRmb2xpby9SRUFETUUubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjlkY2YxMTVkNTg4N2U0ZDkwM2E4OTdkYmJiYjQ5ZmUxNGZkOGFkNWY3YWI0MjBmZDYyZGY1NjAxZWViZmMzYjIiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvcG9ydGZvbGlvL21vZGVsLnB5IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJkNWY4NjBjNzY4MDBhZTNhMzg2ZjE2OGYzZmE0YmQ5MzAyMjM2ZTU3NDVlNmI5YTI3ZjZkN2FmZmJjMTE3YTJlIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYmVuY2htYXJrL1NPVVJDRVMubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjczMzFhNGYwY2YwMTNmZDcxOGNmNDA3ZWEyMjEyMWQzMDcyNmMzNzM2Y2MyMjIzN2Y4MjZiMTczNDY2M2EzNmMiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJiZW5jaG1hcmsvZXZhbHMuanNvbiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNzc2MGVhYzkzN2JiODExNzg3NDdlMTY1MmM1ZjFiYmFkN2NiZDVmY2RjMDFjMjg4OGM1NGQ2YTljNTdkZmI2NSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImV2YWxzL2V2YWxzLmpzb24iCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjZlNWFlY2YzNmQxZDg0NDQwNjI0MmE0YTA0ODQ0YjQzZjZhNmZkNWI2YmJiY2Q4NzNjNTNmMjc5MTJlZWNlOWEiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3FwX2V4YW1wbGVzLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIwM2NjMTA1MWQ1ZWZiZWUwZTgxZjQ2NmY3Y2U4OGU2OGQzMDA4MjczNGMyZTAzYmRkZjA2MzdiZGZiNGMwOGE3IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAic2tpbGwtY2FyZC5tZCIKICAgICAgfQogICAgXQogIH0KfQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMHZ9N72v59kuaN6ZwG5oFswW3ddYV5x92rxNZPwvDfuHJmWLpRh38GLkNmpzLG8/WAIxALlfvCl+U4sqy5lyYxAx7H7CoCkt4BKiiGlP+mdD71ijJtVqiNpuhjcqXiaGF6xPTA==","keyid":""}]}} \ No newline at end of file From e616823b0ed67b0af606a38562040a3f93b7f635 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Wed, 10 Jun 2026 15:28:54 -0500 Subject: [PATCH 3/4] fix: correct QP maximize example and add missing newline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - eval-004: use concave quadratic (-0.04*x1² - 0.02*x2²) as the maximize example — maximizing a convex quadratic is unbounded; clarify NSD requirement must hold for a finite maximum (CodeRabbit) - fix end-of-file newline (pre-commit) Co-Authored-By: Claude Sonnet 4.6 --- .../cuopt-numerical-optimization-api-python/evals/evals.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skills/cuopt-numerical-optimization-api-python/evals/evals.json b/skills/cuopt-numerical-optimization-api-python/evals/evals.json index 04cbf5a85d..5a0beb6a5a 100644 --- a/skills/cuopt-numerical-optimization-api-python/evals/evals.json +++ b/skills/cuopt-numerical-optimization-api-python/evals/evals.json @@ -50,7 +50,7 @@ "question": "I want to maximize a quadratic objective using the cuOpt Python QP API. When I pass sense=MAXIMIZE to setObjective, I get an error. What is the correct approach?", "expected_skill": "cuopt-numerical-optimization-api-python", "expected_script": null, - "ground_truth": "The cuOpt QP solver only supports MINIMIZE \u2014 MAXIMIZE is rejected for quadratic objectives. The correct workaround is to negate all coefficients in the objective and minimize the negated expression. For example, to maximize 0.04*x1*x1 + 0.02*x2*x2, minimize -0.04*x1*x1 - 0.02*x2*x2 with sense=MINIMIZE. The resulting problem.ObjValue will be the negated maximum; multiply by -1 to recover the true maximum. All variables must remain CONTINUOUS \u2014 integer QP is not supported. The Q matrix of the original maximization problem should be negative semi-definite (NSD) for the problem to be concave; after negation it becomes PSD, which is what the solver expects.", + "ground_truth": "The cuOpt QP solver only supports MINIMIZE \u2014 MAXIMIZE is rejected for quadratic objectives. The correct workaround is to negate all coefficients in the objective and minimize the negated expression. For example, to maximize -0.04*x1*x1 - 0.02*x2*x2 (a concave quadratic with NSD Q), minimize 0.04*x1*x1 + 0.02*x2*x2 with sense=MINIMIZE. The resulting problem.ObjValue will be the negated maximum; multiply by -1 to recover the true maximum. All variables must remain CONTINUOUS \u2014 integer QP is not supported. The Q matrix of the original maximization problem must be negative semi-definite (NSD) for the problem to be concave and have a finite maximum; after negation it becomes PSD, which is what the solver expects. Maximizing a convex quadratic (positive coefficients) is unbounded and not a meaningful use case.", "expected_behavior": [ "States QP only supports MINIMIZE \u2014 MAXIMIZE is rejected", "Gives the correct workaround: negate all objective coefficients and use sense=MINIMIZE", @@ -59,4 +59,4 @@ "Does not suggest a non-existent MAXIMIZE_QP or similar invented API" ] } -] \ No newline at end of file +] From e02d54f3dba8d144624306f61efa180c2446af10 Mon Sep 17 00:00:00 2001 From: nvskills-svc-account Date: Wed, 10 Jun 2026 20:43:38 +0000 Subject: [PATCH 4/4] Attach NVSkills validation signatures Signed-off-by: nvskills-svc-account --- .../BENCHMARK.md | 18 +++++++-------- .../skill-card.md | 22 +++++++++---------- .../skill.oms.sig | 2 +- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/skills/cuopt-numerical-optimization-api-python/BENCHMARK.md b/skills/cuopt-numerical-optimization-api-python/BENCHMARK.md index 5f42f4e9b1..65debe2c2f 100644 --- a/skills/cuopt-numerical-optimization-api-python/BENCHMARK.md +++ b/skills/cuopt-numerical-optimization-api-python/BENCHMARK.md @@ -56,16 +56,16 @@ Task composition is derived from the evaluation dataset when possible. Entries w | Dimension | Num | `claude-code` | `codex` | |---|---:|---:|---:| | Security | 4 | 100% (+0%) | 100% (+0%) | -| Correctness | 4 | 62% (+26%) | 84% (+30%) | -| Discoverability | 4 | 50% (+44%) | 62% (+34%) | -| Effectiveness | 4 | 62% (+14%) | 80% (+34%) | -| Efficiency | 4 | 61% (+36%) | 60% (+24%) | +| Correctness | 4 | 65% (+29%) | 64% (+8%) | +| Discoverability | 4 | 50% (+44%) | 44% (+25%) | +| Effectiveness | 4 | 66% (+17%) | 56% (+3%) | +| Efficiency | 4 | 61% (+37%) | 44% (+17%) | Score values show skill-assisted performance. Values in parentheses show uplift versus the no-skill baseline when baseline data is available. ## Tier 1: Static Validation Summary -Tier 1 validation passed with observations. NVSkills-Eval ran 9 checks and found 11 total findings. +Tier 1 validation passed with observations. NVSkills-Eval ran 9 checks and found 10 total findings. Top findings: @@ -73,7 +73,7 @@ Top findings: - MEDIUM PII/phone_numbers: International phone number (`assets/mps_solver/results.md:69`) - MEDIUM SCHEMA/body_recommended_section: Missing recommended section: '## Instructions' (`skills/cuopt-numerical-optimization-api-python/SKILL.md`) - MEDIUM SCHEMA/body_recommended_section: Missing recommended section: '## Examples' (`skills/cuopt-numerical-optimization-api-python/SKILL.md`) -- MEDIUM SECURITY/Unknown (SQP-2): The code downloads a file from a hardcoded external URL (miplib.zib.de) using urllib.request.urlretrieve without any int (`assets/mps_solver/model.py:39`) +- LOW QUALITY/quality_discoverability: Description doesn't mention WHEN to use this skill (`skills/cuopt-numerical-optimization-api-python/SKILL.md`) ## Tier 2: Deduplication Summary @@ -81,13 +81,13 @@ Tier 2 validation reported findings. NVSkills-Eval ran 2 checks and found 9 tota Top findings: +- HIGH DUPLICATE/duplicate: Duplicate content found across assets/lp_warmstart/README.md and assets/lp_warmstart/model.py: + "# LP PDLP Warmstart" in assets/lp_warmstart/README.md (lines 1-5) + vs "(module docstring)" in assets/lp_warmstart/model.py (lines 1-4) (`assets/lp_warmstart/README.md:1`) - HIGH DUPLICATE/duplicate: Duplicate content found across SKILL.md and assets/mps_solver/README.md and references/qp_examples.md: "# Solve" in SKILL.md (lines 63-67) vs "# Configure and solve" in assets/mps_solver/README.md (lines 76-80) vs "# Solve" in references/qp_examples.md (lines 47-51) (`SKILL.md:63`) -- HIGH DUPLICATE/duplicate: Duplicate content found across assets/lp_warmstart/README.md and assets/lp_warmstart/model.py: - "# LP PDLP Warmstart" in assets/lp_warmstart/README.md (lines 1-5) - vs "(module docstring)" in assets/lp_warmstart/model.py (lines 1-4) (`assets/lp_warmstart/README.md:1`) - HIGH DUPLICATE/duplicate: Duplicate content found across assets/milp_basic/README.md and assets/milp_basic/model.py: "# Minimal MILP" in assets/milp_basic/README.md (lines 1-10) vs "(module docstring)" in assets/milp_basic/model.py (lines 1-6) (`assets/milp_basic/README.md:1`) diff --git a/skills/cuopt-numerical-optimization-api-python/skill-card.md b/skills/cuopt-numerical-optimization-api-python/skill-card.md index a852b6d76f..b83691cc58 100644 --- a/skills/cuopt-numerical-optimization-api-python/skill-card.md +++ b/skills/cuopt-numerical-optimization-api-python/skill-card.md @@ -9,7 +9,7 @@ NVIDIA
### License/Terms of Use:
Apache 2.0
## Use Case:
-Developers and engineers modeling and solving linear programming, mixed-integer linear programming, and quadratic programming problems using the NVIDIA cuOpt GPU-accelerated Python API.
+Developers and engineers solving linear, mixed-integer, and quadratic programming problems using NVIDIA cuOpt’s GPU-accelerated Python API for scheduling, portfolio optimization, production planning, and least-squares fitting.
### Deployment Geography for Use:
Global
@@ -19,25 +19,25 @@ Risk: Review before execution as proposals could introduce incorrect or misleadi Mitigation: Review and scan skill before deployment.
## Reference(s):
-- [QP Examples Reference](references/qp_examples.md)
+- [QP Examples (least-squares, maximization workaround, matrix form)](references/qp_examples.md)
- [cuOpt User Guide](https://docs.nvidia.com/cuopt/user-guide/latest/introduction.html)
- [cuOpt Examples Repository](https://github.com/NVIDIA/cuopt-examples)
## Skill Output:
-**Output Type(s):** [Code, Analysis]
-**Output Format:** [Python code with solver output]
+**Output Type(s):** [Code, API Calls]
+**Output Format:** [Python code with inline solver configuration]
**Output Parameters:** [1D]
**Other Properties Related to Output:** [None]
## Evaluation Agents Used:
-- claude-code
-- codex
+- `claude-code`
+- `codex`
## Evaluation Tasks:
-Evaluated against 4 evaluation tasks (4 positive skill-activation cases) using the NVSkills-Eval external profile in an astra-sandbox environment.
+Evaluated against 4 evaluation tasks (NVSkills-Eval external profile, astra-sandbox environment, 1 attempt per task).
## Evaluation Metrics Used:
Reported benchmark dimensions:
@@ -62,10 +62,10 @@ Underlying evaluation signals used in this run:
| Dimension | Num | `claude-code` | `codex` | |---|---:|---:|---:| | Security | 4 | 100% (+0%) | 100% (+0%) | -| Correctness | 4 | 62% (+26%) | 84% (+30%) | -| Discoverability | 4 | 50% (+44%) | 62% (+34%) | -| Effectiveness | 4 | 62% (+14%) | 80% (+34%) | -| Efficiency | 4 | 61% (+36%) | 60% (+24%) | +| Correctness | 4 | 65% (+29%) | 64% (+8%) | +| Discoverability | 4 | 50% (+44%) | 44% (+25%) | +| Effectiveness | 4 | 66% (+17%) | 56% (+3%) | +| Efficiency | 4 | 61% (+37%) | 44% (+17%) | ## Skill Version(s):
26.08.00 (source: frontmatter)
diff --git a/skills/cuopt-numerical-optimization-api-python/skill.oms.sig b/skills/cuopt-numerical-optimization-api-python/skill.oms.sig index 2a92e77a59..e98d37c391 100644 --- a/skills/cuopt-numerical-optimization-api-python/skill.oms.sig +++ b/skills/cuopt-numerical-optimization-api-python/skill.oms.sig @@ -1 +1 @@ -{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtbnVtZXJpY2FsLW9wdGltaXphdGlvbi1hcGktcHl0aG9uIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjI4YTk0OTI5NTMzOThlNjVmMjg3Yjg2ODAyYjQ3ZWIxM2MxNzRhMjQzMDYyMzBkYzk5MTEzMjM5OTYzZjUzNTkiCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJzZXJpYWxpemF0aW9uIjogewogICAgICAiaGFzaF90eXBlIjogInNoYTI1NiIsCiAgICAgICJhbGxvd19zeW1saW5rcyI6IGZhbHNlLAogICAgICAibWV0aG9kIjogImZpbGVzIiwKICAgICAgImlnbm9yZV9wYXRocyI6IFsKICAgICAgICAiLmdpdGh1YiIsCiAgICAgICAgIi5naXRpZ25vcmUiLAogICAgICAgICIuZ2l0IiwKICAgICAgICAiLmdpdGF0dHJpYnV0ZXMiCiAgICAgIF0KICAgIH0sCiAgICAicmVzb3VyY2VzIjogWwogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI3YmUzOTg5M2RmYTcxZDY4Y2IzYzA2Y2IyZmVlZTIwYTIxZDEyNWYyZmRkZjlmZThlZjcyZGI4ZTU2YjY2YjhiIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiQkVOQ0hNQVJLLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJjMmIxYjc1YjVlOThhYmZjODlkOWFhNGNjOGU2N2U4YzM5OTJjZWE3Y2EyNDcxYjhmNjIzOWY4ZjY2NjVkNTIyIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiU0tJTEwubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImU2MjFkZGEyZTVkN2E1MmNhOTdjZDMxOTBiNGI0NmM1NmE0ZDkzMzgyYTdjNWIxYjYzYjcxOGY0NzEyNjM0MWYiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI2NjhiNzJiMGQ4MTlhYzM2YWYyMzgxNjE0ZWJiNzhkYjUzNzdkMDkxNzQ1ZjI5ZTQ5ODAxZjI4Y2NlN2Y2YWNkIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xlYXN0X3NxdWFyZXMvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIyY2FhODE0MzVhNDEzNmU4NzFhM2ZiYjRiYmUxMDhjYzFiNTZmYTM5MmE0NjYyNTc4ODRmYzJmNWMzOWU0ZDg3IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xlYXN0X3NxdWFyZXMvbW9kZWwucHkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjRhY2MxN2M3N2QzZGUyOWQ3YWZlNGQ0MTc2MDAxZjk0NWY1OGY0ZjFmMjE5ODU0ZTU3YzdiMjg1MTkyODRkMjUiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfYmFzaWMvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJmOTQxZjc5NTZjZTY4OWFmYmU5ZTgwMTg4OTlkNjUxYWU4ODIzZjEzNTdmY2FhZDE0YWI5ZTQ3NWUxNWYzN2JjIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX2Jhc2ljL21vZGVsLnB5IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIyNGQxNjQ5YjQyMDA2MjFhNmQ1ZjZiZTc0OTIzYzc5N2M3YzhlNTUxZjQzODRkYTUxYTI4MjI2MmRmZjViZWYwIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX2R1YWxzL1JFQURNRS5tZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNTA4ODhkODhjMmRmOTE1OTdjNWRmYTRiMjIzZTc1ODA2ZWVkYTgxODIzMmFiNWM3NjYzMDFiN2Q1ZjI0ODQ2MyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9kdWFscy9tb2RlbC5weSIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiOGRjMzQ1NDIxYTMwMDI1OWM2MjUzN2UzZWI2ZjA0MGJhMjVkZTNjY2FiZWYwNzM1NTQyM2YzNDQ4YWNlNWY4OCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF93YXJtc3RhcnQvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI1OTFiYTVmMzc2ZDY2NmY3NzY0ZjkxZDAxNjM1ZTA1MjQ5OTI5ZjRjMGFiZDFkOTBjMTZkZWU2NDdjMDQ1MzZmIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX3dhcm1zdGFydC9tb2RlbC5weSIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiZjkzNmE2YjhhNzE2YTkyYWE5MDlkZTNlOTIxNWM2N2EzMDliMjEyMmE4YTgwOWNkZDlkZDY1NGM1Y2M2MjdiOSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tYXhpbWl6YXRpb25fd29ya2Fyb3VuZC9SRUFETUUubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjQxNTdjYmZhODE1ZmU4NzgzMTZiOTVmMWQ0ZjY2ODhjNzdjZDBhYTNiYjhjYWEwODM1ZDk4YTRhMTA4ZjBiZjciLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWF4aW1pemF0aW9uX3dvcmthcm91bmQvbW9kZWwucHkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjBkNmM0YmE3ZGJhMDE4NzY0Yzg5Njk5Yjk3MjNiZjU5YmExYWM0ZmMxNTVjNzU1MTkwMDY2NWNmZTkyOWRiNGIiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9iYXNpYy9SRUFETUUubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjEyMjA1OTFmYmJjZDUxODA3ZjFkMTI2Zjg5NjBmYmQ0MTcxNzdmNTZiYWIyZTIxNGNiYzc2MDE2OWZhYWNkMTYiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9iYXNpYy9pbmN1bWJlbnRfY2FsbGJhY2sucHkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImQ0OGYxNzllMmE4YzA5N2E4MGY1MzJhMWJjMjBjMTI5NDQwNTlhZmZkNDJkMmU1MGUyMjZmNjY3Njc5MThhYTQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9iYXNpYy9tb2RlbC5weSIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNGQ3YjI0ODFkN2U3Y2VjYjdhZTczNjQwNzhkMzY2MGRjNTExZmUxNmI2N2Y3Mjg4YTUyMWM3YThmNmFmMzU1NyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX3Byb2R1Y3Rpb25fcGxhbm5pbmcvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIwMTA5ZDMxNmJmZGMwMzdmMjcwN2Y5MDllNDEzNGM0MTY5ZDM3MDNiMzQyMGMxMjM5ZjE0MGZlZDQ0MzljY2JmIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfcHJvZHVjdGlvbl9wbGFubmluZy9tb2RlbC5weSIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNzhhOTA3ODAzM2Q0OWE5Njc3NDI1MWFhN2VkZjEzMjJjZjk2NGIyOTNhNGY2Mzc2ZWQ1Yjk3YWExOTljZmZhYSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL1JFQURNRS5tZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMThkM2I2MDQ3MTQ5MTY3MzkyZTM5ZWNkNDczMjZjYzNmZmUxMjRjNmVmOTQ2OGQ1NDE3MmFjNjk2MDNkMjU0OSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL2RhdGEvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIzMGIzZjg3MTkxODE2MGU5YzFjNWU3NjBlMzllOWU1YTk3M2U1MWFhYWQwOTc5ODc2NWM4Y2E3NDE2NDFiYjA0IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21wc19zb2x2ZXIvZGF0YS9zYW1wbGUubXBzIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJhZTUyYzI3M2NkMzgyM2U4YTIxNjIwNzQ4OWVhYzkxOWFhYzFiN2NlNTliZGU2OTYwZWZlZjk0MzQ1N2U0ZjRmIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21wc19zb2x2ZXIvbW9kZWwucHkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImViMGNjOTNlM2ZiMTVjOTgyYTE4N2NkY2E1MTA2ODY4OTM4MGYyMTk4Y2Q0NDI2YTY0ZjczYjIyN2NlOGJmMGUiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbXBzX3NvbHZlci9yZXN1bHRzLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI4ZTA5NzkxZjUwZDNlZGNjOGQyMjBmMjc1YTdkNjI3YmE0MDA3MDBhMTI2ZWIwMzlkNGJlODgxMmQ3NjU5YjlmIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL3BvcnRmb2xpby9SRUFETUUubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjlkY2YxMTVkNTg4N2U0ZDkwM2E4OTdkYmJiYjQ5ZmUxNGZkOGFkNWY3YWI0MjBmZDYyZGY1NjAxZWViZmMzYjIiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvcG9ydGZvbGlvL21vZGVsLnB5IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJkNWY4NjBjNzY4MDBhZTNhMzg2ZjE2OGYzZmE0YmQ5MzAyMjM2ZTU3NDVlNmI5YTI3ZjZkN2FmZmJjMTE3YTJlIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYmVuY2htYXJrL1NPVVJDRVMubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjczMzFhNGYwY2YwMTNmZDcxOGNmNDA3ZWEyMjEyMWQzMDcyNmMzNzM2Y2MyMjIzN2Y4MjZiMTczNDY2M2EzNmMiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJiZW5jaG1hcmsvZXZhbHMuanNvbiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNzc2MGVhYzkzN2JiODExNzg3NDdlMTY1MmM1ZjFiYmFkN2NiZDVmY2RjMDFjMjg4OGM1NGQ2YTljNTdkZmI2NSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImV2YWxzL2V2YWxzLmpzb24iCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjZlNWFlY2YzNmQxZDg0NDQwNjI0MmE0YTA0ODQ0YjQzZjZhNmZkNWI2YmJiY2Q4NzNjNTNmMjc5MTJlZWNlOWEiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3FwX2V4YW1wbGVzLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIwM2NjMTA1MWQ1ZWZiZWUwZTgxZjQ2NmY3Y2U4OGU2OGQzMDA4MjczNGMyZTAzYmRkZjA2MzdiZGZiNGMwOGE3IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAic2tpbGwtY2FyZC5tZCIKICAgICAgfQogICAgXQogIH0KfQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMHZ9N72v59kuaN6ZwG5oFswW3ddYV5x92rxNZPwvDfuHJmWLpRh38GLkNmpzLG8/WAIxALlfvCl+U4sqy5lyYxAx7H7CoCkt4BKiiGlP+mdD71ijJtVqiNpuhjcqXiaGF6xPTA==","keyid":""}]}} \ No newline at end of file +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtbnVtZXJpY2FsLW9wdGltaXphdGlvbi1hcGktcHl0aG9uIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBhYWFiZmNhZjJmMmRkNjJhOGI0NTNjYmQ0MjRkNjg4MmM5MmQ4YzUxYzZlZTEzMGI2YTZiYWJhYWI2ZTFlYjEiCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJzZXJpYWxpemF0aW9uIjogewogICAgICAiaGFzaF90eXBlIjogInNoYTI1NiIsCiAgICAgICJpZ25vcmVfcGF0aHMiOiBbCiAgICAgICAgIi5naXRodWIiLAogICAgICAgICIuZ2l0aWdub3JlIiwKICAgICAgICAiLmdpdCIsCiAgICAgICAgIi5naXRhdHRyaWJ1dGVzIgogICAgICBdLAogICAgICAiYWxsb3dfc3ltbGlua3MiOiBmYWxzZSwKICAgICAgIm1ldGhvZCI6ICJmaWxlcyIKICAgIH0sCiAgICAicmVzb3VyY2VzIjogWwogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogIkJFTkNITUFSSy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJmMDQ4NzcxZTAwN2ZhZGM1MzQwNDAzNzdiZjQzZDE4ZWZhOTY3M2QxNzg5YWFmMjg5YmU4NjQyZjVhNzMwMjJlIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogIlNLSUxMLm1kIiwKICAgICAgICAiZGlnZXN0IjogImMyYjFiNzViNWU5OGFiZmM4OWQ5YWE0Y2M4ZTY3ZThjMzk5MmNlYTdjYTI0NzFiOGY2MjM5ZjhmNjY2NWQ1MjIiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJlNjIxZGRhMmU1ZDdhNTJjYTk3Y2QzMTkwYjRiNDZjNTZhNGQ5MzM4MmE3YzViMWI2M2I3MThmNDcxMjYzNDFmIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9sZWFzdF9zcXVhcmVzL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI2NjhiNzJiMGQ4MTlhYzM2YWYyMzgxNjE0ZWJiNzhkYjUzNzdkMDkxNzQ1ZjI5ZTQ5ODAxZjI4Y2NlN2Y2YWNkIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9sZWFzdF9zcXVhcmVzL21vZGVsLnB5IiwKICAgICAgICAiZGlnZXN0IjogIjJjYWE4MTQzNWE0MTM2ZTg3MWEzZmJiNGJiZTEwOGNjMWI1NmZhMzkyYTQ2NjI1Nzg4NGZjMmY1YzM5ZTRkODciCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX2Jhc2ljL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI0YWNjMTdjNzdkM2RlMjlkN2FmZTRkNDE3NjAwMWY5NDVmNThmNGYxZjIxOTg1NGU1N2M3YjI4NTE5Mjg0ZDI1IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9iYXNpYy9tb2RlbC5weSIsCiAgICAgICAgImRpZ2VzdCI6ICJmOTQxZjc5NTZjZTY4OWFmYmU5ZTgwMTg4OTlkNjUxYWU4ODIzZjEzNTdmY2FhZDE0YWI5ZTQ3NWUxNWYzN2JjIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9kdWFscy9SRUFETUUubWQiLAogICAgICAgICJkaWdlc3QiOiAiMjRkMTY0OWI0MjAwNjIxYTZkNWY2YmU3NDkyM2M3OTdjN2M4ZTU1MWY0Mzg0ZGE1MWEyODIyNjJkZmY1YmVmMCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfZHVhbHMvbW9kZWwucHkiLAogICAgICAgICJkaWdlc3QiOiAiNTA4ODhkODhjMmRmOTE1OTdjNWRmYTRiMjIzZTc1ODA2ZWVkYTgxODIzMmFiNWM3NjYzMDFiN2Q1ZjI0ODQ2MyIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfd2FybXN0YXJ0L1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI4ZGMzNDU0MjFhMzAwMjU5YzYyNTM3ZTNlYjZmMDQwYmEyNWRlM2NjYWJlZjA3MzU1NDIzZjM0NDhhY2U1Zjg4IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF93YXJtc3RhcnQvbW9kZWwucHkiLAogICAgICAgICJkaWdlc3QiOiAiNTkxYmE1ZjM3NmQ2NjZmNzc2NGY5MWQwMTYzNWUwNTI0OTkyOWY0YzBhYmQxZDkwYzE2ZGVlNjQ3YzA0NTM2ZiIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWF4aW1pemF0aW9uX3dvcmthcm91bmQvUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogImY5MzZhNmI4YTcxNmE5MmFhOTA5ZGUzZTkyMTVjNjdhMzA5YjIxMjJhOGE4MDljZGQ5ZGQ2NTRjNWNjNjI3YjkiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21heGltaXphdGlvbl93b3JrYXJvdW5kL21vZGVsLnB5IiwKICAgICAgICAiZGlnZXN0IjogIjQxNTdjYmZhODE1ZmU4NzgzMTZiOTVmMWQ0ZjY2ODhjNzdjZDBhYTNiYjhjYWEwODM1ZDk4YTRhMTA4ZjBiZjciCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfYmFzaWMvUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjBkNmM0YmE3ZGJhMDE4NzY0Yzg5Njk5Yjk3MjNiZjU5YmExYWM0ZmMxNTVjNzU1MTkwMDY2NWNmZTkyOWRiNGIiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfYmFzaWMvaW5jdW1iZW50X2NhbGxiYWNrLnB5IiwKICAgICAgICAiZGlnZXN0IjogIjEyMjA1OTFmYmJjZDUxODA3ZjFkMTI2Zjg5NjBmYmQ0MTcxNzdmNTZiYWIyZTIxNGNiYzc2MDE2OWZhYWNkMTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfYmFzaWMvbW9kZWwucHkiLAogICAgICAgICJkaWdlc3QiOiAiZDQ4ZjE3OWUyYThjMDk3YTgwZjUzMmExYmMyMGMxMjk0NDA1OWFmZmQ0MmQyZTUwZTIyNmY2Njc2NzkxOGFhNCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9wcm9kdWN0aW9uX3BsYW5uaW5nL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI0ZDdiMjQ4MWQ3ZTdjZWNiN2FlNzM2NDA3OGQzNjYwZGM1MTFmZTE2YjY3ZjcyODhhNTIxYzdhOGY2YWYzNTU3IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX3Byb2R1Y3Rpb25fcGxhbm5pbmcvbW9kZWwucHkiLAogICAgICAgICJkaWdlc3QiOiAiMDEwOWQzMTZiZmRjMDM3ZjI3MDdmOTA5ZTQxMzRjNDE2OWQzNzAzYjM0MjBjMTIzOWYxNDBmZWQ0NDM5Y2NiZiIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbXBzX3NvbHZlci9SRUFETUUubWQiLAogICAgICAgICJkaWdlc3QiOiAiNzhhOTA3ODAzM2Q0OWE5Njc3NDI1MWFhN2VkZjEzMjJjZjk2NGIyOTNhNGY2Mzc2ZWQ1Yjk3YWExOTljZmZhYSIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbXBzX3NvbHZlci9kYXRhL1JFQURNRS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIxOGQzYjYwNDcxNDkxNjczOTJlMzllY2Q0NzMyNmNjM2ZmZTEyNGM2ZWY5NDY4ZDU0MTcyYWM2OTYwM2QyNTQ5IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL2RhdGEvc2FtcGxlLm1wcyIsCiAgICAgICAgImRpZ2VzdCI6ICIzMGIzZjg3MTkxODE2MGU5YzFjNWU3NjBlMzllOWU1YTk3M2U1MWFhYWQwOTc5ODc2NWM4Y2E3NDE2NDFiYjA0IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL21vZGVsLnB5IiwKICAgICAgICAiZGlnZXN0IjogImFlNTJjMjczY2QzODIzZThhMjE2MjA3NDg5ZWFjOTE5YWFjMWI3Y2U1OWJkZTY5NjBlZmVmOTQzNDU3ZTRmNGYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21wc19zb2x2ZXIvcmVzdWx0cy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJlYjBjYzkzZTNmYjE1Yzk4MmExODdjZGNhNTEwNjg2ODkzODBmMjE5OGNkNDQyNmE2NGY3M2IyMjdjZThiZjBlIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9wb3J0Zm9saW8vUkVBRE1FLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjhlMDk3OTFmNTBkM2VkY2M4ZDIyMGYyNzVhN2Q2MjdiYTQwMDcwMGExMjZlYjAzOWQ0YmU4ODEyZDc2NTliOWYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL3BvcnRmb2xpby9tb2RlbC5weSIsCiAgICAgICAgImRpZ2VzdCI6ICI5ZGNmMTE1ZDU4ODdlNGQ5MDNhODk3ZGJiYmI0OWZlMTRmZDhhZDVmN2FiNDIwZmQ2MmRmNTYwMWVlYmZjM2IyIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogImJlbmNobWFyay9TT1VSQ0VTLm1kIiwKICAgICAgICAiZGlnZXN0IjogImQ1Zjg2MGM3NjgwMGFlM2EzODZmMTY4ZjNmYTRiZDkzMDIyMzZlNTc0NWU2YjlhMjdmNmQ3YWZmYmMxMTdhMmUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYmVuY2htYXJrL2V2YWxzLmpzb24iLAogICAgICAgICJkaWdlc3QiOiAiNzMzMWE0ZjBjZjAxM2ZkNzE4Y2Y0MDdlYTIyMTIxZDMwNzI2YzM3MzZjYzIyMjM3ZjgyNmIxNzM0NjYzYTM2YyIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJldmFscy9ldmFscy5qc29uIiwKICAgICAgICAiZGlnZXN0IjogIjI1N2JmYTBmN2Q1NmYxMjU4ZmZjYzY3NzFjYjc3Yjc3ODFhMTQzYmUyYmQ2MDY3MjU2YTVjNzhjYzkxYTdiYjUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9xcF9leGFtcGxlcy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI2ZTVhZWNmMzZkMWQ4NDQ0MDYyNDJhNGEwNDg0NGI0M2Y2YTZmZDViNmJiYmNkODczYzUzZjI3OTEyZWVjZTlhIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogInNraWxsLWNhcmQubWQiLAogICAgICAgICJkaWdlc3QiOiAiYmNmODlkMGYyODQzMDJjMzk2NmZkYWE2ODkzOGFiOGMzNmNlZWMyYjI4OTA0ZDYxZDYzYTUyNTBjZDNlZjgyMiIKICAgICAgfQogICAgXQogIH0KfQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGYCMQCOHv/vFqMveckAvbGtYJxluHbAKLB7cAAKZvTqXsomljpnnYZEJRFYV+GqiukZJ2sCMQCSpHfO6QzIK+LeqQIHF6uw8jPocAoNKrn+IHKfYYcg80QdjqYam/9zDG02jNORNeI=","keyid":""}]}} \ No newline at end of file