{
  "resourceType" : "Library",
  "id" : "CMS22FHIRPCSBPScreeningFollowUp",
  "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 CMS22FHIRPCSBPScreeningFollowUp 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.CumulativeMedicationDuration version '2.0.0-ballot' called CMD\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 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 &quot;ActCode&quot;: 'http://terminology.hl7.org/CodeSystem/v3-ActCode'\ncodesystem &quot;LOINC&quot;: 'http://loinc.org'\ncodesystem &quot;SNOMEDCT&quot;: 'http://snomed.info/sct'\n\nvalueset &quot;Diagnosis of Hypertension&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.263'\nvalueset &quot;Dietary Recommendations&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1515'\nvalueset &quot;Encounter to Screen for Blood Pressure&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1920'\nvalueset &quot;Finding of Elevated Blood Pressure or Hypertension&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1047.514'\nvalueset &quot;Follow Up Within 4 Weeks&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1578'\nvalueset &quot;Follow Up Within 6 Months&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1108.125'\nvalueset &quot;Laboratory Tests for Hypertension&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1482'\nvalueset &quot;Lifestyle Recommendation&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1581'\nvalueset &quot;Medical Reason&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1007'\nvalueset &quot;Patient Declined&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1582'\nvalueset &quot;Pharmacologic Therapy for Hypertension&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.1577'\nvalueset &quot;Recommendation to Increase Physical Activity&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1518'\nvalueset &quot;Referral or Counseling for Alcohol Consumption&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1583'\nvalueset &quot;Referral to Primary Care or Alternate Provider&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1580'\nvalueset &quot;Weight Reduction Recommended&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.600.1510'\n\ncode &quot;Blood pressure panel with all children optional&quot;: '85354-9' from &quot;LOINC&quot; display 'Blood pressure panel with all children optional'\ncode &quot;Diastolic blood pressure&quot;: '8462-4' from &quot;LOINC&quot; display 'Diastolic blood pressure'\ncode &quot;12 lead EKG panel&quot;: '34534-8' from &quot;LOINC&quot; display 'EKG 12 channel panel'\ncode &quot;EKG study&quot;: '11524-6' from &quot;LOINC&quot; display 'EKG study'\ncode &quot;Systolic blood pressure&quot;: '8480-6' from &quot;LOINC&quot; display 'Systolic blood pressure'\ncode &quot;virtual&quot;: 'VR' from &quot;ActCode&quot; display 'virtual'\n\nparameter &quot;Measurement Period&quot; Interval&lt;DateTime&gt;\n  default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)\n\ncontext Patient\n\ndefine &quot;Initial Population&quot;:\n  &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter\n    where AgeInYearsAt(date from start of &quot;Measurement Period&quot;) &gt;= 18\n\ndefine &quot;Denominator&quot;:\n  &quot;Initial Population&quot;\n\ndefine &quot;Denominator Exclusions&quot;:\n  &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter\n    with [ConditionProblemsHealthConcerns: &quot;Diagnosis of Hypertension&quot;] Hypertension\n      such that Hypertension.prevalenceInterval ( ) starts before or on day of QualifyingEncounter.period\n        and Hypertension.isVerified ( )\n\ndefine &quot;Numerator&quot;:\n  &quot;Encounter with Normal Blood Pressure Reading&quot;\n    union ( &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80 and Interventions&quot; )\n    union ( &quot;Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80 and Interventions&quot; )\n    union ( &quot;Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 and Interventions&quot; )\n    union ( &quot;Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 and Interventions&quot; )\n\ndefine &quot;Denominator Exceptions&quot;:\n  &quot;Encounter with Medical Reason for Not Obtaining or Patient Declined Blood Pressure Measurement&quot;\n    union &quot;Encounter with Order for Hypertension Follow Up Declined by Patient&quot;\n\ndefine &quot;Follow up with Rescreen Within 6 Months&quot;:\n  [ServiceRequest: &quot;Follow Up Within 6 Months&quot;] FollowUp\n    where FollowUp.intent ~ 'order'\n\ndefine &quot;Laboratory Test or ECG for Hypertension&quot;:\n  ( [ServiceRequest: &quot;12 lead EKG panel&quot;]\n    union [ServiceRequest: &quot;EKG study&quot;]\n    union [ServiceRequest: &quot;Laboratory Tests for Hypertension&quot;] ) EKGLab\n    where EKGLab.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n\ndefine &quot;NonPharmacological Interventions&quot;:\n  ( [ServiceRequest: &quot;Lifestyle Recommendation&quot;]\n    union [ServiceRequest: &quot;Weight Reduction Recommended&quot;]\n    union [ServiceRequest: &quot;Dietary Recommendations&quot;]\n    union [ServiceRequest: &quot;Recommendation to Increase Physical Activity&quot;]\n    union [ServiceRequest: &quot;Referral or Counseling for Alcohol Consumption&quot;] ) NonPharmaInterventions\n    where NonPharmaInterventions.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n\ndefine &quot;Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80 and Interventions&quot;:\n  &quot;Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80&quot; FirstHTNEncounter\n    with &quot;First Hypertensive Reading Interventions or Referral to Alternate Professional&quot; FirstHTNIntervention\n      such that FirstHTNIntervention.authoredOn during day of FirstHTNEncounter.period\n\ndefine &quot;Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 and Interventions&quot;:\n  ( &quot;Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89&quot; SecondHTNEncounterReading\n      with &quot;Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 and Interventions&quot; EncounterInterventions\n        such that EncounterInterventions.authoredOn during day of SecondHTNEncounterReading.period\n  )\n    union ( &quot;Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89&quot; SecondHTNEncounterReading\n        with &quot;Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading&quot; ReferralForHTN\n          such that ReferralForHTN.authoredOn during day of SecondHTNEncounterReading.period\n    )\n\ndefine &quot;Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 and Interventions&quot;:\n  ( &quot;Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90&quot; SecondHTNEncounterReading140Over90\n      with &quot;Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 Interventions&quot; SecondHTN140Over90Interventions\n        such that SecondHTN140Over90Interventions.authoredOn during day of SecondHTNEncounterReading140Over90.period\n  )\n    union &quot;Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90&quot; SecondHTNEncounterReading140Over90\n      with &quot;Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading&quot; ReferralToProfessional\n        such that ReferralToProfessional.authoredOn during day of SecondHTNEncounterReading140Over90.period\n\ndefine &quot;First Hypertensive Reading Interventions or Referral to Alternate Professional&quot;:\n  ( [ServiceRequest: &quot;Follow Up Within 4 Weeks&quot;] FourWeekRescreen\n      with &quot;NonPharmacological Interventions&quot; NonPharmInterventionsHTN\n        such that FourWeekRescreen.authoredOn during day of &quot;Measurement Period&quot;\n          and NonPharmInterventionsHTN.authoredOn during day of &quot;Measurement Period&quot;\n          and FourWeekRescreen.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n  )\n    union ( &quot;Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading&quot; )\n\ndefine &quot;Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading&quot;:\n  [ServiceRequest: &quot;Referral to Primary Care or Alternate Provider&quot;] Referral\n    where Referral.reasonCode in &quot;Finding of Elevated Blood Pressure or Hypertension&quot;\n      and Referral.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n\ndefine &quot;Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 Interventions&quot;:\n  ( [ServiceRequest: &quot;Follow Up Within 4 Weeks&quot;] WeeksRescreen\n      with &quot;Laboratory Test or ECG for Hypertension&quot; ECGLabTest\n        such that WeeksRescreen.authoredOn during day of &quot;Measurement Period&quot;\n          and ECGLabTest.authoredOn during day of &quot;Measurement Period&quot;\n          and WeeksRescreen.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n          and ECGLabTest.intent in { 'order', 'original-order', 'reflex-order', 'filler-order', 'instance-order' }\n      with &quot;NonPharmacological Interventions&quot; HTNInterventions\n        such that HTNInterventions.authoredOn during day of &quot;Measurement Period&quot;\n      with [&quot;MedicationRequest&quot;: &quot;Pharmacologic Therapy for Hypertension&quot;] Medications\n        such that Medications.authoredOn during day of &quot;Measurement Period&quot;\n          and Medications.status in { 'active', 'completed' }\n  )\n\ndefine &quot;Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 and Interventions&quot;:\n  &quot;Follow up with Rescreen Within 6 Months&quot; Rescreen2to6\n    with &quot;Laboratory Test or ECG for Hypertension&quot; LabECGIntervention\n      such that Rescreen2to6.authoredOn during day of &quot;Measurement Period&quot;\n        and LabECGIntervention.authoredOn during day of &quot;Measurement Period&quot;\n    with &quot;NonPharmacological Interventions&quot; NonPharmSecondIntervention\n      such that NonPharmSecondIntervention.authoredOn during day of &quot;Measurement Period&quot;\n\ndefine &quot;Qualifying Encounter during Measurement Period&quot;:\n  [Encounter: &quot;Encounter to Screen for Blood Pressure&quot;] ValidEncounter\n    where ValidEncounter.period ends during day of &quot;Measurement Period&quot;\n      and ValidEncounter.status ~ 'finished'\n      and ValidEncounter.class !~ &quot;virtual&quot;\n\ndefine &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80 and Interventions&quot;:\n  ( &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80&quot; ElevatedEncounter\n      with &quot;Follow up with Rescreen Within 6 Months&quot; Twoto6MonthRescreen\n        such that Twoto6MonthRescreen.authoredOn during day of ElevatedEncounter.period\n      with &quot;NonPharmacological Interventions&quot; NonPharmInterventions\n        such that NonPharmInterventions.authoredOn during day of ElevatedEncounter.period\n  )\n    union ( &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80&quot; ElevatedEncounter\n        with &quot;Referral to Alternate or Primary Healthcare Professional for Hypertensive Reading&quot; Referral\n          such that Referral.authoredOn during day of ElevatedEncounter.period\n    )\n\ndefine &quot;Encounter with Normal Blood Pressure Reading&quot;:\n  &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter\n    let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure\n        where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period\n          and BloodPressure.status in { 'final', 'amended', 'corrected' }\n        sort by start of effective.toInterval ( )\n    )\n    where ( singleton from ( EncounterLastBP.component C\n          where C.code ~ &quot;Systolic blood pressure&quot;\n      )\n    ).value in Interval[1 'mm[Hg]', 120 'mm[Hg]' )\n      and ( singleton from ( EncounterLastBP.component C\n            where C.code ~ &quot;Diastolic blood pressure&quot;\n        )\n      ).value in Interval[1 'mm[Hg]', 80 'mm[Hg]' )\n\ndefine &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80&quot;:\n  &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter\n    let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure\n        where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period\n          and BloodPressure.status in { 'final', 'amended', 'corrected' }\n        sort by start of effective.toInterval ( )\n    )\n    where ( ( singleton from ( EncounterLastBP.component C\n            where C.code ~ &quot;Systolic blood pressure&quot;\n        )\n      ).value in Interval[120 'mm[Hg]', 129 'mm[Hg]']\n        and ( singleton from ( EncounterLastBP.component C\n              where C.code ~ &quot;Diastolic blood pressure&quot;\n          )\n        ).value in Interval[1 'mm[Hg]', 80 'mm[Hg]' )\n    )\n\ndefine &quot;Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90&quot;:\n  ( ( &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter\n        let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure\n            where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period\n              and BloodPressure.status in { 'final', 'amended', 'corrected' }\n            sort by start of effective.toInterval ( )\n        )\n        where ( ( singleton from ( EncounterLastBP.component C\n                where C.code ~ &quot;Systolic blood pressure&quot;\n            )\n          ).value &gt; 0 'mm[Hg]'\n            and ( singleton from ( EncounterLastBP.component C\n                  where C.code ~ &quot;Diastolic blood pressure&quot;\n              )\n            ).value &gt; 0 'mm[Hg]'\n            and ( ( singleton from ( EncounterLastBP.component C\n                    where C.code ~ &quot;Systolic blood pressure&quot;\n                )\n              ).value &gt;= 140 'mm[Hg]'\n                or ( singleton from ( EncounterLastBP.component C\n                      where C.code ~ &quot;Diastolic blood pressure&quot;\n                  )\n                ).value &gt;= 90 'mm[Hg]'\n            )\n        )\n    )\n      intersect &quot;Encounter with Hypertensive Reading Within Year Prior&quot;\n  )\n\ndefine &quot;Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89&quot;:\n  ( ( &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter\n        let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure\n            where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period\n              and BloodPressure.status in { 'final', 'amended', 'corrected' }\n            sort by start of effective.toInterval ( )\n        )\n        where ( ( ( singleton from ( EncounterLastBP.component C\n                  where C.code ~ &quot;Systolic blood pressure&quot;\n              )\n            ).value in Interval[130 'mm[Hg]', 139 'mm[Hg]']\n              or ( singleton from ( EncounterLastBP.component C\n                    where C.code ~ &quot;Diastolic blood pressure&quot;\n                )\n              ).value in Interval[80 'mm[Hg]', 89 'mm[Hg]']\n          )\n            and not ( ( singleton from ( EncounterLastBP.component C\n                    where C.code ~ &quot;Systolic blood pressure&quot;\n                )\n              ).value &gt;= 140 'mm[Hg]'\n                or ( singleton from ( EncounterLastBP.component C\n                      where C.code ~ &quot;Diastolic blood pressure&quot;\n                  )\n                ).value &gt;= 90 'mm[Hg]'\n            )\n        )\n    )\n      intersect &quot;Encounter with Hypertensive Reading Within Year Prior&quot;\n  )\n\ndefine &quot;Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80&quot;:\n  ( &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter\n      let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure\n          where BloodPressure.effective.toInterval ( ) ends during day of QualifyingEncounter.period\n            and BloodPressure.status in { 'final', 'amended', 'corrected' }\n          sort by start of effective.toInterval ( )\n      )\n      where ( ( ( singleton from ( EncounterLastBP.component C\n                where C.code ~ &quot;Systolic blood pressure&quot;\n            )\n          ).value &gt; 0 'mm[Hg]'\n            and ( singleton from ( EncounterLastBP.component C\n                  where C.code ~ &quot;Diastolic blood pressure&quot;\n              )\n            ).value &gt; 0 'mm[Hg]'\n        )\n          and ( ( singleton from ( EncounterLastBP.component C\n                  where C.code ~ &quot;Systolic blood pressure&quot;\n              )\n            ).value &gt;= 130 'mm[Hg]'\n              or ( singleton from ( EncounterLastBP.component C\n                    where C.code ~ &quot;Diastolic blood pressure&quot;\n                )\n              ).value &gt;= 80 'mm[Hg]'\n          )\n      )\n  )\n    except &quot;Encounter with Hypertensive Reading Within Year Prior&quot;\n\ndefine &quot;Encounter with Hypertensive Reading Within Year Prior&quot;:\n  ( &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter\n      let EncounterLastBP: Last([USCore.BloodPressureProfile] BloodPressure\n          where BloodPressure.effective.toInterval ( ) ends 1 year or less before or on start of QualifyingEncounter.period\n            and BloodPressure.status in { 'final', 'amended', 'corrected' }\n          sort by start of effective.toInterval ( )\n      )\n      where ( ( singleton from ( EncounterLastBP.component C\n              where C.code ~ &quot;Systolic blood pressure&quot;\n          )\n        ).value &gt; 0 'mm[Hg]'\n          and ( singleton from ( EncounterLastBP.component C\n                where C.code ~ &quot;Diastolic blood pressure&quot;\n            )\n          ).value &gt; 0 'mm[Hg]'\n          and ( ( singleton from ( EncounterLastBP.component C\n                  where C.code ~ &quot;Systolic blood pressure&quot;\n              )\n            ).value &gt;= 130 'mm[Hg]'\n              or ( singleton from ( EncounterLastBP.component C\n                    where C.code ~ &quot;Diastolic blood pressure&quot;\n                )\n              ).value &gt;= 80 'mm[Hg]'\n          )\n      )\n  )\n\ndefine &quot;NonPharmacological Intervention Not Ordered&quot;:\n  ( [ServiceNotRequested: &quot;Lifestyle Recommendation&quot;]\n    union [ServiceNotRequested: &quot;Weight Reduction Recommended&quot;]\n    union [ServiceNotRequested: &quot;Dietary Recommendations&quot;]\n    union [ServiceNotRequested: &quot;Recommendation to Increase Physical Activity&quot;]\n    union [ServiceNotRequested: &quot;Referral or Counseling for Alcohol Consumption&quot;] ) NonPharmIntervention\n    where NonPharmIntervention.status in { 'active', 'completed', 'on-hold' }\n      and NonPharmIntervention.reasonCode in &quot;Patient Declined&quot;\n\ndefine &quot;Encounter with Medical Reason for Not Obtaining or Patient Declined Blood Pressure Measurement&quot;:\n  &quot;Qualifying Encounter during Measurement Period&quot; QualifyingEncounter\n    with ( [ObservationCancelled: code ~ &quot;Blood pressure panel with all children optional&quot;]\n      union [ObservationCancelled: code ~ &quot;Systolic blood pressure&quot;]\n      union [ObservationCancelled: code ~ &quot;Diastolic blood pressure&quot;] ) NoBPScreen\n      such that NoBPScreen.issued during day of QualifyingEncounter.period\n        and ( NoBPScreen.notDoneReason () in &quot;Patient Declined&quot;\n            or NoBPScreen.notDoneReason () in &quot;Medical Reason&quot;\n        )\n\ndefine &quot;Encounter with Order for Hypertension Follow Up Declined by Patient&quot;:\n  ( ( &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80&quot; ElevatedBPEncounter\n        with ( [ServiceNotRequested: &quot;Referral to Primary Care or Alternate Provider&quot;]\n          union [ServiceNotRequested: &quot;Follow Up Within 6 Months&quot;] ) ElevatedBPDeclinedInterventions\n          such that ElevatedBPDeclinedInterventions.authoredOn during day of ElevatedBPEncounter.period\n            and ElevatedBPDeclinedInterventions.status in { 'active', 'completed', 'on-hold' }\n            and ElevatedBPDeclinedInterventions.reasonCode in &quot;Patient Declined&quot;\n    )\n      union ( &quot;Encounter with Elevated Blood Pressure Reading SBP 120 to 129 AND DBP less than 80&quot; ElevatedBPEncounter\n          with &quot;NonPharmacological Intervention Not Ordered&quot; NotOrdered\n            such that NotOrdered.authoredOn during day of ElevatedBPEncounter.period\n      )\n      union ( &quot;Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80&quot; FirstHTNEncounter\n          with ( [ServiceNotRequested: &quot;Follow Up Within 4 Weeks&quot;]\n            union [ServiceNotRequested: &quot;Referral to Primary Care or Alternate Provider&quot;] ) FirstHTNDeclinedInterventions\n            such that FirstHTNDeclinedInterventions.authoredOn during day of FirstHTNEncounter.period\n              and FirstHTNDeclinedInterventions.status in { 'active', 'completed', 'on-hold' }\n              and FirstHTNDeclinedInterventions.reasonCode in &quot;Patient Declined&quot;\n      )\n      union ( &quot;Encounter with First Hypertensive Reading SBP Greater than or Equal to 130 OR DBP Greater than or Equal to 80&quot; FirstHTNEncounter\n          with &quot;NonPharmacological Intervention Not Ordered&quot; NoNonPharm\n            such that NoNonPharm.authoredOn during day of FirstHTNEncounter.period\n      )\n      union ( &quot;Encounter with Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89&quot; SecondHTNEncounter\n          with &quot;Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 Interventions Declined&quot; SecondHTNDeclinedInterventions\n            such that SecondHTNDeclinedInterventions.authoredOn during day of SecondHTNEncounter.period\n      )\n      union ( &quot;Encounter with Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90&quot; SecondHTN140Over90Encounter\n          with &quot;Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 Interventions Declined&quot; SecondHTN140Over90DeclinedInterventions\n            such that SecondHTN140Over90DeclinedInterventions.authoredOn during day of SecondHTN140Over90Encounter.period\n      )\n  )\n\ndefine &quot;Second Hypertensive Reading SBP 130 to 139 OR DBP 80 to 89 Interventions Declined&quot;:\n  ( ( [ServiceNotRequested: &quot;Referral to Primary Care or Alternate Provider&quot;]\n      union [ServiceNotRequested: &quot;Follow Up Within 6 Months&quot;] ) SecondHTNDeclinedReferralAndFollowUp\n      where SecondHTNDeclinedReferralAndFollowUp.status in { 'active', 'completed', 'on-hold' }\n        and SecondHTNDeclinedReferralAndFollowUp.reasonCode in &quot;Patient Declined&quot;\n  )\n    union &quot;Laboratory Test or ECG for Hypertension Not Ordered&quot;\n    union &quot;NonPharmacological Intervention Not Ordered&quot;\n\ndefine &quot;Second Hypertensive Reading SBP Greater than or Equal to 140 OR DBP Greater than or Equal to 90 Interventions Declined&quot;:\n  ( ( ( [ServiceNotRequested: &quot;Referral to Primary Care or Alternate Provider&quot;]\n        union [ServiceNotRequested: &quot;Follow Up Within 4 Weeks&quot;] ) SecondHTN140Over90ReferralFollowUpNotDone\n        where SecondHTN140Over90ReferralFollowUpNotDone.status in { 'active', 'completed', 'on-hold' }\n          and SecondHTN140Over90ReferralFollowUpNotDone.reasonCode in &quot;Patient Declined&quot;\n    )\n      union ( [MedicationNotRequested: &quot;Pharmacologic Therapy for Hypertension&quot;] MedicationRequestNotOrdered\n          where MedicationRequestNotOrdered.status in { 'active', 'completed' }\n      )\n      union &quot;Laboratory Test or ECG for Hypertension Not Ordered&quot;\n      union &quot;NonPharmacological Intervention Not Ordered&quot;\n  )\n\ndefine &quot;Laboratory Test or ECG for Hypertension Not Ordered&quot;:\n  ( [ServiceNotRequested: code = &quot;12 lead EKG panel&quot;]\n    union [ServiceNotRequested: code = &quot;EKG study&quot;]\n    union [ServiceNotRequested: &quot;Laboratory Tests for Hypertension&quot;] ) LabECGNotDone\n    where LabECGNotDone.status in { 'active', 'completed', 'on-hold' }\n      and LabECGNotDone.reasonCode in &quot;Patient Declined&quot;\n\ndefine &quot;SDE Ethnicity&quot;:\n  SDE.&quot;SDE Ethnicity&quot;\n\ndefine &quot;SDE Payer&quot;:\n  SDE.&quot;SDE Payer&quot;\n\ndefine &quot;SDE Race&quot;:\n  SDE.&quot;SDE Race&quot;\n\ndefine &quot;SDE Sex&quot;:\n  SDE.&quot;SDE Sex&quot;\n\n/*\n@description: Returns true if the given condition either has no verification status or has a verification status of confirmed, unconfirmed, provisional, or differential\n*/\n\n\ndefine fluent function isVerified(condition Choice&lt;ConditionProblemsHealthConcerns, ConditionEncounterDiagnosis&gt;):\n  condition.verificationStatus is not null implies ( condition.verificationStatus ~ Status.&quot;confirmed&quot;\n      or condition.verificationStatus ~ Status.&quot;unconfirmed&quot;\n      or condition.verificationStatus ~ Status.&quot;provisional&quot;\n      or condition.verificationStatus ~ Status.&quot;differential&quot;\n  )</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/CMS22FHIRPCSBPScreeningFollowUp",
  "version" : "1.1.000",
  "name" : "CMS22FHIRPCSBPScreeningFollowUp",
  "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" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVMyMkZISVJQQ1NCUFNjcmVlbmluZ0ZvbGxvd1VwIHZlcnNpb24gJzEuMS4wMDAnCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5DdW11bGF0aXZlTWVkaWNhdGlvbkR1cmF0aW9uIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIENNRAppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHMgdmVyc2lvbiAnNi4xLjAwMCcgY2FsbGVkIFNERQppbmNsdWRlIFN0YXR1cyB2ZXJzaW9uICcyLjEuMDAwJyBjYWxsZWQgU3RhdHVzCgpjb2Rlc3lzdGVtICJBY3RDb2RlIjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjMtQWN0Q29kZScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiU05PTUVEQ1QiOiAnaHR0cDovL3Nub21lZC5pbmZvL3NjdCcKCnZhbHVlc2V0ICJEaWFnbm9zaXMgb2YgSHlwZXJ0ZW5zaW9uIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjYwMC4yNjMnCnZhbHVlc2V0ICJEaWV0YXJ5IFJlY29tbWVuZGF0aW9ucyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42MDAuMTUxNScKdmFsdWVzZXQgIkVuY291bnRlciB0byBTY3JlZW4gZm9yIEJsb29kIFByZXNzdXJlIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjYwMC4xOTIwJwp2YWx1ZXNldCAiRmluZGluZyBvZiBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBvciBIeXBlcnRlbnNpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ3LjUxNCcKdmFsdWVzZXQgIkZvbGxvdyBVcCBXaXRoaW4gNCBXZWVrcyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xNTc4Jwp2YWx1ZXNldCAiRm9sbG93IFVwIFdpdGhpbiA2IE1vbnRocyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExMDguMTI1Jwp2YWx1ZXNldCAiTGFib3JhdG9yeSBUZXN0cyBmb3IgSHlwZXJ0ZW5zaW9uIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjYwMC4xNDgyJwp2YWx1ZXNldCAiTGlmZXN0eWxlIFJlY29tbWVuZGF0aW9uIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjUyNi4zLjE1ODEnCnZhbHVlc2V0ICJNZWRpY2FsIFJlYXNvbiI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xMDA3Jwp2YWx1ZXNldCAiUGF0aWVudCBEZWNsaW5lZCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xNTgyJwp2YWx1ZXNldCAiUGhhcm1hY29sb2dpYyBUaGVyYXB5IGZvciBIeXBlcnRlbnNpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjE1NzcnCnZhbHVlc2V0ICJSZWNvbW1lbmRhdGlvbiB0byBJbmNyZWFzZSBQaHlzaWNhbCBBY3Rpdml0eSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42MDAuMTUxOCcKdmFsdWVzZXQgIlJlZmVycmFsIG9yIENvdW5zZWxpbmcgZm9yIEFsY29ob2wgQ29uc3VtcHRpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTU4MycKdmFsdWVzZXQgIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMTU4MCcKdmFsdWVzZXQgIldlaWdodCBSZWR1Y3Rpb24gUmVjb21tZW5kZWQiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNjAwLjE1MTAnCgpjb2RlICJCbG9vZCBwcmVzc3VyZSBwYW5lbCB3aXRoIGFsbCBjaGlsZHJlbiBvcHRpb25hbCI6ICc4NTM1NC05JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnQmxvb2QgcHJlc3N1cmUgcGFuZWwgd2l0aCBhbGwgY2hpbGRyZW4gb3B0aW9uYWwnCmNvZGUgIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSI6ICc4NDYyLTQnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdEaWFzdG9saWMgYmxvb2QgcHJlc3N1cmUnCmNvZGUgIjEyIGxlYWQgRUtHIHBhbmVsIjogJzM0NTM0LTgnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdFS0cgMTIgY2hhbm5lbCBwYW5lbCcKY29kZSAiRUtHIHN0dWR5IjogJzExNTI0LTYnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdFS0cgc3R1ZHknCmNvZGUgIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIjogJzg0ODAtNicgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1N5c3RvbGljIGJsb29kIHByZXNzdXJlJwpjb2RlICJ2aXJ0dWFsIjogJ1ZSJyBmcm9tICJBY3RDb2RlIiBkaXNwbGF5ICd2aXJ0dWFsJwoKcGFyYW1ldGVyICJNZWFzdXJlbWVudCBQZXJpb2QiIEludGVydmFsPERhdGVUaW1lPgogIGRlZmF1bHQgSW50ZXJ2YWxbQDIwMjYtMDEtMDFUMDA6MDA6MDAuMDAwWiwgQDIwMjctMDEtMDFUMDA6MDA6MDAuMDAwWikKCmNvbnRleHQgUGF0aWVudAoKZGVmaW5lICJJbml0aWFsIFBvcHVsYXRpb24iOgogICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBRdWFsaWZ5aW5nRW5jb3VudGVyCiAgICB3aGVyZSBBZ2VJblllYXJzQXQoZGF0ZSBmcm9tIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA+PSAxOAoKZGVmaW5lICJEZW5vbWluYXRvciI6CiAgIkluaXRpYWwgUG9wdWxhdGlvbiIKCmRlZmluZSAiRGVub21pbmF0b3IgRXhjbHVzaW9ucyI6CiAgIlF1YWxpZnlpbmcgRW5jb3VudGVyIGR1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIFF1YWxpZnlpbmdFbmNvdW50ZXIKICAgIHdpdGggW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJEaWFnbm9zaXMgb2YgSHlwZXJ0ZW5zaW9uIl0gSHlwZXJ0ZW5zaW9uCiAgICAgIHN1Y2ggdGhhdCBIeXBlcnRlbnNpb24ucHJldmFsZW5jZUludGVydmFsICggKSBzdGFydHMgYmVmb3JlIG9yIG9uIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCBIeXBlcnRlbnNpb24uaXNWZXJpZmllZCAoICkKCmRlZmluZSAiTnVtZXJhdG9yIjoKICAiRW5jb3VudGVyIHdpdGggTm9ybWFsIEJsb29kIFByZXNzdXJlIFJlYWRpbmciCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBSZWFkaW5nIFNCUCAxMjAgdG8gMTI5IEFORCBEQlAgbGVzcyB0aGFuIDgwIGFuZCBJbnRlcnZlbnRpb25zIiApCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBGaXJzdCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDEzMCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDgwIGFuZCBJbnRlcnZlbnRpb25zIiApCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIDEzMCB0byAxMzkgT1IgREJQIDgwIHRvIDg5IGFuZCBJbnRlcnZlbnRpb25zIiApCiAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxNDAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA5MCBhbmQgSW50ZXJ2ZW50aW9ucyIgKQoKZGVmaW5lICJEZW5vbWluYXRvciBFeGNlcHRpb25zIjoKICAiRW5jb3VudGVyIHdpdGggTWVkaWNhbCBSZWFzb24gZm9yIE5vdCBPYnRhaW5pbmcgb3IgUGF0aWVudCBEZWNsaW5lZCBCbG9vZCBQcmVzc3VyZSBNZWFzdXJlbWVudCIKICAgIHVuaW9uICJFbmNvdW50ZXIgd2l0aCBPcmRlciBmb3IgSHlwZXJ0ZW5zaW9uIEZvbGxvdyBVcCBEZWNsaW5lZCBieSBQYXRpZW50IgoKZGVmaW5lICJGb2xsb3cgdXAgd2l0aCBSZXNjcmVlbiBXaXRoaW4gNiBNb250aHMiOgogIFtTZXJ2aWNlUmVxdWVzdDogIkZvbGxvdyBVcCBXaXRoaW4gNiBNb250aHMiXSBGb2xsb3dVcAogICAgd2hlcmUgRm9sbG93VXAuaW50ZW50IH4gJ29yZGVyJwoKZGVmaW5lICJMYWJvcmF0b3J5IFRlc3Qgb3IgRUNHIGZvciBIeXBlcnRlbnNpb24iOgogICggW1NlcnZpY2VSZXF1ZXN0OiAiMTIgbGVhZCBFS0cgcGFuZWwiXQogICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiRUtHIHN0dWR5Il0KICAgIHVuaW9uIFtTZXJ2aWNlUmVxdWVzdDogIkxhYm9yYXRvcnkgVGVzdHMgZm9yIEh5cGVydGVuc2lvbiJdICkgRUtHTGFiCiAgICB3aGVyZSBFS0dMYWIuaW50ZW50IGluIHsgJ29yZGVyJywgJ29yaWdpbmFsLW9yZGVyJywgJ3JlZmxleC1vcmRlcicsICdmaWxsZXItb3JkZXInLCAnaW5zdGFuY2Utb3JkZXInIH0KCmRlZmluZSAiTm9uUGhhcm1hY29sb2dpY2FsIEludGVydmVudGlvbnMiOgogICggW1NlcnZpY2VSZXF1ZXN0OiAiTGlmZXN0eWxlIFJlY29tbWVuZGF0aW9uIl0KICAgIHVuaW9uIFtTZXJ2aWNlUmVxdWVzdDogIldlaWdodCBSZWR1Y3Rpb24gUmVjb21tZW5kZWQiXQogICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiRGlldGFyeSBSZWNvbW1lbmRhdGlvbnMiXQogICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiUmVjb21tZW5kYXRpb24gdG8gSW5jcmVhc2UgUGh5c2ljYWwgQWN0aXZpdHkiXQogICAgdW5pb24gW1NlcnZpY2VSZXF1ZXN0OiAiUmVmZXJyYWwgb3IgQ291bnNlbGluZyBmb3IgQWxjb2hvbCBDb25zdW1wdGlvbiJdICkgTm9uUGhhcm1hSW50ZXJ2ZW50aW9ucwogICAgd2hlcmUgTm9uUGhhcm1hSW50ZXJ2ZW50aW9ucy5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQoKZGVmaW5lICJFbmNvdW50ZXIgd2l0aCBGaXJzdCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDEzMCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDgwIGFuZCBJbnRlcnZlbnRpb25zIjoKICAiRW5jb3VudGVyIHdpdGggRmlyc3QgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxMzAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA4MCIgRmlyc3RIVE5FbmNvdW50ZXIKICAgIHdpdGggIkZpcnN0IEh5cGVydGVuc2l2ZSBSZWFkaW5nIEludGVydmVudGlvbnMgb3IgUmVmZXJyYWwgdG8gQWx0ZXJuYXRlIFByb2Zlc3Npb25hbCIgRmlyc3RIVE5JbnRlcnZlbnRpb24KICAgICAgc3VjaCB0aGF0IEZpcnN0SFROSW50ZXJ2ZW50aW9uLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBGaXJzdEhUTkVuY291bnRlci5wZXJpb2QKCmRlZmluZSAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSBhbmQgSW50ZXJ2ZW50aW9ucyI6CiAgKCAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSIgU2Vjb25kSFRORW5jb3VudGVyUmVhZGluZwogICAgICB3aXRoICJTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIDEzMCB0byAxMzkgT1IgREJQIDgwIHRvIDg5IGFuZCBJbnRlcnZlbnRpb25zIiBFbmNvdW50ZXJJbnRlcnZlbnRpb25zCiAgICAgICAgc3VjaCB0aGF0IEVuY291bnRlckludGVydmVudGlvbnMuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIFNlY29uZEhUTkVuY291bnRlclJlYWRpbmcucGVyaW9kCiAgKQogICAgdW5pb24gKCAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSIgU2Vjb25kSFRORW5jb3VudGVyUmVhZGluZwogICAgICAgIHdpdGggIlJlZmVycmFsIHRvIEFsdGVybmF0ZSBvciBQcmltYXJ5IEhlYWx0aGNhcmUgUHJvZmVzc2lvbmFsIGZvciBIeXBlcnRlbnNpdmUgUmVhZGluZyIgUmVmZXJyYWxGb3JIVE4KICAgICAgICAgIHN1Y2ggdGhhdCBSZWZlcnJhbEZvckhUTi5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgU2Vjb25kSFRORW5jb3VudGVyUmVhZGluZy5wZXJpb2QKICAgICkKCmRlZmluZSAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTQwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gOTAgYW5kIEludGVydmVudGlvbnMiOgogICggIkVuY291bnRlciB3aXRoIFNlY29uZCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDE0MCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDkwIiBTZWNvbmRIVE5FbmNvdW50ZXJSZWFkaW5nMTQwT3ZlcjkwCiAgICAgIHdpdGggIlNlY29uZCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDE0MCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDkwIEludGVydmVudGlvbnMiIFNlY29uZEhUTjE0ME92ZXI5MEludGVydmVudGlvbnMKICAgICAgICBzdWNoIHRoYXQgU2Vjb25kSFROMTQwT3ZlcjkwSW50ZXJ2ZW50aW9ucy5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgU2Vjb25kSFRORW5jb3VudGVyUmVhZGluZzE0ME92ZXI5MC5wZXJpb2QKICApCiAgICB1bmlvbiAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTQwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gOTAiIFNlY29uZEhUTkVuY291bnRlclJlYWRpbmcxNDBPdmVyOTAKICAgICAgd2l0aCAiUmVmZXJyYWwgdG8gQWx0ZXJuYXRlIG9yIFByaW1hcnkgSGVhbHRoY2FyZSBQcm9mZXNzaW9uYWwgZm9yIEh5cGVydGVuc2l2ZSBSZWFkaW5nIiBSZWZlcnJhbFRvUHJvZmVzc2lvbmFsCiAgICAgICAgc3VjaCB0aGF0IFJlZmVycmFsVG9Qcm9mZXNzaW9uYWwuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIFNlY29uZEhUTkVuY291bnRlclJlYWRpbmcxNDBPdmVyOTAucGVyaW9kCgpkZWZpbmUgIkZpcnN0IEh5cGVydGVuc2l2ZSBSZWFkaW5nIEludGVydmVudGlvbnMgb3IgUmVmZXJyYWwgdG8gQWx0ZXJuYXRlIFByb2Zlc3Npb25hbCI6CiAgKCBbU2VydmljZVJlcXVlc3Q6ICJGb2xsb3cgVXAgV2l0aGluIDQgV2Vla3MiXSBGb3VyV2Vla1Jlc2NyZWVuCiAgICAgIHdpdGggIk5vblBoYXJtYWNvbG9naWNhbCBJbnRlcnZlbnRpb25zIiBOb25QaGFybUludGVydmVudGlvbnNIVE4KICAgICAgICBzdWNoIHRoYXQgRm91cldlZWtSZXNjcmVlbi5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICAgIGFuZCBOb25QaGFybUludGVydmVudGlvbnNIVE4uYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAgICAgICBhbmQgRm91cldlZWtSZXNjcmVlbi5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQogICkKICAgIHVuaW9uICggIlJlZmVycmFsIHRvIEFsdGVybmF0ZSBvciBQcmltYXJ5IEhlYWx0aGNhcmUgUHJvZmVzc2lvbmFsIGZvciBIeXBlcnRlbnNpdmUgUmVhZGluZyIgKQoKZGVmaW5lICJSZWZlcnJhbCB0byBBbHRlcm5hdGUgb3IgUHJpbWFyeSBIZWFsdGhjYXJlIFByb2Zlc3Npb25hbCBmb3IgSHlwZXJ0ZW5zaXZlIFJlYWRpbmciOgogIFtTZXJ2aWNlUmVxdWVzdDogIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiXSBSZWZlcnJhbAogICAgd2hlcmUgUmVmZXJyYWwucmVhc29uQ29kZSBpbiAiRmluZGluZyBvZiBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBvciBIeXBlcnRlbnNpb24iCiAgICAgIGFuZCBSZWZlcnJhbC5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQoKZGVmaW5lICJTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxNDAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA5MCBJbnRlcnZlbnRpb25zIjoKICAoIFtTZXJ2aWNlUmVxdWVzdDogIkZvbGxvdyBVcCBXaXRoaW4gNCBXZWVrcyJdIFdlZWtzUmVzY3JlZW4KICAgICAgd2l0aCAiTGFib3JhdG9yeSBUZXN0IG9yIEVDRyBmb3IgSHlwZXJ0ZW5zaW9uIiBFQ0dMYWJUZXN0CiAgICAgICAgc3VjaCB0aGF0IFdlZWtzUmVzY3JlZW4uYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAgICAgICBhbmQgRUNHTGFiVGVzdC5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICAgIGFuZCBXZWVrc1Jlc2NyZWVuLmludGVudCBpbiB7ICdvcmRlcicsICdvcmlnaW5hbC1vcmRlcicsICdyZWZsZXgtb3JkZXInLCAnZmlsbGVyLW9yZGVyJywgJ2luc3RhbmNlLW9yZGVyJyB9CiAgICAgICAgICBhbmQgRUNHTGFiVGVzdC5pbnRlbnQgaW4geyAnb3JkZXInLCAnb3JpZ2luYWwtb3JkZXInLCAncmVmbGV4LW9yZGVyJywgJ2ZpbGxlci1vcmRlcicsICdpbnN0YW5jZS1vcmRlcicgfQogICAgICB3aXRoICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9ucyIgSFROSW50ZXJ2ZW50aW9ucwogICAgICAgIHN1Y2ggdGhhdCBIVE5JbnRlcnZlbnRpb25zLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICB3aXRoIFsiTWVkaWNhdGlvblJlcXVlc3QiOiAiUGhhcm1hY29sb2dpYyBUaGVyYXB5IGZvciBIeXBlcnRlbnNpb24iXSBNZWRpY2F0aW9ucwogICAgICAgIHN1Y2ggdGhhdCBNZWRpY2F0aW9ucy5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICAgIGFuZCBNZWRpY2F0aW9ucy5zdGF0dXMgaW4geyAnYWN0aXZlJywgJ2NvbXBsZXRlZCcgfQogICkKCmRlZmluZSAiU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSBhbmQgSW50ZXJ2ZW50aW9ucyI6CiAgIkZvbGxvdyB1cCB3aXRoIFJlc2NyZWVuIFdpdGhpbiA2IE1vbnRocyIgUmVzY3JlZW4ydG82CiAgICB3aXRoICJMYWJvcmF0b3J5IFRlc3Qgb3IgRUNHIGZvciBIeXBlcnRlbnNpb24iIExhYkVDR0ludGVydmVudGlvbgogICAgICBzdWNoIHRoYXQgUmVzY3JlZW4ydG82LmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICAgIGFuZCBMYWJFQ0dJbnRlcnZlbnRpb24uYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICB3aXRoICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9ucyIgTm9uUGhhcm1TZWNvbmRJbnRlcnZlbnRpb24KICAgICAgc3VjaCB0aGF0IE5vblBoYXJtU2Vjb25kSW50ZXJ2ZW50aW9uLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgoKZGVmaW5lICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICBbRW5jb3VudGVyOiAiRW5jb3VudGVyIHRvIFNjcmVlbiBmb3IgQmxvb2QgUHJlc3N1cmUiXSBWYWxpZEVuY291bnRlcgogICAgd2hlcmUgVmFsaWRFbmNvdW50ZXIucGVyaW9kIGVuZHMgZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICBhbmQgVmFsaWRFbmNvdW50ZXIuc3RhdHVzIH4gJ2ZpbmlzaGVkJwogICAgICBhbmQgVmFsaWRFbmNvdW50ZXIuY2xhc3MgIX4gInZpcnR1YWwiCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIEVsZXZhdGVkIEJsb29kIFByZXNzdXJlIFJlYWRpbmcgU0JQIDEyMCB0byAxMjkgQU5EIERCUCBsZXNzIHRoYW4gODAgYW5kIEludGVydmVudGlvbnMiOgogICggIkVuY291bnRlciB3aXRoIEVsZXZhdGVkIEJsb29kIFByZXNzdXJlIFJlYWRpbmcgU0JQIDEyMCB0byAxMjkgQU5EIERCUCBsZXNzIHRoYW4gODAiIEVsZXZhdGVkRW5jb3VudGVyCiAgICAgIHdpdGggIkZvbGxvdyB1cCB3aXRoIFJlc2NyZWVuIFdpdGhpbiA2IE1vbnRocyIgVHdvdG82TW9udGhSZXNjcmVlbgogICAgICAgIHN1Y2ggdGhhdCBUd290bzZNb250aFJlc2NyZWVuLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBFbGV2YXRlZEVuY291bnRlci5wZXJpb2QKICAgICAgd2l0aCAiTm9uUGhhcm1hY29sb2dpY2FsIEludGVydmVudGlvbnMiIE5vblBoYXJtSW50ZXJ2ZW50aW9ucwogICAgICAgIHN1Y2ggdGhhdCBOb25QaGFybUludGVydmVudGlvbnMuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIEVsZXZhdGVkRW5jb3VudGVyLnBlcmlvZAogICkKICAgIHVuaW9uICggIkVuY291bnRlciB3aXRoIEVsZXZhdGVkIEJsb29kIFByZXNzdXJlIFJlYWRpbmcgU0JQIDEyMCB0byAxMjkgQU5EIERCUCBsZXNzIHRoYW4gODAiIEVsZXZhdGVkRW5jb3VudGVyCiAgICAgICAgd2l0aCAiUmVmZXJyYWwgdG8gQWx0ZXJuYXRlIG9yIFByaW1hcnkgSGVhbHRoY2FyZSBQcm9mZXNzaW9uYWwgZm9yIEh5cGVydGVuc2l2ZSBSZWFkaW5nIiBSZWZlcnJhbAogICAgICAgICAgc3VjaCB0aGF0IFJlZmVycmFsLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBFbGV2YXRlZEVuY291bnRlci5wZXJpb2QKICAgICkKCmRlZmluZSAiRW5jb3VudGVyIHdpdGggTm9ybWFsIEJsb29kIFByZXNzdXJlIFJlYWRpbmciOgogICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBRdWFsaWZ5aW5nRW5jb3VudGVyCiAgICBsZXQgRW5jb3VudGVyTGFzdEJQOiBMYXN0KFtVU0NvcmUuQmxvb2RQcmVzc3VyZVByb2ZpbGVdIEJsb29kUHJlc3N1cmUKICAgICAgICB3aGVyZSBCbG9vZFByZXNzdXJlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBlbmRzIGR1cmluZyBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlci5wZXJpb2QKICAgICAgICAgIGFuZCBCbG9vZFByZXNzdXJlLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgIHNvcnQgYnkgc3RhcnQgb2YgZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApCiAgICApCiAgICB3aGVyZSAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICkKICAgICkudmFsdWUgaW4gSW50ZXJ2YWxbMSAnbW1bSGddJywgMTIwICdtbVtIZ10nICkKICAgICAgYW5kICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICApCiAgICAgICkudmFsdWUgaW4gSW50ZXJ2YWxbMSAnbW1bSGddJywgODAgJ21tW0hnXScgKQoKZGVmaW5lICJFbmNvdW50ZXIgd2l0aCBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBSZWFkaW5nIFNCUCAxMjAgdG8gMTI5IEFORCBEQlAgbGVzcyB0aGFuIDgwIjoKICAiUXVhbGlmeWluZyBFbmNvdW50ZXIgZHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCIgUXVhbGlmeWluZ0VuY291bnRlcgogICAgbGV0IEVuY291bnRlckxhc3RCUDogTGFzdChbVVNDb3JlLkJsb29kUHJlc3N1cmVQcm9maWxlXSBCbG9vZFByZXNzdXJlCiAgICAgICAgd2hlcmUgQmxvb2RQcmVzc3VyZS5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICkgZW5kcyBkdXJpbmcgZGF5IG9mIFF1YWxpZnlpbmdFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgICBhbmQgQmxvb2RQcmVzc3VyZS5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICBzb3J0IGJ5IHN0YXJ0IG9mIGVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICAgKQogICAgd2hlcmUgKCAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJTeXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICApCiAgICAgICkudmFsdWUgaW4gSW50ZXJ2YWxbMTIwICdtbVtIZ10nLCAxMjkgJ21tW0hnXSddCiAgICAgICAgYW5kICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiRGlhc3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgKQogICAgICAgICkudmFsdWUgaW4gSW50ZXJ2YWxbMSAnbW1bSGddJywgODAgJ21tW0hnXScgKQogICAgKQoKZGVmaW5lICJFbmNvdW50ZXIgd2l0aCBTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxNDAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA5MCI6CiAgKCAoICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBRdWFsaWZ5aW5nRW5jb3VudGVyCiAgICAgICAgbGV0IEVuY291bnRlckxhc3RCUDogTGFzdChbVVNDb3JlLkJsb29kUHJlc3N1cmVQcm9maWxlXSBCbG9vZFByZXNzdXJlCiAgICAgICAgICAgIHdoZXJlIEJsb29kUHJlc3N1cmUuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIGVuZHMgZHVyaW5nIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVyLnBlcmlvZAogICAgICAgICAgICAgIGFuZCBCbG9vZFByZXNzdXJlLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgICAgICBzb3J0IGJ5IHN0YXJ0IG9mIGVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICAgICAgICkKICAgICAgICB3aGVyZSAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJTeXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICAgICAgKQogICAgICAgICAgKS52YWx1ZSA+IDAgJ21tW0hnXScKICAgICAgICAgICAgYW5kICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICAgICAgICApCiAgICAgICAgICAgICkudmFsdWUgPiAwICdtbVtIZ10nCiAgICAgICAgICAgIGFuZCAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgKS52YWx1ZSA+PSAxNDAgJ21tW0hnXScKICAgICAgICAgICAgICAgIG9yICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJEaWFzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkudmFsdWUgPj0gOTAgJ21tW0hnXScKICAgICAgICAgICAgKQogICAgICAgICkKICAgICkKICAgICAgaW50ZXJzZWN0ICJFbmNvdW50ZXIgd2l0aCBIeXBlcnRlbnNpdmUgUmVhZGluZyBXaXRoaW4gWWVhciBQcmlvciIKICApCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIFNlY29uZCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgMTMwIHRvIDEzOSBPUiBEQlAgODAgdG8gODkiOgogICggKCAiUXVhbGlmeWluZyBFbmNvdW50ZXIgZHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCIgUXVhbGlmeWluZ0VuY291bnRlcgogICAgICAgIGxldCBFbmNvdW50ZXJMYXN0QlA6IExhc3QoW1VTQ29yZS5CbG9vZFByZXNzdXJlUHJvZmlsZV0gQmxvb2RQcmVzc3VyZQogICAgICAgICAgICB3aGVyZSBCbG9vZFByZXNzdXJlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBlbmRzIGR1cmluZyBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlci5wZXJpb2QKICAgICAgICAgICAgICBhbmQgQmxvb2RQcmVzc3VyZS5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICAgICAgc29ydCBieSBzdGFydCBvZiBlZmZlY3RpdmUudG9JbnRlcnZhbCAoICkKICAgICAgICApCiAgICAgICAgd2hlcmUgKCAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgICAgICkKICAgICAgICAgICAgKS52YWx1ZSBpbiBJbnRlcnZhbFsxMzAgJ21tW0hnXScsIDEzOSAnbW1bSGddJ10KICAgICAgICAgICAgICBvciAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApLnZhbHVlIGluIEludGVydmFsWzgwICdtbVtIZ10nLCA4OSAnbW1bSGddJ10KICAgICAgICAgICkKICAgICAgICAgICAgYW5kIG5vdCAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgKS52YWx1ZSA+PSAxNDAgJ21tW0hnXScKICAgICAgICAgICAgICAgIG9yICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJEaWFzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkudmFsdWUgPj0gOTAgJ21tW0hnXScKICAgICAgICAgICAgKQogICAgICAgICkKICAgICkKICAgICAgaW50ZXJzZWN0ICJFbmNvdW50ZXIgd2l0aCBIeXBlcnRlbnNpdmUgUmVhZGluZyBXaXRoaW4gWWVhciBQcmlvciIKICApCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIEZpcnN0IEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTMwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gODAiOgogICggIlF1YWxpZnlpbmcgRW5jb3VudGVyIGR1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIFF1YWxpZnlpbmdFbmNvdW50ZXIKICAgICAgbGV0IEVuY291bnRlckxhc3RCUDogTGFzdChbVVNDb3JlLkJsb29kUHJlc3N1cmVQcm9maWxlXSBCbG9vZFByZXNzdXJlCiAgICAgICAgICB3aGVyZSBCbG9vZFByZXNzdXJlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBlbmRzIGR1cmluZyBkYXkgb2YgUXVhbGlmeWluZ0VuY291bnRlci5wZXJpb2QKICAgICAgICAgICAgYW5kIEJsb29kUHJlc3N1cmUuc3RhdHVzIGluIHsgJ2ZpbmFsJywgJ2FtZW5kZWQnLCAnY29ycmVjdGVkJyB9CiAgICAgICAgICBzb3J0IGJ5IHN0YXJ0IG9mIGVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICAgICApCiAgICAgIHdoZXJlICggKCAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICkKICAgICAgICAgICkudmFsdWUgPiAwICdtbVtIZ10nCiAgICAgICAgICAgIGFuZCAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICAgIHdoZXJlIEMuY29kZSB+ICJEaWFzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgKQogICAgICAgICAgICApLnZhbHVlID4gMCAnbW1bSGddJwogICAgICAgICkKICAgICAgICAgIGFuZCAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgICAgICkKICAgICAgICAgICAgKS52YWx1ZSA+PSAxMzAgJ21tW0hnXScKICAgICAgICAgICAgICBvciAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICAgICAgd2hlcmUgQy5jb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSIKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApLnZhbHVlID49IDgwICdtbVtIZ10nCiAgICAgICAgICApCiAgICAgICkKICApCiAgICBleGNlcHQgIkVuY291bnRlciB3aXRoIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFdpdGhpbiBZZWFyIFByaW9yIgoKZGVmaW5lICJFbmNvdW50ZXIgd2l0aCBIeXBlcnRlbnNpdmUgUmVhZGluZyBXaXRoaW4gWWVhciBQcmlvciI6CiAgKCAiUXVhbGlmeWluZyBFbmNvdW50ZXIgZHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCIgUXVhbGlmeWluZ0VuY291bnRlcgogICAgICBsZXQgRW5jb3VudGVyTGFzdEJQOiBMYXN0KFtVU0NvcmUuQmxvb2RQcmVzc3VyZVByb2ZpbGVdIEJsb29kUHJlc3N1cmUKICAgICAgICAgIHdoZXJlIEJsb29kUHJlc3N1cmUuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIGVuZHMgMSB5ZWFyIG9yIGxlc3MgYmVmb3JlIG9yIG9uIHN0YXJ0IG9mIFF1YWxpZnlpbmdFbmNvdW50ZXIucGVyaW9kCiAgICAgICAgICAgIGFuZCBCbG9vZFByZXNzdXJlLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICAgICAgc29ydCBieSBzdGFydCBvZiBlZmZlY3RpdmUudG9JbnRlcnZhbCAoICkKICAgICAgKQogICAgICB3aGVyZSAoICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICApCiAgICAgICAgKS52YWx1ZSA+IDAgJ21tW0hnXScKICAgICAgICAgIGFuZCAoIHNpbmdsZXRvbiBmcm9tICggRW5jb3VudGVyTGFzdEJQLmNvbXBvbmVudCBDCiAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiRGlhc3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgICApCiAgICAgICAgICApLnZhbHVlID4gMCAnbW1bSGddJwogICAgICAgICAgYW5kICggKCBzaW5nbGV0b24gZnJvbSAoIEVuY291bnRlckxhc3RCUC5jb21wb25lbnQgQwogICAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiU3lzdG9saWMgYmxvb2QgcHJlc3N1cmUiCiAgICAgICAgICAgICAgKQogICAgICAgICAgICApLnZhbHVlID49IDEzMCAnbW1bSGddJwogICAgICAgICAgICAgIG9yICggc2luZ2xldG9uIGZyb20gKCBFbmNvdW50ZXJMYXN0QlAuY29tcG9uZW50IEMKICAgICAgICAgICAgICAgICAgICB3aGVyZSBDLmNvZGUgfiAiRGlhc3RvbGljIGJsb29kIHByZXNzdXJlIgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICkudmFsdWUgPj0gODAgJ21tW0hnXScKICAgICAgICAgICkKICAgICAgKQogICkKCmRlZmluZSAiTm9uUGhhcm1hY29sb2dpY2FsIEludGVydmVudGlvbiBOb3QgT3JkZXJlZCI6CiAgKCBbU2VydmljZU5vdFJlcXVlc3RlZDogIkxpZmVzdHlsZSBSZWNvbW1lbmRhdGlvbiJdCiAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIldlaWdodCBSZWR1Y3Rpb24gUmVjb21tZW5kZWQiXQogICAgdW5pb24gW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJEaWV0YXJ5IFJlY29tbWVuZGF0aW9ucyJdCiAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIlJlY29tbWVuZGF0aW9uIHRvIEluY3JlYXNlIFBoeXNpY2FsIEFjdGl2aXR5Il0KICAgIHVuaW9uIFtTZXJ2aWNlTm90UmVxdWVzdGVkOiAiUmVmZXJyYWwgb3IgQ291bnNlbGluZyBmb3IgQWxjb2hvbCBDb25zdW1wdGlvbiJdICkgTm9uUGhhcm1JbnRlcnZlbnRpb24KICAgIHdoZXJlIE5vblBoYXJtSW50ZXJ2ZW50aW9uLnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnIH0KICAgICAgYW5kIE5vblBoYXJtSW50ZXJ2ZW50aW9uLnJlYXNvbkNvZGUgaW4gIlBhdGllbnQgRGVjbGluZWQiCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIE1lZGljYWwgUmVhc29uIGZvciBOb3QgT2J0YWluaW5nIG9yIFBhdGllbnQgRGVjbGluZWQgQmxvb2QgUHJlc3N1cmUgTWVhc3VyZW1lbnQiOgogICJRdWFsaWZ5aW5nIEVuY291bnRlciBkdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBRdWFsaWZ5aW5nRW5jb3VudGVyCiAgICB3aXRoICggW09ic2VydmF0aW9uQ2FuY2VsbGVkOiBjb2RlIH4gIkJsb29kIHByZXNzdXJlIHBhbmVsIHdpdGggYWxsIGNoaWxkcmVuIG9wdGlvbmFsIl0KICAgICAgdW5pb24gW09ic2VydmF0aW9uQ2FuY2VsbGVkOiBjb2RlIH4gIlN5c3RvbGljIGJsb29kIHByZXNzdXJlIl0KICAgICAgdW5pb24gW09ic2VydmF0aW9uQ2FuY2VsbGVkOiBjb2RlIH4gIkRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSJdICkgTm9CUFNjcmVlbgogICAgICBzdWNoIHRoYXQgTm9CUFNjcmVlbi5pc3N1ZWQgZHVyaW5nIGRheSBvZiBRdWFsaWZ5aW5nRW5jb3VudGVyLnBlcmlvZAogICAgICAgIGFuZCAoIE5vQlBTY3JlZW4ubm90RG9uZVJlYXNvbiAoKSBpbiAiUGF0aWVudCBEZWNsaW5lZCIKICAgICAgICAgICAgb3IgTm9CUFNjcmVlbi5ub3REb25lUmVhc29uICgpIGluICJNZWRpY2FsIFJlYXNvbiIKICAgICAgICApCgpkZWZpbmUgIkVuY291bnRlciB3aXRoIE9yZGVyIGZvciBIeXBlcnRlbnNpb24gRm9sbG93IFVwIERlY2xpbmVkIGJ5IFBhdGllbnQiOgogICggKCAiRW5jb3VudGVyIHdpdGggRWxldmF0ZWQgQmxvb2QgUHJlc3N1cmUgUmVhZGluZyBTQlAgMTIwIHRvIDEyOSBBTkQgREJQIGxlc3MgdGhhbiA4MCIgRWxldmF0ZWRCUEVuY291bnRlcgogICAgICAgIHdpdGggKCBbU2VydmljZU5vdFJlcXVlc3RlZDogIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiXQogICAgICAgICAgdW5pb24gW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJGb2xsb3cgVXAgV2l0aGluIDYgTW9udGhzIl0gKSBFbGV2YXRlZEJQRGVjbGluZWRJbnRlcnZlbnRpb25zCiAgICAgICAgICBzdWNoIHRoYXQgRWxldmF0ZWRCUERlY2xpbmVkSW50ZXJ2ZW50aW9ucy5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgRWxldmF0ZWRCUEVuY291bnRlci5wZXJpb2QKICAgICAgICAgICAgYW5kIEVsZXZhdGVkQlBEZWNsaW5lZEludGVydmVudGlvbnMuc3RhdHVzIGluIHsgJ2FjdGl2ZScsICdjb21wbGV0ZWQnLCAnb24taG9sZCcgfQogICAgICAgICAgICBhbmQgRWxldmF0ZWRCUERlY2xpbmVkSW50ZXJ2ZW50aW9ucy5yZWFzb25Db2RlIGluICJQYXRpZW50IERlY2xpbmVkIgogICAgKQogICAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBFbGV2YXRlZCBCbG9vZCBQcmVzc3VyZSBSZWFkaW5nIFNCUCAxMjAgdG8gMTI5IEFORCBEQlAgbGVzcyB0aGFuIDgwIiBFbGV2YXRlZEJQRW5jb3VudGVyCiAgICAgICAgICB3aXRoICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9uIE5vdCBPcmRlcmVkIiBOb3RPcmRlcmVkCiAgICAgICAgICAgIHN1Y2ggdGhhdCBOb3RPcmRlcmVkLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBFbGV2YXRlZEJQRW5jb3VudGVyLnBlcmlvZAogICAgICApCiAgICAgIHVuaW9uICggIkVuY291bnRlciB3aXRoIEZpcnN0IEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTMwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gODAiIEZpcnN0SFRORW5jb3VudGVyCiAgICAgICAgICB3aXRoICggW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJGb2xsb3cgVXAgV2l0aGluIDQgV2Vla3MiXQogICAgICAgICAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiXSApIEZpcnN0SFRORGVjbGluZWRJbnRlcnZlbnRpb25zCiAgICAgICAgICAgIHN1Y2ggdGhhdCBGaXJzdEhUTkRlY2xpbmVkSW50ZXJ2ZW50aW9ucy5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgRmlyc3RIVE5FbmNvdW50ZXIucGVyaW9kCiAgICAgICAgICAgICAgYW5kIEZpcnN0SFRORGVjbGluZWRJbnRlcnZlbnRpb25zLnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnIH0KICAgICAgICAgICAgICBhbmQgRmlyc3RIVE5EZWNsaW5lZEludGVydmVudGlvbnMucmVhc29uQ29kZSBpbiAiUGF0aWVudCBEZWNsaW5lZCIKICAgICAgKQogICAgICB1bmlvbiAoICJFbmNvdW50ZXIgd2l0aCBGaXJzdCBIeXBlcnRlbnNpdmUgUmVhZGluZyBTQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDEzMCBPUiBEQlAgR3JlYXRlciB0aGFuIG9yIEVxdWFsIHRvIDgwIiBGaXJzdEhUTkVuY291bnRlcgogICAgICAgICAgd2l0aCAiTm9uUGhhcm1hY29sb2dpY2FsIEludGVydmVudGlvbiBOb3QgT3JkZXJlZCIgTm9Ob25QaGFybQogICAgICAgICAgICBzdWNoIHRoYXQgTm9Ob25QaGFybS5hdXRob3JlZE9uIGR1cmluZyBkYXkgb2YgRmlyc3RIVE5FbmNvdW50ZXIucGVyaW9kCiAgICAgICkKICAgICAgdW5pb24gKCAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSIgU2Vjb25kSFRORW5jb3VudGVyCiAgICAgICAgICB3aXRoICJTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIDEzMCB0byAxMzkgT1IgREJQIDgwIHRvIDg5IEludGVydmVudGlvbnMgRGVjbGluZWQiIFNlY29uZEhUTkRlY2xpbmVkSW50ZXJ2ZW50aW9ucwogICAgICAgICAgICBzdWNoIHRoYXQgU2Vjb25kSFRORGVjbGluZWRJbnRlcnZlbnRpb25zLmF1dGhvcmVkT24gZHVyaW5nIGRheSBvZiBTZWNvbmRIVE5FbmNvdW50ZXIucGVyaW9kCiAgICAgICkKICAgICAgdW5pb24gKCAiRW5jb3VudGVyIHdpdGggU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTQwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gOTAiIFNlY29uZEhUTjE0ME92ZXI5MEVuY291bnRlcgogICAgICAgICAgd2l0aCAiU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gMTQwIE9SIERCUCBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgdG8gOTAgSW50ZXJ2ZW50aW9ucyBEZWNsaW5lZCIgU2Vjb25kSFROMTQwT3ZlcjkwRGVjbGluZWRJbnRlcnZlbnRpb25zCiAgICAgICAgICAgIHN1Y2ggdGhhdCBTZWNvbmRIVE4xNDBPdmVyOTBEZWNsaW5lZEludGVydmVudGlvbnMuYXV0aG9yZWRPbiBkdXJpbmcgZGF5IG9mIFNlY29uZEhUTjE0ME92ZXI5MEVuY291bnRlci5wZXJpb2QKICAgICAgKQogICkKCmRlZmluZSAiU2Vjb25kIEh5cGVydGVuc2l2ZSBSZWFkaW5nIFNCUCAxMzAgdG8gMTM5IE9SIERCUCA4MCB0byA4OSBJbnRlcnZlbnRpb25zIERlY2xpbmVkIjoKICAoICggW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJSZWZlcnJhbCB0byBQcmltYXJ5IENhcmUgb3IgQWx0ZXJuYXRlIFByb3ZpZGVyIl0KICAgICAgdW5pb24gW1NlcnZpY2VOb3RSZXF1ZXN0ZWQ6ICJGb2xsb3cgVXAgV2l0aGluIDYgTW9udGhzIl0gKSBTZWNvbmRIVE5EZWNsaW5lZFJlZmVycmFsQW5kRm9sbG93VXAKICAgICAgd2hlcmUgU2Vjb25kSFRORGVjbGluZWRSZWZlcnJhbEFuZEZvbGxvd1VwLnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnIH0KICAgICAgICBhbmQgU2Vjb25kSFRORGVjbGluZWRSZWZlcnJhbEFuZEZvbGxvd1VwLnJlYXNvbkNvZGUgaW4gIlBhdGllbnQgRGVjbGluZWQiCiAgKQogICAgdW5pb24gIkxhYm9yYXRvcnkgVGVzdCBvciBFQ0cgZm9yIEh5cGVydGVuc2lvbiBOb3QgT3JkZXJlZCIKICAgIHVuaW9uICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9uIE5vdCBPcmRlcmVkIgoKZGVmaW5lICJTZWNvbmQgSHlwZXJ0ZW5zaXZlIFJlYWRpbmcgU0JQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byAxNDAgT1IgREJQIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byA5MCBJbnRlcnZlbnRpb25zIERlY2xpbmVkIjoKICAoICggKCBbU2VydmljZU5vdFJlcXVlc3RlZDogIlJlZmVycmFsIHRvIFByaW1hcnkgQ2FyZSBvciBBbHRlcm5hdGUgUHJvdmlkZXIiXQogICAgICAgIHVuaW9uIFtTZXJ2aWNlTm90UmVxdWVzdGVkOiAiRm9sbG93IFVwIFdpdGhpbiA0IFdlZWtzIl0gKSBTZWNvbmRIVE4xNDBPdmVyOTBSZWZlcnJhbEZvbGxvd1VwTm90RG9uZQogICAgICAgIHdoZXJlIFNlY29uZEhUTjE0ME92ZXI5MFJlZmVycmFsRm9sbG93VXBOb3REb25lLnN0YXR1cyBpbiB7ICdhY3RpdmUnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnIH0KICAgICAgICAgIGFuZCBTZWNvbmRIVE4xNDBPdmVyOTBSZWZlcnJhbEZvbGxvd1VwTm90RG9uZS5yZWFzb25Db2RlIGluICJQYXRpZW50IERlY2xpbmVkIgogICAgKQogICAgICB1bmlvbiAoIFtNZWRpY2F0aW9uTm90UmVxdWVzdGVkOiAiUGhhcm1hY29sb2dpYyBUaGVyYXB5IGZvciBIeXBlcnRlbnNpb24iXSBNZWRpY2F0aW9uUmVxdWVzdE5vdE9yZGVyZWQKICAgICAgICAgIHdoZXJlIE1lZGljYXRpb25SZXF1ZXN0Tm90T3JkZXJlZC5zdGF0dXMgaW4geyAnYWN0aXZlJywgJ2NvbXBsZXRlZCcgfQogICAgICApCiAgICAgIHVuaW9uICJMYWJvcmF0b3J5IFRlc3Qgb3IgRUNHIGZvciBIeXBlcnRlbnNpb24gTm90IE9yZGVyZWQiCiAgICAgIHVuaW9uICJOb25QaGFybWFjb2xvZ2ljYWwgSW50ZXJ2ZW50aW9uIE5vdCBPcmRlcmVkIgogICkKCmRlZmluZSAiTGFib3JhdG9yeSBUZXN0IG9yIEVDRyBmb3IgSHlwZXJ0ZW5zaW9uIE5vdCBPcmRlcmVkIjoKICAoIFtTZXJ2aWNlTm90UmVxdWVzdGVkOiBjb2RlID0gIjEyIGxlYWQgRUtHIHBhbmVsIl0KICAgIHVuaW9uIFtTZXJ2aWNlTm90UmVxdWVzdGVkOiBjb2RlID0gIkVLRyBzdHVkeSJdCiAgICB1bmlvbiBbU2VydmljZU5vdFJlcXVlc3RlZDogIkxhYm9yYXRvcnkgVGVzdHMgZm9yIEh5cGVydGVuc2lvbiJdICkgTGFiRUNHTm90RG9uZQogICAgd2hlcmUgTGFiRUNHTm90RG9uZS5zdGF0dXMgaW4geyAnYWN0aXZlJywgJ2NvbXBsZXRlZCcsICdvbi1ob2xkJyB9CiAgICAgIGFuZCBMYWJFQ0dOb3REb25lLnJlYXNvbkNvZGUgaW4gIlBhdGllbnQgRGVjbGluZWQiCgpkZWZpbmUgIlNERSBFdGhuaWNpdHkiOgogIFNERS4iU0RFIEV0aG5pY2l0eSIKCmRlZmluZSAiU0RFIFBheWVyIjoKICBTREUuIlNERSBQYXllciIKCmRlZmluZSAiU0RFIFJhY2UiOgogIFNERS4iU0RFIFJhY2UiCgpkZWZpbmUgIlNERSBTZXgiOgogIFNERS4iU0RFIFNleCIKCi8qCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBjb25kaXRpb24gZWl0aGVyIGhhcyBubyB2ZXJpZmljYXRpb24gc3RhdHVzIG9yIGhhcyBhIHZlcmlmaWNhdGlvbiBzdGF0dXMgb2YgY29uZmlybWVkLCB1bmNvbmZpcm1lZCwgcHJvdmlzaW9uYWwsIG9yIGRpZmZlcmVudGlhbAoqLwoKCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gaXNWZXJpZmllZChjb25kaXRpb24gQ2hvaWNlPENvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnMsIENvbmRpdGlvbkVuY291bnRlckRpYWdub3Npcz4pOgogIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgaXMgbm90IG51bGwgaW1wbGllcyAoIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuImNvbmZpcm1lZCIKICAgICAgb3IgY29uZGl0aW9uLnZlcmlmaWNhdGlvblN0YXR1cyB+IFN0YXR1cy4idW5jb25maXJtZWQiCiAgICAgIG9yIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuInByb3Zpc2lvbmFsIgogICAgICBvciBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJkaWZmZXJlbnRpYWwiCiAgKQ==",
    "url" : "https://madie.cms.gov/Library-CMS22FHIRPCSBPScreeningFollowUp.cql"
  }]
}