Draft dQM CMS Content Implementation Guide
2025.1.0 - CI Build
Draft dQM CMS Content Implementation Guide, published by cqframework. This guide is not an authorized publication; it is the continuous build for version 2025.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cqframework/dqm-content-cms-2025/ and changes regularly. See the Directory of published versions
| Draft as of 2026-09-19 |
{
"resourceType" : "Library",
"id" : "CMS56FHIRFuncStatHipReplacement",
"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 CMS56FHIRFuncStatHipReplacement version '1.1.000'\n\nusing USQualityCore version '0.1.0-cibuild'\nusing USCore version '6.1.0-derived'\nusing FHIR version '4.0.1'\n\ninclude hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers\ninclude hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon\ninclude hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon\ninclude hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements\n\ninclude USQualityCoreCommon version '0.1.0-cibuild' called USQualityCoreCommon\ninclude SupplementalDataElements version '6.1.000' called SDE\ninclude Status version '2.1.000' called Status\ninclude Hospice version '7.1.000' called Hospice\n\ncodesystem "LOINC": 'http://loinc.org'\ncodesystem "CPT": 'http://www.ama-assn.org/go/cpt'\ncodesystem "SNOMEDCT": 'http://snomed.info/sct'\n\nvalueset "Lower Body Fractures Excluding Ankle and Foot": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1178'\nvalueset "Malignant Neoplasms of Lower and Unspecified Limbs": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1180'\nvalueset "Mechanical Complications Excluding Upper Body": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1182'\nvalueset "Office Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001'\nvalueset "Virtual Encounter": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1089'\nvalueset "Outpatient Consultation": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1008'\nvalueset "Partial Arthroplasty of Hip": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1184'\nvalueset "Primary THA Procedure": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1006'\nvalueset "Removal, Revision and Supplement Procedures of the Lower Body and Spine": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1189'\nvalueset "Telephone Visits": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1080'\n\ncode "Activities of daily living score [HOOS]": '72095-3' from "LOINC" display 'Activities of daily living score [HOOS]'\ncode "Dead (finding)": '419099009' from "SNOMEDCT" display 'Dead (finding)'\ncode "Pain score [HOOS]": '72097-9' from "LOINC" display 'Pain score [HOOS]'\ncode "Postoperative follow-up visit, normally included in the surgical package, to indicate that an evaluation and management service was performed during a postoperative period for a reason(s) related to the original procedure": '99024' from "CPT" display 'Postoperative follow-up visit, normally included in the surgical package, to indicate that an evaluation and management service was performed during a postoperative period for a reason(s) related to the original procedure'\ncode "PROMIS-10 Global Mental Health (GMH) score T-score": '71969-0' from "LOINC" display 'PROMIS-10 Global Mental Health (GMH) score T-score'\ncode "PROMIS-10 Global Physical Health (GPH) score T-score": '71971-6' from "LOINC" display 'PROMIS-10 Global Physical Health (GPH) score T-score'\ncode "Quality of life score [HOOS]": '72093-8' from "LOINC" display 'Quality of life score [HOOS]'\ncode "Severe cognitive impairment (finding)": '702956004' from "SNOMEDCT" display 'Severe cognitive impairment (finding)'\ncode "Sport-recreation score [HOOS]": '72094-6' from "LOINC" display 'Sport-recreation score [HOOS]'\ncode "Symptoms score [HOOS]": '72096-1' from "LOINC" display 'Symptoms score [HOOS]'\ncode "Total interval score [HOOSJR]": '82323-7' from "LOINC" display 'Total interval score [HOOSJR]'\ncode "VR-12 Mental component summary (MCS) score - oblique method T-score": '72026-8' from "LOINC" display 'VR-12 Mental component summary (MCS) score - oblique method T-score'\ncode "VR-12 Mental component summary (MCS) score - orthogonal method T-score": '72028-4' from "LOINC" display 'VR-12 Mental component summary (MCS) score - orthogonal method T-score'\ncode "VR-12 Physical component summary (PCS) score - oblique method T-score": '72025-0' from "LOINC" display 'VR-12 Physical component summary (PCS) score - oblique method T-score'\ncode "VR-12 Physical component summary (PCS) score - orthogonal method T-score": '72027-6' from "LOINC" display 'VR-12 Physical component summary (PCS) score - orthogonal method T-score'\n\nparameter "Measurement Period" Interval<DateTime>\n default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)\n\ncontext Patient\n\ndefine "SDE Ethnicity":\n SDE."SDE Ethnicity"\n\ndefine "SDE Payer":\n SDE."SDE Payer"\n\ndefine "SDE Race":\n SDE."SDE Race"\n\ndefine "SDE Sex":\n SDE."SDE Sex"\n\ndefine "Initial Population":\n "Has Qualifying Encounter"\n and exists ( "Total Hip Arthroplasty Procedure" )\n and AgeInYearsAt(date from start of "Measurement Period") >= 19\n\ndefine "Has Qualifying Encounter":\n exists ( ( ( [Encounter: "Outpatient Consultation"]\n union [Encounter: "Office Visit"]\n union ( [Encounter] E\n where exists ( ( E.type ) T\n where T ~ "Postoperative follow-up visit, normally included in the surgical package, to indicate that an evaluation and management service was performed during a postoperative period for a reason(s) related to the original procedure"\n )\n )\n union [Encounter: "Telephone Visits"]\n union [Encounter: "Virtual Encounter"]\n ).isEncounterPerformed ( ) ) ValidEncounters\n where ValidEncounters.period during day of Interval["August 1 Year Prior to the Measurement Period", end of "Measurement Period"]\n )\n\ndefine "August 1 Year Prior to the Measurement Period":\n DateTime((year from start of "Measurement Period" - 1), 8, 1, 0, 0, 0, 0, 0)\n\ndefine "Total Hip Arthroplasty Procedure":\n ( ( [Procedure: "Primary THA Procedure"] ).isProcedurePerformed ( ) ) THAProcedure\n where THAProcedure.performed.toInterval ( ) starts during day of Interval["November 1 Two Years Prior to the Measurement Period", "October 31 Year Prior to the Measurement Period"]\n\ndefine "November 1 Two Years Prior to the Measurement Period":\n DateTime((year from start of "Measurement Period" - 2), 11, 1, 0, 0, 0, 0, 0)\n\ndefine "October 31 Year Prior to the Measurement Period":\n DateTime((year from start of "Measurement Period" - 1), 10, 31, 23, 59, 59, 999, 0)\n\ndefine "Denominator":\n "Initial Population"\n\ndefine "Denominator Exclusions":\n Hospice."Has Hospice Services"\n or "Has Severe Cognitive Impairment"\n or "Has Total Hip Arthroplasty with 1 or More Lower Body Fractures"\n or "Has Partial Hip Arthroplasty Procedure"\n or "Has Revision Hip Arthroplasty Procedure or Implanted Device or Prosthesis Removal Procedure"\n or "Has Malignant Neoplasm of Lower and Unspecified Limbs"\n or "Has Mechanical Complication"\n or "Has More Than One Elective Primary Total Hip Arthroplasty Performed"\n or "Death Within 300 Days of the THA Procedure"\n\ndefine "Has Severe Cognitive Impairment":\n // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n // Original:\n // exists ( [ConditionProblemsHealthConcerns: "Severe cognitive impairment (finding)"]\n // union [ConditionEncounterDiagnosis: "Severe cognitive impairment (finding)"] ) Dementia\n // where Dementia.prevalenceInterval ( ) overlaps day of "Measurement Period"\n exists ( [FHIR.Condition: "Severe cognitive impairment (finding)"] ) Dementia\n where Dementia.prevalenceInterval ( ) overlaps day of "Measurement Period"\n\ndefine "Has Total Hip Arthroplasty with 1 or More Lower Body Fractures":\n exists ( "Total Hip Arthroplasty Procedure" THAProcedure\n with ( // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n // Original:\n // ( [ConditionEncounterDiagnosis: "Lower Body Fractures Excluding Ankle and Foot"]\n // union [ConditionProblemsHealthConcerns: "Lower Body Fractures Excluding Ankle and Foot"] )\n [FHIR.Condition: "Lower Body Fractures Excluding Ankle and Foot"] ) LowerBodyFracture\n such that LowerBodyFracture.prevalenceInterval ( ) starts 48 hours or less on or before start of THAProcedure.performed.toInterval ( )\n and LowerBodyFracture.isVerified ( )\n )\n\ndefine "Has Partial Hip Arthroplasty Procedure":\n exists ( ( ( [Procedure: "Partial Arthroplasty of Hip"] ).isProcedurePerformed ( ) ) PartialTHAProcedure\n with "Total Hip Arthroplasty Procedure" THAProcedure\n such that PartialTHAProcedure.performed.toInterval ( ) during day of THAProcedure.performed.toInterval ( )\n )\n\ndefine "Has Revision Hip Arthroplasty Procedure or Implanted Device or Prosthesis Removal Procedure":\n exists ( "Total Hip Arthroplasty Procedure" THAProcedure\n with ( ( [Procedure: "Removal, Revision and Supplement Procedures of the Lower Body and Spine"] ).isProcedurePerformed ( ) ) RevisionTHAProcedure\n such that RevisionTHAProcedure.performed.toInterval ( ) during day of THAProcedure.performed.toInterval ( )\n )\n\ndefine "Has Malignant Neoplasm of Lower and Unspecified Limbs":\n // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n // Original:\n // exists ( ( [ConditionProblemsHealthConcerns: "Malignant Neoplasms of Lower and Unspecified Limbs"]\n // union [ConditionEncounterDiagnosis: "Malignant Neoplasms of Lower and Unspecified Limbs"] ) MalignantNeoplasm\n exists ( ( [FHIR.Condition: "Malignant Neoplasms of Lower and Unspecified Limbs"] ) MalignantNeoplasm\n with "Total Hip Arthroplasty Procedure" THAProcedure\n such that MalignantNeoplasm.prevalenceInterval ( ) overlaps day of THAProcedure.performed.toInterval ( )\n and MalignantNeoplasm.isVerified ( )\n )\n\ndefine "Has Mechanical Complication":\n // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n // Original:\n // exists ( ( [ConditionEncounterDiagnosis: "Mechanical Complications Excluding Upper Body"]\n // union [ConditionProblemsHealthConcerns: "Mechanical Complications Excluding Upper Body"] ) MechanicalComplications\n exists ( ( [FHIR.Condition: "Mechanical Complications Excluding Upper Body"] ) MechanicalComplications\n with "Total Hip Arthroplasty Procedure" THAProcedure\n such that MechanicalComplications.prevalenceInterval ( ) overlaps day of THAProcedure.performed.toInterval ( )\n and MechanicalComplications.isVerified ( )\n )\n\ndefine "Has More Than One Elective Primary Total Hip Arthroplasty Performed":\n exists ( "Total Hip Arthroplasty Procedure" THAProcedure\n with ( ( [Procedure: "Primary THA Procedure"] ).isProcedurePerformed ( ) ) ElectiveTHAProcedure\n such that THAProcedure.id !~ ElectiveTHAProcedure.id\n and start of ElectiveTHAProcedure.performed.toInterval ( ) during day of Interval[( start of THAProcedure.performed.toInterval ( ) ) - 1 year, ( start of THAProcedure.performed.toInterval ( ) ) + 1 year]\n )\n\ndefine "Death Within 300 Days of the THA Procedure":\n exists "Total Hip Arthroplasty Procedure" THAProcedure\n where date from Patient.deceased during day of Interval[date from start of THAProcedure.performed.toInterval ( ), date from start of THAProcedure.performed.toInterval ( ) + 300 days]\n\ndefine "Numerator":\n ( "Has THA with Initial and Follow Up HOOS Assessments" )\n or ( "Has THA with Initial and Follow Up HOOSJr Assessments" )\n or ( "Has THA with Initial and Follow Up PROMIS10 Assessments" )\n or ( "Has THA with Initial and Follow Up VR12 Oblique Assessments" )\n or ( "Has THA with Initial and Follow Up VR12 Orthogonal Assessments" )\n\ndefine "Has THA with Initial and Follow Up HOOS Assessments":\n exists ( ( "Total Hip Arthroplasty Procedure" THAProcedure\n return THAProcedure.performed.toInterval ( ) ) TotalHip\n with "Date HOOS Total Assessment Completed" InitialHipAssessmentHOOS\n such that TotalHip starts 90 days or less on or after day of InitialHipAssessmentHOOS\n with "Date HOOS Total Assessment Completed" FollowUpHipAssessmentHOOS\n such that date from FollowUpHipAssessmentHOOS during day of Interval[date from end of TotalHip + 300 days, date from end of TotalHip + 425 days]\n )\n\ndefine "Date HOOS Total Assessment Completed":\n from\n ( ( [ObservationScreeningAssessment: "Quality of life score [HOOS]"] ).isAssessmentPerformed ( ) ) HOOSLifeQuality,\n ( ( [ObservationScreeningAssessment: "Sport-recreation score [HOOS]"] ).isAssessmentPerformed ( ) ) HOOSSport,\n ( ( [ObservationScreeningAssessment: "Activities of daily living score [HOOS]"] ).isAssessmentPerformed ( ) ) HOOSActivityScore,\n ( ( [ObservationScreeningAssessment: "Symptoms score [HOOS]"] ).isAssessmentPerformed ( ) ) HOOSSymptoms,\n ( ( [ObservationScreeningAssessment: "Pain score [HOOS]"] ).isAssessmentPerformed ( ) ) HOOSPain\n let HOOSLifeQualityDate: date from start of HOOSLifeQuality.effective.toInterval ( ),\n HOOSSportDate: date from start of HOOSSport.effective.toInterval ( ),\n HOOSActivityScoreDate: date from start of HOOSActivityScore.effective.toInterval ( ),\n HOOSSymptomsDate: date from start of HOOSSymptoms.effective.toInterval ( ),\n HOOSPainDate: date from start of HOOSPain.effective.toInterval ( )\n where HOOSLifeQualityDate same day as HOOSSportDate\n and ( HOOSSport as ObservationScreeningAssessment ).value is not null\n and HOOSLifeQualityDate same day as HOOSActivityScoreDate\n and ( HOOSActivityScore as ObservationScreeningAssessment ).value is not null\n and HOOSLifeQualityDate same day as HOOSSymptomsDate\n and ( HOOSSymptoms as ObservationScreeningAssessment ).value is not null\n and HOOSLifeQualityDate same day as HOOSPainDate\n and ( HOOSPain as ObservationScreeningAssessment ).value is not null\n and ( HOOSLifeQuality as ObservationScreeningAssessment ).value is not null\n return Max({ HOOSLifeQualityDate, HOOSSportDate, HOOSActivityScoreDate, HOOSSymptomsDate, HOOSPainDate })\n\ndefine "Has THA with Initial and Follow Up HOOSJr Assessments":\n exists ( ( "Total Hip Arthroplasty Procedure" THAProcedure\n return THAProcedure.performed.toInterval ( ) ) TotalHip\n with "Date HOOSJr Total Assessment Completed" InitialHipAssessment\n such that TotalHip starts 90 days or less on or after day of InitialHipAssessment\n with "Date HOOSJr Total Assessment Completed" FollowUpHipAssessment\n such that date from FollowUpHipAssessment during day of Interval[date from end of TotalHip + 300 days, date from end of TotalHip + 425 days]\n )\n\ndefine "Date HOOSJr Total Assessment Completed":\n ( ( ( [ObservationScreeningAssessment: "Total interval score [HOOSJR]"] ).isAssessmentPerformed ( ) ) HOOSJr\n where ( HOOSJr as ObservationScreeningAssessment ).value is not null ) DocumentedHOOSJr\n return date from start of DocumentedHOOSJr.effective.toInterval ( )\n\ndefine "Has THA with Initial and Follow Up PROMIS10 Assessments":\n exists ( ( "Total Hip Arthroplasty Procedure" THAProcedure\n return THAProcedure.performed.toInterval ( ) ) TotalHip\n with "Date PROMIS10 Total Assessment Completed" InitialHipAssessmentPROMIS10\n such that TotalHip starts 90 days or less on or after day of InitialHipAssessmentPROMIS10\n with "Date PROMIS10 Total Assessment Completed" FollowUpHipAssessmentPROMIS10\n such that date from FollowUpHipAssessmentPROMIS10 during day of Interval[date from end of TotalHip + 300 days, date from end of TotalHip + 425 days]\n )\n\ndefine "Date PROMIS10 Total Assessment Completed":\n from\n ( ( [ObservationScreeningAssessment: "PROMIS-10 Global Mental Health (GMH) score T-score"] ).isAssessmentPerformed ( ) ) PROMIS10MentalScore,\n ( ( [ObservationScreeningAssessment: "PROMIS-10 Global Physical Health (GPH) score T-score"] ).isAssessmentPerformed ( ) ) PROMIS10PhysicalScore\n let PROMIS10MentalScoreDate: date from start of PROMIS10MentalScore.effective.toInterval ( ),\n PROMIS10PhysicalScoreDate: date from start of PROMIS10PhysicalScore.effective.toInterval ( )\n where PROMIS10MentalScoreDate same day as PROMIS10PhysicalScoreDate\n and ( PROMIS10PhysicalScore as ObservationScreeningAssessment ).value is not null\n and ( PROMIS10MentalScore as ObservationScreeningAssessment ).value is not null\n return Max({ PROMIS10MentalScoreDate, PROMIS10PhysicalScoreDate })\n\ndefine "Has THA with Initial and Follow Up VR12 Oblique Assessments":\n exists ( ( "Total Hip Arthroplasty Procedure" THAProcedure\n return THAProcedure.performed.toInterval ( ) ) TotalHip\n with "Date VR12 Oblique Total Assessment Completed" InitialHipAssessmentOblique\n such that TotalHip starts 90 days or less on or after day of InitialHipAssessmentOblique\n with "Date VR12 Oblique Total Assessment Completed" FollowUpHipAssessmentOblique\n such that date from FollowUpHipAssessmentOblique during day of Interval[date from end of TotalHip + 300 days, date from end of TotalHip + 425 days]\n )\n\ndefine "Date VR12 Oblique Total Assessment Completed":\n from\n ( ( [ObservationScreeningAssessment: "VR-12 Mental component summary (MCS) score - oblique method T-score"] ).isAssessmentPerformed ( ) ) VR12MentalAssessment,\n ( ( [ObservationScreeningAssessment: "VR-12 Physical component summary (PCS) score - oblique method T-score"] ).isAssessmentPerformed ( ) ) VR12PhysicalAssessment\n let VR12MentalAssessmentDate: date from start of VR12MentalAssessment.effective.toInterval ( ),\n VR12PhysicalAssessmentDate: date from start of VR12PhysicalAssessment.effective.toInterval ( )\n where VR12MentalAssessmentDate same day as VR12PhysicalAssessmentDate\n and ( VR12MentalAssessment as ObservationScreeningAssessment ).value is not null\n and ( VR12PhysicalAssessment as ObservationScreeningAssessment ).value is not null\n return Max({ VR12MentalAssessmentDate, VR12PhysicalAssessmentDate })\n\ndefine "Has THA with Initial and Follow Up VR12 Orthogonal Assessments":\n exists ( ( "Total Hip Arthroplasty Procedure" THAProcedure\n return THAProcedure.performed.toInterval ( ) ) TotalHip\n with "Date VR12 Orthogonal Total Assessment Completed" InitialHipAssessmentOrthogonal\n such that TotalHip starts 90 days or less on or after day of InitialHipAssessmentOrthogonal\n with "Date VR12 Orthogonal Total Assessment Completed" FollowUpHipAssessmentOrthogonal\n such that date from FollowUpHipAssessmentOrthogonal during day of Interval[date from end of TotalHip + 300 days, date from end of TotalHip + 425 days]\n )\n\ndefine "Date VR12 Orthogonal Total Assessment Completed":\n from\n ( ( [ObservationScreeningAssessment: "VR-12 Mental component summary (MCS) score - orthogonal method T-score"] ).isAssessmentPerformed ( ) ) VR12MentalAssessment,\n ( ( [ObservationScreeningAssessment: "VR-12 Physical component summary (PCS) score - orthogonal method T-score"] ).isAssessmentPerformed ( ) ) VR12PhysicalAssessment\n let VR12MentalAssessmentDate: date from start of VR12MentalAssessment.effective.toInterval ( ),\n VR12PhysicalAssessmentDate: date from start of VR12PhysicalAssessment.effective.toInterval ( )\n where VR12MentalAssessmentDate same day as VR12PhysicalAssessmentDate\n and ( VR12MentalAssessment as ObservationScreeningAssessment ).value is not null\n and ( VR12PhysicalAssessment as ObservationScreeningAssessment ).value is not null\n return Max({ VR12MentalAssessmentDate, VR12PhysicalAssessmentDate })\n \n/*\n@note: When possible, this function should be migrated to QICoreCommon.\n@description: Returns true if the given Condition has a verification status of "confirmed", "unconfirmed", "provisional", or "differential"\n*/\n\n\ndefine fluent function isVerified(condition Choice<ConditionEncounterDiagnosis, ConditionProblemsHealthConcerns>):\n condition.verificationStatus is not null implies ( condition.verificationStatus ~ Status."confirmed"\n or condition.verificationStatus ~ Status."unconfirmed"\n or condition.verificationStatus ~ Status."provisional"\n or condition.verificationStatus ~ Status."differential"\n )</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/CMS56FHIRFuncStatHipReplacement",
"version" : "1.1.000",
"name" : "CMS56FHIRFuncStatHipReplacement",
"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" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVM1NkZISVJGdW5jU3RhdEhpcFJlcGxhY2VtZW50IHZlcnNpb24gJzEuMS4wMDAnCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHMgdmVyc2lvbiAnNi4xLjAwMCcgY2FsbGVkIFNERQppbmNsdWRlIFN0YXR1cyB2ZXJzaW9uICcyLjEuMDAwJyBjYWxsZWQgU3RhdHVzCmluY2x1ZGUgSG9zcGljZSB2ZXJzaW9uICc3LjEuMDAwJyBjYWxsZWQgSG9zcGljZQoKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiQ1BUIjogJ2h0dHA6Ly93d3cuYW1hLWFzc24ub3JnL2dvL2NwdCcKY29kZXN5c3RlbSAiU05PTUVEQ1QiOiAnaHR0cDovL3Nub21lZC5pbmZvL3NjdCcKCnZhbHVlc2V0ICJMb3dlciBCb2R5IEZyYWN0dXJlcyBFeGNsdWRpbmcgQW5rbGUgYW5kIEZvb3QiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTE3OCcKdmFsdWVzZXQgIk1hbGlnbmFudCBOZW9wbGFzbXMgb2YgTG93ZXIgYW5kIFVuc3BlY2lmaWVkIExpbWJzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExODAnCnZhbHVlc2V0ICJNZWNoYW5pY2FsIENvbXBsaWNhdGlvbnMgRXhjbHVkaW5nIFVwcGVyIEJvZHkiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTE4MicKdmFsdWVzZXQgIk9mZmljZSBWaXNpdCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAwMScKdmFsdWVzZXQgIlZpcnR1YWwgRW5jb3VudGVyIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDg5Jwp2YWx1ZXNldCAiT3V0cGF0aWVudCBDb25zdWx0YXRpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMDgnCnZhbHVlc2V0ICJQYXJ0aWFsIEFydGhyb3BsYXN0eSBvZiBIaXAiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTE4NCcKdmFsdWVzZXQgIlByaW1hcnkgVEhBIFByb2NlZHVyZSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xOTguMTIuMTAwNicKdmFsdWVzZXQgIlJlbW92YWwsIFJldmlzaW9uIGFuZCBTdXBwbGVtZW50IFByb2NlZHVyZXMgb2YgdGhlIExvd2VyIEJvZHkgYW5kIFNwaW5lIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExODknCnZhbHVlc2V0ICJUZWxlcGhvbmUgVmlzaXRzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDgwJwoKY29kZSAiQWN0aXZpdGllcyBvZiBkYWlseSBsaXZpbmcgc2NvcmUgW0hPT1NdIjogJzcyMDk1LTMnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdBY3Rpdml0aWVzIG9mIGRhaWx5IGxpdmluZyBzY29yZSBbSE9PU10nCmNvZGUgIkRlYWQgKGZpbmRpbmcpIjogJzQxOTA5OTAwOScgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0RlYWQgKGZpbmRpbmcpJwpjb2RlICJQYWluIHNjb3JlIFtIT09TXSI6ICc3MjA5Ny05JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnUGFpbiBzY29yZSBbSE9PU10nCmNvZGUgIlBvc3RvcGVyYXRpdmUgZm9sbG93LXVwIHZpc2l0LCBub3JtYWxseSBpbmNsdWRlZCBpbiB0aGUgc3VyZ2ljYWwgcGFja2FnZSwgdG8gaW5kaWNhdGUgdGhhdCBhbiBldmFsdWF0aW9uIGFuZCBtYW5hZ2VtZW50IHNlcnZpY2Ugd2FzIHBlcmZvcm1lZCBkdXJpbmcgYSBwb3N0b3BlcmF0aXZlIHBlcmlvZCBmb3IgYSByZWFzb24ocykgcmVsYXRlZCB0byB0aGUgb3JpZ2luYWwgcHJvY2VkdXJlIjogJzk5MDI0JyBmcm9tICJDUFQiIGRpc3BsYXkgJ1Bvc3RvcGVyYXRpdmUgZm9sbG93LXVwIHZpc2l0LCBub3JtYWxseSBpbmNsdWRlZCBpbiB0aGUgc3VyZ2ljYWwgcGFja2FnZSwgdG8gaW5kaWNhdGUgdGhhdCBhbiBldmFsdWF0aW9uIGFuZCBtYW5hZ2VtZW50IHNlcnZpY2Ugd2FzIHBlcmZvcm1lZCBkdXJpbmcgYSBwb3N0b3BlcmF0aXZlIHBlcmlvZCBmb3IgYSByZWFzb24ocykgcmVsYXRlZCB0byB0aGUgb3JpZ2luYWwgcHJvY2VkdXJlJwpjb2RlICJQUk9NSVMtMTAgR2xvYmFsIE1lbnRhbCBIZWFsdGggKEdNSCkgc2NvcmUgVC1zY29yZSI6ICc3MTk2OS0wJyBmcm9tICJMT0lOQyIgZGlzcGxheSAnUFJPTUlTLTEwIEdsb2JhbCBNZW50YWwgSGVhbHRoIChHTUgpIHNjb3JlIFQtc2NvcmUnCmNvZGUgIlBST01JUy0xMCBHbG9iYWwgUGh5c2ljYWwgSGVhbHRoIChHUEgpIHNjb3JlIFQtc2NvcmUiOiAnNzE5NzEtNicgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1BST01JUy0xMCBHbG9iYWwgUGh5c2ljYWwgSGVhbHRoIChHUEgpIHNjb3JlIFQtc2NvcmUnCmNvZGUgIlF1YWxpdHkgb2YgbGlmZSBzY29yZSBbSE9PU10iOiAnNzIwOTMtOCcgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1F1YWxpdHkgb2YgbGlmZSBzY29yZSBbSE9PU10nCmNvZGUgIlNldmVyZSBjb2duaXRpdmUgaW1wYWlybWVudCAoZmluZGluZykiOiAnNzAyOTU2MDA0JyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnU2V2ZXJlIGNvZ25pdGl2ZSBpbXBhaXJtZW50IChmaW5kaW5nKScKY29kZSAiU3BvcnQtcmVjcmVhdGlvbiBzY29yZSBbSE9PU10iOiAnNzIwOTQtNicgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1Nwb3J0LXJlY3JlYXRpb24gc2NvcmUgW0hPT1NdJwpjb2RlICJTeW1wdG9tcyBzY29yZSBbSE9PU10iOiAnNzIwOTYtMScgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1N5bXB0b21zIHNjb3JlIFtIT09TXScKY29kZSAiVG90YWwgaW50ZXJ2YWwgc2NvcmUgW0hPT1NKUl0iOiAnODIzMjMtNycgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1RvdGFsIGludGVydmFsIHNjb3JlIFtIT09TSlJdJwpjb2RlICJWUi0xMiBNZW50YWwgY29tcG9uZW50IHN1bW1hcnkgKE1DUykgc2NvcmUgLSBvYmxpcXVlIG1ldGhvZCBULXNjb3JlIjogJzcyMDI2LTgnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdWUi0xMiBNZW50YWwgY29tcG9uZW50IHN1bW1hcnkgKE1DUykgc2NvcmUgLSBvYmxpcXVlIG1ldGhvZCBULXNjb3JlJwpjb2RlICJWUi0xMiBNZW50YWwgY29tcG9uZW50IHN1bW1hcnkgKE1DUykgc2NvcmUgLSBvcnRob2dvbmFsIG1ldGhvZCBULXNjb3JlIjogJzcyMDI4LTQnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdWUi0xMiBNZW50YWwgY29tcG9uZW50IHN1bW1hcnkgKE1DUykgc2NvcmUgLSBvcnRob2dvbmFsIG1ldGhvZCBULXNjb3JlJwpjb2RlICJWUi0xMiBQaHlzaWNhbCBjb21wb25lbnQgc3VtbWFyeSAoUENTKSBzY29yZSAtIG9ibGlxdWUgbWV0aG9kIFQtc2NvcmUiOiAnNzIwMjUtMCcgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1ZSLTEyIFBoeXNpY2FsIGNvbXBvbmVudCBzdW1tYXJ5IChQQ1MpIHNjb3JlIC0gb2JsaXF1ZSBtZXRob2QgVC1zY29yZScKY29kZSAiVlItMTIgUGh5c2ljYWwgY29tcG9uZW50IHN1bW1hcnkgKFBDUykgc2NvcmUgLSBvcnRob2dvbmFsIG1ldGhvZCBULXNjb3JlIjogJzcyMDI3LTYnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdWUi0xMiBQaHlzaWNhbCBjb21wb25lbnQgc3VtbWFyeSAoUENTKSBzY29yZSAtIG9ydGhvZ29uYWwgbWV0aG9kIFQtc2NvcmUnCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNy0wMS0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgIlNERSBFdGhuaWNpdHkiOgogIFNERS4iU0RFIEV0aG5pY2l0eSIKCmRlZmluZSAiU0RFIFBheWVyIjoKICBTREUuIlNERSBQYXllciIKCmRlZmluZSAiU0RFIFJhY2UiOgogIFNERS4iU0RFIFJhY2UiCgpkZWZpbmUgIlNERSBTZXgiOgogIFNERS4iU0RFIFNleCIKCmRlZmluZSAiSW5pdGlhbCBQb3B1bGF0aW9uIjoKICAiSGFzIFF1YWxpZnlpbmcgRW5jb3VudGVyIgogICAgYW5kIGV4aXN0cyAoICJUb3RhbCBIaXAgQXJ0aHJvcGxhc3R5IFByb2NlZHVyZSIgKQogICAgYW5kIEFnZUluWWVhcnNBdChkYXRlIGZyb20gc3RhcnQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpID49IDE5CgpkZWZpbmUgIkhhcyBRdWFsaWZ5aW5nIEVuY291bnRlciI6CiAgZXhpc3RzICggKCAoIFtFbmNvdW50ZXI6ICJPdXRwYXRpZW50IENvbnN1bHRhdGlvbiJdCiAgICAgICAgdW5pb24gW0VuY291bnRlcjogIk9mZmljZSBWaXNpdCJdCiAgICAgICAgdW5pb24gKCBbRW5jb3VudGVyXSBFCiAgICAgICAgICAgIHdoZXJlIGV4aXN0cyAoICggRS50eXBlICkgVAogICAgICAgICAgICAgICAgd2hlcmUgVCB+ICJQb3N0b3BlcmF0aXZlIGZvbGxvdy11cCB2aXNpdCwgbm9ybWFsbHkgaW5jbHVkZWQgaW4gdGhlIHN1cmdpY2FsIHBhY2thZ2UsIHRvIGluZGljYXRlIHRoYXQgYW4gZXZhbHVhdGlvbiBhbmQgbWFuYWdlbWVudCBzZXJ2aWNlIHdhcyBwZXJmb3JtZWQgZHVyaW5nIGEgcG9zdG9wZXJhdGl2ZSBwZXJpb2QgZm9yIGEgcmVhc29uKHMpIHJlbGF0ZWQgdG8gdGhlIG9yaWdpbmFsIHByb2NlZHVyZSIKICAgICAgICAgICAgKQogICAgICAgICkKICAgICAgICB1bmlvbiBbRW5jb3VudGVyOiAiVGVsZXBob25lIFZpc2l0cyJdCiAgICAgICAgdW5pb24gW0VuY291bnRlcjogIlZpcnR1YWwgRW5jb3VudGVyIl0KICAgICkuaXNFbmNvdW50ZXJQZXJmb3JtZWQgKCApICkgVmFsaWRFbmNvdW50ZXJzCiAgICAgIHdoZXJlIFZhbGlkRW5jb3VudGVycy5wZXJpb2QgZHVyaW5nIGRheSBvZiBJbnRlcnZhbFsiQXVndXN0IDEgWWVhciBQcmlvciB0byB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIiwgZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiXQogICkKCmRlZmluZSAiQXVndXN0IDEgWWVhciBQcmlvciB0byB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICBEYXRlVGltZSgoeWVhciBmcm9tIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiIC0gMSksIDgsIDEsIDAsIDAsIDAsIDAsIDApCgpkZWZpbmUgIlRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIjoKICAoICggW1Byb2NlZHVyZTogIlByaW1hcnkgVEhBIFByb2NlZHVyZSJdICkuaXNQcm9jZWR1cmVQZXJmb3JtZWQgKCApICkgVEhBUHJvY2VkdXJlCiAgICB3aGVyZSBUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIHN0YXJ0cyBkdXJpbmcgZGF5IG9mIEludGVydmFsWyJOb3ZlbWJlciAxIFR3byBZZWFycyBQcmlvciB0byB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIiwgIk9jdG9iZXIgMzEgWWVhciBQcmlvciB0byB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIl0KCmRlZmluZSAiTm92ZW1iZXIgMSBUd28gWWVhcnMgUHJpb3IgdG8gdGhlIE1lYXN1cmVtZW50IFBlcmlvZCI6CiAgRGF0ZVRpbWUoKHllYXIgZnJvbSBzdGFydCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIiAtIDIpLCAxMSwgMSwgMCwgMCwgMCwgMCwgMCkKCmRlZmluZSAiT2N0b2JlciAzMSBZZWFyIFByaW9yIHRvIHRoZSBNZWFzdXJlbWVudCBQZXJpb2QiOgogIERhdGVUaW1lKCh5ZWFyIGZyb20gc3RhcnQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIgLSAxKSwgMTAsIDMxLCAyMywgNTksIDU5LCA5OTksIDApCgpkZWZpbmUgIkRlbm9taW5hdG9yIjoKICAiSW5pdGlhbCBQb3B1bGF0aW9uIgoKZGVmaW5lICJEZW5vbWluYXRvciBFeGNsdXNpb25zIjoKICBIb3NwaWNlLiJIYXMgSG9zcGljZSBTZXJ2aWNlcyIKICAgIG9yICJIYXMgU2V2ZXJlIENvZ25pdGl2ZSBJbXBhaXJtZW50IgogICAgb3IgIkhhcyBUb3RhbCBIaXAgQXJ0aHJvcGxhc3R5IHdpdGggMSBvciBNb3JlIExvd2VyIEJvZHkgRnJhY3R1cmVzIgogICAgb3IgIkhhcyBQYXJ0aWFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIgogICAgb3IgIkhhcyBSZXZpc2lvbiBIaXAgQXJ0aHJvcGxhc3R5IFByb2NlZHVyZSBvciBJbXBsYW50ZWQgRGV2aWNlIG9yIFByb3N0aGVzaXMgUmVtb3ZhbCBQcm9jZWR1cmUiCiAgICBvciAiSGFzIE1hbGlnbmFudCBOZW9wbGFzbSBvZiBMb3dlciBhbmQgVW5zcGVjaWZpZWQgTGltYnMiCiAgICBvciAiSGFzIE1lY2hhbmljYWwgQ29tcGxpY2F0aW9uIgogICAgb3IgIkhhcyBNb3JlIFRoYW4gT25lIEVsZWN0aXZlIFByaW1hcnkgVG90YWwgSGlwIEFydGhyb3BsYXN0eSBQZXJmb3JtZWQiCiAgICBvciAiRGVhdGggV2l0aGluIDMwMCBEYXlzIG9mIHRoZSBUSEEgUHJvY2VkdXJlIgoKZGVmaW5lICJIYXMgU2V2ZXJlIENvZ25pdGl2ZSBJbXBhaXJtZW50IjoKICAvLyBbRS0xM10gYmFzZSBGSElSLkNvbmRpdGlvbiByZXRyaWV2ZSAoZGVmZWN0LXRyYWNraW5nL2VuZ2luZS1pc3N1ZXMubWQgRS0xMykKICAvLyBPcmlnaW5hbDoKICAvLyAgIGV4aXN0cyAoIFtDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zOiAiU2V2ZXJlIGNvZ25pdGl2ZSBpbXBhaXJtZW50IChmaW5kaW5nKSJdCiAgLy8gICAgIHVuaW9uIFtDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXM6ICJTZXZlcmUgY29nbml0aXZlIGltcGFpcm1lbnQgKGZpbmRpbmcpIl0gKSBEZW1lbnRpYQogIC8vICAgICB3aGVyZSBEZW1lbnRpYS5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogIGV4aXN0cyAoIFtGSElSLkNvbmRpdGlvbjogIlNldmVyZSBjb2duaXRpdmUgaW1wYWlybWVudCAoZmluZGluZykiXSApIERlbWVudGlhCiAgICB3aGVyZSBEZW1lbnRpYS5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgoKZGVmaW5lICJIYXMgVG90YWwgSGlwIEFydGhyb3BsYXN0eSB3aXRoIDEgb3IgTW9yZSBMb3dlciBCb2R5IEZyYWN0dXJlcyI6CiAgZXhpc3RzICggIlRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIiBUSEFQcm9jZWR1cmUKICAgICAgd2l0aCAoIC8vIFtFLTEzXSBiYXNlIEZISVIuQ29uZGl0aW9uIHJldHJpZXZlIChkZWZlY3QtdHJhY2tpbmcvZW5naW5lLWlzc3Vlcy5tZCBFLTEzKQogICAgICAgIC8vIE9yaWdpbmFsOgogICAgICAgIC8vICAgKCBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzOiAiTG93ZXIgQm9keSBGcmFjdHVyZXMgRXhjbHVkaW5nIEFua2xlIGFuZCBGb290Il0KICAgICAgICAvLyAgICAgdW5pb24gW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJMb3dlciBCb2R5IEZyYWN0dXJlcyBFeGNsdWRpbmcgQW5rbGUgYW5kIEZvb3QiXSApCiAgICAgICAgW0ZISVIuQ29uZGl0aW9uOiAiTG93ZXIgQm9keSBGcmFjdHVyZXMgRXhjbHVkaW5nIEFua2xlIGFuZCBGb290Il0gKSBMb3dlckJvZHlGcmFjdHVyZQogICAgICAgIHN1Y2ggdGhhdCBMb3dlckJvZHlGcmFjdHVyZS5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIHN0YXJ0cyA0OCBob3VycyBvciBsZXNzIG9uIG9yIGJlZm9yZSBzdGFydCBvZiBUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApCiAgICAgICAgICBhbmQgTG93ZXJCb2R5RnJhY3R1cmUuaXNWZXJpZmllZCAoICkKICApCgpkZWZpbmUgIkhhcyBQYXJ0aWFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIjoKICBleGlzdHMgKCAoICggW1Byb2NlZHVyZTogIlBhcnRpYWwgQXJ0aHJvcGxhc3R5IG9mIEhpcCJdICkuaXNQcm9jZWR1cmVQZXJmb3JtZWQgKCApICkgUGFydGlhbFRIQVByb2NlZHVyZQogICAgICB3aXRoICJUb3RhbCBIaXAgQXJ0aHJvcGxhc3R5IFByb2NlZHVyZSIgVEhBUHJvY2VkdXJlCiAgICAgICAgc3VjaCB0aGF0IFBhcnRpYWxUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIGR1cmluZyBkYXkgb2YgVEhBUHJvY2VkdXJlLnBlcmZvcm1lZC50b0ludGVydmFsICggKQogICkKCmRlZmluZSAiSGFzIFJldmlzaW9uIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIG9yIEltcGxhbnRlZCBEZXZpY2Ugb3IgUHJvc3RoZXNpcyBSZW1vdmFsIFByb2NlZHVyZSI6CiAgZXhpc3RzICggIlRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIiBUSEFQcm9jZWR1cmUKICAgICAgd2l0aCAoICggW1Byb2NlZHVyZTogIlJlbW92YWwsIFJldmlzaW9uIGFuZCBTdXBwbGVtZW50IFByb2NlZHVyZXMgb2YgdGhlIExvd2VyIEJvZHkgYW5kIFNwaW5lIl0gKS5pc1Byb2NlZHVyZVBlcmZvcm1lZCAoICkgKSBSZXZpc2lvblRIQVByb2NlZHVyZQogICAgICAgIHN1Y2ggdGhhdCBSZXZpc2lvblRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgZHVyaW5nIGRheSBvZiBUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApCiAgKQoKZGVmaW5lICJIYXMgTWFsaWduYW50IE5lb3BsYXNtIG9mIExvd2VyIGFuZCBVbnNwZWNpZmllZCBMaW1icyI6CiAgLy8gW0UtMTNdIGJhc2UgRkhJUi5Db25kaXRpb24gcmV0cmlldmUgKGRlZmVjdC10cmFja2luZy9lbmdpbmUtaXNzdWVzLm1kIEUtMTMpCiAgLy8gT3JpZ2luYWw6CiAgLy8gICBleGlzdHMgKCAoIFtDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zOiAiTWFsaWduYW50IE5lb3BsYXNtcyBvZiBMb3dlciBhbmQgVW5zcGVjaWZpZWQgTGltYnMiXQogIC8vICAgICAgIHVuaW9uIFtDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXM6ICJNYWxpZ25hbnQgTmVvcGxhc21zIG9mIExvd2VyIGFuZCBVbnNwZWNpZmllZCBMaW1icyJdICkgTWFsaWduYW50TmVvcGxhc20KICBleGlzdHMgKCAoIFtGSElSLkNvbmRpdGlvbjogIk1hbGlnbmFudCBOZW9wbGFzbXMgb2YgTG93ZXIgYW5kIFVuc3BlY2lmaWVkIExpbWJzIl0gKSBNYWxpZ25hbnROZW9wbGFzbQogICAgICB3aXRoICJUb3RhbCBIaXAgQXJ0aHJvcGxhc3R5IFByb2NlZHVyZSIgVEhBUHJvY2VkdXJlCiAgICAgICAgc3VjaCB0aGF0IE1hbGlnbmFudE5lb3BsYXNtLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgZGF5IG9mIFRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkKICAgICAgICAgIGFuZCBNYWxpZ25hbnROZW9wbGFzbS5pc1ZlcmlmaWVkICggKQogICkKCmRlZmluZSAiSGFzIE1lY2hhbmljYWwgQ29tcGxpY2F0aW9uIjoKICAvLyBbRS0xM10gYmFzZSBGSElSLkNvbmRpdGlvbiByZXRyaWV2ZSAoZGVmZWN0LXRyYWNraW5nL2VuZ2luZS1pc3N1ZXMubWQgRS0xMykKICAvLyBPcmlnaW5hbDoKICAvLyAgIGV4aXN0cyAoICggW0NvbmRpdGlvbkVuY291bnRlckRpYWdub3NpczogIk1lY2hhbmljYWwgQ29tcGxpY2F0aW9ucyBFeGNsdWRpbmcgVXBwZXIgQm9keSJdCiAgLy8gICAgICAgdW5pb24gW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJNZWNoYW5pY2FsIENvbXBsaWNhdGlvbnMgRXhjbHVkaW5nIFVwcGVyIEJvZHkiXSApIE1lY2hhbmljYWxDb21wbGljYXRpb25zCiAgZXhpc3RzICggKCBbRkhJUi5Db25kaXRpb246ICJNZWNoYW5pY2FsIENvbXBsaWNhdGlvbnMgRXhjbHVkaW5nIFVwcGVyIEJvZHkiXSApIE1lY2hhbmljYWxDb21wbGljYXRpb25zCiAgICAgIHdpdGggIlRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIiBUSEFQcm9jZWR1cmUKICAgICAgICBzdWNoIHRoYXQgTWVjaGFuaWNhbENvbXBsaWNhdGlvbnMucHJldmFsZW5jZUludGVydmFsICggKSBvdmVybGFwcyBkYXkgb2YgVEhBUHJvY2VkdXJlLnBlcmZvcm1lZC50b0ludGVydmFsICggKQogICAgICAgICAgYW5kIE1lY2hhbmljYWxDb21wbGljYXRpb25zLmlzVmVyaWZpZWQgKCApCiAgKQoKZGVmaW5lICJIYXMgTW9yZSBUaGFuIE9uZSBFbGVjdGl2ZSBQcmltYXJ5IFRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUGVyZm9ybWVkIjoKICBleGlzdHMgKCAiVG90YWwgSGlwIEFydGhyb3BsYXN0eSBQcm9jZWR1cmUiIFRIQVByb2NlZHVyZQogICAgICB3aXRoICggKCBbUHJvY2VkdXJlOiAiUHJpbWFyeSBUSEEgUHJvY2VkdXJlIl0gKS5pc1Byb2NlZHVyZVBlcmZvcm1lZCAoICkgKSBFbGVjdGl2ZVRIQVByb2NlZHVyZQogICAgICAgIHN1Y2ggdGhhdCBUSEFQcm9jZWR1cmUuaWQgIX4gRWxlY3RpdmVUSEFQcm9jZWR1cmUuaWQKICAgICAgICAgIGFuZCBzdGFydCBvZiBFbGVjdGl2ZVRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgZHVyaW5nIGRheSBvZiBJbnRlcnZhbFsoIHN0YXJ0IG9mIFRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgKSAtIDEgeWVhciwgKCBzdGFydCBvZiBUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkgKyAxIHllYXJdCiAgKQoKZGVmaW5lICJEZWF0aCBXaXRoaW4gMzAwIERheXMgb2YgdGhlIFRIQSBQcm9jZWR1cmUiOgogIGV4aXN0cyAiVG90YWwgSGlwIEFydGhyb3BsYXN0eSBQcm9jZWR1cmUiIFRIQVByb2NlZHVyZQogICAgd2hlcmUgZGF0ZSBmcm9tIFBhdGllbnQuZGVjZWFzZWQgZHVyaW5nIGRheSBvZiBJbnRlcnZhbFtkYXRlIGZyb20gc3RhcnQgb2YgVEhBUHJvY2VkdXJlLnBlcmZvcm1lZC50b0ludGVydmFsICggKSwgZGF0ZSBmcm9tIHN0YXJ0IG9mIFRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgKyAzMDAgZGF5c10KCmRlZmluZSAiTnVtZXJhdG9yIjoKICAoICJIYXMgVEhBIHdpdGggSW5pdGlhbCBhbmQgRm9sbG93IFVwIEhPT1MgQXNzZXNzbWVudHMiICkKICAgIG9yICggIkhhcyBUSEEgd2l0aCBJbml0aWFsIGFuZCBGb2xsb3cgVXAgSE9PU0pyIEFzc2Vzc21lbnRzIiApCiAgICBvciAoICJIYXMgVEhBIHdpdGggSW5pdGlhbCBhbmQgRm9sbG93IFVwIFBST01JUzEwIEFzc2Vzc21lbnRzIiApCiAgICBvciAoICJIYXMgVEhBIHdpdGggSW5pdGlhbCBhbmQgRm9sbG93IFVwIFZSMTIgT2JsaXF1ZSBBc3Nlc3NtZW50cyIgKQogICAgb3IgKCAiSGFzIFRIQSB3aXRoIEluaXRpYWwgYW5kIEZvbGxvdyBVcCBWUjEyIE9ydGhvZ29uYWwgQXNzZXNzbWVudHMiICkKCmRlZmluZSAiSGFzIFRIQSB3aXRoIEluaXRpYWwgYW5kIEZvbGxvdyBVcCBIT09TIEFzc2Vzc21lbnRzIjoKICBleGlzdHMgKCAoICJUb3RhbCBIaXAgQXJ0aHJvcGxhc3R5IFByb2NlZHVyZSIgVEhBUHJvY2VkdXJlCiAgICAgIHJldHVybiBUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkgVG90YWxIaXAKICAgICAgd2l0aCAiRGF0ZSBIT09TIFRvdGFsIEFzc2Vzc21lbnQgQ29tcGxldGVkIiBJbml0aWFsSGlwQXNzZXNzbWVudEhPT1MKICAgICAgICBzdWNoIHRoYXQgVG90YWxIaXAgc3RhcnRzIDkwIGRheXMgb3IgbGVzcyBvbiBvciBhZnRlciBkYXkgb2YgSW5pdGlhbEhpcEFzc2Vzc21lbnRIT09TCiAgICAgIHdpdGggIkRhdGUgSE9PUyBUb3RhbCBBc3Nlc3NtZW50IENvbXBsZXRlZCIgRm9sbG93VXBIaXBBc3Nlc3NtZW50SE9PUwogICAgICAgIHN1Y2ggdGhhdCBkYXRlIGZyb20gRm9sbG93VXBIaXBBc3Nlc3NtZW50SE9PUyBkdXJpbmcgZGF5IG9mIEludGVydmFsW2RhdGUgZnJvbSBlbmQgb2YgVG90YWxIaXAgKyAzMDAgZGF5cywgZGF0ZSBmcm9tIGVuZCBvZiBUb3RhbEhpcCArIDQyNSBkYXlzXQogICkKCmRlZmluZSAiRGF0ZSBIT09TIFRvdGFsIEFzc2Vzc21lbnQgQ29tcGxldGVkIjoKICBmcm9tCiAgICAoICggW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudDogIlF1YWxpdHkgb2YgbGlmZSBzY29yZSBbSE9PU10iXSApLmlzQXNzZXNzbWVudFBlcmZvcm1lZCAoICkgKSBIT09TTGlmZVF1YWxpdHksCiAgICAoICggW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudDogIlNwb3J0LXJlY3JlYXRpb24gc2NvcmUgW0hPT1NdIl0gKS5pc0Fzc2Vzc21lbnRQZXJmb3JtZWQgKCApICkgSE9PU1Nwb3J0LAogICAgKCAoIFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJBY3Rpdml0aWVzIG9mIGRhaWx5IGxpdmluZyBzY29yZSBbSE9PU10iXSApLmlzQXNzZXNzbWVudFBlcmZvcm1lZCAoICkgKSBIT09TQWN0aXZpdHlTY29yZSwKICAgICggKCBbT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50OiAiU3ltcHRvbXMgc2NvcmUgW0hPT1NdIl0gKS5pc0Fzc2Vzc21lbnRQZXJmb3JtZWQgKCApICkgSE9PU1N5bXB0b21zLAogICAgKCAoIFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJQYWluIHNjb3JlIFtIT09TXSJdICkuaXNBc3Nlc3NtZW50UGVyZm9ybWVkICggKSApIEhPT1NQYWluCiAgICBsZXQgSE9PU0xpZmVRdWFsaXR5RGF0ZTogZGF0ZSBmcm9tIHN0YXJ0IG9mIEhPT1NMaWZlUXVhbGl0eS5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICksCiAgICBIT09TU3BvcnREYXRlOiBkYXRlIGZyb20gc3RhcnQgb2YgSE9PU1Nwb3J0LmVmZmVjdGl2ZS50b0ludGVydmFsICggKSwKICAgIEhPT1NBY3Rpdml0eVNjb3JlRGF0ZTogZGF0ZSBmcm9tIHN0YXJ0IG9mIEhPT1NBY3Rpdml0eVNjb3JlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSwKICAgIEhPT1NTeW1wdG9tc0RhdGU6IGRhdGUgZnJvbSBzdGFydCBvZiBIT09TU3ltcHRvbXMuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApLAogICAgSE9PU1BhaW5EYXRlOiBkYXRlIGZyb20gc3RhcnQgb2YgSE9PU1BhaW4uZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApCiAgICB3aGVyZSBIT09TTGlmZVF1YWxpdHlEYXRlIHNhbWUgZGF5IGFzIEhPT1NTcG9ydERhdGUKICAgICAgYW5kICggSE9PU1Nwb3J0IGFzIE9ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudCApLnZhbHVlIGlzIG5vdCBudWxsCiAgICAgIGFuZCBIT09TTGlmZVF1YWxpdHlEYXRlIHNhbWUgZGF5IGFzIEhPT1NBY3Rpdml0eVNjb3JlRGF0ZQogICAgICBhbmQgKCBIT09TQWN0aXZpdHlTY29yZSBhcyBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgKS52YWx1ZSBpcyBub3QgbnVsbAogICAgICBhbmQgSE9PU0xpZmVRdWFsaXR5RGF0ZSBzYW1lIGRheSBhcyBIT09TU3ltcHRvbXNEYXRlCiAgICAgIGFuZCAoIEhPT1NTeW1wdG9tcyBhcyBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgKS52YWx1ZSBpcyBub3QgbnVsbAogICAgICBhbmQgSE9PU0xpZmVRdWFsaXR5RGF0ZSBzYW1lIGRheSBhcyBIT09TUGFpbkRhdGUKICAgICAgYW5kICggSE9PU1BhaW4gYXMgT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50ICkudmFsdWUgaXMgbm90IG51bGwKICAgICAgYW5kICggSE9PU0xpZmVRdWFsaXR5IGFzIE9ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudCApLnZhbHVlIGlzIG5vdCBudWxsCiAgICByZXR1cm4gTWF4KHsgSE9PU0xpZmVRdWFsaXR5RGF0ZSwgSE9PU1Nwb3J0RGF0ZSwgSE9PU0FjdGl2aXR5U2NvcmVEYXRlLCBIT09TU3ltcHRvbXNEYXRlLCBIT09TUGFpbkRhdGUgfSkKCmRlZmluZSAiSGFzIFRIQSB3aXRoIEluaXRpYWwgYW5kIEZvbGxvdyBVcCBIT09TSnIgQXNzZXNzbWVudHMiOgogIGV4aXN0cyAoICggIlRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIiBUSEFQcm9jZWR1cmUKICAgICAgcmV0dXJuIFRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgKSBUb3RhbEhpcAogICAgICB3aXRoICJEYXRlIEhPT1NKciBUb3RhbCBBc3Nlc3NtZW50IENvbXBsZXRlZCIgSW5pdGlhbEhpcEFzc2Vzc21lbnQKICAgICAgICBzdWNoIHRoYXQgVG90YWxIaXAgc3RhcnRzIDkwIGRheXMgb3IgbGVzcyBvbiBvciBhZnRlciBkYXkgb2YgSW5pdGlhbEhpcEFzc2Vzc21lbnQKICAgICAgd2l0aCAiRGF0ZSBIT09TSnIgVG90YWwgQXNzZXNzbWVudCBDb21wbGV0ZWQiIEZvbGxvd1VwSGlwQXNzZXNzbWVudAogICAgICAgIHN1Y2ggdGhhdCBkYXRlIGZyb20gRm9sbG93VXBIaXBBc3Nlc3NtZW50IGR1cmluZyBkYXkgb2YgSW50ZXJ2YWxbZGF0ZSBmcm9tIGVuZCBvZiBUb3RhbEhpcCArIDMwMCBkYXlzLCBkYXRlIGZyb20gZW5kIG9mIFRvdGFsSGlwICsgNDI1IGRheXNdCiAgKQoKZGVmaW5lICJEYXRlIEhPT1NKciBUb3RhbCBBc3Nlc3NtZW50IENvbXBsZXRlZCI6CiAgKCAoICggW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudDogIlRvdGFsIGludGVydmFsIHNjb3JlIFtIT09TSlJdIl0gKS5pc0Fzc2Vzc21lbnRQZXJmb3JtZWQgKCApICkgSE9PU0pyCiAgICB3aGVyZSAoIEhPT1NKciBhcyBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgKS52YWx1ZSBpcyBub3QgbnVsbCApIERvY3VtZW50ZWRIT09TSnIKICAgIHJldHVybiBkYXRlIGZyb20gc3RhcnQgb2YgRG9jdW1lbnRlZEhPT1NKci5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICkKCmRlZmluZSAiSGFzIFRIQSB3aXRoIEluaXRpYWwgYW5kIEZvbGxvdyBVcCBQUk9NSVMxMCBBc3Nlc3NtZW50cyI6CiAgZXhpc3RzICggKCAiVG90YWwgSGlwIEFydGhyb3BsYXN0eSBQcm9jZWR1cmUiIFRIQVByb2NlZHVyZQogICAgICByZXR1cm4gVEhBUHJvY2VkdXJlLnBlcmZvcm1lZC50b0ludGVydmFsICggKSApIFRvdGFsSGlwCiAgICAgIHdpdGggIkRhdGUgUFJPTUlTMTAgVG90YWwgQXNzZXNzbWVudCBDb21wbGV0ZWQiIEluaXRpYWxIaXBBc3Nlc3NtZW50UFJPTUlTMTAKICAgICAgICBzdWNoIHRoYXQgVG90YWxIaXAgc3RhcnRzIDkwIGRheXMgb3IgbGVzcyBvbiBvciBhZnRlciBkYXkgb2YgSW5pdGlhbEhpcEFzc2Vzc21lbnRQUk9NSVMxMAogICAgICB3aXRoICJEYXRlIFBST01JUzEwIFRvdGFsIEFzc2Vzc21lbnQgQ29tcGxldGVkIiBGb2xsb3dVcEhpcEFzc2Vzc21lbnRQUk9NSVMxMAogICAgICAgIHN1Y2ggdGhhdCBkYXRlIGZyb20gRm9sbG93VXBIaXBBc3Nlc3NtZW50UFJPTUlTMTAgZHVyaW5nIGRheSBvZiBJbnRlcnZhbFtkYXRlIGZyb20gZW5kIG9mIFRvdGFsSGlwICsgMzAwIGRheXMsIGRhdGUgZnJvbSBlbmQgb2YgVG90YWxIaXAgKyA0MjUgZGF5c10KICApCgpkZWZpbmUgIkRhdGUgUFJPTUlTMTAgVG90YWwgQXNzZXNzbWVudCBDb21wbGV0ZWQiOgogIGZyb20KICAgICggKCBbT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50OiAiUFJPTUlTLTEwIEdsb2JhbCBNZW50YWwgSGVhbHRoIChHTUgpIHNjb3JlIFQtc2NvcmUiXSApLmlzQXNzZXNzbWVudFBlcmZvcm1lZCAoICkgKSBQUk9NSVMxME1lbnRhbFNjb3JlLAogICAgKCAoIFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJQUk9NSVMtMTAgR2xvYmFsIFBoeXNpY2FsIEhlYWx0aCAoR1BIKSBzY29yZSBULXNjb3JlIl0gKS5pc0Fzc2Vzc21lbnRQZXJmb3JtZWQgKCApICkgUFJPTUlTMTBQaHlzaWNhbFNjb3JlCiAgICBsZXQgUFJPTUlTMTBNZW50YWxTY29yZURhdGU6IGRhdGUgZnJvbSBzdGFydCBvZiBQUk9NSVMxME1lbnRhbFNjb3JlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSwKICAgIFBST01JUzEwUGh5c2ljYWxTY29yZURhdGU6IGRhdGUgZnJvbSBzdGFydCBvZiBQUk9NSVMxMFBoeXNpY2FsU2NvcmUuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApCiAgICB3aGVyZSBQUk9NSVMxME1lbnRhbFNjb3JlRGF0ZSBzYW1lIGRheSBhcyBQUk9NSVMxMFBoeXNpY2FsU2NvcmVEYXRlCiAgICAgIGFuZCAoIFBST01JUzEwUGh5c2ljYWxTY29yZSBhcyBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgKS52YWx1ZSBpcyBub3QgbnVsbAogICAgICBhbmQgKCBQUk9NSVMxME1lbnRhbFNjb3JlIGFzIE9ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudCApLnZhbHVlIGlzIG5vdCBudWxsCiAgICByZXR1cm4gTWF4KHsgUFJPTUlTMTBNZW50YWxTY29yZURhdGUsIFBST01JUzEwUGh5c2ljYWxTY29yZURhdGUgfSkKCmRlZmluZSAiSGFzIFRIQSB3aXRoIEluaXRpYWwgYW5kIEZvbGxvdyBVcCBWUjEyIE9ibGlxdWUgQXNzZXNzbWVudHMiOgogIGV4aXN0cyAoICggIlRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIiBUSEFQcm9jZWR1cmUKICAgICAgcmV0dXJuIFRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgKSBUb3RhbEhpcAogICAgICB3aXRoICJEYXRlIFZSMTIgT2JsaXF1ZSBUb3RhbCBBc3Nlc3NtZW50IENvbXBsZXRlZCIgSW5pdGlhbEhpcEFzc2Vzc21lbnRPYmxpcXVlCiAgICAgICAgc3VjaCB0aGF0IFRvdGFsSGlwIHN0YXJ0cyA5MCBkYXlzIG9yIGxlc3Mgb24gb3IgYWZ0ZXIgZGF5IG9mIEluaXRpYWxIaXBBc3Nlc3NtZW50T2JsaXF1ZQogICAgICB3aXRoICJEYXRlIFZSMTIgT2JsaXF1ZSBUb3RhbCBBc3Nlc3NtZW50IENvbXBsZXRlZCIgRm9sbG93VXBIaXBBc3Nlc3NtZW50T2JsaXF1ZQogICAgICAgIHN1Y2ggdGhhdCBkYXRlIGZyb20gRm9sbG93VXBIaXBBc3Nlc3NtZW50T2JsaXF1ZSBkdXJpbmcgZGF5IG9mIEludGVydmFsW2RhdGUgZnJvbSBlbmQgb2YgVG90YWxIaXAgKyAzMDAgZGF5cywgZGF0ZSBmcm9tIGVuZCBvZiBUb3RhbEhpcCArIDQyNSBkYXlzXQogICkKCmRlZmluZSAiRGF0ZSBWUjEyIE9ibGlxdWUgVG90YWwgQXNzZXNzbWVudCBDb21wbGV0ZWQiOgogIGZyb20KICAgICggKCBbT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50OiAiVlItMTIgTWVudGFsIGNvbXBvbmVudCBzdW1tYXJ5IChNQ1MpIHNjb3JlIC0gb2JsaXF1ZSBtZXRob2QgVC1zY29yZSJdICkuaXNBc3Nlc3NtZW50UGVyZm9ybWVkICggKSApIFZSMTJNZW50YWxBc3Nlc3NtZW50LAogICAgKCAoIFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJWUi0xMiBQaHlzaWNhbCBjb21wb25lbnQgc3VtbWFyeSAoUENTKSBzY29yZSAtIG9ibGlxdWUgbWV0aG9kIFQtc2NvcmUiXSApLmlzQXNzZXNzbWVudFBlcmZvcm1lZCAoICkgKSBWUjEyUGh5c2ljYWxBc3Nlc3NtZW50CiAgICBsZXQgVlIxMk1lbnRhbEFzc2Vzc21lbnREYXRlOiBkYXRlIGZyb20gc3RhcnQgb2YgVlIxMk1lbnRhbEFzc2Vzc21lbnQuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApLAogICAgVlIxMlBoeXNpY2FsQXNzZXNzbWVudERhdGU6IGRhdGUgZnJvbSBzdGFydCBvZiBWUjEyUGh5c2ljYWxBc3Nlc3NtZW50LmVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICAgd2hlcmUgVlIxMk1lbnRhbEFzc2Vzc21lbnREYXRlIHNhbWUgZGF5IGFzIFZSMTJQaHlzaWNhbEFzc2Vzc21lbnREYXRlCiAgICAgIGFuZCAoIFZSMTJNZW50YWxBc3Nlc3NtZW50IGFzIE9ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudCApLnZhbHVlIGlzIG5vdCBudWxsCiAgICAgIGFuZCAoIFZSMTJQaHlzaWNhbEFzc2Vzc21lbnQgYXMgT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50ICkudmFsdWUgaXMgbm90IG51bGwKICAgIHJldHVybiBNYXgoeyBWUjEyTWVudGFsQXNzZXNzbWVudERhdGUsIFZSMTJQaHlzaWNhbEFzc2Vzc21lbnREYXRlIH0pCgpkZWZpbmUgIkhhcyBUSEEgd2l0aCBJbml0aWFsIGFuZCBGb2xsb3cgVXAgVlIxMiBPcnRob2dvbmFsIEFzc2Vzc21lbnRzIjoKICBleGlzdHMgKCAoICJUb3RhbCBIaXAgQXJ0aHJvcGxhc3R5IFByb2NlZHVyZSIgVEhBUHJvY2VkdXJlCiAgICAgIHJldHVybiBUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkgVG90YWxIaXAKICAgICAgd2l0aCAiRGF0ZSBWUjEyIE9ydGhvZ29uYWwgVG90YWwgQXNzZXNzbWVudCBDb21wbGV0ZWQiIEluaXRpYWxIaXBBc3Nlc3NtZW50T3J0aG9nb25hbAogICAgICAgIHN1Y2ggdGhhdCBUb3RhbEhpcCBzdGFydHMgOTAgZGF5cyBvciBsZXNzIG9uIG9yIGFmdGVyIGRheSBvZiBJbml0aWFsSGlwQXNzZXNzbWVudE9ydGhvZ29uYWwKICAgICAgd2l0aCAiRGF0ZSBWUjEyIE9ydGhvZ29uYWwgVG90YWwgQXNzZXNzbWVudCBDb21wbGV0ZWQiIEZvbGxvd1VwSGlwQXNzZXNzbWVudE9ydGhvZ29uYWwKICAgICAgICBzdWNoIHRoYXQgZGF0ZSBmcm9tIEZvbGxvd1VwSGlwQXNzZXNzbWVudE9ydGhvZ29uYWwgZHVyaW5nIGRheSBvZiBJbnRlcnZhbFtkYXRlIGZyb20gZW5kIG9mIFRvdGFsSGlwICsgMzAwIGRheXMsIGRhdGUgZnJvbSBlbmQgb2YgVG90YWxIaXAgKyA0MjUgZGF5c10KICApCgpkZWZpbmUgIkRhdGUgVlIxMiBPcnRob2dvbmFsIFRvdGFsIEFzc2Vzc21lbnQgQ29tcGxldGVkIjoKICBmcm9tCiAgICAoICggW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudDogIlZSLTEyIE1lbnRhbCBjb21wb25lbnQgc3VtbWFyeSAoTUNTKSBzY29yZSAtIG9ydGhvZ29uYWwgbWV0aG9kIFQtc2NvcmUiXSApLmlzQXNzZXNzbWVudFBlcmZvcm1lZCAoICkgKSBWUjEyTWVudGFsQXNzZXNzbWVudCwKICAgICggKCBbT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50OiAiVlItMTIgUGh5c2ljYWwgY29tcG9uZW50IHN1bW1hcnkgKFBDUykgc2NvcmUgLSBvcnRob2dvbmFsIG1ldGhvZCBULXNjb3JlIl0gKS5pc0Fzc2Vzc21lbnRQZXJmb3JtZWQgKCApICkgVlIxMlBoeXNpY2FsQXNzZXNzbWVudAogICAgbGV0IFZSMTJNZW50YWxBc3Nlc3NtZW50RGF0ZTogZGF0ZSBmcm9tIHN0YXJ0IG9mIFZSMTJNZW50YWxBc3Nlc3NtZW50LmVmZmVjdGl2ZS50b0ludGVydmFsICggKSwKICAgIFZSMTJQaHlzaWNhbEFzc2Vzc21lbnREYXRlOiBkYXRlIGZyb20gc3RhcnQgb2YgVlIxMlBoeXNpY2FsQXNzZXNzbWVudC5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICkKICAgIHdoZXJlIFZSMTJNZW50YWxBc3Nlc3NtZW50RGF0ZSBzYW1lIGRheSBhcyBWUjEyUGh5c2ljYWxBc3Nlc3NtZW50RGF0ZQogICAgICBhbmQgKCBWUjEyTWVudGFsQXNzZXNzbWVudCBhcyBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgKS52YWx1ZSBpcyBub3QgbnVsbAogICAgICBhbmQgKCBWUjEyUGh5c2ljYWxBc3Nlc3NtZW50IGFzIE9ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudCApLnZhbHVlIGlzIG5vdCBudWxsCiAgICByZXR1cm4gTWF4KHsgVlIxMk1lbnRhbEFzc2Vzc21lbnREYXRlLCBWUjEyUGh5c2ljYWxBc3Nlc3NtZW50RGF0ZSB9KQogICAgCi8qCkBub3RlOiBXaGVuIHBvc3NpYmxlLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBtaWdyYXRlZCB0byBRSUNvcmVDb21tb24uCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBDb25kaXRpb24gaGFzIGEgdmVyaWZpY2F0aW9uIHN0YXR1cyBvZiAiY29uZmlybWVkIiwgInVuY29uZmlybWVkIiwgInByb3Zpc2lvbmFsIiwgb3IgImRpZmZlcmVudGlhbCIKKi8KCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIGlzVmVyaWZpZWQoY29uZGl0aW9uIENob2ljZTxDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXMsIENvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM+KToKICBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIGlzIG5vdCBudWxsIGltcGxpZXMgKCBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJjb25maXJtZWQiCiAgICAgIG9yIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuInVuY29uZmlybWVkIgogICAgICBvciBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJwcm92aXNpb25hbCIKICAgICAgb3IgY29uZGl0aW9uLnZlcmlmaWNhdGlvblN0YXR1cyB+IFN0YXR1cy4iZGlmZmVyZW50aWFsIgogICk=",
"url" : "https://madie.cms.gov/Library-CMS56FHIRFuncStatHipReplacement.cql"
}
]
}