WHO SMART Guidelines - HIV
0.4.3 - ci-build

WHO SMART Guidelines - HIV - Local Development build (v0.4.3) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

: HIV.D12.DT Logic - TTL Representation

Draft as of 2025-02-07

Raw ttl | Download

@prefix fhir: <http://hl7.org/fhir/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

# - resource -------------------------------------------------------------------

 a fhir:Library ;
  fhir:nodeRole fhir:treeRoot ;
  fhir:id [ fhir:v "HIVD12DTLogic"] ; # 
  fhir:meta [
    ( fhir:profile [
fhir:v "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"^^xsd:anyURI ;
fhir:link <http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary>     ] [
fhir:v "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"^^xsd:anyURI ;
fhir:link <http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary>     ] [
fhir:v "http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"^^xsd:anyURI ;
fhir:link <http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library>     ] [
fhir:v "http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"^^xsd:anyURI ;
fhir:link <http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module>     ] )
  ] ; # 
  fhir:text [
fhir:status [ fhir:v "extensions" ] ;
fhir:div "<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;\">HIV.D12.DT Logic</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Id: </b></th>\n            <td style=\"padding-left: 4px;\">HIVD12DTLogic</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Version: </b></th>\n            <td style=\"padding-left: 4px;\">0.4.3</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-HIVD12DTLogic.html\">HIV.D12.DT Logic</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/6.0.2/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a></span>\n                        </p>\n                        \n                        \n                        <p style=\"margin-bottom: 5px;\">\n                            <b>code: </b> <span>logic-library</span>\n                        </p>\n                        \n                        \n                    \n                \n                \n            </td>\n        </tr>\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Date: </b></th>\n            <td style=\"padding-left: 4px;\">2025-02-07 14:15:45+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>HIV.D12.DT Logic</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\n        \n\n        \n\n        \n        \n        <tr>\n          <td colspan=\"2\">\n            <table>\n              <tr><th><a id=\"cql-content\"><b>Content: </b></a> text/cql</th></tr>\n              <tr><td><pre><code class=\"language-cql\">/**\nLibrary: HIV.D12.DT Logic\n\n@DecisionID: HIV.D12.DT\n@BusinessRule: Determine recommended screenings and tests\n@Trigger: HIV.D12.Determine recommended screenings and tests\n@HitPolicy: Rule Order\n@Description: Determine recommended screenings and tests\n\nData Concepts:\n\n\nConsolidated guidelines on HIV prevention, testing, treatment, service delivery and monitoring: recommendations for a public health approach (2021).\n*/\n\nlibrary HIVD12DTLogic\n \nusing FHIR version '4.0.1'\n\ninclude HIVCommon version '0.0.1' called HIC\ninclude HIVConcepts called Concepts\ninclude HIVEncounterElements called Elements\ninclude FHIRHelpers version '4.0.1'\n\ninclude WHOCommon called WCom\n\ncontext Patient\n\n/*\n @input: &quot;Reason for Visit&quot;\n @pseudocode: &quot;Reason for visit&quot;='HIV testing services visit'\n */\ndefine &quot;HIV testing services visit&quot;:\n  exists(\n    Elements.&quot;Reason for visit D.DE1&quot; O\n      where O.value ~ Concepts.&quot;HIV testing services visit&quot;\n  )\n\n/*\n @input: &quot;Reason for Visit&quot;\n @pseudocode: &quot;Reason for visit&quot;='ART initiation'\n */\ndefine &quot;ART initiation visit&quot;:\n  exists(\n    Elements.&quot;Reason for visit D.DE1&quot; O\n      where O.value ~ Concepts.&quot;ART initiation&quot;\n  )\n\n/*\n @input: &quot;Reason for Visit&quot;\n @pseudocode: &quot;Reason for visit&quot;='Clinical visit\n */\ndefine &quot;Clinical visit&quot;:\n  exists(\n    Elements.&quot;Reason for visit D.DE1&quot; O\n      where O.value ~ Concepts.&quot;Clinical visit - HIV.D.DE3&quot;\n  )\n\n/*\n @input: &quot;Age&quot;\n @pseudocode: &quot;Age&quot; ≥ 20 years\n */\ndefine &quot;Age 20 or older&quot;:\n  Elements.&quot;Current Patient Age In Years&quot; &gt;= 20\n\n/*\n @input: &quot;Age&quot;\n @pseudocode: &quot;&quot;Age&quot;&lt;20 years\n */\ndefine &quot;Age under 20&quot;:\n  Elements.&quot;Current Patient Age In Years&quot; &lt; 20\n\n /*\n  @input: &quot;Age&quot;\n  @pseudocode: 'Age' ≥ 10 years\n  */\ndefine &quot;Age 10 or older&quot;:\n  Elements.&quot;Current Patient Age In Years&quot; &gt;= 10\n\n/*\n @input: &quot;HIV test result&quot;\n @pseudocode: &quot;HIV test result&quot;='HIV-positive'\n */\ndefine &quot;HIV Positive test result&quot;:\n  exists(\n    Elements.&quot;HIV test result&quot; O\n      where O.value ~ Concepts.&quot;HIV-positive&quot;\n  )\n\n/*\n @input: &quot;On ART&quot;\n @pseudocode: &quot;On ART&quot;=False\n */\ndefine &quot;Not on ART&quot;:\n  not(exists(\n    Elements.&quot;On ART D.DE38&quot;\n  ))\n\n/*\n @input: &quot;On ART&quot;\n @pseudocode: &quot;On ART&quot;=True\n */\ndefine &quot;On ART&quot;:\n  exists(\n    Elements.&quot;On ART D.DE38&quot;\n  )\n\n/*\n @input: &quot;Gender&quot;\n @pseudocode: &quot;Gender&quot;='Female'\n */\ndefine &quot;Client is female&quot;:\n  Elements.&quot;Female&quot;\n\n/*\n @input: &quot;CD4 count&quot;\n @pseudocode: &quot;CD4 count&quot; ≤ 100 cells/mm3\n */\ndefine &quot;CD4 less than or equal to 100 cells/mm3&quot;:\n  exists(\n    Elements.&quot;CD4 count D.DE364&quot; O\n      where O.value &lt;= 100\n  )\n\n/*\n @input: &quot;CD4 count&quot;\n @pseudocode: &quot;CD4 count&quot; ≤ 200 cells/mm3\n */\ndefine &quot;CD4 less than or equal to 200 cells/mm3&quot;:\n  exists(\n    Elements.&quot;CD4 count D.DE364&quot; O\n      where O.value &lt;= 200\n  )\n\n/*\n @input: &quot;Current medications&quot;\n @pseudocode: &quot;Current medications&quot;='AZT'\n */\ndefine &quot;On AZT&quot;:\n  exists(\n    Elements.&quot;On ART D.DE38&quot; MS\n      where MS.medication ~ Concepts.&quot;AZT&quot;\n  )\n\n/*\n @input: &quot;Current medications&quot;\n @pseudocode: &quot;Current medications&quot;='TDF'\n */\ndefine &quot;On TDF&quot;:\n  exists(\n    Elements.&quot;On ART D.DE38&quot; MS\n      where MS.medication ~ Concepts.&quot;TDF - HIV.D.DE135&quot;\n  )\n\n/*\n @input: &quot;Suspicion of treatment failure or interruption&quot;\n @pseudocode: &quot;Suspicion of treatment failure or interruption&quot;=True\n */\ndefine &quot;Suspicion of treatment failure or interruption&quot;:\n  exists(\n    Elements.&quot;Suspicion of treatment failure or interruption Observation&quot; O\n      where O.value = true\n  )\n\n\n/*\n @dynamicValue: Guidance\n */\ndefine &quot;Guidance&quot;:\n  Combine({\n    if &quot;HIV testing services visit&quot; and &quot;Age 20 or older&quot; and &quot;HIV Positive test result&quot; and &quot;Not on ART&quot;\n      then 'Recommended actions:\nCD4 cell count\nTB symptom screening\n\nDesirable actions:\nHBV (HBsAg) serology\nHCV serology\nScreen for sexually transmitted infections   \nAssess for major noncommunicable chronic diseases and comorbidities\n\nGeneral care activities recommended: \nDetermine WHO clinical stage based on past and current HIV-related conditions\nPrepare for ART\nPrepare, assess and support adherence\nProvide family planning and contraception\nSupport disclosure and partner notification\nCounsel on risk reduction and combination HIV prevention approaches\nAssess, prevent and manage noncommunicable diseases\nScreen for and manage mental health problems\nScreen for and manage and substance use issues\nProvide psychosocial counselling and support\nManage pain and symptoms\nConduct a nutritional assessment and counsel on nutrition\n\nPreventing and treating coinfections: \nProvide co-trimoxazole preventive therapy\nConduct intensified TB case-finding\nProvide isoniazid preventive therapy\nScreen for cryptococcal infection and fungal prophylaxis\nPrevent malaria (insecticide- treated  bed-nets and prophylaxis)\nScreen for sexually transmitted infections\nAssess for vaccine-preventable diseases'\n    else '',\n    if &quot;HIV testing services visit&quot; and &quot;Age under 20&quot; and &quot;HIV Positive test result&quot; and &quot;Not on ART&quot;\n      then 'Recommended:\nCD4 cell count\nTB symptom screening\n\nDesirable: \nHBV (HBsAg) serology\nHCV serology\nScreen for sexually transmitted infections   \nAssess for major noncommunicable chronic diseases and comorbidities\n\nGeneral care activities recommended:\n Determine WHO clinical stage based on past and current HIV-related conditions\nPrepare for ART\nPrepare, assess and support adherence\nProvide family planning and contraception\nSupport disclosure and partner notification\nCounsel on risk reduction and combination HIV prevention approaches\nAssess, prevent and manage noncommunicable diseases\nScreen for and manage mental health problems\nScreen for and manage and substance use issues\nProvide psychosocial counselling and support\nManage pain and symptoms\nConduct a nutritional, growth and development assessment\n\nPreventing and treating coinfections: \nProvide co-trimoxazole preventive therapy\nConduct intensified TB case-finding\nProvide isoniazid preventive therapy\nScreen for cryptococcal infection and fungal prophylaxis\nPrevent malaria (insecticide- treated  bed-nets and prophylaxis)\nScreen for sexually transmitted infections\nAssess for vaccine-preventable diseases'\n    else '',\n    if &quot;HIV testing services visit&quot; and &quot;HIV Positive test result&quot; and &quot;Not on ART&quot; and &quot;CD4 less than or equal to 100 cells/mm3&quot;\n      then 'Desirable actions:\nCryptococcus antigen test'\n    else '',\n    if &quot;HIV testing services visit&quot; and &quot;HIV Positive test result&quot; and &quot;Not on ART&quot; and &quot;Client is female&quot;\n      then 'Desirable actions: \nPregnancy test'\n    else '',\n    if &quot;ART initiation visit&quot; and &quot;Not on ART&quot;\n      then 'Recommended: \nBaseline CD4 cell count for identifying advanced HIV disease\nAge-appropriate TB symptom screening\n\nDesirable: \nBlood pressure measurement \n\nGeneral care activities recommended:\nPreparing people for ART\nWHO clinical staging, past and current HIV- related conditions\nPreparing, assessing and supporting adherence\nPregnancy status, family planning and contraception\nSupport for disclosure and partner notification\nRisk-reduction counselling and combination and HIV prevention approaches\nScreening for, preventing and managing noncommunicable diseases\nScreening for and managing mental health problems and substance use\nPsychosocial counselling and support\nManaging pain and symptoms\nNutritional assessment and counselling\nInfant and child feeding\nNutritional, growth and development assessment for children and adolescents\n\nPreventing and treating coinfections: \nCo-trimoxazole preventive therapy\nIntensified TB case- finding\nIsoniazid preventive therapy\nScreening for cryptococcal infection and fungal prophylaxis when appropriate\nScreening for hepatitis B and C\nMalaria prevention (insecticide-treated bed nets and prophylaxis)\nScreening for sexually transmitted infections\nPreventing and screening for cervical cancer\nAssessing for vaccine- preventable diseases other than HBV and HCV infection'\n    else '',\n    if &quot;ART initiation visit&quot; and &quot;Age 10 or older&quot; and &quot;Not on ART&quot; and &quot;CD4 less than or equal to 200 cells/mm3&quot;\n      then 'Perform a cryptococcal antigen for adults and adolescents'\n    else '',\n    if &quot;ART initiation visit&quot; and &quot;Not on ART&quot; and &quot;On AZT&quot;\n      then 'Desirable actions: \nHaemoglobin test'\n    else '',\n    if &quot;ART initiation visit&quot; and &quot;Not on ART&quot; and &quot;On TDF&quot;\n      then 'Desirable actions: \nSerum creatinine test\nEstimated glomerular filtration rate (eGFR)'\n    else '',\n    if &quot;ART initiation visit&quot; and &quot;Not on ART&quot; and &quot;Client is female&quot;\n      then 'Desirable actions: \nPregnancy test'\n    else '',\n    if &quot;Clinical visit&quot; and &quot;Age 20 or older&quot; and &quot;On ART&quot;\n      then 'Recommended actions:\nSchedule the following viral load tests: \nHIV viral load test ≤ (ART start date + 6 months)\nHIV viral load test ≤ (ART start date + 12 months)\nHIV viral load test every 12 months thereafter\nPerform a CD4 cell count every 6 months until &quot;&quot;Established on ART&quot;&quot; = TRUE\n\nDesirable actions:\nSerum creatinine and estimated glomerular filtration rate for TDF\n\nRecommended general care activities: \nAdherence support interventions should be provided to people on ART (p xxxix of source).\nManage current medications.\nProvide family planning and contraception.\nSupport disclosure and partner notification.\nCounsel on risk reduction and combination HIV prevention approaches.\nAssess, prevent and manage noncommunicable diseases.\nScreen for and manage mental health problems.\nScreen for and manage and substance use issues.\nProvide psychosocial counselling and support.\nManage pain and symptoms.\nConduct a nutritional assessment and counsel on nutrition.\n\nPreventing and treating coinfections:\nProvide co-trimoxazole preventive therapy\nPrevent malaria (insecticide- treated  bed-nets and prophylaxis)\nScreen for sexually transmitted infections\nAssess for vaccine-preventable diseases'\n    else '',\n    if &quot;Clinical visit&quot; and &quot;Age under 20&quot; and &quot;On ART&quot;\n      then 'Recommended actions: \nSchedule viral load tests on the following dates: \nHIV viral load test ≤ (ART start date + 6 months)\nHIV viral load test ≤ (ART start date + 12 months)\nHIV viral load test every 12 months thereafter\nCD4 cell count every 6 months until &quot;&quot;Established on ART&quot;&quot; = TRUE\n\nRecommended general care activities: \nPrepare, assess and support adherence.\nManage current medications.\nProvide family planning and contraception.\nSupport disclosure and partner notification.\nCounsel on risk reduction and combination HIV prevention approaches.\nAssess, prevent and manage noncommunicable diseases.\nScreen for and manage mental health problems.\nScreen for and manage and substance use issues.\nProvide psychosocial counselling and support.\nManage pain and symptoms.\nConduct a nutritional, growth and development assessment.\n\nPreventing and treating coinfections:\nProvide co-trimoxazole preventive therapy\nPrevent malaria (insecticide- treated  bed-nets and prophylaxis)\nScreen for sexually transmitted infections\nAssess for vaccine-preventable diseases'\n    else '',\n    if &quot;Clinical visit&quot; and &quot;Age under 20&quot; and &quot;Client is female&quot;\n      then 'Pregnancy test'\n    else '',\n    if &quot;Clinical visit&quot; and &quot;On ART&quot; and &quot;On TDF&quot;\n      then 'Desirable actions: \nSerum creatinine\nEstimated glomerular filtration rate for TDF'\n    else '',\n    if &quot;Clinical visit&quot; and &quot;Age 20 or older&quot; and &quot;Suspicion of treatment failure or interruption&quot;\n      then 'Desirable actions: \nHBV (HBsAg) serology (before switching ART regimen if this testing was not done or if the result was negative at baseline and the patient was not vaccinated thereafter) \n\nRecommended general care activities: \nPrepare, assess and support adherence.\nManage current medications.\nProvide family planning and contraception.\nSupport disclosure and partner notification.\nCounsel on risk reduction and combination HIV prevention approaches.\nAssess, prevent and manage noncommunicable diseases.\nScreen for and manage mental health problems.\nScreen for and manage and substance use issues.\nProvide psychosocial counselling and support.\nManage pain and symptoms.\nConduct a nutritional assessment and counsel on nutrition.\n\nPreventing and treating coinfections: \nProvide co-trimoxazole preventive therapy\nConduct intensified TB case-finding\nPrevent malaria (insecticide- treated  bed-nets and prophylaxis)\nScreen for sexually transmitted infections\nAssess for vaccine-preventable diseases'\n    else '',\n    if &quot;Clinical visit&quot; and &quot;Age 20 or older&quot; and &quot;Suspicion of treatment failure or interruption&quot;\n      then 'Desirable actions: \nHBV (HBsAg) serology (before switching ART regimen if this testing was not done or if the result was negative at baseline and the patient was not vaccinated thereafter)\n\nRecommended general care activities:\nPrepare, assess and support adherence.\nManage current medications.\nProvide family planning and contraception.\nSupport disclosure and partner notification.\nCounsel on risk reduction and combination HIV prevention approaches.\nAssess, prevent and manage noncommunicable diseases.\nScreen for and manage mental health problems.\nScreen for and manage and substance use issues.\nProvide psychosocial counselling and support.\nManage pain and symptoms.\nConduct a nutritional, growth and development assessment.\n\nPreventing and treating coinfections:\nProvide co-trimoxazole preventive therapy\nConduct intensified TB case-finding\nPrevent malaria (insecticide- treated  bed-nets and prophylaxis)\nScreen for sexually transmitted infections\nAssess for vaccine-preventable diseases'\n    else ''\n  })</code></pre></td></tr>\n            </table>\n          </td>\n        </tr>\n        \n        \n        \n    </table>\n</div>\n</div>"
  ] ; # 
  fhir:extension ( [
fhir:url [ fhir:v "http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability"^^xsd:anyURI ] ;
fhir:value [ fhir:v "computable" ]
  ] ) ; # 
  fhir:url [ fhir:v "http://smart.who.int/hiv/Library/HIVD12DTLogic"^^xsd:anyURI] ; # 
  fhir:version [ fhir:v "0.4.3"] ; # 
  fhir:name [ fhir:v "HIVD12DTLogic"] ; # 
  fhir:title [ fhir:v "HIV.D12.DT Logic"] ; # 
  fhir:status [ fhir:v "draft"] ; # 
  fhir:experimental [ fhir:v "true"^^xsd:boolean] ; # 
  fhir:type [
    ( fhir:coding [
fhir:system [ fhir:v "http://terminology.hl7.org/CodeSystem/library-type"^^xsd:anyURI ] ;
fhir:code [ fhir:v "logic-library" ]     ] )
  ] ; # 
  fhir:date [ fhir:v "2025-02-07T14:15:45+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 "HIV.D12.DT Logic"] ; # 
  fhir:content ( [
fhir:contentType [ fhir:v "text/cql" ] ;
fhir:data [ fhir:v "LyoqCkxpYnJhcnk6IEhJVi5EMTIuRFQgTG9naWMKCkBEZWNpc2lvbklEOiBISVYuRDEyLkRUCkBCdXNpbmVzc1J1bGU6IERldGVybWluZSByZWNvbW1lbmRlZCBzY3JlZW5pbmdzIGFuZCB0ZXN0cwpAVHJpZ2dlcjogSElWLkQxMi5EZXRlcm1pbmUgcmVjb21tZW5kZWQgc2NyZWVuaW5ncyBhbmQgdGVzdHMKQEhpdFBvbGljeTogUnVsZSBPcmRlcgpARGVzY3JpcHRpb246IERldGVybWluZSByZWNvbW1lbmRlZCBzY3JlZW5pbmdzIGFuZCB0ZXN0cwoKRGF0YSBDb25jZXB0czoKCgpDb25zb2xpZGF0ZWQgZ3VpZGVsaW5lcyBvbiBISVYgcHJldmVudGlvbiwgdGVzdGluZywgdHJlYXRtZW50LCBzZXJ2aWNlIGRlbGl2ZXJ5IGFuZCBtb25pdG9yaW5nOiByZWNvbW1lbmRhdGlvbnMgZm9yIGEgcHVibGljIGhlYWx0aCBhcHByb2FjaCAoMjAyMSkuCiovCgpsaWJyYXJ5IEhJVkQxMkRUTG9naWMKIAp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBISVZDb21tb24gdmVyc2lvbiAnMC4wLjEnIGNhbGxlZCBISUMKaW5jbHVkZSBISVZDb25jZXB0cyBjYWxsZWQgQ29uY2VwdHMKaW5jbHVkZSBISVZFbmNvdW50ZXJFbGVtZW50cyBjYWxsZWQgRWxlbWVudHMKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgV0hPQ29tbW9uIGNhbGxlZCBXQ29tCgpjb250ZXh0IFBhdGllbnQKCi8qCiBAaW5wdXQ6ICJSZWFzb24gZm9yIFZpc2l0IgogQHBzZXVkb2NvZGU6ICJSZWFzb24gZm9yIHZpc2l0Ij0nSElWIHRlc3Rpbmcgc2VydmljZXMgdmlzaXQnCiAqLwpkZWZpbmUgIkhJViB0ZXN0aW5nIHNlcnZpY2VzIHZpc2l0IjoKICBleGlzdHMoCiAgICBFbGVtZW50cy4iUmVhc29uIGZvciB2aXNpdCBELkRFMSIgTwogICAgICB3aGVyZSBPLnZhbHVlIH4gQ29uY2VwdHMuIkhJViB0ZXN0aW5nIHNlcnZpY2VzIHZpc2l0IgogICkKCi8qCiBAaW5wdXQ6ICJSZWFzb24gZm9yIFZpc2l0IgogQHBzZXVkb2NvZGU6ICJSZWFzb24gZm9yIHZpc2l0Ij0nQVJUIGluaXRpYXRpb24nCiAqLwpkZWZpbmUgIkFSVCBpbml0aWF0aW9uIHZpc2l0IjoKICBleGlzdHMoCiAgICBFbGVtZW50cy4iUmVhc29uIGZvciB2aXNpdCBELkRFMSIgTwogICAgICB3aGVyZSBPLnZhbHVlIH4gQ29uY2VwdHMuIkFSVCBpbml0aWF0aW9uIgogICkKCi8qCiBAaW5wdXQ6ICJSZWFzb24gZm9yIFZpc2l0IgogQHBzZXVkb2NvZGU6ICJSZWFzb24gZm9yIHZpc2l0Ij0nQ2xpbmljYWwgdmlzaXQKICovCmRlZmluZSAiQ2xpbmljYWwgdmlzaXQiOgogIGV4aXN0cygKICAgIEVsZW1lbnRzLiJSZWFzb24gZm9yIHZpc2l0IEQuREUxIiBPCiAgICAgIHdoZXJlIE8udmFsdWUgfiBDb25jZXB0cy4iQ2xpbmljYWwgdmlzaXQgLSBISVYuRC5ERTMiCiAgKQoKLyoKIEBpbnB1dDogIkFnZSIKIEBwc2V1ZG9jb2RlOiAiQWdlIiDiiaUgMjAgeWVhcnMKICovCmRlZmluZSAiQWdlIDIwIG9yIG9sZGVyIjoKICBFbGVtZW50cy4iQ3VycmVudCBQYXRpZW50IEFnZSBJbiBZZWFycyIgPj0gMjAKCi8qCiBAaW5wdXQ6ICJBZ2UiCiBAcHNldWRvY29kZTogIiJBZ2UiPDIwIHllYXJzCiAqLwpkZWZpbmUgIkFnZSB1bmRlciAyMCI6CiAgRWxlbWVudHMuIkN1cnJlbnQgUGF0aWVudCBBZ2UgSW4gWWVhcnMiIDwgMjAKCiAvKgogIEBpbnB1dDogIkFnZSIKICBAcHNldWRvY29kZTogJ0FnZScg4omlIDEwIHllYXJzCiAgKi8KZGVmaW5lICJBZ2UgMTAgb3Igb2xkZXIiOgogIEVsZW1lbnRzLiJDdXJyZW50IFBhdGllbnQgQWdlIEluIFllYXJzIiA+PSAxMAoKLyoKIEBpbnB1dDogIkhJViB0ZXN0IHJlc3VsdCIKIEBwc2V1ZG9jb2RlOiAiSElWIHRlc3QgcmVzdWx0Ij0nSElWLXBvc2l0aXZlJwogKi8KZGVmaW5lICJISVYgUG9zaXRpdmUgdGVzdCByZXN1bHQiOgogIGV4aXN0cygKICAgIEVsZW1lbnRzLiJISVYgdGVzdCByZXN1bHQiIE8KICAgICAgd2hlcmUgTy52YWx1ZSB+IENvbmNlcHRzLiJISVYtcG9zaXRpdmUiCiAgKQoKLyoKIEBpbnB1dDogIk9uIEFSVCIKIEBwc2V1ZG9jb2RlOiAiT24gQVJUIj1GYWxzZQogKi8KZGVmaW5lICJOb3Qgb24gQVJUIjoKICBub3QoZXhpc3RzKAogICAgRWxlbWVudHMuIk9uIEFSVCBELkRFMzgiCiAgKSkKCi8qCiBAaW5wdXQ6ICJPbiBBUlQiCiBAcHNldWRvY29kZTogIk9uIEFSVCI9VHJ1ZQogKi8KZGVmaW5lICJPbiBBUlQiOgogIGV4aXN0cygKICAgIEVsZW1lbnRzLiJPbiBBUlQgRC5ERTM4IgogICkKCi8qCiBAaW5wdXQ6ICJHZW5kZXIiCiBAcHNldWRvY29kZTogIkdlbmRlciI9J0ZlbWFsZScKICovCmRlZmluZSAiQ2xpZW50IGlzIGZlbWFsZSI6CiAgRWxlbWVudHMuIkZlbWFsZSIKCi8qCiBAaW5wdXQ6ICJDRDQgY291bnQiCiBAcHNldWRvY29kZTogIkNENCBjb3VudCIg4omkIDEwMCBjZWxscy9tbTMKICovCmRlZmluZSAiQ0Q0IGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDAgY2VsbHMvbW0zIjoKICBleGlzdHMoCiAgICBFbGVtZW50cy4iQ0Q0IGNvdW50IEQuREUzNjQiIE8KICAgICAgd2hlcmUgTy52YWx1ZSA8PSAxMDAKICApCgovKgogQGlucHV0OiAiQ0Q0IGNvdW50IgogQHBzZXVkb2NvZGU6ICJDRDQgY291bnQiIOKJpCAyMDAgY2VsbHMvbW0zCiAqLwpkZWZpbmUgIkNENCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjAwIGNlbGxzL21tMyI6CiAgZXhpc3RzKAogICAgRWxlbWVudHMuIkNENCBjb3VudCBELkRFMzY0IiBPCiAgICAgIHdoZXJlIE8udmFsdWUgPD0gMjAwCiAgKQoKLyoKIEBpbnB1dDogIkN1cnJlbnQgbWVkaWNhdGlvbnMiCiBAcHNldWRvY29kZTogIkN1cnJlbnQgbWVkaWNhdGlvbnMiPSdBWlQnCiAqLwpkZWZpbmUgIk9uIEFaVCI6CiAgZXhpc3RzKAogICAgRWxlbWVudHMuIk9uIEFSVCBELkRFMzgiIE1TCiAgICAgIHdoZXJlIE1TLm1lZGljYXRpb24gfiBDb25jZXB0cy4iQVpUIgogICkKCi8qCiBAaW5wdXQ6ICJDdXJyZW50IG1lZGljYXRpb25zIgogQHBzZXVkb2NvZGU6ICJDdXJyZW50IG1lZGljYXRpb25zIj0nVERGJwogKi8KZGVmaW5lICJPbiBUREYiOgogIGV4aXN0cygKICAgIEVsZW1lbnRzLiJPbiBBUlQgRC5ERTM4IiBNUwogICAgICB3aGVyZSBNUy5tZWRpY2F0aW9uIH4gQ29uY2VwdHMuIlRERiAtIEhJVi5ELkRFMTM1IgogICkKCi8qCiBAaW5wdXQ6ICJTdXNwaWNpb24gb2YgdHJlYXRtZW50IGZhaWx1cmUgb3IgaW50ZXJydXB0aW9uIgogQHBzZXVkb2NvZGU6ICJTdXNwaWNpb24gb2YgdHJlYXRtZW50IGZhaWx1cmUgb3IgaW50ZXJydXB0aW9uIj1UcnVlCiAqLwpkZWZpbmUgIlN1c3BpY2lvbiBvZiB0cmVhdG1lbnQgZmFpbHVyZSBvciBpbnRlcnJ1cHRpb24iOgogIGV4aXN0cygKICAgIEVsZW1lbnRzLiJTdXNwaWNpb24gb2YgdHJlYXRtZW50IGZhaWx1cmUgb3IgaW50ZXJydXB0aW9uIE9ic2VydmF0aW9uIiBPCiAgICAgIHdoZXJlIE8udmFsdWUgPSB0cnVlCiAgKQoKCi8qCiBAZHluYW1pY1ZhbHVlOiBHdWlkYW5jZQogKi8KZGVmaW5lICJHdWlkYW5jZSI6CiAgQ29tYmluZSh7CiAgICBpZiAiSElWIHRlc3Rpbmcgc2VydmljZXMgdmlzaXQiIGFuZCAiQWdlIDIwIG9yIG9sZGVyIiBhbmQgIkhJViBQb3NpdGl2ZSB0ZXN0IHJlc3VsdCIgYW5kICJOb3Qgb24gQVJUIgogICAgICB0aGVuICdSZWNvbW1lbmRlZCBhY3Rpb25zOgpDRDQgY2VsbCBjb3VudApUQiBzeW1wdG9tIHNjcmVlbmluZwoKRGVzaXJhYmxlIGFjdGlvbnM6CkhCViAoSEJzQWcpIHNlcm9sb2d5CkhDViBzZXJvbG9neQpTY3JlZW4gZm9yIHNleHVhbGx5IHRyYW5zbWl0dGVkIGluZmVjdGlvbnMgICAKQXNzZXNzIGZvciBtYWpvciBub25jb21tdW5pY2FibGUgY2hyb25pYyBkaXNlYXNlcyBhbmQgY29tb3JiaWRpdGllcwoKR2VuZXJhbCBjYXJlIGFjdGl2aXRpZXMgcmVjb21tZW5kZWQ6IApEZXRlcm1pbmUgV0hPIGNsaW5pY2FsIHN0YWdlIGJhc2VkIG9uIHBhc3QgYW5kIGN1cnJlbnQgSElWLXJlbGF0ZWQgY29uZGl0aW9ucwpQcmVwYXJlIGZvciBBUlQKUHJlcGFyZSwgYXNzZXNzIGFuZCBzdXBwb3J0IGFkaGVyZW5jZQpQcm92aWRlIGZhbWlseSBwbGFubmluZyBhbmQgY29udHJhY2VwdGlvbgpTdXBwb3J0IGRpc2Nsb3N1cmUgYW5kIHBhcnRuZXIgbm90aWZpY2F0aW9uCkNvdW5zZWwgb24gcmlzayByZWR1Y3Rpb24gYW5kIGNvbWJpbmF0aW9uIEhJViBwcmV2ZW50aW9uIGFwcHJvYWNoZXMKQXNzZXNzLCBwcmV2ZW50IGFuZCBtYW5hZ2Ugbm9uY29tbXVuaWNhYmxlIGRpc2Vhc2VzClNjcmVlbiBmb3IgYW5kIG1hbmFnZSBtZW50YWwgaGVhbHRoIHByb2JsZW1zClNjcmVlbiBmb3IgYW5kIG1hbmFnZSBhbmQgc3Vic3RhbmNlIHVzZSBpc3N1ZXMKUHJvdmlkZSBwc3ljaG9zb2NpYWwgY291bnNlbGxpbmcgYW5kIHN1cHBvcnQKTWFuYWdlIHBhaW4gYW5kIHN5bXB0b21zCkNvbmR1Y3QgYSBudXRyaXRpb25hbCBhc3Nlc3NtZW50IGFuZCBjb3Vuc2VsIG9uIG51dHJpdGlvbgoKUHJldmVudGluZyBhbmQgdHJlYXRpbmcgY29pbmZlY3Rpb25zOiAKUHJvdmlkZSBjby10cmltb3hhem9sZSBwcmV2ZW50aXZlIHRoZXJhcHkKQ29uZHVjdCBpbnRlbnNpZmllZCBUQiBjYXNlLWZpbmRpbmcKUHJvdmlkZSBpc29uaWF6aWQgcHJldmVudGl2ZSB0aGVyYXB5ClNjcmVlbiBmb3IgY3J5cHRvY29jY2FsIGluZmVjdGlvbiBhbmQgZnVuZ2FsIHByb3BoeWxheGlzClByZXZlbnQgbWFsYXJpYSAoaW5zZWN0aWNpZGUtIHRyZWF0ZWQgIGJlZC1uZXRzIGFuZCBwcm9waHlsYXhpcykKU2NyZWVuIGZvciBzZXh1YWxseSB0cmFuc21pdHRlZCBpbmZlY3Rpb25zCkFzc2VzcyBmb3IgdmFjY2luZS1wcmV2ZW50YWJsZSBkaXNlYXNlcycKICAgIGVsc2UgJycsCiAgICBpZiAiSElWIHRlc3Rpbmcgc2VydmljZXMgdmlzaXQiIGFuZCAiQWdlIHVuZGVyIDIwIiBhbmQgIkhJViBQb3NpdGl2ZSB0ZXN0IHJlc3VsdCIgYW5kICJOb3Qgb24gQVJUIgogICAgICB0aGVuICdSZWNvbW1lbmRlZDoKQ0Q0IGNlbGwgY291bnQKVEIgc3ltcHRvbSBzY3JlZW5pbmcKCkRlc2lyYWJsZTogCkhCViAoSEJzQWcpIHNlcm9sb2d5CkhDViBzZXJvbG9neQpTY3JlZW4gZm9yIHNleHVhbGx5IHRyYW5zbWl0dGVkIGluZmVjdGlvbnMgICAKQXNzZXNzIGZvciBtYWpvciBub25jb21tdW5pY2FibGUgY2hyb25pYyBkaXNlYXNlcyBhbmQgY29tb3JiaWRpdGllcwoKR2VuZXJhbCBjYXJlIGFjdGl2aXRpZXMgcmVjb21tZW5kZWQ6CiBEZXRlcm1pbmUgV0hPIGNsaW5pY2FsIHN0YWdlIGJhc2VkIG9uIHBhc3QgYW5kIGN1cnJlbnQgSElWLXJlbGF0ZWQgY29uZGl0aW9ucwpQcmVwYXJlIGZvciBBUlQKUHJlcGFyZSwgYXNzZXNzIGFuZCBzdXBwb3J0IGFkaGVyZW5jZQpQcm92aWRlIGZhbWlseSBwbGFubmluZyBhbmQgY29udHJhY2VwdGlvbgpTdXBwb3J0IGRpc2Nsb3N1cmUgYW5kIHBhcnRuZXIgbm90aWZpY2F0aW9uCkNvdW5zZWwgb24gcmlzayByZWR1Y3Rpb24gYW5kIGNvbWJpbmF0aW9uIEhJViBwcmV2ZW50aW9uIGFwcHJvYWNoZXMKQXNzZXNzLCBwcmV2ZW50IGFuZCBtYW5hZ2Ugbm9uY29tbXVuaWNhYmxlIGRpc2Vhc2VzClNjcmVlbiBmb3IgYW5kIG1hbmFnZSBtZW50YWwgaGVhbHRoIHByb2JsZW1zClNjcmVlbiBmb3IgYW5kIG1hbmFnZSBhbmQgc3Vic3RhbmNlIHVzZSBpc3N1ZXMKUHJvdmlkZSBwc3ljaG9zb2NpYWwgY291bnNlbGxpbmcgYW5kIHN1cHBvcnQKTWFuYWdlIHBhaW4gYW5kIHN5bXB0b21zCkNvbmR1Y3QgYSBudXRyaXRpb25hbCwgZ3Jvd3RoIGFuZCBkZXZlbG9wbWVudCBhc3Nlc3NtZW50CgpQcmV2ZW50aW5nIGFuZCB0cmVhdGluZyBjb2luZmVjdGlvbnM6IApQcm92aWRlIGNvLXRyaW1veGF6b2xlIHByZXZlbnRpdmUgdGhlcmFweQpDb25kdWN0IGludGVuc2lmaWVkIFRCIGNhc2UtZmluZGluZwpQcm92aWRlIGlzb25pYXppZCBwcmV2ZW50aXZlIHRoZXJhcHkKU2NyZWVuIGZvciBjcnlwdG9jb2NjYWwgaW5mZWN0aW9uIGFuZCBmdW5nYWwgcHJvcGh5bGF4aXMKUHJldmVudCBtYWxhcmlhIChpbnNlY3RpY2lkZS0gdHJlYXRlZCAgYmVkLW5ldHMgYW5kIHByb3BoeWxheGlzKQpTY3JlZW4gZm9yIHNleHVhbGx5IHRyYW5zbWl0dGVkIGluZmVjdGlvbnMKQXNzZXNzIGZvciB2YWNjaW5lLXByZXZlbnRhYmxlIGRpc2Vhc2VzJwogICAgZWxzZSAnJywKICAgIGlmICJISVYgdGVzdGluZyBzZXJ2aWNlcyB2aXNpdCIgYW5kICJISVYgUG9zaXRpdmUgdGVzdCByZXN1bHQiIGFuZCAiTm90IG9uIEFSVCIgYW5kICJDRDQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMCBjZWxscy9tbTMiCiAgICAgIHRoZW4gJ0Rlc2lyYWJsZSBhY3Rpb25zOgpDcnlwdG9jb2NjdXMgYW50aWdlbiB0ZXN0JwogICAgZWxzZSAnJywKICAgIGlmICJISVYgdGVzdGluZyBzZXJ2aWNlcyB2aXNpdCIgYW5kICJISVYgUG9zaXRpdmUgdGVzdCByZXN1bHQiIGFuZCAiTm90IG9uIEFSVCIgYW5kICJDbGllbnQgaXMgZmVtYWxlIgogICAgICB0aGVuICdEZXNpcmFibGUgYWN0aW9uczogClByZWduYW5jeSB0ZXN0JwogICAgZWxzZSAnJywKICAgIGlmICJBUlQgaW5pdGlhdGlvbiB2aXNpdCIgYW5kICJOb3Qgb24gQVJUIgogICAgICB0aGVuICdSZWNvbW1lbmRlZDogCkJhc2VsaW5lIENENCBjZWxsIGNvdW50IGZvciBpZGVudGlmeWluZyBhZHZhbmNlZCBISVYgZGlzZWFzZQpBZ2UtYXBwcm9wcmlhdGUgVEIgc3ltcHRvbSBzY3JlZW5pbmcKCkRlc2lyYWJsZTogCkJsb29kIHByZXNzdXJlIG1lYXN1cmVtZW50IAoKR2VuZXJhbCBjYXJlIGFjdGl2aXRpZXMgcmVjb21tZW5kZWQ6ClByZXBhcmluZyBwZW9wbGUgZm9yIEFSVApXSE8gY2xpbmljYWwgc3RhZ2luZywgcGFzdCBhbmQgY3VycmVudCBISVYtIHJlbGF0ZWQgY29uZGl0aW9ucwpQcmVwYXJpbmcsIGFzc2Vzc2luZyBhbmQgc3VwcG9ydGluZyBhZGhlcmVuY2UKUHJlZ25hbmN5IHN0YXR1cywgZmFtaWx5IHBsYW5uaW5nIGFuZCBjb250cmFjZXB0aW9uClN1cHBvcnQgZm9yIGRpc2Nsb3N1cmUgYW5kIHBhcnRuZXIgbm90aWZpY2F0aW9uClJpc2stcmVkdWN0aW9uIGNvdW5zZWxsaW5nIGFuZCBjb21iaW5hdGlvbiBhbmQgSElWIHByZXZlbnRpb24gYXBwcm9hY2hlcwpTY3JlZW5pbmcgZm9yLCBwcmV2ZW50aW5nIGFuZCBtYW5hZ2luZyBub25jb21tdW5pY2FibGUgZGlzZWFzZXMKU2NyZWVuaW5nIGZvciBhbmQgbWFuYWdpbmcgbWVudGFsIGhlYWx0aCBwcm9ibGVtcyBhbmQgc3Vic3RhbmNlIHVzZQpQc3ljaG9zb2NpYWwgY291bnNlbGxpbmcgYW5kIHN1cHBvcnQKTWFuYWdpbmcgcGFpbiBhbmQgc3ltcHRvbXMKTnV0cml0aW9uYWwgYXNzZXNzbWVudCBhbmQgY291bnNlbGxpbmcKSW5mYW50IGFuZCBjaGlsZCBmZWVkaW5nCk51dHJpdGlvbmFsLCBncm93dGggYW5kIGRldmVsb3BtZW50IGFzc2Vzc21lbnQgZm9yIGNoaWxkcmVuIGFuZCBhZG9sZXNjZW50cwoKUHJldmVudGluZyBhbmQgdHJlYXRpbmcgY29pbmZlY3Rpb25zOiAKQ28tdHJpbW94YXpvbGUgcHJldmVudGl2ZSB0aGVyYXB5CkludGVuc2lmaWVkIFRCIGNhc2UtIGZpbmRpbmcKSXNvbmlhemlkIHByZXZlbnRpdmUgdGhlcmFweQpTY3JlZW5pbmcgZm9yIGNyeXB0b2NvY2NhbCBpbmZlY3Rpb24gYW5kIGZ1bmdhbCBwcm9waHlsYXhpcyB3aGVuIGFwcHJvcHJpYXRlClNjcmVlbmluZyBmb3IgaGVwYXRpdGlzIEIgYW5kIEMKTWFsYXJpYSBwcmV2ZW50aW9uIChpbnNlY3RpY2lkZS10cmVhdGVkIGJlZCBuZXRzIGFuZCBwcm9waHlsYXhpcykKU2NyZWVuaW5nIGZvciBzZXh1YWxseSB0cmFuc21pdHRlZCBpbmZlY3Rpb25zClByZXZlbnRpbmcgYW5kIHNjcmVlbmluZyBmb3IgY2VydmljYWwgY2FuY2VyCkFzc2Vzc2luZyBmb3IgdmFjY2luZS0gcHJldmVudGFibGUgZGlzZWFzZXMgb3RoZXIgdGhhbiBIQlYgYW5kIEhDViBpbmZlY3Rpb24nCiAgICBlbHNlICcnLAogICAgaWYgIkFSVCBpbml0aWF0aW9uIHZpc2l0IiBhbmQgIkFnZSAxMCBvciBvbGRlciIgYW5kICJOb3Qgb24gQVJUIiBhbmQgIkNENCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjAwIGNlbGxzL21tMyIKICAgICAgdGhlbiAnUGVyZm9ybSBhIGNyeXB0b2NvY2NhbCBhbnRpZ2VuIGZvciBhZHVsdHMgYW5kIGFkb2xlc2NlbnRzJwogICAgZWxzZSAnJywKICAgIGlmICJBUlQgaW5pdGlhdGlvbiB2aXNpdCIgYW5kICJOb3Qgb24gQVJUIiBhbmQgIk9uIEFaVCIKICAgICAgdGhlbiAnRGVzaXJhYmxlIGFjdGlvbnM6IApIYWVtb2dsb2JpbiB0ZXN0JwogICAgZWxzZSAnJywKICAgIGlmICJBUlQgaW5pdGlhdGlvbiB2aXNpdCIgYW5kICJOb3Qgb24gQVJUIiBhbmQgIk9uIFRERiIKICAgICAgdGhlbiAnRGVzaXJhYmxlIGFjdGlvbnM6IApTZXJ1bSBjcmVhdGluaW5lIHRlc3QKRXN0aW1hdGVkIGdsb21lcnVsYXIgZmlsdHJhdGlvbiByYXRlIChlR0ZSKScKICAgIGVsc2UgJycsCiAgICBpZiAiQVJUIGluaXRpYXRpb24gdmlzaXQiIGFuZCAiTm90IG9uIEFSVCIgYW5kICJDbGllbnQgaXMgZmVtYWxlIgogICAgICB0aGVuICdEZXNpcmFibGUgYWN0aW9uczogClByZWduYW5jeSB0ZXN0JwogICAgZWxzZSAnJywKICAgIGlmICJDbGluaWNhbCB2aXNpdCIgYW5kICJBZ2UgMjAgb3Igb2xkZXIiIGFuZCAiT24gQVJUIgogICAgICB0aGVuICdSZWNvbW1lbmRlZCBhY3Rpb25zOgpTY2hlZHVsZSB0aGUgZm9sbG93aW5nIHZpcmFsIGxvYWQgdGVzdHM6IApISVYgdmlyYWwgbG9hZCB0ZXN0IOKJpCAoQVJUIHN0YXJ0IGRhdGUgKyA2IG1vbnRocykKSElWIHZpcmFsIGxvYWQgdGVzdCDiiaQgKEFSVCBzdGFydCBkYXRlICsgMTIgbW9udGhzKQpISVYgdmlyYWwgbG9hZCB0ZXN0IGV2ZXJ5IDEyIG1vbnRocyB0aGVyZWFmdGVyClBlcmZvcm0gYSBDRDQgY2VsbCBjb3VudCBldmVyeSA2IG1vbnRocyB1bnRpbCAiIkVzdGFibGlzaGVkIG9uIEFSVCIiID0gVFJVRQoKRGVzaXJhYmxlIGFjdGlvbnM6ClNlcnVtIGNyZWF0aW5pbmUgYW5kIGVzdGltYXRlZCBnbG9tZXJ1bGFyIGZpbHRyYXRpb24gcmF0ZSBmb3IgVERGCgpSZWNvbW1lbmRlZCBnZW5lcmFsIGNhcmUgYWN0aXZpdGllczogCkFkaGVyZW5jZSBzdXBwb3J0IGludGVydmVudGlvbnMgc2hvdWxkIGJlIHByb3ZpZGVkIHRvIHBlb3BsZSBvbiBBUlQgKHAgeHh4aXggb2Ygc291cmNlKS4KTWFuYWdlIGN1cnJlbnQgbWVkaWNhdGlvbnMuClByb3ZpZGUgZmFtaWx5IHBsYW5uaW5nIGFuZCBjb250cmFjZXB0aW9uLgpTdXBwb3J0IGRpc2Nsb3N1cmUgYW5kIHBhcnRuZXIgbm90aWZpY2F0aW9uLgpDb3Vuc2VsIG9uIHJpc2sgcmVkdWN0aW9uIGFuZCBjb21iaW5hdGlvbiBISVYgcHJldmVudGlvbiBhcHByb2FjaGVzLgpBc3Nlc3MsIHByZXZlbnQgYW5kIG1hbmFnZSBub25jb21tdW5pY2FibGUgZGlzZWFzZXMuClNjcmVlbiBmb3IgYW5kIG1hbmFnZSBtZW50YWwgaGVhbHRoIHByb2JsZW1zLgpTY3JlZW4gZm9yIGFuZCBtYW5hZ2UgYW5kIHN1YnN0YW5jZSB1c2UgaXNzdWVzLgpQcm92aWRlIHBzeWNob3NvY2lhbCBjb3Vuc2VsbGluZyBhbmQgc3VwcG9ydC4KTWFuYWdlIHBhaW4gYW5kIHN5bXB0b21zLgpDb25kdWN0IGEgbnV0cml0aW9uYWwgYXNzZXNzbWVudCBhbmQgY291bnNlbCBvbiBudXRyaXRpb24uCgpQcmV2ZW50aW5nIGFuZCB0cmVhdGluZyBjb2luZmVjdGlvbnM6ClByb3ZpZGUgY28tdHJpbW94YXpvbGUgcHJldmVudGl2ZSB0aGVyYXB5ClByZXZlbnQgbWFsYXJpYSAoaW5zZWN0aWNpZGUtIHRyZWF0ZWQgIGJlZC1uZXRzIGFuZCBwcm9waHlsYXhpcykKU2NyZWVuIGZvciBzZXh1YWxseSB0cmFuc21pdHRlZCBpbmZlY3Rpb25zCkFzc2VzcyBmb3IgdmFjY2luZS1wcmV2ZW50YWJsZSBkaXNlYXNlcycKICAgIGVsc2UgJycsCiAgICBpZiAiQ2xpbmljYWwgdmlzaXQiIGFuZCAiQWdlIHVuZGVyIDIwIiBhbmQgIk9uIEFSVCIKICAgICAgdGhlbiAnUmVjb21tZW5kZWQgYWN0aW9uczogClNjaGVkdWxlIHZpcmFsIGxvYWQgdGVzdHMgb24gdGhlIGZvbGxvd2luZyBkYXRlczogCkhJViB2aXJhbCBsb2FkIHRlc3Qg4omkIChBUlQgc3RhcnQgZGF0ZSArIDYgbW9udGhzKQpISVYgdmlyYWwgbG9hZCB0ZXN0IOKJpCAoQVJUIHN0YXJ0IGRhdGUgKyAxMiBtb250aHMpCkhJViB2aXJhbCBsb2FkIHRlc3QgZXZlcnkgMTIgbW9udGhzIHRoZXJlYWZ0ZXIKQ0Q0IGNlbGwgY291bnQgZXZlcnkgNiBtb250aHMgdW50aWwgIiJFc3RhYmxpc2hlZCBvbiBBUlQiIiA9IFRSVUUKClJlY29tbWVuZGVkIGdlbmVyYWwgY2FyZSBhY3Rpdml0aWVzOiAKUHJlcGFyZSwgYXNzZXNzIGFuZCBzdXBwb3J0IGFkaGVyZW5jZS4KTWFuYWdlIGN1cnJlbnQgbWVkaWNhdGlvbnMuClByb3ZpZGUgZmFtaWx5IHBsYW5uaW5nIGFuZCBjb250cmFjZXB0aW9uLgpTdXBwb3J0IGRpc2Nsb3N1cmUgYW5kIHBhcnRuZXIgbm90aWZpY2F0aW9uLgpDb3Vuc2VsIG9uIHJpc2sgcmVkdWN0aW9uIGFuZCBjb21iaW5hdGlvbiBISVYgcHJldmVudGlvbiBhcHByb2FjaGVzLgpBc3Nlc3MsIHByZXZlbnQgYW5kIG1hbmFnZSBub25jb21tdW5pY2FibGUgZGlzZWFzZXMuClNjcmVlbiBmb3IgYW5kIG1hbmFnZSBtZW50YWwgaGVhbHRoIHByb2JsZW1zLgpTY3JlZW4gZm9yIGFuZCBtYW5hZ2UgYW5kIHN1YnN0YW5jZSB1c2UgaXNzdWVzLgpQcm92aWRlIHBzeWNob3NvY2lhbCBjb3Vuc2VsbGluZyBhbmQgc3VwcG9ydC4KTWFuYWdlIHBhaW4gYW5kIHN5bXB0b21zLgpDb25kdWN0IGEgbnV0cml0aW9uYWwsIGdyb3d0aCBhbmQgZGV2ZWxvcG1lbnQgYXNzZXNzbWVudC4KClByZXZlbnRpbmcgYW5kIHRyZWF0aW5nIGNvaW5mZWN0aW9uczoKUHJvdmlkZSBjby10cmltb3hhem9sZSBwcmV2ZW50aXZlIHRoZXJhcHkKUHJldmVudCBtYWxhcmlhIChpbnNlY3RpY2lkZS0gdHJlYXRlZCAgYmVkLW5ldHMgYW5kIHByb3BoeWxheGlzKQpTY3JlZW4gZm9yIHNleHVhbGx5IHRyYW5zbWl0dGVkIGluZmVjdGlvbnMKQXNzZXNzIGZvciB2YWNjaW5lLXByZXZlbnRhYmxlIGRpc2Vhc2VzJwogICAgZWxzZSAnJywKICAgIGlmICJDbGluaWNhbCB2aXNpdCIgYW5kICJBZ2UgdW5kZXIgMjAiIGFuZCAiQ2xpZW50IGlzIGZlbWFsZSIKICAgICAgdGhlbiAnUHJlZ25hbmN5IHRlc3QnCiAgICBlbHNlICcnLAogICAgaWYgIkNsaW5pY2FsIHZpc2l0IiBhbmQgIk9uIEFSVCIgYW5kICJPbiBUREYiCiAgICAgIHRoZW4gJ0Rlc2lyYWJsZSBhY3Rpb25zOiAKU2VydW0gY3JlYXRpbmluZQpFc3RpbWF0ZWQgZ2xvbWVydWxhciBmaWx0cmF0aW9uIHJhdGUgZm9yIFRERicKICAgIGVsc2UgJycsCiAgICBpZiAiQ2xpbmljYWwgdmlzaXQiIGFuZCAiQWdlIDIwIG9yIG9sZGVyIiBhbmQgIlN1c3BpY2lvbiBvZiB0cmVhdG1lbnQgZmFpbHVyZSBvciBpbnRlcnJ1cHRpb24iCiAgICAgIHRoZW4gJ0Rlc2lyYWJsZSBhY3Rpb25zOiAKSEJWIChIQnNBZykgc2Vyb2xvZ3kgKGJlZm9yZSBzd2l0Y2hpbmcgQVJUIHJlZ2ltZW4gaWYgdGhpcyB0ZXN0aW5nIHdhcyBub3QgZG9uZSBvciBpZiB0aGUgcmVzdWx0IHdhcyBuZWdhdGl2ZSBhdCBiYXNlbGluZSBhbmQgdGhlIHBhdGllbnQgd2FzIG5vdCB2YWNjaW5hdGVkIHRoZXJlYWZ0ZXIpIAoKUmVjb21tZW5kZWQgZ2VuZXJhbCBjYXJlIGFjdGl2aXRpZXM6IApQcmVwYXJlLCBhc3Nlc3MgYW5kIHN1cHBvcnQgYWRoZXJlbmNlLgpNYW5hZ2UgY3VycmVudCBtZWRpY2F0aW9ucy4KUHJvdmlkZSBmYW1pbHkgcGxhbm5pbmcgYW5kIGNvbnRyYWNlcHRpb24uClN1cHBvcnQgZGlzY2xvc3VyZSBhbmQgcGFydG5lciBub3RpZmljYXRpb24uCkNvdW5zZWwgb24gcmlzayByZWR1Y3Rpb24gYW5kIGNvbWJpbmF0aW9uIEhJViBwcmV2ZW50aW9uIGFwcHJvYWNoZXMuCkFzc2VzcywgcHJldmVudCBhbmQgbWFuYWdlIG5vbmNvbW11bmljYWJsZSBkaXNlYXNlcy4KU2NyZWVuIGZvciBhbmQgbWFuYWdlIG1lbnRhbCBoZWFsdGggcHJvYmxlbXMuClNjcmVlbiBmb3IgYW5kIG1hbmFnZSBhbmQgc3Vic3RhbmNlIHVzZSBpc3N1ZXMuClByb3ZpZGUgcHN5Y2hvc29jaWFsIGNvdW5zZWxsaW5nIGFuZCBzdXBwb3J0LgpNYW5hZ2UgcGFpbiBhbmQgc3ltcHRvbXMuCkNvbmR1Y3QgYSBudXRyaXRpb25hbCBhc3Nlc3NtZW50IGFuZCBjb3Vuc2VsIG9uIG51dHJpdGlvbi4KClByZXZlbnRpbmcgYW5kIHRyZWF0aW5nIGNvaW5mZWN0aW9uczogClByb3ZpZGUgY28tdHJpbW94YXpvbGUgcHJldmVudGl2ZSB0aGVyYXB5CkNvbmR1Y3QgaW50ZW5zaWZpZWQgVEIgY2FzZS1maW5kaW5nClByZXZlbnQgbWFsYXJpYSAoaW5zZWN0aWNpZGUtIHRyZWF0ZWQgIGJlZC1uZXRzIGFuZCBwcm9waHlsYXhpcykKU2NyZWVuIGZvciBzZXh1YWxseSB0cmFuc21pdHRlZCBpbmZlY3Rpb25zCkFzc2VzcyBmb3IgdmFjY2luZS1wcmV2ZW50YWJsZSBkaXNlYXNlcycKICAgIGVsc2UgJycsCiAgICBpZiAiQ2xpbmljYWwgdmlzaXQiIGFuZCAiQWdlIDIwIG9yIG9sZGVyIiBhbmQgIlN1c3BpY2lvbiBvZiB0cmVhdG1lbnQgZmFpbHVyZSBvciBpbnRlcnJ1cHRpb24iCiAgICAgIHRoZW4gJ0Rlc2lyYWJsZSBhY3Rpb25zOiAKSEJWIChIQnNBZykgc2Vyb2xvZ3kgKGJlZm9yZSBzd2l0Y2hpbmcgQVJUIHJlZ2ltZW4gaWYgdGhpcyB0ZXN0aW5nIHdhcyBub3QgZG9uZSBvciBpZiB0aGUgcmVzdWx0IHdhcyBuZWdhdGl2ZSBhdCBiYXNlbGluZSBhbmQgdGhlIHBhdGllbnQgd2FzIG5vdCB2YWNjaW5hdGVkIHRoZXJlYWZ0ZXIpCgpSZWNvbW1lbmRlZCBnZW5lcmFsIGNhcmUgYWN0aXZpdGllczoKUHJlcGFyZSwgYXNzZXNzIGFuZCBzdXBwb3J0IGFkaGVyZW5jZS4KTWFuYWdlIGN1cnJlbnQgbWVkaWNhdGlvbnMuClByb3ZpZGUgZmFtaWx5IHBsYW5uaW5nIGFuZCBjb250cmFjZXB0aW9uLgpTdXBwb3J0IGRpc2Nsb3N1cmUgYW5kIHBhcnRuZXIgbm90aWZpY2F0aW9uLgpDb3Vuc2VsIG9uIHJpc2sgcmVkdWN0aW9uIGFuZCBjb21iaW5hdGlvbiBISVYgcHJldmVudGlvbiBhcHByb2FjaGVzLgpBc3Nlc3MsIHByZXZlbnQgYW5kIG1hbmFnZSBub25jb21tdW5pY2FibGUgZGlzZWFzZXMuClNjcmVlbiBmb3IgYW5kIG1hbmFnZSBtZW50YWwgaGVhbHRoIHByb2JsZW1zLgpTY3JlZW4gZm9yIGFuZCBtYW5hZ2UgYW5kIHN1YnN0YW5jZSB1c2UgaXNzdWVzLgpQcm92aWRlIHBzeWNob3NvY2lhbCBjb3Vuc2VsbGluZyBhbmQgc3VwcG9ydC4KTWFuYWdlIHBhaW4gYW5kIHN5bXB0b21zLgpDb25kdWN0IGEgbnV0cml0aW9uYWwsIGdyb3d0aCBhbmQgZGV2ZWxvcG1lbnQgYXNzZXNzbWVudC4KClByZXZlbnRpbmcgYW5kIHRyZWF0aW5nIGNvaW5mZWN0aW9uczoKUHJvdmlkZSBjby10cmltb3hhem9sZSBwcmV2ZW50aXZlIHRoZXJhcHkKQ29uZHVjdCBpbnRlbnNpZmllZCBUQiBjYXNlLWZpbmRpbmcKUHJldmVudCBtYWxhcmlhIChpbnNlY3RpY2lkZS0gdHJlYXRlZCAgYmVkLW5ldHMgYW5kIHByb3BoeWxheGlzKQpTY3JlZW4gZm9yIHNleHVhbGx5IHRyYW5zbWl0dGVkIGluZmVjdGlvbnMKQXNzZXNzIGZvciB2YWNjaW5lLXByZXZlbnRhYmxlIGRpc2Vhc2VzJwogICAgZWxzZSAnJwogIH0p"^^xsd:base64Binary ]
  ] ) . #