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

CDC National Healthcare Safety Network (NHSN) Digital Quality Measures (dQM) Content Package IG - Local Development build (v3.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: 2

Raw json | Download

{
  "resourceType" : "Library",
  "id" : "SharedResourceCreation",
  "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\">Metadata</th>\n\n\n</tr>\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Version</th>\n\n\n\n<td class=\"content-container\">3.0.0</td>\n\n\n</tr>\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<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Jurisdiction</th>\n\n\n\n<td class=\"content-container\">\n    US from <a href=\"https://en.wikipedia.org/wiki/ISO_3166-2\">urn:iso:std:iso:3166</a> \n\n\n</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Steward (Publisher)</th>\n\n\n\n<td class=\"content-container\">CDC National Healthcare Safety Network (NHSN)</td>\n\n\n</tr>\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Steward Contact</th>\n\n\n\n<td class=\"content-container\">CDC National Healthcare Safety Network (NHSN)</td>\n\n\n</tr>\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    logic-library from <a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a> \n\n\n</td>\n\n\n</tr>\n\n\n\n<tr>\n  \n  \n  \n  \n  \n\n<th scope=\"row\" class=\"row-header\">Dependency</th>\n\n\n  \n  \n  <td class=\"content-container\">\n    \n    <em>Description</em>: Library FHIRHelpers\n    \n    <br/>\n    \n    \n    \n    \n    \n    \n    <em>Resource</em>: <code>http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/FHIRHelpers|4.0.2</code>\n    <br/>\n    <em>Canonical URL</em>: <tt>http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/FHIRHelpers|4.0.2</tt>\n    \n    \n    \n  </td>\n</tr>\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\">library SharedResourceCreation version '0.1.010-cibuild'\n\ninclude FHIRHelpers version '4.0.2'\n\nusing FHIR version '4.0.1'\n\ndefine function &quot;GetPatientExtensions&quot;(domainResource DomainResource): \n  domainResource.extension E\n  where E.url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex'\n    or E.url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-sex'\n    or E.url = '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    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\n/*No longer needed but saving in case it's useful later\ndefine function PatientContact(contact List&lt;FHIR.Patient.Contact&gt;):\n  contact c\n  return FHIR.Patient.Contact{\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\n/*No longer needed but saving in case it's useful later\ndefine function PatientCommunication(communication List&lt;FHIR.Patient.Communication&gt;):\n  communication c\n  return FHIR.Patient.Communication{\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    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),\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    /*contact: PatientContact(p.contact),\n    communication: PatientCommunication(p.communication),*/\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>\n      </td>\n    </tr>\n    \n  \n\n<tr>\n  <th colspan=\"2\" scope=\"row\" class=\"row-header\">Generated using version 0.5.6-cibuild of the sample-content-ig Liquid templates</th>\n</tr>\n\n    </tbody>\n  </table>\n</div>"
  },
  "contained" : [
    {
      "resourceType" : "Parameters",
      "id" : "options",
      "parameter" : [
        {
          "name" : "translatorVersion",
          "valueString" : "3.27.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://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/SharedResourceCreation",
  "version" : "3.0.0",
  "name" : "SharedResourceCreation",
  "status" : "draft",
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library"
      }
    ]
  },
  "date" : "2026-08-14T18:33:45+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" : "Library FHIRHelpers",
      "resource" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/FHIRHelpers|4.0.2"
    }
  ],
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "bGlicmFyeSBTaGFyZWRSZXNvdXJjZUNyZWF0aW9uIHZlcnNpb24gJzAuMS4wMTAtY2lidWlsZCcKCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjInCgp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKZGVmaW5lIGZ1bmN0aW9uICJHZXRQYXRpZW50RXh0ZW5zaW9ucyIoZG9tYWluUmVzb3VyY2UgRG9tYWluUmVzb3VyY2UpOiAKICBkb21haW5SZXNvdXJjZS5leHRlbnNpb24gRQogIHdoZXJlIEUudXJsID0gJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvY29yZS9TdHJ1Y3R1cmVEZWZpbml0aW9uL3VzLWNvcmUtYmlydGhzZXgnCiAgICBvciBFLnVybCA9ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL2NvcmUvU3RydWN0dXJlRGVmaW5pdGlvbi91cy1jb3JlLXNleCcKICAgIG9yIEUudXJsID0gJ2h0dHA6Ly93d3cuY2RjLmdvdi9uaHNuL2ZoaXJwb3J0YWwvZHFtL2lnL1N0cnVjdHVyZURlZmluaXRpb24vbGluay1vcmlnaW5hbC1yZXNvdXJjZS1pZC1leHRlbnNpb24nCiAgcmV0dXJuIEUKCmRlZmluZSBmdW5jdGlvbiAiTWV0YUVsZW1lbnQiKHJlc291cmNlIFJlc291cmNlLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgcmVzb3VyY2UgcgogIHJldHVybiBGSElSLk1ldGF7CiAgICBleHRlbnNpb246IHIubWV0YS5leHRlbnNpb24sCiAgICB2ZXJzaW9uSWQ6IHIubWV0YS52ZXJzaW9uSWQsCiAgICBsYXN0VXBkYXRlZDogci5tZXRhLmxhc3RVcGRhdGVkLAogICAgcHJvZmlsZTogcHJvZmlsZVVSTHMsCiAgICBzZWN1cml0eTogci5tZXRhLnNlY3VyaXR5LAogICAgdGFnOiByLm1ldGEudGFnCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIENvbmRpdGlvblN0YWdlKHN0YWdlIExpc3Q8RkhJUi5Db25kaXRpb24uU3RhZ2U+KToKICBzdGFnZSBzCiAgcmV0dXJuIEZISVIuQ29uZGl0aW9uLlN0YWdlewogICAgc3VtbWFyeTogcy5zdW1tYXJ5LAogICAgYXNzZXNzbWVudDogcy5hc3Nlc3NtZW50LAogICAgdHlwZTogcy50eXBlCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIENvbmRpdGlvbkV2aWRlbmNlKGV2aWRlbmNlIExpc3Q8RkhJUi5Db25kaXRpb24uRXZpZGVuY2U+KToKICBldmlkZW5jZSBlCiAgcmV0dXJuIEZISVIuQ29uZGl0aW9uLkV2aWRlbmNlewogICAgY29kZTogZS5jb2RlLAogICAgZGV0YWlsOiBlLmRldGFpbAogIH0KCmRlZmluZSBmdW5jdGlvbiBDb25kaXRpb25SZXNvdXJjZShjb25kaXRpb24gQ29uZGl0aW9uLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgY29uZGl0aW9uIGMKICByZXR1cm4gQ29uZGl0aW9uewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBjLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KGMsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogYy5leHRlbnNpb24sCiAgICBjbGluaWNhbFN0YXR1czogYy5jbGluaWNhbFN0YXR1cywKICAgIHZlcmlmaWNhdGlvblN0YXR1czogYy52ZXJpZmljYXRpb25TdGF0dXMsCiAgICBjYXRlZ29yeTogYy5jYXRlZ29yeSwKICAgIHNldmVyaXR5OiBjLnNldmVyaXR5LAogICAgY29kZTogYy5jb2RlLAogICAgYm9keVNpdGU6IGMuYm9keVNpdGUsCiAgICBzdWJqZWN0OiBjLnN1YmplY3QsCiAgICBlbmNvdW50ZXI6IGMuZW5jb3VudGVyLAogICAgb25zZXQ6IGMub25zZXQsCiAgICBhYmF0ZW1lbnQ6IGMuYWJhdGVtZW50LAogICAgcmVjb3JkZWREYXRlOiBjLnJlY29yZGVkRGF0ZSwKICAgIHN0YWdlOiBDb25kaXRpb25TdGFnZShjLnN0YWdlKSwKICAgIGV2aWRlbmNlOiBDb25kaXRpb25FdmlkZW5jZShjLmV2aWRlbmNlKSwKICAgIG5vdGU6IGMubm90ZQogIH0KCmRlZmluZSBmdW5jdGlvbiBDb3ZlcmFnZUNsYXNzKGNsYXNzIExpc3Q8RkhJUi5Db3ZlcmFnZS5DbGFzcz4pOgogIGNsYXNzIGMKICByZXR1cm4gRkhJUi5Db3ZlcmFnZS5DbGFzc3sKICAgIHZhbHVlOiBjLnZhbHVlLAogICAgbmFtZTogYy5uYW1lCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIENvdmVyYWdlUmVzb3VyY2UoY292ZXJhZ2UgQ292ZXJhZ2UsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBjb3ZlcmFnZSBjCiAgcmV0dXJuIENvdmVyYWdlewogICAgaWQ6IEZISVIuaWR7dmFsdWU6ICdMQ1ItJyArIGMuaWR9LAogICAgbWV0YTogTWV0YUVsZW1lbnQoYywgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBjLmV4dGVuc2lvbiwKICAgIHN0YXR1czogYy5zdGF0dXMsCiAgICB0eXBlOiBjLnR5cGUsCiAgICBwb2xpY3lIb2xkZXI6IGMucG9saWN5SG9sZGVyLAogICAgc3Vic2NyaWJlcjogYy5zdWJzY3JpYmVyLAogICAgc3Vic2NyaWJlcklkOiBjLnN1YnNjcmliZXJJZCwKICAgIGJlbmVmaWNpYXJ5OiBjLmJlbmVmaWNpYXJ5LAogICAgZGVwZW5kZW50OiBjLmRlcGVuZGVudCwKICAgIHJlbGF0aW9uc2hpcDogYy5yZWxhdGlvbnNoaXAsCiAgICBwZXJpb2Q6IGMucGVyaW9kLAogICAgcGF5b3I6IGMucGF5b3IsCiAgICBjbGFzczogQ292ZXJhZ2VDbGFzcyhjLmNsYXNzKSwKICAgIG9yZGVyOiBjLm9yZGVyLAogICAgbmV0d29yazogYy5uZXR3b3JrLAogICAgc3Vicm9nYXRpb246IGMuc3Vicm9nYXRpb24sCiAgICBjb250cmFjdDogYy5jb250cmFjdAogIH0KCmRlZmluZSBmdW5jdGlvbiBEaWFnbm9zdGljUmVwb3J0Q29kaW5nKGNvZGluZyBMaXN0PENvZGluZz4pOgogIGNvZGluZyBjCiAgcmV0dXJuIENvZGluZ3sKICAgIHN5c3RlbTogYy5zeXN0ZW0sCiAgICB2ZXJzaW9uOiBjLnZlcnNpb24sCiAgICBjb2RlOiBjLmNvZGUsCiAgICBkaXNwbGF5OiBjLmRpc3BsYXksCiAgICB1c2VyU2VsZWN0ZWQ6IGMudXNlclNlbGVjdGVkCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIERpYWdub3N0aWNSZXBvcnRDYXRlZ29yeShjYXRlZ29yeSBMaXN0PENvZGVhYmxlQ29uY2VwdD4pOgogIGNhdGVnb3J5IGMKICByZXR1cm4gQ29kZWFibGVDb25jZXB0ewogICAgY29kaW5nOiBEaWFnbm9zdGljUmVwb3J0Q29kaW5nKGMuY29kaW5nKQogIH0KCmRlZmluZSBmdW5jdGlvbiBEaWFnbm9zdGljUmVwb3J0TGFiUmVzb3VyY2UoZGlhZ25vc3RpY1JlcG9ydCBEaWFnbm9zdGljUmVwb3J0LCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgZGlhZ25vc3RpY1JlcG9ydCBkCiAgcmV0dXJuIERpYWdub3N0aWNSZXBvcnR7CiAgICBpZDogRkhJUi5pZHt2YWx1ZTogJ0xDUi0nICsgZC5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChkLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IGQuZXh0ZW5zaW9uLAogICAgYmFzZWRPbjogZC5iYXNlZE9uLAogICAgc3RhdHVzOiBkLnN0YXR1cywKICAgIGNhdGVnb3J5OiBEaWFnbm9zdGljUmVwb3J0Q2F0ZWdvcnkoZC5jYXRlZ29yeSksCiAgICBjb2RlOiBkLmNvZGUsCiAgICBzdWJqZWN0OiBkLnN1YmplY3QsCiAgICBlbmNvdW50ZXI6IGQuZW5jb3VudGVyLAogICAgZWZmZWN0aXZlOiBkLmVmZmVjdGl2ZSwKICAgIGlzc3VlZDogZC5pc3N1ZWQsCiAgICAvLypwZXJmb3JtZXI6IGQucGVyZm9ybWVyLAogICAgcmVzdWx0c0ludGVycHJldGVyOiBkLnJlc3VsdHNJbnRlcnByZXRlciwKICAgIHNwZWNpbWVuOiBkLnNwZWNpbWVuLAogICAgcmVzdWx0OiBkLnJlc3VsdCwKICAgIGNvbmNsdXNpb246IGQuY29uY2x1c2lvbiwKICAgIGNvbmNsdXNpb25Db2RlOiBkLmNvbmNsdXNpb25Db2RlCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIEVuY291bnRlcklkZW50aWZpZXIoaWRlbnRpZmllciBMaXN0PEZISVIuSWRlbnRpZmllcj4pOgogIGlkZW50aWZpZXIgaQogIHJldHVybiBGSElSLklkZW50aWZpZXJ7CiAgICB1c2U6IGkudXNlLAogICAgdHlwZTogaS50eXBlLAogICAgc3lzdGVtOiBpLnN5c3RlbSwKICAgIHZhbHVlOiBpLnZhbHVlLAogICAgcGVyaW9kOiBpLnBlcmlvZAogIH0KCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJTdGF0dXNIaXN0b3J5KHN0YXR1c0hpc3RvcnkgTGlzdDxGSElSLkVuY291bnRlci5TdGF0dXNIaXN0b3J5Pik6CiAgc3RhdHVzSGlzdG9yeSBzSAogIHJldHVybiBGSElSLkVuY291bnRlci5TdGF0dXNIaXN0b3J5ewogICAgc3RhdHVzOiBzSC5zdGF0dXMsCiAgICBwZXJpb2Q6IHNILnBlcmlvZAogIH0KCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJDbGFzc0hpc3RvcnkoY2xhc3NIaXN0b3J5IExpc3Q8RkhJUi5FbmNvdW50ZXIuQ2xhc3NIaXN0b3J5Pik6CiAgY2xhc3NIaXN0b3J5IGNICiAgcmV0dXJuIEZISVIuRW5jb3VudGVyLkNsYXNzSGlzdG9yeXsKICAgIGNsYXNzOiBjSC5jbGFzcywKICAgIHBlcmlvZDogY0gucGVyaW9kCiAgfQoKLypObyBsb25nZXIgbmVlZGVkIGJ1dCBzYXZpbmcgZm9yIHBvdGVudGlhbCBmdXR1cmUgdXNlCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJQYXJ0aWNpcGFudChwYXJ0aWNpcGFudCBMaXN0PEZISVIuRW5jb3VudGVyLlBhcnRpY2lwYW50Pik6CiAgcGFydGljaXBhbnQgcAogIHJldHVybiBGSElSLkVuY291bnRlci5QYXJ0aWNpcGFudHsKICAgIHR5cGU6IHAudHlwZSwKICAgIHBlcmlvZDogcC5wZXJpb2QsCiAgICBpbmRpdmlkdWFsOiBwLmluZGl2aWR1YWwKICB9Ki8KCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJEaWFnbm9zaXMoZGlhZ25vc2lzIExpc3Q8RkhJUi5FbmNvdW50ZXIuRGlhZ25vc2lzPik6CiAgZGlhZ25vc2lzIGQKICByZXR1cm4gRkhJUi5FbmNvdW50ZXIuRGlhZ25vc2lzewogICAgY29uZGl0aW9uOiBkLmNvbmRpdGlvbiwKICAgIHVzZTogZC51c2UsCiAgICByYW5rOiBkLnJhbmsKICB9CgpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVySG9zcGl0YWxpemF0aW9uKGhvc3BpdGFsaXphdGlvbiBGSElSLkVuY291bnRlci5Ib3NwaXRhbGl6YXRpb24pOgogIGhvc3BpdGFsaXphdGlvbiBoCiAgcmV0dXJuIEZISVIuRW5jb3VudGVyLkhvc3BpdGFsaXphdGlvbnsKICAgIHByZUFkbWlzc2lvbklkZW50aWZpZXI6IGgucHJlQWRtaXNzaW9uSWRlbnRpZmllciwKICAgIG9yaWdpbjogaC5vcmlnaW4sCiAgICBhZG1pdFNvdXJjZTogaC5hZG1pdFNvdXJjZSwKICAgIHJlQWRtaXNzaW9uOiBoLnJlQWRtaXNzaW9uLAogICAgZGlldFByZWZlcmVuY2U6IGguZGlldFByZWZlcmVuY2UsCiAgICBzcGVjaWFsQ291cnRlc3k6IGguc3BlY2lhbENvdXJ0ZXN5LAogICAgc3BlY2lhbEFycmFuZ2VtZW50OiBoLnNwZWNpYWxBcnJhbmdlbWVudCwKICAgIGRlc3RpbmF0aW9uOiBoLmRlc3RpbmF0aW9uLAogICAgZGlzY2hhcmdlRGlzcG9zaXRpb246IGguZGlzY2hhcmdlRGlzcG9zaXRpb24KICB9CgpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyTG9jYXRpb24obG9jYXRpb24gTGlzdDxGSElSLkVuY291bnRlci5Mb2NhdGlvbj4pOgogIGxvY2F0aW9uIGwKICByZXR1cm4gRkhJUi5FbmNvdW50ZXIuTG9jYXRpb257CiAgICBsb2NhdGlvbjogbC5sb2NhdGlvbiwKICAgIHN0YXR1czogbC5zdGF0dXMsCiAgICBwaHlzaWNhbFR5cGU6IGwucGh5c2ljYWxUeXBlLAogICAgcGVyaW9kOiBsLnBlcmlvZAogIH0KCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJSZXNvdXJjZShlbmNvdW50ZXIgRW5jb3VudGVyLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgZW5jb3VudGVyIGUKICByZXR1cm4gRW5jb3VudGVyewogICAgaWQ6IEZISVIuaWR7dmFsdWU6ICdMQ1ItJyArIGUuaWR9LAogICAgbWV0YTogTWV0YUVsZW1lbnQoZSwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBlLmV4dGVuc2lvbiwKICAgIGlkZW50aWZpZXI6IEVuY291bnRlcklkZW50aWZpZXIoZS5pZGVudGlmaWVyKSwKICAgIHN0YXR1czogZS5zdGF0dXMsCiAgICBzdGF0dXNIaXN0b3J5OiBFbmNvdW50ZXJTdGF0dXNIaXN0b3J5KGUuc3RhdHVzSGlzdG9yeSksCiAgICBjbGFzczogZS5jbGFzcywKICAgIGNsYXNzSGlzdG9yeTogRW5jb3VudGVyQ2xhc3NIaXN0b3J5KGUuY2xhc3NIaXN0b3J5KSwKICAgIHR5cGU6IGUudHlwZSwKICAgIHNlcnZpY2VUeXBlOiBlLnNlcnZpY2VUeXBlLAogICAgcHJpb3JpdHk6IGUucHJpb3JpdHksCiAgICBzdWJqZWN0OiBlLnN1YmplY3QsCiAgICBwZXJpb2Q6IGUucGVyaW9kLAogICAgbGVuZ3RoOiBlLmxlbmd0aCwKICAgIHJlYXNvbkNvZGU6IGUucmVhc29uQ29kZSwKICAgIHJlYXNvblJlZmVyZW5jZTogZS5yZWFzb25SZWZlcmVuY2UsCiAgICBkaWFnbm9zaXM6IEVuY291bnRlckRpYWdub3NpcyhlLmRpYWdub3NpcyksCiAgICBhY2NvdW50OiBlLmFjY291bnQsCiAgICBob3NwaXRhbGl6YXRpb246IEVuY291bnRlckhvc3BpdGFsaXphdGlvbihlLmhvc3BpdGFsaXphdGlvbiksCiAgICBsb2NhdGlvbjogRW5jb3VudGVyTG9jYXRpb24oZS5sb2NhdGlvbiksCiAgICBwYXJ0T2Y6IGUucGFydE9mCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE9ic2VydmF0aW9uTGFiQ29kaW5nKGNvZGluZyBMaXN0PENvZGluZz4pOgogIGNvZGluZyBjCiAgcmV0dXJuIENvZGluZ3sKICAgIGlkOiBjLmlkLAogICAgZXh0ZW5zaW9uOiBjLmV4dGVuc2lvbiwKICAgIHN5c3RlbTogYy5zeXN0ZW0sCiAgICB2ZXJzaW9uOiBjLnZlcnNpb24sCiAgICBjb2RlOiBjLmNvZGUsCiAgICBkaXNwbGF5OiBjLmRpc3BsYXksCiAgICB1c2VyU2VsZWN0ZWQ6IGMudXNlclNlbGVjdGVkCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE9ic2VydmF0aW9uTGFiQ2F0ZWdvcnkoY2F0ZWdvcnkgTGlzdDxDb2RlYWJsZUNvbmNlcHQ+KToKICBjYXRlZ29yeSBjCiAgcmV0dXJuIENvZGVhYmxlQ29uY2VwdHsKICAgIGNvZGluZzogT2JzZXJ2YXRpb25MYWJDb2RpbmcoYy5jb2RpbmcpLAogICAgdGV4dDogYy50ZXh0CiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE9ic2VydmF0aW9uUmVmZXJlbmNlUmFuZ2UocmVmZXJlbmNlUmFuZ2UgTGlzdDxGSElSLk9ic2VydmF0aW9uLlJlZmVyZW5jZVJhbmdlPik6CiAgcmVmZXJlbmNlUmFuZ2UgclIKICByZXR1cm4gRkhJUi5PYnNlcnZhdGlvbi5SZWZlcmVuY2VSYW5nZXsKICAgIGxvdzogclIubG93LAogICAgaGlnaDogclIuaGlnaCwKICAgIHR5cGU6IHJSLnR5cGUsCiAgICBhcHBsaWVzVG86IHJSLmFwcGxpZXNUbywKICAgIGFnZTogclIuYWdlLAogICAgdGV4dDogclIudGV4dAogIH0KCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvbkNvbXBvbmVudChjb21wb25lbnQgTGlzdDxGSElSLk9ic2VydmF0aW9uLkNvbXBvbmVudD4pOgogIGNvbXBvbmVudCBjCiAgcmV0dXJuIEZISVIuT2JzZXJ2YXRpb24uQ29tcG9uZW50ewogICAgY29kZTogYy5jb2RlLAogICAgdmFsdWU6IGMudmFsdWUsCiAgICBkYXRhQWJzZW50UmVhc29uOiBjLmRhdGFBYnNlbnRSZWFzb24sCiAgICBpbnRlcnByZXRhdGlvbjogYy5pbnRlcnByZXRhdGlvbiwKICAgIHJlZmVyZW5jZVJhbmdlOiBjLnJlZmVyZW5jZVJhbmdlCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE9ic2VydmF0aW9uTGFiUmVzb3VyY2Uob2JzZXJ2YXRpb24gT2JzZXJ2YXRpb24sIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBvYnNlcnZhdGlvbiBvCiAgcmV0dXJuIE9ic2VydmF0aW9uewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBvLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KG8sIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogby5leHRlbnNpb24sCiAgICBiYXNlZE9uOiBvLmJhc2VkT24sCiAgICBwYXJ0T2Y6IG8ucGFydE9mLAogICAgc3RhdHVzOiBvLnN0YXR1cywKICAgIGNhdGVnb3J5OiBPYnNlcnZhdGlvbkxhYkNhdGVnb3J5KG8uY2F0ZWdvcnkpLAogICAgY29kZTogby5jb2RlLAogICAgc3ViamVjdDogby5zdWJqZWN0LAogICAgZm9jdXM6IG8uZm9jdXMsCiAgICBlbmNvdW50ZXI6IG8uZW5jb3VudGVyLAogICAgZWZmZWN0aXZlOiBvLmVmZmVjdGl2ZSwKICAgIGlzc3VlZDogby5pc3N1ZWQsCiAgICAvLypwZXJmb3JtZXI6IG8ucGVyZm9ybWVyLAogICAgdmFsdWU6IG8udmFsdWUsCiAgICBkYXRhQWJzZW50UmVhc29uOiBvLmRhdGFBYnNlbnRSZWFzb24sCiAgICBpbnRlcnByZXRhdGlvbjogby5pbnRlcnByZXRhdGlvbiwKICAgIG5vdGU6IG8ubm90ZSwKICAgIGJvZHlTaXRlOiBvLmJvZHlTaXRlLAogICAgbWV0aG9kOiBvLm1ldGhvZCwKICAgIHNwZWNpbWVuOiBvLnNwZWNpbWVuLAogICAgZGV2aWNlOiBvLmRldmljZSwKICAgIHJlZmVyZW5jZVJhbmdlOiBPYnNlcnZhdGlvblJlZmVyZW5jZVJhbmdlKG8ucmVmZXJlbmNlUmFuZ2UpLAogICAgaGFzTWVtYmVyOiBvLmhhc01lbWJlciwKICAgIGRlcml2ZWRGcm9tOiBvLmRlcml2ZWRGcm9tLAogICAgY29tcG9uZW50OiBPYnNlcnZhdGlvbkNvbXBvbmVudChvLmNvbXBvbmVudCkKICB9CgpkZWZpbmUgZnVuY3Rpb24gTG9jYXRpb25BZGRyZXNzKGFkZHJlc3MgRkhJUi5BZGRyZXNzKToKICBhZGRyZXNzIGEKICByZXR1cm4gRkhJUi5BZGRyZXNzewogICAgdXNlOiBhLnVzZSwKICAgIHR5cGU6IGEudHlwZSwKICAgIHRleHQ6IGEudGV4dCwKICAgIGxpbmU6IGEubGluZSwKICAgIGNpdHk6IGEuY2l0eSwKICAgIGRpc3RyaWN0OiBhLmRpc3RyaWN0LAogICAgc3RhdGU6IGEuc3RhdGUsCiAgICBwb3N0YWxDb2RlOiBhLnBvc3RhbENvZGUsCiAgICBjb3VudHJ5OiBhLmNvdW50cnksCiAgICBwZXJpb2Q6IGEucGVyaW9kCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIExvY2F0aW9uUG9zaXRpb24ocG9zaXRpb24gRkhJUi5Mb2NhdGlvbi5Qb3NpdGlvbik6CiAgcG9zaXRpb24gcAogIHJldHVybiBGSElSLkxvY2F0aW9uLlBvc2l0aW9uewogICAgbG9uZ2l0dWRlOiBwLmxvbmdpdHVkZSwKICAgIGxhdGl0dWRlOiBwLmxhdGl0dWRlLAogICAgYWx0aXR1ZGU6IHAuYWx0aXR1ZGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gTG9jYXRpb25Ib3Vyc09mT3BlcmF0aW9uKGhvdXJzT2ZPcGVyYXRpb24gTGlzdDxGSElSLkxvY2F0aW9uLkhvdXJzT2ZPcGVyYXRpb24+KToKICBob3Vyc09mT3BlcmF0aW9uIGhPTwogIHJldHVybiBGSElSLkxvY2F0aW9uLkhvdXJzT2ZPcGVyYXRpb257CiAgICBkYXlzT2ZXZWVrOiBoT08uZGF5c09mV2VlaywKICAgIGFsbERheTogaE9PLmFsbERheSwKICAgIG9wZW5pbmdUaW1lOiBoT08ub3BlbmluZ1RpbWUsCiAgICBjbG9zaW5nVGltZTogaE9PLmNsb3NpbmdUaW1lCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIExvY2F0aW9uUmVzb3VyY2UobG9jYXRpb24gTG9jYXRpb24sIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBsb2NhdGlvbiBsCiAgcmV0dXJuIExvY2F0aW9uewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBsLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KGwsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogbC5leHRlbnNpb24sCiAgICBzdGF0dXM6IGwuc3RhdHVzLAogICAgb3BlcmF0aW9uYWxTdGF0dXM6IGwub3BlcmF0aW9uYWxTdGF0dXMsCiAgICBuYW1lOiBsLm5hbWUsCiAgICBhbGlhczogbC5hbGlhcywKICAgIGRlc2NyaXB0aW9uOiBsLmRlc2NyaXB0aW9uLAogICAgbW9kZTogbC5tb2RlLAogICAgdHlwZTogbC50eXBlLAogICAgdGVsZWNvbTogbC50ZWxlY29tLAogICAgYWRkcmVzczogTG9jYXRpb25BZGRyZXNzKGwuYWRkcmVzcyksCiAgICBwaHlzaWNhbFR5cGU6IGwucGh5c2ljYWxUeXBlLAogICAgcG9zaXRpb246IExvY2F0aW9uUG9zaXRpb24obC5wb3NpdGlvbiksCiAgICBtYW5hZ2luZ09yZ2FuaXphdGlvbjogbC5tYW5hZ2luZ09yZ2FuaXphdGlvbiwKICAgIHBhcnRPZjogbC5wYXJ0T2YsCiAgICBob3Vyc09mT3BlcmF0aW9uOiBMb2NhdGlvbkhvdXJzT2ZPcGVyYXRpb24obC5ob3Vyc09mT3BlcmF0aW9uKSwKICAgIGF2YWlsYWJpbGl0eUV4Y2VwdGlvbnM6IGwuYXZhaWxhYmlsaXR5RXhjZXB0aW9ucywKICAgIGVuZHBvaW50OiBsLmVuZHBvaW50CiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25JbmdyZWRpZW50KGluZ3JlZGllbnQgTGlzdDxGSElSLk1lZGljYXRpb24uSW5ncmVkaWVudD4pOgogIGluZ3JlZGllbnQgaQogIHJldHVybiBGSElSLk1lZGljYXRpb24uSW5ncmVkaWVudHsKICAgIGl0ZW06IGkuaXRlbSwKICAgIHN0cmVuZ3RoOiBpLnN0cmVuZ3RoCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25CYXRjaChiYXRjaCBGSElSLk1lZGljYXRpb24uQmF0Y2gpOgogIGJhdGNoIGIKICByZXR1cm4gRkhJUi5NZWRpY2F0aW9uLkJhdGNoewogICAgbG90TnVtYmVyOiBiLmxvdE51bWJlciwKICAgIGV4cGlyYXRpb25EYXRlOiBiLmV4cGlyYXRpb25EYXRlCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25SZXNvdXJjZShtZWRpY2F0aW9uIE1lZGljYXRpb24sIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBtZWRpY2F0aW9uIG0KICByZXR1cm4gTWVkaWNhdGlvbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgbS5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChtLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IG0uZXh0ZW5zaW9uLAogICAgY29kZTogbS5jb2RlLAogICAgc3RhdHVzOiBtLnN0YXR1cywKICAgIG1hbnVmYWN0dXJlcjogbS5tYW51ZmFjdHVyZXIsCiAgICBmb3JtOiBtLmZvcm0sCiAgICBhbW91bnQ6IG0uYW1vdW50LAogICAgaW5ncmVkaWVudDogTWVkaWNhdGlvbkluZ3JlZGllbnQobS5pbmdyZWRpZW50KSwKICAgIGJhdGNoOiBNZWRpY2F0aW9uQmF0Y2gobS5iYXRjaCkKICB9CgpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uUGVyZm9ybWVyKHBlcmZvcm1lciBMaXN0PEZISVIuTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uLlBlcmZvcm1lcj4pOgogIHBlcmZvcm1lciBwCiAgcmV0dXJuIEZISVIuTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uLlBlcmZvcm1lcnsKICAgIGZ1bmN0aW9uOiBwLmZ1bmN0aW9uLAogICAgYWN0b3I6IHAuYWN0b3IKICB9CgpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uRG9zYWdlKGRvc2FnZSBGSElSLk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbi5Eb3NhZ2UpOgogIGRvc2FnZSBkCiAgcmV0dXJuIEZISVIuTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uLkRvc2FnZXsKICAgIHRleHQ6IGQudGV4dCwKICAgIHNpdGU6IGQuc2l0ZSwKICAgIHJvdXRlOiBkLnJvdXRlLAogICAgbWV0aG9kOiBkLm1ldGhvZCwKICAgIGRvc2U6IGQuZG9zZSwKICAgIHJhdGU6IGQucmF0ZQogIH0KCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25SZXNvdXJjZShtZWRpY2F0aW9uQWRtaW5pc3RyYXRpb24gTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgbWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uIG0KICByZXR1cm4gTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBtLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KG0sIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogbS5leHRlbnNpb24sCiAgICBpbnN0YW50aWF0ZXM6IG0uaW5zdGFudGlhdGVzLAogICAgcGFydE9mOiBtLnBhcnRPZiwKICAgIHN0YXR1czogbS5zdGF0dXMsCiAgICBzdGF0dXNSZWFzb246IG0uc3RhdHVzUmVhc29uLAogICAgY2F0ZWdvcnk6IG0uY2F0ZWdvcnksCiAgICBtZWRpY2F0aW9uOiBtLm1lZGljYXRpb24sCiAgICBzdWJqZWN0OiBtLnN1YmplY3QsCiAgICBjb250ZXh0OiBtLmNvbnRleHQsCiAgICBzdXBwb3J0aW5nSW5mb3JtYXRpb246IG0uc3VwcG9ydGluZ0luZm9ybWF0aW9uLAogICAgZWZmZWN0aXZlOiBtLmVmZmVjdGl2ZSwKICAgIC8vKnBlcmZvcm1lcjogTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uUGVyZm9ybWVyKG0ucGVyZm9ybWVyKSwKICAgIHJlYXNvbkNvZGU6IG0ucmVhc29uQ29kZSwKICAgIHJlYXNvblJlZmVyZW5jZTogbS5yZWFzb25SZWZlcmVuY2UsCiAgICByZXF1ZXN0OiBtLnJlcXVlc3QsCiAgICBkZXZpY2U6IG0uZGV2aWNlLAogICAgbm90ZTogbS5ub3RlLAogICAgZG9zYWdlOiBNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25Eb3NhZ2UobS5kb3NhZ2UpLAogICAgZXZlbnRIaXN0b3J5OiBtLmV2ZW50SGlzdG9yeQogIH0KCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uUmVxdWVzdERvc2VBbmRSYXRlKGRvc2VBbmRSYXRlIExpc3Q8RkhJUi5Eb3NhZ2UuRG9zZUFuZFJhdGU+KToKICBkb3NlQW5kUmF0ZSBkUgogIHJldHVybiBGSElSLkRvc2FnZS5Eb3NlQW5kUmF0ZXsKICAgIHR5cGU6IGRSLnR5cGUsCiAgICBkb3NlOiBkUi5kb3NlLAogICAgcmF0ZTogZFIucmF0ZQogIH0KCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uUmVxdWVzdERvc2FnZUluc3RydWN0aW9uKGRvc2FnZUluc3RydWN0aW9uIExpc3Q8RkhJUi5Eb3NhZ2U+KToKICBkb3NhZ2VJbnN0cnVjdGlvbiBkSQogIHJldHVybiBGSElSLkRvc2FnZXsKICAgIHRleHQ6IGRJLnRleHQsCiAgICBwYXRpZW50SW5zdHJ1Y3Rpb246IGRJLnBhdGllbnRJbnN0cnVjdGlvbiwKICAgIHRpbWluZzogZEkudGltaW5nLAogICAgYXNOZWVkZWQ6IGRJLmFzTmVlZGVkLAogICAgc2l0ZTogZEkuc2l0ZSwKICAgIHJvdXRlOiBkSS5yb3V0ZSwKICAgIG1ldGhvZDogZEkubWV0aG9kLAogICAgZG9zZUFuZFJhdGU6IE1lZGljYXRpb25SZXF1ZXN0RG9zZUFuZFJhdGUoZEkuZG9zZUFuZFJhdGUpCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25SZXF1ZXN0UmVzb3VyY2UobWVkaWNhdGlvblJlcXVlc3QgTWVkaWNhdGlvblJlcXVlc3QsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBtZWRpY2F0aW9uUmVxdWVzdCBtCiAgcmV0dXJuIE1lZGljYXRpb25SZXF1ZXN0ewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBtLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KG1lZGljYXRpb25SZXF1ZXN0LCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IG0uZXh0ZW5zaW9uLAogICAgc3RhdHVzOiBtLnN0YXR1cywKICAgIHN0YXR1c1JlYXNvbjogbS5zdGF0dXNSZWFzb24sCiAgICBpbnRlbnQ6IG0uaW50ZW50LAogICAgY2F0ZWdvcnk6IG0uY2F0ZWdvcnksCiAgICBwcmlvcml0eTogbS5wcmlvcml0eSwKICAgIGRvTm90UGVyZm9ybTogbS5kb05vdFBlcmZvcm0sCiAgICByZXBvcnRlZDogbS5yZXBvcnRlZCwKICAgIG1lZGljYXRpb246IG0ubWVkaWNhdGlvbiwKICAgIHN1YmplY3Q6IG0uc3ViamVjdCwKICAgIGVuY291bnRlcjogbS5lbmNvdW50ZXIsCiAgICBhdXRob3JlZE9uOiBtLmF1dGhvcmVkT24sCiAgICAvLypyZXF1ZXN0ZXI6IG0ucmVxdWVzdGVyLAogICAgcmVjb3JkZXI6IG0ucmVjb3JkZXIsCiAgICByZWFzb25Db2RlOiBtLnJlYXNvbkNvZGUsCiAgICByZWFzb25SZWZlcmVuY2U6IG0ucmVhc29uUmVmZXJlbmNlLAogICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBtLmluc3RhbnRpYXRlc0Nhbm9uaWNhbCwKICAgIGluc3RhbnRpYXRlc1VyaTogbS5pbnN0YW50aWF0ZXNVcmksCiAgICBjb3Vyc2VPZlRoZXJhcHlUeXBlOiBtLmNvdXJzZU9mVGhlcmFweVR5cGUsCiAgICBkb3NhZ2VJbnN0cnVjdGlvbjogTWVkaWNhdGlvblJlcXVlc3REb3NhZ2VJbnN0cnVjdGlvbihtLmRvc2FnZUluc3RydWN0aW9uKQogIH0KCi8qIE5vIGxvbmdlciBuZWVkZWQgYnV0IHNhdmluZyBpbiBjYXNlIGl0J3MgdXNlZnVsIGxhdGVyCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50SWRlbnRpZmllcihpZGVudGlmaWVyIExpc3Q8RkhJUi5JZGVudGlmaWVyPik6CiAgaWRlbnRpZmllciBpCiAgcmV0dXJuIEZISVIuSWRlbnRpZmllcnsKICAgIGlkOiBpLmlkLAogICAgZXh0ZW5zaW9uOiBpLmV4dGVuc2lvbiwKICAgIHVzZTogaS51c2UsCiAgICB0eXBlOiBpLnR5cGUsCiAgICBzeXN0ZW06IGkuc3lzdGVtLAogICAgdmFsdWU6IGkudmFsdWUsCiAgICBwZXJpb2Q6IGkucGVyaW9kLAogICAgYXNzaWduZXI6IGkuYXNzaWduZXIKICB9Ki8KCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50TmFtZShuYW1lIExpc3Q8RkhJUi5IdW1hbk5hbWU+KToKICBuYW1lIG4KICByZXR1cm4gRkhJUi5IdW1hbk5hbWV7CiAgICBpZDogbi5pZCwKICAgIGV4dGVuc2lvbjogbi5leHRlbnNpb24sCiAgICB1c2U6IG4udXNlLAogICAgdGV4dDogbi50ZXh0LAogICAgZmFtaWx5OiBuLmZhbWlseSwKICAgIGdpdmVuOiBuLmdpdmVuLAogICAgcHJlZml4OiBuLnByZWZpeCwKICAgIHN1ZmZpeDogbi5zdWZmaXgsCiAgICBwZXJpb2Q6IG4ucGVyaW9kCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFBhdGllbnRUZWxlY29tKHRlbGVjb20gTGlzdDxGSElSLkNvbnRhY3RQb2ludD4pOgogIHRlbGVjb20gdAogIHJldHVybiBGSElSLkNvbnRhY3RQb2ludHsKICAgIHN5c3RlbTogdC5zeXN0ZW0sCiAgICB2YWx1ZTogdC52YWx1ZSwKICAgIHVzZTogdC51c2UsCiAgICByYW5rOiB0LnJhbmssCiAgICBwZXJpb2Q6IHQucGVyaW9kCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFBhdGllbnRBZGRyZXNzKGFkZHJlc3MgTGlzdDxGSElSLkFkZHJlc3M+KToKICBhZGRyZXNzIGEKICByZXR1cm4gRkhJUi5BZGRyZXNzewogICAgdXNlOiBhLnVzZSwKICAgIHR5cGU6IGEudHlwZSwKICAgIHRleHQ6IGEudGV4dCwKICAgIGxpbmU6IGEubGluZSwKICAgIGNpdHk6IGEuY2l0eSwKICAgIGRpc3RyaWN0OiBhLmRpc3RyaWN0LAogICAgc3RhdGU6IGEuc3RhdGUsCiAgICBwb3N0YWxDb2RlOiBhLnBvc3RhbENvZGUsCiAgICBjb3VudHJ5OiBhLmNvdW50cnksCiAgICBwZXJpb2Q6IGEucGVyaW9kCiAgfQoKLypObyBsb25nZXIgbmVlZGVkIGJ1dCBzYXZpbmcgaW4gY2FzZSBpdCdzIHVzZWZ1bCBsYXRlcgpkZWZpbmUgZnVuY3Rpb24gUGF0aWVudENvbnRhY3QoY29udGFjdCBMaXN0PEZISVIuUGF0aWVudC5Db250YWN0Pik6CiAgY29udGFjdCBjCiAgcmV0dXJuIEZISVIuUGF0aWVudC5Db250YWN0ewogICAgcmVsYXRpb25zaGlwOiBjLnJlbGF0aW9uc2hpcCwKICAgIG5hbWU6IGMubmFtZSwKICAgIHRlbGVjb206IGMudGVsZWNvbSwKICAgIGFkZHJlc3M6IGMuYWRkcmVzcywKICAgIGdlbmRlcjogYy5nZW5kZXIsCiAgICBvcmdhbml6YXRpb246IGMub3JnYW5pemF0aW9uLAogICAgcGVyaW9kOiBjLnBlcmlvZAogIH0qLwoKLypObyBsb25nZXIgbmVlZGVkIGJ1dCBzYXZpbmcgaW4gY2FzZSBpdCdzIHVzZWZ1bCBsYXRlcgpkZWZpbmUgZnVuY3Rpb24gUGF0aWVudENvbW11bmljYXRpb24oY29tbXVuaWNhdGlvbiBMaXN0PEZISVIuUGF0aWVudC5Db21tdW5pY2F0aW9uPik6CiAgY29tbXVuaWNhdGlvbiBjCiAgcmV0dXJuIEZISVIuUGF0aWVudC5Db21tdW5pY2F0aW9uewogICAgbGFuZ3VhZ2U6IGMubGFuZ3VhZ2UsCiAgICBwcmVmZXJyZWQ6IGMucHJlZmVycmVkCiAgfSovCgpkZWZpbmUgZnVuY3Rpb24gUGF0aWVudExpbmsobGluayBMaXN0PEZISVIuUGF0aWVudC5MaW5rPik6CiAgbGluayBsCiAgcmV0dXJuIEZISVIuUGF0aWVudC5MaW5rewogICAgZXh0ZW5zaW9uOiBsLmV4dGVuc2lvbiwKICAgIG1vZGlmaWVyRXh0ZW5zaW9uOiBsLm1vZGlmaWVyRXh0ZW5zaW9uLAogICAgb3RoZXI6IGwub3RoZXIsCiAgICB0eXBlOiBsLnR5cGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gUGF0aWVudFJlc291cmNlKHBhdGllbnQgUGF0aWVudCwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIHBhdGllbnQgcAogIHJldHVybiBQYXRpZW50ewogICAgaWQ6IEZISVIuaWR7dmFsdWU6ICdMQ1ItJyArIHAuaWR9LAogICAgbWV0YTogTWV0YUVsZW1lbnQocCwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBHZXRQYXRpZW50RXh0ZW5zaW9ucyhwKSwKICAgIGlkZW50aWZpZXI6IHAuaWRlbnRpZmllciwKICAgIGFjdGl2ZTogcC5hY3RpdmUsCiAgICBuYW1lOiBQYXRpZW50TmFtZShwLm5hbWUpLAogICAgdGVsZWNvbTogUGF0aWVudFRlbGVjb20ocC50ZWxlY29tKSwKICAgIGdlbmRlcjogcC5nZW5kZXIsCiAgICBiaXJ0aERhdGU6IHAuYmlydGhEYXRlLAogICAgZGVjZWFzZWQ6IHAuZGVjZWFzZWQsCiAgICBhZGRyZXNzOiBQYXRpZW50QWRkcmVzcyhwLmFkZHJlc3MpLAogICAgbWFyaXRhbFN0YXR1czogcC5tYXJpdGFsU3RhdHVzLAogICAgbXVsdGlwbGVCaXJ0aDogcC5tdWx0aXBsZUJpcnRoLAogICAgLypjb250YWN0OiBQYXRpZW50Q29udGFjdChwLmNvbnRhY3QpLAogICAgY29tbXVuaWNhdGlvbjogUGF0aWVudENvbW11bmljYXRpb24ocC5jb21tdW5pY2F0aW9uKSwqLwogICAgbGluazogUGF0aWVudExpbmsocC5saW5rKQogIH0KCmRlZmluZSBmdW5jdGlvbiBQcm9jZWR1cmVQZXJmb3JtZXIocGVyZm9ybWVyIExpc3Q8RkhJUi5Qcm9jZWR1cmUuUGVyZm9ybWVyPik6CiAgcGVyZm9ybWVyIHAKICByZXR1cm4gRkhJUi5Qcm9jZWR1cmUuUGVyZm9ybWVyewogICAgZnVuY3Rpb246IHAuZnVuY3Rpb24sCiAgICBhY3RvcjogcC5hY3RvciwKICAgIG9uQmVoYWxmT2Y6IHAub25CZWhhbGZPZgogIH0KCmRlZmluZSBmdW5jdGlvbiBQcm9jZWR1cmVGb2NhbERldmljZShkZXZpY2UgTGlzdDxGSElSLlByb2NlZHVyZS5Gb2NhbERldmljZT4pOgogIGRldmljZSBkCiAgcmV0dXJuIEZISVIuUHJvY2VkdXJlLkZvY2FsRGV2aWNlewogICAgYWN0aW9uOiBkLmFjdGlvbiwKICAgIG1hbmlwdWxhdGVkOiBkLm1hbmlwdWxhdGVkCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFByb2NlZHVyZVJlc291cmNlKHByb2NlZHVyZSBQcm9jZWR1cmUsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBwcm9jZWR1cmUgcAogIHJldHVybiBQcm9jZWR1cmV7CiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIHAuaWR9LAogICAgbWV0YTogTWV0YUVsZW1lbnQocCwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBwLmV4dGVuc2lvbiwKICAgIGluc3RhbnRpYXRlc0Nhbm9uaWNhbDogcC5pbnN0YW50aWF0ZXNDYW5vbmljYWwsCiAgICBpbnN0YW50aWF0ZXNVcmk6IHAuaW5zdGFudGlhdGVzVXJpLAogICAgYmFzZWRPbjogcC5iYXNlZE9uLAogICAgcGFydE9mOiBwLnBhcnRPZiwKICAgIHN0YXR1czogcC5zdGF0dXMsCiAgICBzdGF0dXNSZWFzb246IHAuc3RhdHVzUmVhc29uLAogICAgY2F0ZWdvcnk6IHAuY2F0ZWdvcnksCiAgICBjb2RlOiBwLmNvZGUsCiAgICBzdWJqZWN0OiBwLnN1YmplY3QsCiAgICBlbmNvdW50ZXI6IHAuZW5jb3VudGVyLAogICAgcGVyZm9ybWVkOiBwLnBlcmZvcm1lZCwKICAgIHJlY29yZGVyOiBwLnJlY29yZGVyLAogICAgYXNzZXJ0ZXI6IHAuYXNzZXJ0ZXIsCiAgICAvLypwZXJmb3JtZXI6IFByb2NlZHVyZVBlcmZvcm1lcihwLnBlcmZvcm1lciksCiAgICBsb2NhdGlvbjogcC5sb2NhdGlvbiwKICAgIHJlYXNvbkNvZGU6IHAucmVhc29uQ29kZSwKICAgIHJlYXNvblJlZmVyZW5jZTogcC5yZWFzb25SZWZlcmVuY2UsCiAgICBib2R5U2l0ZTogcC5ib2R5U2l0ZSwKICAgIG91dGNvbWU6IHAub3V0Y29tZSwKICAgIHJlcG9ydDogcC5yZXBvcnQsCiAgICBjb21wbGljYXRpb246IHAuY29tcGxpY2F0aW9uLAogICAgY29tcGxpY2F0aW9uRGV0YWlsOiBwLmNvbXBsaWNhdGlvbkRldGFpbCwKICAgIGZvbGxvd1VwOiBwLmZvbGxvd1VwLAogICAgbm90ZTogcC5ub3RlLAogICAgZm9jYWxEZXZpY2U6IFByb2NlZHVyZUZvY2FsRGV2aWNlKHAuZm9jYWxEZXZpY2UpLAogICAgdXNlZFJlZmVyZW5jZTogcC51c2VkUmVmZXJlbmNlLAogICAgdXNlZENvZGU6IHAudXNlZENvZGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gU2VydmljZVJlcXVlc3RSZXNvdXJjZShzZXJ2aWNlUmVxdWVzdCBTZXJ2aWNlUmVxdWVzdCwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIHNlcnZpY2VSZXF1ZXN0IHNSCiAgcmV0dXJuIFNlcnZpY2VSZXF1ZXN0ewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBzUi5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChzUiwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBzUi5leHRlbnNpb24sCiAgICBpbnN0YW50aWF0ZXNDYW5vbmljYWw6IHNSLmluc3RhbnRpYXRlc0Nhbm9uaWNhbCwKICAgIGluc3RhbnRpYXRlc1VyaTogc1IuaW5zdGFudGlhdGVzVXJpLAogICAgYmFzZWRPbjogc1IuYmFzZWRPbiwKICAgIHJlcGxhY2VzOiBzUi5yZXBsYWNlcywKICAgIHJlcXVpc2l0aW9uOiBzUi5yZXF1aXNpdGlvbiwKICAgIHN0YXR1czogc1Iuc3RhdHVzLAogICAgaW50ZW50OiBzUi5pbnRlbnQsCiAgICBjYXRlZ29yeTogc1IuY2F0ZWdvcnksCiAgICBwcmlvcml0eTogc1IucHJpb3JpdHksCiAgICBkb05vdFBlcmZvcm06IHNSLmRvTm90UGVyZm9ybSwKICAgIGNvZGU6IHNSLmNvZGUsCiAgICBvcmRlckRldGFpbDogc1Iub3JkZXJEZXRhaWwsCiAgICBxdWFudGl0eTogc1IucXVhbnRpdHksCiAgICBzdWJqZWN0OiBzUi5zdWJqZWN0LAogICAgZW5jb3VudGVyOiBzUi5lbmNvdW50ZXIsCiAgICBvY2N1cnJlbmNlOiBzUi5vY2N1cnJlbmNlLAogICAgYXNOZWVkZWQ6IHNSLmFzTmVlZGVkLAogICAgYXV0aG9yZWRPbjogc1IuYXV0aG9yZWRPbiwKICAgIHJlcXVlc3Rlcjogc1IucmVxdWVzdGVyLAogICAgLy8qcGVyZm9ybWVyVHlwZTogc1IucGVyZm9ybWVyVHlwZSwKICAgIC8vKnBlcmZvcm1lcjogc1IucGVyZm9ybWVyLAogICAgbG9jYXRpb25Db2RlOiBzUi5sb2NhdGlvbkNvZGUsCiAgICBsb2NhdGlvblJlZmVyZW5jZTogc1IubG9jYXRpb25SZWZlcmVuY2UsCiAgICByZWFzb25Db2RlOiBzUi5yZWFzb25Db2RlLAogICAgcmVhc29uUmVmZXJlbmNlOiBzUi5yZWFzb25SZWZlcmVuY2UsCiAgICBpbnN1cmFuY2U6IHNSLmluc3VyYW5jZSwKICAgIHN1cHBvcnRpbmdJbmZvOiBzUi5zdXBwb3J0aW5nSW5mbywKICAgIHNwZWNpbWVuOiBzUi5zcGVjaW1lbiwKICAgIGJvZHlTaXRlOiBzUi5ib2R5U2l0ZSwKICAgIG5vdGU6IHNSLm5vdGUsCiAgICBwYXRpZW50SW5zdHJ1Y3Rpb246IHNSLnBhdGllbnRJbnN0cnVjdGlvbiwKICAgIHJlbGV2YW50SGlzdG9yeTogc1IucmVsZXZhbnRIaXN0b3J5CiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFNwZWNpbWVuQ29sbGVjdGlvbihjb2xsZWN0aW9uIEZISVIuU3BlY2ltZW4uQ29sbGVjdGlvbik6CiAgY29sbGVjdGlvbiBjCiAgcmV0dXJuIEZISVIuU3BlY2ltZW4uQ29sbGVjdGlvbnsKICAgIGNvbGxlY3RvcjogYy5jb2xsZWN0b3IsCiAgICBjb2xsZWN0ZWQ6IGMuY29sbGVjdGVkLAogICAgImR1cmF0aW9uIjogYy4iZHVyYXRpb24iLAogICAgcXVhbnRpdHk6IGMucXVhbnRpdHksCiAgICBtZXRob2Q6IGMubWV0aG9kLAogICAgYm9keVNpdGU6IGMuYm9keVNpdGUsCiAgICBmYXN0aW5nU3RhdHVzOiBjLmZhc3RpbmdTdGF0dXMKICB9CgpkZWZpbmUgZnVuY3Rpb24gU3BlY2ltZW5Qcm9jZXNzaW5nKHByb2Nlc3NpbmcgTGlzdDxGSElSLlNwZWNpbWVuLlByb2Nlc3Npbmc+KToKICBwcm9jZXNzaW5nIHAKICByZXR1cm4gRkhJUi5TcGVjaW1lbi5Qcm9jZXNzaW5newogICAgZGVzY3JpcHRpb246IHAuZGVzY3JpcHRpb24sCiAgICBwcm9jZWR1cmU6IHAucHJvY2VkdXJlLAogICAgYWRkaXRpdmU6IHAuYWRkaXRpdmUsCiAgICB0aW1lOiBwLnRpbWUKICB9CgpkZWZpbmUgZnVuY3Rpb24gU3BlY2ltZW5Db250YWluZXIoY29udGFpbmVyIExpc3Q8RkhJUi5TcGVjaW1lbi5Db250YWluZXI+KToKICBjb250YWluZXIgYwogIHJldHVybiBGSElSLlNwZWNpbWVuLkNvbnRhaW5lcnsKICAgIGRlc2NyaXB0aW9uOiBjLmRlc2NyaXB0aW9uLAogICAgdHlwZTogYy50eXBlLAogICAgY2FwYWNpdHk6IGMuY2FwYWNpdHksCiAgICBzcGVjaW1lblF1YW50aXR5OiBjLnNwZWNpbWVuUXVhbnRpdHksCiAgICBhZGRpdGl2ZTogYy5hZGRpdGl2ZQogIH0KCmRlZmluZSBmdW5jdGlvbiBTcGVjaW1lblJlc291cmNlKHNwZWNpbWVuIFNwZWNpbWVuLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgc3BlY2ltZW4gcwogIHJldHVybiBTcGVjaW1lbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgcy5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChzLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IHMuZXh0ZW5zaW9uLAogICAgaWRlbnRpZmllcjogcy5pZGVudGlmaWVyLAogICAgYWNjZXNzaW9uSWRlbnRpZmllcjogcy5hY2Nlc3Npb25JZGVudGlmaWVyLAogICAgc3RhdHVzOiBzLnN0YXR1cywKICAgIHR5cGU6IHMudHlwZSwKICAgIHN1YmplY3Q6IHMuc3ViamVjdCwKICAgIHJlY2VpdmVkVGltZTogcy5yZWNlaXZlZFRpbWUsCiAgICBwYXJlbnQ6IHMucGFyZW50LAogICAgcmVxdWVzdDogcy5yZXF1ZXN0LAogICAgY29sbGVjdGlvbjogU3BlY2ltZW5Db2xsZWN0aW9uKHMuY29sbGVjdGlvbiksCiAgICBwcm9jZXNzaW5nOiBTcGVjaW1lblByb2Nlc3Npbmcocy5wcm9jZXNzaW5nKSwKICAgIGNvbnRhaW5lcjogU3BlY2ltZW5Db250YWluZXIocy5jb250YWluZXIpLAogICAgY29uZGl0aW9uOiBzLmNvbmRpdGlvbiwKICAgIG5vdGU6IHMubm90ZQogIH0KCmRlZmluZSBmdW5jdGlvbiAiT3BlcmF0aW9uT3V0Y29tZVJlc291cmNlIihlcnJvcklkIFN0cmluZywgcmVzb3VyY2VJZCBGSElSLmlkLCBtZXNzYWdlIFN0cmluZyk6CiAgT3BlcmF0aW9uT3V0Y29tZXsKICAgICAgaWQ6IEZISVIuaWR7dmFsdWU6IGVycm9ySWR9LAogICAgICBpc3N1ZTogewogICAgICAgICAgRkhJUi5PcGVyYXRpb25PdXRjb21lLklzc3VlewogICAgICAgICAgc2V2ZXJpdHk6IEZISVIuSXNzdWVTZXZlcml0eXt2YWx1ZTogJ2Vycm9yJ30sCiAgICAgICAgICBjb2RlOiBGSElSLklzc3VlVHlwZXt2YWx1ZTogJ2V4Y2VwdGlvbid9LAogICAgICAgICAgZGV0YWlsczogCiAgICAgICAgICAgICAgRkhJUi5Db2RlYWJsZUNvbmNlcHR7CiAgICAgICAgICAgICAgICAgIGNvZGluZzogewogICAgICAgICAgICAgICAgICAgICAgQ29kaW5newogICAgICAgICAgICAgICAgICAgICAgc3lzdGVtOiB1cml7dmFsdWU6ICdodHRwczovL2xhbnRhbmFncm91cC5jb20vdmFsaWRhdGlvbi1lcnJvcid9LAogICAgICAgICAgICAgICAgICAgICAgY29kZTogY29kZXt2YWx1ZTogJ0Vycm9yJ30sCiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBzdHJpbmd7dmFsdWU6ICdSZXNvdXJjZSAnICsgcmVzb3VyY2VJZCArICcgZmFpbGVkIHZhbGlkYXRpb246ICcgKyBtZXNzYWdlfQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICB9CiAgfQ==",
      "url" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/SharedResourceCreation.cql"
    }
  ]
}