@prefix fhir: <http://hl7.org/fhir/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

# - resource -------------------------------------------------------------------

<http://smart.who.int/immunizations/Library/IMMZIndicatorElements> a fhir:Library ;
  fhir:nodeRole fhir:treeRoot ;
  fhir:id [ fhir:v "IMMZIndicatorElements"] ; # 
  fhir:meta [
     fhir:profile ( [
       fhir:v "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"^^xsd:anyURI ;
       fhir:l <http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary>
     ] [
       fhir:v "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"^^xsd:anyURI ;
       fhir:l <http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary>
     ] [
       fhir:v "http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"^^xsd:anyURI ;
       fhir:l <http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library>
     ] [
       fhir:v "http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"^^xsd:anyURI ;
       fhir:l <http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module>
     ] )
  ] ; # 
  fhir:text [
     fhir:status [ fhir:v "extensions" ] ;
     fhir:div [ fhir:v "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n<div>\n    <table class=\"grid dict\">\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Title: </b></th>\n            <td style=\"padding-left: 4px;\">IMMZIndicatorElements</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Id: </b></th>\n            <td style=\"padding-left: 4px;\">IMMZIndicatorElements</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-IMMZIndicatorElements.html\">IMMZIndicatorElements</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        <tr>\n            <th scope=\"row\"><b>Experimental: </b></th>\n            <td style=\"padding-left: 4px;\">true</td>\n        </tr>\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/7.1.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;\">2026-03-31 13:54:17+0000</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Publisher: </b></th>\n            <td style=\"padding-left: 4px;\">WHO</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Description: </b></th>\n            <td style=\"padding-left: 4px;\"><div><p>This library defines indicator-based elements and terminologies used throughout the Immunization CPG indicators</p>\n</div></td>\n        </tr>\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n        <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=\"Library-WHOConcepts.html\">WHOConcepts</a></li>\n                  \n                    <li><a href=\"Library-WHOCommon.html\">WHOCommon</a></li>\n                  \n                    <li><a href=\"Library-IMMZConcepts.html\">IMMZConcepts</a></li>\n                  \n                    <li><a href=\"Library-IMMZAgeConcepts.html\">IMMZAgeConcepts</a></li>\n                  \n                    <li><a href=\"Library-IMMZCommon.html\">IMMZCommon</a></li>\n                  \n                    <li><a href=\"Library-IMMZElements.html\">IMMZElements</a></li>\n                  \n                    <li><a href=\"http://hl7.org/fhir/R4/codesystem-administrative-gender.html\">AdministrativeGender</a></li>\n                  \n                </ul>\n                \n                \n                \n                \n                \n            </td>\n        </tr>\n        \n\n        \n        <tr>\n          <th scope=\"row\"><b>Parameters: </b></th>\n          <td style=\"padding-left: 4px;\">\n            <table class=\"grid-dict\">\n              <tr><th><b>Name</b></th><th><b>Type</b></th><th><b>Min</b></th><th><b>Max</b></th><th><b>In/Out</b></th></tr>\n              \n                <tr><th>Measurement Period</th><th>Period</th><th>0</th><th>1</th><th>In</th></tr>\n              \n                <tr><th>Patient</th><th>Patient</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Age Stratifier</th><th>Coding</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Newborn By Age Stratifier</th><th>Coding</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Infant By Age Stratifier</th><th>Coding</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Toddler By Age Stratifier</th><th>Coding</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Child By Age Stratifier</th><th>Coding</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Adolescent By Age Stratifier</th><th>Coding</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>By Age Group Stratifier</th><th>Coding</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>By Administrative Gender Stratifier</th><th>Coding</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>By Geographic Region Stratifier</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Patient Deceased During Measurement Period</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Patient Born During Measurement Period</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Patient Under 12 Months Old During Measurement Period</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Patient Under 2 Years Old During Measurement Period</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Doses Administered to Patient During Measurement Period</th><th>Immunization</th><th>0</th><th>*</th><th>Out</th></tr>\n              \n                <tr><th>Adverse Events During Measurement Period</th><th>AdverseEvent</th><th>0</th><th>*</th><th>Out</th></tr>\n              \n                <tr><th>Immunizations And Adverse Events During Measurement Period</th><th>Resource</th><th>0</th><th>*</th><th>Out</th></tr>\n              \n                <tr><th>Pentavalent Doses Administered to Patient</th><th>Immunization</th><th>0</th><th>*</th><th>Out</th></tr>\n              \n                <tr><th>Pentavalent Doses Administered to Patient During Measurement Period</th><th>Immunization</th><th>0</th><th>*</th><th>Out</th></tr>\n              \n                <tr><th>Measles and Rubella Doses Administered to Patient</th><th>Immunization</th><th>0</th><th>*</th><th>Out</th></tr>\n              \n                <tr><th>Measles and Rubella Doses Administered to Patient During Measurement Period</th><th>Immunization</th><th>0</th><th>*</th><th>Out</th></tr>\n              \n                <tr><th>COVID-19 Doses Administered to Patient During Measurement Period</th><th>Immunization</th><th>0</th><th>*</th><th>Out</th></tr>\n              \n                <tr><th>Adverse Events for Immunization</th><th>AdverseEvent</th><th>0</th><th>*</th><th>Out</th></tr>\n              \n                <tr><th>Immunizations with Adverse Events During Measurement Period</th><th>Immunization</th><th>0</th><th>*</th><th>Out</th></tr>\n              \n                <tr><th>Adverse Event Reactions During Measurement Period</th><th>AdverseEvent</th><th>0</th><th>*</th><th>Out</th></tr>\n              \n            </table>\n          </td>\n        </tr>\n        \n\n        \n        <tr>\n          <th scope=\"row\"><b>Data Requirements:</b></th>\n          <td style=\"padding-left: 4px;\">\n            <table class=\"grid-dict\">\n              <tr><th><b>Type</b></th><th><b>Profile</b></th><th><b>MS</b></th><th><b>Code Filter</b></th></tr>\n              \n                <tr>\n                  <th>AdverseEvent</th>\n                  <th>http://hl7.org/fhir/StructureDefinition/AdverseEvent</th>\n                  <th/>\n                  <th>\n                    \n                  </th>\n                </tr>\n              \n                <tr>\n                  <th>AdverseEvent</th>\n                  <th>http://hl7.org/fhir/StructureDefinition/AdverseEvent</th>\n                  <th/>\n                  <th>\n                    \n                  </th>\n                </tr>\n              \n                <tr>\n                  <th>Location</th>\n                  <th>http://hl7.org/fhir/StructureDefinition/Location</th>\n                  <th/>\n                  <th>\n                    \n                  </th>\n                </tr>\n              \n                <tr>\n                  <th>Location</th>\n                  <th>http://hl7.org/fhir/StructureDefinition/Location</th>\n                  <th/>\n                  <th>\n                    \n                  </th>\n                </tr>\n              \n            </table>\n          </td>\n        </tr>\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\">/**\n * Immunization Indicator Elements by Patients as Context\n */\n\nlibrary IMMZIndicatorElements\n\nusing FHIR version '4.0.1'\n\ninclude FHIRHelpers version '4.0.1'\n\ninclude WHOConcepts\ninclude WHOCommon called WC\n\ninclude IMMZConcepts called Concepts\ninclude IMMZAgeConcepts called Age\ninclude IMMZCommon called Common\ninclude IMMZElements called Elements\n\n\n\ncodesystem \"Administrative Gender Codes\": 'http://hl7.org/fhir/administrative-gender'\ncode \"Males\" : 'male' from \"Administrative Gender Codes\" display 'Males'\ncode \"Females\" : 'female' from \"Administrative Gender Codes\" display 'Females'\ncode \"Other\" : 'other' from \"Administrative Gender Codes\" display 'Other/NA'\n\nparameter \"Measurement Period\" Interval&lt;Date&gt; default Interval[@2025-01-01, @2025-12-31]\n\ncontext Patient\n\n/*\n@stratifier: Age in Years\n*/\ndefine \"Age Stratifier\":\n  case\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 1 then Age.\"P0Y--P1Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 2 then Age.\"P1Y--P2Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 3 then Age.\"P2Y--P3Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 4 then Age.\"P3Y--P4Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 5 then Age.\"P4Y--P5Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 6 then Age.\"P5Y--P6Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 7 then Age.\"P6Y--P7Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 8 then Age.\"P7Y--P8Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 9 then Age.\"P8Y--P9Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 10 then Age.\"P9Y--P10Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 11 then Age.\"P10Y--P11Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 12 then Age.\"P11Y--P12Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 13 then Age.\"P12Y--P13Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 14 then Age.\"P13Y--P14Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 15 then Age.\"P14Y--P15Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 16 then Age.\"P15Y--P16Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 17 then Age.\"P16Y--P17Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 18 then Age.\"P17Y--P18Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 19 then Age.\"P18Y--P19Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 20 then Age.\"P19Y--P20Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 21 then Age.\"P20Y--P21Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 22 then Age.\"P21Y--P22Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 23 then Age.\"P22Y--P23Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 24 then Age.\"P23Y--P24Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 25 then Age.\"P24Y--P25Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 26 then Age.\"P25Y--P26Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 27 then Age.\"P26Y--P27Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 28 then Age.\"P27Y--P28Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 29 then Age.\"P28Y--P29Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 30 then Age.\"P29Y--P30Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 31 then Age.\"P30Y--P31Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 32 then Age.\"P31Y--P32Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 33 then Age.\"P32Y--P33Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 34 then Age.\"P33Y--P34Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 35 then Age.\"P34Y--P35Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 36 then Age.\"P35Y--P36Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 37 then Age.\"P36Y--P37Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 38 then Age.\"P37Y--P38Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 39 then Age.\"P38Y--P39Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 40 then Age.\"P39Y--P40Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 41 then Age.\"P40Y--P41Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 42 then Age.\"P41Y--P42Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 43 then Age.\"P42Y--P43Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 44 then Age.\"P43Y--P44Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 45 then Age.\"P44Y--P45Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 46 then Age.\"P45Y--P46Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 47 then Age.\"P46Y--P47Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 48 then Age.\"P47Y--P48Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 49 then Age.\"P48Y--P49Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 50 then Age.\"P49Y--P50Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 51 then Age.\"P50Y--P51Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 52 then Age.\"P51Y--P52Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 53 then Age.\"P52Y--P53Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 54 then Age.\"P53Y--P54Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 55 then Age.\"P54Y--P55Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 56 then Age.\"P55Y--P56Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 57 then Age.\"P56Y--P57Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 58 then Age.\"P57Y--P58Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 59 then Age.\"P58Y--P59Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 60 then Age.\"P59Y--P60Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 61 then Age.\"P60Y--P61Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 62 then Age.\"P61Y--P62Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 63 then Age.\"P62Y--P63Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 64 then Age.\"P63Y--P64Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 65 then Age.\"P64Y--P65Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 66 then Age.\"P65Y--P66Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 67 then Age.\"P66Y--P67Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 68 then Age.\"P67Y--P68Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 69 then Age.\"P68Y--P69Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 70 then Age.\"P69Y--P70Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 71 then Age.\"P70Y--P71Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 72 then Age.\"P71Y--P72Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 73 then Age.\"P72Y--P73Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 74 then Age.\"P73Y--P74Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 75 then Age.\"P74Y--P75Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 76 then Age.\"P75Y--P76Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 77 then Age.\"P76Y--P77Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 78 then Age.\"P77Y--P78Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 79 then Age.\"P78Y--P79Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 80 then Age.\"P79Y--P80Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 81 then Age.\"P80Y--P81Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 82 then Age.\"P81Y--P82Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 83 then Age.\"P82Y--P83Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 84 then Age.\"P83Y--P84Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 85 then Age.\"P84Y--P85Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 86 then Age.\"P85Y--P86Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 87 then Age.\"P86Y--P87Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 88 then Age.\"P87Y--P88Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 89 then Age.\"P88Y--P89Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 90 then Age.\"P89Y--P90Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 91 then Age.\"P90Y--P91Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 92 then Age.\"P91Y--P92Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 93 then Age.\"P92Y--P93Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 94 then Age.\"P93Y--P94Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 95 then Age.\"P94Y--P95Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 96 then Age.\"P95Y--P96Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 97 then Age.\"P96Y--P97Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 98 then Age.\"P97Y--P98Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 99 then Age.\"P98Y--P99Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 100 then Age.\"P99Y--P100Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &gt;= 100 then Age.\"P100Y--P9999Y\"\n    else null\n  end\n\n/* \n@stratifier: Infant disaggregations by age\n*/\ndefine \"Newborn By Age Stratifier\":\n    case \n        when AgeInHoursAt(end of \"Measurement Period\") &lt;= 24 then Age.\"PT0H--PT24H\"\n        when AgeInWeeksAt(end of \"Measurement Period\") &lt;= 2 then Age.\"PT24H--P2W\"\n        when AgeInWeeksAt(end of \"Measurement Period\") &gt; 2 then Age.\"P2W--P9999Y\"\n        else null\n    end\n\n/*\n@stratifier: Infant disaggregations by age\n*/\ndefine \"Infant By Age Stratifier\":\n    case \n        when AgeInYearsAt(end of \"Measurement Period\") &lt; 1 then Age.\"P0Y--P1Y\"\n        when AgeInYearsAt(end of \"Measurement Period\") &gt;= 1 then Age.\"P1Y--P9999Y\"\n        else null\n    end\n\n/* \n@stratifier: Toddler By Age Stratifiers\n*/\ndefine \"Toddler By Age Stratifier\":\n    case \n        when AgeInYearsAt(end of \"Measurement Period\") &lt; 1 then Age.\"P0Y--P1Y\"\n        when AgeInYearsAt(end of \"Measurement Period\") &lt; 2 then Age.\"P1Y--P2Y\"\n        when AgeInYearsAt(end of \"Measurement Period\") &gt;= 2 then Age.\"P2Y--P9999Y\"\n        else null\n    end\n\n/* \n@stratifier: Child By Age Stratifiers\n*/\ndefine \"Child By Age Stratifier\":\n    case \n        when AgeInYearsAt(end of \"Measurement Period\") &lt; 1 then Age.\"P0Y--P1Y\"\n        when AgeInYearsAt(end of \"Measurement Period\") &lt; 3 then Age.\"P1Y--P3Y\"\n        when AgeInYearsAt(end of \"Measurement Period\") &lt; 6 then Age.\"P3Y--P6Y\"\n        when AgeInYearsAt(end of \"Measurement Period\") &lt; 13 then Age.\"P6Y--P13Y\"\n        when AgeInYearsAt(end of \"Measurement Period\") &gt;= 13 then Age.\"P13Y--P9999Y\"\n        else null\n    end\n\n/* \n@stratifier: Adolescent By Age Stratifiers\n*/\ndefine \"Adolescent By Age Stratifier\":\n    case \n        when AgeInYearsAt(end of \"Measurement Period\") &lt; 9 then Age.\"P0Y--P9Y\"\n        when AgeInYearsAt(end of \"Measurement Period\") &lt;= 14 then Age.\"P9Y--P15Y\"\n        when AgeInYearsAt(end of \"Measurement Period\") &gt; 14 then Age.\"P15Y--P9999Y\"\n        else null\n    end\n\n/*\n@stratifier: Age Group Stratifier\n*/\ndefine \"By Age Group Stratifier\":\n  case \n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 18 then Age.\"P0Y--P18Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 30 then Age.\"P18Y--P30Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 50 then Age.\"P30Y--P50Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &lt; 70 then Age.\"P50Y--P70Y\"\n    when AgeInYearsAt(end of \"Measurement Period\") &gt;= 70 then Age.\"P70Y--P9999Y\"\n    else null\n  end\n\n/*\n@stratifier: By Administrative Gender of Patient Stratifier\n*/\ndefine \"By Administrative Gender Stratifier\":\n    case \n        when Patient.gender = 'male' then \"Males\"\n        when Patient.gender = 'female' then \"Females\"\n        else \"Other\"\n    end\n\n/*\n@stratifier: By Geographic Region of Patient Stratifier\n*/\ndefine \"By Geographic Region Stratifier\":\n    First(Patient.address A where A.use in { 'home' }).state\n\n/** \n * @dataElement Patient is deceased\n */\ndefine \"Patient Deceased During Measurement Period\":\n  case \n    when Patient.deceased is FHIR.boolean then Patient.deceased as FHIR.boolean\n    when Patient.deceased is FHIR.dateTime then Patient.deceased as FHIR.dateTime before end of \"Measurement Period\"\n    else false\n  end\n\n/** \n * Patient was born during measurement period\n */\ndefine \"Patient Born During Measurement Period\":\n    Patient.birthDate during \"Measurement Period\"\n\n/** \n * Patient is &lt; 12 months old at the end of the measurement period\n */\ndefine \"Patient Under 12 Months Old During Measurement Period\":\n    Patient.birthDate less than 12 months before end of \"Measurement Period\"\n\n/** \n * Patient is &lt; 12 years old at the end of the measurement period\n */\ndefine \"Patient Under 2 Years Old During Measurement Period\":\n    Patient.birthDate less than 2 years before end of \"Measurement Period\"\n\n/** \n * @define Doses which were administered during the measurement period\n */\ndefine \"Doses Administered to Patient During Measurement Period\":\n  Elements.\"Doses Administered to Patient\"  I\n    where I.occurrence.toInterval() starts during \"Measurement Period\"\n\ndefine \"Adverse Events During Measurement Period\":\n  [AdverseEvent] AE\n    where AE.date.toInterval() starts during \"Measurement Period\"\n/*\n  [Observation: WHOConcepts.\"Adverse Events\"] O\n    where O.effective.toInterval() during \"Measurement Period\"\n*/\n\ndefine \"Immunizations And Adverse Events During Measurement Period\":\n  from\n    \"Doses Administered to Patient During Measurement Period\" I,\n    \"Adverse Events During Measurement Period\" O\n  where I.reaction.detail.references(O)\n  return { immunization: I, adverseEvent: O }\n\ndefine \"Pentavalent Doses Administered to Patient\":\n  Elements.\"Doses Administered to Patient\" I \n    where I.vaccineCode in Concepts.\"Pentavalent vaccines\"\n\ndefine \"Pentavalent Doses Administered to Patient During Measurement Period\":\n  \"Pentavalent Doses Administered to Patient\" I\n    where I.occurrence.toInterval() starts during \"Measurement Period\"\n\ndefine \"Measles and Rubella Doses Administered to Patient\":\n  Elements.\"Doses Administered to Patient\" I \n    where I.vaccineCode in Concepts.\"Measles and rubella-containing vaccines\"\n\ndefine \"Measles and Rubella Doses Administered to Patient During Measurement Period\":\n  \"Measles and Rubella Doses Administered to Patient\" I\n    where I.occurrence.toInterval() starts during \"Measurement Period\"\n\ndefine \"COVID-19 Doses Administered to Patient During Measurement Period\":\n  \"Doses Administered to Patient During Measurement Period\" I \n    where I.vaccineCode in Concepts.\"COVID-19 vaccines\"\n\ndefine \"Adverse Events for Immunization\":\n  [AdverseEvent] AE\n    where AE.actuality = 'actual'\n\n/** \n * @define Adverse events for immunizations which occurred during (or observed) during measurement period\n */\ndefine \"Immunizations with Adverse Events During Measurement Period\":\n  \"Immunizations And Adverse Events During Measurement Period\" I\n    return I.immunization\n\n/** \n * @define Adverse events for immunizations which occurred during (or observed) during measurement period\n */\ndefine \"Adverse Event Reactions During Measurement Period\":\n  \"Immunizations And Adverse Events During Measurement Period\" I\n    return I.adverseEvent\n\n/** \n * @function\n * @param immunization The immunization record for which the location should be retrieved\n * @return FHIR.address The location that the immunization event occurred\n */\ndefine function GetGeographicRegionForImmunization(immunization Immunization):\n  (\n    [Location] L\n        where immunization.location.references(L)\n  ).only().address.state\n\n/** \n * @function\n * @param immunization The immunization record for which the location should be retrieved\n * @return FHIR.name The name of the location that the immunization event occurred\n */\ndefine function GetLocationNameForImmunization(immunization Immunization):\n  (\n    [Location] L\n        where immunization.location.references(L)\n  ).only().name\n</code></pre></td></tr>\n            </table>\n          </td>\n        </tr>\n        \n        \n        \n    </table>\n</div>\n</div>"^^rdf:XMLLiteral ]
  ] ; # 
  fhir:extension ( [
     fhir:url [
       fhir:v "http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability"^^xsd:anyURI ;
       fhir:l <http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability>
     ] ;
     fhir:value [
       a fhir:Code ;
       fhir:v "computable"
     ]
  ] ) ; # 
  fhir:url [
     fhir:v "http://smart.who.int/immunizations-measles/Library/IMMZIndicatorElements"^^xsd:anyURI ;
     fhir:l <http://smart.who.int/immunizations-measles/Library/IMMZIndicatorElements>
  ] ; # 
  fhir:version [ fhir:v "1.0.0"] ; # 
  fhir:name [ fhir:v "IMMZIndicatorElements"] ; # 
  fhir:title [ fhir:v "IMMZIndicatorElements"] ; # 
  fhir:status [ fhir:v "draft"] ; # 
  fhir:experimental [ fhir:v true] ; # 
  fhir:type [
     fhir:coding ( [
       fhir:system [
         fhir:v "http://terminology.hl7.org/CodeSystem/library-type"^^xsd:anyURI ;
         fhir:l <http://terminology.hl7.org/CodeSystem/library-type>
       ] ;
       fhir:code [ fhir:v "logic-library" ]
     ] )
  ] ; # 
  fhir:date [ fhir:v "2026-03-31T13:54:17+00:00"^^xsd:dateTime] ; # 
  fhir:publisher [ fhir:v "WHO"] ; # 
  fhir:contact ( [
     fhir:name [ fhir:v "WHO" ] ;
     fhir:telecom ( [
       fhir:system [ fhir:v "url" ] ;
       fhir:value [ fhir:v "http://who.int" ]
     ] )
  ] ) ; # 
  fhir:description [ fhir:v "This library defines indicator-based elements and terminologies used throughout the Immunization CPG indicators"] ; # 
  fhir:relatedArtifact ( [
     fhir:type [ fhir:v "depends-on" ] ;
     fhir:display [ fhir:v "Library WHOConcepts" ] ;
     fhir:resource [
       fhir:v "http://smart.who.int/immunizations/Library/WHOConcepts"^^xsd:anyURI ;
       fhir:l <http://smart.who.int/immunizations/Library/WHOConcepts>
     ]
  ] [
     fhir:type [ fhir:v "depends-on" ] ;
     fhir:display [ fhir:v "Library WC" ] ;
     fhir:resource [
       fhir:v "http://smart.who.int/immunizations/Library/WHOCommon"^^xsd:anyURI ;
       fhir:l <http://smart.who.int/immunizations/Library/WHOCommon>
     ]
  ] [
     fhir:type [ fhir:v "depends-on" ] ;
     fhir:display [ fhir:v "Library Concepts" ] ;
     fhir:resource [
       fhir:v "http://smart.who.int/immunizations/Library/IMMZConcepts"^^xsd:anyURI ;
       fhir:l <http://smart.who.int/immunizations/Library/IMMZConcepts>
     ]
  ] [
     fhir:type [ fhir:v "depends-on" ] ;
     fhir:display [ fhir:v "Library Age" ] ;
     fhir:resource [
       fhir:v "http://smart.who.int/immunizations/Library/IMMZAgeConcepts"^^xsd:anyURI ;
       fhir:l <http://smart.who.int/immunizations/Library/IMMZAgeConcepts>
     ]
  ] [
     fhir:type [ fhir:v "depends-on" ] ;
     fhir:display [ fhir:v "Library Common" ] ;
     fhir:resource [
       fhir:v "http://smart.who.int/immunizations/Library/IMMZCommon"^^xsd:anyURI ;
       fhir:l <http://smart.who.int/immunizations/Library/IMMZCommon>
     ]
  ] [
     fhir:type [ fhir:v "depends-on" ] ;
     fhir:display [ fhir:v "Library Elements" ] ;
     fhir:resource [
       fhir:v "http://smart.who.int/immunizations/Library/IMMZElements"^^xsd:anyURI ;
       fhir:l <http://smart.who.int/immunizations/Library/IMMZElements>
     ]
  ] [
     fhir:type [ fhir:v "depends-on" ] ;
     fhir:display [ fhir:v "Code System Administrative Gender Codes" ] ;
     fhir:resource [
       fhir:v "http://hl7.org/fhir/administrative-gender"^^xsd:anyURI ;
       fhir:l <http://hl7.org/fhir/administrative-gender>
     ]
  ] ) ; # 
  fhir:parameter ( [
     fhir:name [ fhir:v "Measurement Period" ] ;
     fhir:use [ fhir:v "in" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "Period" ]
  ] [
     fhir:name [ fhir:v "Patient" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "Patient" ]
  ] [
     fhir:name [ fhir:v "Age Stratifier" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "Coding" ]
  ] [
     fhir:name [ fhir:v "Newborn By Age Stratifier" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "Coding" ]
  ] [
     fhir:name [ fhir:v "Infant By Age Stratifier" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "Coding" ]
  ] [
     fhir:name [ fhir:v "Toddler By Age Stratifier" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "Coding" ]
  ] [
     fhir:name [ fhir:v "Child By Age Stratifier" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "Coding" ]
  ] [
     fhir:name [ fhir:v "Adolescent By Age Stratifier" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "Coding" ]
  ] [
     fhir:name [ fhir:v "By Age Group Stratifier" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "Coding" ]
  ] [
     fhir:name [ fhir:v "By Administrative Gender Stratifier" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "Coding" ]
  ] [
     fhir:name [ fhir:v "By Geographic Region Stratifier" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "string" ]
  ] [
     fhir:name [ fhir:v "Patient Deceased During Measurement Period" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "boolean" ]
  ] [
     fhir:name [ fhir:v "Patient Born During Measurement Period" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "boolean" ]
  ] [
     fhir:name [ fhir:v "Patient Under 12 Months Old During Measurement Period" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "boolean" ]
  ] [
     fhir:name [ fhir:v "Patient Under 2 Years Old During Measurement Period" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "1" ] ;
     fhir:type [ fhir:v "boolean" ]
  ] [
     fhir:name [ fhir:v "Doses Administered to Patient During Measurement Period" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "*" ] ;
     fhir:type [ fhir:v "Immunization" ]
  ] [
     fhir:name [ fhir:v "Adverse Events During Measurement Period" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "*" ] ;
     fhir:type [ fhir:v "AdverseEvent" ]
  ] [
     fhir:name [ fhir:v "Immunizations And Adverse Events During Measurement Period" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "*" ] ;
     fhir:type [ fhir:v "Resource" ]
  ] [
     fhir:name [ fhir:v "Pentavalent Doses Administered to Patient" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "*" ] ;
     fhir:type [ fhir:v "Immunization" ]
  ] [
     fhir:name [ fhir:v "Pentavalent Doses Administered to Patient During Measurement Period" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "*" ] ;
     fhir:type [ fhir:v "Immunization" ]
  ] [
     fhir:name [ fhir:v "Measles and Rubella Doses Administered to Patient" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "*" ] ;
     fhir:type [ fhir:v "Immunization" ]
  ] [
     fhir:name [ fhir:v "Measles and Rubella Doses Administered to Patient During Measurement Period" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "*" ] ;
     fhir:type [ fhir:v "Immunization" ]
  ] [
     fhir:name [ fhir:v "COVID-19 Doses Administered to Patient During Measurement Period" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "*" ] ;
     fhir:type [ fhir:v "Immunization" ]
  ] [
     fhir:name [ fhir:v "Adverse Events for Immunization" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "*" ] ;
     fhir:type [ fhir:v "AdverseEvent" ]
  ] [
     fhir:name [ fhir:v "Immunizations with Adverse Events During Measurement Period" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "*" ] ;
     fhir:type [ fhir:v "Immunization" ]
  ] [
     fhir:name [ fhir:v "Adverse Event Reactions During Measurement Period" ] ;
     fhir:use [ fhir:v "out" ] ;
     fhir:min [ fhir:v 0 ] ;
     fhir:max [ fhir:v "*" ] ;
     fhir:type [ fhir:v "AdverseEvent" ]
  ] ) ; # 
  fhir:dataRequirement ( [
     fhir:type [ fhir:v "AdverseEvent" ] ;
     fhir:profile ( [
       fhir:v "http://hl7.org/fhir/StructureDefinition/AdverseEvent"^^xsd:anyURI ;
       fhir:l <http://hl7.org/fhir/StructureDefinition/AdverseEvent>
     ] )
  ] [
     fhir:type [ fhir:v "AdverseEvent" ] ;
     fhir:profile ( [
       fhir:v "http://hl7.org/fhir/StructureDefinition/AdverseEvent"^^xsd:anyURI ;
       fhir:l <http://hl7.org/fhir/StructureDefinition/AdverseEvent>
     ] )
  ] [
     fhir:type [ fhir:v "Location" ] ;
     fhir:profile ( [
       fhir:v "http://hl7.org/fhir/StructureDefinition/Location"^^xsd:anyURI ;
       fhir:l <http://hl7.org/fhir/StructureDefinition/Location>
     ] )
  ] [
     fhir:type [ fhir:v "Location" ] ;
     fhir:profile ( [
       fhir:v "http://hl7.org/fhir/StructureDefinition/Location"^^xsd:anyURI ;
       fhir:l <http://hl7.org/fhir/StructureDefinition/Location>
     ] )
  ] ) ; # 
  fhir:content ( [
     fhir:contentType [ fhir:v "text/cql" ] ;
     fhir:data [ fhir:v "LyoqCiAqIEltbXVuaXphdGlvbiBJbmRpY2F0b3IgRWxlbWVudHMgYnkgUGF0aWVudHMgYXMgQ29udGV4dAogKi8KCmxpYnJhcnkgSU1NWkluZGljYXRvckVsZW1lbnRzCgp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgV0hPQ29uY2VwdHMKaW5jbHVkZSBXSE9Db21tb24gY2FsbGVkIFdDCgppbmNsdWRlIElNTVpDb25jZXB0cyBjYWxsZWQgQ29uY2VwdHMKaW5jbHVkZSBJTU1aQWdlQ29uY2VwdHMgY2FsbGVkIEFnZQppbmNsdWRlIElNTVpDb21tb24gY2FsbGVkIENvbW1vbgppbmNsdWRlIElNTVpFbGVtZW50cyBjYWxsZWQgRWxlbWVudHMKCgoKY29kZXN5c3RlbSAiQWRtaW5pc3RyYXRpdmUgR2VuZGVyIENvZGVzIjogJ2h0dHA6Ly9obDcub3JnL2ZoaXIvYWRtaW5pc3RyYXRpdmUtZ2VuZGVyJwpjb2RlICJNYWxlcyIgOiAnbWFsZScgZnJvbSAiQWRtaW5pc3RyYXRpdmUgR2VuZGVyIENvZGVzIiBkaXNwbGF5ICdNYWxlcycKY29kZSAiRmVtYWxlcyIgOiAnZmVtYWxlJyBmcm9tICJBZG1pbmlzdHJhdGl2ZSBHZW5kZXIgQ29kZXMiIGRpc3BsYXkgJ0ZlbWFsZXMnCmNvZGUgIk90aGVyIiA6ICdvdGhlcicgZnJvbSAiQWRtaW5pc3RyYXRpdmUgR2VuZGVyIENvZGVzIiBkaXNwbGF5ICdPdGhlci9OQScKCnBhcmFtZXRlciAiTWVhc3VyZW1lbnQgUGVyaW9kIiBJbnRlcnZhbDxEYXRlPiBkZWZhdWx0IEludGVydmFsW0AyMDI1LTAxLTAxLCBAMjAyNS0xMi0zMV0KCmNvbnRleHQgUGF0aWVudAoKLyoKQHN0cmF0aWZpZXI6IEFnZSBpbiBZZWFycwoqLwpkZWZpbmUgIkFnZSBTdHJhdGlmaWVyIjoKICBjYXNlCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgMSB0aGVuIEFnZS4iUDBZLS1QMVkiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgMiB0aGVuIEFnZS4iUDFZLS1QMlkiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgMyB0aGVuIEFnZS4iUDJZLS1QM1kiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgNCB0aGVuIEFnZS4iUDNZLS1QNFkiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgNSB0aGVuIEFnZS4iUDRZLS1QNVkiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgNiB0aGVuIEFnZS4iUDVZLS1QNlkiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgNyB0aGVuIEFnZS4iUDZZLS1QN1kiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgOCB0aGVuIEFnZS4iUDdZLS1QOFkiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgOSB0aGVuIEFnZS4iUDhZLS1QOVkiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgMTAgdGhlbiBBZ2UuIlA5WS0tUDEwWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAxMSB0aGVuIEFnZS4iUDEwWS0tUDExWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAxMiB0aGVuIEFnZS4iUDExWS0tUDEyWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAxMyB0aGVuIEFnZS4iUDEyWS0tUDEzWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAxNCB0aGVuIEFnZS4iUDEzWS0tUDE0WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAxNSB0aGVuIEFnZS4iUDE0WS0tUDE1WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAxNiB0aGVuIEFnZS4iUDE1WS0tUDE2WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAxNyB0aGVuIEFnZS4iUDE2WS0tUDE3WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAxOCB0aGVuIEFnZS4iUDE3WS0tUDE4WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAxOSB0aGVuIEFnZS4iUDE4WS0tUDE5WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAyMCB0aGVuIEFnZS4iUDE5WS0tUDIwWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAyMSB0aGVuIEFnZS4iUDIwWS0tUDIxWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAyMiB0aGVuIEFnZS4iUDIxWS0tUDIyWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAyMyB0aGVuIEFnZS4iUDIyWS0tUDIzWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAyNCB0aGVuIEFnZS4iUDIzWS0tUDI0WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAyNSB0aGVuIEFnZS4iUDI0WS0tUDI1WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAyNiB0aGVuIEFnZS4iUDI1WS0tUDI2WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAyNyB0aGVuIEFnZS4iUDI2WS0tUDI3WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAyOCB0aGVuIEFnZS4iUDI3WS0tUDI4WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAyOSB0aGVuIEFnZS4iUDI4WS0tUDI5WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAzMCB0aGVuIEFnZS4iUDI5WS0tUDMwWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAzMSB0aGVuIEFnZS4iUDMwWS0tUDMxWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAzMiB0aGVuIEFnZS4iUDMxWS0tUDMyWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAzMyB0aGVuIEFnZS4iUDMyWS0tUDMzWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAzNCB0aGVuIEFnZS4iUDMzWS0tUDM0WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAzNSB0aGVuIEFnZS4iUDM0WS0tUDM1WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAzNiB0aGVuIEFnZS4iUDM1WS0tUDM2WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAzNyB0aGVuIEFnZS4iUDM2WS0tUDM3WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAzOCB0aGVuIEFnZS4iUDM3WS0tUDM4WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAzOSB0aGVuIEFnZS4iUDM4WS0tUDM5WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA0MCB0aGVuIEFnZS4iUDM5WS0tUDQwWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA0MSB0aGVuIEFnZS4iUDQwWS0tUDQxWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA0MiB0aGVuIEFnZS4iUDQxWS0tUDQyWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA0MyB0aGVuIEFnZS4iUDQyWS0tUDQzWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA0NCB0aGVuIEFnZS4iUDQzWS0tUDQ0WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA0NSB0aGVuIEFnZS4iUDQ0WS0tUDQ1WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA0NiB0aGVuIEFnZS4iUDQ1WS0tUDQ2WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA0NyB0aGVuIEFnZS4iUDQ2WS0tUDQ3WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA0OCB0aGVuIEFnZS4iUDQ3WS0tUDQ4WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA0OSB0aGVuIEFnZS4iUDQ4WS0tUDQ5WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA1MCB0aGVuIEFnZS4iUDQ5WS0tUDUwWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA1MSB0aGVuIEFnZS4iUDUwWS0tUDUxWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA1MiB0aGVuIEFnZS4iUDUxWS0tUDUyWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA1MyB0aGVuIEFnZS4iUDUyWS0tUDUzWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA1NCB0aGVuIEFnZS4iUDUzWS0tUDU0WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA1NSB0aGVuIEFnZS4iUDU0WS0tUDU1WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA1NiB0aGVuIEFnZS4iUDU1WS0tUDU2WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA1NyB0aGVuIEFnZS4iUDU2WS0tUDU3WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA1OCB0aGVuIEFnZS4iUDU3WS0tUDU4WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA1OSB0aGVuIEFnZS4iUDU4WS0tUDU5WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA2MCB0aGVuIEFnZS4iUDU5WS0tUDYwWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA2MSB0aGVuIEFnZS4iUDYwWS0tUDYxWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA2MiB0aGVuIEFnZS4iUDYxWS0tUDYyWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA2MyB0aGVuIEFnZS4iUDYyWS0tUDYzWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA2NCB0aGVuIEFnZS4iUDYzWS0tUDY0WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA2NSB0aGVuIEFnZS4iUDY0WS0tUDY1WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA2NiB0aGVuIEFnZS4iUDY1WS0tUDY2WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA2NyB0aGVuIEFnZS4iUDY2WS0tUDY3WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA2OCB0aGVuIEFnZS4iUDY3WS0tUDY4WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA2OSB0aGVuIEFnZS4iUDY4WS0tUDY5WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA3MCB0aGVuIEFnZS4iUDY5WS0tUDcwWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA3MSB0aGVuIEFnZS4iUDcwWS0tUDcxWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA3MiB0aGVuIEFnZS4iUDcxWS0tUDcyWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA3MyB0aGVuIEFnZS4iUDcyWS0tUDczWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA3NCB0aGVuIEFnZS4iUDczWS0tUDc0WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA3NSB0aGVuIEFnZS4iUDc0WS0tUDc1WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA3NiB0aGVuIEFnZS4iUDc1WS0tUDc2WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA3NyB0aGVuIEFnZS4iUDc2WS0tUDc3WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA3OCB0aGVuIEFnZS4iUDc3WS0tUDc4WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA3OSB0aGVuIEFnZS4iUDc4WS0tUDc5WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA4MCB0aGVuIEFnZS4iUDc5WS0tUDgwWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA4MSB0aGVuIEFnZS4iUDgwWS0tUDgxWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA4MiB0aGVuIEFnZS4iUDgxWS0tUDgyWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA4MyB0aGVuIEFnZS4iUDgyWS0tUDgzWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA4NCB0aGVuIEFnZS4iUDgzWS0tUDg0WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA4NSB0aGVuIEFnZS4iUDg0WS0tUDg1WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA4NiB0aGVuIEFnZS4iUDg1WS0tUDg2WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA4NyB0aGVuIEFnZS4iUDg2WS0tUDg3WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA4OCB0aGVuIEFnZS4iUDg3WS0tUDg4WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA4OSB0aGVuIEFnZS4iUDg4WS0tUDg5WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA5MCB0aGVuIEFnZS4iUDg5WS0tUDkwWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA5MSB0aGVuIEFnZS4iUDkwWS0tUDkxWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA5MiB0aGVuIEFnZS4iUDkxWS0tUDkyWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA5MyB0aGVuIEFnZS4iUDkyWS0tUDkzWSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA5NCB0aGVuIEFnZS4iUDkzWS0tUDk0WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA5NSB0aGVuIEFnZS4iUDk0WS0tUDk1WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA5NiB0aGVuIEFnZS4iUDk1WS0tUDk2WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA5NyB0aGVuIEFnZS4iUDk2WS0tUDk3WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA5OCB0aGVuIEFnZS4iUDk3WS0tUDk4WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA5OSB0aGVuIEFnZS4iUDk4WS0tUDk5WSIKICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAxMDAgdGhlbiBBZ2UuIlA5OVktLVAxMDBZIgogICAgd2hlbiBBZ2VJblllYXJzQXQoZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA+PSAxMDAgdGhlbiBBZ2UuIlAxMDBZLS1QOTk5OVkiCiAgICBlbHNlIG51bGwKICBlbmQKCi8qIApAc3RyYXRpZmllcjogSW5mYW50IGRpc2FnZ3JlZ2F0aW9ucyBieSBhZ2UKKi8KZGVmaW5lICJOZXdib3JuIEJ5IEFnZSBTdHJhdGlmaWVyIjoKICAgIGNhc2UgCiAgICAgICAgd2hlbiBBZ2VJbkhvdXJzQXQoZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA8PSAyNCB0aGVuIEFnZS4iUFQwSC0tUFQyNEgiCiAgICAgICAgd2hlbiBBZ2VJbldlZWtzQXQoZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA8PSAyIHRoZW4gQWdlLiJQVDI0SC0tUDJXIgogICAgICAgIHdoZW4gQWdlSW5XZWVrc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPiAyIHRoZW4gQWdlLiJQMlctLVA5OTk5WSIKICAgICAgICBlbHNlIG51bGwKICAgIGVuZAoKLyoKQHN0cmF0aWZpZXI6IEluZmFudCBkaXNhZ2dyZWdhdGlvbnMgYnkgYWdlCiovCmRlZmluZSAiSW5mYW50IEJ5IEFnZSBTdHJhdGlmaWVyIjoKICAgIGNhc2UgCiAgICAgICAgd2hlbiBBZ2VJblllYXJzQXQoZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA8IDEgdGhlbiBBZ2UuIlAwWS0tUDFZIgogICAgICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPj0gMSB0aGVuIEFnZS4iUDFZLS1QOTk5OVkiCiAgICAgICAgZWxzZSBudWxsCiAgICBlbmQKCi8qIApAc3RyYXRpZmllcjogVG9kZGxlciBCeSBBZ2UgU3RyYXRpZmllcnMKKi8KZGVmaW5lICJUb2RkbGVyIEJ5IEFnZSBTdHJhdGlmaWVyIjoKICAgIGNhc2UgCiAgICAgICAgd2hlbiBBZ2VJblllYXJzQXQoZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA8IDEgdGhlbiBBZ2UuIlAwWS0tUDFZIgogICAgICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAyIHRoZW4gQWdlLiJQMVktLVAyWSIKICAgICAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpID49IDIgdGhlbiBBZ2UuIlAyWS0tUDk5OTlZIgogICAgICAgIGVsc2UgbnVsbAogICAgZW5kCgovKiAKQHN0cmF0aWZpZXI6IENoaWxkIEJ5IEFnZSBTdHJhdGlmaWVycwoqLwpkZWZpbmUgIkNoaWxkIEJ5IEFnZSBTdHJhdGlmaWVyIjoKICAgIGNhc2UgCiAgICAgICAgd2hlbiBBZ2VJblllYXJzQXQoZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA8IDEgdGhlbiBBZ2UuIlAwWS0tUDFZIgogICAgICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCAzIHRoZW4gQWdlLiJQMVktLVAzWSIKICAgICAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgNiB0aGVuIEFnZS4iUDNZLS1QNlkiCiAgICAgICAgd2hlbiBBZ2VJblllYXJzQXQoZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA8IDEzIHRoZW4gQWdlLiJQNlktLVAxM1kiCiAgICAgICAgd2hlbiBBZ2VJblllYXJzQXQoZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA+PSAxMyB0aGVuIEFnZS4iUDEzWS0tUDk5OTlZIgogICAgICAgIGVsc2UgbnVsbAogICAgZW5kCgovKiAKQHN0cmF0aWZpZXI6IEFkb2xlc2NlbnQgQnkgQWdlIFN0cmF0aWZpZXJzCiovCmRlZmluZSAiQWRvbGVzY2VudCBCeSBBZ2UgU3RyYXRpZmllciI6CiAgICBjYXNlIAogICAgICAgIHdoZW4gQWdlSW5ZZWFyc0F0KGVuZCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIikgPCA5IHRoZW4gQWdlLiJQMFktLVA5WSIKICAgICAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDw9IDE0IHRoZW4gQWdlLiJQOVktLVAxNVkiCiAgICAgICAgd2hlbiBBZ2VJblllYXJzQXQoZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA+IDE0IHRoZW4gQWdlLiJQMTVZLS1QOTk5OVkiCiAgICAgICAgZWxzZSBudWxsCiAgICBlbmQKCi8qCkBzdHJhdGlmaWVyOiBBZ2UgR3JvdXAgU3RyYXRpZmllcgoqLwpkZWZpbmUgIkJ5IEFnZSBHcm91cCBTdHJhdGlmaWVyIjoKICBjYXNlIAogICAgd2hlbiBBZ2VJblllYXJzQXQoZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiKSA8IDE4IHRoZW4gQWdlLiJQMFktLVAxOFkiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgMzAgdGhlbiBBZ2UuIlAxOFktLVAzMFkiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgNTAgdGhlbiBBZ2UuIlAzMFktLVA1MFkiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIDwgNzAgdGhlbiBBZ2UuIlA1MFktLVA3MFkiCiAgICB3aGVuIEFnZUluWWVhcnNBdChlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpID49IDcwIHRoZW4gQWdlLiJQNzBZLS1QOTk5OVkiCiAgICBlbHNlIG51bGwKICBlbmQKCi8qCkBzdHJhdGlmaWVyOiBCeSBBZG1pbmlzdHJhdGl2ZSBHZW5kZXIgb2YgUGF0aWVudCBTdHJhdGlmaWVyCiovCmRlZmluZSAiQnkgQWRtaW5pc3RyYXRpdmUgR2VuZGVyIFN0cmF0aWZpZXIiOgogICAgY2FzZSAKICAgICAgICB3aGVuIFBhdGllbnQuZ2VuZGVyID0gJ21hbGUnIHRoZW4gIk1hbGVzIgogICAgICAgIHdoZW4gUGF0aWVudC5nZW5kZXIgPSAnZmVtYWxlJyB0aGVuICJGZW1hbGVzIgogICAgICAgIGVsc2UgIk90aGVyIgogICAgZW5kCgovKgpAc3RyYXRpZmllcjogQnkgR2VvZ3JhcGhpYyBSZWdpb24gb2YgUGF0aWVudCBTdHJhdGlmaWVyCiovCmRlZmluZSAiQnkgR2VvZ3JhcGhpYyBSZWdpb24gU3RyYXRpZmllciI6CiAgICBGaXJzdChQYXRpZW50LmFkZHJlc3MgQSB3aGVyZSBBLnVzZSBpbiB7ICdob21lJyB9KS5zdGF0ZQoKLyoqIAogKiBAZGF0YUVsZW1lbnQgUGF0aWVudCBpcyBkZWNlYXNlZAogKi8KZGVmaW5lICJQYXRpZW50IERlY2Vhc2VkIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogIGNhc2UgCiAgICB3aGVuIFBhdGllbnQuZGVjZWFzZWQgaXMgRkhJUi5ib29sZWFuIHRoZW4gUGF0aWVudC5kZWNlYXNlZCBhcyBGSElSLmJvb2xlYW4KICAgIHdoZW4gUGF0aWVudC5kZWNlYXNlZCBpcyBGSElSLmRhdGVUaW1lIHRoZW4gUGF0aWVudC5kZWNlYXNlZCBhcyBGSElSLmRhdGVUaW1lIGJlZm9yZSBlbmQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgIGVsc2UgZmFsc2UKICBlbmQKCi8qKiAKICogUGF0aWVudCB3YXMgYm9ybiBkdXJpbmcgbWVhc3VyZW1lbnQgcGVyaW9kCiAqLwpkZWZpbmUgIlBhdGllbnQgQm9ybiBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICAgIFBhdGllbnQuYmlydGhEYXRlIGR1cmluZyAiTWVhc3VyZW1lbnQgUGVyaW9kIgoKLyoqIAogKiBQYXRpZW50IGlzIDwgMTIgbW9udGhzIG9sZCBhdCB0aGUgZW5kIG9mIHRoZSBtZWFzdXJlbWVudCBwZXJpb2QKICovCmRlZmluZSAiUGF0aWVudCBVbmRlciAxMiBNb250aHMgT2xkIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogICAgUGF0aWVudC5iaXJ0aERhdGUgbGVzcyB0aGFuIDEyIG1vbnRocyBiZWZvcmUgZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCgovKiogCiAqIFBhdGllbnQgaXMgPCAxMiB5ZWFycyBvbGQgYXQgdGhlIGVuZCBvZiB0aGUgbWVhc3VyZW1lbnQgcGVyaW9kCiAqLwpkZWZpbmUgIlBhdGllbnQgVW5kZXIgMiBZZWFycyBPbGQgRHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCI6CiAgICBQYXRpZW50LmJpcnRoRGF0ZSBsZXNzIHRoYW4gMiB5ZWFycyBiZWZvcmUgZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCgovKiogCiAqIEBkZWZpbmUgRG9zZXMgd2hpY2ggd2VyZSBhZG1pbmlzdGVyZWQgZHVyaW5nIHRoZSBtZWFzdXJlbWVudCBwZXJpb2QKICovCmRlZmluZSAiRG9zZXMgQWRtaW5pc3RlcmVkIHRvIFBhdGllbnQgRHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCI6CiAgRWxlbWVudHMuIkRvc2VzIEFkbWluaXN0ZXJlZCB0byBQYXRpZW50IiAgSQogICAgd2hlcmUgSS5vY2N1cnJlbmNlLnRvSW50ZXJ2YWwoKSBzdGFydHMgZHVyaW5nICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkFkdmVyc2UgRXZlbnRzIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogIFtBZHZlcnNlRXZlbnRdIEFFCiAgICB3aGVyZSBBRS5kYXRlLnRvSW50ZXJ2YWwoKSBzdGFydHMgZHVyaW5nICJNZWFzdXJlbWVudCBQZXJpb2QiCi8qCiAgW09ic2VydmF0aW9uOiBXSE9Db25jZXB0cy4iQWR2ZXJzZSBFdmVudHMiXSBPCiAgICB3aGVyZSBPLmVmZmVjdGl2ZS50b0ludGVydmFsKCkgZHVyaW5nICJNZWFzdXJlbWVudCBQZXJpb2QiCiovCgpkZWZpbmUgIkltbXVuaXphdGlvbnMgQW5kIEFkdmVyc2UgRXZlbnRzIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogIGZyb20KICAgICJEb3NlcyBBZG1pbmlzdGVyZWQgdG8gUGF0aWVudCBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBJLAogICAgIkFkdmVyc2UgRXZlbnRzIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiIE8KICB3aGVyZSBJLnJlYWN0aW9uLmRldGFpbC5yZWZlcmVuY2VzKE8pCiAgcmV0dXJuIHsgaW1tdW5pemF0aW9uOiBJLCBhZHZlcnNlRXZlbnQ6IE8gfQoKZGVmaW5lICJQZW50YXZhbGVudCBEb3NlcyBBZG1pbmlzdGVyZWQgdG8gUGF0aWVudCI6CiAgRWxlbWVudHMuIkRvc2VzIEFkbWluaXN0ZXJlZCB0byBQYXRpZW50IiBJIAogICAgd2hlcmUgSS52YWNjaW5lQ29kZSBpbiBDb25jZXB0cy4iUGVudGF2YWxlbnQgdmFjY2luZXMiCgpkZWZpbmUgIlBlbnRhdmFsZW50IERvc2VzIEFkbWluaXN0ZXJlZCB0byBQYXRpZW50IER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogICJQZW50YXZhbGVudCBEb3NlcyBBZG1pbmlzdGVyZWQgdG8gUGF0aWVudCIgSQogICAgd2hlcmUgSS5vY2N1cnJlbmNlLnRvSW50ZXJ2YWwoKSBzdGFydHMgZHVyaW5nICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIk1lYXNsZXMgYW5kIFJ1YmVsbGEgRG9zZXMgQWRtaW5pc3RlcmVkIHRvIFBhdGllbnQiOgogIEVsZW1lbnRzLiJEb3NlcyBBZG1pbmlzdGVyZWQgdG8gUGF0aWVudCIgSSAKICAgIHdoZXJlIEkudmFjY2luZUNvZGUgaW4gQ29uY2VwdHMuIk1lYXNsZXMgYW5kIHJ1YmVsbGEtY29udGFpbmluZyB2YWNjaW5lcyIKCmRlZmluZSAiTWVhc2xlcyBhbmQgUnViZWxsYSBEb3NlcyBBZG1pbmlzdGVyZWQgdG8gUGF0aWVudCBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICAiTWVhc2xlcyBhbmQgUnViZWxsYSBEb3NlcyBBZG1pbmlzdGVyZWQgdG8gUGF0aWVudCIgSQogICAgd2hlcmUgSS5vY2N1cnJlbmNlLnRvSW50ZXJ2YWwoKSBzdGFydHMgZHVyaW5nICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkNPVklELTE5IERvc2VzIEFkbWluaXN0ZXJlZCB0byBQYXRpZW50IER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogICJEb3NlcyBBZG1pbmlzdGVyZWQgdG8gUGF0aWVudCBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBJIAogICAgd2hlcmUgSS52YWNjaW5lQ29kZSBpbiBDb25jZXB0cy4iQ09WSUQtMTkgdmFjY2luZXMiCgpkZWZpbmUgIkFkdmVyc2UgRXZlbnRzIGZvciBJbW11bml6YXRpb24iOgogIFtBZHZlcnNlRXZlbnRdIEFFCiAgICB3aGVyZSBBRS5hY3R1YWxpdHkgPSAnYWN0dWFsJwoKLyoqIAogKiBAZGVmaW5lIEFkdmVyc2UgZXZlbnRzIGZvciBpbW11bml6YXRpb25zIHdoaWNoIG9jY3VycmVkIGR1cmluZyAob3Igb2JzZXJ2ZWQpIGR1cmluZyBtZWFzdXJlbWVudCBwZXJpb2QKICovCmRlZmluZSAiSW1tdW5pemF0aW9ucyB3aXRoIEFkdmVyc2UgRXZlbnRzIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogICJJbW11bml6YXRpb25zIEFuZCBBZHZlcnNlIEV2ZW50cyBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBJCiAgICByZXR1cm4gSS5pbW11bml6YXRpb24KCi8qKiAKICogQGRlZmluZSBBZHZlcnNlIGV2ZW50cyBmb3IgaW1tdW5pemF0aW9ucyB3aGljaCBvY2N1cnJlZCBkdXJpbmcgKG9yIG9ic2VydmVkKSBkdXJpbmcgbWVhc3VyZW1lbnQgcGVyaW9kCiAqLwpkZWZpbmUgIkFkdmVyc2UgRXZlbnQgUmVhY3Rpb25zIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogICJJbW11bml6YXRpb25zIEFuZCBBZHZlcnNlIEV2ZW50cyBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIiBJCiAgICByZXR1cm4gSS5hZHZlcnNlRXZlbnQKCi8qKiAKICogQGZ1bmN0aW9uCiAqIEBwYXJhbSBpbW11bml6YXRpb24gVGhlIGltbXVuaXphdGlvbiByZWNvcmQgZm9yIHdoaWNoIHRoZSBsb2NhdGlvbiBzaG91bGQgYmUgcmV0cmlldmVkCiAqIEByZXR1cm4gRkhJUi5hZGRyZXNzIFRoZSBsb2NhdGlvbiB0aGF0IHRoZSBpbW11bml6YXRpb24gZXZlbnQgb2NjdXJyZWQKICovCmRlZmluZSBmdW5jdGlvbiBHZXRHZW9ncmFwaGljUmVnaW9uRm9ySW1tdW5pemF0aW9uKGltbXVuaXphdGlvbiBJbW11bml6YXRpb24pOgogICgKICAgIFtMb2NhdGlvbl0gTAogICAgICAgIHdoZXJlIGltbXVuaXphdGlvbi5sb2NhdGlvbi5yZWZlcmVuY2VzKEwpCiAgKS5vbmx5KCkuYWRkcmVzcy5zdGF0ZQoKLyoqIAogKiBAZnVuY3Rpb24KICogQHBhcmFtIGltbXVuaXphdGlvbiBUaGUgaW1tdW5pemF0aW9uIHJlY29yZCBmb3Igd2hpY2ggdGhlIGxvY2F0aW9uIHNob3VsZCBiZSByZXRyaWV2ZWQKICogQHJldHVybiBGSElSLm5hbWUgVGhlIG5hbWUgb2YgdGhlIGxvY2F0aW9uIHRoYXQgdGhlIGltbXVuaXphdGlvbiBldmVudCBvY2N1cnJlZAogKi8KZGVmaW5lIGZ1bmN0aW9uIEdldExvY2F0aW9uTmFtZUZvckltbXVuaXphdGlvbihpbW11bml6YXRpb24gSW1tdW5pemF0aW9uKToKICAoCiAgICBbTG9jYXRpb25dIEwKICAgICAgICB3aGVyZSBpbW11bml6YXRpb24ubG9jYXRpb24ucmVmZXJlbmNlcyhMKQogICkub25seSgpLm5hbWUK"^^xsd:base64Binary ]
  ] ) . # 

# -------------------------------------------------------------------------------------

