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" : "NHSNAcuteCareHospitalMonthlyInitialPopulation1",
"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 NHSNAcuteCareHospitalMonthlyInitialPopulation1 version '1.1.000'\n\n// Rebased to QI Core 6.0.0\n\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 CQMCommon version '5.1.000' called CQMCommon\n// NHSNHelpers logic is inlined below\n\n\ncodesystem "ActCode": 'http://terminology.hl7.org/CodeSystem/v3-ActCode'\ncodesystem "Observation Category": 'http://terminology.hl7.org/CodeSystem/observation-category'\ncodesystem "LOINC": 'http://loinc.org'\ncodesystem "Condition Category": 'http://terminology.hl7.org/CodeSystem/condition-category'\ncodesystem "US Core Condition Category": 'http://hl7.org/fhir/us/core/CodeSystem/condition-category'\ncodesystem "Condition Clinical Status": 'http://terminology.hl7.org/CodeSystem/condition-clinical'\ncodesystem "SNOMEDCT": 'http://snomed.info/sct'\ncodesystem "MedicationRequest Category": 'http://terminology.hl7.org/CodeSystem/medicationrequest-category'\n\nvalueset "Inpatient, Emergency, and Observation Locations": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.265'\nvalueset "Emergency Department Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292'\nvalueset "Encounter Inpatient": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307'\nvalueset "Observation Services": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143'\nvalueset "NHSN Inpatient Encounter Class Codes": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274'\n\n// Observation Category codes\n\n\ncode "laboratory": 'laboratory' from "Observation Category" display 'Laboratory'\ncode "social-history": 'social-history' from "Observation Category" display 'Social History'\ncode "vital-signs": 'vital-signs' from "Observation Category" display 'Vital Signs'\ncode "imaging": 'imaging' from "Observation Category" display 'Imaging'\ncode "procedure": 'procedure' from "Observation Category" display 'Procedure'\ncode "survey": 'survey' from "Observation Category" display 'Survey'\n\n// Condition category\n\ncode "encounter-diagnosis": 'encounter-diagnosis' from "Condition Category" display 'Encounter Diagnosis'\n\n// Diagnostic Report Category (LOINC-based)\n\ncode "Radiology": 'LP29684-5' from "LOINC" display 'Radiology'\ncode "Pathology": 'LP7839-6' from "LOINC" display 'Pathology'\ncode "Cardiology": 'LP29708-2' from "LOINC" display 'Cardiology'\n\n// Emergency Encounter Class\n\ncode "emergency": 'EMER' from "ActCode" display 'emergency'\ncode "observation encounter": 'OBSENC' from "ActCode" display 'observation encounter'\n\n// Condition clinicalStatus\n\ncode "active": 'active' from "Condition Clinical Status" display 'active'\n\n// Procedure category\n\ncode "Surgical procedure": '387713003' from "SNOMEDCT" display 'Surgical procedure'\ncode "Diagnostic procedure": '103693007' from "SNOMEDCT" display 'Diagnostic procedure'\n\n// MedicationRequest category\n\ncode "inpatient": 'inpatient' from "MedicationRequest Category" display 'Inpatient'\ncode "outpatient": 'outpatient' from "MedicationRequest Category" display 'Outpatient'\n\n// ServiceRequest category\n\ncode "Laboratory procedure": '108252007' from "SNOMEDCT" display 'Laboratory procedure'\ncode "Imaging": '363679005' from "SNOMEDCT" display 'Imaging'\n\nparameter "Measurement Period" Interval<DateTime>\n default Interval[@2026-01-01T00:00:00.000Z, @2026-02-01T00:00:00.000Z)\n\ncontext Patient \n\n// ----------------------------------------------------------------------\n// Core encounter logic\n// ----------------------------------------------------------------------\n\n// Encounters with NHSN class codes (IMP, ACUTE, NONAC, SS)\n\n\n\n\n\ndefine "Encounters with NHSN Inpatient Class":\n [Encounter] Enc\n where Enc.class ~ USQualityCoreCommon."inpatient encounter"\n or Enc.class ~ USQualityCoreCommon."inpatient acute"\n or Enc.class ~ USQualityCoreCommon."inpatient non-acute"\n or Enc.class ~ USQualityCoreCommon."short stay"\n\ndefine "Qualifying Encounters During Measurement Period":\n ( [Encounter: "Encounter Inpatient"]\n union [Encounter: "Emergency Department Visit"]\n union [Encounter: "Observation Services"]\n union "Encounters with NHSN Inpatient Class"\n union [Encounter: class ~ "emergency"]\n union [Encounter: class ~ "observation encounter"] ) QualifyingEncounters\n where QualifyingEncounters.status in { 'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error' }\n and QualifyingEncounters.period overlaps "Measurement Period"\n\ndefine "Encounters":\n [Encounter]\n\ndefine "Encounters with Patient Hospital Locations":\n "Encounters" Ens\n where exists ( Ens.location EncounterLocation\n where EncounterLocation.period overlaps Ens.period\n and EncounterLocation.location.getLocation ( ).type in "Inpatient, Emergency, and Observation Locations"\n )\n and Ens.status in { 'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error' }\n and Ens.period overlaps "Measurement Period"\n\ndefine "Initial Population":\n "Qualifying Encounters During Measurement Period"\n union "Encounters with Patient Hospital Locations"\n\n// ----------------------------------------------------------------------\n// Core retrieves\n// ----------------------------------------------------------------------\n\n// Locations from IP encounters\n\n\n\n\n\ndefine "Get Locations from IP Encounters in Measurement Period":\n flatten ( "Initial Population" IP\n let locationElements: IP.location\n return locationElements LE\n let locationReference: LE.location\n return locationReference.getLocation ( )\n )\n\n// ----------------------------------------------------------------------\n// SDEs\n// ----------------------------------------------------------------------\n\n\n\n\ndefine "SDE Condition Problems HealthConcerns":\n [ConditionProblemsHealthConcerns] Diagnosis\n where exists ( "Initial Population" IP\n where Diagnosis.prevalenceInterval ( ) overlaps day of IP.period\n )\n return {\n id: Diagnosis.id,\n meta: Diagnosis.meta,\n status: Diagnosis.clinicalStatus,\n verificationStatus: Diagnosis.verificationStatus,\n category: Diagnosis.category,\n severity: Diagnosis.severity,\n code: Diagnosis.code,\n bodySite: Diagnosis.bodySite,\n subject: Diagnosis.subject,\n encounterReferenceId: Diagnosis.encounter.reference.getId ( ),\n onset: Diagnosis.onset,\n stage: Diagnosis.stage,\n evidence: Diagnosis.evidence,\n note: Diagnosis.note\n }\n\ndefine "SDE Condition Diagnosis":\n [ConditionEncounterDiagnosis] Diagnosis\n where exists ( "Initial Population" IP\n where Diagnosis.prevalenceInterval ( ) overlaps day of IP.period\n )\n return {\n id: Diagnosis.id,\n meta: Diagnosis.meta,\n status: Diagnosis.clinicalStatus,\n verificationStatus: Diagnosis.verificationStatus,\n category: Diagnosis.category,\n severity: Diagnosis.severity,\n code: Diagnosis.code,\n bodySite: Diagnosis.bodySite,\n subject: Diagnosis.subject,\n encounterReferenceId: Diagnosis.encounter.reference.getId ( ),\n onset: Diagnosis.onset,\n stage: Diagnosis.stage,\n evidence: Diagnosis.evidence,\n note: Diagnosis.note\n }\n\n// Coverage SDE – tuples of Coverage data\n\n\ndefine "SDE Coverage":\n [Coverage] Coverages\n where exists ( "Initial Population" IP\n where Coverages.period overlaps IP.period\n )\n return {\n id: Coverages.id,\n meta: Coverages.meta,\n status: Coverages.status,\n type: Coverages.type,\n policyHolder: Coverages.policyHolder,\n subscriber: Coverages.subscriber,\n subscriberId: Coverages.subscriberId,\n beneficiary: Coverages.beneficiary,\n dependent: Coverages.dependent,\n relationship: Coverages.relationship,\n period: Coverages.period,\n payor: Coverages.payor,\n class: Coverages.class,\n order: Coverages.order,\n network: Coverages.network,\n subrogation: Coverages.subrogation,\n contract: Coverages.contract\n }\n\n// Device SDE – tuples of Device data\n\n\ndefine "SDE Device":\n [Device] Devices\n where exists ( "Initial Population" )\n return {\n id: Devices.id,\n meta: Devices.meta,\n extension: Devices.extension,\n status: Devices.status,\n expirationDate: Devices.expirationDate,\n lotNumber: Devices.lotNumber,\n serialNumber: Devices.serialNumber,\n modelNumber: Devices.modelNumber,\n partNumber: Devices.partNumber,\n type: Devices.type,\n patient: Devices.patient,\n parent: Devices.parent\n }\n\n// DiagnosticReport SDEs\n\n\ndefine "SDE DiagnosticReport Lab":\n [DiagnosticReportLab] dr\n where exists ( "Initial Population" IP\n where "Normalize Interval"(dr.effective) overlaps IP.period\n )\n\ndefine "SDE DiagnosticReport Note":\n [DiagnosticReportNote] dr\n where ( exists ( dr.category Category\n where Category ~ "Radiology"\n )\n or exists ( dr.category Category\n where Category ~ "Pathology"\n )\n or exists ( dr.category Category\n where Category ~ "Cardiology"\n )\n )\n and exists ( "Initial Population" IP\n where "Normalize Interval"(dr.effective) overlaps IP.period\n )\n return {\n id: dr.id,\n meta: dr.meta,\n extension: dr.extension,\n basedOn: dr.basedOn,\n status: dr.status,\n category: dr.category,\n code: dr.code,\n subject: dr.subject,\n encounter: dr.encounter,\n effective: dr.effective,\n issued: dr.issued,\n specimen: dr.specimen,\n result: dr.result,\n conclusion: dr.conclusion,\n conclusionCode: dr.conclusionCode\n }\n\ndefine "SDE DiagnosticReport Others":\n [DiagnosticReportNote] dr\n where not ( exists ( dr.category Category\n where Category ~ "Radiology"\n )\n or exists ( dr.category Category\n where Category ~ "Pathology"\n )\n or exists ( dr.category Category\n where Category ~ "Cardiology"\n )\n )\n and exists ( "Initial Population" IP\n where "Normalize Interval"(dr.effective) overlaps IP.period\n )\n return {\n id: dr.id,\n meta: dr.meta,\n extension: dr.extension,\n basedOn: dr.basedOn,\n status: dr.status,\n category: dr.category,\n code: dr.code,\n subject: dr.subject,\n encounter: dr.encounter,\n effective: dr.effective,\n issued: dr.issued,\n specimen: dr.specimen,\n result: dr.result,\n conclusion: dr.conclusion,\n conclusionCode: dr.conclusionCode\n }\n\n// Encounter SDEs\n\n\ndefine "SDE Encounter":\n "Encounters" Ens\n where not "CheckIP"(Ens)\n and exists ( "Initial Population" IP\n where Ens.period overlaps IP.period\n )\n return {\n id: Ens.id,\n meta: Ens.meta,\n identifier: Ens.identifier,\n status: Ens.status,\n statusHistory: Ens.statusHistory,\n class: Ens.class,\n classHistory: Ens.classHistory,\n type: Ens.type,\n serviceType: Ens.serviceType,\n priority: Ens.priority,\n subject: Ens.subject,\n period: Ens.period,\n length: Ens.length,\n reasonCode: Ens.reasonCode,\n reasonReference: Ens.reasonReference,\n diagnosis: Ens.diagnosis,\n account: Ens.account,\n hospitalization: Ens.hospitalization,\n location: Ens.location,\n partOf: Ens.partOf\n }\n\ndefine "SDE IP Encounters":\n "Initial Population" IP\n return {\n id: IP.id,\n meta: IP.meta,\n identifier: IP.identifier,\n status: IP.status,\n statusHistory: IP.statusHistory,\n class: IP.class,\n classHistory: IP.classHistory,\n type: IP.type,\n serviceType: IP.serviceType,\n priority: IP.priority,\n subject: IP.subject,\n period: IP.period,\n length: IP.length,\n reasonCode: IP.reasonCode,\n reasonReference: IP.reasonReference,\n diagnosis: IP.diagnosis,\n account: IP.account,\n hospitalization: IP.hospitalization,\n location: IP.location,\n partOf: IP.partOf\n }\n\n// Location SDE\n\n\ndefine "SDE Location":\n "Get Locations from IP Encounters in Measurement Period" Locations\n where exists ( "Initial Population" )\n and Locations is not null\n return {\n id: Locations.id,\n meta: Locations.meta,\n extension: Locations.extension,\n status: Locations.status,\n operationalStatus: Locations.operationalStatus,\n name: Locations.name,\n alias: Locations.alias,\n description: Locations.description,\n mode: Locations.mode,\n type: Locations.type,\n telecom: Locations.telecom,\n address: Locations.address,\n physicalType: Locations.physicalType,\n position: Locations.position,\n managingOrganization: Locations.managingOrganization,\n partOf: Locations.partOf,\n hoursOfOperation: Locations.hoursOfOperation,\n availabilityExceptions: Locations.availabilityExceptions,\n endpoint: Locations.endpoint\n }\n\n// Medication SDEs\n\n\ndefine "SDE Medication Administration":\n "SDE Medication Administration Base"\n union "SDE Medication Administration Not Done"\n\ndefine "SDE Medication Administration Base":\n [MedicationAdministration] MedAdministrations\n where exists ( "Initial Population" IP\n where "Normalize Interval"(MedAdministrations.effective) overlaps IP.period\n )\n return {\n id: MedAdministrations.id,\n meta: MedAdministrations.meta,\n instantiates: MedAdministrations.instantiates,\n partOf: MedAdministrations.partOf,\n status: MedAdministrations.status,\n statusReason: MedAdministrations.statusReason,\n category: MedAdministrations.category,\n medication: MedAdministrations.medication,\n subject: MedAdministrations.subject,\n context: MedAdministrations.context,\n supportingInformation: MedAdministrations.supportingInformation,\n effective: MedAdministrations.effective,\n performer: MedAdministrations.performer,\n reasonCode: MedAdministrations.reasonCode,\n reasonReference: MedAdministrations.reasonReference,\n request: MedAdministrations.request,\n device: MedAdministrations.device,\n note: MedAdministrations.note,\n dosage: MedAdministrations.dosage\n }\n\ndefine "SDE Medication Administration Not Done":\n [MedicationAdministrationNotDone] MedAdministrations\n where exists ( "Initial Population" IP\n where "Normalize Interval"(MedAdministrations.effective) overlaps IP.period\n )\n return {\n id: MedAdministrations.id,\n meta: MedAdministrations.meta,\n instantiates: MedAdministrations.instantiates,\n partOf: MedAdministrations.partOf,\n status: MedAdministrations.status,\n statusReason: MedAdministrations.statusReason,\n category: MedAdministrations.category,\n medication: MedAdministrations.medication,\n subject: MedAdministrations.subject,\n context: MedAdministrations.context,\n supportingInformation: MedAdministrations.supportingInformation,\n effective: MedAdministrations.effective,\n performer: MedAdministrations.performer,\n reasonCode: MedAdministrations.reasonCode,\n reasonReference: MedAdministrations.reasonReference,\n request: MedAdministrations.request,\n device: MedAdministrations.device,\n note: MedAdministrations.note,\n dosage: MedAdministrations.dosage\n }\n\n// SDE Medication Request - regular requests (doNotPerform is false or absent)\n\n\ndefine "SDE Medication Request Base":\n [MedicationRequest] MedRequests\n where exists ( "Initial Population" IP\n where MedRequests.authoredOn during IP.period\n )\n return {\n id: MedRequests.id,\n meta: MedRequests.meta,\n status: MedRequests.status,\n statusReason: MedRequests.statusReason,\n intent: MedRequests.intent,\n category: MedRequests.category,\n priority: MedRequests.priority,\n //doNotPerform: MedRequests.doNotPerform,\n \n reported: MedRequests.reported,\n medication: MedRequests.medication,\n subject: MedRequests.subject,\n encounter: MedRequests.encounter,\n authoredOn: MedRequests.authoredOn,\n requester: MedRequests.requester,\n recorder: MedRequests.recorder,\n reasonCode: MedRequests.reasonCode,\n reasonReference: MedRequests.reasonReference,\n instantiatesCanonical: MedRequests.instantiatesCanonical,\n instantiatesUri: MedRequests.instantiatesUri,\n courseOfTherapyType: MedRequests.courseOfTherapyType,\n dosageInstruction: MedRequests.dosageInstruction\n }\n\n// SDE Medication Not Requested - negation requests (doNotPerform is true)\n\n\ndefine "SDE Medication Not Requested":\n [MedicationNotRequested] MedNotRequests\n where exists ( "Initial Population" IP\n where MedNotRequests.authoredOn during IP.period\n )\n return {\n id: MedNotRequests.id,\n meta: MedNotRequests.meta,\n status: MedNotRequests.status,\n statusReason: MedNotRequests.statusReason,\n intent: MedNotRequests.intent,\n category: MedNotRequests.category,\n priority: MedNotRequests.priority,\n doNotPerform: MedNotRequests.doNotPerform,\n reported: MedNotRequests.reported,\n medication: MedNotRequests.medication,\n subject: MedNotRequests.subject,\n encounter: MedNotRequests.encounter,\n authoredOn: MedNotRequests.authoredOn,\n requester: MedNotRequests.requester,\n recorder: MedNotRequests.recorder,\n reasonCode: MedNotRequests.reasonCode,\n reasonReference: MedNotRequests.reasonReference,\n instantiatesCanonical: MedNotRequests.instantiatesCanonical,\n instantiatesUri: MedNotRequests.instantiatesUri,\n courseOfTherapyType: MedNotRequests.courseOfTherapyType,\n dosageInstruction: MedNotRequests.dosageInstruction\n }\n\n// Combined SDE for all Medication Requests (both regular and negation)\n\n\ndefine "SDE Medication Request":\n "SDE Medication Request Base"\n union "SDE Medication Not Requested"\n\ndefine function "GetMedication"(reference Reference):\n singleton from ( [Medication] Medication\n where reference.references ( Medication )\n )\n\ndefine "SDE Medication":\n ( [MedicationRequest]\n union [MedicationAdministration] ) MedReqOrAdmin\n let medication: GetMedication(MedReqOrAdmin.medication as Reference)\n where medication is not null\n and exists ( "Initial Population" IP\n where Coalesce("Normalize Interval"(MedReqOrAdmin.effective), MedReqOrAdmin.authoredOn.toInterval()) overlaps IP.period\n )\n return {\n id: medication.id,\n meta: medication.meta,\n code: medication.code,\n status: medication.status,\n manufacturer: medication.manufacturer,\n form: medication.form,\n amount: medication.amount,\n ingredient: medication.ingredient,\n batch: medication.batch\n }\n\n\n// Observation SDEs\n\n\ndefine "SDE Observation Lab Category":\n [LaboratoryResultObservation] Obs\n where exists ( "Initial Population" IP\n where "Normalize Interval"(Obs.effective) overlaps IP.period\n )\n return {\n id: Obs.id,\n meta: Obs.meta,\n extension: Obs.extension,\n partOf: Obs.partOf,\n status: Obs.status,\n category: Obs.category,\n code: Obs.code,\n subject: Obs.subject,\n encounter: Obs.encounter,\n effective: Obs.effective,\n issued: Obs.issued,\n value: Obs.value,\n dataAbsentReason: Obs.dataAbsentReason,\n interpretation: Obs.interpretation,\n bodySite: Obs.bodySite,\n method: Obs.method,\n specimen: Obs.specimen,\n referenceRange: Obs.referenceRange,\n hasMember: Obs.hasMember,\n derivedFrom: Obs.derivedFrom,\n component: Obs.component\n }\n\ndefine "SDE Observation Simple":\n [SimpleObservation] Obs\n where ( exists ( Obs.category Category\n where Category ~ "social-history"\n )\n or exists ( Obs.category Category\n where Category ~ "imaging"\n )\n or exists ( Obs.category Category\n where Category ~ "procedure"\n )\n )\n and exists ( "Initial Population" IP\n where "Normalize Interval"(Obs.effective) overlaps IP.period\n )\n return {\n id: Obs.id,\n meta: Obs.meta,\n extension: Obs.extension,\n partOf: Obs.partOf,\n status: Obs.status,\n category: Obs.category,\n code: Obs.code,\n subject: Obs.subject,\n encounter: Obs.encounter,\n effective: Obs.effective,\n issued: Obs.issued,\n value: Obs.value,\n dataAbsentReason: Obs.dataAbsentReason,\n interpretation: Obs.interpretation,\n bodySite: Obs.bodySite,\n method: Obs.method,\n specimen: Obs.specimen,\n referenceRange: Obs.referenceRange,\n hasMember: Obs.hasMember,\n derivedFrom: Obs.derivedFrom,\n component: Obs.component\n }\n \n// Survey is fixed category code in ObservationScreeningAssessment profile in QI-Core \n\n\ndefine "SDE Observation Survey":\n [ObservationScreeningAssessment] Obs\n where exists ( "Initial Population" IP\n where "Normalize Interval"(Obs.effective) overlaps IP.period\n )\n return {\n id: Obs.id,\n meta: Obs.meta,\n extension: Obs.extension,\n partOf: Obs.partOf,\n status: Obs.status,\n category: Obs.category,\n code: Obs.code,\n subject: Obs.subject,\n encounter: Obs.encounter,\n effective: Obs.effective,\n issued: Obs.issued,\n value: Obs.value,\n dataAbsentReason: Obs.dataAbsentReason,\n interpretation: Obs.interpretation,\n bodySite: Obs.bodySite,\n method: Obs.method,\n specimen: Obs.specimen,\n referenceRange: Obs.referenceRange,\n hasMember: Obs.hasMember,\n derivedFrom: Obs.derivedFrom,\n component: Obs.component\n }\n\ndefine "SDE Observation Vital Signs Category":\n [USCore.VitalSignsProfile] Obs\n where exists ( "Initial Population" IP\n where "Normalize Interval"(Obs.effective) overlaps IP.period\n )\n return {\n id: Obs.id,\n meta: Obs.meta,\n extension: Obs.extension,\n partOf: Obs.partOf,\n status: Obs.status,\n category: Obs.category,\n code: Obs.code,\n subject: Obs.subject,\n encounter: Obs.encounter,\n effective: Obs.effective,\n issued: Obs.issued,\n value: Obs.value,\n dataAbsentReason: Obs.dataAbsentReason,\n interpretation: Obs.interpretation,\n bodySite: Obs.bodySite,\n method: Obs.method,\n specimen: Obs.specimen,\n referenceRange: Obs.referenceRange,\n hasMember: Obs.hasMember,\n derivedFrom: Obs.derivedFrom,\n component: Obs.component\n }\n\n\n// Procedure SDE\n\n\ndefine "SDE Procedure":\n [Procedure] Procedures\n where exists ( "Initial Population" IP\n where "Normalize Interval"(Procedures.performed) overlaps IP.period\n )\n return {\n id: Procedures.id,\n meta: Procedures.meta,\n extension: Procedures.extension,\n basedOn: Procedures.basedOn,\n partOf: Procedures.partOf,\n status: Procedures.status,\n category: Procedures.category,\n code: Procedures.code,\n subject: Procedures.subject,\n encounter: Procedures.encounter,\n performed: Procedures.performed,\n location: Procedures.location,\n reasonCode: Procedures.reasonCode,\n reasonReference: Procedures.reasonReference,\n bodySite: Procedures.bodySite\n }\n\n// ServiceRequest SDE - regular requests (doNotPerform is false or absent)\n\n\ndefine "SDE Service Request Base":\n [ServiceRequest] ServiceRequests\n where exists ( "Initial Population" IP\n where ServiceRequests.authoredOn during IP.period\n )\n return {\n id: ServiceRequests.id,\n meta: ServiceRequests.meta,\n instantiatesCanonical: ServiceRequests.instantiatesCanonical,\n instantiatesUri: ServiceRequests.instantiatesUri,\n basedOn: ServiceRequests.basedOn,\n replaces: ServiceRequests.replaces,\n requisition: ServiceRequests.requisition,\n status: ServiceRequests.status,\n intent: ServiceRequests.intent,\n category: ServiceRequests.category,\n priority: ServiceRequests.priority,\n //doNotPerform: ServiceRequests.doNotPerform,\n \n code: ServiceRequests.code,\n orderDetail: ServiceRequests.orderDetail,\n quantity: ServiceRequests.quantity,\n subject: ServiceRequests.subject,\n encounter: ServiceRequests.encounter,\n occurrence: ServiceRequests.occurrence,\n asNeeded: ServiceRequests.asNeeded,\n authoredOn: ServiceRequests.authoredOn,\n requester: ServiceRequests.requester,\n performerType: ServiceRequests.performerType,\n performer: ServiceRequests.performer,\n locationCode: ServiceRequests.locationCode,\n reasonCode: ServiceRequests.reasonCode,\n reasonReference: ServiceRequests.reasonReference,\n insurance: ServiceRequests.insurance,\n bodySite: ServiceRequests.bodySite,\n note: ServiceRequests.note,\n patientInstruction: ServiceRequests.patientInstruction\n }\n\n// ServiceNotRequested SDE - negation requests (doNotPerform is true)\n\n\ndefine "SDE Service Not Requested":\n [ServiceNotRequested] ServiceNotReqs\n where exists ( "Initial Population" IP\n where ServiceNotReqs.authoredOn during IP.period\n )\n return {\n id: ServiceNotReqs.id,\n meta: ServiceNotReqs.meta,\n instantiatesCanonical: ServiceNotReqs.instantiatesCanonical,\n instantiatesUri: ServiceNotReqs.instantiatesUri,\n basedOn: ServiceNotReqs.basedOn,\n replaces: ServiceNotReqs.replaces,\n requisition: ServiceNotReqs.requisition,\n status: ServiceNotReqs.status,\n intent: ServiceNotReqs.intent,\n category: ServiceNotReqs.category,\n priority: ServiceNotReqs.priority,\n doNotPerform: ServiceNotReqs.doNotPerform,\n code: ServiceNotReqs.code,\n orderDetail: ServiceNotReqs.orderDetail,\n quantity: ServiceNotReqs.quantity,\n subject: ServiceNotReqs.subject,\n encounter: ServiceNotReqs.encounter,\n occurrence: ServiceNotReqs.occurrence,\n asNeeded: ServiceNotReqs.asNeeded,\n authoredOn: ServiceNotReqs.authoredOn,\n requester: ServiceNotReqs.requester,\n performerType: ServiceNotReqs.performerType,\n performer: ServiceNotReqs.performer,\n locationCode: ServiceNotReqs.locationCode,\n reasonCode: ServiceNotReqs.reasonCode,\n reasonReference: ServiceNotReqs.reasonReference,\n insurance: ServiceNotReqs.insurance,\n bodySite: ServiceNotReqs.bodySite,\n note: ServiceNotReqs.note,\n patientInstruction: ServiceNotReqs.patientInstruction\n }\n\n// Combined SDE for all Service Requests (both regular and negation)\n\n\ndefine "SDE Service Request":\n "SDE Service Request Base"\n union "SDE Service Not Requested"\n\n// Minimal patient SDE\n\n\ndefine "SDE Minimal Patient":\n [Patient] MinPt\n where exists ( "Initial Population" )\n return {\n id: MinPt.id,\n meta: MinPt.meta,\n extension: MinPt.extension,\n identifier: MinPt.identifier,\n active: MinPt.active,\n name: MinPt.name,\n telecom: MinPt.telecom,\n gender: MinPt.gender,\n birthDate: MinPt.birthDate,\n deceased: MinPt.deceased,\n address: MinPt.address,\n maritalStatus: MinPt.maritalStatus,\n multipleBirth: MinPt.multipleBirth,\n photo: MinPt.photo,\n contact: MinPt.contact,\n communication: MinPt.communication,\n generalPractitioner: MinPt.generalPractitioner,\n managingOrganization: MinPt.managingOrganization,\n link: MinPt.link\n }\n\ndefine "SDE Specimens":\n [USCore.SpecimenProfile] sp\n where exists ( "Initial Population" IP\n where "Normalize Interval"(sp.collection.collected) overlaps IP.period\n )\n return {\n id: sp.id,\n type: sp.type\n }\n\n// ----------------------------------------------------------------------\n// Helper functions\n// ----------------------------------------------------------------------\n\n\n\n\ndefine function "CheckIP"(encounter Encounter):\n exists ( "Initial Population" IP\n where encounter.id = IP.id\n )\n\n// Former NHSNHelpers functions, adapted for QI Core\n\n\ndefine function "Normalize Interval"(choice Choice<DateTime, Interval<DateTime>>):\n case\n when choice is DateTime then Interval[choice as DateTime, choice as DateTime]\n when choice is Interval<DateTime>then choice as Interval<DateTime>\n else null as Interval<DateTime>end\n\ndefine function "GetLocation"(reference Reference):\n singleton from ( [Location] Locations\n where Locations.id = GetId(reference.reference)\n )\n\ndefine function "GetId"(uri String):\n Last(Split(uri, '/'))\n\ndefine function "GetId"(uri FHIR.string):\n Last(Split(FHIRHelpers.ToString(uri), '/'))</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/NHSNAcuteCareHospitalMonthlyInitialPopulation1",
"version" : "1.1.000",
"name" : "NHSNAcuteCareHospitalMonthlyInitialPopulation1",
"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" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBOSFNOQWN1dGVDYXJlSG9zcGl0YWxNb250aGx5SW5pdGlhbFBvcHVsYXRpb24xIHZlcnNpb24gJzEuMS4wMDAnCgovLyBSZWJhc2VkIHRvIFFJIENvcmUgNi4wLjAKCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHMgdmVyc2lvbiAnNi4xLjAwMCcgY2FsbGVkIFNERQppbmNsdWRlIENRTUNvbW1vbiB2ZXJzaW9uICc1LjEuMDAwJyBjYWxsZWQgQ1FNQ29tbW9uCi8vIE5IU05IZWxwZXJzIGxvZ2ljIGlzIGlubGluZWQgYmVsb3cKCgpjb2Rlc3lzdGVtICJBY3RDb2RlIjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjMtQWN0Q29kZScKY29kZXN5c3RlbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9vYnNlcnZhdGlvbi1jYXRlZ29yeScKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiQ29uZGl0aW9uIENhdGVnb3J5IjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vY29uZGl0aW9uLWNhdGVnb3J5Jwpjb2Rlc3lzdGVtICJVUyBDb3JlIENvbmRpdGlvbiBDYXRlZ29yeSI6ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL2NvcmUvQ29kZVN5c3RlbS9jb25kaXRpb24tY2F0ZWdvcnknCmNvZGVzeXN0ZW0gIkNvbmRpdGlvbiBDbGluaWNhbCBTdGF0dXMiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS9jb25kaXRpb24tY2xpbmljYWwnCmNvZGVzeXN0ZW0gIlNOT01FRENUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnCmNvZGVzeXN0ZW0gIk1lZGljYXRpb25SZXF1ZXN0IENhdGVnb3J5IjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vbWVkaWNhdGlvbnJlcXVlc3QtY2F0ZWdvcnknCgp2YWx1ZXNldCAiSW5wYXRpZW50LCBFbWVyZ2VuY3ksIGFuZCBPYnNlcnZhdGlvbiBMb2NhdGlvbnMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ2LjI2NScKdmFsdWVzZXQgIkVtZXJnZW5jeSBEZXBhcnRtZW50IFZpc2l0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjExNy4xLjcuMS4yOTInCnZhbHVlc2V0ICJFbmNvdW50ZXIgSW5wYXRpZW50IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjY2Ni41LjMwNycKdmFsdWVzZXQgIk9ic2VydmF0aW9uIFNlcnZpY2VzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTExMS4xNDMnCnZhbHVlc2V0ICJOSFNOIElucGF0aWVudCBFbmNvdW50ZXIgQ2xhc3MgQ29kZXMiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMDQ2LjI3NCcKCi8vIE9ic2VydmF0aW9uIENhdGVnb3J5IGNvZGVzCgoKY29kZSAibGFib3JhdG9yeSI6ICdsYWJvcmF0b3J5JyBmcm9tICJPYnNlcnZhdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnTGFib3JhdG9yeScKY29kZSAic29jaWFsLWhpc3RvcnkiOiAnc29jaWFsLWhpc3RvcnknIGZyb20gIk9ic2VydmF0aW9uIENhdGVnb3J5IiBkaXNwbGF5ICdTb2NpYWwgSGlzdG9yeScKY29kZSAidml0YWwtc2lnbnMiOiAndml0YWwtc2lnbnMnIGZyb20gIk9ic2VydmF0aW9uIENhdGVnb3J5IiBkaXNwbGF5ICdWaXRhbCBTaWducycKY29kZSAiaW1hZ2luZyI6ICdpbWFnaW5nJyBmcm9tICJPYnNlcnZhdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnSW1hZ2luZycKY29kZSAicHJvY2VkdXJlIjogJ3Byb2NlZHVyZScgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ1Byb2NlZHVyZScKY29kZSAic3VydmV5IjogJ3N1cnZleScgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ1N1cnZleScKCi8vIENvbmRpdGlvbiBjYXRlZ29yeQoKY29kZSAiZW5jb3VudGVyLWRpYWdub3NpcyI6ICdlbmNvdW50ZXItZGlhZ25vc2lzJyBmcm9tICJDb25kaXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ0VuY291bnRlciBEaWFnbm9zaXMnCgovLyBEaWFnbm9zdGljIFJlcG9ydCBDYXRlZ29yeSAoTE9JTkMtYmFzZWQpCgpjb2RlICJSYWRpb2xvZ3kiOiAnTFAyOTY4NC01JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnUmFkaW9sb2d5Jwpjb2RlICJQYXRob2xvZ3kiOiAnTFA3ODM5LTYnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdQYXRob2xvZ3knCmNvZGUgIkNhcmRpb2xvZ3kiOiAnTFAyOTcwOC0yJyBmcm9tICJMT0lOQyIgZGlzcGxheSAnQ2FyZGlvbG9neScKCi8vIEVtZXJnZW5jeSBFbmNvdW50ZXIgQ2xhc3MKCmNvZGUgImVtZXJnZW5jeSI6ICdFTUVSJyBmcm9tICJBY3RDb2RlIiBkaXNwbGF5ICdlbWVyZ2VuY3knCmNvZGUgIm9ic2VydmF0aW9uIGVuY291bnRlciI6ICdPQlNFTkMnIGZyb20gIkFjdENvZGUiIGRpc3BsYXkgJ29ic2VydmF0aW9uIGVuY291bnRlcicKCi8vIENvbmRpdGlvbiBjbGluaWNhbFN0YXR1cwoKY29kZSAiYWN0aXZlIjogJ2FjdGl2ZScgZnJvbSAiQ29uZGl0aW9uIENsaW5pY2FsIFN0YXR1cyIgZGlzcGxheSAnYWN0aXZlJwoKLy8gUHJvY2VkdXJlIGNhdGVnb3J5Cgpjb2RlICJTdXJnaWNhbCBwcm9jZWR1cmUiOiAnMzg3NzEzMDAzJyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnU3VyZ2ljYWwgcHJvY2VkdXJlJwpjb2RlICJEaWFnbm9zdGljIHByb2NlZHVyZSI6ICcxMDM2OTMwMDcnIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdEaWFnbm9zdGljIHByb2NlZHVyZScKCi8vIE1lZGljYXRpb25SZXF1ZXN0IGNhdGVnb3J5Cgpjb2RlICJpbnBhdGllbnQiOiAnaW5wYXRpZW50JyBmcm9tICJNZWRpY2F0aW9uUmVxdWVzdCBDYXRlZ29yeSIgZGlzcGxheSAnSW5wYXRpZW50Jwpjb2RlICJvdXRwYXRpZW50IjogJ291dHBhdGllbnQnIGZyb20gIk1lZGljYXRpb25SZXF1ZXN0IENhdGVnb3J5IiBkaXNwbGF5ICdPdXRwYXRpZW50JwoKLy8gU2VydmljZVJlcXVlc3QgY2F0ZWdvcnkKCmNvZGUgIkxhYm9yYXRvcnkgcHJvY2VkdXJlIjogJzEwODI1MjAwNycgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0xhYm9yYXRvcnkgcHJvY2VkdXJlJwpjb2RlICJJbWFnaW5nIjogJzM2MzY3OTAwNScgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0ltYWdpbmcnCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNi0wMi0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50IAoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb3JlIGVuY291bnRlciBsb2dpYwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBFbmNvdW50ZXJzIHdpdGggTkhTTiBjbGFzcyBjb2RlcyAoSU1QLCBBQ1VURSwgTk9OQUMsIFNTKQoKCgoKCmRlZmluZSAiRW5jb3VudGVycyB3aXRoIE5IU04gSW5wYXRpZW50IENsYXNzIjoKICBbRW5jb3VudGVyXSBFbmMKICAgIHdoZXJlIEVuYy5jbGFzcyB+IFVTUXVhbGl0eUNvcmVDb21tb24uImlucGF0aWVudCBlbmNvdW50ZXIiCiAgICAgIG9yIEVuYy5jbGFzcyB+IFVTUXVhbGl0eUNvcmVDb21tb24uImlucGF0aWVudCBhY3V0ZSIKICAgICAgb3IgRW5jLmNsYXNzIH4gVVNRdWFsaXR5Q29yZUNvbW1vbi4iaW5wYXRpZW50IG5vbi1hY3V0ZSIKICAgICAgb3IgRW5jLmNsYXNzIH4gVVNRdWFsaXR5Q29yZUNvbW1vbi4ic2hvcnQgc3RheSIKCmRlZmluZSAiUXVhbGlmeWluZyBFbmNvdW50ZXJzIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogICggW0VuY291bnRlcjogIkVuY291bnRlciBJbnBhdGllbnQiXQogICAgdW5pb24gW0VuY291bnRlcjogIkVtZXJnZW5jeSBEZXBhcnRtZW50IFZpc2l0Il0KICAgIHVuaW9uIFtFbmNvdW50ZXI6ICJPYnNlcnZhdGlvbiBTZXJ2aWNlcyJdCiAgICB1bmlvbiAiRW5jb3VudGVycyB3aXRoIE5IU04gSW5wYXRpZW50IENsYXNzIgogICAgdW5pb24gW0VuY291bnRlcjogY2xhc3MgfiAiZW1lcmdlbmN5Il0KICAgIHVuaW9uIFtFbmNvdW50ZXI6IGNsYXNzIH4gIm9ic2VydmF0aW9uIGVuY291bnRlciJdICkgUXVhbGlmeWluZ0VuY291bnRlcnMKICAgIHdoZXJlIFF1YWxpZnlpbmdFbmNvdW50ZXJzLnN0YXR1cyBpbiB7ICdpbi1wcm9ncmVzcycsICdmaW5pc2hlZCcsICd0cmlhZ2VkJywgJ29ubGVhdmUnLCAnZW50ZXJlZC1pbi1lcnJvcicgfQogICAgICBhbmQgUXVhbGlmeWluZ0VuY291bnRlcnMucGVyaW9kIG92ZXJsYXBzICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkVuY291bnRlcnMiOgogIFtFbmNvdW50ZXJdCgpkZWZpbmUgIkVuY291bnRlcnMgd2l0aCBQYXRpZW50IEhvc3BpdGFsIExvY2F0aW9ucyI6CiAgIkVuY291bnRlcnMiIEVucwogICAgd2hlcmUgZXhpc3RzICggRW5zLmxvY2F0aW9uIEVuY291bnRlckxvY2F0aW9uCiAgICAgICAgd2hlcmUgRW5jb3VudGVyTG9jYXRpb24ucGVyaW9kIG92ZXJsYXBzIEVucy5wZXJpb2QKICAgICAgICAgIGFuZCBFbmNvdW50ZXJMb2NhdGlvbi5sb2NhdGlvbi5nZXRMb2NhdGlvbiAoICkudHlwZSBpbiAiSW5wYXRpZW50LCBFbWVyZ2VuY3ksIGFuZCBPYnNlcnZhdGlvbiBMb2NhdGlvbnMiCiAgICApCiAgICAgIGFuZCBFbnMuc3RhdHVzIGluIHsgJ2luLXByb2dyZXNzJywgJ2ZpbmlzaGVkJywgJ3RyaWFnZWQnLCAnb25sZWF2ZScsICdlbnRlcmVkLWluLWVycm9yJyB9CiAgICAgIGFuZCBFbnMucGVyaW9kIG92ZXJsYXBzICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgIlF1YWxpZnlpbmcgRW5jb3VudGVycyBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgdW5pb24gIkVuY291bnRlcnMgd2l0aCBQYXRpZW50IEhvc3BpdGFsIExvY2F0aW9ucyIKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29yZSByZXRyaWV2ZXMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gTG9jYXRpb25zIGZyb20gSVAgZW5jb3VudGVycwoKCgoKCmRlZmluZSAiR2V0IExvY2F0aW9ucyBmcm9tIElQIEVuY291bnRlcnMgaW4gTWVhc3VyZW1lbnQgUGVyaW9kIjoKICBmbGF0dGVuICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgbGV0IGxvY2F0aW9uRWxlbWVudHM6IElQLmxvY2F0aW9uCiAgICAgIHJldHVybiBsb2NhdGlvbkVsZW1lbnRzIExFCiAgICAgICAgbGV0IGxvY2F0aW9uUmVmZXJlbmNlOiBMRS5sb2NhdGlvbgogICAgICAgIHJldHVybiBsb2NhdGlvblJlZmVyZW5jZS5nZXRMb2NhdGlvbiAoICkKICApCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFNERXMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgoKZGVmaW5lICJTREUgQ29uZGl0aW9uIFByb2JsZW1zIEhlYWx0aENvbmNlcm5zIjoKICBbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuc10gRGlhZ25vc2lzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlIERpYWdub3Npcy5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGRheSBvZiBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBEaWFnbm9zaXMuaWQsCiAgICAgIG1ldGE6IERpYWdub3Npcy5tZXRhLAogICAgICBzdGF0dXM6IERpYWdub3Npcy5jbGluaWNhbFN0YXR1cywKICAgICAgdmVyaWZpY2F0aW9uU3RhdHVzOiBEaWFnbm9zaXMudmVyaWZpY2F0aW9uU3RhdHVzLAogICAgICBjYXRlZ29yeTogRGlhZ25vc2lzLmNhdGVnb3J5LAogICAgICBzZXZlcml0eTogRGlhZ25vc2lzLnNldmVyaXR5LAogICAgICBjb2RlOiBEaWFnbm9zaXMuY29kZSwKICAgICAgYm9keVNpdGU6IERpYWdub3Npcy5ib2R5U2l0ZSwKICAgICAgc3ViamVjdDogRGlhZ25vc2lzLnN1YmplY3QsCiAgICAgIGVuY291bnRlclJlZmVyZW5jZUlkOiBEaWFnbm9zaXMuZW5jb3VudGVyLnJlZmVyZW5jZS5nZXRJZCAoICksCiAgICAgIG9uc2V0OiBEaWFnbm9zaXMub25zZXQsCiAgICAgIHN0YWdlOiBEaWFnbm9zaXMuc3RhZ2UsCiAgICAgIGV2aWRlbmNlOiBEaWFnbm9zaXMuZXZpZGVuY2UsCiAgICAgIG5vdGU6IERpYWdub3Npcy5ub3RlCiAgICB9CgpkZWZpbmUgIlNERSBDb25kaXRpb24gRGlhZ25vc2lzIjoKICBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzXSBEaWFnbm9zaXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgRGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgZGF5IG9mIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IERpYWdub3Npcy5pZCwKICAgICAgbWV0YTogRGlhZ25vc2lzLm1ldGEsCiAgICAgIHN0YXR1czogRGlhZ25vc2lzLmNsaW5pY2FsU3RhdHVzLAogICAgICB2ZXJpZmljYXRpb25TdGF0dXM6IERpYWdub3Npcy52ZXJpZmljYXRpb25TdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBEaWFnbm9zaXMuY2F0ZWdvcnksCiAgICAgIHNldmVyaXR5OiBEaWFnbm9zaXMuc2V2ZXJpdHksCiAgICAgIGNvZGU6IERpYWdub3Npcy5jb2RlLAogICAgICBib2R5U2l0ZTogRGlhZ25vc2lzLmJvZHlTaXRlLAogICAgICBzdWJqZWN0OiBEaWFnbm9zaXMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyUmVmZXJlbmNlSWQ6IERpYWdub3Npcy5lbmNvdW50ZXIucmVmZXJlbmNlLmdldElkICggKSwKICAgICAgb25zZXQ6IERpYWdub3Npcy5vbnNldCwKICAgICAgc3RhZ2U6IERpYWdub3Npcy5zdGFnZSwKICAgICAgZXZpZGVuY2U6IERpYWdub3Npcy5ldmlkZW5jZSwKICAgICAgbm90ZTogRGlhZ25vc2lzLm5vdGUKICAgIH0KCi8vIENvdmVyYWdlIFNERSDigJMgdHVwbGVzIG9mIENvdmVyYWdlIGRhdGEKCgpkZWZpbmUgIlNERSBDb3ZlcmFnZSI6CiAgW0NvdmVyYWdlXSBDb3ZlcmFnZXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgQ292ZXJhZ2VzLnBlcmlvZCBvdmVybGFwcyBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBDb3ZlcmFnZXMuaWQsCiAgICAgIG1ldGE6IENvdmVyYWdlcy5tZXRhLAogICAgICBzdGF0dXM6IENvdmVyYWdlcy5zdGF0dXMsCiAgICAgIHR5cGU6IENvdmVyYWdlcy50eXBlLAogICAgICBwb2xpY3lIb2xkZXI6IENvdmVyYWdlcy5wb2xpY3lIb2xkZXIsCiAgICAgIHN1YnNjcmliZXI6IENvdmVyYWdlcy5zdWJzY3JpYmVyLAogICAgICBzdWJzY3JpYmVySWQ6IENvdmVyYWdlcy5zdWJzY3JpYmVySWQsCiAgICAgIGJlbmVmaWNpYXJ5OiBDb3ZlcmFnZXMuYmVuZWZpY2lhcnksCiAgICAgIGRlcGVuZGVudDogQ292ZXJhZ2VzLmRlcGVuZGVudCwKICAgICAgcmVsYXRpb25zaGlwOiBDb3ZlcmFnZXMucmVsYXRpb25zaGlwLAogICAgICBwZXJpb2Q6IENvdmVyYWdlcy5wZXJpb2QsCiAgICAgIHBheW9yOiBDb3ZlcmFnZXMucGF5b3IsCiAgICAgIGNsYXNzOiBDb3ZlcmFnZXMuY2xhc3MsCiAgICAgIG9yZGVyOiBDb3ZlcmFnZXMub3JkZXIsCiAgICAgIG5ldHdvcms6IENvdmVyYWdlcy5uZXR3b3JrLAogICAgICBzdWJyb2dhdGlvbjogQ292ZXJhZ2VzLnN1YnJvZ2F0aW9uLAogICAgICBjb250cmFjdDogQ292ZXJhZ2VzLmNvbnRyYWN0CiAgICB9CgovLyBEZXZpY2UgU0RFIOKAkyB0dXBsZXMgb2YgRGV2aWNlIGRhdGEKCgpkZWZpbmUgIlNERSBEZXZpY2UiOgogIFtEZXZpY2VdIERldmljZXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBEZXZpY2VzLmlkLAogICAgICBtZXRhOiBEZXZpY2VzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogRGV2aWNlcy5leHRlbnNpb24sCiAgICAgIHN0YXR1czogRGV2aWNlcy5zdGF0dXMsCiAgICAgIGV4cGlyYXRpb25EYXRlOiBEZXZpY2VzLmV4cGlyYXRpb25EYXRlLAogICAgICBsb3ROdW1iZXI6IERldmljZXMubG90TnVtYmVyLAogICAgICBzZXJpYWxOdW1iZXI6IERldmljZXMuc2VyaWFsTnVtYmVyLAogICAgICBtb2RlbE51bWJlcjogRGV2aWNlcy5tb2RlbE51bWJlciwKICAgICAgcGFydE51bWJlcjogRGV2aWNlcy5wYXJ0TnVtYmVyLAogICAgICB0eXBlOiBEZXZpY2VzLnR5cGUsCiAgICAgIHBhdGllbnQ6IERldmljZXMucGF0aWVudCwKICAgICAgcGFyZW50OiBEZXZpY2VzLnBhcmVudAogICAgfQoKLy8gRGlhZ25vc3RpY1JlcG9ydCBTREVzCgoKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBMYWIiOgogIFtEaWFnbm9zdGljUmVwb3J0TGFiXSBkcgogICAgd2hlcmUgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICB3aGVyZSAiTm9ybWFsaXplIEludGVydmFsIihkci5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQoKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBOb3RlIjoKICBbRGlhZ25vc3RpY1JlcG9ydE5vdGVdIGRyCiAgICB3aGVyZSAoIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJSYWRpb2xvZ3kiCiAgICAgICkKICAgICAgICBvciBleGlzdHMgKCBkci5jYXRlZ29yeSBDYXRlZ29yeQogICAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJQYXRob2xvZ3kiCiAgICAgICAgKQogICAgICAgIG9yIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICAgIHdoZXJlIENhdGVnb3J5IH4gIkNhcmRpb2xvZ3kiCiAgICAgICAgKQogICAgKQogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKGRyLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBkci5pZCwKICAgICAgbWV0YTogZHIubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBkci5leHRlbnNpb24sCiAgICAgIGJhc2VkT246IGRyLmJhc2VkT24sCiAgICAgIHN0YXR1czogZHIuc3RhdHVzLAogICAgICBjYXRlZ29yeTogZHIuY2F0ZWdvcnksCiAgICAgIGNvZGU6IGRyLmNvZGUsCiAgICAgIHN1YmplY3Q6IGRyLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogZHIuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IGRyLmVmZmVjdGl2ZSwKICAgICAgaXNzdWVkOiBkci5pc3N1ZWQsCiAgICAgIHNwZWNpbWVuOiBkci5zcGVjaW1lbiwKICAgICAgcmVzdWx0OiBkci5yZXN1bHQsCiAgICAgIGNvbmNsdXNpb246IGRyLmNvbmNsdXNpb24sCiAgICAgIGNvbmNsdXNpb25Db2RlOiBkci5jb25jbHVzaW9uQ29kZQogICAgfQoKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBPdGhlcnMiOgogIFtEaWFnbm9zdGljUmVwb3J0Tm90ZV0gZHIKICAgIHdoZXJlIG5vdCAoIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJSYWRpb2xvZ3kiCiAgICAgICkKICAgICAgICBvciBleGlzdHMgKCBkci5jYXRlZ29yeSBDYXRlZ29yeQogICAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJQYXRob2xvZ3kiCiAgICAgICAgKQogICAgICAgIG9yIGV4aXN0cyAoIGRyLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICAgIHdoZXJlIENhdGVnb3J5IH4gIkNhcmRpb2xvZ3kiCiAgICAgICAgKQogICAgKQogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKGRyLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBkci5pZCwKICAgICAgbWV0YTogZHIubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBkci5leHRlbnNpb24sCiAgICAgIGJhc2VkT246IGRyLmJhc2VkT24sCiAgICAgIHN0YXR1czogZHIuc3RhdHVzLAogICAgICBjYXRlZ29yeTogZHIuY2F0ZWdvcnksCiAgICAgIGNvZGU6IGRyLmNvZGUsCiAgICAgIHN1YmplY3Q6IGRyLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogZHIuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IGRyLmVmZmVjdGl2ZSwKICAgICAgaXNzdWVkOiBkci5pc3N1ZWQsCiAgICAgIHNwZWNpbWVuOiBkci5zcGVjaW1lbiwKICAgICAgcmVzdWx0OiBkci5yZXN1bHQsCiAgICAgIGNvbmNsdXNpb246IGRyLmNvbmNsdXNpb24sCiAgICAgIGNvbmNsdXNpb25Db2RlOiBkci5jb25jbHVzaW9uQ29kZQogICAgfQoKLy8gRW5jb3VudGVyIFNERXMKCgpkZWZpbmUgIlNERSBFbmNvdW50ZXIiOgogICJFbmNvdW50ZXJzIiBFbnMKICAgIHdoZXJlIG5vdCAiQ2hlY2tJUCIoRW5zKQogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlIEVucy5wZXJpb2Qgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBFbnMuaWQsCiAgICAgIG1ldGE6IEVucy5tZXRhLAogICAgICBpZGVudGlmaWVyOiBFbnMuaWRlbnRpZmllciwKICAgICAgc3RhdHVzOiBFbnMuc3RhdHVzLAogICAgICBzdGF0dXNIaXN0b3J5OiBFbnMuc3RhdHVzSGlzdG9yeSwKICAgICAgY2xhc3M6IEVucy5jbGFzcywKICAgICAgY2xhc3NIaXN0b3J5OiBFbnMuY2xhc3NIaXN0b3J5LAogICAgICB0eXBlOiBFbnMudHlwZSwKICAgICAgc2VydmljZVR5cGU6IEVucy5zZXJ2aWNlVHlwZSwKICAgICAgcHJpb3JpdHk6IEVucy5wcmlvcml0eSwKICAgICAgc3ViamVjdDogRW5zLnN1YmplY3QsCiAgICAgIHBlcmlvZDogRW5zLnBlcmlvZCwKICAgICAgbGVuZ3RoOiBFbnMubGVuZ3RoLAogICAgICByZWFzb25Db2RlOiBFbnMucmVhc29uQ29kZSwKICAgICAgcmVhc29uUmVmZXJlbmNlOiBFbnMucmVhc29uUmVmZXJlbmNlLAogICAgICBkaWFnbm9zaXM6IEVucy5kaWFnbm9zaXMsCiAgICAgIGFjY291bnQ6IEVucy5hY2NvdW50LAogICAgICBob3NwaXRhbGl6YXRpb246IEVucy5ob3NwaXRhbGl6YXRpb24sCiAgICAgIGxvY2F0aW9uOiBFbnMubG9jYXRpb24sCiAgICAgIHBhcnRPZjogRW5zLnBhcnRPZgogICAgfQoKZGVmaW5lICJTREUgSVAgRW5jb3VudGVycyI6CiAgIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgIHJldHVybiB7CiAgICAgIGlkOiBJUC5pZCwKICAgICAgbWV0YTogSVAubWV0YSwKICAgICAgaWRlbnRpZmllcjogSVAuaWRlbnRpZmllciwKICAgICAgc3RhdHVzOiBJUC5zdGF0dXMsCiAgICAgIHN0YXR1c0hpc3Rvcnk6IElQLnN0YXR1c0hpc3RvcnksCiAgICAgIGNsYXNzOiBJUC5jbGFzcywKICAgICAgY2xhc3NIaXN0b3J5OiBJUC5jbGFzc0hpc3RvcnksCiAgICAgIHR5cGU6IElQLnR5cGUsCiAgICAgIHNlcnZpY2VUeXBlOiBJUC5zZXJ2aWNlVHlwZSwKICAgICAgcHJpb3JpdHk6IElQLnByaW9yaXR5LAogICAgICBzdWJqZWN0OiBJUC5zdWJqZWN0LAogICAgICBwZXJpb2Q6IElQLnBlcmlvZCwKICAgICAgbGVuZ3RoOiBJUC5sZW5ndGgsCiAgICAgIHJlYXNvbkNvZGU6IElQLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogSVAucmVhc29uUmVmZXJlbmNlLAogICAgICBkaWFnbm9zaXM6IElQLmRpYWdub3NpcywKICAgICAgYWNjb3VudDogSVAuYWNjb3VudCwKICAgICAgaG9zcGl0YWxpemF0aW9uOiBJUC5ob3NwaXRhbGl6YXRpb24sCiAgICAgIGxvY2F0aW9uOiBJUC5sb2NhdGlvbiwKICAgICAgcGFydE9mOiBJUC5wYXJ0T2YKICAgIH0KCi8vIExvY2F0aW9uIFNERQoKCmRlZmluZSAiU0RFIExvY2F0aW9uIjoKICAiR2V0IExvY2F0aW9ucyBmcm9tIElQIEVuY291bnRlcnMgaW4gTWVhc3VyZW1lbnQgUGVyaW9kIiBMb2NhdGlvbnMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iICkKICAgICAgYW5kIExvY2F0aW9ucyBpcyBub3QgbnVsbAogICAgcmV0dXJuIHsKICAgICAgaWQ6IExvY2F0aW9ucy5pZCwKICAgICAgbWV0YTogTG9jYXRpb25zLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogTG9jYXRpb25zLmV4dGVuc2lvbiwKICAgICAgc3RhdHVzOiBMb2NhdGlvbnMuc3RhdHVzLAogICAgICBvcGVyYXRpb25hbFN0YXR1czogTG9jYXRpb25zLm9wZXJhdGlvbmFsU3RhdHVzLAogICAgICBuYW1lOiBMb2NhdGlvbnMubmFtZSwKICAgICAgYWxpYXM6IExvY2F0aW9ucy5hbGlhcywKICAgICAgZGVzY3JpcHRpb246IExvY2F0aW9ucy5kZXNjcmlwdGlvbiwKICAgICAgbW9kZTogTG9jYXRpb25zLm1vZGUsCiAgICAgIHR5cGU6IExvY2F0aW9ucy50eXBlLAogICAgICB0ZWxlY29tOiBMb2NhdGlvbnMudGVsZWNvbSwKICAgICAgYWRkcmVzczogTG9jYXRpb25zLmFkZHJlc3MsCiAgICAgIHBoeXNpY2FsVHlwZTogTG9jYXRpb25zLnBoeXNpY2FsVHlwZSwKICAgICAgcG9zaXRpb246IExvY2F0aW9ucy5wb3NpdGlvbiwKICAgICAgbWFuYWdpbmdPcmdhbml6YXRpb246IExvY2F0aW9ucy5tYW5hZ2luZ09yZ2FuaXphdGlvbiwKICAgICAgcGFydE9mOiBMb2NhdGlvbnMucGFydE9mLAogICAgICBob3Vyc09mT3BlcmF0aW9uOiBMb2NhdGlvbnMuaG91cnNPZk9wZXJhdGlvbiwKICAgICAgYXZhaWxhYmlsaXR5RXhjZXB0aW9uczogTG9jYXRpb25zLmF2YWlsYWJpbGl0eUV4Y2VwdGlvbnMsCiAgICAgIGVuZHBvaW50OiBMb2NhdGlvbnMuZW5kcG9pbnQKICAgIH0KCi8vIE1lZGljYXRpb24gU0RFcwoKCmRlZmluZSAiU0RFIE1lZGljYXRpb24gQWRtaW5pc3RyYXRpb24iOgogICJTREUgTWVkaWNhdGlvbiBBZG1pbmlzdHJhdGlvbiBCYXNlIgogICAgdW5pb24gIlNERSBNZWRpY2F0aW9uIEFkbWluaXN0cmF0aW9uIE5vdCBEb25lIgoKZGVmaW5lICJTREUgTWVkaWNhdGlvbiBBZG1pbmlzdHJhdGlvbiBCYXNlIjoKICBbTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uXSBNZWRBZG1pbmlzdHJhdGlvbnMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgIk5vcm1hbGl6ZSBJbnRlcnZhbCIoTWVkQWRtaW5pc3RyYXRpb25zLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogTWVkQWRtaW5pc3RyYXRpb25zLmlkLAogICAgICBtZXRhOiBNZWRBZG1pbmlzdHJhdGlvbnMubWV0YSwKICAgICAgaW5zdGFudGlhdGVzOiBNZWRBZG1pbmlzdHJhdGlvbnMuaW5zdGFudGlhdGVzLAogICAgICBwYXJ0T2Y6IE1lZEFkbWluaXN0cmF0aW9ucy5wYXJ0T2YsCiAgICAgIHN0YXR1czogTWVkQWRtaW5pc3RyYXRpb25zLnN0YXR1cywKICAgICAgc3RhdHVzUmVhc29uOiBNZWRBZG1pbmlzdHJhdGlvbnMuc3RhdHVzUmVhc29uLAogICAgICBjYXRlZ29yeTogTWVkQWRtaW5pc3RyYXRpb25zLmNhdGVnb3J5LAogICAgICBtZWRpY2F0aW9uOiBNZWRBZG1pbmlzdHJhdGlvbnMubWVkaWNhdGlvbiwKICAgICAgc3ViamVjdDogTWVkQWRtaW5pc3RyYXRpb25zLnN1YmplY3QsCiAgICAgIGNvbnRleHQ6IE1lZEFkbWluaXN0cmF0aW9ucy5jb250ZXh0LAogICAgICBzdXBwb3J0aW5nSW5mb3JtYXRpb246IE1lZEFkbWluaXN0cmF0aW9ucy5zdXBwb3J0aW5nSW5mb3JtYXRpb24sCiAgICAgIGVmZmVjdGl2ZTogTWVkQWRtaW5pc3RyYXRpb25zLmVmZmVjdGl2ZSwKICAgICAgcGVyZm9ybWVyOiBNZWRBZG1pbmlzdHJhdGlvbnMucGVyZm9ybWVyLAogICAgICByZWFzb25Db2RlOiBNZWRBZG1pbmlzdHJhdGlvbnMucmVhc29uQ29kZSwKICAgICAgcmVhc29uUmVmZXJlbmNlOiBNZWRBZG1pbmlzdHJhdGlvbnMucmVhc29uUmVmZXJlbmNlLAogICAgICByZXF1ZXN0OiBNZWRBZG1pbmlzdHJhdGlvbnMucmVxdWVzdCwKICAgICAgZGV2aWNlOiBNZWRBZG1pbmlzdHJhdGlvbnMuZGV2aWNlLAogICAgICBub3RlOiBNZWRBZG1pbmlzdHJhdGlvbnMubm90ZSwKICAgICAgZG9zYWdlOiBNZWRBZG1pbmlzdHJhdGlvbnMuZG9zYWdlCiAgICB9CgpkZWZpbmUgIlNERSBNZWRpY2F0aW9uIEFkbWluaXN0cmF0aW9uIE5vdCBEb25lIjoKICBbTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uTm90RG9uZV0gTWVkQWRtaW5pc3RyYXRpb25zCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKE1lZEFkbWluaXN0cmF0aW9ucy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE1lZEFkbWluaXN0cmF0aW9ucy5pZCwKICAgICAgbWV0YTogTWVkQWRtaW5pc3RyYXRpb25zLm1ldGEsCiAgICAgIGluc3RhbnRpYXRlczogTWVkQWRtaW5pc3RyYXRpb25zLmluc3RhbnRpYXRlcywKICAgICAgcGFydE9mOiBNZWRBZG1pbmlzdHJhdGlvbnMucGFydE9mLAogICAgICBzdGF0dXM6IE1lZEFkbWluaXN0cmF0aW9ucy5zdGF0dXMsCiAgICAgIHN0YXR1c1JlYXNvbjogTWVkQWRtaW5pc3RyYXRpb25zLnN0YXR1c1JlYXNvbiwKICAgICAgY2F0ZWdvcnk6IE1lZEFkbWluaXN0cmF0aW9ucy5jYXRlZ29yeSwKICAgICAgbWVkaWNhdGlvbjogTWVkQWRtaW5pc3RyYXRpb25zLm1lZGljYXRpb24sCiAgICAgIHN1YmplY3Q6IE1lZEFkbWluaXN0cmF0aW9ucy5zdWJqZWN0LAogICAgICBjb250ZXh0OiBNZWRBZG1pbmlzdHJhdGlvbnMuY29udGV4dCwKICAgICAgc3VwcG9ydGluZ0luZm9ybWF0aW9uOiBNZWRBZG1pbmlzdHJhdGlvbnMuc3VwcG9ydGluZ0luZm9ybWF0aW9uLAogICAgICBlZmZlY3RpdmU6IE1lZEFkbWluaXN0cmF0aW9ucy5lZmZlY3RpdmUsCiAgICAgIHBlcmZvcm1lcjogTWVkQWRtaW5pc3RyYXRpb25zLnBlcmZvcm1lciwKICAgICAgcmVhc29uQ29kZTogTWVkQWRtaW5pc3RyYXRpb25zLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogTWVkQWRtaW5pc3RyYXRpb25zLnJlYXNvblJlZmVyZW5jZSwKICAgICAgcmVxdWVzdDogTWVkQWRtaW5pc3RyYXRpb25zLnJlcXVlc3QsCiAgICAgIGRldmljZTogTWVkQWRtaW5pc3RyYXRpb25zLmRldmljZSwKICAgICAgbm90ZTogTWVkQWRtaW5pc3RyYXRpb25zLm5vdGUsCiAgICAgIGRvc2FnZTogTWVkQWRtaW5pc3RyYXRpb25zLmRvc2FnZQogICAgfQoKLy8gU0RFIE1lZGljYXRpb24gUmVxdWVzdCAtIHJlZ3VsYXIgcmVxdWVzdHMgKGRvTm90UGVyZm9ybSBpcyBmYWxzZSBvciBhYnNlbnQpCgoKZGVmaW5lICJTREUgTWVkaWNhdGlvbiBSZXF1ZXN0IEJhc2UiOgogIFtNZWRpY2F0aW9uUmVxdWVzdF0gTWVkUmVxdWVzdHMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgTWVkUmVxdWVzdHMuYXV0aG9yZWRPbiBkdXJpbmcgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogTWVkUmVxdWVzdHMuaWQsCiAgICAgIG1ldGE6IE1lZFJlcXVlc3RzLm1ldGEsCiAgICAgIHN0YXR1czogTWVkUmVxdWVzdHMuc3RhdHVzLAogICAgICBzdGF0dXNSZWFzb246IE1lZFJlcXVlc3RzLnN0YXR1c1JlYXNvbiwKICAgICAgaW50ZW50OiBNZWRSZXF1ZXN0cy5pbnRlbnQsCiAgICAgIGNhdGVnb3J5OiBNZWRSZXF1ZXN0cy5jYXRlZ29yeSwKICAgICAgcHJpb3JpdHk6IE1lZFJlcXVlc3RzLnByaW9yaXR5LAogICAgICAvL2RvTm90UGVyZm9ybTogTWVkUmVxdWVzdHMuZG9Ob3RQZXJmb3JtLAogICAgICAKICAgICAgcmVwb3J0ZWQ6IE1lZFJlcXVlc3RzLnJlcG9ydGVkLAogICAgICBtZWRpY2F0aW9uOiBNZWRSZXF1ZXN0cy5tZWRpY2F0aW9uLAogICAgICBzdWJqZWN0OiBNZWRSZXF1ZXN0cy5zdWJqZWN0LAogICAgICBlbmNvdW50ZXI6IE1lZFJlcXVlc3RzLmVuY291bnRlciwKICAgICAgYXV0aG9yZWRPbjogTWVkUmVxdWVzdHMuYXV0aG9yZWRPbiwKICAgICAgcmVxdWVzdGVyOiBNZWRSZXF1ZXN0cy5yZXF1ZXN0ZXIsCiAgICAgIHJlY29yZGVyOiBNZWRSZXF1ZXN0cy5yZWNvcmRlciwKICAgICAgcmVhc29uQ29kZTogTWVkUmVxdWVzdHMucmVhc29uQ29kZSwKICAgICAgcmVhc29uUmVmZXJlbmNlOiBNZWRSZXF1ZXN0cy5yZWFzb25SZWZlcmVuY2UsCiAgICAgIGluc3RhbnRpYXRlc0Nhbm9uaWNhbDogTWVkUmVxdWVzdHMuaW5zdGFudGlhdGVzQ2Fub25pY2FsLAogICAgICBpbnN0YW50aWF0ZXNVcmk6IE1lZFJlcXVlc3RzLmluc3RhbnRpYXRlc1VyaSwKICAgICAgY291cnNlT2ZUaGVyYXB5VHlwZTogTWVkUmVxdWVzdHMuY291cnNlT2ZUaGVyYXB5VHlwZSwKICAgICAgZG9zYWdlSW5zdHJ1Y3Rpb246IE1lZFJlcXVlc3RzLmRvc2FnZUluc3RydWN0aW9uCiAgICB9CgovLyBTREUgTWVkaWNhdGlvbiBOb3QgUmVxdWVzdGVkIC0gbmVnYXRpb24gcmVxdWVzdHMgKGRvTm90UGVyZm9ybSBpcyB0cnVlKQoKCmRlZmluZSAiU0RFIE1lZGljYXRpb24gTm90IFJlcXVlc3RlZCI6CiAgW01lZGljYXRpb25Ob3RSZXF1ZXN0ZWRdIE1lZE5vdFJlcXVlc3RzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlIE1lZE5vdFJlcXVlc3RzLmF1dGhvcmVkT24gZHVyaW5nIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE1lZE5vdFJlcXVlc3RzLmlkLAogICAgICBtZXRhOiBNZWROb3RSZXF1ZXN0cy5tZXRhLAogICAgICBzdGF0dXM6IE1lZE5vdFJlcXVlc3RzLnN0YXR1cywKICAgICAgc3RhdHVzUmVhc29uOiBNZWROb3RSZXF1ZXN0cy5zdGF0dXNSZWFzb24sCiAgICAgIGludGVudDogTWVkTm90UmVxdWVzdHMuaW50ZW50LAogICAgICBjYXRlZ29yeTogTWVkTm90UmVxdWVzdHMuY2F0ZWdvcnksCiAgICAgIHByaW9yaXR5OiBNZWROb3RSZXF1ZXN0cy5wcmlvcml0eSwKICAgICAgZG9Ob3RQZXJmb3JtOiBNZWROb3RSZXF1ZXN0cy5kb05vdFBlcmZvcm0sCiAgICAgIHJlcG9ydGVkOiBNZWROb3RSZXF1ZXN0cy5yZXBvcnRlZCwKICAgICAgbWVkaWNhdGlvbjogTWVkTm90UmVxdWVzdHMubWVkaWNhdGlvbiwKICAgICAgc3ViamVjdDogTWVkTm90UmVxdWVzdHMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBNZWROb3RSZXF1ZXN0cy5lbmNvdW50ZXIsCiAgICAgIGF1dGhvcmVkT246IE1lZE5vdFJlcXVlc3RzLmF1dGhvcmVkT24sCiAgICAgIHJlcXVlc3RlcjogTWVkTm90UmVxdWVzdHMucmVxdWVzdGVyLAogICAgICByZWNvcmRlcjogTWVkTm90UmVxdWVzdHMucmVjb3JkZXIsCiAgICAgIHJlYXNvbkNvZGU6IE1lZE5vdFJlcXVlc3RzLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogTWVkTm90UmVxdWVzdHMucmVhc29uUmVmZXJlbmNlLAogICAgICBpbnN0YW50aWF0ZXNDYW5vbmljYWw6IE1lZE5vdFJlcXVlc3RzLmluc3RhbnRpYXRlc0Nhbm9uaWNhbCwKICAgICAgaW5zdGFudGlhdGVzVXJpOiBNZWROb3RSZXF1ZXN0cy5pbnN0YW50aWF0ZXNVcmksCiAgICAgIGNvdXJzZU9mVGhlcmFweVR5cGU6IE1lZE5vdFJlcXVlc3RzLmNvdXJzZU9mVGhlcmFweVR5cGUsCiAgICAgIGRvc2FnZUluc3RydWN0aW9uOiBNZWROb3RSZXF1ZXN0cy5kb3NhZ2VJbnN0cnVjdGlvbgogICAgfQoKLy8gQ29tYmluZWQgU0RFIGZvciBhbGwgTWVkaWNhdGlvbiBSZXF1ZXN0cyAoYm90aCByZWd1bGFyIGFuZCBuZWdhdGlvbikKCgpkZWZpbmUgIlNERSBNZWRpY2F0aW9uIFJlcXVlc3QiOgogICJTREUgTWVkaWNhdGlvbiBSZXF1ZXN0IEJhc2UiCiAgICB1bmlvbiAiU0RFIE1lZGljYXRpb24gTm90IFJlcXVlc3RlZCIKCmRlZmluZSBmdW5jdGlvbiAiR2V0TWVkaWNhdGlvbiIocmVmZXJlbmNlIFJlZmVyZW5jZSk6CiAgc2luZ2xldG9uIGZyb20gKCBbTWVkaWNhdGlvbl0gTWVkaWNhdGlvbgogICAgICB3aGVyZSByZWZlcmVuY2UucmVmZXJlbmNlcyAoIE1lZGljYXRpb24gKQogICkKCmRlZmluZSAiU0RFIE1lZGljYXRpb24iOgogICggW01lZGljYXRpb25SZXF1ZXN0XQogICAgdW5pb24gW01lZGljYXRpb25BZG1pbmlzdHJhdGlvbl0gKSBNZWRSZXFPckFkbWluCiAgICBsZXQgbWVkaWNhdGlvbjogR2V0TWVkaWNhdGlvbihNZWRSZXFPckFkbWluLm1lZGljYXRpb24gYXMgUmVmZXJlbmNlKQogICAgd2hlcmUgbWVkaWNhdGlvbiBpcyBub3QgbnVsbAogICAgICBhbmQgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICAgIHdoZXJlIENvYWxlc2NlKCJOb3JtYWxpemUgSW50ZXJ2YWwiKE1lZFJlcU9yQWRtaW4uZWZmZWN0aXZlKSwgTWVkUmVxT3JBZG1pbi5hdXRob3JlZE9uLnRvSW50ZXJ2YWwoKSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBtZWRpY2F0aW9uLmlkLAogICAgICBtZXRhOiBtZWRpY2F0aW9uLm1ldGEsCiAgICAgIGNvZGU6IG1lZGljYXRpb24uY29kZSwKICAgICAgc3RhdHVzOiBtZWRpY2F0aW9uLnN0YXR1cywKICAgICAgbWFudWZhY3R1cmVyOiBtZWRpY2F0aW9uLm1hbnVmYWN0dXJlciwKICAgICAgZm9ybTogbWVkaWNhdGlvbi5mb3JtLAogICAgICBhbW91bnQ6IG1lZGljYXRpb24uYW1vdW50LAogICAgICBpbmdyZWRpZW50OiBtZWRpY2F0aW9uLmluZ3JlZGllbnQsCiAgICAgIGJhdGNoOiBtZWRpY2F0aW9uLmJhdGNoCiAgICB9CgoKLy8gT2JzZXJ2YXRpb24gU0RFcwoKCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIExhYiBDYXRlZ29yeSI6CiAgW0xhYm9yYXRvcnlSZXN1bHRPYnNlcnZhdGlvbl0gT2JzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKE9icy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE9icy5pZCwKICAgICAgbWV0YTogT2JzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogT2JzLmV4dGVuc2lvbiwKICAgICAgcGFydE9mOiBPYnMucGFydE9mLAogICAgICBzdGF0dXM6IE9icy5zdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBPYnMuY2F0ZWdvcnksCiAgICAgIGNvZGU6IE9icy5jb2RlLAogICAgICBzdWJqZWN0OiBPYnMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBPYnMuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IE9icy5lZmZlY3RpdmUsCiAgICAgIGlzc3VlZDogT2JzLmlzc3VlZCwKICAgICAgdmFsdWU6IE9icy52YWx1ZSwKICAgICAgZGF0YUFic2VudFJlYXNvbjogT2JzLmRhdGFBYnNlbnRSZWFzb24sCiAgICAgIGludGVycHJldGF0aW9uOiBPYnMuaW50ZXJwcmV0YXRpb24sCiAgICAgIGJvZHlTaXRlOiBPYnMuYm9keVNpdGUsCiAgICAgIG1ldGhvZDogT2JzLm1ldGhvZCwKICAgICAgc3BlY2ltZW46IE9icy5zcGVjaW1lbiwKICAgICAgcmVmZXJlbmNlUmFuZ2U6IE9icy5yZWZlcmVuY2VSYW5nZSwKICAgICAgaGFzTWVtYmVyOiBPYnMuaGFzTWVtYmVyLAogICAgICBkZXJpdmVkRnJvbTogT2JzLmRlcml2ZWRGcm9tLAogICAgICBjb21wb25lbnQ6IE9icy5jb21wb25lbnQKICAgIH0KCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIFNpbXBsZSI6CiAgW1NpbXBsZU9ic2VydmF0aW9uXSBPYnMKICAgIHdoZXJlICggZXhpc3RzICggT2JzLmNhdGVnb3J5IENhdGVnb3J5CiAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJzb2NpYWwtaGlzdG9yeSIKICAgICAgKQogICAgICAgIG9yIGV4aXN0cyAoIE9icy5jYXRlZ29yeSBDYXRlZ29yeQogICAgICAgICAgICB3aGVyZSBDYXRlZ29yeSB+ICJpbWFnaW5nIgogICAgICAgICkKICAgICAgICBvciBleGlzdHMgKCBPYnMuY2F0ZWdvcnkgQ2F0ZWdvcnkKICAgICAgICAgICAgd2hlcmUgQ2F0ZWdvcnkgfiAicHJvY2VkdXJlIgogICAgICAgICkKICAgICkKICAgICAgYW5kIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgICB3aGVyZSAiTm9ybWFsaXplIEludGVydmFsIihPYnMuZWZmZWN0aXZlKSBvdmVybGFwcyBJUC5wZXJpb2QKICAgICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE9icy5pZCwKICAgICAgbWV0YTogT2JzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogT2JzLmV4dGVuc2lvbiwKICAgICAgcGFydE9mOiBPYnMucGFydE9mLAogICAgICBzdGF0dXM6IE9icy5zdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBPYnMuY2F0ZWdvcnksCiAgICAgIGNvZGU6IE9icy5jb2RlLAogICAgICBzdWJqZWN0OiBPYnMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBPYnMuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IE9icy5lZmZlY3RpdmUsCiAgICAgIGlzc3VlZDogT2JzLmlzc3VlZCwKICAgICAgdmFsdWU6IE9icy52YWx1ZSwKICAgICAgZGF0YUFic2VudFJlYXNvbjogT2JzLmRhdGFBYnNlbnRSZWFzb24sCiAgICAgIGludGVycHJldGF0aW9uOiBPYnMuaW50ZXJwcmV0YXRpb24sCiAgICAgIGJvZHlTaXRlOiBPYnMuYm9keVNpdGUsCiAgICAgIG1ldGhvZDogT2JzLm1ldGhvZCwKICAgICAgc3BlY2ltZW46IE9icy5zcGVjaW1lbiwKICAgICAgcmVmZXJlbmNlUmFuZ2U6IE9icy5yZWZlcmVuY2VSYW5nZSwKICAgICAgaGFzTWVtYmVyOiBPYnMuaGFzTWVtYmVyLAogICAgICBkZXJpdmVkRnJvbTogT2JzLmRlcml2ZWRGcm9tLAogICAgICBjb21wb25lbnQ6IE9icy5jb21wb25lbnQKICAgIH0KICAgIAovLyBTdXJ2ZXkgaXMgZml4ZWQgY2F0ZWdvcnkgY29kZSBpbiBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgcHJvZmlsZSBpbiBRSS1Db3JlICAgIAoKCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIFN1cnZleSI6CiAgW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudF0gT2JzCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKE9icy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IE9icy5pZCwKICAgICAgbWV0YTogT2JzLm1ldGEsCiAgICAgIGV4dGVuc2lvbjogT2JzLmV4dGVuc2lvbiwKICAgICAgcGFydE9mOiBPYnMucGFydE9mLAogICAgICBzdGF0dXM6IE9icy5zdGF0dXMsCiAgICAgIGNhdGVnb3J5OiBPYnMuY2F0ZWdvcnksCiAgICAgIGNvZGU6IE9icy5jb2RlLAogICAgICBzdWJqZWN0OiBPYnMuc3ViamVjdCwKICAgICAgZW5jb3VudGVyOiBPYnMuZW5jb3VudGVyLAogICAgICBlZmZlY3RpdmU6IE9icy5lZmZlY3RpdmUsCiAgICAgIGlzc3VlZDogT2JzLmlzc3VlZCwKICAgICAgdmFsdWU6IE9icy52YWx1ZSwKICAgICAgZGF0YUFic2VudFJlYXNvbjogT2JzLmRhdGFBYnNlbnRSZWFzb24sCiAgICAgIGludGVycHJldGF0aW9uOiBPYnMuaW50ZXJwcmV0YXRpb24sCiAgICAgIGJvZHlTaXRlOiBPYnMuYm9keVNpdGUsCiAgICAgIG1ldGhvZDogT2JzLm1ldGhvZCwKICAgICAgc3BlY2ltZW46IE9icy5zcGVjaW1lbiwKICAgICAgcmVmZXJlbmNlUmFuZ2U6IE9icy5yZWZlcmVuY2VSYW5nZSwKICAgICAgaGFzTWVtYmVyOiBPYnMuaGFzTWVtYmVyLAogICAgICBkZXJpdmVkRnJvbTogT2JzLmRlcml2ZWRGcm9tLAogICAgICBjb21wb25lbnQ6IE9icy5jb21wb25lbnQKICAgIH0KCmRlZmluZSAiU0RFIE9ic2VydmF0aW9uIFZpdGFsIFNpZ25zIENhdGVnb3J5IjoKICBbVVNDb3JlLlZpdGFsU2lnbnNQcm9maWxlXSBPYnMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgIk5vcm1hbGl6ZSBJbnRlcnZhbCIoT2JzLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogT2JzLmlkLAogICAgICBtZXRhOiBPYnMubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBPYnMuZXh0ZW5zaW9uLAogICAgICBwYXJ0T2Y6IE9icy5wYXJ0T2YsCiAgICAgIHN0YXR1czogT2JzLnN0YXR1cywKICAgICAgY2F0ZWdvcnk6IE9icy5jYXRlZ29yeSwKICAgICAgY29kZTogT2JzLmNvZGUsCiAgICAgIHN1YmplY3Q6IE9icy5zdWJqZWN0LAogICAgICBlbmNvdW50ZXI6IE9icy5lbmNvdW50ZXIsCiAgICAgIGVmZmVjdGl2ZTogT2JzLmVmZmVjdGl2ZSwKICAgICAgaXNzdWVkOiBPYnMuaXNzdWVkLAogICAgICB2YWx1ZTogT2JzLnZhbHVlLAogICAgICBkYXRhQWJzZW50UmVhc29uOiBPYnMuZGF0YUFic2VudFJlYXNvbiwKICAgICAgaW50ZXJwcmV0YXRpb246IE9icy5pbnRlcnByZXRhdGlvbiwKICAgICAgYm9keVNpdGU6IE9icy5ib2R5U2l0ZSwKICAgICAgbWV0aG9kOiBPYnMubWV0aG9kLAogICAgICBzcGVjaW1lbjogT2JzLnNwZWNpbWVuLAogICAgICByZWZlcmVuY2VSYW5nZTogT2JzLnJlZmVyZW5jZVJhbmdlLAogICAgICBoYXNNZW1iZXI6IE9icy5oYXNNZW1iZXIsCiAgICAgIGRlcml2ZWRGcm9tOiBPYnMuZGVyaXZlZEZyb20sCiAgICAgIGNvbXBvbmVudDogT2JzLmNvbXBvbmVudAogICAgfQoKCi8vIFByb2NlZHVyZSBTREUKCgpkZWZpbmUgIlNERSBQcm9jZWR1cmUiOgogIFtQcm9jZWR1cmVdIFByb2NlZHVyZXMKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgICAgd2hlcmUgIk5vcm1hbGl6ZSBJbnRlcnZhbCIoUHJvY2VkdXJlcy5wZXJmb3JtZWQpIG92ZXJsYXBzIElQLnBlcmlvZAogICAgKQogICAgcmV0dXJuIHsKICAgICAgaWQ6IFByb2NlZHVyZXMuaWQsCiAgICAgIG1ldGE6IFByb2NlZHVyZXMubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBQcm9jZWR1cmVzLmV4dGVuc2lvbiwKICAgICAgYmFzZWRPbjogUHJvY2VkdXJlcy5iYXNlZE9uLAogICAgICBwYXJ0T2Y6IFByb2NlZHVyZXMucGFydE9mLAogICAgICBzdGF0dXM6IFByb2NlZHVyZXMuc3RhdHVzLAogICAgICBjYXRlZ29yeTogUHJvY2VkdXJlcy5jYXRlZ29yeSwKICAgICAgY29kZTogUHJvY2VkdXJlcy5jb2RlLAogICAgICBzdWJqZWN0OiBQcm9jZWR1cmVzLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogUHJvY2VkdXJlcy5lbmNvdW50ZXIsCiAgICAgIHBlcmZvcm1lZDogUHJvY2VkdXJlcy5wZXJmb3JtZWQsCiAgICAgIGxvY2F0aW9uOiBQcm9jZWR1cmVzLmxvY2F0aW9uLAogICAgICByZWFzb25Db2RlOiBQcm9jZWR1cmVzLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogUHJvY2VkdXJlcy5yZWFzb25SZWZlcmVuY2UsCiAgICAgIGJvZHlTaXRlOiBQcm9jZWR1cmVzLmJvZHlTaXRlCiAgICB9CgovLyBTZXJ2aWNlUmVxdWVzdCBTREUgLSByZWd1bGFyIHJlcXVlc3RzIChkb05vdFBlcmZvcm0gaXMgZmFsc2Ugb3IgYWJzZW50KQoKCmRlZmluZSAiU0RFIFNlcnZpY2UgUmVxdWVzdCBCYXNlIjoKICBbU2VydmljZVJlcXVlc3RdIFNlcnZpY2VSZXF1ZXN0cwogICAgd2hlcmUgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICB3aGVyZSBTZXJ2aWNlUmVxdWVzdHMuYXV0aG9yZWRPbiBkdXJpbmcgSVAucGVyaW9kCiAgICApCiAgICByZXR1cm4gewogICAgICBpZDogU2VydmljZVJlcXVlc3RzLmlkLAogICAgICBtZXRhOiBTZXJ2aWNlUmVxdWVzdHMubWV0YSwKICAgICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBTZXJ2aWNlUmVxdWVzdHMuaW5zdGFudGlhdGVzQ2Fub25pY2FsLAogICAgICBpbnN0YW50aWF0ZXNVcmk6IFNlcnZpY2VSZXF1ZXN0cy5pbnN0YW50aWF0ZXNVcmksCiAgICAgIGJhc2VkT246IFNlcnZpY2VSZXF1ZXN0cy5iYXNlZE9uLAogICAgICByZXBsYWNlczogU2VydmljZVJlcXVlc3RzLnJlcGxhY2VzLAogICAgICByZXF1aXNpdGlvbjogU2VydmljZVJlcXVlc3RzLnJlcXVpc2l0aW9uLAogICAgICBzdGF0dXM6IFNlcnZpY2VSZXF1ZXN0cy5zdGF0dXMsCiAgICAgIGludGVudDogU2VydmljZVJlcXVlc3RzLmludGVudCwKICAgICAgY2F0ZWdvcnk6IFNlcnZpY2VSZXF1ZXN0cy5jYXRlZ29yeSwKICAgICAgcHJpb3JpdHk6IFNlcnZpY2VSZXF1ZXN0cy5wcmlvcml0eSwKICAgICAgLy9kb05vdFBlcmZvcm06IFNlcnZpY2VSZXF1ZXN0cy5kb05vdFBlcmZvcm0sCiAgICAgIAogICAgICBjb2RlOiBTZXJ2aWNlUmVxdWVzdHMuY29kZSwKICAgICAgb3JkZXJEZXRhaWw6IFNlcnZpY2VSZXF1ZXN0cy5vcmRlckRldGFpbCwKICAgICAgcXVhbnRpdHk6IFNlcnZpY2VSZXF1ZXN0cy5xdWFudGl0eSwKICAgICAgc3ViamVjdDogU2VydmljZVJlcXVlc3RzLnN1YmplY3QsCiAgICAgIGVuY291bnRlcjogU2VydmljZVJlcXVlc3RzLmVuY291bnRlciwKICAgICAgb2NjdXJyZW5jZTogU2VydmljZVJlcXVlc3RzLm9jY3VycmVuY2UsCiAgICAgIGFzTmVlZGVkOiBTZXJ2aWNlUmVxdWVzdHMuYXNOZWVkZWQsCiAgICAgIGF1dGhvcmVkT246IFNlcnZpY2VSZXF1ZXN0cy5hdXRob3JlZE9uLAogICAgICByZXF1ZXN0ZXI6IFNlcnZpY2VSZXF1ZXN0cy5yZXF1ZXN0ZXIsCiAgICAgIHBlcmZvcm1lclR5cGU6IFNlcnZpY2VSZXF1ZXN0cy5wZXJmb3JtZXJUeXBlLAogICAgICBwZXJmb3JtZXI6IFNlcnZpY2VSZXF1ZXN0cy5wZXJmb3JtZXIsCiAgICAgIGxvY2F0aW9uQ29kZTogU2VydmljZVJlcXVlc3RzLmxvY2F0aW9uQ29kZSwKICAgICAgcmVhc29uQ29kZTogU2VydmljZVJlcXVlc3RzLnJlYXNvbkNvZGUsCiAgICAgIHJlYXNvblJlZmVyZW5jZTogU2VydmljZVJlcXVlc3RzLnJlYXNvblJlZmVyZW5jZSwKICAgICAgaW5zdXJhbmNlOiBTZXJ2aWNlUmVxdWVzdHMuaW5zdXJhbmNlLAogICAgICBib2R5U2l0ZTogU2VydmljZVJlcXVlc3RzLmJvZHlTaXRlLAogICAgICBub3RlOiBTZXJ2aWNlUmVxdWVzdHMubm90ZSwKICAgICAgcGF0aWVudEluc3RydWN0aW9uOiBTZXJ2aWNlUmVxdWVzdHMucGF0aWVudEluc3RydWN0aW9uCiAgICB9CgovLyBTZXJ2aWNlTm90UmVxdWVzdGVkIFNERSAtIG5lZ2F0aW9uIHJlcXVlc3RzIChkb05vdFBlcmZvcm0gaXMgdHJ1ZSkKCgpkZWZpbmUgIlNERSBTZXJ2aWNlIE5vdCBSZXF1ZXN0ZWQiOgogIFtTZXJ2aWNlTm90UmVxdWVzdGVkXSBTZXJ2aWNlTm90UmVxcwogICAgd2hlcmUgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgICB3aGVyZSBTZXJ2aWNlTm90UmVxcy5hdXRob3JlZE9uIGR1cmluZyBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBTZXJ2aWNlTm90UmVxcy5pZCwKICAgICAgbWV0YTogU2VydmljZU5vdFJlcXMubWV0YSwKICAgICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBTZXJ2aWNlTm90UmVxcy5pbnN0YW50aWF0ZXNDYW5vbmljYWwsCiAgICAgIGluc3RhbnRpYXRlc1VyaTogU2VydmljZU5vdFJlcXMuaW5zdGFudGlhdGVzVXJpLAogICAgICBiYXNlZE9uOiBTZXJ2aWNlTm90UmVxcy5iYXNlZE9uLAogICAgICByZXBsYWNlczogU2VydmljZU5vdFJlcXMucmVwbGFjZXMsCiAgICAgIHJlcXVpc2l0aW9uOiBTZXJ2aWNlTm90UmVxcy5yZXF1aXNpdGlvbiwKICAgICAgc3RhdHVzOiBTZXJ2aWNlTm90UmVxcy5zdGF0dXMsCiAgICAgIGludGVudDogU2VydmljZU5vdFJlcXMuaW50ZW50LAogICAgICBjYXRlZ29yeTogU2VydmljZU5vdFJlcXMuY2F0ZWdvcnksCiAgICAgIHByaW9yaXR5OiBTZXJ2aWNlTm90UmVxcy5wcmlvcml0eSwKICAgICAgZG9Ob3RQZXJmb3JtOiBTZXJ2aWNlTm90UmVxcy5kb05vdFBlcmZvcm0sCiAgICAgIGNvZGU6IFNlcnZpY2VOb3RSZXFzLmNvZGUsCiAgICAgIG9yZGVyRGV0YWlsOiBTZXJ2aWNlTm90UmVxcy5vcmRlckRldGFpbCwKICAgICAgcXVhbnRpdHk6IFNlcnZpY2VOb3RSZXFzLnF1YW50aXR5LAogICAgICBzdWJqZWN0OiBTZXJ2aWNlTm90UmVxcy5zdWJqZWN0LAogICAgICBlbmNvdW50ZXI6IFNlcnZpY2VOb3RSZXFzLmVuY291bnRlciwKICAgICAgb2NjdXJyZW5jZTogU2VydmljZU5vdFJlcXMub2NjdXJyZW5jZSwKICAgICAgYXNOZWVkZWQ6IFNlcnZpY2VOb3RSZXFzLmFzTmVlZGVkLAogICAgICBhdXRob3JlZE9uOiBTZXJ2aWNlTm90UmVxcy5hdXRob3JlZE9uLAogICAgICByZXF1ZXN0ZXI6IFNlcnZpY2VOb3RSZXFzLnJlcXVlc3RlciwKICAgICAgcGVyZm9ybWVyVHlwZTogU2VydmljZU5vdFJlcXMucGVyZm9ybWVyVHlwZSwKICAgICAgcGVyZm9ybWVyOiBTZXJ2aWNlTm90UmVxcy5wZXJmb3JtZXIsCiAgICAgIGxvY2F0aW9uQ29kZTogU2VydmljZU5vdFJlcXMubG9jYXRpb25Db2RlLAogICAgICByZWFzb25Db2RlOiBTZXJ2aWNlTm90UmVxcy5yZWFzb25Db2RlLAogICAgICByZWFzb25SZWZlcmVuY2U6IFNlcnZpY2VOb3RSZXFzLnJlYXNvblJlZmVyZW5jZSwKICAgICAgaW5zdXJhbmNlOiBTZXJ2aWNlTm90UmVxcy5pbnN1cmFuY2UsCiAgICAgIGJvZHlTaXRlOiBTZXJ2aWNlTm90UmVxcy5ib2R5U2l0ZSwKICAgICAgbm90ZTogU2VydmljZU5vdFJlcXMubm90ZSwKICAgICAgcGF0aWVudEluc3RydWN0aW9uOiBTZXJ2aWNlTm90UmVxcy5wYXRpZW50SW5zdHJ1Y3Rpb24KICAgIH0KCi8vIENvbWJpbmVkIFNERSBmb3IgYWxsIFNlcnZpY2UgUmVxdWVzdHMgKGJvdGggcmVndWxhciBhbmQgbmVnYXRpb24pCgoKZGVmaW5lICJTREUgU2VydmljZSBSZXF1ZXN0IjoKICAiU0RFIFNlcnZpY2UgUmVxdWVzdCBCYXNlIgogICAgdW5pb24gIlNERSBTZXJ2aWNlIE5vdCBSZXF1ZXN0ZWQiCgovLyBNaW5pbWFsIHBhdGllbnQgU0RFCgoKZGVmaW5lICJTREUgTWluaW1hbCBQYXRpZW50IjoKICBbUGF0aWVudF0gTWluUHQKICAgIHdoZXJlIGV4aXN0cyAoICJJbml0aWFsIFBvcHVsYXRpb24iICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBNaW5QdC5pZCwKICAgICAgbWV0YTogTWluUHQubWV0YSwKICAgICAgZXh0ZW5zaW9uOiBNaW5QdC5leHRlbnNpb24sCiAgICAgIGlkZW50aWZpZXI6IE1pblB0LmlkZW50aWZpZXIsCiAgICAgIGFjdGl2ZTogTWluUHQuYWN0aXZlLAogICAgICBuYW1lOiBNaW5QdC5uYW1lLAogICAgICB0ZWxlY29tOiBNaW5QdC50ZWxlY29tLAogICAgICBnZW5kZXI6IE1pblB0LmdlbmRlciwKICAgICAgYmlydGhEYXRlOiBNaW5QdC5iaXJ0aERhdGUsCiAgICAgIGRlY2Vhc2VkOiBNaW5QdC5kZWNlYXNlZCwKICAgICAgYWRkcmVzczogTWluUHQuYWRkcmVzcywKICAgICAgbWFyaXRhbFN0YXR1czogTWluUHQubWFyaXRhbFN0YXR1cywKICAgICAgbXVsdGlwbGVCaXJ0aDogTWluUHQubXVsdGlwbGVCaXJ0aCwKICAgICAgcGhvdG86IE1pblB0LnBob3RvLAogICAgICBjb250YWN0OiBNaW5QdC5jb250YWN0LAogICAgICBjb21tdW5pY2F0aW9uOiBNaW5QdC5jb21tdW5pY2F0aW9uLAogICAgICBnZW5lcmFsUHJhY3RpdGlvbmVyOiBNaW5QdC5nZW5lcmFsUHJhY3RpdGlvbmVyLAogICAgICBtYW5hZ2luZ09yZ2FuaXphdGlvbjogTWluUHQubWFuYWdpbmdPcmdhbml6YXRpb24sCiAgICAgIGxpbms6IE1pblB0LmxpbmsKICAgIH0KCmRlZmluZSAiU0RFIFNwZWNpbWVucyI6CiAgW1VTQ29yZS5TcGVjaW1lblByb2ZpbGVdIHNwCiAgICB3aGVyZSBleGlzdHMgKCAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICAgIHdoZXJlICJOb3JtYWxpemUgSW50ZXJ2YWwiKHNwLmNvbGxlY3Rpb24uY29sbGVjdGVkKSBvdmVybGFwcyBJUC5wZXJpb2QKICAgICkKICAgIHJldHVybiB7CiAgICAgIGlkOiBzcC5pZCwKICAgICAgdHlwZTogc3AudHlwZQogICAgfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBIZWxwZXIgZnVuY3Rpb25zCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKCmRlZmluZSBmdW5jdGlvbiAiQ2hlY2tJUCIoZW5jb3VudGVyIEVuY291bnRlcik6CiAgZXhpc3RzICggIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgd2hlcmUgZW5jb3VudGVyLmlkID0gSVAuaWQKICApCgovLyBGb3JtZXIgTkhTTkhlbHBlcnMgZnVuY3Rpb25zLCBhZGFwdGVkIGZvciBRSSBDb3JlCgoKZGVmaW5lIGZ1bmN0aW9uICJOb3JtYWxpemUgSW50ZXJ2YWwiKGNob2ljZSBDaG9pY2U8RGF0ZVRpbWUsIEludGVydmFsPERhdGVUaW1lPj4pOgogIGNhc2UKICAgIHdoZW4gY2hvaWNlIGlzIERhdGVUaW1lIHRoZW4gSW50ZXJ2YWxbY2hvaWNlIGFzIERhdGVUaW1lLCBjaG9pY2UgYXMgRGF0ZVRpbWVdCiAgICB3aGVuIGNob2ljZSBpcyBJbnRlcnZhbDxEYXRlVGltZT50aGVuIGNob2ljZSBhcyBJbnRlcnZhbDxEYXRlVGltZT4KICAgIGVsc2UgbnVsbCBhcyBJbnRlcnZhbDxEYXRlVGltZT5lbmQKCmRlZmluZSBmdW5jdGlvbiAiR2V0TG9jYXRpb24iKHJlZmVyZW5jZSBSZWZlcmVuY2UpOgogIHNpbmdsZXRvbiBmcm9tICggW0xvY2F0aW9uXSBMb2NhdGlvbnMKICAgICAgd2hlcmUgTG9jYXRpb25zLmlkID0gR2V0SWQocmVmZXJlbmNlLnJlZmVyZW5jZSkKICApCgpkZWZpbmUgZnVuY3Rpb24gIkdldElkIih1cmkgU3RyaW5nKToKICBMYXN0KFNwbGl0KHVyaSwgJy8nKSkKCmRlZmluZSBmdW5jdGlvbiAiR2V0SWQiKHVyaSBGSElSLnN0cmluZyk6CiAgTGFzdChTcGxpdChGSElSSGVscGVycy5Ub1N0cmluZyh1cmkpLCAnLycpKQ==",
"url" : "https://madie.cms.gov/Library-NHSNAcuteCareHospitalMonthlyInitialPopulation1.cql"
}
]
}