CDC National Healthcare Safety Network (NHSN) Digital Quality Measures (dQM) Content Package IG
1.0.0 - Release 1 United States of America flag

CDC National Healthcare Safety Network (NHSN) Digital Quality Measures (dQM) Content Package IG - Local Development build (v1.0.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

: Shared Resource Creation - JSON Representation

Page standards status: Trial-use Maturity Level: 1

Raw json | Download

{
  "resourceType" : "Library",
  "id" : "SharedResourceCreation",
  "text" : {
    "status" : "extensions",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n<div>\n    <table class=\"grid dict\">\n        \n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Id: </b></th>\n            <td style=\"padding-left: 4px;\">SharedResourceCreation</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Version: </b></th>\n            <td style=\"padding-left: 4px;\">1.0.0</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Url: </b></th>\n            <td style=\"padding-left: 4px;\"><a href=\"Library-SharedResourceCreation.html\">SharedResourceCreation</a></td>\n        </tr>\n        \n\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Status: </b></th>\n            <td style=\"padding-left: 4px;\">draft</td>\n        </tr>\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Type: </b></th>\n            <td style=\"padding-left: 4px;\">\n                \n                    \n                        \n                        <p style=\"margin-bottom: 5px;\">\n                            <b>system: </b> <span><a href=\"http://terminology.hl7.org/6.5.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a></span>\n                        </p>\n                        \n                        \n                        <p style=\"margin-bottom: 5px;\">\n                            <b>code: </b> <span>logic-library</span>\n                        </p>\n                        \n                        \n                    \n                \n                \n            </td>\n        </tr>\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Date: </b></th>\n            <td style=\"padding-left: 4px;\">2025-09-28 15:20:22+0000</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Publisher: </b></th>\n            <td style=\"padding-left: 4px;\">CDC National Healthcare Safety Network (NHSN)</td>\n        </tr>\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Jurisdiction: </b></th>\n            <td style=\"padding-left: 4px;\">US</td>\n        </tr>\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Related Artifacts: </b></th>\n            <td style=\"padding-left: 4px;\">\n                \n                \n                \n                <p><b>Dependencies</b></p>\n                <ul>\n                  \n                    <li><a href=\"http://fhir.org/guides/cqf/common/4.0.1/4.0.1/Library-FHIR-ModelInfo.html\">http://fhir.org/guides/cqf/common/Library/FHIR-ModelInfo|4.0.1</a></li>\n                  \n                    <li><code>http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/FHIRHelpers|4.0.2</code></li>\n                  \n                </ul>\n                \n                \n                \n                \n                \n            </td>\n        </tr>\n        \n\n        \n\n        \n\n        \n        \n        <tr>\n          <td colspan=\"2\">\n            <table>\n              <tr><th><a id=\"cql-content\"><b>Content: </b></a> text/cql</th></tr>\n              <tr><td><pre><code class=\"language-cql\">library SharedResourceCreation version '0.1.010'\n\ninclude FHIRHelpers version '4.0.2'\n\nusing FHIR version '4.0.1'\n\ndefine function &quot;GetIdExtensions&quot;(domainResource DomainResource):\n  domainResource.extension E\n  where E.url.value = 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/link-original-resource-id-extension'\n  return E\n\ndefine function &quot;GetPatientExtensions&quot;(domainResource DomainResource):\n  domainResource.extension E\n  where E.url.value = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-race'\n    or E.url.value = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity'\n    or E.url.value = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex'\n    or E.url.value = 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/link-original-resource-id-extension'\n  return E\n\ndefine function &quot;MetaElement&quot;(resource Resource, profileURLs List&lt;FHIR.canonical&gt;):\n  resource r\n  return FHIR.Meta{\n    extension: r.meta.extension,\n    versionId: r.meta.versionId,\n    lastUpdated: r.meta.lastUpdated,\n    profile: profileURLs,\n    security: r.meta.security,\n    tag: r.meta.tag\n  }\n\ndefine function ConditionStage(stage List&lt;FHIR.Condition.Stage&gt;):\n  stage s\n  return FHIR.Condition.Stage{\n    summary: s.summary,\n    assessment: s.assessment,\n    type: s.type\n  }\n\ndefine function ConditionEvidence(evidence List&lt;FHIR.Condition.Evidence&gt;):\n  evidence e\n  return FHIR.Condition.Evidence{\n    code: e.code,\n    detail: e.detail\n  }\n\ndefine function ConditionResource(condition Condition, profileURLs List&lt;FHIR.canonical&gt;):\n  condition c\n  return Condition{\n    id: FHIR.id {value: 'LCR-' + c.id},\n    meta: MetaElement(c, profileURLs),\n    extension: c.extension,\n    clinicalStatus: c.clinicalStatus,\n    verificationStatus: c.verificationStatus,\n    category: c.category,\n    severity: c.severity,\n    code: c.code,\n    bodySite: c.bodySite,\n    subject: c.subject,\n    encounter: c.encounter,\n    onset: c.onset,\n    abatement: c.abatement,\n    recordedDate: c.recordedDate,\n    stage: ConditionStage(c.stage),\n    evidence: ConditionEvidence(c.evidence),\n    note: c.note\n  }\n\ndefine function CoverageClass(class List&lt;FHIR.Coverage.Class&gt;):\n  class c\n  return FHIR.Coverage.Class{\n    value: c.value,\n    name: c.name\n  }\n\ndefine function CoverageResource(coverage Coverage, profileURLs List&lt;FHIR.canonical&gt;):\n  coverage c\n  return Coverage{\n    id: FHIR.id{value: 'LCR-' + c.id},\n    meta: MetaElement(c, profileURLs),\n    extension: c.extension,\n    status: c.status,\n    type: c.type,\n    policyHolder: c.policyHolder,\n    subscriber: c.subscriber,\n    subscriberId: c.subscriberId,\n    beneficiary: c.beneficiary,\n    dependent: c.dependent,\n    relationship: c.relationship,\n    period: c.period,\n    payor: c.payor,\n    class: CoverageClass(c.class),\n    order: c.order,\n    network: c.network,\n    subrogation: c.subrogation,\n    contract: c.contract\n  }\n\ndefine function DiagnosticReportCoding(coding List&lt;Coding&gt;):\n  coding c\n  return Coding{\n    system: c.system,\n    version: c.version,\n    code: c.code,\n    display: c.display,\n    userSelected: c.userSelected\n  }\n\ndefine function DiagnosticReportCategory(category List&lt;CodeableConcept&gt;):\n  category c\n  return CodeableConcept{\n    coding: DiagnosticReportCoding(c.coding)\n  }\n\ndefine function DiagnosticReportLabResource(diagnosticReport DiagnosticReport, profileURLs List&lt;FHIR.canonical&gt;):\n  diagnosticReport d\n  return DiagnosticReport{\n    id: FHIR.id{value: 'LCR-' + d.id},\n    meta: MetaElement(d, profileURLs),\n    extension: d.extension,\n    basedOn: d.basedOn,\n    status: d.status,\n    category: DiagnosticReportCategory(d.category),\n    code: d.code,\n    subject: d.subject,\n    encounter: d.encounter,\n    effective: d.effective,\n    issued: d.issued,\n    performer: d.performer,\n    resultsInterpreter: d.resultsInterpreter,\n    specimen: d.specimen,\n    result: d.result,\n    conclusion: d.conclusion,\n    conclusionCode: d.conclusionCode\n  }\n\ndefine function EncounterIdentifier(identifier List&lt;FHIR.Identifier&gt;):\n  identifier i\n  return FHIR.Identifier{\n    use: i.use,\n    type: i.type,\n    system: i.system,\n    value: i.value,\n    period: i.period\n  }\n\ndefine function EncounterStatusHistory(statusHistory List&lt;FHIR.Encounter.StatusHistory&gt;):\n  statusHistory sH\n  return FHIR.Encounter.StatusHistory{\n    status: sH.status,\n    period: sH.period\n  }\n\ndefine function EncounterClassHistory(classHistory List&lt;FHIR.Encounter.ClassHistory&gt;):\n  classHistory cH\n  return FHIR.Encounter.ClassHistory{\n    class: cH.class,\n    period: cH.period\n  }\n\n/*No longer needed but saving for potential future use\ndefine function EncounterParticipant(participant List&lt;FHIR.Encounter.Participant&gt;):\n  participant p\n  return FHIR.Encounter.Participant{\n    type: p.type,\n    period: p.period,\n    individual: p.individual\n  }*/\n\ndefine function EncounterDiagnosis(diagnosis List&lt;FHIR.Encounter.Diagnosis&gt;):\n  diagnosis d\n  return FHIR.Encounter.Diagnosis{\n    condition: d.condition,\n    use: d.use,\n    rank: d.rank\n  }\n\ndefine function EncounterHospitalization(hospitalization FHIR.Encounter.Hospitalization):\n  hospitalization h\n  return FHIR.Encounter.Hospitalization{\n    preAdmissionIdentifier: h.preAdmissionIdentifier,\n    origin: h.origin,\n    admitSource: h.admitSource,\n    reAdmission: h.reAdmission,\n    dietPreference: h.dietPreference,\n    specialCourtesy: h.specialCourtesy,\n    specialArrangement: h.specialArrangement,\n    destination: h.destination,\n    dischargeDisposition: h.dischargeDisposition\n  }\n\ndefine function EncounterLocation(location List&lt;FHIR.Encounter.Location&gt;):\n  location l\n  return FHIR.Encounter.Location{\n    location: l.location,\n    status: l.status,\n    physicalType: l.physicalType,\n    period: l.period\n  }\n\ndefine function EncounterResource(encounter Encounter, profileURLs List&lt;FHIR.canonical&gt;):\n  encounter e\n  return Encounter{\n    id: FHIR.id{value: 'LCR-' + e.id},\n    meta: MetaElement(e, profileURLs),\n    extension: e.extension,\n    identifier: EncounterIdentifier(e.identifier),\n    status: e.status,\n    statusHistory: EncounterStatusHistory(e.statusHistory),\n    class: e.class,\n    classHistory: EncounterClassHistory(e.classHistory),\n    type: e.type,\n    serviceType: e.serviceType,\n    priority: e.priority,\n    subject: e.subject,\n    period: e.period,\n    length: e.length,\n    reasonCode: e.reasonCode,\n    reasonReference: e.reasonReference,\n    diagnosis: EncounterDiagnosis(e.diagnosis),\n    account: e.account,\n    hospitalization: EncounterHospitalization(e.hospitalization),\n    location: EncounterLocation(e.location),\n    partOf: e.partOf\n  }\n\ndefine function ObservationLabCoding(coding List&lt;Coding&gt;):\n  coding c\n  return Coding{\n    id: c.id,\n    extension: c.extension,\n    system: c.system,\n    version: c.version,\n    code: c.code,\n    display: c.display,\n    userSelected: c.userSelected\n  }\n\ndefine function ObservationLabCategory(category List&lt;CodeableConcept&gt;):\n  category c\n  return CodeableConcept{\n    coding: ObservationLabCoding(c.coding),\n    text: c.text\n  }\n\ndefine function ObservationReferenceRange(referenceRange List&lt;FHIR.Observation.ReferenceRange&gt;):\n  referenceRange rR\n  return FHIR.Observation.ReferenceRange{\n    low: rR.low,\n    high: rR.high,\n    type: rR.type,\n    appliesTo: rR.appliesTo,\n    age: rR.age,\n    text: rR.text\n  }\n\ndefine function ObservationComponent(component List&lt;FHIR.Observation.Component&gt;):\n  component c\n  return FHIR.Observation.Component{\n    code: c.code,\n    value: c.value,\n    dataAbsentReason: c.dataAbsentReason,\n    interpretation: c.interpretation,\n    referenceRange: c.referenceRange\n  }\n\ndefine function ObservationLabResource(observation Observation, profileURLs List&lt;FHIR.canonical&gt;):\n  observation o\n  return Observation{\n    id: FHIR.id {value: 'LCR-' + o.id},\n    meta: MetaElement(o, profileURLs),\n    extension: o.extension,\n    basedOn: o.basedOn,\n    partOf: o.partOf,\n    status: o.status,\n    category: ObservationLabCategory(o.category),\n    code: o.code,\n    subject: o.subject,\n    focus: o.focus,\n    encounter: o.encounter,\n    effective: o.effective,\n    issued: o.issued,\n    performer: o.performer,\n    value: o.value,\n    dataAbsentReason: o.dataAbsentReason,\n    interpretation: o.interpretation,\n    note: o.note,\n    bodySite: o.bodySite,\n    method: o.method,\n    specimen: o.specimen,\n    device: o.device,\n    referenceRange: ObservationReferenceRange(o.referenceRange),\n    hasMember: o.hasMember,\n    derivedFrom: o.derivedFrom,\n    component: ObservationComponent(o.component)\n  }\n\ndefine function LocationAddress(address FHIR.Address):\n  address a\n  return FHIR.Address{\n    use: a.use,\n    type: a.type,\n    text: a.text,\n    line: a.line,\n    city: a.city,\n    district: a.district,\n    state: a.state,\n    postalCode: a.postalCode,\n    country: a.country,\n    period: a.period\n  }\n\ndefine function LocationPosition(position FHIR.Location.Position):\n  position p\n  return FHIR.Location.Position{\n    longitude: p.longitude,\n    latitude: p.latitude,\n    altitude: p.altitude\n  }\n\ndefine function LocationHoursOfOperation(hoursOfOperation List&lt;FHIR.Location.HoursOfOperation&gt;):\n  hoursOfOperation hOO\n  return FHIR.Location.HoursOfOperation{\n    daysOfWeek: hOO.daysOfWeek,\n    allDay: hOO.allDay,\n    openingTime: hOO.openingTime,\n    closingTime: hOO.closingTime\n  }\n\ndefine function LocationResource(location Location, profileURLs List&lt;FHIR.canonical&gt;):\n  location l\n  return Location{\n    id: FHIR.id {value: 'LCR-' + l.id},\n    meta: MetaElement(l, profileURLs),\n    extension: l.extension,\n    status: l.status,\n    operationalStatus: l.operationalStatus,\n    name: l.name,\n    alias: l.alias,\n    description: l.description,\n    mode: l.mode,\n    type: l.type,\n    telecom: l.telecom,\n    address: LocationAddress(l.address),\n    physicalType: l.physicalType,\n    position: LocationPosition(l.position),\n    managingOrganization: l.managingOrganization,\n    partOf: l.partOf,\n    hoursOfOperation: LocationHoursOfOperation(l.hoursOfOperation),\n    availabilityExceptions: l.availabilityExceptions,\n    endpoint: l.endpoint\n  }\n\ndefine function MedicationIngredient(ingredient List&lt;FHIR.Medication.Ingredient&gt;):\n  ingredient i\n  return FHIR.Medication.Ingredient{\n    item: i.item,\n    strength: i.strength\n  }\n\ndefine function MedicationBatch(batch FHIR.Medication.Batch):\n  batch b\n  return FHIR.Medication.Batch{\n    lotNumber: b.lotNumber,\n    expirationDate: b.expirationDate\n  }\n\ndefine function MedicationResource(medication Medication, profileURLs List&lt;FHIR.canonical&gt;):\n  medication m\n  return Medication{\n    id: FHIR.id {value: 'LCR-' + m.id},\n    meta: MetaElement(m, profileURLs),\n    extension: m.extension,\n    code: m.code,\n    status: m.status,\n    manufacturer: m.manufacturer,\n    form: m.form,\n    amount: m.amount,\n    ingredient: MedicationIngredient(m.ingredient),\n    batch: MedicationBatch(m.batch)\n  }\n\ndefine function MedicationAdministrationPerformer(performer List&lt;FHIR.MedicationAdministration.Performer&gt;):\n  performer p\n  return FHIR.MedicationAdministration.Performer{\n    function: p.function,\n    actor: p.actor\n  }\n\ndefine function MedicationAdministrationDosage(dosage FHIR.MedicationAdministration.Dosage):\n  dosage d\n  return FHIR.MedicationAdministration.Dosage{\n    text: d.text,\n    site: d.site,\n    route: d.route,\n    method: d.method,\n    dose: d.dose,\n    rate: d.rate\n  }\n\ndefine function MedicationAdministrationResource(medicationAdministration MedicationAdministration, profileURLs List&lt;FHIR.canonical&gt;):\n  medicationAdministration m\n  return MedicationAdministration{\n    id: FHIR.id {value: 'LCR-' + m.id},\n    meta: MetaElement(m, profileURLs),\n    extension: m.extension,\n    instantiates: m.instantiates,\n    partOf: m.partOf,\n    status: m.status,\n    statusReason: m.statusReason,\n    category: m.category,\n    medication: m.medication,\n    subject: m.subject,\n    context: m.context,\n    supportingInformation: m.supportingInformation,\n    effective: m.effective,\n    performer: MedicationAdministrationPerformer(m.performer),\n    reasonCode: m.reasonCode,\n    reasonReference: m.reasonReference,\n    request: m.request,\n    device: m.device,\n    note: m.note,\n    dosage: MedicationAdministrationDosage(m.dosage),\n    eventHistory: m.eventHistory\n  }\n\ndefine function MedicationRequestDoseAndRate(doseAndRate List&lt;FHIR.Dosage.DoseAndRate&gt;):\n  doseAndRate dR\n  return FHIR.Dosage.DoseAndRate{\n    type: dR.type,\n    dose: dR.dose,\n    rate: dR.rate\n  }\n\ndefine function MedicationRequestDosageInstruction(dosageInstruction List&lt;FHIR.Dosage&gt;):\n  dosageInstruction dI\n  return FHIR.Dosage{\n    text: dI.text,\n    patientInstruction: dI.patientInstruction,\n    timing: dI.timing,\n    asNeeded: dI.asNeeded,\n    site: dI.site,\n    route: dI.route,\n    method: dI.method,\n    doseAndRate: MedicationRequestDoseAndRate(dI.doseAndRate)\n  }\n\ndefine function MedicationRequestResource(medicationRequest MedicationRequest, profileURLs List&lt;FHIR.canonical&gt;):\n  medicationRequest m\n  return MedicationRequest{\n    id: FHIR.id {value: 'LCR-' + m.id},\n    meta: MetaElement(medicationRequest, profileURLs),\n    extension: m.extension,\n    status: m.status,\n    statusReason: m.statusReason,\n    intent: m.intent,\n    category: m.category,\n    priority: m.priority,\n    doNotPerform: m.doNotPerform,\n    reported: m.reported,\n    medication: m.medication,\n    subject: m.subject,\n    encounter: m.encounter,\n    authoredOn: m.authoredOn,\n    requester: m.requester,\n    recorder: m.recorder,\n    reasonCode: m.reasonCode,\n    reasonReference: m.reasonReference,\n    instantiatesCanonical: m.instantiatesCanonical,\n    instantiatesUri: m.instantiatesUri,\n    courseOfTherapyType: m.courseOfTherapyType,\n    dosageInstruction: MedicationRequestDosageInstruction(m.dosageInstruction)\n  }\n\n/* No longer needed but saving in case it's useful later\ndefine function PatientIdentifier(identifier List&lt;FHIR.Identifier&gt;):\n  identifier i\n  return FHIR.Identifier{\n    id: i.id,\n    extension: i.extension,\n    use: i.use,\n    type: i.type,\n    system: i.system,\n    value: i.value,\n    period: i.period,\n    assigner: i.assigner\n  }*/\n\ndefine function PatientName(name List&lt;FHIR.HumanName&gt;):\n  name n\n  return FHIR.HumanName{\n    id: n.id,\n    extension: n.extension,\n    use: n.use,\n    text: n.text,\n    family: n.family,\n    given: n.given,\n    prefix: n.prefix,\n    suffix: n.suffix,\n    period: n.period\n  }\n\ndefine function PatientTelecom(telecom List&lt;FHIR.ContactPoint&gt;):\n  telecom t\n  return FHIR.ContactPoint{\n    system: t.system,\n    value: t.value,\n    use: t.use,\n    rank: t.rank,\n    period: t.period\n  }\n\ndefine function PatientAddress(address List&lt;FHIR.Address&gt;):\n  address a\n  return FHIR.Address{\n    id: a.id,\n    extension: a.extension,\n    use: a.use,\n    type: a.type,\n    text: a.text,\n    line: a.line,\n    city: a.city,\n    district: a.district,\n    state: a.state,\n    postalCode: a.postalCode,\n    country: a.country,\n    period: a.period\n  }\n\ndefine function PatientContact(contact List&lt;FHIR.Patient.Contact&gt;):\n  contact c\n  return FHIR.Patient.Contact{\n    id: c.id,\n    extension: c.extension,\n    relationship: c.relationship,\n    name: c.name,\n    telecom: c.telecom,\n    address: c.address,\n    gender: c.gender,\n    organization: c.organization,\n    period: c.period\n  }\n\ndefine function PatientCommunication(communication List&lt;FHIR.Patient.Communication&gt;):\n  communication c\n  return FHIR.Patient.Communication{\n    id: c.id,\n    extension: c.extension,\n    language: c.language,\n    preferred: c.preferred\n  }\n\ndefine function PatientLink(link List&lt;FHIR.Patient.Link&gt;):\n  link l\n  return FHIR.Patient.Link{\n    id: l.id,\n    extension: l.extension,\n    modifierExtension: l.modifierExtension,\n    other: l.other,\n    type: l.type\n  }\n\ndefine function PatientResource(patient Patient, profileURLs List&lt;FHIR.canonical&gt;):\n  patient p\n  return Patient{\n    id: FHIR.id{value: 'LCR-' + p.id},\n    meta: MetaElement(p, profileURLs),\n    extension: GetPatientExtensions(p) union GetIdExtensions(p),\n    identifier: p.identifier,\n    active: p.active,\n    name: PatientName(p.name),\n    telecom: PatientTelecom(p.telecom),\n    gender: p.gender,\n    birthDate: p.birthDate,\n    deceased: p.deceased,\n    address: PatientAddress(p.address),\n    maritalStatus: p.maritalStatus,\n    multipleBirth: p.multipleBirth,\n    photo: p.photo,\n    contact: PatientContact(p.contact),\n    communication: PatientCommunication(p.communication),\n    generalPractitioner: p.generalPractitioner,\n    managingOrganization: p.managingOrganization,\n    link: PatientLink(p.link)\n  }\n\ndefine function ProcedurePerformer(performer List&lt;FHIR.Procedure.Performer&gt;):\n  performer p\n  return FHIR.Procedure.Performer{\n    function: p.function,\n    actor: p.actor,\n    onBehalfOf: p.onBehalfOf\n  }\n\ndefine function ProcedureFocalDevice(device List&lt;FHIR.Procedure.FocalDevice&gt;):\n  device d\n  return FHIR.Procedure.FocalDevice{\n    action: d.action,\n    manipulated: d.manipulated\n  }\n\ndefine function ProcedureResource(procedure Procedure, profileURLs List&lt;FHIR.canonical&gt;):\n  procedure p\n  return Procedure{\n    id: FHIR.id {value: 'LCR-' + p.id},\n    meta: MetaElement(p, profileURLs),\n    extension: p.extension,\n    instantiatesCanonical: p.instantiatesCanonical,\n    instantiatesUri: p.instantiatesUri,\n    basedOn: p.basedOn,\n    partOf: p.partOf,\n    status: p.status,\n    statusReason: p.statusReason,\n    category: p.category,\n    code: p.code,\n    subject: p.subject,\n    encounter: p.encounter,\n    performed: p.performed,\n    recorder: p.recorder,\n    asserter: p.asserter,\n    performer: ProcedurePerformer(p.performer),\n    location: p.location,\n    reasonCode: p.reasonCode,\n    reasonReference: p.reasonReference,\n    bodySite: p.bodySite,\n    outcome: p.outcome,\n    report: p.report,\n    complication: p.complication,\n    complicationDetail: p.complicationDetail,\n    followUp: p.followUp,\n    note: p.note,\n    focalDevice: ProcedureFocalDevice(p.focalDevice),\n    usedReference: p.usedReference,\n    usedCode: p.usedCode\n  }\n\ndefine function ServiceRequestResource(serviceRequest ServiceRequest, profileURLs List&lt;FHIR.canonical&gt;):\n  serviceRequest sR\n  return ServiceRequest{\n    id: FHIR.id {value: 'LCR-' + sR.id},\n    meta: MetaElement(sR, profileURLs),\n    extension: sR.extension,\n    instantiatesCanonical: sR.instantiatesCanonical,\n    instantiatesUri: sR.instantiatesUri,\n    basedOn: sR.basedOn,\n    replaces: sR.replaces,\n    requisition: sR.requisition,\n    status: sR.status,\n    intent: sR.intent,\n    category: sR.category,\n    priority: sR.priority,\n    doNotPerform: sR.doNotPerform,\n    code: sR.code,\n    orderDetail: sR.orderDetail,\n    quantity: sR.quantity,\n    subject: sR.subject,\n    encounter: sR.encounter,\n    occurrence: sR.occurrence,\n    asNeeded: sR.asNeeded,\n    authoredOn: sR.authoredOn,\n    requester: sR.requester,\n    performerType: sR.performerType,\n    performer: sR.performer,\n    locationCode: sR.locationCode,\n    locationReference: sR.locationReference,\n    reasonCode: sR.reasonCode,\n    reasonReference: sR.reasonReference,\n    insurance: sR.insurance,\n    supportingInfo: sR.supportingInfo,\n    specimen: sR.specimen,\n    bodySite: sR.bodySite,\n    note: sR.note,\n    patientInstruction: sR.patientInstruction,\n    relevantHistory: sR.relevantHistory\n  }\n\ndefine function SpecimenCollection(collection FHIR.Specimen.Collection):\n  collection c\n  return FHIR.Specimen.Collection{\n    collector: c.collector,\n    collected: c.collected,\n    &quot;duration&quot;: c.&quot;duration&quot;,\n    quantity: c.quantity,\n    method: c.method,\n    bodySite: c.bodySite,\n    fastingStatus: c.fastingStatus\n  }\n\ndefine function SpecimenProcessing(processing List&lt;FHIR.Specimen.Processing&gt;):\n  processing p\n  return FHIR.Specimen.Processing{\n    description: p.description,\n    procedure: p.procedure,\n    additive: p.additive,\n    time: p.time\n  }\n\ndefine function SpecimenContainer(container List&lt;FHIR.Specimen.Container&gt;):\n  container c\n  return FHIR.Specimen.Container{\n    description: c.description,\n    type: c.type,\n    capacity: c.capacity,\n    specimenQuantity: c.specimenQuantity,\n    additive: c.additive\n  }\n\ndefine function SpecimenResource(specimen Specimen, profileURLs List&lt;FHIR.canonical&gt;):\n  specimen s\n  return Specimen{\n    id: FHIR.id {value: 'LCR-' + s.id},\n    meta: MetaElement(s, profileURLs),\n    extension: s.extension,\n    identifier: s.identifier,\n    accessionIdentifier: s.accessionIdentifier,\n    status: s.status,\n    type: s.type,\n    subject: s.subject,\n    receivedTime: s.receivedTime,\n    parent: s.parent,\n    request: s.request,\n    collection: SpecimenCollection(s.collection),\n    processing: SpecimenProcessing(s.processing),\n    container: SpecimenContainer(s.container),\n    condition: s.condition,\n    note: s.note\n  }\n\ndefine function &quot;OperationOutcomeResource&quot;(errorId String, resourceId FHIR.id, message String):\n  OperationOutcome{\n      id: FHIR.id{value: errorId},\n      issue: {\n          FHIR.OperationOutcome.Issue{\n          severity: FHIR.IssueSeverity{value: 'error'},\n          code: FHIR.IssueType{value: 'exception'},\n          details: \n              FHIR.CodeableConcept{\n                  coding: {\n                      Coding{\n                      system: uri{value: 'https://lantanagroup.com/validation-error'},\n                      code: code{value: 'Error'},\n                      display: string{value: 'Resource ' + resourceId + ' failed validation: ' + message}\n                      }\n                  }\n              }\n          }\n      }\n  }</code></pre></td></tr>\n            </table>\n          </td>\n        </tr>\n        \n        \n        \n    </table>\n</div>\n</div>"
  },
  "contained" : [
    {
      "resourceType" : "Parameters",
      "id" : "options",
      "parameter" : [
        {
          "name" : "translatorVersion",
          "valueString" : "3.11.0"
        },
        {
          "name" : "option",
          "valueString" : "EnableDateRangeOptimization"
        },
        {
          "name" : "option",
          "valueString" : "EnableAnnotations"
        },
        {
          "name" : "option",
          "valueString" : "EnableLocators"
        },
        {
          "name" : "option",
          "valueString" : "DisableListDemotion"
        },
        {
          "name" : "option",
          "valueString" : "DisableListPromotion"
        },
        {
          "name" : "analyzeDataRequirements",
          "valueBoolean" : false
        },
        {
          "name" : "collapseDataRequirements",
          "valueBoolean" : true
        },
        {
          "name" : "compatibilityLevel",
          "valueString" : "1.5"
        },
        {
          "name" : "enableCqlOnly",
          "valueBoolean" : false
        },
        {
          "name" : "errorLevel",
          "valueString" : "Info"
        },
        {
          "name" : "signatureLevel",
          "valueString" : "Overloads"
        },
        {
          "name" : "validateUnits",
          "valueBoolean" : true
        },
        {
          "name" : "verifyOnly",
          "valueBoolean" : false
        }
      ]
    }
  ],
  "extension" : [
    {
      "url" : "http://hl7.org/fhir/StructureDefinition/cqf-cqlOptions",
      "valueReference" : {
        "reference" : "#options"
      }
    },
    {
      "url" : "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem",
      "valueReference" : {
        🔗 "reference" : "Device/cqf-tooling"
      }
    }
  ],
  "url" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/SharedResourceCreation",
  "version" : "1.0.0",
  "name" : "SharedResourceCreation",
  "status" : "draft",
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library"
      }
    ]
  },
  "date" : "2025-09-28T15:20:22+00:00",
  "publisher" : "CDC National Healthcare Safety Network (NHSN)",
  "contact" : [
    {
      "name" : "CDC National Healthcare Safety Network (NHSN)",
      "telecom" : [
        {
          "system" : "url",
          "value" : "http://www.cdc.gov/nhsn"
        },
        {
          "system" : "email",
          "value" : "nhsn@cdc.gov"
        }
      ]
    }
  ],
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US"
        }
      ]
    }
  ],
  "relatedArtifact" : [
    {
      "type" : "depends-on",
      "display" : "FHIR model information",
      "resource" : "http://fhir.org/guides/cqf/common/Library/FHIR-ModelInfo|4.0.1"
    },
    {
      "type" : "depends-on",
      "display" : "Library FHIRHelpers",
      "resource" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/FHIRHelpers|4.0.2"
    }
  ],
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "bGlicmFyeSBTaGFyZWRSZXNvdXJjZUNyZWF0aW9uIHZlcnNpb24gJzAuMS4wMTAnCgppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4yJwoKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmRlZmluZSBmdW5jdGlvbiAiR2V0SWRFeHRlbnNpb25zIihkb21haW5SZXNvdXJjZSBEb21haW5SZXNvdXJjZSk6CiAgZG9tYWluUmVzb3VyY2UuZXh0ZW5zaW9uIEUKICB3aGVyZSBFLnVybC52YWx1ZSA9ICdodHRwOi8vd3d3LmNkYy5nb3Yvbmhzbi9maGlycG9ydGFsL2RxbS9pZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2xpbmstb3JpZ2luYWwtcmVzb3VyY2UtaWQtZXh0ZW5zaW9uJwogIHJldHVybiBFCgpkZWZpbmUgZnVuY3Rpb24gIkdldFBhdGllbnRFeHRlbnNpb25zIihkb21haW5SZXNvdXJjZSBEb21haW5SZXNvdXJjZSk6CiAgZG9tYWluUmVzb3VyY2UuZXh0ZW5zaW9uIEUKICB3aGVyZSBFLnVybC52YWx1ZSA9ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL2NvcmUvU3RydWN0dXJlRGVmaW5pdGlvbi91cy1jb3JlLXJhY2UnCiAgICBvciBFLnVybC52YWx1ZSA9ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL2NvcmUvU3RydWN0dXJlRGVmaW5pdGlvbi91cy1jb3JlLWV0aG5pY2l0eScKICAgIG9yIEUudXJsLnZhbHVlID0gJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvY29yZS9TdHJ1Y3R1cmVEZWZpbml0aW9uL3VzLWNvcmUtYmlydGhzZXgnCiAgICBvciBFLnVybC52YWx1ZSA9ICdodHRwOi8vd3d3LmNkYy5nb3Yvbmhzbi9maGlycG9ydGFsL2RxbS9pZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2xpbmstb3JpZ2luYWwtcmVzb3VyY2UtaWQtZXh0ZW5zaW9uJwogIHJldHVybiBFCgpkZWZpbmUgZnVuY3Rpb24gIk1ldGFFbGVtZW50IihyZXNvdXJjZSBSZXNvdXJjZSwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIHJlc291cmNlIHIKICByZXR1cm4gRkhJUi5NZXRhewogICAgZXh0ZW5zaW9uOiByLm1ldGEuZXh0ZW5zaW9uLAogICAgdmVyc2lvbklkOiByLm1ldGEudmVyc2lvbklkLAogICAgbGFzdFVwZGF0ZWQ6IHIubWV0YS5sYXN0VXBkYXRlZCwKICAgIHByb2ZpbGU6IHByb2ZpbGVVUkxzLAogICAgc2VjdXJpdHk6IHIubWV0YS5zZWN1cml0eSwKICAgIHRhZzogci5tZXRhLnRhZwogIH0KCmRlZmluZSBmdW5jdGlvbiBDb25kaXRpb25TdGFnZShzdGFnZSBMaXN0PEZISVIuQ29uZGl0aW9uLlN0YWdlPik6CiAgc3RhZ2UgcwogIHJldHVybiBGSElSLkNvbmRpdGlvbi5TdGFnZXsKICAgIHN1bW1hcnk6IHMuc3VtbWFyeSwKICAgIGFzc2Vzc21lbnQ6IHMuYXNzZXNzbWVudCwKICAgIHR5cGU6IHMudHlwZQogIH0KCmRlZmluZSBmdW5jdGlvbiBDb25kaXRpb25FdmlkZW5jZShldmlkZW5jZSBMaXN0PEZISVIuQ29uZGl0aW9uLkV2aWRlbmNlPik6CiAgZXZpZGVuY2UgZQogIHJldHVybiBGSElSLkNvbmRpdGlvbi5FdmlkZW5jZXsKICAgIGNvZGU6IGUuY29kZSwKICAgIGRldGFpbDogZS5kZXRhaWwKICB9CgpkZWZpbmUgZnVuY3Rpb24gQ29uZGl0aW9uUmVzb3VyY2UoY29uZGl0aW9uIENvbmRpdGlvbiwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIGNvbmRpdGlvbiBjCiAgcmV0dXJuIENvbmRpdGlvbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgYy5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChjLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IGMuZXh0ZW5zaW9uLAogICAgY2xpbmljYWxTdGF0dXM6IGMuY2xpbmljYWxTdGF0dXMsCiAgICB2ZXJpZmljYXRpb25TdGF0dXM6IGMudmVyaWZpY2F0aW9uU3RhdHVzLAogICAgY2F0ZWdvcnk6IGMuY2F0ZWdvcnksCiAgICBzZXZlcml0eTogYy5zZXZlcml0eSwKICAgIGNvZGU6IGMuY29kZSwKICAgIGJvZHlTaXRlOiBjLmJvZHlTaXRlLAogICAgc3ViamVjdDogYy5zdWJqZWN0LAogICAgZW5jb3VudGVyOiBjLmVuY291bnRlciwKICAgIG9uc2V0OiBjLm9uc2V0LAogICAgYWJhdGVtZW50OiBjLmFiYXRlbWVudCwKICAgIHJlY29yZGVkRGF0ZTogYy5yZWNvcmRlZERhdGUsCiAgICBzdGFnZTogQ29uZGl0aW9uU3RhZ2UoYy5zdGFnZSksCiAgICBldmlkZW5jZTogQ29uZGl0aW9uRXZpZGVuY2UoYy5ldmlkZW5jZSksCiAgICBub3RlOiBjLm5vdGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gQ292ZXJhZ2VDbGFzcyhjbGFzcyBMaXN0PEZISVIuQ292ZXJhZ2UuQ2xhc3M+KToKICBjbGFzcyBjCiAgcmV0dXJuIEZISVIuQ292ZXJhZ2UuQ2xhc3N7CiAgICB2YWx1ZTogYy52YWx1ZSwKICAgIG5hbWU6IGMubmFtZQogIH0KCmRlZmluZSBmdW5jdGlvbiBDb3ZlcmFnZVJlc291cmNlKGNvdmVyYWdlIENvdmVyYWdlLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgY292ZXJhZ2UgYwogIHJldHVybiBDb3ZlcmFnZXsKICAgIGlkOiBGSElSLmlke3ZhbHVlOiAnTENSLScgKyBjLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KGMsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogYy5leHRlbnNpb24sCiAgICBzdGF0dXM6IGMuc3RhdHVzLAogICAgdHlwZTogYy50eXBlLAogICAgcG9saWN5SG9sZGVyOiBjLnBvbGljeUhvbGRlciwKICAgIHN1YnNjcmliZXI6IGMuc3Vic2NyaWJlciwKICAgIHN1YnNjcmliZXJJZDogYy5zdWJzY3JpYmVySWQsCiAgICBiZW5lZmljaWFyeTogYy5iZW5lZmljaWFyeSwKICAgIGRlcGVuZGVudDogYy5kZXBlbmRlbnQsCiAgICByZWxhdGlvbnNoaXA6IGMucmVsYXRpb25zaGlwLAogICAgcGVyaW9kOiBjLnBlcmlvZCwKICAgIHBheW9yOiBjLnBheW9yLAogICAgY2xhc3M6IENvdmVyYWdlQ2xhc3MoYy5jbGFzcyksCiAgICBvcmRlcjogYy5vcmRlciwKICAgIG5ldHdvcms6IGMubmV0d29yaywKICAgIHN1YnJvZ2F0aW9uOiBjLnN1YnJvZ2F0aW9uLAogICAgY29udHJhY3Q6IGMuY29udHJhY3QKICB9CgpkZWZpbmUgZnVuY3Rpb24gRGlhZ25vc3RpY1JlcG9ydENvZGluZyhjb2RpbmcgTGlzdDxDb2Rpbmc+KToKICBjb2RpbmcgYwogIHJldHVybiBDb2Rpbmd7CiAgICBzeXN0ZW06IGMuc3lzdGVtLAogICAgdmVyc2lvbjogYy52ZXJzaW9uLAogICAgY29kZTogYy5jb2RlLAogICAgZGlzcGxheTogYy5kaXNwbGF5LAogICAgdXNlclNlbGVjdGVkOiBjLnVzZXJTZWxlY3RlZAogIH0KCmRlZmluZSBmdW5jdGlvbiBEaWFnbm9zdGljUmVwb3J0Q2F0ZWdvcnkoY2F0ZWdvcnkgTGlzdDxDb2RlYWJsZUNvbmNlcHQ+KToKICBjYXRlZ29yeSBjCiAgcmV0dXJuIENvZGVhYmxlQ29uY2VwdHsKICAgIGNvZGluZzogRGlhZ25vc3RpY1JlcG9ydENvZGluZyhjLmNvZGluZykKICB9CgpkZWZpbmUgZnVuY3Rpb24gRGlhZ25vc3RpY1JlcG9ydExhYlJlc291cmNlKGRpYWdub3N0aWNSZXBvcnQgRGlhZ25vc3RpY1JlcG9ydCwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIGRpYWdub3N0aWNSZXBvcnQgZAogIHJldHVybiBEaWFnbm9zdGljUmVwb3J0ewogICAgaWQ6IEZISVIuaWR7dmFsdWU6ICdMQ1ItJyArIGQuaWR9LAogICAgbWV0YTogTWV0YUVsZW1lbnQoZCwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBkLmV4dGVuc2lvbiwKICAgIGJhc2VkT246IGQuYmFzZWRPbiwKICAgIHN0YXR1czogZC5zdGF0dXMsCiAgICBjYXRlZ29yeTogRGlhZ25vc3RpY1JlcG9ydENhdGVnb3J5KGQuY2F0ZWdvcnkpLAogICAgY29kZTogZC5jb2RlLAogICAgc3ViamVjdDogZC5zdWJqZWN0LAogICAgZW5jb3VudGVyOiBkLmVuY291bnRlciwKICAgIGVmZmVjdGl2ZTogZC5lZmZlY3RpdmUsCiAgICBpc3N1ZWQ6IGQuaXNzdWVkLAogICAgcGVyZm9ybWVyOiBkLnBlcmZvcm1lciwKICAgIHJlc3VsdHNJbnRlcnByZXRlcjogZC5yZXN1bHRzSW50ZXJwcmV0ZXIsCiAgICBzcGVjaW1lbjogZC5zcGVjaW1lbiwKICAgIHJlc3VsdDogZC5yZXN1bHQsCiAgICBjb25jbHVzaW9uOiBkLmNvbmNsdXNpb24sCiAgICBjb25jbHVzaW9uQ29kZTogZC5jb25jbHVzaW9uQ29kZQogIH0KCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJJZGVudGlmaWVyKGlkZW50aWZpZXIgTGlzdDxGSElSLklkZW50aWZpZXI+KToKICBpZGVudGlmaWVyIGkKICByZXR1cm4gRkhJUi5JZGVudGlmaWVyewogICAgdXNlOiBpLnVzZSwKICAgIHR5cGU6IGkudHlwZSwKICAgIHN5c3RlbTogaS5zeXN0ZW0sCiAgICB2YWx1ZTogaS52YWx1ZSwKICAgIHBlcmlvZDogaS5wZXJpb2QKICB9CgpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyU3RhdHVzSGlzdG9yeShzdGF0dXNIaXN0b3J5IExpc3Q8RkhJUi5FbmNvdW50ZXIuU3RhdHVzSGlzdG9yeT4pOgogIHN0YXR1c0hpc3Rvcnkgc0gKICByZXR1cm4gRkhJUi5FbmNvdW50ZXIuU3RhdHVzSGlzdG9yeXsKICAgIHN0YXR1czogc0guc3RhdHVzLAogICAgcGVyaW9kOiBzSC5wZXJpb2QKICB9CgpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyQ2xhc3NIaXN0b3J5KGNsYXNzSGlzdG9yeSBMaXN0PEZISVIuRW5jb3VudGVyLkNsYXNzSGlzdG9yeT4pOgogIGNsYXNzSGlzdG9yeSBjSAogIHJldHVybiBGSElSLkVuY291bnRlci5DbGFzc0hpc3Rvcnl7CiAgICBjbGFzczogY0guY2xhc3MsCiAgICBwZXJpb2Q6IGNILnBlcmlvZAogIH0KCi8qTm8gbG9uZ2VyIG5lZWRlZCBidXQgc2F2aW5nIGZvciBwb3RlbnRpYWwgZnV0dXJlIHVzZQpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyUGFydGljaXBhbnQocGFydGljaXBhbnQgTGlzdDxGSElSLkVuY291bnRlci5QYXJ0aWNpcGFudD4pOgogIHBhcnRpY2lwYW50IHAKICByZXR1cm4gRkhJUi5FbmNvdW50ZXIuUGFydGljaXBhbnR7CiAgICB0eXBlOiBwLnR5cGUsCiAgICBwZXJpb2Q6IHAucGVyaW9kLAogICAgaW5kaXZpZHVhbDogcC5pbmRpdmlkdWFsCiAgfSovCgpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyRGlhZ25vc2lzKGRpYWdub3NpcyBMaXN0PEZISVIuRW5jb3VudGVyLkRpYWdub3Npcz4pOgogIGRpYWdub3NpcyBkCiAgcmV0dXJuIEZISVIuRW5jb3VudGVyLkRpYWdub3Npc3sKICAgIGNvbmRpdGlvbjogZC5jb25kaXRpb24sCiAgICB1c2U6IGQudXNlLAogICAgcmFuazogZC5yYW5rCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIEVuY291bnRlckhvc3BpdGFsaXphdGlvbihob3NwaXRhbGl6YXRpb24gRkhJUi5FbmNvdW50ZXIuSG9zcGl0YWxpemF0aW9uKToKICBob3NwaXRhbGl6YXRpb24gaAogIHJldHVybiBGSElSLkVuY291bnRlci5Ib3NwaXRhbGl6YXRpb257CiAgICBwcmVBZG1pc3Npb25JZGVudGlmaWVyOiBoLnByZUFkbWlzc2lvbklkZW50aWZpZXIsCiAgICBvcmlnaW46IGgub3JpZ2luLAogICAgYWRtaXRTb3VyY2U6IGguYWRtaXRTb3VyY2UsCiAgICByZUFkbWlzc2lvbjogaC5yZUFkbWlzc2lvbiwKICAgIGRpZXRQcmVmZXJlbmNlOiBoLmRpZXRQcmVmZXJlbmNlLAogICAgc3BlY2lhbENvdXJ0ZXN5OiBoLnNwZWNpYWxDb3VydGVzeSwKICAgIHNwZWNpYWxBcnJhbmdlbWVudDogaC5zcGVjaWFsQXJyYW5nZW1lbnQsCiAgICBkZXN0aW5hdGlvbjogaC5kZXN0aW5hdGlvbiwKICAgIGRpc2NoYXJnZURpc3Bvc2l0aW9uOiBoLmRpc2NoYXJnZURpc3Bvc2l0aW9uCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIEVuY291bnRlckxvY2F0aW9uKGxvY2F0aW9uIExpc3Q8RkhJUi5FbmNvdW50ZXIuTG9jYXRpb24+KToKICBsb2NhdGlvbiBsCiAgcmV0dXJuIEZISVIuRW5jb3VudGVyLkxvY2F0aW9uewogICAgbG9jYXRpb246IGwubG9jYXRpb24sCiAgICBzdGF0dXM6IGwuc3RhdHVzLAogICAgcGh5c2ljYWxUeXBlOiBsLnBoeXNpY2FsVHlwZSwKICAgIHBlcmlvZDogbC5wZXJpb2QKICB9CgpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyUmVzb3VyY2UoZW5jb3VudGVyIEVuY291bnRlciwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIGVuY291bnRlciBlCiAgcmV0dXJuIEVuY291bnRlcnsKICAgIGlkOiBGSElSLmlke3ZhbHVlOiAnTENSLScgKyBlLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KGUsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogZS5leHRlbnNpb24sCiAgICBpZGVudGlmaWVyOiBFbmNvdW50ZXJJZGVudGlmaWVyKGUuaWRlbnRpZmllciksCiAgICBzdGF0dXM6IGUuc3RhdHVzLAogICAgc3RhdHVzSGlzdG9yeTogRW5jb3VudGVyU3RhdHVzSGlzdG9yeShlLnN0YXR1c0hpc3RvcnkpLAogICAgY2xhc3M6IGUuY2xhc3MsCiAgICBjbGFzc0hpc3Rvcnk6IEVuY291bnRlckNsYXNzSGlzdG9yeShlLmNsYXNzSGlzdG9yeSksCiAgICB0eXBlOiBlLnR5cGUsCiAgICBzZXJ2aWNlVHlwZTogZS5zZXJ2aWNlVHlwZSwKICAgIHByaW9yaXR5OiBlLnByaW9yaXR5LAogICAgc3ViamVjdDogZS5zdWJqZWN0LAogICAgcGVyaW9kOiBlLnBlcmlvZCwKICAgIGxlbmd0aDogZS5sZW5ndGgsCiAgICByZWFzb25Db2RlOiBlLnJlYXNvbkNvZGUsCiAgICByZWFzb25SZWZlcmVuY2U6IGUucmVhc29uUmVmZXJlbmNlLAogICAgZGlhZ25vc2lzOiBFbmNvdW50ZXJEaWFnbm9zaXMoZS5kaWFnbm9zaXMpLAogICAgYWNjb3VudDogZS5hY2NvdW50LAogICAgaG9zcGl0YWxpemF0aW9uOiBFbmNvdW50ZXJIb3NwaXRhbGl6YXRpb24oZS5ob3NwaXRhbGl6YXRpb24pLAogICAgbG9jYXRpb246IEVuY291bnRlckxvY2F0aW9uKGUubG9jYXRpb24pLAogICAgcGFydE9mOiBlLnBhcnRPZgogIH0KCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvbkxhYkNvZGluZyhjb2RpbmcgTGlzdDxDb2Rpbmc+KToKICBjb2RpbmcgYwogIHJldHVybiBDb2Rpbmd7CiAgICBpZDogYy5pZCwKICAgIGV4dGVuc2lvbjogYy5leHRlbnNpb24sCiAgICBzeXN0ZW06IGMuc3lzdGVtLAogICAgdmVyc2lvbjogYy52ZXJzaW9uLAogICAgY29kZTogYy5jb2RlLAogICAgZGlzcGxheTogYy5kaXNwbGF5LAogICAgdXNlclNlbGVjdGVkOiBjLnVzZXJTZWxlY3RlZAogIH0KCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvbkxhYkNhdGVnb3J5KGNhdGVnb3J5IExpc3Q8Q29kZWFibGVDb25jZXB0Pik6CiAgY2F0ZWdvcnkgYwogIHJldHVybiBDb2RlYWJsZUNvbmNlcHR7CiAgICBjb2Rpbmc6IE9ic2VydmF0aW9uTGFiQ29kaW5nKGMuY29kaW5nKSwKICAgIHRleHQ6IGMudGV4dAogIH0KCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvblJlZmVyZW5jZVJhbmdlKHJlZmVyZW5jZVJhbmdlIExpc3Q8RkhJUi5PYnNlcnZhdGlvbi5SZWZlcmVuY2VSYW5nZT4pOgogIHJlZmVyZW5jZVJhbmdlIHJSCiAgcmV0dXJuIEZISVIuT2JzZXJ2YXRpb24uUmVmZXJlbmNlUmFuZ2V7CiAgICBsb3c6IHJSLmxvdywKICAgIGhpZ2g6IHJSLmhpZ2gsCiAgICB0eXBlOiByUi50eXBlLAogICAgYXBwbGllc1RvOiByUi5hcHBsaWVzVG8sCiAgICBhZ2U6IHJSLmFnZSwKICAgIHRleHQ6IHJSLnRleHQKICB9CgpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25Db21wb25lbnQoY29tcG9uZW50IExpc3Q8RkhJUi5PYnNlcnZhdGlvbi5Db21wb25lbnQ+KToKICBjb21wb25lbnQgYwogIHJldHVybiBGSElSLk9ic2VydmF0aW9uLkNvbXBvbmVudHsKICAgIGNvZGU6IGMuY29kZSwKICAgIHZhbHVlOiBjLnZhbHVlLAogICAgZGF0YUFic2VudFJlYXNvbjogYy5kYXRhQWJzZW50UmVhc29uLAogICAgaW50ZXJwcmV0YXRpb246IGMuaW50ZXJwcmV0YXRpb24sCiAgICByZWZlcmVuY2VSYW5nZTogYy5yZWZlcmVuY2VSYW5nZQogIH0KCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvbkxhYlJlc291cmNlKG9ic2VydmF0aW9uIE9ic2VydmF0aW9uLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgb2JzZXJ2YXRpb24gbwogIHJldHVybiBPYnNlcnZhdGlvbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgby5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChvLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IG8uZXh0ZW5zaW9uLAogICAgYmFzZWRPbjogby5iYXNlZE9uLAogICAgcGFydE9mOiBvLnBhcnRPZiwKICAgIHN0YXR1czogby5zdGF0dXMsCiAgICBjYXRlZ29yeTogT2JzZXJ2YXRpb25MYWJDYXRlZ29yeShvLmNhdGVnb3J5KSwKICAgIGNvZGU6IG8uY29kZSwKICAgIHN1YmplY3Q6IG8uc3ViamVjdCwKICAgIGZvY3VzOiBvLmZvY3VzLAogICAgZW5jb3VudGVyOiBvLmVuY291bnRlciwKICAgIGVmZmVjdGl2ZTogby5lZmZlY3RpdmUsCiAgICBpc3N1ZWQ6IG8uaXNzdWVkLAogICAgcGVyZm9ybWVyOiBvLnBlcmZvcm1lciwKICAgIHZhbHVlOiBvLnZhbHVlLAogICAgZGF0YUFic2VudFJlYXNvbjogby5kYXRhQWJzZW50UmVhc29uLAogICAgaW50ZXJwcmV0YXRpb246IG8uaW50ZXJwcmV0YXRpb24sCiAgICBub3RlOiBvLm5vdGUsCiAgICBib2R5U2l0ZTogby5ib2R5U2l0ZSwKICAgIG1ldGhvZDogby5tZXRob2QsCiAgICBzcGVjaW1lbjogby5zcGVjaW1lbiwKICAgIGRldmljZTogby5kZXZpY2UsCiAgICByZWZlcmVuY2VSYW5nZTogT2JzZXJ2YXRpb25SZWZlcmVuY2VSYW5nZShvLnJlZmVyZW5jZVJhbmdlKSwKICAgIGhhc01lbWJlcjogby5oYXNNZW1iZXIsCiAgICBkZXJpdmVkRnJvbTogby5kZXJpdmVkRnJvbSwKICAgIGNvbXBvbmVudDogT2JzZXJ2YXRpb25Db21wb25lbnQoby5jb21wb25lbnQpCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIExvY2F0aW9uQWRkcmVzcyhhZGRyZXNzIEZISVIuQWRkcmVzcyk6CiAgYWRkcmVzcyBhCiAgcmV0dXJuIEZISVIuQWRkcmVzc3sKICAgIHVzZTogYS51c2UsCiAgICB0eXBlOiBhLnR5cGUsCiAgICB0ZXh0OiBhLnRleHQsCiAgICBsaW5lOiBhLmxpbmUsCiAgICBjaXR5OiBhLmNpdHksCiAgICBkaXN0cmljdDogYS5kaXN0cmljdCwKICAgIHN0YXRlOiBhLnN0YXRlLAogICAgcG9zdGFsQ29kZTogYS5wb3N0YWxDb2RlLAogICAgY291bnRyeTogYS5jb3VudHJ5LAogICAgcGVyaW9kOiBhLnBlcmlvZAogIH0KCmRlZmluZSBmdW5jdGlvbiBMb2NhdGlvblBvc2l0aW9uKHBvc2l0aW9uIEZISVIuTG9jYXRpb24uUG9zaXRpb24pOgogIHBvc2l0aW9uIHAKICByZXR1cm4gRkhJUi5Mb2NhdGlvbi5Qb3NpdGlvbnsKICAgIGxvbmdpdHVkZTogcC5sb25naXR1ZGUsCiAgICBsYXRpdHVkZTogcC5sYXRpdHVkZSwKICAgIGFsdGl0dWRlOiBwLmFsdGl0dWRlCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIExvY2F0aW9uSG91cnNPZk9wZXJhdGlvbihob3Vyc09mT3BlcmF0aW9uIExpc3Q8RkhJUi5Mb2NhdGlvbi5Ib3Vyc09mT3BlcmF0aW9uPik6CiAgaG91cnNPZk9wZXJhdGlvbiBoT08KICByZXR1cm4gRkhJUi5Mb2NhdGlvbi5Ib3Vyc09mT3BlcmF0aW9uewogICAgZGF5c09mV2VlazogaE9PLmRheXNPZldlZWssCiAgICBhbGxEYXk6IGhPTy5hbGxEYXksCiAgICBvcGVuaW5nVGltZTogaE9PLm9wZW5pbmdUaW1lLAogICAgY2xvc2luZ1RpbWU6IGhPTy5jbG9zaW5nVGltZQogIH0KCmRlZmluZSBmdW5jdGlvbiBMb2NhdGlvblJlc291cmNlKGxvY2F0aW9uIExvY2F0aW9uLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgbG9jYXRpb24gbAogIHJldHVybiBMb2NhdGlvbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgbC5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChsLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IGwuZXh0ZW5zaW9uLAogICAgc3RhdHVzOiBsLnN0YXR1cywKICAgIG9wZXJhdGlvbmFsU3RhdHVzOiBsLm9wZXJhdGlvbmFsU3RhdHVzLAogICAgbmFtZTogbC5uYW1lLAogICAgYWxpYXM6IGwuYWxpYXMsCiAgICBkZXNjcmlwdGlvbjogbC5kZXNjcmlwdGlvbiwKICAgIG1vZGU6IGwubW9kZSwKICAgIHR5cGU6IGwudHlwZSwKICAgIHRlbGVjb206IGwudGVsZWNvbSwKICAgIGFkZHJlc3M6IExvY2F0aW9uQWRkcmVzcyhsLmFkZHJlc3MpLAogICAgcGh5c2ljYWxUeXBlOiBsLnBoeXNpY2FsVHlwZSwKICAgIHBvc2l0aW9uOiBMb2NhdGlvblBvc2l0aW9uKGwucG9zaXRpb24pLAogICAgbWFuYWdpbmdPcmdhbml6YXRpb246IGwubWFuYWdpbmdPcmdhbml6YXRpb24sCiAgICBwYXJ0T2Y6IGwucGFydE9mLAogICAgaG91cnNPZk9wZXJhdGlvbjogTG9jYXRpb25Ib3Vyc09mT3BlcmF0aW9uKGwuaG91cnNPZk9wZXJhdGlvbiksCiAgICBhdmFpbGFiaWxpdHlFeGNlcHRpb25zOiBsLmF2YWlsYWJpbGl0eUV4Y2VwdGlvbnMsCiAgICBlbmRwb2ludDogbC5lbmRwb2ludAogIH0KCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uSW5ncmVkaWVudChpbmdyZWRpZW50IExpc3Q8RkhJUi5NZWRpY2F0aW9uLkluZ3JlZGllbnQ+KToKICBpbmdyZWRpZW50IGkKICByZXR1cm4gRkhJUi5NZWRpY2F0aW9uLkluZ3JlZGllbnR7CiAgICBpdGVtOiBpLml0ZW0sCiAgICBzdHJlbmd0aDogaS5zdHJlbmd0aAogIH0KCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uQmF0Y2goYmF0Y2ggRkhJUi5NZWRpY2F0aW9uLkJhdGNoKToKICBiYXRjaCBiCiAgcmV0dXJuIEZISVIuTWVkaWNhdGlvbi5CYXRjaHsKICAgIGxvdE51bWJlcjogYi5sb3ROdW1iZXIsCiAgICBleHBpcmF0aW9uRGF0ZTogYi5leHBpcmF0aW9uRGF0ZQogIH0KCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uUmVzb3VyY2UobWVkaWNhdGlvbiBNZWRpY2F0aW9uLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgbWVkaWNhdGlvbiBtCiAgcmV0dXJuIE1lZGljYXRpb257CiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIG0uaWR9LAogICAgbWV0YTogTWV0YUVsZW1lbnQobSwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBtLmV4dGVuc2lvbiwKICAgIGNvZGU6IG0uY29kZSwKICAgIHN0YXR1czogbS5zdGF0dXMsCiAgICBtYW51ZmFjdHVyZXI6IG0ubWFudWZhY3R1cmVyLAogICAgZm9ybTogbS5mb3JtLAogICAgYW1vdW50OiBtLmFtb3VudCwKICAgIGluZ3JlZGllbnQ6IE1lZGljYXRpb25JbmdyZWRpZW50KG0uaW5ncmVkaWVudCksCiAgICBiYXRjaDogTWVkaWNhdGlvbkJhdGNoKG0uYmF0Y2gpCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25BZG1pbmlzdHJhdGlvblBlcmZvcm1lcihwZXJmb3JtZXIgTGlzdDxGSElSLk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbi5QZXJmb3JtZXI+KToKICBwZXJmb3JtZXIgcAogIHJldHVybiBGSElSLk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbi5QZXJmb3JtZXJ7CiAgICBmdW5jdGlvbjogcC5mdW5jdGlvbiwKICAgIGFjdG9yOiBwLmFjdG9yCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25BZG1pbmlzdHJhdGlvbkRvc2FnZShkb3NhZ2UgRkhJUi5NZWRpY2F0aW9uQWRtaW5pc3RyYXRpb24uRG9zYWdlKToKICBkb3NhZ2UgZAogIHJldHVybiBGSElSLk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbi5Eb3NhZ2V7CiAgICB0ZXh0OiBkLnRleHQsCiAgICBzaXRlOiBkLnNpdGUsCiAgICByb3V0ZTogZC5yb3V0ZSwKICAgIG1ldGhvZDogZC5tZXRob2QsCiAgICBkb3NlOiBkLmRvc2UsCiAgICByYXRlOiBkLnJhdGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uUmVzb3VyY2UobWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uIE1lZGljYXRpb25BZG1pbmlzdHJhdGlvbiwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIG1lZGljYXRpb25BZG1pbmlzdHJhdGlvbiBtCiAgcmV0dXJuIE1lZGljYXRpb25BZG1pbmlzdHJhdGlvbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgbS5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChtLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IG0uZXh0ZW5zaW9uLAogICAgaW5zdGFudGlhdGVzOiBtLmluc3RhbnRpYXRlcywKICAgIHBhcnRPZjogbS5wYXJ0T2YsCiAgICBzdGF0dXM6IG0uc3RhdHVzLAogICAgc3RhdHVzUmVhc29uOiBtLnN0YXR1c1JlYXNvbiwKICAgIGNhdGVnb3J5OiBtLmNhdGVnb3J5LAogICAgbWVkaWNhdGlvbjogbS5tZWRpY2F0aW9uLAogICAgc3ViamVjdDogbS5zdWJqZWN0LAogICAgY29udGV4dDogbS5jb250ZXh0LAogICAgc3VwcG9ydGluZ0luZm9ybWF0aW9uOiBtLnN1cHBvcnRpbmdJbmZvcm1hdGlvbiwKICAgIGVmZmVjdGl2ZTogbS5lZmZlY3RpdmUsCiAgICBwZXJmb3JtZXI6IE1lZGljYXRpb25BZG1pbmlzdHJhdGlvblBlcmZvcm1lcihtLnBlcmZvcm1lciksCiAgICByZWFzb25Db2RlOiBtLnJlYXNvbkNvZGUsCiAgICByZWFzb25SZWZlcmVuY2U6IG0ucmVhc29uUmVmZXJlbmNlLAogICAgcmVxdWVzdDogbS5yZXF1ZXN0LAogICAgZGV2aWNlOiBtLmRldmljZSwKICAgIG5vdGU6IG0ubm90ZSwKICAgIGRvc2FnZTogTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uRG9zYWdlKG0uZG9zYWdlKSwKICAgIGV2ZW50SGlzdG9yeTogbS5ldmVudEhpc3RvcnkKICB9CgpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvblJlcXVlc3REb3NlQW5kUmF0ZShkb3NlQW5kUmF0ZSBMaXN0PEZISVIuRG9zYWdlLkRvc2VBbmRSYXRlPik6CiAgZG9zZUFuZFJhdGUgZFIKICByZXR1cm4gRkhJUi5Eb3NhZ2UuRG9zZUFuZFJhdGV7CiAgICB0eXBlOiBkUi50eXBlLAogICAgZG9zZTogZFIuZG9zZSwKICAgIHJhdGU6IGRSLnJhdGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvblJlcXVlc3REb3NhZ2VJbnN0cnVjdGlvbihkb3NhZ2VJbnN0cnVjdGlvbiBMaXN0PEZISVIuRG9zYWdlPik6CiAgZG9zYWdlSW5zdHJ1Y3Rpb24gZEkKICByZXR1cm4gRkhJUi5Eb3NhZ2V7CiAgICB0ZXh0OiBkSS50ZXh0LAogICAgcGF0aWVudEluc3RydWN0aW9uOiBkSS5wYXRpZW50SW5zdHJ1Y3Rpb24sCiAgICB0aW1pbmc6IGRJLnRpbWluZywKICAgIGFzTmVlZGVkOiBkSS5hc05lZWRlZCwKICAgIHNpdGU6IGRJLnNpdGUsCiAgICByb3V0ZTogZEkucm91dGUsCiAgICBtZXRob2Q6IGRJLm1ldGhvZCwKICAgIGRvc2VBbmRSYXRlOiBNZWRpY2F0aW9uUmVxdWVzdERvc2VBbmRSYXRlKGRJLmRvc2VBbmRSYXRlKQogIH0KCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uUmVxdWVzdFJlc291cmNlKG1lZGljYXRpb25SZXF1ZXN0IE1lZGljYXRpb25SZXF1ZXN0LCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgbWVkaWNhdGlvblJlcXVlc3QgbQogIHJldHVybiBNZWRpY2F0aW9uUmVxdWVzdHsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgbS5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChtZWRpY2F0aW9uUmVxdWVzdCwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBtLmV4dGVuc2lvbiwKICAgIHN0YXR1czogbS5zdGF0dXMsCiAgICBzdGF0dXNSZWFzb246IG0uc3RhdHVzUmVhc29uLAogICAgaW50ZW50OiBtLmludGVudCwKICAgIGNhdGVnb3J5OiBtLmNhdGVnb3J5LAogICAgcHJpb3JpdHk6IG0ucHJpb3JpdHksCiAgICBkb05vdFBlcmZvcm06IG0uZG9Ob3RQZXJmb3JtLAogICAgcmVwb3J0ZWQ6IG0ucmVwb3J0ZWQsCiAgICBtZWRpY2F0aW9uOiBtLm1lZGljYXRpb24sCiAgICBzdWJqZWN0OiBtLnN1YmplY3QsCiAgICBlbmNvdW50ZXI6IG0uZW5jb3VudGVyLAogICAgYXV0aG9yZWRPbjogbS5hdXRob3JlZE9uLAogICAgcmVxdWVzdGVyOiBtLnJlcXVlc3RlciwKICAgIHJlY29yZGVyOiBtLnJlY29yZGVyLAogICAgcmVhc29uQ29kZTogbS5yZWFzb25Db2RlLAogICAgcmVhc29uUmVmZXJlbmNlOiBtLnJlYXNvblJlZmVyZW5jZSwKICAgIGluc3RhbnRpYXRlc0Nhbm9uaWNhbDogbS5pbnN0YW50aWF0ZXNDYW5vbmljYWwsCiAgICBpbnN0YW50aWF0ZXNVcmk6IG0uaW5zdGFudGlhdGVzVXJpLAogICAgY291cnNlT2ZUaGVyYXB5VHlwZTogbS5jb3Vyc2VPZlRoZXJhcHlUeXBlLAogICAgZG9zYWdlSW5zdHJ1Y3Rpb246IE1lZGljYXRpb25SZXF1ZXN0RG9zYWdlSW5zdHJ1Y3Rpb24obS5kb3NhZ2VJbnN0cnVjdGlvbikKICB9CgovKiBObyBsb25nZXIgbmVlZGVkIGJ1dCBzYXZpbmcgaW4gY2FzZSBpdCdzIHVzZWZ1bCBsYXRlcgpkZWZpbmUgZnVuY3Rpb24gUGF0aWVudElkZW50aWZpZXIoaWRlbnRpZmllciBMaXN0PEZISVIuSWRlbnRpZmllcj4pOgogIGlkZW50aWZpZXIgaQogIHJldHVybiBGSElSLklkZW50aWZpZXJ7CiAgICBpZDogaS5pZCwKICAgIGV4dGVuc2lvbjogaS5leHRlbnNpb24sCiAgICB1c2U6IGkudXNlLAogICAgdHlwZTogaS50eXBlLAogICAgc3lzdGVtOiBpLnN5c3RlbSwKICAgIHZhbHVlOiBpLnZhbHVlLAogICAgcGVyaW9kOiBpLnBlcmlvZCwKICAgIGFzc2lnbmVyOiBpLmFzc2lnbmVyCiAgfSovCgpkZWZpbmUgZnVuY3Rpb24gUGF0aWVudE5hbWUobmFtZSBMaXN0PEZISVIuSHVtYW5OYW1lPik6CiAgbmFtZSBuCiAgcmV0dXJuIEZISVIuSHVtYW5OYW1lewogICAgaWQ6IG4uaWQsCiAgICBleHRlbnNpb246IG4uZXh0ZW5zaW9uLAogICAgdXNlOiBuLnVzZSwKICAgIHRleHQ6IG4udGV4dCwKICAgIGZhbWlseTogbi5mYW1pbHksCiAgICBnaXZlbjogbi5naXZlbiwKICAgIHByZWZpeDogbi5wcmVmaXgsCiAgICBzdWZmaXg6IG4uc3VmZml4LAogICAgcGVyaW9kOiBuLnBlcmlvZAogIH0KCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50VGVsZWNvbSh0ZWxlY29tIExpc3Q8RkhJUi5Db250YWN0UG9pbnQ+KToKICB0ZWxlY29tIHQKICByZXR1cm4gRkhJUi5Db250YWN0UG9pbnR7CiAgICBzeXN0ZW06IHQuc3lzdGVtLAogICAgdmFsdWU6IHQudmFsdWUsCiAgICB1c2U6IHQudXNlLAogICAgcmFuazogdC5yYW5rLAogICAgcGVyaW9kOiB0LnBlcmlvZAogIH0KCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50QWRkcmVzcyhhZGRyZXNzIExpc3Q8RkhJUi5BZGRyZXNzPik6CiAgYWRkcmVzcyBhCiAgcmV0dXJuIEZISVIuQWRkcmVzc3sKICAgIGlkOiBhLmlkLAogICAgZXh0ZW5zaW9uOiBhLmV4dGVuc2lvbiwKICAgIHVzZTogYS51c2UsCiAgICB0eXBlOiBhLnR5cGUsCiAgICB0ZXh0OiBhLnRleHQsCiAgICBsaW5lOiBhLmxpbmUsCiAgICBjaXR5OiBhLmNpdHksCiAgICBkaXN0cmljdDogYS5kaXN0cmljdCwKICAgIHN0YXRlOiBhLnN0YXRlLAogICAgcG9zdGFsQ29kZTogYS5wb3N0YWxDb2RlLAogICAgY291bnRyeTogYS5jb3VudHJ5LAogICAgcGVyaW9kOiBhLnBlcmlvZAogIH0KCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50Q29udGFjdChjb250YWN0IExpc3Q8RkhJUi5QYXRpZW50LkNvbnRhY3Q+KToKICBjb250YWN0IGMKICByZXR1cm4gRkhJUi5QYXRpZW50LkNvbnRhY3R7CiAgICBpZDogYy5pZCwKICAgIGV4dGVuc2lvbjogYy5leHRlbnNpb24sCiAgICByZWxhdGlvbnNoaXA6IGMucmVsYXRpb25zaGlwLAogICAgbmFtZTogYy5uYW1lLAogICAgdGVsZWNvbTogYy50ZWxlY29tLAogICAgYWRkcmVzczogYy5hZGRyZXNzLAogICAgZ2VuZGVyOiBjLmdlbmRlciwKICAgIG9yZ2FuaXphdGlvbjogYy5vcmdhbml6YXRpb24sCiAgICBwZXJpb2Q6IGMucGVyaW9kCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFBhdGllbnRDb21tdW5pY2F0aW9uKGNvbW11bmljYXRpb24gTGlzdDxGSElSLlBhdGllbnQuQ29tbXVuaWNhdGlvbj4pOgogIGNvbW11bmljYXRpb24gYwogIHJldHVybiBGSElSLlBhdGllbnQuQ29tbXVuaWNhdGlvbnsKICAgIGlkOiBjLmlkLAogICAgZXh0ZW5zaW9uOiBjLmV4dGVuc2lvbiwKICAgIGxhbmd1YWdlOiBjLmxhbmd1YWdlLAogICAgcHJlZmVycmVkOiBjLnByZWZlcnJlZAogIH0KCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50TGluayhsaW5rIExpc3Q8RkhJUi5QYXRpZW50Lkxpbms+KToKICBsaW5rIGwKICByZXR1cm4gRkhJUi5QYXRpZW50Lkxpbmt7CiAgICBpZDogbC5pZCwKICAgIGV4dGVuc2lvbjogbC5leHRlbnNpb24sCiAgICBtb2RpZmllckV4dGVuc2lvbjogbC5tb2RpZmllckV4dGVuc2lvbiwKICAgIG90aGVyOiBsLm90aGVyLAogICAgdHlwZTogbC50eXBlCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFBhdGllbnRSZXNvdXJjZShwYXRpZW50IFBhdGllbnQsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBwYXRpZW50IHAKICByZXR1cm4gUGF0aWVudHsKICAgIGlkOiBGSElSLmlke3ZhbHVlOiAnTENSLScgKyBwLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KHAsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogR2V0UGF0aWVudEV4dGVuc2lvbnMocCkgdW5pb24gR2V0SWRFeHRlbnNpb25zKHApLAogICAgaWRlbnRpZmllcjogcC5pZGVudGlmaWVyLAogICAgYWN0aXZlOiBwLmFjdGl2ZSwKICAgIG5hbWU6IFBhdGllbnROYW1lKHAubmFtZSksCiAgICB0ZWxlY29tOiBQYXRpZW50VGVsZWNvbShwLnRlbGVjb20pLAogICAgZ2VuZGVyOiBwLmdlbmRlciwKICAgIGJpcnRoRGF0ZTogcC5iaXJ0aERhdGUsCiAgICBkZWNlYXNlZDogcC5kZWNlYXNlZCwKICAgIGFkZHJlc3M6IFBhdGllbnRBZGRyZXNzKHAuYWRkcmVzcyksCiAgICBtYXJpdGFsU3RhdHVzOiBwLm1hcml0YWxTdGF0dXMsCiAgICBtdWx0aXBsZUJpcnRoOiBwLm11bHRpcGxlQmlydGgsCiAgICBwaG90bzogcC5waG90bywKICAgIGNvbnRhY3Q6IFBhdGllbnRDb250YWN0KHAuY29udGFjdCksCiAgICBjb21tdW5pY2F0aW9uOiBQYXRpZW50Q29tbXVuaWNhdGlvbihwLmNvbW11bmljYXRpb24pLAogICAgZ2VuZXJhbFByYWN0aXRpb25lcjogcC5nZW5lcmFsUHJhY3RpdGlvbmVyLAogICAgbWFuYWdpbmdPcmdhbml6YXRpb246IHAubWFuYWdpbmdPcmdhbml6YXRpb24sCiAgICBsaW5rOiBQYXRpZW50TGluayhwLmxpbmspCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFByb2NlZHVyZVBlcmZvcm1lcihwZXJmb3JtZXIgTGlzdDxGSElSLlByb2NlZHVyZS5QZXJmb3JtZXI+KToKICBwZXJmb3JtZXIgcAogIHJldHVybiBGSElSLlByb2NlZHVyZS5QZXJmb3JtZXJ7CiAgICBmdW5jdGlvbjogcC5mdW5jdGlvbiwKICAgIGFjdG9yOiBwLmFjdG9yLAogICAgb25CZWhhbGZPZjogcC5vbkJlaGFsZk9mCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFByb2NlZHVyZUZvY2FsRGV2aWNlKGRldmljZSBMaXN0PEZISVIuUHJvY2VkdXJlLkZvY2FsRGV2aWNlPik6CiAgZGV2aWNlIGQKICByZXR1cm4gRkhJUi5Qcm9jZWR1cmUuRm9jYWxEZXZpY2V7CiAgICBhY3Rpb246IGQuYWN0aW9uLAogICAgbWFuaXB1bGF0ZWQ6IGQubWFuaXB1bGF0ZWQKICB9CgpkZWZpbmUgZnVuY3Rpb24gUHJvY2VkdXJlUmVzb3VyY2UocHJvY2VkdXJlIFByb2NlZHVyZSwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIHByb2NlZHVyZSBwCiAgcmV0dXJuIFByb2NlZHVyZXsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgcC5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChwLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IHAuZXh0ZW5zaW9uLAogICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBwLmluc3RhbnRpYXRlc0Nhbm9uaWNhbCwKICAgIGluc3RhbnRpYXRlc1VyaTogcC5pbnN0YW50aWF0ZXNVcmksCiAgICBiYXNlZE9uOiBwLmJhc2VkT24sCiAgICBwYXJ0T2Y6IHAucGFydE9mLAogICAgc3RhdHVzOiBwLnN0YXR1cywKICAgIHN0YXR1c1JlYXNvbjogcC5zdGF0dXNSZWFzb24sCiAgICBjYXRlZ29yeTogcC5jYXRlZ29yeSwKICAgIGNvZGU6IHAuY29kZSwKICAgIHN1YmplY3Q6IHAuc3ViamVjdCwKICAgIGVuY291bnRlcjogcC5lbmNvdW50ZXIsCiAgICBwZXJmb3JtZWQ6IHAucGVyZm9ybWVkLAogICAgcmVjb3JkZXI6IHAucmVjb3JkZXIsCiAgICBhc3NlcnRlcjogcC5hc3NlcnRlciwKICAgIHBlcmZvcm1lcjogUHJvY2VkdXJlUGVyZm9ybWVyKHAucGVyZm9ybWVyKSwKICAgIGxvY2F0aW9uOiBwLmxvY2F0aW9uLAogICAgcmVhc29uQ29kZTogcC5yZWFzb25Db2RlLAogICAgcmVhc29uUmVmZXJlbmNlOiBwLnJlYXNvblJlZmVyZW5jZSwKICAgIGJvZHlTaXRlOiBwLmJvZHlTaXRlLAogICAgb3V0Y29tZTogcC5vdXRjb21lLAogICAgcmVwb3J0OiBwLnJlcG9ydCwKICAgIGNvbXBsaWNhdGlvbjogcC5jb21wbGljYXRpb24sCiAgICBjb21wbGljYXRpb25EZXRhaWw6IHAuY29tcGxpY2F0aW9uRGV0YWlsLAogICAgZm9sbG93VXA6IHAuZm9sbG93VXAsCiAgICBub3RlOiBwLm5vdGUsCiAgICBmb2NhbERldmljZTogUHJvY2VkdXJlRm9jYWxEZXZpY2UocC5mb2NhbERldmljZSksCiAgICB1c2VkUmVmZXJlbmNlOiBwLnVzZWRSZWZlcmVuY2UsCiAgICB1c2VkQ29kZTogcC51c2VkQ29kZQogIH0KCmRlZmluZSBmdW5jdGlvbiBTZXJ2aWNlUmVxdWVzdFJlc291cmNlKHNlcnZpY2VSZXF1ZXN0IFNlcnZpY2VSZXF1ZXN0LCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgc2VydmljZVJlcXVlc3Qgc1IKICByZXR1cm4gU2VydmljZVJlcXVlc3R7CiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIHNSLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KHNSLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IHNSLmV4dGVuc2lvbiwKICAgIGluc3RhbnRpYXRlc0Nhbm9uaWNhbDogc1IuaW5zdGFudGlhdGVzQ2Fub25pY2FsLAogICAgaW5zdGFudGlhdGVzVXJpOiBzUi5pbnN0YW50aWF0ZXNVcmksCiAgICBiYXNlZE9uOiBzUi5iYXNlZE9uLAogICAgcmVwbGFjZXM6IHNSLnJlcGxhY2VzLAogICAgcmVxdWlzaXRpb246IHNSLnJlcXVpc2l0aW9uLAogICAgc3RhdHVzOiBzUi5zdGF0dXMsCiAgICBpbnRlbnQ6IHNSLmludGVudCwKICAgIGNhdGVnb3J5OiBzUi5jYXRlZ29yeSwKICAgIHByaW9yaXR5OiBzUi5wcmlvcml0eSwKICAgIGRvTm90UGVyZm9ybTogc1IuZG9Ob3RQZXJmb3JtLAogICAgY29kZTogc1IuY29kZSwKICAgIG9yZGVyRGV0YWlsOiBzUi5vcmRlckRldGFpbCwKICAgIHF1YW50aXR5OiBzUi5xdWFudGl0eSwKICAgIHN1YmplY3Q6IHNSLnN1YmplY3QsCiAgICBlbmNvdW50ZXI6IHNSLmVuY291bnRlciwKICAgIG9jY3VycmVuY2U6IHNSLm9jY3VycmVuY2UsCiAgICBhc05lZWRlZDogc1IuYXNOZWVkZWQsCiAgICBhdXRob3JlZE9uOiBzUi5hdXRob3JlZE9uLAogICAgcmVxdWVzdGVyOiBzUi5yZXF1ZXN0ZXIsCiAgICBwZXJmb3JtZXJUeXBlOiBzUi5wZXJmb3JtZXJUeXBlLAogICAgcGVyZm9ybWVyOiBzUi5wZXJmb3JtZXIsCiAgICBsb2NhdGlvbkNvZGU6IHNSLmxvY2F0aW9uQ29kZSwKICAgIGxvY2F0aW9uUmVmZXJlbmNlOiBzUi5sb2NhdGlvblJlZmVyZW5jZSwKICAgIHJlYXNvbkNvZGU6IHNSLnJlYXNvbkNvZGUsCiAgICByZWFzb25SZWZlcmVuY2U6IHNSLnJlYXNvblJlZmVyZW5jZSwKICAgIGluc3VyYW5jZTogc1IuaW5zdXJhbmNlLAogICAgc3VwcG9ydGluZ0luZm86IHNSLnN1cHBvcnRpbmdJbmZvLAogICAgc3BlY2ltZW46IHNSLnNwZWNpbWVuLAogICAgYm9keVNpdGU6IHNSLmJvZHlTaXRlLAogICAgbm90ZTogc1Iubm90ZSwKICAgIHBhdGllbnRJbnN0cnVjdGlvbjogc1IucGF0aWVudEluc3RydWN0aW9uLAogICAgcmVsZXZhbnRIaXN0b3J5OiBzUi5yZWxldmFudEhpc3RvcnkKICB9CgpkZWZpbmUgZnVuY3Rpb24gU3BlY2ltZW5Db2xsZWN0aW9uKGNvbGxlY3Rpb24gRkhJUi5TcGVjaW1lbi5Db2xsZWN0aW9uKToKICBjb2xsZWN0aW9uIGMKICByZXR1cm4gRkhJUi5TcGVjaW1lbi5Db2xsZWN0aW9uewogICAgY29sbGVjdG9yOiBjLmNvbGxlY3RvciwKICAgIGNvbGxlY3RlZDogYy5jb2xsZWN0ZWQsCiAgICAiZHVyYXRpb24iOiBjLiJkdXJhdGlvbiIsCiAgICBxdWFudGl0eTogYy5xdWFudGl0eSwKICAgIG1ldGhvZDogYy5tZXRob2QsCiAgICBib2R5U2l0ZTogYy5ib2R5U2l0ZSwKICAgIGZhc3RpbmdTdGF0dXM6IGMuZmFzdGluZ1N0YXR1cwogIH0KCmRlZmluZSBmdW5jdGlvbiBTcGVjaW1lblByb2Nlc3NpbmcocHJvY2Vzc2luZyBMaXN0PEZISVIuU3BlY2ltZW4uUHJvY2Vzc2luZz4pOgogIHByb2Nlc3NpbmcgcAogIHJldHVybiBGSElSLlNwZWNpbWVuLlByb2Nlc3Npbmd7CiAgICBkZXNjcmlwdGlvbjogcC5kZXNjcmlwdGlvbiwKICAgIHByb2NlZHVyZTogcC5wcm9jZWR1cmUsCiAgICBhZGRpdGl2ZTogcC5hZGRpdGl2ZSwKICAgIHRpbWU6IHAudGltZQogIH0KCmRlZmluZSBmdW5jdGlvbiBTcGVjaW1lbkNvbnRhaW5lcihjb250YWluZXIgTGlzdDxGSElSLlNwZWNpbWVuLkNvbnRhaW5lcj4pOgogIGNvbnRhaW5lciBjCiAgcmV0dXJuIEZISVIuU3BlY2ltZW4uQ29udGFpbmVyewogICAgZGVzY3JpcHRpb246IGMuZGVzY3JpcHRpb24sCiAgICB0eXBlOiBjLnR5cGUsCiAgICBjYXBhY2l0eTogYy5jYXBhY2l0eSwKICAgIHNwZWNpbWVuUXVhbnRpdHk6IGMuc3BlY2ltZW5RdWFudGl0eSwKICAgIGFkZGl0aXZlOiBjLmFkZGl0aXZlCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFNwZWNpbWVuUmVzb3VyY2Uoc3BlY2ltZW4gU3BlY2ltZW4sIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBzcGVjaW1lbiBzCiAgcmV0dXJuIFNwZWNpbWVuewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBzLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KHMsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogcy5leHRlbnNpb24sCiAgICBpZGVudGlmaWVyOiBzLmlkZW50aWZpZXIsCiAgICBhY2Nlc3Npb25JZGVudGlmaWVyOiBzLmFjY2Vzc2lvbklkZW50aWZpZXIsCiAgICBzdGF0dXM6IHMuc3RhdHVzLAogICAgdHlwZTogcy50eXBlLAogICAgc3ViamVjdDogcy5zdWJqZWN0LAogICAgcmVjZWl2ZWRUaW1lOiBzLnJlY2VpdmVkVGltZSwKICAgIHBhcmVudDogcy5wYXJlbnQsCiAgICByZXF1ZXN0OiBzLnJlcXVlc3QsCiAgICBjb2xsZWN0aW9uOiBTcGVjaW1lbkNvbGxlY3Rpb24ocy5jb2xsZWN0aW9uKSwKICAgIHByb2Nlc3Npbmc6IFNwZWNpbWVuUHJvY2Vzc2luZyhzLnByb2Nlc3NpbmcpLAogICAgY29udGFpbmVyOiBTcGVjaW1lbkNvbnRhaW5lcihzLmNvbnRhaW5lciksCiAgICBjb25kaXRpb246IHMuY29uZGl0aW9uLAogICAgbm90ZTogcy5ub3RlCiAgfQoKZGVmaW5lIGZ1bmN0aW9uICJPcGVyYXRpb25PdXRjb21lUmVzb3VyY2UiKGVycm9ySWQgU3RyaW5nLCByZXNvdXJjZUlkIEZISVIuaWQsIG1lc3NhZ2UgU3RyaW5nKToKICBPcGVyYXRpb25PdXRjb21lewogICAgICBpZDogRkhJUi5pZHt2YWx1ZTogZXJyb3JJZH0sCiAgICAgIGlzc3VlOiB7CiAgICAgICAgICBGSElSLk9wZXJhdGlvbk91dGNvbWUuSXNzdWV7CiAgICAgICAgICBzZXZlcml0eTogRkhJUi5Jc3N1ZVNldmVyaXR5e3ZhbHVlOiAnZXJyb3InfSwKICAgICAgICAgIGNvZGU6IEZISVIuSXNzdWVUeXBle3ZhbHVlOiAnZXhjZXB0aW9uJ30sCiAgICAgICAgICBkZXRhaWxzOiAKICAgICAgICAgICAgICBGSElSLkNvZGVhYmxlQ29uY2VwdHsKICAgICAgICAgICAgICAgICAgY29kaW5nOiB7CiAgICAgICAgICAgICAgICAgICAgICBDb2Rpbmd7CiAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06IHVyaXt2YWx1ZTogJ2h0dHBzOi8vbGFudGFuYWdyb3VwLmNvbS92YWxpZGF0aW9uLWVycm9yJ30sCiAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb2Rle3ZhbHVlOiAnRXJyb3InfSwKICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHN0cmluZ3t2YWx1ZTogJ1Jlc291cmNlICcgKyByZXNvdXJjZUlkICsgJyBmYWlsZWQgdmFsaWRhdGlvbjogJyArIG1lc3NhZ2V9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgIH0KICB9",
      "url" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library-SharedResourceCreation.cql"
    }
  ]
}