Draft dQM CMS Content Implementation Guide
2025.1.0 - CI Build
Draft dQM CMS Content Implementation Guide, published by cqframework. This guide is not an authorized publication; it is the continuous build for version 2025.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cqframework/dqm-content-cms-2025/ and changes regularly. See the Directory of published versions
| Draft as of 2026-09-19 |
{
"resourceType" : "Library",
"id" : "CMS159FHIRDepRemissionat12Months",
"text" : {
"status" : "extensions",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <table class=\"narrative-table\">\n <tbody>\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"metadata\"> </a>Metadata</th>\n\n\n</tr>\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Version</th>\n\n\n\n<td class=\"content-container\">1.1.000</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Status</th>\n\n\n\n<td class=\"content-container\">Draft</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Type</th>\n\n\n\n<td class=\"content-container\">\n <a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a>#logic-library\n\n\n</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"parameters\"> </a>Parameters</th>\n\n\n</tr>\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Parameter</th>\n\n\n\n<td class=\"content-container\">None</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n <tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\">Library Content</th>\n\n\n</tr>\n \n \n <tr>\n <th scope=\"row\" class=\"row-header\">CQL Content</th>\n <td>\n <a name=\"cql-content\"> </a>\n <pre style=\"border: none;\" class=\"content-container highlight language-cql\"><code class=\"language-cql\">/*\nNOTE: For use by March 2026 US Realm Connectathon participants for internal use only. Not for use or distribution in commercial products.\n*/\nlibrary CMS159FHIRDepRemissionat12Months version '1.1.000'\n\nusing USQualityCore version '0.1.0-cibuild'\nusing USCore version '6.1.0-derived'\nusing FHIR version '4.0.1'\n\ninclude hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers\ninclude hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon\ninclude hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon\ninclude hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements\n\ninclude CQMCommon version '5.1.000' called CQMCommon\ninclude USQualityCoreCommon version '0.1.0-cibuild' called USQualityCoreCommon\ninclude SupplementalDataElements version '6.1.000' called SDE\ninclude Status version '2.1.000' called Status\n\ncodesystem "LOINC": 'http://loinc.org'\ncodesystem "SNOMEDCT": 'http://snomed.info/sct'\ncodesystem "ConditionVerificationStatusCodes": 'http://terminology.hl7.org/CodeSystem/condition-ver-status'\n\nvalueset "Bipolar Disorder": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.67.1.101.1.128'\nvalueset "Contact or Office Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1080.5'\nvalueset "Dysthymia": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.67.1.101.1.254'\nvalueset "Encounter Inpatient": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307'\nvalueset "Hospice Care Ambulatory": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1584'\nvalueset "Hospice Diagnosis": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1165'\nvalueset "Hospice Encounter": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1003'\nvalueset "Major Depression Including Remission": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.113883.3.67.1.101.3.2444'\nvalueset "Palliative Care Diagnosis": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1167'\nvalueset "Palliative Care Encounter": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1090'\nvalueset "Palliative Care Intervention": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1135'\nvalueset "Palliative or Hospice Care": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1.1579'\nvalueset "Personality Disorder Emotionally Labile": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.67.1.101.1.246'\nvalueset "Pervasive Developmental Disorder": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.105.12.1152'\nvalueset "PHQ 9 and PHQ 9M Tools": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.67.1.101.1.263'\nvalueset "Schizophrenia or Psychotic Disorder": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.105.12.1104'\n\ncode "Discharge to healthcare facility for hospice care (procedure)": '428371000124100' from "SNOMEDCT" display 'Discharge to healthcare facility for hospice care (procedure)'\ncode "Discharge to home for hospice care (procedure)": '428361000124107' from "SNOMEDCT" display 'Discharge to home for hospice care (procedure)'\ncode "Functional Assessment of Chronic Illness Therapy - Palliative Care Questionnaire (FACIT-Pal)": '71007-9' from "LOINC" display 'Functional Assessment of Chronic Illness Therapy - Palliative Care Questionnaire (FACIT-Pal)'\ncode "Hospice care [Minimum Data Set]": '45755-6' from "LOINC" display 'Hospice care [Minimum Data Set]'\ncode "Yes (qualifier value)": '373066001' from "SNOMEDCT" display 'Yes (qualifier value)'\n\nparameter "Measurement Period" Interval<DateTime>\n default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)\n\ncontext Patient\n\ndefine "Initial Population":\n AgeInYearsAt(date from start of("Index Depression Assessment".effective.toInterval())) >= 12\n\ndefine "Denominator":\n "Initial Population"\n\ndefine "Denominator Exclusions":\n "Has Hospice Services prior to or during the Measure Assessment Period"\n or "Has Palliative Care prior to or during the Measure Assessment Period"\n or "Patient Expired"\n or "Has Mental Health Disorder Diagnoses"\n\ndefine "Numerator":\n Last([ObservationScreeningAssessment: "PHQ 9 and PHQ 9M Tools"] DepressionAssessment\n where start of DepressionAssessment.effective.toInterval() during day of "Measure Assessment Period"\n and DepressionAssessment.status in { 'final', 'amended', 'corrected' }\n sort by start of effective.toInterval()\n ).value < 5\n\ndefine "SDE Ethnicity":\n SDE."SDE Ethnicity"\n\ndefine "SDE Payer":\n SDE."SDE Payer"\n\ndefine "SDE Race":\n SDE."SDE Race"\n\ndefine "SDE Sex":\n SDE."SDE Sex"\n\ndefine "Denominator Identification Period":\n Interval[start of "Measurement Period" - 14 months, start of "Measurement Period" - 2 months )\n\ndefine "Depression Assessments Greater Than 9":\n [ObservationScreeningAssessment: "PHQ 9 and PHQ 9M Tools"] DepressionAssessment\n where DepressionAssessment.value > 9\n and DepressionAssessment.status in { 'final', 'amended', 'corrected' }\n\ndefine "Depression Diagnoses":\n // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n // Original:\n // ( [ConditionProblemsHealthConcerns: "Major Depression Including Remission"]\n // union [ConditionEncounterDiagnosis: "Major Depression Including Remission"]\n // union [ConditionProblemsHealthConcerns: "Dysthymia"]\n // union [ConditionEncounterDiagnosis: "Dysthymia"] ) Depression\n ( [Condition: "Major Depression Including Remission"]\n union [Condition: "Dysthymia"] ) Depression\n where Depression.isVerified ( )\n\ndefine "Depression Encounter":\n [Encounter: "Contact or Office Visit"] ValidEncounter\n with "Depression Diagnoses" Depression\n such that ValidEncounter.period overlaps Depression.prevalenceInterval ( )\n and ValidEncounter.period ends during day of "Denominator Identification Period"\n and ValidEncounter.status = 'finished'\n\ndefine "Has Mental Health Disorder Diagnoses":\n // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n // Original:\n // exists ( ( [ConditionProblemsHealthConcerns: "Bipolar Disorder"]\n // union [ConditionEncounterDiagnosis: "Bipolar Disorder"]\n // union [ConditionProblemsHealthConcerns: "Personality Disorder Emotionally Labile"]\n // union [ConditionEncounterDiagnosis: "Personality Disorder Emotionally Labile"]\n // union [ConditionProblemsHealthConcerns: "Schizophrenia or Psychotic Disorder"]\n // union [ConditionEncounterDiagnosis: "Schizophrenia or Psychotic Disorder"]\n // union [ConditionProblemsHealthConcerns: "Pervasive Developmental Disorder"]\n // union [ConditionEncounterDiagnosis: "Pervasive Developmental Disorder"] ) MentalHealthDisorderDiagnoses\n exists ( ( [Condition: "Bipolar Disorder"]\n union [Condition: "Personality Disorder Emotionally Labile"]\n union [Condition: "Schizophrenia or Psychotic Disorder"]\n union [Condition: "Pervasive Developmental Disorder"] ) MentalHealthDisorderDiagnoses\n where start of MentalHealthDisorderDiagnoses.prevalenceInterval ( ) on or before day of end of "Measure Assessment Period"\n and MentalHealthDisorderDiagnoses.isVerified ( )\n )\n\ndefine "Measure Assessment Period":\n "Index Depression Assessment" FirstIndexAssessment\n let YearAfterIndexAssessment: date from start of FirstIndexAssessment.effective.toInterval ( ) + 12 months\n return Interval[YearAfterIndexAssessment - 60 days, YearAfterIndexAssessment + 60 days]\n\ndefine "Patient Expired":\n Patient.deceased occurs on or before day of end of "Measure Assessment Period"\n\ndefine "Has Hospice Services prior to or during the Measure Assessment Period":\n exists ( [Encounter: "Encounter Inpatient"] InpatientEncounter\n where ( InpatientEncounter.hospitalization.dischargeDisposition ~ "Discharge to home for hospice care (procedure)"\n or InpatientEncounter.hospitalization.dischargeDisposition ~ "Discharge to healthcare facility for hospice care (procedure)"\n )\n and InpatientEncounter.period ends during day of Interval[start of "Denominator Identification Period", end of "Measure Assessment Period"]\n and InpatientEncounter.status = 'finished'\n )\n or exists ( [Encounter: "Hospice Encounter"] HospiceEncounter\n where HospiceEncounter.period overlaps day of Interval[start of "Denominator Identification Period", end of "Measure Assessment Period"]\n and not ( HospiceEncounter.status in { 'cancelled', 'entered-in-error', 'unknown' } )\n )\n or exists ( [ObservationScreeningAssessment: "Hospice care [Minimum Data Set]"] HospiceAssessment\n where HospiceAssessment.value ~ "Yes (qualifier value)"\n and HospiceAssessment.effective.toInterval ( ) overlaps day of Interval[start of "Denominator Identification Period", end of "Measure Assessment Period"]\n and HospiceAssessment.status in { 'final', 'amended', 'corrected' }\n )\n or exists ( [ServiceRequest: "Hospice Care Ambulatory"] HospiceOrder\n where HospiceOrder.authoredOn during day of Interval[start of "Denominator Identification Period", end of "Measure Assessment Period"]\n and HospiceOrder.status in { 'active', 'completed' }\n and HospiceOrder.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n )\n or exists ( [Procedure: "Hospice Care Ambulatory"] HospicePerformed\n where HospicePerformed.performed.toInterval ( ) overlaps day of Interval[start of "Denominator Identification Period", end of "Measure Assessment Period"]\n and not ( HospicePerformed.status in { 'not-done', 'entered-in-error', 'unknown' } )\n )\n // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n // Original:\n // or exists ( ( [ConditionProblemsHealthConcerns: "Hospice Diagnosis"]\n // union [ConditionEncounterDiagnosis: "Hospice Diagnosis"] ) HospiceCareDiagnosis\n or exists ( [Condition: "Hospice Diagnosis"] HospiceCareDiagnosis\n where HospiceCareDiagnosis.prevalenceInterval ( ) overlaps day of Interval[start of "Denominator Identification Period", end of "Measure Assessment Period"]\n and HospiceCareDiagnosis.isVerified ( )\n )\n\ndefine "Index Depression Assessment":\n First("Depression Assessments Greater Than 9" DepressionAssessment\n with "Depression Encounter" DepressionEncounter\n such that DepressionAssessment.effective.toInterval() during day of Interval[start of DepressionEncounter.period - 7 days, \n end of DepressionEncounter.period]\n sort by start of effective.toInterval()\n )\n\ndefine "Has Palliative Care prior to or during the Measure Assessment Period":\n exists ( [ObservationScreeningAssessment: "Functional Assessment of Chronic Illness Therapy - Palliative Care Questionnaire (FACIT-Pal)"] PalliativeAssessment\n where PalliativeAssessment.effective.toInterval ( ) overlaps day of Interval[start of "Denominator Identification Period", end of "Measure Assessment Period"]\n and PalliativeAssessment.status in { 'final', 'amended', 'corrected' }\n )\n // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n // Original:\n // or exists ( ( [ConditionProblemsHealthConcerns: "Palliative Care Diagnosis"]\n // union [ConditionEncounterDiagnosis: "Palliative Care Diagnosis"] ) PalliativeDiagnosis\n or exists ( [Condition: "Palliative Care Diagnosis"] PalliativeDiagnosis\n where PalliativeDiagnosis.prevalenceInterval ( ) overlaps day of Interval[start of "Denominator Identification Period", end of "Measure Assessment Period"]\n and PalliativeDiagnosis.isVerified ( )\n )\n or exists ( [Encounter: "Palliative Care Encounter"] PalliativeEncounter\n where PalliativeEncounter.period overlaps day of Interval[start of "Denominator Identification Period", end of "Measure Assessment Period"]\n and PalliativeEncounter.status = 'finished'\n )\n or exists ( [Procedure: "Palliative Care Intervention"] PalliativeIntervention\n where PalliativeIntervention.performed.toInterval ( ) overlaps day of Interval[start of "Denominator Identification Period", end of "Measure Assessment Period"]\n and not ( PalliativeIntervention.status in { 'not-done', 'entered-in-error', 'unknown' } )\n )\n\ndefine fluent function isVerified(condition Choice<ConditionEncounterDiagnosis, ConditionProblemsHealthConcerns>):\n condition.verificationStatus is not null implies ( condition.verificationStatus ~ Status."confirmed"\n or condition.verificationStatus ~ Status."unconfirmed"\n or condition.verificationStatus ~ Status."provisional"\n or condition.verificationStatus ~ Status."differential"\n )\n\ndefine "Stratification 1":\n "Index Depression Assessment" IndexAssessment\n return AgeInYearsAt(date from start of IndexAssessment.effective.toInterval()) in Interval[12, 17]\n\ndefine "Stratification 2":\n "Index Depression Assessment" IndexAssessment\n return AgeInYearsAt(date from start of IndexAssessment.effective.toInterval()) >= 18</code></pre>\n </td>\n </tr>\n \n \n\n\n\n<tr>\n <th colspan=\"2\" scope=\"row\" class=\"row-header\">Generated using version 0.5.6 of the sample-content-ig Liquid templates</th>\n</tr>\n\n </tbody>\n </table>\n</div>"
},
"extension" : [
{
"url" : "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem",
"valueReference" : {
"reference" : "Device/cqf-tooling"
}
}
],
"url" : "https://madie.cms.gov/Library/CMS159FHIRDepRemissionat12Months",
"version" : "1.1.000",
"name" : "CMS159FHIRDepRemissionat12Months",
"status" : "draft",
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library"
}
]
},
"date" : "2026-09-19T16:31:14+00:00",
"content" : [
{
"contentType" : "text/cql",
"data" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVMxNTlGSElSRGVwUmVtaXNzaW9uYXQxMk1vbnRocyB2ZXJzaW9uICcxLjEuMDAwJwoKdXNpbmcgVVNRdWFsaXR5Q29yZSB2ZXJzaW9uICcwLjEuMC1jaWJ1aWxkJwp1c2luZyBVU0NvcmUgdmVyc2lvbiAnNi4xLjAtZGVyaXZlZCcKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgaGw3LmZoaXIudXYuY3FsLkZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJyBjYWxsZWQgRkhJUkhlbHBlcnMKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkNvbW1vbiB2ZXJzaW9uICcyLjAuMCcgY2FsbGVkIEZISVJDb21tb24KaW5jbHVkZSBobDcuZmhpci51cy5jcWwuVVNDb3JlQ29tbW9uIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVFbGVtZW50cyB2ZXJzaW9uICcyLjAuMC1iYWxsb3QnIGNhbGxlZCBVU0NvcmVFbGVtZW50cwoKaW5jbHVkZSBDUU1Db21tb24gdmVyc2lvbiAnNS4xLjAwMCcgY2FsbGVkIENRTUNvbW1vbgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHMgdmVyc2lvbiAnNi4xLjAwMCcgY2FsbGVkIFNERQppbmNsdWRlIFN0YXR1cyB2ZXJzaW9uICcyLjEuMDAwJyBjYWxsZWQgU3RhdHVzCgpjb2Rlc3lzdGVtICJMT0lOQyI6ICdodHRwOi8vbG9pbmMub3JnJwpjb2Rlc3lzdGVtICJTTk9NRURDVCI6ICdodHRwOi8vc25vbWVkLmluZm8vc2N0Jwpjb2Rlc3lzdGVtICJDb25kaXRpb25WZXJpZmljYXRpb25TdGF0dXNDb2RlcyI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL2NvbmRpdGlvbi12ZXItc3RhdHVzJwoKdmFsdWVzZXQgIkJpcG9sYXIgRGlzb3JkZXIiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNjcuMS4xMDEuMS4xMjgnCnZhbHVlc2V0ICJDb250YWN0IG9yIE9mZmljZSBWaXNpdCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEwODAuNScKdmFsdWVzZXQgIkR5c3RoeW1pYSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42Ny4xLjEwMS4xLjI1NCcKdmFsdWVzZXQgIkVuY291bnRlciBJbnBhdGllbnQiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNjY2LjUuMzA3Jwp2YWx1ZXNldCAiSG9zcGljZSBDYXJlIEFtYnVsYXRvcnkiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTU4NCcKdmFsdWVzZXQgIkhvc3BpY2UgRGlhZ25vc2lzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExNjUnCnZhbHVlc2V0ICJIb3NwaWNlIEVuY291bnRlciI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDAzJwp2YWx1ZXNldCAiTWFqb3IgRGVwcmVzc2lvbiBJbmNsdWRpbmcgUmVtaXNzaW9uIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xMTM4ODMuMy42Ny4xLjEwMS4zLjI0NDQnCnZhbHVlc2V0ICJQYWxsaWF0aXZlIENhcmUgRGlhZ25vc2lzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExNjcnCnZhbHVlc2V0ICJQYWxsaWF0aXZlIENhcmUgRW5jb3VudGVyIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDkwJwp2YWx1ZXNldCAiUGFsbGlhdGl2ZSBDYXJlIEludGVydmVudGlvbiI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xOTguMTIuMTEzNScKdmFsdWVzZXQgIlBhbGxpYXRpdmUgb3IgSG9zcGljZSBDYXJlIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjYwMC4xLjE1NzknCnZhbHVlc2V0ICJQZXJzb25hbGl0eSBEaXNvcmRlciBFbW90aW9uYWxseSBMYWJpbGUiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNjcuMS4xMDEuMS4yNDYnCnZhbHVlc2V0ICJQZXJ2YXNpdmUgRGV2ZWxvcG1lbnRhbCBEaXNvcmRlciI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDUuMTIuMTE1MicKdmFsdWVzZXQgIlBIUSA5IGFuZCBQSFEgOU0gVG9vbHMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNjcuMS4xMDEuMS4yNjMnCnZhbHVlc2V0ICJTY2hpem9waHJlbmlhIG9yIFBzeWNob3RpYyBEaXNvcmRlciI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDUuMTIuMTEwNCcKCmNvZGUgIkRpc2NoYXJnZSB0byBoZWFsdGhjYXJlIGZhY2lsaXR5IGZvciBob3NwaWNlIGNhcmUgKHByb2NlZHVyZSkiOiAnNDI4MzcxMDAwMTI0MTAwJyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnRGlzY2hhcmdlIHRvIGhlYWx0aGNhcmUgZmFjaWxpdHkgZm9yIGhvc3BpY2UgY2FyZSAocHJvY2VkdXJlKScKY29kZSAiRGlzY2hhcmdlIHRvIGhvbWUgZm9yIGhvc3BpY2UgY2FyZSAocHJvY2VkdXJlKSI6ICc0MjgzNjEwMDAxMjQxMDcnIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdEaXNjaGFyZ2UgdG8gaG9tZSBmb3IgaG9zcGljZSBjYXJlIChwcm9jZWR1cmUpJwpjb2RlICJGdW5jdGlvbmFsIEFzc2Vzc21lbnQgb2YgQ2hyb25pYyBJbGxuZXNzIFRoZXJhcHkgLSBQYWxsaWF0aXZlIENhcmUgUXVlc3Rpb25uYWlyZSAoRkFDSVQtUGFsKSI6ICc3MTAwNy05JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnRnVuY3Rpb25hbCBBc3Nlc3NtZW50IG9mIENocm9uaWMgSWxsbmVzcyBUaGVyYXB5IC0gUGFsbGlhdGl2ZSBDYXJlIFF1ZXN0aW9ubmFpcmUgKEZBQ0lULVBhbCknCmNvZGUgIkhvc3BpY2UgY2FyZSBbTWluaW11bSBEYXRhIFNldF0iOiAnNDU3NTUtNicgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ0hvc3BpY2UgY2FyZSBbTWluaW11bSBEYXRhIFNldF0nCmNvZGUgIlllcyAocXVhbGlmaWVyIHZhbHVlKSI6ICczNzMwNjYwMDEnIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdZZXMgKHF1YWxpZmllciB2YWx1ZSknCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNy0wMS0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgQWdlSW5ZZWFyc0F0KGRhdGUgZnJvbSBzdGFydCBvZigiSW5kZXggRGVwcmVzc2lvbiBBc3Nlc3NtZW50Ii5lZmZlY3RpdmUudG9JbnRlcnZhbCgpKSkgPj0gMTIKCmRlZmluZSAiRGVub21pbmF0b3IiOgogICJJbml0aWFsIFBvcHVsYXRpb24iCgpkZWZpbmUgIkRlbm9taW5hdG9yIEV4Y2x1c2lvbnMiOgogICJIYXMgSG9zcGljZSBTZXJ2aWNlcyBwcmlvciB0byBvciBkdXJpbmcgdGhlIE1lYXN1cmUgQXNzZXNzbWVudCBQZXJpb2QiCiAgICBvciAiSGFzIFBhbGxpYXRpdmUgQ2FyZSBwcmlvciB0byBvciBkdXJpbmcgdGhlIE1lYXN1cmUgQXNzZXNzbWVudCBQZXJpb2QiCiAgICBvciAiUGF0aWVudCBFeHBpcmVkIgogICAgb3IgIkhhcyBNZW50YWwgSGVhbHRoIERpc29yZGVyIERpYWdub3NlcyIKCmRlZmluZSAiTnVtZXJhdG9yIjoKICBMYXN0KFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJQSFEgOSBhbmQgUEhRIDlNIFRvb2xzIl0gRGVwcmVzc2lvbkFzc2Vzc21lbnQKICAgICAgd2hlcmUgc3RhcnQgb2YgRGVwcmVzc2lvbkFzc2Vzc21lbnQuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSBkdXJpbmcgZGF5IG9mICJNZWFzdXJlIEFzc2Vzc21lbnQgUGVyaW9kIgogICAgICAgIGFuZCBEZXByZXNzaW9uQXNzZXNzbWVudC5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgc29ydCBieSBzdGFydCBvZiBlZmZlY3RpdmUudG9JbnRlcnZhbCgpCiAgKS52YWx1ZSA8IDUKCmRlZmluZSAiU0RFIEV0aG5pY2l0eSI6CiAgU0RFLiJTREUgRXRobmljaXR5IgoKZGVmaW5lICJTREUgUGF5ZXIiOgogIFNERS4iU0RFIFBheWVyIgoKZGVmaW5lICJTREUgUmFjZSI6CiAgU0RFLiJTREUgUmFjZSIKCmRlZmluZSAiU0RFIFNleCI6CiAgU0RFLiJTREUgU2V4IgoKZGVmaW5lICJEZW5vbWluYXRvciBJZGVudGlmaWNhdGlvbiBQZXJpb2QiOgogIEludGVydmFsW3N0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiIC0gMTQgbW9udGhzLCBzdGFydCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIiAtIDIgbW9udGhzICkKCmRlZmluZSAiRGVwcmVzc2lvbiBBc3Nlc3NtZW50cyBHcmVhdGVyIFRoYW4gOSI6CiAgW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudDogIlBIUSA5IGFuZCBQSFEgOU0gVG9vbHMiXSBEZXByZXNzaW9uQXNzZXNzbWVudAogICAgd2hlcmUgRGVwcmVzc2lvbkFzc2Vzc21lbnQudmFsdWUgPiA5CiAgICAgIGFuZCBEZXByZXNzaW9uQXNzZXNzbWVudC5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KCmRlZmluZSAiRGVwcmVzc2lvbiBEaWFnbm9zZXMiOgogIC8vIFtFLTEzXSBiYXNlIEZISVIuQ29uZGl0aW9uIHJldHJpZXZlIChkZWZlY3QtdHJhY2tpbmcvZW5naW5lLWlzc3Vlcy5tZCBFLTEzKQogIC8vIE9yaWdpbmFsOgogIC8vICggW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJNYWpvciBEZXByZXNzaW9uIEluY2x1ZGluZyBSZW1pc3Npb24iXQogIC8vICAgdW5pb24gW0NvbmRpdGlvbkVuY291bnRlckRpYWdub3NpczogIk1ham9yIERlcHJlc3Npb24gSW5jbHVkaW5nIFJlbWlzc2lvbiJdCiAgLy8gICB1bmlvbiBbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuczogIkR5c3RoeW1pYSJdCiAgLy8gICB1bmlvbiBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzOiAiRHlzdGh5bWlhIl0gKSBEZXByZXNzaW9uCiAgKCBbQ29uZGl0aW9uOiAiTWFqb3IgRGVwcmVzc2lvbiBJbmNsdWRpbmcgUmVtaXNzaW9uIl0KICAgIHVuaW9uIFtDb25kaXRpb246ICJEeXN0aHltaWEiXSApIERlcHJlc3Npb24KICAgIHdoZXJlIERlcHJlc3Npb24uaXNWZXJpZmllZCAoICkKCmRlZmluZSAiRGVwcmVzc2lvbiBFbmNvdW50ZXIiOgogIFtFbmNvdW50ZXI6ICJDb250YWN0IG9yIE9mZmljZSBWaXNpdCJdIFZhbGlkRW5jb3VudGVyCiAgICB3aXRoICJEZXByZXNzaW9uIERpYWdub3NlcyIgRGVwcmVzc2lvbgogICAgICBzdWNoIHRoYXQgVmFsaWRFbmNvdW50ZXIucGVyaW9kIG92ZXJsYXBzIERlcHJlc3Npb24ucHJldmFsZW5jZUludGVydmFsICggKQogICAgICAgIGFuZCBWYWxpZEVuY291bnRlci5wZXJpb2QgZW5kcyBkdXJpbmcgZGF5IG9mICJEZW5vbWluYXRvciBJZGVudGlmaWNhdGlvbiBQZXJpb2QiCiAgICAgICAgYW5kIFZhbGlkRW5jb3VudGVyLnN0YXR1cyA9ICdmaW5pc2hlZCcKCmRlZmluZSAiSGFzIE1lbnRhbCBIZWFsdGggRGlzb3JkZXIgRGlhZ25vc2VzIjoKICAvLyBbRS0xM10gYmFzZSBGSElSLkNvbmRpdGlvbiByZXRyaWV2ZSAoZGVmZWN0LXRyYWNraW5nL2VuZ2luZS1pc3N1ZXMubWQgRS0xMykKICAvLyBPcmlnaW5hbDoKICAvLyBleGlzdHMgKCAoIFtDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zOiAiQmlwb2xhciBEaXNvcmRlciJdCiAgLy8gICAgIHVuaW9uIFtDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXM6ICJCaXBvbGFyIERpc29yZGVyIl0KICAvLyAgICAgdW5pb24gW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJQZXJzb25hbGl0eSBEaXNvcmRlciBFbW90aW9uYWxseSBMYWJpbGUiXQogIC8vICAgICB1bmlvbiBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzOiAiUGVyc29uYWxpdHkgRGlzb3JkZXIgRW1vdGlvbmFsbHkgTGFiaWxlIl0KICAvLyAgICAgdW5pb24gW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJTY2hpem9waHJlbmlhIG9yIFBzeWNob3RpYyBEaXNvcmRlciJdCiAgLy8gICAgIHVuaW9uIFtDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXM6ICJTY2hpem9waHJlbmlhIG9yIFBzeWNob3RpYyBEaXNvcmRlciJdCiAgLy8gICAgIHVuaW9uIFtDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zOiAiUGVydmFzaXZlIERldmVsb3BtZW50YWwgRGlzb3JkZXIiXQogIC8vICAgICB1bmlvbiBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzOiAiUGVydmFzaXZlIERldmVsb3BtZW50YWwgRGlzb3JkZXIiXSApIE1lbnRhbEhlYWx0aERpc29yZGVyRGlhZ25vc2VzCiAgZXhpc3RzICggKCBbQ29uZGl0aW9uOiAiQmlwb2xhciBEaXNvcmRlciJdCiAgICAgIHVuaW9uIFtDb25kaXRpb246ICJQZXJzb25hbGl0eSBEaXNvcmRlciBFbW90aW9uYWxseSBMYWJpbGUiXQogICAgICB1bmlvbiBbQ29uZGl0aW9uOiAiU2NoaXpvcGhyZW5pYSBvciBQc3ljaG90aWMgRGlzb3JkZXIiXQogICAgICB1bmlvbiBbQ29uZGl0aW9uOiAiUGVydmFzaXZlIERldmVsb3BtZW50YWwgRGlzb3JkZXIiXSApIE1lbnRhbEhlYWx0aERpc29yZGVyRGlhZ25vc2VzCiAgICAgIHdoZXJlIHN0YXJ0IG9mIE1lbnRhbEhlYWx0aERpc29yZGVyRGlhZ25vc2VzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb24gb3IgYmVmb3JlIGRheSBvZiBlbmQgb2YgIk1lYXN1cmUgQXNzZXNzbWVudCBQZXJpb2QiCiAgICAgICAgYW5kIE1lbnRhbEhlYWx0aERpc29yZGVyRGlhZ25vc2VzLmlzVmVyaWZpZWQgKCApCiAgKQoKZGVmaW5lICJNZWFzdXJlIEFzc2Vzc21lbnQgUGVyaW9kIjoKICAiSW5kZXggRGVwcmVzc2lvbiBBc3Nlc3NtZW50IiBGaXJzdEluZGV4QXNzZXNzbWVudAogICAgbGV0IFllYXJBZnRlckluZGV4QXNzZXNzbWVudDogZGF0ZSBmcm9tIHN0YXJ0IG9mIEZpcnN0SW5kZXhBc3Nlc3NtZW50LmVmZmVjdGl2ZS50b0ludGVydmFsICggKSArIDEyIG1vbnRocwogICAgcmV0dXJuIEludGVydmFsW1llYXJBZnRlckluZGV4QXNzZXNzbWVudCAtIDYwIGRheXMsIFllYXJBZnRlckluZGV4QXNzZXNzbWVudCArIDYwIGRheXNdCgpkZWZpbmUgIlBhdGllbnQgRXhwaXJlZCI6CiAgUGF0aWVudC5kZWNlYXNlZCBvY2N1cnMgb24gb3IgYmVmb3JlIGRheSBvZiBlbmQgb2YgIk1lYXN1cmUgQXNzZXNzbWVudCBQZXJpb2QiCgpkZWZpbmUgIkhhcyBIb3NwaWNlIFNlcnZpY2VzIHByaW9yIHRvIG9yIGR1cmluZyB0aGUgTWVhc3VyZSBBc3Nlc3NtZW50IFBlcmlvZCI6CiAgZXhpc3RzICggW0VuY291bnRlcjogIkVuY291bnRlciBJbnBhdGllbnQiXSBJbnBhdGllbnRFbmNvdW50ZXIKICAgICAgd2hlcmUgKCBJbnBhdGllbnRFbmNvdW50ZXIuaG9zcGl0YWxpemF0aW9uLmRpc2NoYXJnZURpc3Bvc2l0aW9uIH4gIkRpc2NoYXJnZSB0byBob21lIGZvciBob3NwaWNlIGNhcmUgKHByb2NlZHVyZSkiCiAgICAgICAgICBvciBJbnBhdGllbnRFbmNvdW50ZXIuaG9zcGl0YWxpemF0aW9uLmRpc2NoYXJnZURpc3Bvc2l0aW9uIH4gIkRpc2NoYXJnZSB0byBoZWFsdGhjYXJlIGZhY2lsaXR5IGZvciBob3NwaWNlIGNhcmUgKHByb2NlZHVyZSkiCiAgICAgICkKICAgICAgICBhbmQgSW5wYXRpZW50RW5jb3VudGVyLnBlcmlvZCBlbmRzIGR1cmluZyBkYXkgb2YgSW50ZXJ2YWxbc3RhcnQgb2YgIkRlbm9taW5hdG9yIElkZW50aWZpY2F0aW9uIFBlcmlvZCIsIGVuZCBvZiAiTWVhc3VyZSBBc3Nlc3NtZW50IFBlcmlvZCJdCiAgICAgICAgYW5kIElucGF0aWVudEVuY291bnRlci5zdGF0dXMgPSAnZmluaXNoZWQnCiAgKQogICAgb3IgZXhpc3RzICggW0VuY291bnRlcjogIkhvc3BpY2UgRW5jb3VudGVyIl0gSG9zcGljZUVuY291bnRlcgogICAgICAgIHdoZXJlIEhvc3BpY2VFbmNvdW50ZXIucGVyaW9kIG92ZXJsYXBzIGRheSBvZiBJbnRlcnZhbFtzdGFydCBvZiAiRGVub21pbmF0b3IgSWRlbnRpZmljYXRpb24gUGVyaW9kIiwgZW5kIG9mICJNZWFzdXJlIEFzc2Vzc21lbnQgUGVyaW9kIl0KICAgICAgICAgIGFuZCBub3QgKCBIb3NwaWNlRW5jb3VudGVyLnN0YXR1cyBpbiB7ICdjYW5jZWxsZWQnLCAnZW50ZXJlZC1pbi1lcnJvcicsICd1bmtub3duJyB9ICkKICAgICkKICAgIG9yIGV4aXN0cyAoIFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJIb3NwaWNlIGNhcmUgW01pbmltdW0gRGF0YSBTZXRdIl0gSG9zcGljZUFzc2Vzc21lbnQKICAgICAgICB3aGVyZSBIb3NwaWNlQXNzZXNzbWVudC52YWx1ZSB+ICJZZXMgKHF1YWxpZmllciB2YWx1ZSkiCiAgICAgICAgICBhbmQgSG9zcGljZUFzc2Vzc21lbnQuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGRheSBvZiBJbnRlcnZhbFtzdGFydCBvZiAiRGVub21pbmF0b3IgSWRlbnRpZmljYXRpb24gUGVyaW9kIiwgZW5kIG9mICJNZWFzdXJlIEFzc2Vzc21lbnQgUGVyaW9kIl0KICAgICAgICAgIGFuZCBIb3NwaWNlQXNzZXNzbWVudC5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICkKICAgIG9yIGV4aXN0cyAoIFtTZXJ2aWNlUmVxdWVzdDogIkhvc3BpY2UgQ2FyZSBBbWJ1bGF0b3J5Il0gSG9zcGljZU9yZGVyCiAgICAgICAgd2hlcmUgSG9zcGljZU9yZGVyLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBJbnRlcnZhbFtzdGFydCBvZiAiRGVub21pbmF0b3IgSWRlbnRpZmljYXRpb24gUGVyaW9kIiwgZW5kIG9mICJNZWFzdXJlIEFzc2Vzc21lbnQgUGVyaW9kIl0KICAgICAgICAgIGFuZCBIb3NwaWNlT3JkZXIuc3RhdHVzIGluIHsgJ2FjdGl2ZScsICdjb21wbGV0ZWQnIH0KICAgICAgICAgIGFuZCBIb3NwaWNlT3JkZXIuaW50ZW50IGluIHsgJ29yZGVyJywgJ29yaWdpbmFsLW9yZGVyJywgJ3JlZmxleC1vcmRlcicsICdmaWxsZXItb3JkZXInLCAnaW5zdGFuY2Utb3JkZXInIH0KICAgICkKICAgIG9yIGV4aXN0cyAoIFtQcm9jZWR1cmU6ICJIb3NwaWNlIENhcmUgQW1idWxhdG9yeSJdIEhvc3BpY2VQZXJmb3JtZWQKICAgICAgICB3aGVyZSBIb3NwaWNlUGVyZm9ybWVkLnBlcmZvcm1lZC50b0ludGVydmFsICggKSBvdmVybGFwcyBkYXkgb2YgSW50ZXJ2YWxbc3RhcnQgb2YgIkRlbm9taW5hdG9yIElkZW50aWZpY2F0aW9uIFBlcmlvZCIsIGVuZCBvZiAiTWVhc3VyZSBBc3Nlc3NtZW50IFBlcmlvZCJdCiAgICAgICAgICBhbmQgbm90ICggSG9zcGljZVBlcmZvcm1lZC5zdGF0dXMgaW4geyAnbm90LWRvbmUnLCAnZW50ZXJlZC1pbi1lcnJvcicsICd1bmtub3duJyB9ICkKICAgICkKICAgIC8vIFtFLTEzXSBiYXNlIEZISVIuQ29uZGl0aW9uIHJldHJpZXZlIChkZWZlY3QtdHJhY2tpbmcvZW5naW5lLWlzc3Vlcy5tZCBFLTEzKQogICAgLy8gT3JpZ2luYWw6CiAgICAvLyBvciBleGlzdHMgKCAoIFtDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zOiAiSG9zcGljZSBEaWFnbm9zaXMiXQogICAgLy8gICAgIHVuaW9uIFtDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXM6ICJIb3NwaWNlIERpYWdub3NpcyJdICkgSG9zcGljZUNhcmVEaWFnbm9zaXMKICAgIG9yIGV4aXN0cyAoIFtDb25kaXRpb246ICJIb3NwaWNlIERpYWdub3NpcyJdICBIb3NwaWNlQ2FyZURpYWdub3NpcwogICAgICAgIHdoZXJlIEhvc3BpY2VDYXJlRGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgZGF5IG9mIEludGVydmFsW3N0YXJ0IG9mICJEZW5vbWluYXRvciBJZGVudGlmaWNhdGlvbiBQZXJpb2QiLCBlbmQgb2YgIk1lYXN1cmUgQXNzZXNzbWVudCBQZXJpb2QiXQogICAgICAgICAgYW5kIEhvc3BpY2VDYXJlRGlhZ25vc2lzLmlzVmVyaWZpZWQgKCApCiAgICApCgpkZWZpbmUgIkluZGV4IERlcHJlc3Npb24gQXNzZXNzbWVudCI6CiAgRmlyc3QoIkRlcHJlc3Npb24gQXNzZXNzbWVudHMgR3JlYXRlciBUaGFuIDkiIERlcHJlc3Npb25Bc3Nlc3NtZW50CiAgICAgIHdpdGggIkRlcHJlc3Npb24gRW5jb3VudGVyIiBEZXByZXNzaW9uRW5jb3VudGVyCiAgICAgICAgc3VjaCB0aGF0IERlcHJlc3Npb25Bc3Nlc3NtZW50LmVmZmVjdGl2ZS50b0ludGVydmFsKCkgZHVyaW5nIGRheSBvZiBJbnRlcnZhbFtzdGFydCBvZiBEZXByZXNzaW9uRW5jb3VudGVyLnBlcmlvZCAtIDcgZGF5cywgCiAgICAgICAgZW5kIG9mIERlcHJlc3Npb25FbmNvdW50ZXIucGVyaW9kXQogICAgICBzb3J0IGJ5IHN0YXJ0IG9mIGVmZmVjdGl2ZS50b0ludGVydmFsKCkKICApCgpkZWZpbmUgIkhhcyBQYWxsaWF0aXZlIENhcmUgcHJpb3IgdG8gb3IgZHVyaW5nIHRoZSBNZWFzdXJlIEFzc2Vzc21lbnQgUGVyaW9kIjoKICBleGlzdHMgKCBbT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50OiAiRnVuY3Rpb25hbCBBc3Nlc3NtZW50IG9mIENocm9uaWMgSWxsbmVzcyBUaGVyYXB5IC0gUGFsbGlhdGl2ZSBDYXJlIFF1ZXN0aW9ubmFpcmUgKEZBQ0lULVBhbCkiXSBQYWxsaWF0aXZlQXNzZXNzbWVudAogICAgICB3aGVyZSBQYWxsaWF0aXZlQXNzZXNzbWVudC5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICkgb3ZlcmxhcHMgZGF5IG9mIEludGVydmFsW3N0YXJ0IG9mICJEZW5vbWluYXRvciBJZGVudGlmaWNhdGlvbiBQZXJpb2QiLCBlbmQgb2YgIk1lYXN1cmUgQXNzZXNzbWVudCBQZXJpb2QiXQogICAgICAgIGFuZCBQYWxsaWF0aXZlQXNzZXNzbWVudC5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICApCiAgICAgIC8vIFtFLTEzXSBiYXNlIEZISVIuQ29uZGl0aW9uIHJldHJpZXZlIChkZWZlY3QtdHJhY2tpbmcvZW5naW5lLWlzc3Vlcy5tZCBFLTEzKQogICAgICAvLyBPcmlnaW5hbDoKICAgICAgLy8gb3IgZXhpc3RzICggKCBbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuczogIlBhbGxpYXRpdmUgQ2FyZSBEaWFnbm9zaXMiXQogICAgICAvLyAgIHVuaW9uIFtDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXM6ICJQYWxsaWF0aXZlIENhcmUgRGlhZ25vc2lzIl0gKSBQYWxsaWF0aXZlRGlhZ25vc2lzCiAgICAgIG9yIGV4aXN0cyAoIFtDb25kaXRpb246ICJQYWxsaWF0aXZlIENhcmUgRGlhZ25vc2lzIl0gUGFsbGlhdGl2ZURpYWdub3NpcwogICAgICAgIHdoZXJlIFBhbGxpYXRpdmVEaWFnbm9zaXMucHJldmFsZW5jZUludGVydmFsICggKSBvdmVybGFwcyBkYXkgb2YgSW50ZXJ2YWxbc3RhcnQgb2YgIkRlbm9taW5hdG9yIElkZW50aWZpY2F0aW9uIFBlcmlvZCIsIGVuZCBvZiAiTWVhc3VyZSBBc3Nlc3NtZW50IFBlcmlvZCJdCiAgICAgICAgICBhbmQgUGFsbGlhdGl2ZURpYWdub3Npcy5pc1ZlcmlmaWVkICggKQogICAgKQogICAgb3IgZXhpc3RzICggW0VuY291bnRlcjogIlBhbGxpYXRpdmUgQ2FyZSBFbmNvdW50ZXIiXSBQYWxsaWF0aXZlRW5jb3VudGVyCiAgICAgICAgd2hlcmUgUGFsbGlhdGl2ZUVuY291bnRlci5wZXJpb2Qgb3ZlcmxhcHMgZGF5IG9mIEludGVydmFsW3N0YXJ0IG9mICJEZW5vbWluYXRvciBJZGVudGlmaWNhdGlvbiBQZXJpb2QiLCBlbmQgb2YgIk1lYXN1cmUgQXNzZXNzbWVudCBQZXJpb2QiXQogICAgICAgICAgYW5kIFBhbGxpYXRpdmVFbmNvdW50ZXIuc3RhdHVzID0gJ2ZpbmlzaGVkJwogICAgKQogICAgb3IgZXhpc3RzICggW1Byb2NlZHVyZTogIlBhbGxpYXRpdmUgQ2FyZSBJbnRlcnZlbnRpb24iXSBQYWxsaWF0aXZlSW50ZXJ2ZW50aW9uCiAgICAgICAgd2hlcmUgUGFsbGlhdGl2ZUludGVydmVudGlvbi5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgb3ZlcmxhcHMgZGF5IG9mIEludGVydmFsW3N0YXJ0IG9mICJEZW5vbWluYXRvciBJZGVudGlmaWNhdGlvbiBQZXJpb2QiLCBlbmQgb2YgIk1lYXN1cmUgQXNzZXNzbWVudCBQZXJpb2QiXQogICAgICAgICAgYW5kIG5vdCAoIFBhbGxpYXRpdmVJbnRlcnZlbnRpb24uc3RhdHVzIGluIHsgJ25vdC1kb25lJywgJ2VudGVyZWQtaW4tZXJyb3InLCAndW5rbm93bicgfSApCiAgICApCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIGlzVmVyaWZpZWQoY29uZGl0aW9uIENob2ljZTxDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXMsIENvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM+KToKICBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIGlzIG5vdCBudWxsIGltcGxpZXMgKCBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJjb25maXJtZWQiCiAgICAgIG9yIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuInVuY29uZmlybWVkIgogICAgICBvciBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJwcm92aXNpb25hbCIKICAgICAgb3IgY29uZGl0aW9uLnZlcmlmaWNhdGlvblN0YXR1cyB+IFN0YXR1cy4iZGlmZmVyZW50aWFsIgogICkKCmRlZmluZSAiU3RyYXRpZmljYXRpb24gMSI6CiAgIkluZGV4IERlcHJlc3Npb24gQXNzZXNzbWVudCIgSW5kZXhBc3Nlc3NtZW50CiAgICByZXR1cm4gQWdlSW5ZZWFyc0F0KGRhdGUgZnJvbSBzdGFydCBvZiBJbmRleEFzc2Vzc21lbnQuZWZmZWN0aXZlLnRvSW50ZXJ2YWwoKSkgaW4gSW50ZXJ2YWxbMTIsIDE3XQoKZGVmaW5lICJTdHJhdGlmaWNhdGlvbiAyIjoKICAiSW5kZXggRGVwcmVzc2lvbiBBc3Nlc3NtZW50IiBJbmRleEFzc2Vzc21lbnQKICAgIHJldHVybiBBZ2VJblllYXJzQXQoZGF0ZSBmcm9tIHN0YXJ0IG9mIEluZGV4QXNzZXNzbWVudC5lZmZlY3RpdmUudG9JbnRlcnZhbCgpKSA+PSAxOA==",
"url" : "https://madie.cms.gov/Library-CMS159FHIRDepRemissionat12Months.cql"
}
]
}