{
  "resourceType" : "Library",
  "id" : "CMS156FHIRHighRiskMedsElderly",
  "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 CMS156FHIRHighRiskMedsElderly 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 Hospice version '7.1.000' called Hospice\ninclude PalliativeCare version '2.1.000' called PalliativeCare\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 &quot;RXNORM&quot;: 'http://www.nlm.nih.gov/research/umls/rxnorm'\ncodesystem &quot;CPT&quot;: 'http://www.ama-assn.org/go/cpt'\n\nvalueset &quot;Alcohol Withdrawal&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.105.12.1209'\nvalueset &quot;Annual Wellness Visit&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1240'\nvalueset &quot;Benzodiazepine Withdrawal&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.105.12.1208'\nvalueset &quot;Bipolar Disorder&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.67.1.101.1.128'\nvalueset &quot;Care Services in Long Term Residential Facility&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1014'\nvalueset &quot;Desiccated Thyroid Medications&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1060'\nvalueset &quot;Digoxin Medications&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1065'\nvalueset &quot;Dipyridamole Medications&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1051'\nvalueset &quot;Discharge Services Nursing Facility&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1013'\nvalueset &quot;Doxepin Medications&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1067'\nvalueset &quot;Generalized Anxiety Disorder&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.105.12.1210'\nvalueset &quot;Guanfacine Medications&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.196.11.1252'\nvalueset &quot;Home Healthcare Services&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1016'\nvalueset &quot;Megestrol Medications&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1247'\nvalueset &quot;Meperidine Medications&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1248'\nvalueset &quot;Meprobamate Medications&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1057'\nvalueset &quot;Nifedipine Medications&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1053'\nvalueset &quot;Nursing Facility Visit&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1012'\nvalueset &quot;Office Visit&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001'\nvalueset &quot;Ophthalmological Services&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1285'\nvalueset &quot;Potentially Harmful Antidepressants for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1054'\nvalueset &quot;Potentially Harmful Antihistamines for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1043'\nvalueset &quot;Potentially Harmful Antiinfectives for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.196.12.1481'\nvalueset &quot;Potentially Harmful Antiparkinsonian Agents for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1049'\nvalueset &quot;Potentially Harmful Antipsychotics for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.196.12.1523'\nvalueset &quot;Potentially Harmful Barbiturates for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1055'\nvalueset &quot;Potentially Harmful Benzodiazepines for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.196.12.1522'\nvalueset &quot;Potentially Harmful Estrogens for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1058'\nvalueset &quot;Potentially Harmful Gastrointestinal Antispasmodics for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1050'\nvalueset &quot;Potentially Harmful Nonbenzodiazepine Hypnotics for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.196.12.1480'\nvalueset &quot;Potentially Harmful Pain Medications for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1063'\nvalueset &quot;Potentially Harmful Skeletal Muscle Relaxants for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1062'\nvalueset &quot;Potentially Harmful Sulfonylureas for Older Adults&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1059'\nvalueset &quot;Preventive Care Services Established Office Visit, 18 and Up&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1025'\nvalueset &quot;Preventive Care Services Initial Office Visit, 18 and Up&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1023'\nvalueset &quot;REM Sleep Behavior Disorder&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.105.12.1207'\nvalueset &quot;Schizophrenia&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.105.12.1205'\nvalueset &quot;Seizure Disorder&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.105.12.1206'\nvalueset &quot;Telephone Visits&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1080'\nvalueset &quot;Virtual Encounter&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1089'\n\ncode &quot;1 ML digoxin 0.1 MG/ML Injection&quot;: '204504' from &quot;RXNORM&quot; display '1 ML digoxin 0.1 MG/ML Injection'\ncode &quot;2 ML digoxin 0.25 MG/ML Injection&quot;: '104208' from &quot;RXNORM&quot; display '2 ML digoxin 0.25 MG/ML Injection'\ncode &quot;digoxin 0.05 MG/ML Oral Solution&quot;: '393245' from &quot;RXNORM&quot; display 'digoxin 0.05 MG/ML Oral Solution'\ncode &quot;digoxin 0.0625 MG Oral Tablet&quot;: '245273' from &quot;RXNORM&quot; display 'digoxin 0.0625 MG Oral Tablet'\ncode &quot;digoxin 0.125 MG Oral Tablet&quot;: '197604' from &quot;RXNORM&quot; display 'digoxin 0.125 MG Oral Tablet'\ncode &quot;digoxin 0.25 MG Oral Tablet&quot;: '197606' from &quot;RXNORM&quot; display 'digoxin 0.25 MG Oral Tablet'\ncode &quot;doxepin 10 MG Oral Capsule&quot;: '1000048' from &quot;RXNORM&quot; display 'doxepin 10 MG Oral Capsule'\ncode &quot;doxepin 10 MG/ML Oral Solution&quot;: '1000054' from &quot;RXNORM&quot; display 'doxepin 10 MG/ML Oral Solution'\ncode &quot;doxepin 100 MG Oral Capsule&quot;: '1000058' from &quot;RXNORM&quot; display 'doxepin 100 MG Oral Capsule'\ncode &quot;doxepin 150 MG Oral Capsule&quot;: '1000064' from &quot;RXNORM&quot; display 'doxepin 150 MG Oral Capsule'\ncode &quot;doxepin 25 MG Oral Capsule&quot;: '1000070' from &quot;RXNORM&quot; display 'doxepin 25 MG Oral Capsule'\ncode &quot;doxepin 3 MG Oral Tablet&quot;: '966787' from &quot;RXNORM&quot; display 'doxepin 3 MG Oral Tablet'\ncode &quot;doxepin 50 MG Oral Capsule&quot;: '1000076' from &quot;RXNORM&quot; display 'doxepin 50 MG Oral Capsule'\ncode &quot;doxepin 6 MG Oral Tablet&quot;: '966793' from &quot;RXNORM&quot; display 'doxepin 6 MG Oral Tablet'\ncode &quot;doxepin 75 MG Oral Capsule&quot;: '1000097' from &quot;RXNORM&quot; display 'doxepin 75 MG Oral Capsule'\ncode &quot;ergoloid mesylates, USP 1 MG Oral Tablet&quot;: '318179' from &quot;RXNORM&quot; display 'ergoloid mesylates, USP 1 MG Oral Tablet'\ncode &quot;Office or other outpatient visit for the evaluation and management of an established patient that may not require the presence of a physician or other qualified health care professional&quot;: '99211' from &quot;CPT&quot; display 'Office or other outpatient visit for the evaluation and management of an established patient that may not require the presence of a physician or other qualified health care professional'\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  AgeInYearsAt(date from \n    end of &quot;Measurement Period&quot;\n  ) &gt;= 65\n    and exists &quot;Qualifying Encounters&quot;\n\ndefine &quot;Qualifying Encounters&quot;:\n  ( ( [Encounter: &quot;Office Visit&quot;]\n      union [Encounter: &quot;Ophthalmological Services&quot;]\n      union [Encounter: &quot;Preventive Care Services Established Office Visit, 18 and Up&quot;]\n      union [Encounter: &quot;Discharge Services Nursing Facility&quot;]\n      union [Encounter: &quot;Nursing Facility Visit&quot;]\n      union [Encounter: &quot;Care Services in Long Term Residential Facility&quot;]\n      union [Encounter: &quot;Preventive Care Services Initial Office Visit, 18 and Up&quot;]\n      union [Encounter: &quot;Annual Wellness Visit&quot;]\n      union [Encounter: &quot;Home Healthcare Services&quot;]\n      union [Encounter: &quot;Telephone Visits&quot;]\n      union [Encounter: &quot;Virtual Encounter&quot;]\n      union ( [Encounter] E\n          where exists ( ( E.type ) T\n              where T ~ &quot;Office or other outpatient visit for the evaluation and management of an established patient that may not require the presence of a physician or other qualified health care professional&quot;\n          )\n      )\n  ).isEncounterPerformed ( ) ) ValidEncounters\n    where ValidEncounters.period during &quot;Measurement Period&quot;\n\ndefine &quot;Denominator&quot;:\n  &quot;Initial Population&quot;\n\ndefine &quot;Denominator Exclusions&quot;:\n  Hospice.&quot;Has Hospice Services&quot;\n    or PalliativeCare.&quot;Has Palliative Care in the Measurement Period&quot;\n\ndefine &quot;Numerator 1&quot;:\n  exists &quot;Same High Risk Medications Ordered on Different Days&quot;\n    or &quot;Two High Risk Medications with Prolonged Duration&quot;\n    or &quot;High Risk Medications with Average Daily Dose Criteria&quot;\n\ndefine &quot;Same High Risk Medications Ordered on Different Days&quot;:\n  ( [MedicationRequest: &quot;Potentially Harmful Antihistamines for Older Adults&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Potentially Harmful Antiparkinsonian Agents for Older Adults&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Potentially Harmful Gastrointestinal Antispasmodics for Older Adults&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Dipyridamole Medications&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Guanfacine Medications&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Nifedipine Medications&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Potentially Harmful Antidepressants for Older Adults&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Potentially Harmful Barbiturates for Older Adults&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;ergoloid mesylates, USP 1 MG Oral Tablet&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Meprobamate Medications&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Potentially Harmful Estrogens for Older Adults&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Potentially Harmful Sulfonylureas for Older Adults&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Desiccated Thyroid Medications&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Potentially Harmful Nonbenzodiazepine Hypnotics for Older Adults&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Potentially Harmful Skeletal Muscle Relaxants for Older Adults&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Potentially Harmful Pain Medications for Older Adults&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Megestrol Medications&quot;] ).moreThanOneOrder ( )\n    union ( [MedicationRequest: &quot;Meperidine Medications&quot;] ).moreThanOneOrder ( )\n\ndefine &quot;Two High Risk Medications with Prolonged Duration&quot;:\n  Sum((([MedicationRequest: &quot;Potentially Harmful Antiinfectives for Older Adults&quot;]).moreThanOneOrder()) AntiInfectives\n      let DaysSupply: AntiInfectives.medicationRequestPeriodInDays()\n      return all DaysSupply\n  ) &gt; 90\n\ndefine &quot;High Risk Medications with Average Daily Dose Criteria&quot;:\n  exists ( ( [MedicationRequest: &quot;Digoxin Medications&quot;] DigoxinOrdered\n        where DigoxinOrdered.averageDailyDose ( ) &gt; 0.125 'mg/d'\n    ).moreThanOneOrder ( )\n  )\n    or exists ( ( [MedicationRequest: &quot;Doxepin Medications&quot;] DoxepinOrdered\n          where DoxepinOrdered.averageDailyDose ( ) &gt; 6 'mg/d'\n      ).moreThanOneOrder ( )\n    )\n\ndefine &quot;Numerator 2&quot;:\n  ( &quot;More than One Antipsychotic Order&quot;\n      and ( not exists ( ( &quot;Schizophrenia Diagnosis&quot;\n            union &quot;Bipolar Disorder Diagnosis&quot; ) AntipsychoticTreatedDiagnoses\n            where AntipsychoticTreatedDiagnoses.prevalenceInterval ( ) overlaps Interval[start of &quot;Measurement Period&quot; - 1 year, &quot;Antipsychotic Index Prescription Start Date&quot;]\n        )\n      )\n  )\n    or ( &quot;More than One Benzodiazepine Order&quot;\n        and ( not exists ( ( &quot;Seizure Disorder Diagnosis&quot;\n              union &quot;REM Sleep Behavior Disorder Diagnosis&quot;\n              union &quot;Benzodiazepine Withdrawal Diagnosis&quot;\n              union &quot;Alcohol Withdrawal Diagnosis&quot;\n              union &quot;Generalized Anxiety Disorder Diagnosis&quot; ) BenzodiazepineTreatedDiagnoses\n              where BenzodiazepineTreatedDiagnoses.prevalenceInterval ( ) overlaps Interval[start of &quot;Measurement Period&quot; - 1 year, &quot;Benzodiazepine Index Prescription Start Date&quot;]\n          )\n        )\n    )\n\ndefine &quot;More than One Antipsychotic Order&quot;:\n  exists ( [MedicationRequest: &quot;Potentially Harmful Antipsychotics for Older Adults&quot;] ).moreThanOneOrder ( )\n\ndefine &quot;More than One Benzodiazepine Order&quot;:\n  exists ( [MedicationRequest: &quot;Potentially Harmful Benzodiazepines for Older Adults&quot;] ).moreThanOneOrder ( )\n\ndefine &quot;Bipolar Disorder Diagnosis&quot;:\n  ( [ConditionProblemsHealthConcerns: &quot;Bipolar Disorder&quot;]\n      union [ConditionEncounterDiagnosis: &quot;Bipolar Disorder&quot;]\n  ).verified ( )\n\ndefine &quot;Schizophrenia Diagnosis&quot;:\n  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n  // Original:\n  // ( [ConditionProblemsHealthConcerns: &quot;Schizophrenia&quot;]\n  //     union [ConditionEncounterDiagnosis: &quot;Schizophrenia&quot;]\n  ( [Condition: &quot;Schizophrenia&quot;]\n  ).verified ( )\n\ndefine &quot;Seizure Disorder Diagnosis&quot;:\n  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n  // Original:\n  // ( [ConditionProblemsHealthConcerns: &quot;Seizure Disorder&quot;]\n  //     union [ConditionEncounterDiagnosis: &quot;Seizure Disorder&quot;]\n  ( [Condition: &quot;Seizure Disorder&quot;]\n  ).verified ( )\n\ndefine &quot;REM Sleep Behavior Disorder Diagnosis&quot;:\n  ( [ConditionProblemsHealthConcerns: &quot;REM Sleep Behavior Disorder&quot;]\n      union [ConditionEncounterDiagnosis: &quot;REM Sleep Behavior Disorder&quot;]\n  ).verified ( )\n\ndefine &quot;Benzodiazepine Withdrawal Diagnosis&quot;:\n  ( [ConditionProblemsHealthConcerns: &quot;Benzodiazepine Withdrawal&quot;]\n      union [ConditionEncounterDiagnosis: &quot;Benzodiazepine Withdrawal&quot;]\n  ).verified ( )\n\ndefine &quot;Alcohol Withdrawal Diagnosis&quot;:\n  ( [ConditionProblemsHealthConcerns: &quot;Alcohol Withdrawal&quot;]\n      union [ConditionEncounterDiagnosis: &quot;Alcohol Withdrawal&quot;]\n  ).verified ( )\n\ndefine &quot;Generalized Anxiety Disorder Diagnosis&quot;:\n  ( [ConditionProblemsHealthConcerns: &quot;Generalized Anxiety Disorder&quot;]\n      union [ConditionEncounterDiagnosis: &quot;Generalized Anxiety Disorder&quot;]\n  ).verified ( )\n\ndefine &quot;Antipsychotic Index Prescription Start Date&quot;:\n  First((([MedicationRequest: &quot;Potentially Harmful Antipsychotics for Older Adults&quot;]).isMedicationOrder()) AntipsychoticMedication\n      where AntipsychoticMedication.authoredOn during &quot;Measurement Period&quot;\n      return FHIRHelpers.ToDateTime(AntipsychoticMedication.authoredOn)\n      sort asc\n  )\n\ndefine &quot;Benzodiazepine Index Prescription Start Date&quot;:\n  First((([MedicationRequest: &quot;Potentially Harmful Benzodiazepines for Older Adults&quot;]).isMedicationOrder()) BenzodiazepineMedication\n      where BenzodiazepineMedication.authoredOn during &quot;Measurement Period&quot;\n      return FHIRHelpers.ToDateTime(BenzodiazepineMedication.authoredOn)\n      sort asc\n  )\n\ndefine &quot;Numerator 3&quot;:\n  &quot;Numerator 2&quot;\n    or ( &quot;Numerator 1&quot;\n        and not &quot;Numerator 2&quot;\n    )\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\ndefine fluent function moreThanOneOrder(Medication List&lt;MedicationRequest&gt;):\n  ( Medication.isMedicationOrder ( ) ) OrderMedication1\n    with ( Medication.isMedicationOrder ( ) ) OrderMedication2\n      such that ( OrderMedication1.authoredOn during &quot;Measurement Period&quot;\n          and OrderMedication1.dispenseRequest.numberOfRepeatsAllowed &gt;= 1\n      )\n        or ( date from OrderMedication1.authoredOn !~ date from OrderMedication2.authoredOn\n            and OrderMedication1.authoredOn during &quot;Measurement Period&quot;\n            and OrderMedication2.authoredOn during &quot;Measurement Period&quot;\n        )\n        or ( date from OrderMedication1.authoredOn ~ date from OrderMedication2.authoredOn\n            and OrderMedication1.authoredOn during &quot;Measurement Period&quot;\n            and date from start of OrderMedication1.medicationRequestPeriod ( ) !~ date from start of OrderMedication2.medicationRequestPeriod ( )\n            and start of OrderMedication1.medicationRequestPeriod ( ) during &quot;Measurement Period&quot;\n            and start of OrderMedication2.medicationRequestPeriod ( ) during &quot;Measurement Period&quot;\n        )\n    return OrderMedication1\n\ndefine fluent function medicationStrengthPerUnit(Strength Concept):\n  case\n    when Strength ~ &quot;digoxin 0.05 MG/ML Oral Solution&quot; then 0.05 'mg/mL'\n    when Strength ~ &quot;digoxin 0.0625 MG Oral Tablet&quot; then 0.0625 'mg'\n    when Strength ~ &quot;1 ML digoxin 0.1 MG/ML Injection&quot; then 0.1 'mg/mL'\n    when Strength ~ &quot;digoxin 0.125 MG Oral Tablet&quot; then 0.125 'mg'\n    when Strength ~ &quot;digoxin 0.25 MG Oral Tablet&quot; then 0.25 'mg'\n    when Strength ~ &quot;2 ML digoxin 0.25 MG/ML Injection&quot; then 0.25 'mg/mL'\n    when Strength ~ &quot;doxepin 3 MG Oral Tablet&quot; then 3 'mg'\n    when Strength ~ &quot;doxepin 6 MG Oral Tablet&quot; then 6 'mg'\n    when Strength ~ &quot;doxepin 10 MG Oral Capsule&quot; then 10 'mg'\n    when Strength ~ &quot;doxepin 10 MG/ML Oral Solution&quot; then 10 'mg/mL'\n    when Strength ~ &quot;doxepin 25 MG Oral Capsule&quot; then 25 'mg'\n    when Strength ~ &quot;doxepin 50 MG Oral Capsule&quot; then 50 'mg'\n    when Strength ~ &quot;doxepin 75 MG Oral Capsule&quot; then 75 'mg'\n    when Strength ~ &quot;doxepin 100 MG Oral Capsule&quot; then 100 'mg'\n    when Strength ~ &quot;doxepin 150 MG Oral Capsule&quot; then 150 'mg' \n    else null end\n\ndefine fluent function medicationRequestPeriodInDays(Request MedicationRequest):\n  Request R\n    let dosage: singleton from R.dosageInstruction,\n    doseAndRate: singleton from dosage.doseAndRate,\n    timing: dosage.timing,\n    frequency: Coalesce(timing.repeat.frequencyMax, timing.repeat.frequency),\n    period: CMD.&quot;Quantity&quot; ( timing.repeat.period, timing.repeat.periodUnit ),\n    doseRange: doseAndRate.dose,\n    doseQuantity: doseAndRate.dose,\n    dose: Coalesce(\n      end of doseRange, doseQuantity\n    ),\n    dosesPerDay: Coalesce((CMD.&quot;ToDaily&quot;(frequency, period)), Count(timing.repeat.timeOfDay), 1.0),\n    boundsPeriod: timing.repeat.bounds as FHIR.Period,\n    daysSupply: ( convert R.dispenseRequest.expectedSupplyDuration to days ).value,\n    quantity: R.dispenseRequest.quantity,\n    refills: Coalesce(R.dispenseRequest.numberOfRepeatsAllowed, 0),\n    startDate: Coalesce(date from start of boundsPeriod, date from R.authoredOn, date from start of R.dispenseRequest.validityPeriod),\n    totalDaysSupplied: Coalesce(daysSupply, quantity.value /(dose.value * dosesPerDay)) * ( 1 + refills )\n    return totalDaysSupplied\n\ndefine fluent function averageDailyDose(MedicationRequest MedicationRequest):\n  MedicationRequest Order\n    let MedicationStrength: Order.getMedicationCode ( ).medicationStrengthPerUnit ( ),\n    DaysSupplied: Order.medicationRequestPeriodInDays ( )\n    return if DaysSupplied is not null\n      and ( MedicationStrength.unit = 'mg'\n          or ( MedicationStrength.unit = 'mg/mL'\n              and Order.dispenseRequest.quantity.unit = 'mL'\n          )\n      ) then ( ( Order.dispenseRequest.quantity * MedicationStrength ) / System.Quantity { value: DaysSupplied, unit: 'd' } )\n      else null</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/CMS156FHIRHighRiskMedsElderly",
  "version" : "1.1.000",
  "name" : "CMS156FHIRHighRiskMedsElderly",
  "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" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVMxNTZGSElSSGlnaFJpc2tNZWRzRWxkZXJseSB2ZXJzaW9uICcxLjEuMDAwJwoKdXNpbmcgVVNRdWFsaXR5Q29yZSB2ZXJzaW9uICcwLjEuMC1jaWJ1aWxkJwp1c2luZyBVU0NvcmUgdmVyc2lvbiAnNi4xLjAtZGVyaXZlZCcKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgaGw3LmZoaXIudXYuY3FsLkZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJyBjYWxsZWQgRkhJUkhlbHBlcnMKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkNvbW1vbiB2ZXJzaW9uICcyLjAuMCcgY2FsbGVkIEZISVJDb21tb24KaW5jbHVkZSBobDcuZmhpci51cy5jcWwuQ3VtdWxhdGl2ZU1lZGljYXRpb25EdXJhdGlvbiB2ZXJzaW9uICcyLjAuMC1iYWxsb3QnIGNhbGxlZCBDTUQKaW5jbHVkZSBobDcuZmhpci51cy5jcWwuVVNDb3JlQ29tbW9uIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVFbGVtZW50cyB2ZXJzaW9uICcyLjAuMC1iYWxsb3QnIGNhbGxlZCBVU0NvcmVFbGVtZW50cwoKaW5jbHVkZSBIb3NwaWNlIHZlcnNpb24gJzcuMS4wMDAnIGNhbGxlZCBIb3NwaWNlCmluY2x1ZGUgUGFsbGlhdGl2ZUNhcmUgdmVyc2lvbiAnMi4xLjAwMCcgY2FsbGVkIFBhbGxpYXRpdmVDYXJlCmluY2x1ZGUgQ1FNQ29tbW9uIHZlcnNpb24gJzUuMS4wMDAnIGNhbGxlZCBDUU1Db21tb24KaW5jbHVkZSBVU1F1YWxpdHlDb3JlQ29tbW9uIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnIGNhbGxlZCBVU1F1YWxpdHlDb3JlQ29tbW9uCmluY2x1ZGUgU3VwcGxlbWVudGFsRGF0YUVsZW1lbnRzIHZlcnNpb24gJzYuMS4wMDAnIGNhbGxlZCBTREUKaW5jbHVkZSBTdGF0dXMgdmVyc2lvbiAnMi4xLjAwMCcgY2FsbGVkIFN0YXR1cwoKY29kZXN5c3RlbSAiUlhOT1JNIjogJ2h0dHA6Ly93d3cubmxtLm5paC5nb3YvcmVzZWFyY2gvdW1scy9yeG5vcm0nCmNvZGVzeXN0ZW0gIkNQVCI6ICdodHRwOi8vd3d3LmFtYS1hc3NuLm9yZy9nby9jcHQnCgp2YWx1ZXNldCAiQWxjb2hvbCBXaXRoZHJhd2FsIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwNS4xMi4xMjA5Jwp2YWx1ZXNldCAiQW5udWFsIFdlbGxuZXNzIFZpc2l0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjUyNi4zLjEyNDAnCnZhbHVlc2V0ICJCZW56b2RpYXplcGluZSBXaXRoZHJhd2FsIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwNS4xMi4xMjA4Jwp2YWx1ZXNldCAiQmlwb2xhciBEaXNvcmRlciI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42Ny4xLjEwMS4xLjEyOCcKdmFsdWVzZXQgIkNhcmUgU2VydmljZXMgaW4gTG9uZyBUZXJtIFJlc2lkZW50aWFsIEZhY2lsaXR5IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDE0Jwp2YWx1ZXNldCAiRGVzaWNjYXRlZCBUaHlyb2lkIE1lZGljYXRpb25zIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwNjAnCnZhbHVlc2V0ICJEaWdveGluIE1lZGljYXRpb25zIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwNjUnCnZhbHVlc2V0ICJEaXB5cmlkYW1vbGUgTWVkaWNhdGlvbnMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTA1MScKdmFsdWVzZXQgIkRpc2NoYXJnZSBTZXJ2aWNlcyBOdXJzaW5nIEZhY2lsaXR5IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDEzJwp2YWx1ZXNldCAiRG94ZXBpbiBNZWRpY2F0aW9ucyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDY3Jwp2YWx1ZXNldCAiR2VuZXJhbGl6ZWQgQW54aWV0eSBEaXNvcmRlciI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDUuMTIuMTIxMCcKdmFsdWVzZXQgIkd1YW5mYWNpbmUgTWVkaWNhdGlvbnMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTk2LjExLjEyNTInCnZhbHVlc2V0ICJIb21lIEhlYWx0aGNhcmUgU2VydmljZXMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMTYnCnZhbHVlc2V0ICJNZWdlc3Ryb2wgTWVkaWNhdGlvbnMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTI0NycKdmFsdWVzZXQgIk1lcGVyaWRpbmUgTWVkaWNhdGlvbnMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTI0OCcKdmFsdWVzZXQgIk1lcHJvYmFtYXRlIE1lZGljYXRpb25zIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwNTcnCnZhbHVlc2V0ICJOaWZlZGlwaW5lIE1lZGljYXRpb25zIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwNTMnCnZhbHVlc2V0ICJOdXJzaW5nIEZhY2lsaXR5IFZpc2l0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDEyJwp2YWx1ZXNldCAiT2ZmaWNlIFZpc2l0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDAxJwp2YWx1ZXNldCAiT3BodGhhbG1vbG9naWNhbCBTZXJ2aWNlcyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4xMjg1Jwp2YWx1ZXNldCAiUG90ZW50aWFsbHkgSGFybWZ1bCBBbnRpZGVwcmVzc2FudHMgZm9yIE9sZGVyIEFkdWx0cyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDU0Jwp2YWx1ZXNldCAiUG90ZW50aWFsbHkgSGFybWZ1bCBBbnRpaGlzdGFtaW5lcyBmb3IgT2xkZXIgQWR1bHRzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwNDMnCnZhbHVlc2V0ICJQb3RlbnRpYWxseSBIYXJtZnVsIEFudGlpbmZlY3RpdmVzIGZvciBPbGRlciBBZHVsdHMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTk2LjEyLjE0ODEnCnZhbHVlc2V0ICJQb3RlbnRpYWxseSBIYXJtZnVsIEFudGlwYXJraW5zb25pYW4gQWdlbnRzIGZvciBPbGRlciBBZHVsdHMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTA0OScKdmFsdWVzZXQgIlBvdGVudGlhbGx5IEhhcm1mdWwgQW50aXBzeWNob3RpY3MgZm9yIE9sZGVyIEFkdWx0cyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xOTYuMTIuMTUyMycKdmFsdWVzZXQgIlBvdGVudGlhbGx5IEhhcm1mdWwgQmFyYml0dXJhdGVzIGZvciBPbGRlciBBZHVsdHMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTA1NScKdmFsdWVzZXQgIlBvdGVudGlhbGx5IEhhcm1mdWwgQmVuem9kaWF6ZXBpbmVzIGZvciBPbGRlciBBZHVsdHMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTk2LjEyLjE1MjInCnZhbHVlc2V0ICJQb3RlbnRpYWxseSBIYXJtZnVsIEVzdHJvZ2VucyBmb3IgT2xkZXIgQWR1bHRzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwNTgnCnZhbHVlc2V0ICJQb3RlbnRpYWxseSBIYXJtZnVsIEdhc3Ryb2ludGVzdGluYWwgQW50aXNwYXNtb2RpY3MgZm9yIE9sZGVyIEFkdWx0cyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDUwJwp2YWx1ZXNldCAiUG90ZW50aWFsbHkgSGFybWZ1bCBOb25iZW56b2RpYXplcGluZSBIeXBub3RpY3MgZm9yIE9sZGVyIEFkdWx0cyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xOTYuMTIuMTQ4MCcKdmFsdWVzZXQgIlBvdGVudGlhbGx5IEhhcm1mdWwgUGFpbiBNZWRpY2F0aW9ucyBmb3IgT2xkZXIgQWR1bHRzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwNjMnCnZhbHVlc2V0ICJQb3RlbnRpYWxseSBIYXJtZnVsIFNrZWxldGFsIE11c2NsZSBSZWxheGFudHMgZm9yIE9sZGVyIEFkdWx0cyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDYyJwp2YWx1ZXNldCAiUG90ZW50aWFsbHkgSGFybWZ1bCBTdWxmb255bHVyZWFzIGZvciBPbGRlciBBZHVsdHMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTA1OScKdmFsdWVzZXQgIlByZXZlbnRpdmUgQ2FyZSBTZXJ2aWNlcyBFc3RhYmxpc2hlZCBPZmZpY2UgVmlzaXQsIDE4IGFuZCBVcCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAyNScKdmFsdWVzZXQgIlByZXZlbnRpdmUgQ2FyZSBTZXJ2aWNlcyBJbml0aWFsIE9mZmljZSBWaXNpdCwgMTggYW5kIFVwIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDIzJwp2YWx1ZXNldCAiUkVNIFNsZWVwIEJlaGF2aW9yIERpc29yZGVyIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwNS4xMi4xMjA3Jwp2YWx1ZXNldCAiU2NoaXpvcGhyZW5pYSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDUuMTIuMTIwNScKdmFsdWVzZXQgIlNlaXp1cmUgRGlzb3JkZXIiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTA1LjEyLjEyMDYnCnZhbHVlc2V0ICJUZWxlcGhvbmUgVmlzaXRzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDgwJwp2YWx1ZXNldCAiVmlydHVhbCBFbmNvdW50ZXIiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwODknCgpjb2RlICIxIE1MIGRpZ294aW4gMC4xIE1HL01MIEluamVjdGlvbiI6ICcyMDQ1MDQnIGZyb20gIlJYTk9STSIgZGlzcGxheSAnMSBNTCBkaWdveGluIDAuMSBNRy9NTCBJbmplY3Rpb24nCmNvZGUgIjIgTUwgZGlnb3hpbiAwLjI1IE1HL01MIEluamVjdGlvbiI6ICcxMDQyMDgnIGZyb20gIlJYTk9STSIgZGlzcGxheSAnMiBNTCBkaWdveGluIDAuMjUgTUcvTUwgSW5qZWN0aW9uJwpjb2RlICJkaWdveGluIDAuMDUgTUcvTUwgT3JhbCBTb2x1dGlvbiI6ICczOTMyNDUnIGZyb20gIlJYTk9STSIgZGlzcGxheSAnZGlnb3hpbiAwLjA1IE1HL01MIE9yYWwgU29sdXRpb24nCmNvZGUgImRpZ294aW4gMC4wNjI1IE1HIE9yYWwgVGFibGV0IjogJzI0NTI3MycgZnJvbSAiUlhOT1JNIiBkaXNwbGF5ICdkaWdveGluIDAuMDYyNSBNRyBPcmFsIFRhYmxldCcKY29kZSAiZGlnb3hpbiAwLjEyNSBNRyBPcmFsIFRhYmxldCI6ICcxOTc2MDQnIGZyb20gIlJYTk9STSIgZGlzcGxheSAnZGlnb3hpbiAwLjEyNSBNRyBPcmFsIFRhYmxldCcKY29kZSAiZGlnb3hpbiAwLjI1IE1HIE9yYWwgVGFibGV0IjogJzE5NzYwNicgZnJvbSAiUlhOT1JNIiBkaXNwbGF5ICdkaWdveGluIDAuMjUgTUcgT3JhbCBUYWJsZXQnCmNvZGUgImRveGVwaW4gMTAgTUcgT3JhbCBDYXBzdWxlIjogJzEwMDAwNDgnIGZyb20gIlJYTk9STSIgZGlzcGxheSAnZG94ZXBpbiAxMCBNRyBPcmFsIENhcHN1bGUnCmNvZGUgImRveGVwaW4gMTAgTUcvTUwgT3JhbCBTb2x1dGlvbiI6ICcxMDAwMDU0JyBmcm9tICJSWE5PUk0iIGRpc3BsYXkgJ2RveGVwaW4gMTAgTUcvTUwgT3JhbCBTb2x1dGlvbicKY29kZSAiZG94ZXBpbiAxMDAgTUcgT3JhbCBDYXBzdWxlIjogJzEwMDAwNTgnIGZyb20gIlJYTk9STSIgZGlzcGxheSAnZG94ZXBpbiAxMDAgTUcgT3JhbCBDYXBzdWxlJwpjb2RlICJkb3hlcGluIDE1MCBNRyBPcmFsIENhcHN1bGUiOiAnMTAwMDA2NCcgZnJvbSAiUlhOT1JNIiBkaXNwbGF5ICdkb3hlcGluIDE1MCBNRyBPcmFsIENhcHN1bGUnCmNvZGUgImRveGVwaW4gMjUgTUcgT3JhbCBDYXBzdWxlIjogJzEwMDAwNzAnIGZyb20gIlJYTk9STSIgZGlzcGxheSAnZG94ZXBpbiAyNSBNRyBPcmFsIENhcHN1bGUnCmNvZGUgImRveGVwaW4gMyBNRyBPcmFsIFRhYmxldCI6ICc5NjY3ODcnIGZyb20gIlJYTk9STSIgZGlzcGxheSAnZG94ZXBpbiAzIE1HIE9yYWwgVGFibGV0Jwpjb2RlICJkb3hlcGluIDUwIE1HIE9yYWwgQ2Fwc3VsZSI6ICcxMDAwMDc2JyBmcm9tICJSWE5PUk0iIGRpc3BsYXkgJ2RveGVwaW4gNTAgTUcgT3JhbCBDYXBzdWxlJwpjb2RlICJkb3hlcGluIDYgTUcgT3JhbCBUYWJsZXQiOiAnOTY2NzkzJyBmcm9tICJSWE5PUk0iIGRpc3BsYXkgJ2RveGVwaW4gNiBNRyBPcmFsIFRhYmxldCcKY29kZSAiZG94ZXBpbiA3NSBNRyBPcmFsIENhcHN1bGUiOiAnMTAwMDA5NycgZnJvbSAiUlhOT1JNIiBkaXNwbGF5ICdkb3hlcGluIDc1IE1HIE9yYWwgQ2Fwc3VsZScKY29kZSAiZXJnb2xvaWQgbWVzeWxhdGVzLCBVU1AgMSBNRyBPcmFsIFRhYmxldCI6ICczMTgxNzknIGZyb20gIlJYTk9STSIgZGlzcGxheSAnZXJnb2xvaWQgbWVzeWxhdGVzLCBVU1AgMSBNRyBPcmFsIFRhYmxldCcKY29kZSAiT2ZmaWNlIG9yIG90aGVyIG91dHBhdGllbnQgdmlzaXQgZm9yIHRoZSBldmFsdWF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIGFuIGVzdGFibGlzaGVkIHBhdGllbnQgdGhhdCBtYXkgbm90IHJlcXVpcmUgdGhlIHByZXNlbmNlIG9mIGEgcGh5c2ljaWFuIG9yIG90aGVyIHF1YWxpZmllZCBoZWFsdGggY2FyZSBwcm9mZXNzaW9uYWwiOiAnOTkyMTEnIGZyb20gIkNQVCIgZGlzcGxheSAnT2ZmaWNlIG9yIG90aGVyIG91dHBhdGllbnQgdmlzaXQgZm9yIHRoZSBldmFsdWF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIGFuIGVzdGFibGlzaGVkIHBhdGllbnQgdGhhdCBtYXkgbm90IHJlcXVpcmUgdGhlIHByZXNlbmNlIG9mIGEgcGh5c2ljaWFuIG9yIG90aGVyIHF1YWxpZmllZCBoZWFsdGggY2FyZSBwcm9mZXNzaW9uYWwnCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNy0wMS0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgQWdlSW5ZZWFyc0F0KGRhdGUgZnJvbSAKICAgIGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICkgPj0gNjUKICAgIGFuZCBleGlzdHMgIlF1YWxpZnlpbmcgRW5jb3VudGVycyIKCmRlZmluZSAiUXVhbGlmeWluZyBFbmNvdW50ZXJzIjoKICAoICggW0VuY291bnRlcjogIk9mZmljZSBWaXNpdCJdCiAgICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJPcGh0aGFsbW9sb2dpY2FsIFNlcnZpY2VzIl0KICAgICAgdW5pb24gW0VuY291bnRlcjogIlByZXZlbnRpdmUgQ2FyZSBTZXJ2aWNlcyBFc3RhYmxpc2hlZCBPZmZpY2UgVmlzaXQsIDE4IGFuZCBVcCJdCiAgICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJEaXNjaGFyZ2UgU2VydmljZXMgTnVyc2luZyBGYWNpbGl0eSJdCiAgICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJOdXJzaW5nIEZhY2lsaXR5IFZpc2l0Il0KICAgICAgdW5pb24gW0VuY291bnRlcjogIkNhcmUgU2VydmljZXMgaW4gTG9uZyBUZXJtIFJlc2lkZW50aWFsIEZhY2lsaXR5Il0KICAgICAgdW5pb24gW0VuY291bnRlcjogIlByZXZlbnRpdmUgQ2FyZSBTZXJ2aWNlcyBJbml0aWFsIE9mZmljZSBWaXNpdCwgMTggYW5kIFVwIl0KICAgICAgdW5pb24gW0VuY291bnRlcjogIkFubnVhbCBXZWxsbmVzcyBWaXNpdCJdCiAgICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJIb21lIEhlYWx0aGNhcmUgU2VydmljZXMiXQogICAgICB1bmlvbiBbRW5jb3VudGVyOiAiVGVsZXBob25lIFZpc2l0cyJdCiAgICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJWaXJ0dWFsIEVuY291bnRlciJdCiAgICAgIHVuaW9uICggW0VuY291bnRlcl0gRQogICAgICAgICAgd2hlcmUgZXhpc3RzICggKCBFLnR5cGUgKSBUCiAgICAgICAgICAgICAgd2hlcmUgVCB+ICJPZmZpY2Ugb3Igb3RoZXIgb3V0cGF0aWVudCB2aXNpdCBmb3IgdGhlIGV2YWx1YXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgYW4gZXN0YWJsaXNoZWQgcGF0aWVudCB0aGF0IG1heSBub3QgcmVxdWlyZSB0aGUgcHJlc2VuY2Ugb2YgYSBwaHlzaWNpYW4gb3Igb3RoZXIgcXVhbGlmaWVkIGhlYWx0aCBjYXJlIHByb2Zlc3Npb25hbCIKICAgICAgICAgICkKICAgICAgKQogICkuaXNFbmNvdW50ZXJQZXJmb3JtZWQgKCApICkgVmFsaWRFbmNvdW50ZXJzCiAgICB3aGVyZSBWYWxpZEVuY291bnRlcnMucGVyaW9kIGR1cmluZyAiTWVhc3VyZW1lbnQgUGVyaW9kIgoKZGVmaW5lICJEZW5vbWluYXRvciI6CiAgIkluaXRpYWwgUG9wdWxhdGlvbiIKCmRlZmluZSAiRGVub21pbmF0b3IgRXhjbHVzaW9ucyI6CiAgSG9zcGljZS4iSGFzIEhvc3BpY2UgU2VydmljZXMiCiAgICBvciBQYWxsaWF0aXZlQ2FyZS4iSGFzIFBhbGxpYXRpdmUgQ2FyZSBpbiB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIgoKZGVmaW5lICJOdW1lcmF0b3IgMSI6CiAgZXhpc3RzICJTYW1lIEhpZ2ggUmlzayBNZWRpY2F0aW9ucyBPcmRlcmVkIG9uIERpZmZlcmVudCBEYXlzIgogICAgb3IgIlR3byBIaWdoIFJpc2sgTWVkaWNhdGlvbnMgd2l0aCBQcm9sb25nZWQgRHVyYXRpb24iCiAgICBvciAiSGlnaCBSaXNrIE1lZGljYXRpb25zIHdpdGggQXZlcmFnZSBEYWlseSBEb3NlIENyaXRlcmlhIgoKZGVmaW5lICJTYW1lIEhpZ2ggUmlzayBNZWRpY2F0aW9ucyBPcmRlcmVkIG9uIERpZmZlcmVudCBEYXlzIjoKICAoIFtNZWRpY2F0aW9uUmVxdWVzdDogIlBvdGVudGlhbGx5IEhhcm1mdWwgQW50aWhpc3RhbWluZXMgZm9yIE9sZGVyIEFkdWx0cyJdICkubW9yZVRoYW5PbmVPcmRlciAoICkKICAgIHVuaW9uICggW01lZGljYXRpb25SZXF1ZXN0OiAiUG90ZW50aWFsbHkgSGFybWZ1bCBBbnRpcGFya2luc29uaWFuIEFnZW50cyBmb3IgT2xkZXIgQWR1bHRzIl0gKS5tb3JlVGhhbk9uZU9yZGVyICggKQogICAgdW5pb24gKCBbTWVkaWNhdGlvblJlcXVlc3Q6ICJQb3RlbnRpYWxseSBIYXJtZnVsIEdhc3Ryb2ludGVzdGluYWwgQW50aXNwYXNtb2RpY3MgZm9yIE9sZGVyIEFkdWx0cyJdICkubW9yZVRoYW5PbmVPcmRlciAoICkKICAgIHVuaW9uICggW01lZGljYXRpb25SZXF1ZXN0OiAiRGlweXJpZGFtb2xlIE1lZGljYXRpb25zIl0gKS5tb3JlVGhhbk9uZU9yZGVyICggKQogICAgdW5pb24gKCBbTWVkaWNhdGlvblJlcXVlc3Q6ICJHdWFuZmFjaW5lIE1lZGljYXRpb25zIl0gKS5tb3JlVGhhbk9uZU9yZGVyICggKQogICAgdW5pb24gKCBbTWVkaWNhdGlvblJlcXVlc3Q6ICJOaWZlZGlwaW5lIE1lZGljYXRpb25zIl0gKS5tb3JlVGhhbk9uZU9yZGVyICggKQogICAgdW5pb24gKCBbTWVkaWNhdGlvblJlcXVlc3Q6ICJQb3RlbnRpYWxseSBIYXJtZnVsIEFudGlkZXByZXNzYW50cyBmb3IgT2xkZXIgQWR1bHRzIl0gKS5tb3JlVGhhbk9uZU9yZGVyICggKQogICAgdW5pb24gKCBbTWVkaWNhdGlvblJlcXVlc3Q6ICJQb3RlbnRpYWxseSBIYXJtZnVsIEJhcmJpdHVyYXRlcyBmb3IgT2xkZXIgQWR1bHRzIl0gKS5tb3JlVGhhbk9uZU9yZGVyICggKQogICAgdW5pb24gKCBbTWVkaWNhdGlvblJlcXVlc3Q6ICJlcmdvbG9pZCBtZXN5bGF0ZXMsIFVTUCAxIE1HIE9yYWwgVGFibGV0Il0gKS5tb3JlVGhhbk9uZU9yZGVyICggKQogICAgdW5pb24gKCBbTWVkaWNhdGlvblJlcXVlc3Q6ICJNZXByb2JhbWF0ZSBNZWRpY2F0aW9ucyJdICkubW9yZVRoYW5PbmVPcmRlciAoICkKICAgIHVuaW9uICggW01lZGljYXRpb25SZXF1ZXN0OiAiUG90ZW50aWFsbHkgSGFybWZ1bCBFc3Ryb2dlbnMgZm9yIE9sZGVyIEFkdWx0cyJdICkubW9yZVRoYW5PbmVPcmRlciAoICkKICAgIHVuaW9uICggW01lZGljYXRpb25SZXF1ZXN0OiAiUG90ZW50aWFsbHkgSGFybWZ1bCBTdWxmb255bHVyZWFzIGZvciBPbGRlciBBZHVsdHMiXSApLm1vcmVUaGFuT25lT3JkZXIgKCApCiAgICB1bmlvbiAoIFtNZWRpY2F0aW9uUmVxdWVzdDogIkRlc2ljY2F0ZWQgVGh5cm9pZCBNZWRpY2F0aW9ucyJdICkubW9yZVRoYW5PbmVPcmRlciAoICkKICAgIHVuaW9uICggW01lZGljYXRpb25SZXF1ZXN0OiAiUG90ZW50aWFsbHkgSGFybWZ1bCBOb25iZW56b2RpYXplcGluZSBIeXBub3RpY3MgZm9yIE9sZGVyIEFkdWx0cyJdICkubW9yZVRoYW5PbmVPcmRlciAoICkKICAgIHVuaW9uICggW01lZGljYXRpb25SZXF1ZXN0OiAiUG90ZW50aWFsbHkgSGFybWZ1bCBTa2VsZXRhbCBNdXNjbGUgUmVsYXhhbnRzIGZvciBPbGRlciBBZHVsdHMiXSApLm1vcmVUaGFuT25lT3JkZXIgKCApCiAgICB1bmlvbiAoIFtNZWRpY2F0aW9uUmVxdWVzdDogIlBvdGVudGlhbGx5IEhhcm1mdWwgUGFpbiBNZWRpY2F0aW9ucyBmb3IgT2xkZXIgQWR1bHRzIl0gKS5tb3JlVGhhbk9uZU9yZGVyICggKQogICAgdW5pb24gKCBbTWVkaWNhdGlvblJlcXVlc3Q6ICJNZWdlc3Ryb2wgTWVkaWNhdGlvbnMiXSApLm1vcmVUaGFuT25lT3JkZXIgKCApCiAgICB1bmlvbiAoIFtNZWRpY2F0aW9uUmVxdWVzdDogIk1lcGVyaWRpbmUgTWVkaWNhdGlvbnMiXSApLm1vcmVUaGFuT25lT3JkZXIgKCApCgpkZWZpbmUgIlR3byBIaWdoIFJpc2sgTWVkaWNhdGlvbnMgd2l0aCBQcm9sb25nZWQgRHVyYXRpb24iOgogIFN1bSgoKFtNZWRpY2F0aW9uUmVxdWVzdDogIlBvdGVudGlhbGx5IEhhcm1mdWwgQW50aWluZmVjdGl2ZXMgZm9yIE9sZGVyIEFkdWx0cyJdKS5tb3JlVGhhbk9uZU9yZGVyKCkpIEFudGlJbmZlY3RpdmVzCiAgICAgIGxldCBEYXlzU3VwcGx5OiBBbnRpSW5mZWN0aXZlcy5tZWRpY2F0aW9uUmVxdWVzdFBlcmlvZEluRGF5cygpCiAgICAgIHJldHVybiBhbGwgRGF5c1N1cHBseQogICkgPiA5MAoKZGVmaW5lICJIaWdoIFJpc2sgTWVkaWNhdGlvbnMgd2l0aCBBdmVyYWdlIERhaWx5IERvc2UgQ3JpdGVyaWEiOgogIGV4aXN0cyAoICggW01lZGljYXRpb25SZXF1ZXN0OiAiRGlnb3hpbiBNZWRpY2F0aW9ucyJdIERpZ294aW5PcmRlcmVkCiAgICAgICAgd2hlcmUgRGlnb3hpbk9yZGVyZWQuYXZlcmFnZURhaWx5RG9zZSAoICkgPiAwLjEyNSAnbWcvZCcKICAgICkubW9yZVRoYW5PbmVPcmRlciAoICkKICApCiAgICBvciBleGlzdHMgKCAoIFtNZWRpY2F0aW9uUmVxdWVzdDogIkRveGVwaW4gTWVkaWNhdGlvbnMiXSBEb3hlcGluT3JkZXJlZAogICAgICAgICAgd2hlcmUgRG94ZXBpbk9yZGVyZWQuYXZlcmFnZURhaWx5RG9zZSAoICkgPiA2ICdtZy9kJwogICAgICApLm1vcmVUaGFuT25lT3JkZXIgKCApCiAgICApCgpkZWZpbmUgIk51bWVyYXRvciAyIjoKICAoICJNb3JlIHRoYW4gT25lIEFudGlwc3ljaG90aWMgT3JkZXIiCiAgICAgIGFuZCAoIG5vdCBleGlzdHMgKCAoICJTY2hpem9waHJlbmlhIERpYWdub3NpcyIKICAgICAgICAgICAgdW5pb24gIkJpcG9sYXIgRGlzb3JkZXIgRGlhZ25vc2lzIiApIEFudGlwc3ljaG90aWNUcmVhdGVkRGlhZ25vc2VzCiAgICAgICAgICAgIHdoZXJlIEFudGlwc3ljaG90aWNUcmVhdGVkRGlhZ25vc2VzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgSW50ZXJ2YWxbc3RhcnQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIgLSAxIHllYXIsICJBbnRpcHN5Y2hvdGljIEluZGV4IFByZXNjcmlwdGlvbiBTdGFydCBEYXRlIl0KICAgICAgICApCiAgICAgICkKICApCiAgICBvciAoICJNb3JlIHRoYW4gT25lIEJlbnpvZGlhemVwaW5lIE9yZGVyIgogICAgICAgIGFuZCAoIG5vdCBleGlzdHMgKCAoICJTZWl6dXJlIERpc29yZGVyIERpYWdub3NpcyIKICAgICAgICAgICAgICB1bmlvbiAiUkVNIFNsZWVwIEJlaGF2aW9yIERpc29yZGVyIERpYWdub3NpcyIKICAgICAgICAgICAgICB1bmlvbiAiQmVuem9kaWF6ZXBpbmUgV2l0aGRyYXdhbCBEaWFnbm9zaXMiCiAgICAgICAgICAgICAgdW5pb24gIkFsY29ob2wgV2l0aGRyYXdhbCBEaWFnbm9zaXMiCiAgICAgICAgICAgICAgdW5pb24gIkdlbmVyYWxpemVkIEFueGlldHkgRGlzb3JkZXIgRGlhZ25vc2lzIiApIEJlbnpvZGlhemVwaW5lVHJlYXRlZERpYWdub3NlcwogICAgICAgICAgICAgIHdoZXJlIEJlbnpvZGlhemVwaW5lVHJlYXRlZERpYWdub3Nlcy5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIG92ZXJsYXBzIEludGVydmFsW3N0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiIC0gMSB5ZWFyLCAiQmVuem9kaWF6ZXBpbmUgSW5kZXggUHJlc2NyaXB0aW9uIFN0YXJ0IERhdGUiXQogICAgICAgICAgKQogICAgICAgICkKICAgICkKCmRlZmluZSAiTW9yZSB0aGFuIE9uZSBBbnRpcHN5Y2hvdGljIE9yZGVyIjoKICBleGlzdHMgKCBbTWVkaWNhdGlvblJlcXVlc3Q6ICJQb3RlbnRpYWxseSBIYXJtZnVsIEFudGlwc3ljaG90aWNzIGZvciBPbGRlciBBZHVsdHMiXSApLm1vcmVUaGFuT25lT3JkZXIgKCApCgpkZWZpbmUgIk1vcmUgdGhhbiBPbmUgQmVuem9kaWF6ZXBpbmUgT3JkZXIiOgogIGV4aXN0cyAoIFtNZWRpY2F0aW9uUmVxdWVzdDogIlBvdGVudGlhbGx5IEhhcm1mdWwgQmVuem9kaWF6ZXBpbmVzIGZvciBPbGRlciBBZHVsdHMiXSApLm1vcmVUaGFuT25lT3JkZXIgKCApCgpkZWZpbmUgIkJpcG9sYXIgRGlzb3JkZXIgRGlhZ25vc2lzIjoKICAoIFtDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zOiAiQmlwb2xhciBEaXNvcmRlciJdCiAgICAgIHVuaW9uIFtDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXM6ICJCaXBvbGFyIERpc29yZGVyIl0KICApLnZlcmlmaWVkICggKQoKZGVmaW5lICJTY2hpem9waHJlbmlhIERpYWdub3NpcyI6CiAgLy8gW0UtMTNdIGJhc2UgRkhJUi5Db25kaXRpb24gcmV0cmlldmUgKGRlZmVjdC10cmFja2luZy9lbmdpbmUtaXNzdWVzLm1kIEUtMTMpCiAgLy8gT3JpZ2luYWw6CiAgLy8gKCBbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuczogIlNjaGl6b3BocmVuaWEiXQogIC8vICAgICB1bmlvbiBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzOiAiU2NoaXpvcGhyZW5pYSJdCiAgKCBbQ29uZGl0aW9uOiAiU2NoaXpvcGhyZW5pYSJdCiAgKS52ZXJpZmllZCAoICkKCmRlZmluZSAiU2VpenVyZSBEaXNvcmRlciBEaWFnbm9zaXMiOgogIC8vIFtFLTEzXSBiYXNlIEZISVIuQ29uZGl0aW9uIHJldHJpZXZlIChkZWZlY3QtdHJhY2tpbmcvZW5naW5lLWlzc3Vlcy5tZCBFLTEzKQogIC8vIE9yaWdpbmFsOgogIC8vICggW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJTZWl6dXJlIERpc29yZGVyIl0KICAvLyAgICAgdW5pb24gW0NvbmRpdGlvbkVuY291bnRlckRpYWdub3NpczogIlNlaXp1cmUgRGlzb3JkZXIiXQogICggW0NvbmRpdGlvbjogIlNlaXp1cmUgRGlzb3JkZXIiXQogICkudmVyaWZpZWQgKCApCgpkZWZpbmUgIlJFTSBTbGVlcCBCZWhhdmlvciBEaXNvcmRlciBEaWFnbm9zaXMiOgogICggW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJSRU0gU2xlZXAgQmVoYXZpb3IgRGlzb3JkZXIiXQogICAgICB1bmlvbiBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzOiAiUkVNIFNsZWVwIEJlaGF2aW9yIERpc29yZGVyIl0KICApLnZlcmlmaWVkICggKQoKZGVmaW5lICJCZW56b2RpYXplcGluZSBXaXRoZHJhd2FsIERpYWdub3NpcyI6CiAgKCBbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuczogIkJlbnpvZGlhemVwaW5lIFdpdGhkcmF3YWwiXQogICAgICB1bmlvbiBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzOiAiQmVuem9kaWF6ZXBpbmUgV2l0aGRyYXdhbCJdCiAgKS52ZXJpZmllZCAoICkKCmRlZmluZSAiQWxjb2hvbCBXaXRoZHJhd2FsIERpYWdub3NpcyI6CiAgKCBbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuczogIkFsY29ob2wgV2l0aGRyYXdhbCJdCiAgICAgIHVuaW9uIFtDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXM6ICJBbGNvaG9sIFdpdGhkcmF3YWwiXQogICkudmVyaWZpZWQgKCApCgpkZWZpbmUgIkdlbmVyYWxpemVkIEFueGlldHkgRGlzb3JkZXIgRGlhZ25vc2lzIjoKICAoIFtDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zOiAiR2VuZXJhbGl6ZWQgQW54aWV0eSBEaXNvcmRlciJdCiAgICAgIHVuaW9uIFtDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXM6ICJHZW5lcmFsaXplZCBBbnhpZXR5IERpc29yZGVyIl0KICApLnZlcmlmaWVkICggKQoKZGVmaW5lICJBbnRpcHN5Y2hvdGljIEluZGV4IFByZXNjcmlwdGlvbiBTdGFydCBEYXRlIjoKICBGaXJzdCgoKFtNZWRpY2F0aW9uUmVxdWVzdDogIlBvdGVudGlhbGx5IEhhcm1mdWwgQW50aXBzeWNob3RpY3MgZm9yIE9sZGVyIEFkdWx0cyJdKS5pc01lZGljYXRpb25PcmRlcigpKSBBbnRpcHN5Y2hvdGljTWVkaWNhdGlvbgogICAgICB3aGVyZSBBbnRpcHN5Y2hvdGljTWVkaWNhdGlvbi5hdXRob3JlZE9uIGR1cmluZyAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICByZXR1cm4gRkhJUkhlbHBlcnMuVG9EYXRlVGltZShBbnRpcHN5Y2hvdGljTWVkaWNhdGlvbi5hdXRob3JlZE9uKQogICAgICBzb3J0IGFzYwogICkKCmRlZmluZSAiQmVuem9kaWF6ZXBpbmUgSW5kZXggUHJlc2NyaXB0aW9uIFN0YXJ0IERhdGUiOgogIEZpcnN0KCgoW01lZGljYXRpb25SZXF1ZXN0OiAiUG90ZW50aWFsbHkgSGFybWZ1bCBCZW56b2RpYXplcGluZXMgZm9yIE9sZGVyIEFkdWx0cyJdKS5pc01lZGljYXRpb25PcmRlcigpKSBCZW56b2RpYXplcGluZU1lZGljYXRpb24KICAgICAgd2hlcmUgQmVuem9kaWF6ZXBpbmVNZWRpY2F0aW9uLmF1dGhvcmVkT24gZHVyaW5nICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAgIHJldHVybiBGSElSSGVscGVycy5Ub0RhdGVUaW1lKEJlbnpvZGlhemVwaW5lTWVkaWNhdGlvbi5hdXRob3JlZE9uKQogICAgICBzb3J0IGFzYwogICkKCmRlZmluZSAiTnVtZXJhdG9yIDMiOgogICJOdW1lcmF0b3IgMiIKICAgIG9yICggIk51bWVyYXRvciAxIgogICAgICAgIGFuZCBub3QgIk51bWVyYXRvciAyIgogICAgKQoKZGVmaW5lICJTREUgRXRobmljaXR5IjoKICBTREUuIlNERSBFdGhuaWNpdHkiCgpkZWZpbmUgIlNERSBQYXllciI6CiAgU0RFLiJTREUgUGF5ZXIiCgpkZWZpbmUgIlNERSBSYWNlIjoKICBTREUuIlNERSBSYWNlIgoKZGVmaW5lICJTREUgU2V4IjoKICBTREUuIlNERSBTZXgiCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIG1vcmVUaGFuT25lT3JkZXIoTWVkaWNhdGlvbiBMaXN0PE1lZGljYXRpb25SZXF1ZXN0Pik6CiAgKCBNZWRpY2F0aW9uLmlzTWVkaWNhdGlvbk9yZGVyICggKSApIE9yZGVyTWVkaWNhdGlvbjEKICAgIHdpdGggKCBNZWRpY2F0aW9uLmlzTWVkaWNhdGlvbk9yZGVyICggKSApIE9yZGVyTWVkaWNhdGlvbjIKICAgICAgc3VjaCB0aGF0ICggT3JkZXJNZWRpY2F0aW9uMS5hdXRob3JlZE9uIGR1cmluZyAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICAgICAgYW5kIE9yZGVyTWVkaWNhdGlvbjEuZGlzcGVuc2VSZXF1ZXN0Lm51bWJlck9mUmVwZWF0c0FsbG93ZWQgPj0gMQogICAgICApCiAgICAgICAgb3IgKCBkYXRlIGZyb20gT3JkZXJNZWRpY2F0aW9uMS5hdXRob3JlZE9uICF+IGRhdGUgZnJvbSBPcmRlck1lZGljYXRpb24yLmF1dGhvcmVkT24KICAgICAgICAgICAgYW5kIE9yZGVyTWVkaWNhdGlvbjEuYXV0aG9yZWRPbiBkdXJpbmcgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICAgICAgYW5kIE9yZGVyTWVkaWNhdGlvbjIuYXV0aG9yZWRPbiBkdXJpbmcgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICApCiAgICAgICAgb3IgKCBkYXRlIGZyb20gT3JkZXJNZWRpY2F0aW9uMS5hdXRob3JlZE9uIH4gZGF0ZSBmcm9tIE9yZGVyTWVkaWNhdGlvbjIuYXV0aG9yZWRPbgogICAgICAgICAgICBhbmQgT3JkZXJNZWRpY2F0aW9uMS5hdXRob3JlZE9uIGR1cmluZyAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICAgICAgICBhbmQgZGF0ZSBmcm9tIHN0YXJ0IG9mIE9yZGVyTWVkaWNhdGlvbjEubWVkaWNhdGlvblJlcXVlc3RQZXJpb2QgKCApICF+IGRhdGUgZnJvbSBzdGFydCBvZiBPcmRlck1lZGljYXRpb24yLm1lZGljYXRpb25SZXF1ZXN0UGVyaW9kICggKQogICAgICAgICAgICBhbmQgc3RhcnQgb2YgT3JkZXJNZWRpY2F0aW9uMS5tZWRpY2F0aW9uUmVxdWVzdFBlcmlvZCAoICkgZHVyaW5nICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAgICAgICAgIGFuZCBzdGFydCBvZiBPcmRlck1lZGljYXRpb24yLm1lZGljYXRpb25SZXF1ZXN0UGVyaW9kICggKSBkdXJpbmcgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICApCiAgICByZXR1cm4gT3JkZXJNZWRpY2F0aW9uMQoKZGVmaW5lIGZsdWVudCBmdW5jdGlvbiBtZWRpY2F0aW9uU3RyZW5ndGhQZXJVbml0KFN0cmVuZ3RoIENvbmNlcHQpOgogIGNhc2UKICAgIHdoZW4gU3RyZW5ndGggfiAiZGlnb3hpbiAwLjA1IE1HL01MIE9yYWwgU29sdXRpb24iIHRoZW4gMC4wNSAnbWcvbUwnCiAgICB3aGVuIFN0cmVuZ3RoIH4gImRpZ294aW4gMC4wNjI1IE1HIE9yYWwgVGFibGV0IiB0aGVuIDAuMDYyNSAnbWcnCiAgICB3aGVuIFN0cmVuZ3RoIH4gIjEgTUwgZGlnb3hpbiAwLjEgTUcvTUwgSW5qZWN0aW9uIiB0aGVuIDAuMSAnbWcvbUwnCiAgICB3aGVuIFN0cmVuZ3RoIH4gImRpZ294aW4gMC4xMjUgTUcgT3JhbCBUYWJsZXQiIHRoZW4gMC4xMjUgJ21nJwogICAgd2hlbiBTdHJlbmd0aCB+ICJkaWdveGluIDAuMjUgTUcgT3JhbCBUYWJsZXQiIHRoZW4gMC4yNSAnbWcnCiAgICB3aGVuIFN0cmVuZ3RoIH4gIjIgTUwgZGlnb3hpbiAwLjI1IE1HL01MIEluamVjdGlvbiIgdGhlbiAwLjI1ICdtZy9tTCcKICAgIHdoZW4gU3RyZW5ndGggfiAiZG94ZXBpbiAzIE1HIE9yYWwgVGFibGV0IiB0aGVuIDMgJ21nJwogICAgd2hlbiBTdHJlbmd0aCB+ICJkb3hlcGluIDYgTUcgT3JhbCBUYWJsZXQiIHRoZW4gNiAnbWcnCiAgICB3aGVuIFN0cmVuZ3RoIH4gImRveGVwaW4gMTAgTUcgT3JhbCBDYXBzdWxlIiB0aGVuIDEwICdtZycKICAgIHdoZW4gU3RyZW5ndGggfiAiZG94ZXBpbiAxMCBNRy9NTCBPcmFsIFNvbHV0aW9uIiB0aGVuIDEwICdtZy9tTCcKICAgIHdoZW4gU3RyZW5ndGggfiAiZG94ZXBpbiAyNSBNRyBPcmFsIENhcHN1bGUiIHRoZW4gMjUgJ21nJwogICAgd2hlbiBTdHJlbmd0aCB+ICJkb3hlcGluIDUwIE1HIE9yYWwgQ2Fwc3VsZSIgdGhlbiA1MCAnbWcnCiAgICB3aGVuIFN0cmVuZ3RoIH4gImRveGVwaW4gNzUgTUcgT3JhbCBDYXBzdWxlIiB0aGVuIDc1ICdtZycKICAgIHdoZW4gU3RyZW5ndGggfiAiZG94ZXBpbiAxMDAgTUcgT3JhbCBDYXBzdWxlIiB0aGVuIDEwMCAnbWcnCiAgICB3aGVuIFN0cmVuZ3RoIH4gImRveGVwaW4gMTUwIE1HIE9yYWwgQ2Fwc3VsZSIgdGhlbiAxNTAgJ21nJyAKICAgIGVsc2UgbnVsbCBlbmQKCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gbWVkaWNhdGlvblJlcXVlc3RQZXJpb2RJbkRheXMoUmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdCk6CiAgUmVxdWVzdCBSCiAgICBsZXQgZG9zYWdlOiBzaW5nbGV0b24gZnJvbSBSLmRvc2FnZUluc3RydWN0aW9uLAogICAgZG9zZUFuZFJhdGU6IHNpbmdsZXRvbiBmcm9tIGRvc2FnZS5kb3NlQW5kUmF0ZSwKICAgIHRpbWluZzogZG9zYWdlLnRpbWluZywKICAgIGZyZXF1ZW5jeTogQ29hbGVzY2UodGltaW5nLnJlcGVhdC5mcmVxdWVuY3lNYXgsIHRpbWluZy5yZXBlYXQuZnJlcXVlbmN5KSwKICAgIHBlcmlvZDogQ01ELiJRdWFudGl0eSIgKCB0aW1pbmcucmVwZWF0LnBlcmlvZCwgdGltaW5nLnJlcGVhdC5wZXJpb2RVbml0ICksCiAgICBkb3NlUmFuZ2U6IGRvc2VBbmRSYXRlLmRvc2UsCiAgICBkb3NlUXVhbnRpdHk6IGRvc2VBbmRSYXRlLmRvc2UsCiAgICBkb3NlOiBDb2FsZXNjZSgKICAgICAgZW5kIG9mIGRvc2VSYW5nZSwgZG9zZVF1YW50aXR5CiAgICApLAogICAgZG9zZXNQZXJEYXk6IENvYWxlc2NlKChDTUQuIlRvRGFpbHkiKGZyZXF1ZW5jeSwgcGVyaW9kKSksIENvdW50KHRpbWluZy5yZXBlYXQudGltZU9mRGF5KSwgMS4wKSwKICAgIGJvdW5kc1BlcmlvZDogdGltaW5nLnJlcGVhdC5ib3VuZHMgYXMgRkhJUi5QZXJpb2QsCiAgICBkYXlzU3VwcGx5OiAoIGNvbnZlcnQgUi5kaXNwZW5zZVJlcXVlc3QuZXhwZWN0ZWRTdXBwbHlEdXJhdGlvbiB0byBkYXlzICkudmFsdWUsCiAgICBxdWFudGl0eTogUi5kaXNwZW5zZVJlcXVlc3QucXVhbnRpdHksCiAgICByZWZpbGxzOiBDb2FsZXNjZShSLmRpc3BlbnNlUmVxdWVzdC5udW1iZXJPZlJlcGVhdHNBbGxvd2VkLCAwKSwKICAgIHN0YXJ0RGF0ZTogQ29hbGVzY2UoZGF0ZSBmcm9tIHN0YXJ0IG9mIGJvdW5kc1BlcmlvZCwgZGF0ZSBmcm9tIFIuYXV0aG9yZWRPbiwgZGF0ZSBmcm9tIHN0YXJ0IG9mIFIuZGlzcGVuc2VSZXF1ZXN0LnZhbGlkaXR5UGVyaW9kKSwKICAgIHRvdGFsRGF5c1N1cHBsaWVkOiBDb2FsZXNjZShkYXlzU3VwcGx5LCBxdWFudGl0eS52YWx1ZSAvKGRvc2UudmFsdWUgKiBkb3Nlc1BlckRheSkpICogKCAxICsgcmVmaWxscyApCiAgICByZXR1cm4gdG90YWxEYXlzU3VwcGxpZWQKCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gYXZlcmFnZURhaWx5RG9zZShNZWRpY2F0aW9uUmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdCk6CiAgTWVkaWNhdGlvblJlcXVlc3QgT3JkZXIKICAgIGxldCBNZWRpY2F0aW9uU3RyZW5ndGg6IE9yZGVyLmdldE1lZGljYXRpb25Db2RlICggKS5tZWRpY2F0aW9uU3RyZW5ndGhQZXJVbml0ICggKSwKICAgIERheXNTdXBwbGllZDogT3JkZXIubWVkaWNhdGlvblJlcXVlc3RQZXJpb2RJbkRheXMgKCApCiAgICByZXR1cm4gaWYgRGF5c1N1cHBsaWVkIGlzIG5vdCBudWxsCiAgICAgIGFuZCAoIE1lZGljYXRpb25TdHJlbmd0aC51bml0ID0gJ21nJwogICAgICAgICAgb3IgKCBNZWRpY2F0aW9uU3RyZW5ndGgudW5pdCA9ICdtZy9tTCcKICAgICAgICAgICAgICBhbmQgT3JkZXIuZGlzcGVuc2VSZXF1ZXN0LnF1YW50aXR5LnVuaXQgPSAnbUwnCiAgICAgICAgICApCiAgICAgICkgdGhlbiAoICggT3JkZXIuZGlzcGVuc2VSZXF1ZXN0LnF1YW50aXR5ICogTWVkaWNhdGlvblN0cmVuZ3RoICkgLyBTeXN0ZW0uUXVhbnRpdHkgeyB2YWx1ZTogRGF5c1N1cHBsaWVkLCB1bml0OiAnZCcgfSApCiAgICAgIGVsc2UgbnVsbA==",
    "url" : "https://madie.cms.gov/Library-CMS156FHIRHighRiskMedsElderly.cql"
  }]
}