compiledTemplates/SecretManagement.Extension-1.0.0.0.xml

<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>PSModuleDevelopment.Template.Template</T>
      <T>System.Object</T>
    </TN>
    <ToString>PSModuleDevelopment.Template.Template</ToString>
    <Props>
      <S N="Name">SecretManagement.Extension</S>
      <Obj N="Type" RefId="1">
        <TN RefId="1">
          <T>PSModuleDevelopment.Template.TemplateType</T>
          <T>System.Enum</T>
          <T>System.ValueType</T>
          <T>System.Object</T>
        </TN>
        <ToString>Project</ToString>
        <I32>1</I32>
      </Obj>
      <Version N="Version">1.0.0.0</Version>
      <S N="Description">Extension module for Secret Management.</S>
      <S N="Author">Sascha Spiekermann</S>
      <DT N="CreatedOn">2023-03-06T00:00:00+00:00</DT>
      <Obj N="Tags" RefId="2">
        <TN RefId="2">
          <T>System.Collections.Generic.List`1[[System.String, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]</T>
          <T>System.Object</T>
        </TN>
        <LST>
          <S>module</S>
          <S>psframework</S>
        </LST>
      </Obj>
      <Obj N="Parameters" RefId="3">
        <TNRef RefId="2" />
        <LST>
          <S>name</S>
          <S>functionPrefix</S>
          <S>author</S>
          <S>company</S>
          <S>description</S>
        </LST>
      </Obj>
      <Obj N="Scripts" RefId="4">
        <TN RefId="3">
          <T>System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[PSModuleDevelopment.Template.ParameterScript, PSModuleDevelopment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null]]</T>
          <T>System.Object</T>
        </TN>
        <DCT>
          <En>
            <S N="Key">psframework</S>
            <Obj N="Value" RefId="5">
              <TN RefId="4">
                <T>PSModuleDevelopment.Template.ParameterScript</T>
                <T>System.Object</T>
              </TN>
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000A__x0009__x0009_</S>
                <S N="Name">psframework</S>
                <SBK N="ScriptBlock">_x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAALcHNmcmFtZXdvcmsJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAADIKCQkJKEdldC1Nb2R1bGUgUFNGcmFtZXdvcmspLlZlcnNpb24uVG9TdHJpbmcoKQoJCQs=</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">year</S>
            <Obj N="Value" RefId="6">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x0009__x0009__x0009_Get-Date -Format "yyyy"_x000A__x0009__x0009_</S>
                <S N="Name">year</S>
                <SBK N="ScriptBlock">_x000A__x0009__x0009__x0009_Get-Date -Format "yyyy"_x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEeWVhcgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAHgoJCQlHZXQtRGF0ZSAtRm9ybWF0ICJ5eXl5IgoJCQs=</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">guid</S>
            <Obj N="Value" RefId="7">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000A__x0009__x0009_</S>
                <S N="Name">guid</S>
                <SBK N="ScriptBlock">_x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEZ3VpZAkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAKgoJCQlbU3lzdGVtLkd1aWRdOjpOZXdHdWlkKCkuVG9TdHJpbmcoKQoJCQs=</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">date</S>
            <Obj N="Value" RefId="8">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x0009__x0009__x0009_Get-Date -Format "yyyy-MM-dd"_x000A__x0009__x0009_</S>
                <S N="Name">date</S>
                <SBK N="ScriptBlock">_x000A__x0009__x0009__x0009_Get-Date -Format "yyyy-MM-dd"_x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEZGF0ZQkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAJAoJCQlHZXQtRGF0ZSAtRm9ybWF0ICJ5eXl5LU1NLWRkIgoJCQs=</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">secretManagementVersion</S>
            <Obj N="Value" RefId="9">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x0009__x0009__x0009_(Get-Module Microsoft.Powershell.SecretManagement).Version.ToString()_x000A__x0009__x0009_</S>
                <S N="Name">secretManagementVersion</S>
                <SBK N="ScriptBlock">_x000A__x0009__x0009__x0009_(Get-Module Microsoft.Powershell.SecretManagement).Version.ToString()_x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAXc2VjcmV0TWFuYWdlbWVudFZlcnNpb24JBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAAEwKCQkJKEdldC1Nb2R1bGUgTWljcm9zb2Z0LlBvd2Vyc2hlbGwuU2VjcmV0TWFuYWdlbWVudCkuVmVyc2lvbi5Ub1N0cmluZygpCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">guidExtension</S>
            <Obj N="Value" RefId="10">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000A__x0009__x0009_</S>
                <S N="Name">guidExtension</S>
                <SBK N="ScriptBlock">_x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAANZ3VpZEV4dGVuc2lvbgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAKgoJCQlbU3lzdGVtLkd1aWRdOjpOZXdHdWlkKCkuVG9TdHJpbmcoKQoJCQs=</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">psfversion</S>
            <Obj N="Value" RefId="11">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000A__x0009__x0009_</S>
                <S N="Name">psfversion</S>
                <SBK N="ScriptBlock">_x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAKcHNmdmVyc2lvbgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAMgoJCQkoR2V0LU1vZHVsZSBQU0ZyYW1ld29yaykuVmVyc2lvbi5Ub1N0cmluZygpCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">dynamicscript_844112</S>
            <Obj N="Value" RefId="12">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x0009__x0009_ Get-Date -Format 'yyyy-MM-dd'_x000A__x0009__x0009_</S>
                <S N="Name">dynamicscript_844112</S>
                <SBK N="ScriptBlock">_x000A__x0009__x0009_ Get-Date -Format 'yyyy-MM-dd'_x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAUZHluYW1pY3NjcmlwdF84NDQxMTIJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAACQKCQkgR2V0LURhdGUgLUZvcm1hdCAneXl5eS1NTS1kZCcKCQkL</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">testfolder</S>
            <Obj N="Value" RefId="13">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x000A__x0009__x0009_</S>
                <S N="Name">testfolder</S>
                <SBK N="ScriptBlock">_x000A__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAKdGVzdGZvbGRlcgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAABAoKCQkL</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">guidRootModule</S>
            <Obj N="Value" RefId="14">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000A__x0009__x0009_</S>
                <S N="Name">guidRootModule</S>
                <SBK N="ScriptBlock">_x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAOZ3VpZFJvb3RNb2R1bGUJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAACoKCQkJW1N5c3RlbS5HdWlkXTo6TmV3R3VpZCgpLlRvU3RyaW5nKCkKCQkL</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">pesterconfig</S>
            <Obj N="Value" RefId="15">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x000A__x0009__x0009_</S>
                <S N="Name">pesterconfig</S>
                <SBK N="ScriptBlock">_x000A__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAMcGVzdGVyY29uZmlnCQUAAAAFBQAAADtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgEAAAAKU2NyaXB0VGV4dAEDAAAABgYAAAAECgoJCQs=</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">dynamicscript_394432</S>
            <Obj N="Value" RefId="16">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x0009__x0009_ Get-Date -Format 'yyyy-MM-dd'_x000A__x0009__x0009_</S>
                <S N="Name">dynamicscript_394432</S>
                <SBK N="ScriptBlock">_x000A__x0009__x0009_ Get-Date -Format 'yyyy-MM-dd'_x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAUZHluYW1pY3NjcmlwdF8zOTQ0MzIJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAACQKCQkgR2V0LURhdGUgLUZvcm1hdCAneXl5eS1NTS1kZCcKCQkL</BA>
              </MS>
            </Obj>
          </En>
        </DCT>
      </Obj>
      <Obj N="Parameters2" RefId="17">
        <TN RefId="5">
          <T>System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[PSModuleDevelopment.Template.Parameter.ParameterBase, PSModuleDevelopment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null]]</T>
          <T>System.Object</T>
        </TN>
        <DCT />
      </Obj>
      <Obj N="Children" RefId="18">
        <TN RefId="6">
          <T>System.Collections.Generic.List`1[[PSModuleDevelopment.Template.TemplateItemBase, PSModuleDevelopment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null]]</T>
          <T>System.Object</T>
        </TN>
        <LST>
          <Obj RefId="19">
            <TN RefId="7">
              <T>PSModuleDevelopment.Template.TemplateItemFolder</T>
              <T>PSModuleDevelopment.Template.TemplateItemBase</T>
              <T>System.Object</T>
            </TN>
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="20">
                <TNRef RefId="6" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                </LST>
              </Obj>
              <S N="Name">SecretManagement.þnameþ</S>
              <S N="RelativePath">/SecretManagement.þnameþ</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="21">
                <TNRef RefId="2" />
                <LST>
                  <S>name</S>
                </LST>
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="22">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAAGVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74GBQAAABovU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvgYGAAAAAsO+CQcAAAAJCAAAAAQDAAAAngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZVtdAgAAAAgICQkAAAAEAAAABAAAAAQHAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQoAAAABAAAAAQAAAAEIAAAABwAAAAkLAAAAAAAAAAAAAAAHCQAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkMAAAACQ0AAAAJDgAAAAkPAAAAEQoAAAAEAAAABhAAAAAEbmFtZQ0DEQsAAAAAAAAAAQwAAAABAAAACREAAAAGEgAAAAVidWlsZAYTAAAAIC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2J1aWxkCQYAAAAJFQAAAAkWAAAAAQ0AAAABAAAACRcAAAAGGAAAABlTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+BhkAAAA0L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvgkGAAAACRsAAAAJHAAAAAUOAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYdAAAAsAhNSVQgTGljZW5zZQoKQ29weXJpZ2h0IChjKSDDviF5ZWFyIcO+IMO+YXV0aG9yw74KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuAQkeAAAACR8AAAAGIAAAAAdMSUNFTlNFBiEAAAAiL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vTElDRU5TRQkGAAAACSMAAAAJJAAAAAEPAAAADgAAAAYlAAAA4wkjIERlc2NyaXB0aW9uCgpJbnNlcnQgYSB1c2VmdWwgZGVzY3JpcHRpb24gZm9yIHRoZSDDvm5hbWXDviBwcm9qZWN0IGhlcmUuCgpSZW1lbWJlciwgaXQncyB0aGUgZmlyc3QgdGhpbmcgYSB2aXNpdG9yIHdpbGwgc2VlLgoKIyBQcm9qZWN0IFNldHVwIEluc3RydWN0aW9ucwojIyBXb3JraW5nIHdpdGggdGhlIGxheW91dAoKLSBEb24ndCB0b3VjaCB0aGUgcHNtMSBmaWxlCi0gUGxhY2UgZnVuY3Rpb25zIHlvdSBleHBvcnQgaW4gYGZ1bmN0aW9ucy9gIChjYW4gaGF2ZSBzdWJmb2xkZXJzKQotIFBsYWNlIHByaXZhdGUvaW50ZXJuYWwgZnVuY3Rpb25zIGludmlzaWJsZSB0byB0aGUgdXNlciBpbiBgaW50ZXJuYWwvZnVuY3Rpb25zYCAoY2FuIGhhdmUgc3ViZm9sZGVycykKLSBEb24ndCBhZGQgY29kZSBkaXJlY3RseSB0byB0aGUgYHBvc3RpbXBvcnQucHMxYCBvciBgcHJlaW1wb3J0LnBzMWAuCiAgVGhvc2UgZmlsZXMgYXJlIGRlc2lnbmVkIHRvIGltcG9ydCBvdGhlciBmaWxlcyBvbmx5LgotIFdoZW4gYWRkaW5nIGZpbGVzICYgZm9sZGVycywgbWFrZSBzdXJlIHRoZXkgYXJlIGNvdmVyZWQgYnkgZWl0aGVyIGBwb3N0aW1wb3J0LnBzMWAgb3IgYHByZWltcG9ydC5wczFgLgogIFRoaXMgYWRkcyB0aGVtIHRvIGJvdGggdGhlIGltcG9ydCBhbmQgdGhlIGJ1aWxkIHNlcXVlbmNlLgoKIyMgU2V0dGluZyB1cCBDSS9DRAoKPiBUbyBjcmVhdGUgYSBQUiB2YWxpZGF0aW9uIHBpcGVsaW5lLCBzZXQgdXAgdGFza3MgbGlrZSB0aGlzOgoKLSBJbnN0YWxsIFByZXJlcXVpc2l0ZXMgKFBvd2VyU2hlbGwgVGFzazsgVlNUUy1QcmVyZXF1aXNpdGVzLnBzMSkKLSBWYWxpZGF0ZSAoUG93ZXJTaGVsbCBUYXNrOyBWU1RTLVZhbGlkYXRlLnBzMSkKLSBQdWJsaXNoIFRlc3QgUmVzdWx0cyAoUHVibGlzaCBUZXN0IFJlc3VsdHM7IE5Vbml0IGZvcm1hdDsgUnVuIG5vIG1hdHRlciB3aGF0KQoKPiBUbyBjcmVhdGUgYSBidWlsZC9wdWJsaXNoIHBpcGVsaW5lLCBzZXQgdXAgdGFza3MgbGlrZSB0aGlzOgoKLSBJbnN0YWxsIFByZXJlcXVpc2l0ZXMgKFBvd2VyU2hlbGwgVGFzazsgVlNUUy1QcmVyZXF1aXNpdGVzLnBzMSkKLSBWYWxpZGF0ZSAoUG93ZXJTaGVsbCBUYXNrOyBWU1RTLVZhbGlkYXRlLnBzMSkKLSBCdWlsZCAoUG93ZXJTaGVsbCBUYXNrOyBWU1RTLUJ1aWxkLnBzMSkKLSBQdWJsaXNoIFRlc3QgUmVzdWx0cyAoUHVibGlzaCBUZXN0IFJlc3VsdHM7IE5Vbml0IGZvcm1hdDsgUnVuIG5vIG1hdHRlciB3aGF0KQoBCSYAAAAJJwAAAAYoAAAACVJFQURNRS5tZAYpAAAAJC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1JFQURNRS5tZAkGAAAACSsAAAAJLAAAAAERAAAAAwAAAAktAAAABgAAAAYAAAABFQAAAAcAAAAJCwAAAAAAAAAAAAAAARYAAAAHAAAACQsAAAAAAAAAAAAAAAEXAAAAAwAAAAkvAAAACwAAAAsAAAABGwAAAAcAAAAJMAAAAAEAAAABAAAAARwAAAAHAAAACQsAAAAAAAAAAAAAAAEeAAAABwAAAAkyAAAAAQAAAAEAAAABHwAAAAcAAAAJMwAAAAEAAAABAAAAASMAAAAHAAAACQsAAAAAAAAAAAAAAAEkAAAABwAAAAkLAAAAAAAAAAAAAAABJgAAAAcAAAAJNQAAAAEAAAABAAAAAScAAAAHAAAACQsAAAAAAAAAAAAAAAErAAAABwAAAAkLAAAAAAAAAAAAAAABLAAAAAcAAAAJCwAAAAAAAAAAAAAABy0AAAAAAQAAAAgAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJNwAAAAk4AAAACTkAAAAJOgAAAAk7AAAACTwAAAANAgcvAAAAAAEAAAAQAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACT0AAAAJPgAAAAk/AAAACUAAAAAJQQAAAAlCAAAACUMAAAAJRAAAAAlFAAAACUYAAAAJRwAAAA0FETAAAAAEAAAABkgAAAAEbmFtZQ0DETIAAAAEAAAABkkAAAAGYXV0aG9yDQMRMwAAAAQAAAAGSgAAAAR5ZWFyDQMRNQAAAAQAAAAGSwAAAARuYW1lDQMBNwAAAA4AAAAGTAAAAIYHIyBTZXR0aW5nIHVwIHRoZSByZWxlYXNlIHBpcGVsaW5lOgoKIyMgUHJlbGltaW5hcnkKClNldHRpbmcgdXAgYSByZWxlYXNlIHBpcGVsaW5lLCBzZXQgdGhlIHRyaWdnZXIgdG8gZG8gY29udGludW91cyBpbnRlZ3JhdGlvbiBhZ2FpbnN0IHRoZSBtYXN0ZXIgYnJhbmNoIG9ubHkuCkluIFN0YWdlIDEgc2V0IHVwIGEgdGFza3NlcXVlbmNlOgoKIyMgMSkgUG93ZXJTaGVsbCBUYXNrOiBQcmVyZXF1aXNpdGVzCgpIYXZlIGl0IGV4ZWN1dGUgYHZzdHMtcHJlcmVxdWlzaXRlcy5wczFgCgojIyAyKSBQb3dlclNoZWxsIFRhc2s6IFZhbGlkYXRlCgpIYXZlIGl0IGV4ZWN1dGUgYHZzdHMtcHJlcmVxdWlzaXRlcy5wczFgCgojIyAzKSBQb3dlclNoZWxsIFRhc2s6IEJ1aWxkCgpIYXZlIGl0IGV4ZWN1dGUgYHZzdHMtYnVpbGQucHMxYC4KVGhlIHRhc2sgcmVxdWlyZXMgdHdvIHBhcmFtZXRlcnM6CgogLSBgLUxvY2FsUmVwb2AKIC0gYC1Xb3JraW5nRGlyZWN0b3J5ICQoU3lzdGVtLkRlZmF1bHRXb3JraW5nRGlyZWN0b3J5KS9f77+9bmFtZe+/vWAKCiMjIDQpIFB1Ymxpc2ggVGVzdCBSZXN1bHRzCgpDb25maWd1cmUgdGFzayB0byBwaWNrIHVwIG51bml0IHR5cGUgb2YgdGVzdHMgKHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IGp1bml0KS4KQ29uZmlndXJlIHRhc2sgdG8gZXhlY3V0ZSwgZXZlbiBpZiBwcmV2aW91cyBzdGVwcyBmYWlsZWQgb3IgdGhlIHRhc2sgc2VxdWVuY2Ugd2FzIGNhbmNlbGxlZC4KCiMjIDUpIFBvd2VyU2hlbGwgVGFzazogUGFja2FnZSBGdW5jdGlvbgoKSGF2ZSBpdCBleGVjdXRlIGB2c3RzLXBhY2thZ2VGdW5jdGlvbi5wczFgCgojIyA2KSBBenVyZSBGdW5jdGlvbiBBcHBEZXBsb3kKCkNvbmZpZ3VyZSB0byBwdWJsaXNoIHRvIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIGFwcC4BCU0AAAAJTgAAAAZPAAAAF0F6dXJlRnVuY3Rpb24ucmVhZG1lLm1kBlAAAAA4L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vYnVpbGQvQXp1cmVGdW5jdGlvbi5yZWFkbWUubWQJBgAAAAlSAAAACVMAAAABOAAAAA4AAAAGVAAAAMYkPCMKVGhpcyBzY3JpcHQgcHVibGlzaGVzIHRoZSBtb2R1bGUgdG8gdGhlIGdhbGxlcnkuCkl0IGV4cGVjdHMgYXMgaW5wdXQgYW4gQXBpS2V5IGF1dGhvcml6ZWQgdG8gcHVibGlzaCB0aGUgbW9kdWxlLgoKSW5zZXJ0IGFueSBidWlsZCBzdGVwcyB5b3UgbWF5IG5lZWQgdG8gdGFrZSBiZWZvcmUgcHVibGlzaGluZyBpdCBoZXJlLgojPgpwYXJhbSAoCgkkQXBpS2V5LAoKCSRXb3JraW5nRGlyZWN0b3J5LAoKCSRSZXBvc2l0b3J5ID0gJ1BTR2FsbGVyeScsCgoJW3N3aXRjaF0KCSRMb2NhbFJlcG8sCgoJW3N3aXRjaF0KCSRTa2lwUHVibGlzaCwKCglbc3dpdGNoXQoJJEF1dG9WZXJzaW9uCikKCiNyZWdpb24gSGFuZGxlIFdvcmtpbmcgRGlyZWN0b3J5IERlZmF1bHRzCmlmICgtbm90ICRXb3JraW5nRGlyZWN0b3J5KQp7CglpZiAoJGVudjpSRUxFQVNFX1BSSU1BUllBUlRJRkFDVFNPVVJDRUFMSUFTKQoJewoJCSRXb3JraW5nRGlyZWN0b3J5ID0gSm9pbi1QYXRoIC1QYXRoICRlbnY6U1lTVEVNX0RFRkFVTFRXT1JLSU5HRElSRUNUT1JZIC1DaGlsZFBhdGggJGVudjpSRUxFQVNFX1BSSU1BUllBUlRJRkFDVFNPVVJDRUFMSUFTCgl9CgllbHNlIHsgJFdvcmtpbmdEaXJlY3RvcnkgPSAkZW52OlNZU1RFTV9ERUZBVUxUV09SS0lOR0RJUkVDVE9SWSB9Cn0KaWYgKC1ub3QgJFdvcmtpbmdEaXJlY3RvcnkpIHsgJFdvcmtpbmdEaXJlY3RvcnkgPSBTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QgfQojZW5kcmVnaW9uIEhhbmRsZSBXb3JraW5nIERpcmVjdG9yeSBEZWZhdWx0cwoKIyBQcmVwYXJlIHB1Ymxpc2ggZm9sZGVyCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiQ3JlYXRpbmcgYW5kIHBvcHVsYXRpbmcgcHVibGlzaGluZyBkaXJlY3RvcnkiCiRwdWJsaXNoRGlyID0gTmV3LUl0ZW0gLVBhdGggJFdvcmtpbmdEaXJlY3RvcnkgLU5hbWUgcHVibGlzaCAtSXRlbVR5cGUgRGlyZWN0b3J5IC1Gb3JjZQpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXMO+bmFtZcO+IiAtRGVzdGluYXRpb24gJHB1Ymxpc2hEaXIuRnVsbE5hbWUgLVJlY3Vyc2UgLUZvcmNlCgojcmVnaW9uIEdhdGhlciB0ZXh0IGRhdGEgdG8gY29tcGlsZQokdGV4dCA9IEAoKQokcHJvY2Vzc2VkID0gQCgpCgojIEdhdGhlciBTdHVmZiB0byBydW4gYmVmb3JlCmZvcmVhY2ggKCRmaWxlUGF0aCBpbiAoJiAiJCgkUFNTY3JpcHRSb290KVwuLlzDvm5hbWXDvlxpbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEiKSkKewoJaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJGZpbGVQYXRoKSkgeyBjb250aW51ZSB9CgoJJGl0ZW0gPSBHZXQtSXRlbSAkZmlsZVBhdGgKCWlmICgkaXRlbS5QU0lzQ29udGFpbmVyKSB7IGNvbnRpbnVlIH0KCWlmICgkaXRlbS5GdWxsTmFtZSAtaW4gJHByb2Nlc3NlZCkgeyBjb250aW51ZSB9CgkkdGV4dCArPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkaXRlbS5GdWxsTmFtZSkKCSRwcm9jZXNzZWQgKz0gJGl0ZW0uRnVsbE5hbWUKfQoKIyBHYXRoZXIgY29tbWFuZHMKR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw75caW50ZXJuYWxcZnVuY3Rpb25zXCIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiIHwgRm9yRWFjaC1PYmplY3QgewoJJHRleHQgKz0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJF8uRnVsbE5hbWUpCn0KR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnMuc2hhcmVkaW50ZXJuYWxcIiAtUmVjdXJzZSAtRmlsZSAtRmlsdGVyICIqLnBzMSIgfCBGb3JFYWNoLU9iamVjdCB7CgkkdGV4dCArPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkXy5GdWxsTmFtZSkKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFZlcmJvc2UgLU1lc3NhZ2UgIiAjMyBJbXBvcnRpbmcgY29udGVudCBmcm9tICQoJF8uRnVsbE5hbWUpIgp9CkdldC1DaGlsZEl0ZW0gLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXMO+bmFtZcO+XGZ1bmN0aW9uc1wiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIioucHMxIiB8IEZvckVhY2gtT2JqZWN0IHsKCSR0ZXh0ICs9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRfLkZ1bGxOYW1lKQp9CgojIEdhdGhlciBzdHVmZiB0byBydW4gYWZ0ZXJ3YXJkcwpmb3JlYWNoICgkZmlsZVBhdGggaW4gKCYgIiQoJFBTU2NyaXB0Um9vdClcLi5cw75uYW1lw75caW50ZXJuYWxcc2NyaXB0c1xwb3N0aW1wb3J0LnBzMSIpKQp7CglpZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkZmlsZVBhdGgpKSB7IGNvbnRpbnVlIH0KCgkkaXRlbSA9IEdldC1JdGVtICRmaWxlUGF0aAoJaWYgKCRpdGVtLlBTSXNDb250YWluZXIpIHsgY29udGludWUgfQoJaWYgKCRpdGVtLkZ1bGxOYW1lIC1pbiAkcHJvY2Vzc2VkKSB7IGNvbnRpbnVlIH0KCSR0ZXh0ICs9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRpdGVtLkZ1bGxOYW1lKQoJJHByb2Nlc3NlZCArPSAkaXRlbS5GdWxsTmFtZQp9CiNlbmRyZWdpb24gR2F0aGVyIHRleHQgZGF0YSB0byBjb21waWxlCgojcmVnaW9uIFVwZGF0ZSB0aGUgcHNtMSBmaWxlCiRmaWxlRGF0YSA9IEdldC1Db250ZW50IC1QYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVzDvm5hbWXDvlzDvm5hbWXDvi5wc20xIiAtUmF3CiRmaWxlRGF0YSA9ICRmaWxlRGF0YS5SZXBsYWNlKCciPHdhcyBub3QgY29tcGlsZWQ+IicsICciPHdhcyBjb21waWxlZD4iJykKJGZpbGVEYXRhID0gJGZpbGVEYXRhLlJlcGxhY2UoJyI8Y29tcGlsZSBjb2RlIGludG8gaGVyZT4iJywgKCR0ZXh0IC1qb2luICJgbmBuIikpCltTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsVGV4dCgiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw75cw75uYW1lw74ucHNtMSIsICRmaWxlRGF0YSwgW1N5c3RlbS5UZXh0LkVuY29kaW5nXTo6VVRGOCkKI2VuZHJlZ2lvbiBVcGRhdGUgdGhlIHBzbTEgZmlsZQoKI3JlZ2lvbiBVcGRhdGluZyB0aGUgTW9kdWxlIFZlcnNpb24KaWYgKCRBdXRvVmVyc2lvbikKewoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJVcGRhdGluZyBtb2R1bGUgdmVyc2lvbiBudW1iZXJzLiIKCXRyeSB7IFt2ZXJzaW9uXSRyZW1vdGVWZXJzaW9uID0gKEZpbmQtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtUmVwb3NpdG9yeSAkUmVwb3NpdG9yeSAtRXJyb3JBY3Rpb24gU3RvcCkuVmVyc2lvbiB9CgljYXRjaAoJewoJCVN0b3AtUFNGRnVuY3Rpb24gLU1lc3NhZ2UgIkZhaWxlZCB0byBhY2Nlc3MgJCgkUmVwb3NpdG9yeSkiIC1FbmFibGVFeGNlcHRpb24gJHRydWUgLUVycm9yUmVjb3JkICRfCgl9CglpZiAoLW5vdCAkcmVtb3RlVmVyc2lvbikKCXsKCQlTdG9wLVBTRkZ1bmN0aW9uIC1NZXNzYWdlICJDb3VsZG4ndCBmaW5kIMO+bmFtZcO+IG9uIHJlcG9zaXRvcnkgJCgkUmVwb3NpdG9yeSkiIC1FbmFibGVFeGNlcHRpb24gJHRydWUKCX0KCSRuZXdCdWlsZE51bWJlciA9ICRyZW1vdGVWZXJzaW9uLkJ1aWxkICsgMQoJW3ZlcnNpb25dJGxvY2FsVmVyc2lvbiA9IChJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVzDvm5hbWXDvlzDvm5hbWXDvi5wc2QxIikuTW9kdWxlVmVyc2lvbgoJVXBkYXRlLU1vZHVsZU1hbmlmZXN0IC1QYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVzDvm5hbWXDvlzDvm5hbWXDvi5wc2QxIiAtTW9kdWxlVmVyc2lvbiAiJCgkbG9jYWxWZXJzaW9uLk1ham9yKS4kKCRsb2NhbFZlcnNpb24uTWlub3IpLiQoJG5ld0J1aWxkTnVtYmVyKSIKfQojZW5kcmVnaW9uIFVwZGF0aW5nIHRoZSBNb2R1bGUgVmVyc2lvbgoKI3JlZ2lvbiBQdWJsaXNoCmlmICgkU2tpcFB1Ymxpc2gpIHsgcmV0dXJuIH0KaWYgKCRMb2NhbFJlcG8pCnsKCSMgRGVwZW5kZW5jaWVzIG11c3QgZ28gZmlyc3QKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiQ3JlYXRpbmcgTnVnZXQgUGFja2FnZSBmb3IgbW9kdWxlOiBQU0ZyYW1ld29yayIKCU5ldy1QU01ETW9kdWxlTnVnZXRQYWNrYWdlIC1Nb2R1bGVQYXRoIChHZXQtTW9kdWxlIC1OYW1lIFBTRnJhbWV3b3JrKS5Nb2R1bGVCYXNlIC1QYWNrYWdlUGF0aCAuCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkNyZWF0aW5nIE51Z2V0IFBhY2thZ2UgZm9yIG1vZHVsZTogw75uYW1lw74iCglOZXctUFNNRE1vZHVsZU51Z2V0UGFja2FnZSAtTW9kdWxlUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw74iIC1QYWNrYWdlUGF0aCAuCn0KZWxzZQp7CgkjIFB1Ymxpc2ggdG8gR2FsbGVyeQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJQdWJsaXNoaW5nIHRoZSDDvm5hbWXDviBtb2R1bGUgdG8gJCgkUmVwb3NpdG9yeSkiCglQdWJsaXNoLU1vZHVsZSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw74iIC1OdUdldEFwaUtleSAkQXBpS2V5IC1Gb3JjZSAtUmVwb3NpdG9yeSAkUmVwb3NpdG9yeQp9CiNlbmRyZWdpb24gUHVibGlzaAEJVQAAAAlWAAAABlcAAAAOdnN0cy1idWlsZC5wczEGWAAAAC8vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9idWlsZC92c3RzLWJ1aWxkLnBzMQkGAAAACVoAAAAJWwAAAAE5AAAADgAAAAZcAAAA9D8KPCMKCS5TWU5PUFNJUwoJCUJ1aWxkIHNjcmlwdCB0aGF0IGdlbmVyYXRlcyBhIGNsaWVudCBtb2R1bGUgZm9yIFJFU1QgQVBJIGVuZHBvaW50cyBvZiBhIEF6dXJlIFBvd2VyU2hlbGwgRnVuY3Rpb25zIHByb2plY3QuCgkKCS5ERVNDUklQVElPTgoJCUJ1aWxkIHNjcmlwdCB0aGF0IGdlbmVyYXRlcyBhIGNsaWVudCBtb2R1bGUgZm9yIFJFU1QgQVBJIGVuZHBvaW50cyBvZiBhIEF6dXJlIFBvd2VyU2hlbGwgRnVuY3Rpb25zIHByb2plY3QuCgkKCS5QQVJBTUVURVIgQXBpS2V5CgkJVGhlIEFQSSBrZXkgdG8gdXNlIHRvIHB1Ymxpc2ggdGhlIG1vZHVsZSB0byBhIE51Z2V0IFJlcG9zaXRvcnkKCQoJLlBBUkFNRVRFUiBXb3JraW5nRGlyZWN0b3J5CgkJVGhlIHJvb3QgZm9sZGVyIGZyb20gd2hpY2ggdG8gYnVpbGQgdGhlIG1vZHVsZS4KCQoJLlBBUkFNRVRFUiBSZXBvc2l0b3J5CgkJVGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkgdG8gcHVibGlzaCB0by4KCQlEZWZhdWx0cyB0byBQU0dhbGxlcnkuCgkKCS5QQVJBTUVURVIgTG9jYWxSZXBvCgkJSW5zdGVhZCBvZiBwdWJsaXNoaW5nIHRvIGEgZ2FsbGVyeSwgZHJvcCBhIG51Z2V0IHBhY2thZ2UgaW4gdGhlIHJvb3QgZm9sZGVyLgoJCVRoaXMgcGFja2FnZSBjYW4gdGhlbiBiZSBwaWNrZWQgdXAgaW4gYSBsYXRlciBzdGVwIGZvciBwdWJsaXNoaW5nIHRvIEF6dXJlIEFydGlmYWN0cy4KCgkuUEFSQU1FVEVSIE1vZHVsZU5hbWUKCQlUaGUgbmFtZSB0byBnaXZlIHRvIHRoZSBjbGllbnQgbW9kdWxlLgoJCUJ5IGRlZmF1bHQsIHRoZSBjbGllbnQgbW9kdWxlIHdpbGwgYmUgbmFtZWQgJzxNb2R1bGVOYW1lPi5DbGllbnQnLgoJCgkuUEFSQU1FVEVSIEluY2x1ZGVGb3JtYXQKCQlJbmNsdWRlIHRoZSBmb3JtYXQgeG1sIG9mIHRoZSBzb3VyY2UgbW9kdWxlIGZvciB0aGUgY2xpZW50IG1vZHVsZS4KCQoJLlBBUkFNRVRFUiBJbmNsdWRlVHlwZQoJCUluY2x1ZGUgdGhlIHR5cGUgZXh0ZW5zaW9uIHhtbCBvZiB0aGUgc291cmNlIG1vZHVsZSBmb3IgdGhlIGNsaWVudCBtb2R1bGUuCgkKCS5QQVJBTUVURVIgSW5jbHVkZUFzc2VtYmx5CgkJSW5jbHVkZSB0aGUgYmluYXJpZXMgb2YgdGhlIHNvdXJjZSBtb2R1bGUgZm9yIHRoZSBjbGllbnQgbW9kdWxlLgojPgpwYXJhbSAoCgkkQXBpS2V5LAoJCgkkV29ya2luZ0RpcmVjdG9yeSwKCQoJJFJlcG9zaXRvcnkgPSAnUFNHYWxsZXJ5JywKCQoJW3N3aXRjaF0KCSRMb2NhbFJlcG8sCgkKCSRNb2R1bGVOYW1lLAoJCglbc3dpdGNoXQoJJEluY2x1ZGVGb3JtYXQsCgkKCVtzd2l0Y2hdCgkkSW5jbHVkZVR5cGUsCgkKCVtzd2l0Y2hdCgkkSW5jbHVkZUFzc2VtYmx5CikKCiNyZWdpb24gSGFuZGxlIFdvcmtpbmcgRGlyZWN0b3J5IERlZmF1bHRzCmlmICgtbm90ICRXb3JraW5nRGlyZWN0b3J5KQp7CglpZiAoJGVudjpSRUxFQVNFX1BSSU1BUllBUlRJRkFDVFNPVVJDRUFMSUFTKQoJewoJCSRXb3JraW5nRGlyZWN0b3J5ID0gSm9pbi1QYXRoIC1QYXRoICRlbnY6U1lTVEVNX0RFRkFVTFRXT1JLSU5HRElSRUNUT1JZIC1DaGlsZFBhdGggJGVudjpSRUxFQVNFX1BSSU1BUllBUlRJRkFDVFNPVVJDRUFMSUFTCgl9CgllbHNlIHsgJFdvcmtpbmdEaXJlY3RvcnkgPSAkZW52OlNZU1RFTV9ERUZBVUxUV09SS0lOR0RJUkVDVE9SWSB9Cn0KI2VuZHJlZ2lvbiBIYW5kbGUgV29ya2luZyBEaXJlY3RvcnkgRGVmYXVsdHMKCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgJ1N0YXJ0aW5nIEJ1aWxkOiBDbGllbnQgTW9kdWxlJwokcGFyZW50TW9kdWxlID0gJ8O+bmFtZcO+JwppZiAoLW5vdCAkTW9kdWxlTmFtZSkgeyAkTW9kdWxlTmFtZSA9ICfDvm5hbWXDvi5DbGllbnQnIH0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAnQ3JlYXRpbmcgRm9sZGVyIFN0cnVjdHVyZScKJHdvcmtpbmdSb290ID0gTmV3LUl0ZW0gLVBhdGggJFdvcmtpbmdEaXJlY3RvcnkgLU5hbWUgJE1vZHVsZU5hbWUgLUl0ZW1UeXBlIERpcmVjdG9yeQokcHVibGlzaFJvb3QgPSBKb2luLVBhdGggLVBhdGggJFdvcmtpbmdEaXJlY3RvcnkgLUNoaWxkUGF0aCAncHVibGlzaFzDvm5hbWXDvicKQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGNsaWVudE1vZHVsZVxmdW5jdGlvbnMiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIgLVJlY3Vyc2UKQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGNsaWVudE1vZHVsZVxpbnRlcm5hbCIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcIiAtUmVjdXJzZQpDb3B5LUl0ZW0gLVBhdGggIiQoJHB1Ymxpc2hSb290KVxlbi11cyIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcIiAtUmVjdXJzZQokZnVuY3Rpb25Gb2xkZXIgPSBHZXQtSXRlbSAtUGF0aCAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXGZ1bmN0aW9ucyIKCiNyZWdpb24gQ3JlYXRlIEZ1bmN0aW9ucwokZW5jb2RpbmcgPSBbUFNGRW5jb2RpbmddJ3V0ZjgnCiRmdW5jdGlvbnNUZXh0ID0gR2V0LUNvbnRlbnQgLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcY2xpZW50TW9kdWxlXGZ1bmN0aW9uLnBzMSIgLVJhdwoKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAnQ3JlYXRpbmcgRnVuY3Rpb25zJwpmb3JlYWNoICgkZnVuY3Rpb25Tb3VyY2VGaWxlIGluIChHZXQtQ2hpbGRJdGVtIC1QYXRoICIkKCRwdWJsaXNoUm9vdClcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsdGVyICcqLnBzMScpKQp7CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICIgIFByb2Nlc3NpbmcgZnVuY3Rpb246ICQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkiCgkkY29uZGVuc2VkTmFtZSA9ICRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUgLXJlcGxhY2UgJy0nLCAnJwoJCgkjcmVnaW9uIExvYWQgT3ZlcnJpZGVzCgkkb3ZlcnJpZGUgPSBAeyB9CglpZiAoVGVzdC1QYXRoIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5wc2QxIikKCXsKCQkkb3ZlcnJpZGUgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5wc2QxIgoJfQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGNvbmRlbnNlZE5hbWUpLnBzZDEiKQoJewoJCSRvdmVycmlkZSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5wc2QxIgoJfQoJaWYgKCRvdmVycmlkZS5Ob0NsaWVudEZ1bmN0aW9uKQoJewoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIiAgICBPdmVycmlkZSAnTm9DbGllbnRGdW5jdGlvbicgZGV0ZWN0ZWQsIHNraXBwaW5nISIKCQljb250aW51ZQoJfQoJCgkjIElmIHRoZXJlIGlzIGFuIGRlZmluaXRpb24gb3ZlcnJpZGUsIHVzZSBpdCBhbmQgY29udGludWUKCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpLnBzMSIpCgl7CgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiICAgIE92ZXJyaWRlIGZ1bmN0aW9uIGRlZmluaXRpb24gZGV0ZWN0ZWQsIHVzaW5nIG92ZXJyaWRlIgoJCUNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHMxIiAtRGVzdGluYXRpb24gJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lCgkJY29udGludWUKCX0KCQoJIyBGaWd1cmUgb3V0IHRoZSBSZXN0IE1ldGhvZCB0byB1c2UKCSRtZXRob2ROYW1lID0gJ1Bvc3QnCglpZiAoJG92ZXJyaWRlLlJlc3RNZXRob2RzKQoJewoJCSRtZXRob2ROYW1lID0gJG92ZXJyaWRlLlJlc3RNZXRob2RzIHwgV2hlcmUtT2JqZWN0IHsgJF8gLW5lICdHZXQnIH0gfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxCgl9CgkKCSNlbmRyZWdpb24gTG9hZCBPdmVycmlkZXMKCQoJJGN1cnJlbnRGdW5jdGlvbnNUZXh0ID0gJGZ1bmN0aW9uc1RleHQgLXJlcGxhY2UgJyVmdW5jdGlvbm5hbWUlJywgJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSAtcmVwbGFjZSAnJWNvbmRlbnNlZG5hbWUlJywgJGNvbmRlbnNlZE5hbWUgLXJlcGxhY2UgJyVtZXRob2QlJywgJG1ldGhvZE5hbWUKCQoJJHBhcnNlZEZ1bmN0aW9uID0gUmVhZC1QU01EU2NyaXB0IC1QYXRoICRmdW5jdGlvblNvdXJjZUZpbGUuRnVsbE5hbWUKCSRmdW5jdGlvbkFzdCA9ICRwYXJzZWRGdW5jdGlvbi5Bc3QuRW5kQmxvY2suU3RhdGVtZW50cyB8IFdoZXJlLU9iamVjdCB7CgkJJF8gLWlzIFtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLkxhbmd1YWdlLkZ1bmN0aW9uRGVmaW5pdGlvbkFzdF0KCX0gfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxCgkKCSRlbmQgPSAkZnVuY3Rpb25Bc3QuQm9keS5QYXJhbUJsb2NrLkV4dGVudC5FbmRPZmZTZXQKCSRzdGFydCA9ICRmdW5jdGlvbkFzdC5Cb2R5LkV4dGVudC5TdGFydE9mZlNldCArIDEKCSRjdXJyZW50RnVuY3Rpb25zVGV4dCA9ICRjdXJyZW50RnVuY3Rpb25zVGV4dC5SZXBsYWNlKCclcGFyYW1ldGVyJScsICRmdW5jdGlvbkFzdC5Cb2R5LkV4dGVudC5UZXh0LlN1YlN0cmluZygxLCAoJGVuZCAtICRzdGFydCkpKQoJCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICIgICAgQ3JlYXRpbmcgZmlsZTogJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5OYW1lKSIKCVtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsVGV4dCgiJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5OYW1lKSIsICRjdXJyZW50RnVuY3Rpb25zVGV4dCwgJGVuY29kaW5nKQp9CiRmdW5jdGlvbnNUb0V4cG9ydCA9IChHZXQtQ2hpbGRJdGVtIC1QYXRoICRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSAtUmVjdXJzZSAtRmlsdGVyICoucHMxKS5CYXNlTmFtZSB8IFNvcnQtT2JqZWN0CiNlbmRyZWdpb24gQ3JlYXRlIEZ1bmN0aW9ucwoKI3JlZ2lvbiBDcmVhdGUgQ29yZSBNb2R1bGUgRmlsZXMKIyBHZXQgTWFuaWZlc3Qgb2YgcHVibGlzaGVkIHZlcnNpb24sIGluIG9yZGVyIHRvIGNhdGNoIGJ1aWxkLXBoYXNlIGNoYW5nZXMgc3VjaCBhcyBtb2R1bGUgdmVyc2lvbi4KJG9yaWdpbmFsTWFuaWZlc3REYXRhID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJHB1Ymxpc2hSb290XMO+bmFtZcO+LnBzZDEiCiRwcmVyZXFIYXNoID0gQHsKCU1vZHVsZU5hbWUgICAgPSAnUFNGcmFtZXdvcmsnCglNb2R1bGVWZXJzaW9uID0gKEdldC1Nb2R1bGUgUFNGcmFtZXdvcmspLlZlcnNpb24KfQokcGFyYW1OZXdNb2R1bGVNYW5pZmVzdCA9IEB7CglQYXRoCQkJICA9ICgnezB9XHsxfS5wc2QxJyAtZiAkd29ya2luZ1Jvb3QuRnVsbE5hbWUsICRNb2R1bGVOYW1lKQoJRnVuY3Rpb25zVG9FeHBvcnQgPSAkZnVuY3Rpb25zVG9FeHBvcnQKCUNvbXBhbnlOYW1lCSAgICAgID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLkNvbXBhbnlOYW1lCglBdXRob3IJCSAgICAgID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLkF1dGhvcgoJRGVzY3JpcHRpb24JICAgICAgPSAkb3JpZ2luYWxNYW5pZmVzdERhdGEuRGVzY3JpcHRpb24KCU1vZHVsZVZlcnNpb24JICA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5Nb2R1bGVWZXJzaW9uCglSb290TW9kdWxlCSAgICAgID0gKCd7MH0ucHNtMScgLWYgJE1vZHVsZU5hbWUpCglDb3B5cmlnaHQJCSAgPSAkb3JpZ2luYWxNYW5pZmVzdERhdGEuQ29weXJpZ2h0CglUeXBlc1RvUHJvY2VzcyAgICA9IEAoKQoJRm9ybWF0c1RvUHJvY2VzcyAgPSBAKCkKCVJlcXVpcmVkQXNzZW1ibGllcyA9IEAoKQoJUmVxdWlyZWRNb2R1bGVzICAgPSBAKCRwcmVyZXFIYXNoKQoJQ29tcGF0aWJsZVBTRWRpdGlvbnMgPSAnQ29yZScsICdEZXNrdG9wJwoJUG93ZXJTaGVsbFZlcnNpb24gPSAnNS4xJwp9CgppZiAoJEluY2x1ZGVBc3NlbWJseSkgeyAkcGFyYW1OZXdNb2R1bGVNYW5pZmVzdC5SZXF1aXJlZEFzc2VtYmxpZXMgPSAkb3JpZ2luYWxNYW5pZmVzdERhdGEuUmVxdWlyZWRBc3NlbWJsaWVzIH0KaWYgKCRJbmNsdWRlRm9ybWF0KSB7ICRwYXJhbU5ld01vZHVsZU1hbmlmZXN0LkZvcm1hdHNUb1Byb2Nlc3MgPSAkb3JpZ2luYWxNYW5pZmVzdERhdGEuRm9ybWF0c1RvUHJvY2VzcyB9CmlmICgkSW5jbHVkZVR5cGUpIHsgJHBhcmFtTmV3TW9kdWxlTWFuaWZlc3QuVHlwZXNUb1Byb2Nlc3MgPSAkb3JpZ2luYWxNYW5pZmVzdERhdGEuVHlwZXNUb1Byb2Nlc3MgfQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJDcmVhdGluZyBNb2R1bGUgTWFuaWZlc3QgZm9yIG1vZHVsZTogJE1vZHVsZU5hbWUiCk5ldy1Nb2R1bGVNYW5pZmVzdCBAcGFyYW1OZXdNb2R1bGVNYW5pZmVzdAoKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiQ29weWluZyBhZGRpdGlvbmFsIG1vZHVsZSBmaWxlcyIKQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGNsaWVudE1vZHVsZVxtb2R1bGVyb290LnBzbTEiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCQoJE1vZHVsZU5hbWUpLnBzbTEiCkNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcTElDRU5TRSIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcIgojZW5kcmVnaW9uIENyZWF0ZSBDb3JlIE1vZHVsZSBGaWxlcwoKI3JlZ2lvbiBUcmFuc2ZlciBBZGRpdGlvbmFsIENvbnRlbnQKaWYgKCRJbmNsdWRlQXNzZW1ibHkpCnsKCUNvcHktSXRlbSAtUGF0aCAiJHB1Ymxpc2hSb290XGJpbiIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcIiAtUmVjdXJzZQp9CmlmICgkSW5jbHVkZUZvcm1hdCAtb3IgJEluY2x1ZGVUeXBlKQp7CglDb3B5LUl0ZW0gLVBhdGggIiRwdWJsaXNoUm9vdFx4bWwiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIgLVJlY3Vyc2UKfQojZW5kcmVnaW9uIFRyYW5zZmVyIEFkZGl0aW9uYWwgQ29udGVudAoKI3JlZ2lvbiBQdWJsaXNoCmlmICgkTG9jYWxSZXBvKQp7CgkjIERlcGVuZGVuY2llcyBtdXN0IGdvIGZpcnN0CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkNyZWF0aW5nIE51Z2V0IFBhY2thZ2UgZm9yIG1vZHVsZTogUFNGcmFtZXdvcmsiCglOZXctUFNNRE1vZHVsZU51Z2V0UGFja2FnZSAtTW9kdWxlUGF0aCAoR2V0LU1vZHVsZSAtTmFtZSBQU0ZyYW1ld29yaykuTW9kdWxlQmFzZSAtUGFja2FnZVBhdGggLiAtV2FybmluZ0FjdGlvbiBTaWxlbnRseUNvbnRpbnVlCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkNyZWF0aW5nIE51Z2V0IFBhY2thZ2UgZm9yIG1vZHVsZTogw75uYW1lw74iCglOZXctUFNNRE1vZHVsZU51Z2V0UGFja2FnZSAtTW9kdWxlUGF0aCAkd29ya2luZ1Jvb3QuRnVsbE5hbWUgLVBhY2thZ2VQYXRoIC4gLUVuYWJsZUV4Y2VwdGlvbgp9CmVsc2UKewoJIyBQdWJsaXNoIHRvIEdhbGxlcnkKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHVibGlzaGluZyB0aGUgw75uYW1lw74gbW9kdWxlIHRvICQoJFJlcG9zaXRvcnkpIgoJUHVibGlzaC1Nb2R1bGUgLVBhdGggJHdvcmtpbmdSb290LkZ1bGxOYW1lIC1OdUdldEFwaUtleSAkQXBpS2V5IC1Gb3JjZSAtUmVwb3NpdG9yeSAkUmVwb3NpdG9yeQp9CiNlbmRyZWdpb24gUHVibGlzaAEJXQAAAAleAAAABl8AAAAjdnN0cy1jcmVhdGVGdW5jdGlvbkNsaWVudE1vZHVsZS5wczEGYAAAAEQvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9idWlsZC92c3RzLWNyZWF0ZUZ1bmN0aW9uQ2xpZW50TW9kdWxlLnBzMQkGAAAACWIAAAAJYwAAAAE6AAAADgAAAAZkAAAAjSsKPCMKCS5TWU5PUFNJUwoJCVBhY2thZ2VzIGFuIEF6dXJlIEZ1bmN0aW9ucyBwcm9qZWN0LCByZWFkeSB0byByZWxlYXNlLgoJCgkuREVTQ1JJUFRJT04KCQlQYWNrYWdlcyBhbiBBenVyZSBGdW5jdGlvbnMgcHJvamVjdCwgcmVhZHkgdG8gcmVsZWFzZS4KCQlTaG91bGQgYmUgcGFydCBvZiB0aGUgcmVsZWFzZSBwaXBlbGluZSwgYWZ0ZXIgZW5zdXJpbmcgdmFsaWRhdGlvbi4KCgkJTG9vayBpbnRvIHRoZSAnQXp1cmVGdW5jdGlvblJlc3QnIHRlbXBsYXRlIGZvciBnZW5lcmF0aW5nIGZ1bmN0aW9ucyBmb3IgdGhlIG1vZHVsZSBpZiB5b3UgZG8uCgkKCS5QQVJBTUVURVIgV29ya2luZ0RpcmVjdG9yeQoJCVRoZSByb290IGZvbGRlciB0byB3b3JrIGZyb20uCgkKCS5QQVJBTUVURVIgUmVwb3NpdG9yeQoJCVRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5IHRvIHVzZSBmb3IgZ2F0aGVyaW5nIGRlcGVuZGVuY2llcyBmcm9tLgojPgpwYXJhbSAoCgkkV29ya2luZ0RpcmVjdG9yeSA9ICIkKCRlbnY6U1lTVEVNX0RFRkFVTFRXT1JLSU5HRElSRUNUT1JZKVxfw75uYW1lw74iLAoJCgkkUmVwb3NpdG9yeSA9ICdQU0dhbGxlcnknLAoKCVtzd2l0Y2hdCgkkSW5jbHVkZUFaCikKCiRtb2R1bGVOYW1lID0gJ8O+bmFtZcO+JwoKIyBQcmVwYXJlIFBhdGhzCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIkNyZWF0aW5nIHdvcmtpbmcgZm9sZGVycyIKJG1vZHVsZVJvb3QgPSBKb2luLVBhdGggLVBhdGggJFdvcmtpbmdEaXJlY3RvcnkgLUNoaWxkUGF0aCAncHVibGlzaCcKJHdvcmtpbmdSb290ID0gTmV3LUl0ZW0gLVBhdGggJFdvcmtpbmdEaXJlY3RvcnkgLU5hbWUgJ3dvcmtpbmcnIC1JdGVtVHlwZSBEaXJlY3RvcnkKJG1vZHVsZXNGb2xkZXIgPSBOZXctSXRlbSAtUGF0aCAkd29ya2luZ1Jvb3QuRnVsbE5hbWUgLU5hbWUgTW9kdWxlcyAtSXRlbVR5cGUgRGlyZWN0b3J5CgojIEZpbGwgb3V0IHRoZSBtb2R1bGVzIGZvbGRlcgpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJUcmFuc2ZlcmluZyBidWlsdCBtb2R1bGUgZGF0YSBpbnRvIHdvcmtpbmcgZGlyZWN0b3J5IgpDb3B5LUl0ZW0gLVBhdGggIiRtb2R1bGVSb290XCRtb2R1bGVOYW1lIiAtRGVzdGluYXRpb24gJG1vZHVsZXNGb2xkZXIuRnVsbE5hbWUgLVJlY3Vyc2UgLUZvcmNlCmZvcmVhY2ggKCRkZXBlbmRlbmN5IGluIChJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkbW9kdWxlUm9vdFwkbW9kdWxlTmFtZVwkbW9kdWxlTmFtZS5wc2QxIikuUmVxdWlyZWRNb2R1bGVzKQp7CgkkcGFyYW0gPSBAewoJCVJlcG9zaXRvcnkgPSAkUmVwb3NpdG9yeQoJCU5hbWUJICAgPSAkZGVwZW5kZW5jeS5Nb2R1bGVOYW1lCgkJUGF0aAkgICA9ICRtb2R1bGVzRm9sZGVyLkZ1bGxOYW1lCgl9CglpZiAoJGRlcGVuZGVuY3kgLWlzIFtzdHJpbmddKSB7ICRwYXJhbVsnTmFtZSddID0gJGRlcGVuZGVuY3kgfQoJaWYgKCRkZXBlbmRlbmN5LlJlcXVpcmVkVmVyc2lvbikKCXsKCQkkcGFyYW1bJ1JlcXVpcmVkVmVyc2lvbiddID0gJGRlcGVuZGVuY3kuUmVxdWlyZWRWZXJzaW9uCgl9CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJQcmVwYXJpbmcgRGVwZW5kZW5jeTogJCgkcGFyYW1bJ05hbWUnXSkiCglTYXZlLU1vZHVsZSBAcGFyYW0KfQoKIyBHZW5lcmF0ZSBmdW5jdGlvbiBjb25maWd1cmF0aW9uCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgJ0dlbmVyYXRpbmcgZnVuY3Rpb24gY29uZmlndXJhdGlvbicKJHJ1blRlbXBsYXRlID0gR2V0LUNvbnRlbnQgLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNccnVuLnBzMSIgLVJhdwpmb3JlYWNoICgkZnVuY3Rpb25Tb3VyY2VGaWxlIGluIChHZXQtQ2hpbGRJdGVtIC1QYXRoICIkKCRtb2R1bGVSb290KVwkbW9kdWxlTmFtZVxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWx0ZXIgJyoucHMxJykpCnsKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIiAgUHJvY2Vzc2luZyBmdW5jdGlvbjogJGZ1bmN0aW9uU291cmNlRmlsZSIKCSRjb25kZW5zZWROYW1lID0gJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSAtcmVwbGFjZSAnLScsICcnCgkkZnVuY3Rpb25Gb2xkZXIgPSBOZXctSXRlbSAtUGF0aCAkd29ya2luZ1Jvb3QuRnVsbE5hbWUgLU5hbWUgJGNvbmRlbnNlZE5hbWUgLUl0ZW1UeXBlIERpcmVjdG9yeQoJCgkjcmVnaW9uIExvYWQgT3ZlcnJpZGVzCgkkb3ZlcnJpZGUgPSBAeyB9CglpZiAoVGVzdC1QYXRoIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5wc2QxIikKCXsKCQkkb3ZlcnJpZGUgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5wc2QxIgoJfQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGNvbmRlbnNlZE5hbWUpLnBzZDEiKQoJewoJCSRvdmVycmlkZSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5wc2QxIgoJfQoJI2VuZHJlZ2lvbiBMb2FkIE92ZXJyaWRlcwoJCgkjcmVnaW9uIENyZWF0ZSBGdW5jdGlvbiBDb25maWd1cmF0aW9uCgkkcmVzdE1ldGhvZHMgPSAnZ2V0JywgJ3Bvc3QnCglpZiAoJG92ZXJyaWRlLlJlc3RNZXRob2RzKSB7ICRyZXN0TWV0aG9kcyA9ICRvdmVycmlkZS5SZXN0TWV0aG9kcyB9CgkKCVNldC1Db250ZW50IC1QYXRoICIkKCRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSlcZnVuY3Rpb24uanNvbiIgLVZhbHVlIEAiCnsKICAgICJiaW5kaW5ncyI6IFsKICAgICAgICB7CiAgICAgICAgImF1dGhMZXZlbCI6ICJmdW5jdGlvbiIsCiAgICAgICAgInR5cGUiOiAiaHR0cFRyaWdnZXIiLAogICAgICAgICJkaXJlY3Rpb24iOiAiaW4iLAogICAgICAgICJuYW1lIjogIlJlcXVlc3QiLAogICAgICAgICJtZXRob2RzIjogWwogICAgICAgICAgICAiJCgkcmVzdE1ldGhvZHMgLWpvaW4gImAiLAogICAgICAgICAgICBgIiIpIgogICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAidHlwZSI6ICJodHRwIiwKICAgICAgICAiZGlyZWN0aW9uIjogIm91dCIsCiAgICAgICAgIm5hbWUiOiAiUmVzcG9uc2UiCiAgICAgICAgfQogICAgXSwKICAgICJkaXNhYmxlZCI6IGZhbHNlCn0KIkAKCSNlbmRyZWdpb24gQ3JlYXRlIEZ1bmN0aW9uIENvbmZpZ3VyYXRpb24KCQoJI3JlZ2lvbiBPdmVycmlkZSBGdW5jdGlvbiBDb25maWd1cmF0aW9uCglpZiAoVGVzdC1QYXRoIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5qc29uIikKCXsKCQlDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpLmpzb24iIC1EZXN0aW5hdGlvbiAiJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXGZ1bmN0aW9uLmpzb24iIC1Gb3JjZQoJfQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGNvbmRlbnNlZE5hbWUpLmpzb24iKQoJewoJCUNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGNvbmRlbnNlZE5hbWUpLmpzb24iIC1EZXN0aW5hdGlvbiAiJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXGZ1bmN0aW9uLmpzb24iIC1Gb3JjZQoJfQoJI2VuZHJlZ2lvbiBPdmVycmlkZSBGdW5jdGlvbiBDb25maWd1cmF0aW9uCgkKCSMgR2VuZXJhdGUgdGhlIHJ1bi5wczEgZmlsZQoJJHJ1blRleHQgPSAkcnVuVGVtcGxhdGUgLXJlcGxhY2UgJyVmdW5jdGlvbm5hbWUlJywgJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZQoJJHJ1blRleHQgfCBTZXQtQ29udGVudCAtUGF0aCAiJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXHJ1bi5wczEiIC1FbmNvZGluZyBVVEY4Cn0KCiMgVHJhbnNmZXIgY29tbW9uIGZpbGVzCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIlRyYW5zZmVyaW5nIGNvcmUgZnVuY3Rpb24gZGF0YSIKaWYgKCRJbmNsdWRlQVopCnsKCUNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xob3N0LWF6Lmpzb24iIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXGhvc3QuanNvbiIKCUNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xyZXF1aXJlbWVudHMucHNkMSIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5ncm9vdC5GdWxsTmFtZSlcIgp9CmVsc2UKewoJQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGhvc3QuanNvbiIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5ncm9vdC5GdWxsTmFtZSlcIgp9CkNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xsb2NhbC5zZXR0aW5ncy5qc29uIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdyb290LkZ1bGxOYW1lKVwiCgojIEJ1aWxkIHRoZSBwcm9maWxlIGZpbGUKJHRleHQgPSBAKCkKJHRleHQgKz0gR2V0LUNvbnRlbnQgLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNccHJvZmlsZS5wczEiIC1SYXcKZm9yZWFjaCAoJGZ1bmN0aW9uRmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xwcm9maWxlRnVuY3Rpb25zIiAtUmVjdXJzZSkpCnsKCSR0ZXh0ICs9IEdldC1Db250ZW50IC1QYXRoICRmdW5jdGlvbkZpbGUuRnVsbE5hbWUgLVJhdwp9CiR0ZXh0IC1qb2luICJgbmBuIiB8IFNldC1Db250ZW50ICIkKCR3b3JraW5ncm9vdC5GdWxsTmFtZSlccHJvZmlsZS5wczEiCgojIFppcCBJdApXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJDcmVhdGluZyBmdW5jdGlvbiBhcmNoaXZlIGluICckKCRXb3JraW5nRGlyZWN0b3J5KVwkbW9kdWxlTmFtZS56aXAnIgpDb21wcmVzcy1BcmNoaXZlIC1QYXRoICIkKCR3b3JraW5ncm9vdC5GdWxsTmFtZSlcKiIgLURlc3RpbmF0aW9uUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcJG1vZHVsZU5hbWUuemlwIiAtRm9yY2UBCWUAAAAJZgAAAAZnAAAAGHZzdHMtcGFja2FnZUZ1bmN0aW9uLnBzMQZoAAAAOS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2J1aWxkL3ZzdHMtcGFja2FnZUZ1bmN0aW9uLnBzMQkGAAAACWoAAAAJawAAAAE7AAAADgAAAAZsAAAAjgZwYXJhbSAoCiAgICBbc3RyaW5nXQogICAgJFJlcG9zaXRvcnkgPSAnUFNHYWxsZXJ5JwopCgokbW9kdWxlcyA9IEAoIlBlc3RlciIsICJQU0ZyYW1ld29yayIsICJQU01vZHVsZURldmVsb3BtZW50IiwgIlBTU2NyaXB0QW5hbHl6ZXIiKQoKIyBBdXRvbWF0aWNhbGx5IGFkZCBtaXNzaW5nIGRlcGVuZGVuY2llcwokZGF0YSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw75cw75uYW1lw74ucHNkMSIKZm9yZWFjaCAoJGRlcGVuZGVuY3kgaW4gJGRhdGEuUmVxdWlyZWRNb2R1bGVzKSB7CiAgICBpZiAoJGRlcGVuZGVuY3kgLWlzIFtzdHJpbmddKSB7CiAgICAgICAgaWYgKCRtb2R1bGVzIC1jb250YWlucyAkZGVwZW5kZW5jeSkgeyBjb250aW51ZSB9CiAgICAgICAgJG1vZHVsZXMgKz0gJGRlcGVuZGVuY3kKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICgkbW9kdWxlcyAtY29udGFpbnMgJGRlcGVuZGVuY3kuTW9kdWxlTmFtZSkgeyBjb250aW51ZSB9CiAgICAgICAgJG1vZHVsZXMgKz0gJGRlcGVuZGVuY3kuTW9kdWxlTmFtZQogICAgfQp9Cgpmb3JlYWNoICgkbW9kdWxlIGluICRtb2R1bGVzKSB7CiAgICBXcml0ZS1Ib3N0ICJJbnN0YWxsaW5nICRtb2R1bGUiIC1Gb3JlZ3JvdW5kQ29sb3IgQ3lhbgogICAgSW5zdGFsbC1Nb2R1bGUgJG1vZHVsZSAtRm9yY2UgLVNraXBQdWJsaXNoZXJDaGVjayAtUmVwb3NpdG9yeSAkUmVwb3NpdG9yeQogICAgSW1wb3J0LU1vZHVsZSAkbW9kdWxlIC1Gb3JjZSAtUGFzc1RocnUKfQEJbQAAAAluAAAABm8AAAAWdnN0cy1wcmVyZXF1aXNpdGVzLnBzMQZwAAAANy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2J1aWxkL3ZzdHMtcHJlcmVxdWlzaXRlcy5wczEJBgAAAAlyAAAACXMAAAABPAAAAA4AAAAGdAAAAMQCIyBHdWlkZSBmb3IgYXZhaWxhYmxlIHZhcmlhYmxlcyBhbmQgd29ya2luZyB3aXRoIHNlY3JldHM6CiMgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdnN0cy9idWlsZC1yZWxlYXNlL2NvbmNlcHRzL2RlZmluaXRpb25zL2J1aWxkL3ZhcmlhYmxlcz90YWJzPXBvd2Vyc2hlbGwKCiMgTmVlZHMgdG8gZW5zdXJlIHRoaW5ncyBhcmUgRG9uZSBSaWdodCBhbmQgb25seSBsZWdhbCBjb21taXRzIHRvIG1hc3RlciBnZXQgYnVpbHQKCiMgUnVuIGludGVybmFsIHBlc3RlciB0ZXN0cwomICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+XHRlc3RzXHBlc3Rlci5wczEiAQl1AAAACXYAAAAGdwAAABF2c3RzLXZhbGlkYXRlLnBzMQZ4AAAAMi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2J1aWxkL3ZzdHMtdmFsaWRhdGUucHMxCQYAAAAJegAAAAl7AAAAAT0AAAABAAAACXwAAAAGfQAAAANiaW4GfgAAADgvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2JpbgkGAAAACYAAAAAJgQAAAAE+AAAAAQAAAAmCAAAABoMAAAAFZW4tdXMGhAAAADovU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2VuLXVzCQYAAAAJhgAAAAmHAAAAAT8AAAABAAAACYgAAAAGiQAAAAlmdW5jdGlvbnMGigAAAD4vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2Z1bmN0aW9ucwkGAAAACYwAAAAJjQAAAAFAAAAAAQAAAAmOAAAABo8AAAAIaW50ZXJuYWwGkAAAAD0vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsCQYAAAAJkgAAAAmTAAAAAUEAAAABAAAACZQAAAAGlQAAACNTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbgaWAAAAWC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24JBgAAAAmYAAAACZkAAAABQgAAAAEAAAAJmgAAAAabAAAABXRlc3RzBpwAAAA6L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cwkGAAAACZ4AAAAJnwAAAAFDAAAAAQAAAAmgAAAABqEAAAADeG1sBqIAAAA4L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi94bWwJBgAAAAmkAAAACaUAAAABRAAAAA4AAAAGpgAAAGojIENoYW5nZWxvZwojIyAxLjAuMCAow74hZHluYW1pY3NjcmlwdF84NDQxMTIhw74pCiAtIE5ldzogU29tZSBTdHVmZgogLSBVcGQ6IE1vYXIgU3R1ZmYKIC0gRml4OiBNdWNoIFN0dWZmAQmnAAAACagAAAAGqQAAAAxjaGFuZ2Vsb2cubWQGqgAAAEEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2NoYW5nZWxvZy5tZAkGAAAACawAAAAJrQAAAAFFAAAADgAAAAauAAAA/gcjIFBTRk1vZHVsZSBndWlkYW5jZQoKVGhpcyBpcyBhIGZpbmlzaGVkIG1vZHVsZSBsYXlvdXQgb3B0aW1pemVkIGZvciBpbXBsZW1lbnRpbmcgdGhlIFBTRnJhbWV3b3JrLgoKSWYgeW91IGRvbid0IGNhcmUgdG8gZGVhbCB3aXRoIHRoZSBkZXRhaWxzLCB0aGlzIGlzIHdoYXQgeW91IG5lZWQgdG8gZG8gdG8gZ2V0IHN0YXJ0ZWQgc2VlaW5nIHJlc3VsdHM6CgogLSBBZGQgdGhlIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHRvIGAvZnVuY3Rpb25zL2AKIC0gVXBkYXRlIHRoZSBgRnVuY3Rpb25zVG9FeHBvcnRgIG5vZGUgaW4gdGhlIG1vZHVsZSBtYW5pZmVzdCAow75uYW1lw74ucHNkMSkuIEFsbCBmdW5jdGlvbnMgeW91IHdhbnQgdG8gcHVibGlzaCBzaG91bGQgYmUgaW4gYSBsaXN0LgogLSBBZGQgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyB0aGUgdXNlciBzaG91bGQgbm90IHNlZSB0byBgL2ludGVybmFsL2Z1bmN0aW9ucy9gCiAKICMjIFBhdGggV2FybmluZwogCiA+IElmIHlvdSB3YW50IHlvdXIgbW9kdWxlIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBMaW51eCBhbmQgTWFjT1MsIGtlZXAgaW4gbWluZCB0aGF0IHRob3NlIE9TIGFyZSBjYXNlIHNlbnNpdGl2ZSBmb3IgcGF0aHMgYW5kIGZpbGVzLgogCiBgSW1wb3J0LU1vZHVsZUZpbGVgIGlzIHByZWNvbmZpZ3VyZWQgdG8gcmVzb2x2ZSB0aGUgcGF0aCBvZiB0aGUgZmlsZXMgc3BlY2lmaWVkLCBzbyBpdCB3aWxsIHJlbGlhYmx5IGNvbnZlcnQgd2VpcmQgcGF0aCBub3RhdGlvbnMgdGhlIHN5c3RlbSBjYW4ndCBoYW5kbGUuCiBDb250ZW50IGltcG9ydGVkIHRocm91Z2ggdGhhdCBjb21tYW5kIHRodXMgbmVlZCBub3QgbWluZCB0aGUgcGF0aCBzZXBhcmF0b3IuCiBJZiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgeW91ciBjb2RlIHRvbyB3aWxsIHN1cnZpdmUgT1Mtc3BlY2lmaWMgcGF0aCBub3RhdGlvbnMsIGdldCB1c2VkIHRvIHVzaW5nIGBSZXNvbHZlLXBhdGhgIG9yIHRoZSBtb3JlIHBvd2VyZnVsIGBSZXNvbHZlLVBTRlBhdGhgLgEJrwAAAAmwAAAABrEAAAAJcmVhZG1lLm1kBrIAAAA+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9yZWFkbWUubWQJBgAAAAm0AAAACbUAAAABRgAAAA4AAAAGtgAAAPsSQHsKCSMgU2NyaXB0IG1vZHVsZSBvciBiaW5hcnkgbW9kdWxlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFuaWZlc3QKCVJvb3RNb2R1bGUgICAgICAgID0gJ8O+bmFtZcO+LnBzbTEnCgoJIyBWZXJzaW9uIG51bWJlciBvZiB0aGlzIG1vZHVsZS4KCU1vZHVsZVZlcnNpb24gICAgID0gJzEuMC4wJwoKCSMgSUQgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIG1vZHVsZQoJR1VJRCAgICAgICAgICAgICAgPSAnw74hZ3VpZFJvb3RNb2R1bGUhw74nCgoJIyBBdXRob3Igb2YgdGhpcyBtb2R1bGUKCUF1dGhvciAgICAgICAgICAgID0gJ8O+YXV0aG9yw74nCgoJIyBDb21wYW55IG9yIHZlbmRvciBvZiB0aGlzIG1vZHVsZQoJQ29tcGFueU5hbWUgICAgICAgPSAnw75jb21wYW55w74nCgoJIyBDb3B5cmlnaHQgc3RhdGVtZW50IGZvciB0aGlzIG1vZHVsZQoJQ29weXJpZ2h0ICAgICAgICAgPSAnQ29weXJpZ2h0IChjKSDDviF5ZWFyIcO+IMO+YXV0aG9yw74nCgoJIyBEZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGlzIG1vZHVsZQoJRGVzY3JpcHRpb24gICAgICAgPSAnw75kZXNjcmlwdGlvbsO+JwoKCSMgTWluaW11bSB2ZXJzaW9uIG9mIHRoZSBXaW5kb3dzIFBvd2VyU2hlbGwgZW5naW5lIHJlcXVpcmVkIGJ5IHRoaXMgbW9kdWxlCglQb3dlclNoZWxsVmVyc2lvbiA9ICc1LjAnCgoJIyBNb2R1bGVzIHRoYXQgbXVzdCBiZSBpbXBvcnRlZCBpbnRvIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgcHJpb3IgdG8gaW1wb3J0aW5nCgkjIHRoaXMgbW9kdWxlCglSZXF1aXJlZE1vZHVsZXMgICA9IEAoCgkJQHsgTW9kdWxlTmFtZSA9ICdQU0ZyYW1ld29yayc7IE1vZHVsZVZlcnNpb24gPSAnw74hcHNmcmFtZXdvcmshw74nIH0KCQlAeyBNb2R1bGVOYW1lID0gJ01pY3Jvc29mdC5Qb3dlcnNoZWxsLlNlY3JldE1hbmFnZW1lbnQnOyBNb2R1bGVWZXJzaW9uID0gJ8O+IXNlY3JldE1hbmFnZW1lbnRWZXJzaW9uIcO+JyB9LAoJKQoKCSMgQXNzZW1ibGllcyB0aGF0IG11c3QgYmUgbG9hZGVkIHByaW9yIHRvIGltcG9ydGluZyB0aGlzIG1vZHVsZQoJIyBSZXF1aXJlZEFzc2VtYmxpZXMgPSBAKCdiaW5cw75uYW1lw74uZGxsJykKCgkjIFR5cGUgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQoJIyBUeXBlc1RvUHJvY2VzcyA9IEAoJ3htbFzDvm5hbWXDvi5UeXBlcy5wczF4bWwnKQoKCSMgRm9ybWF0IGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUKCSMgRm9ybWF0c1RvUHJvY2VzcyA9IEAoJ3htbFzDvm5hbWXDvi5Gb3JtYXQucHMxeG1sJykKCgkjIEZ1bmN0aW9ucyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJRnVuY3Rpb25zVG9FeHBvcnQgPSAnJwoKCSMgQ21kbGV0cyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJQ21kbGV0c1RvRXhwb3J0ICAgPSAnJwoKCSMgVmFyaWFibGVzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlCglWYXJpYWJsZXNUb0V4cG9ydCA9ICcnCgoJIyBBbGlhc2VzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlCglBbGlhc2VzVG9FeHBvcnQgICA9ICcnCgoJIyBMaXN0IG9mIGFsbCBtb2R1bGVzIHBhY2thZ2VkIHdpdGggdGhpcyBtb2R1bGUKCU1vZHVsZUxpc3QgICAgICAgID0gQCgpCgoJIyBMaXN0IG9mIGFsbCBmaWxlcyBwYWNrYWdlZCB3aXRoIHRoaXMgbW9kdWxlCglGaWxlTGlzdCAgICAgICAgICA9IEAoKQoKCSMgUHJpdmF0ZSBkYXRhIHRvIHBhc3MgdG8gdGhlIG1vZHVsZSBzcGVjaWZpZWQgaW4gTW9kdWxlVG9Qcm9jZXNzLiBUaGlzIG1heSBhbHNvIGNvbnRhaW4gYSBQU0RhdGEgaGFzaHRhYmxlIHdpdGggYWRkaXRpb25hbCBtb2R1bGUgbWV0YWRhdGEgdXNlZCBieSBQb3dlclNoZWxsLgoJUHJpdmF0ZURhdGEgICAgICAgPSBAewoKCQkjU3VwcG9ydCBmb3IgUG93ZXJTaGVsbEdldCBnYWxsZXJpZXMuCgkJUFNEYXRhID0gQHsKCgkJCSMgVGFncyBhcHBsaWVkIHRvIHRoaXMgbW9kdWxlLiBUaGVzZSBoZWxwIHdpdGggbW9kdWxlIGRpc2NvdmVyeSBpbiBvbmxpbmUgZ2FsbGVyaWVzLgoJCQkjIFRhZ3MgPSBAKCkKCgkJCSMgQSBVUkwgdG8gdGhlIGxpY2Vuc2UgZm9yIHRoaXMgbW9kdWxlLgoJCQkjIExpY2Vuc2VVcmkgPSAnJwoKCQkJIyBBIFVSTCB0byB0aGUgbWFpbiB3ZWJzaXRlIGZvciB0aGlzIHByb2plY3QuCgkJCSMgUHJvamVjdFVyaSA9ICcnCgoJCQkjIEEgVVJMIHRvIGFuIGljb24gcmVwcmVzZW50aW5nIHRoaXMgbW9kdWxlLgoJCQkjIEljb25VcmkgPSAnJwoKCQkJIyBSZWxlYXNlTm90ZXMgb2YgdGhpcyBtb2R1bGUKCQkJIyBSZWxlYXNlTm90ZXMgPSAnJwoKCQl9ICMgRW5kIG9mIFBTRGF0YSBoYXNodGFibGUKCgl9ICMgRW5kIG9mIFByaXZhdGVEYXRhIGhhc2h0YWJsZQp9AQm3AAAACbgAAAAGuQAAAB5TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEGugAAAFMvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMQkGAAAACbwAAAAJvQAAAAFHAAAADgAAAAa+AAAAoBokc2NyaXB0Ok1vZHVsZVJvb3QgPSAkUFNTY3JpcHRSb290CiRzY3JpcHQ6TW9kdWxlVmVyc2lvbiA9IChJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcw75uYW1lw74ucHNkMSIpLk1vZHVsZVZlcnNpb24KCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBkb3Rzb3VyY2luZyB3YXMgZW5mb3JjZWQKJHNjcmlwdDpkb0RvdFNvdXJjZSA9IEdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgw75uYW1lw74uSW1wb3J0LkRvRG90U291cmNlIC1GYWxsYmFjayAkZmFsc2UKaWYgKCTDvm5hbWXDvl9kb3Rzb3VyY2Vtb2R1bGUpIHsgJHNjcmlwdDpkb0RvdFNvdXJjZSA9ICR0cnVlIH0KCjwjCk5vdGUgb24gUmVzb2x2ZS1QYXRoOgpBbGwgcGF0aHMgYXJlIHNlbnQgdGhyb3VnaCBSZXNvbHZlLVBhdGgvUmVzb2x2ZS1QU0ZQYXRoIGluIG9yZGVyIHRvIGNvbnZlcnQgdGhlbSB0byB0aGUgY29ycmVjdCBwYXRoIHNlcGFyYXRvci4KVGhpcyBhbGxvd3MgaWdub3JpbmcgcGF0aCBzZXBhcmF0b3JzIHRocm91Z2hvdXQgdGhlIGltcG9ydCBzZXF1ZW5jZSwgd2hpY2ggY291bGQgb3RoZXJ3aXNlIGNhdXNlIHRyb3VibGUgZGVwZW5kaW5nIG9uIE9TLgpSZXNvbHZlLVBhdGggY2FuIG9ubHkgYmUgdXNlZCBmb3IgcGF0aHMgdGhhdCBhbHJlYWR5IGV4aXN0LCBSZXNvbHZlLVBTRlBhdGggY2FuIGFjY2VwdCB0aGF0IHRoZSBsYXN0IGxlYWYgbXkgbm90IGV4aXN0LgpUaGlzIGlzIGltcG9ydGFudCB3aGVuIHRlc3RpbmcgZm9yIHBhdGhzLgojPgoKIyBEZXRlY3Qgd2hldGhlciBhdCBzb21lIGxldmVsIGxvYWRpbmcgaW5kaXZpZHVhbCBtb2R1bGUgZmlsZXMsIHJhdGhlciB0aGFuIHRoZSBjb21waWxlZCBtb2R1bGUgd2FzIGVuZm9yY2VkCiRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5JbmRpdmlkdWFsRmlsZXMgLUZhbGxiYWNrICRmYWxzZQppZiAoJMO+bmFtZcO+X2ltcG9ydEluZGl2aWR1YWxGaWxlcykgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQppZiAoVGVzdC1QYXRoIChSZXNvbHZlLVBTRlBhdGggLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVwuLlwuZ2l0IiAtU2luZ2xlSXRlbSAtTmV3Q2hpbGQpKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9CmlmICgiPHdhcyBub3QgY29tcGlsZWQ+IiAtZXEgJzx3YXMgbm90IGNvbXBpbGVkPicpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0KCmZ1bmN0aW9uIEltcG9ydC1Nb2R1bGVGaWxlCnsKCTwjCgkJLlNZTk9QU0lTCgkJCUxvYWRzIGZpbGVzIGludG8gdGhlIG1vZHVsZSBvbiBtb2R1bGUgaW1wb3J0LgoKCQkuREVTQ1JJUFRJT04KCQkJVGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLgoJCQlJdCBzaG91bGQgYWx3YXlzIGJlIGRvdHNvdXJjZWQgaXRzZWxmLCBpbiBvcmRlciB0byBwcm9wZXIgZnVuY3Rpb24uCgoJCQlUaGlzIHByb3ZpZGVzIGEgY2VudHJhbCBsb2NhdGlvbiB0byByZWFjdCB0byBmaWxlcyBiZWluZyBpbXBvcnRlZCwgaWYgbGF0ZXIgZGVzaXJlZAoKCQkuUEFSQU1FVEVSIFBhdGgKCQkJVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gbG9hZAoKCQkuRVhBTVBMRQoJCQlQUyBDOlw+IC4gSW1wb3J0LU1vZHVsZUZpbGUgLUZpbGUgJGZ1bmN0aW9uLkZ1bGxOYW1lCgoJCQlJbXBvcnRzIHRoZSBmaWxlIHN0b3JlZCBpbiAkZnVuY3Rpb24gYWNjb3JkaW5nIHRvIGltcG9ydCBwb2xpY3kKCSM+CglbQ21kbGV0QmluZGluZygpXQoJUGFyYW0gKAoJCVtzdHJpbmddCgkJJFBhdGgKCSkKCgkkcmVzb2x2ZWRQYXRoID0gJEV4ZWN1dGlvbkNvbnRleHQuU2Vzc2lvblN0YXRlLlBhdGguR2V0UmVzb2x2ZWRQU1BhdGhGcm9tUFNQYXRoKCRQYXRoKS5Qcm92aWRlclBhdGgKCWlmICgkZG9Eb3RTb3VyY2UpIHsgLiAkcmVzb2x2ZWRQYXRoIH0KCWVsc2UgeyAkRXhlY3V0aW9uQ29udGV4dC5JbnZva2VDb21tYW5kLkludm9rZVNjcmlwdCgkZmFsc2UsIChbc2NyaXB0YmxvY2tdOjpDcmVhdGUoW2lvLmZpbGVdOjpSZWFkQWxsVGV4dCgkcmVzb2x2ZWRQYXRoKSkpLCAkbnVsbCwgJG51bGwpIH0KfQoKI3JlZ2lvbiBMb2FkIGluZGl2aWR1YWwgZmlsZXMKaWYgKCRpbXBvcnRJbmRpdmlkdWFsRmlsZXMpCnsKCSMgRXhlY3V0ZSBQcmVpbXBvcnQgYWN0aW9ucwoJZm9yZWFjaCAoJHBhdGggaW4gKCYgIiRNb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNccHJlaW1wb3J0LnBzMSIpKSB7CgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkcGF0aAoJfQoKCSMgSW1wb3J0IGFsbCBpbnRlcm5hbCBmdW5jdGlvbnMKCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcZnVuY3Rpb25zIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpCgl7CgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUKCX0KCgkjIEltcG9ydCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zIHdoaWNoIGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUgRXh0ZW5zaW9uIGFuZCB0aGUgTWFpbi1Nb2R1bGUKCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cZnVuY3Rpb25zLnNoYXJlZGludGVybmFsIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpIHsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQoJfQoKCSMgSW1wb3J0IGFsbCBwdWJsaWMg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AAAJDAEAAAkNAQAAChHgAAAABAAAAAYOAQAAFGR5bmFtaWNzY3JpcHRfODQ0MTEyDQMR4gAAAAQAAAAGDwEAAARuYW1lDQMR5AAAAAQAAAAGEAEAAARuYW1lBhEBAAAGYXV0aG9yBhIBAAAHY29tcGFueQYTAQAAC2Rlc2NyaXB0aW9uEeUAAAAEAAAABhQBAAAOZ3VpZFJvb3RNb2R1bGUGFQEAAAR5ZWFyBhYBAAALcHNmcmFtZXdvcmsGFwEAABdzZWNyZXRNYW5hZ2VtZW50VmVyc2lvbhHmAAAABAAAAAYYAQAABG5hbWUNAxHoAAAABAAAAAYZAQAABG5hbWUNAxHqAAAABAAAAAYaAQAABG5hbWUNAwHxAAAADgAAAAYbAQAA6AIjIGJpbiBmb2xkZXIKClRoZSBiaW4gZm9sZGVyIGV4aXN0cyB0byBzdG9yZSBiaW5hcnkgZGF0YS4gQW5kIHNjcmlwdHMgcmVsYXRlZCB0byB0aGUgdHlwZSBzeXN0ZW0uCgpUaGlzIG1heSBpbmNsdWRlIHlvdXIgb3duIEMjLWJhc2VkIGxpYnJhcnksIHRoaXJkIHBhcnR5IGxpYnJhcmllcyB5b3Ugd2FudCB0byBpbmNsdWRlICh3YXRjaCB0aGUgbGljZW5zZSEpLCBvciBhIHNjcmlwdCBkZWNsYXJpbmcgdHlwZSBhY2NlbGVyYXRvcnMgKGVmZmVjdGl2ZWx5IGFsaWFzZXMgZm9yIC5ORVQgdHlwZXMpCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBUeXBlIEFjY2VsZXJhdG9ycywgc2VlIHRoZSBoZWxwIG9uIFNldC1QU0ZUeXBlQWxpYXMBCRwBAAAJHQEAAAYeAQAACXJlYWRtZS5tZAYfAQAAQi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vYmluL3JlYWRtZS5tZAkGAAAACSEBAAAJIgEAAAHyAAAADgAAAAYjAQAAmwFUT1BJQwoJYWJvdXRfw75uYW1lw74KCQpTSE9SVCBERVNDUklQVElPTgoJRXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgw75uYW1lw74gcG93ZXJzaGVsbCBtb2R1bGUKCQpMT05HIERFU0NSSVBUSU9OCgk8SW5zZXJ0IENvbnRlbnQgaGVyZT4KCktFWVdPUkRTCgnDvm5hbWXDvgEJJAEAAAklAQAABiYBAAAXYWJvdXRfw75uYW1lw74uaGVscC50eHQGJwEAAFIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2VuLXVzL2Fib3V0X8O+bmFtZcO+LmhlbHAudHh0CQYAAAAJKQEAAAkqAQAAAfMAAAAOAAAABisBAACZASMgVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBnbywgdGhhdCBhcmUgd3JpdHRlbiBieQojIFdyaXRlLVBTRk1lc3NhZ2UsIFN0b3AtUFNGRnVuY3Rpb24gb3IgdGhlIFBTRnJhbWV3b3JrIHZhbGlkYXRpb24gc2NyaXB0YmxvY2tzCkB7Cgkna2V5JyA9ICdWYWx1ZScKfQEJLAEAAAktAQAABi4BAAAMc3RyaW5ncy5wc2QxBi8BAABHL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9lbi11cy9zdHJpbmdzLnBzZDEJBgAAAAkxAQAACTIBAAAB9AAAAA4AAAAGMwEAAMwBIyBGdW5jdGlvbnMKClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSB0aGUgZnVuY3Rpb25zIGdvLgoKRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4KClRoZSBtb2R1bGUgd2lsbCBwaWNrIHVwIGFsbCAucHMxIGZpbGVzIHJlY3Vyc2l2ZWx5AQk0AQAACTUBAAAGNgEAAAlyZWFkbWUubWQGNwEAAEgvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2Z1bmN0aW9ucy9yZWFkbWUubWQJBgAAAAk5AQAACToBAAAB9QAAAA4AAAAGOwEAAMQOZnVuY3Rpb24gUmVnaXN0ZXItw75mdW5jdGlvblByZWZpeMO+U2VjdXJlVmF1bHQgewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgUmVnaXN0ZXJzIGEgbmV3IFNlY3JldHZhdWx0IG9mIHR5cGUgw75uYW1lw74uCgogICAgLkRFU0NSSVBUSU9OCiAgICBSZWdpc3RlcnMgYSBuZXcgU2VjcmV0dmF1bHQgb2YgdHlwZSDDvm5hbWXDvi4KCiAgICAjVE9ETyBBZGQgcGFyYW1ldGVyIGRlc2NyaXB0aW9uCgogICAgLk5PVEVTCiAgICBHZW5lcmFsIG5vdGVzCiAgICAjPgogICAgW0NtZGxldEJpbmRpbmcoU3VwcG9ydHNTaG91bGRQcm9jZXNzKV0KICAgIHBhcmFtICgKCiAgICAgICAgW3BhcmFtZXRlcihtYW5kYXRvcnkgPSAkdHJ1ZSwgUGFyYW1ldGVyU2V0TmFtZSA9ICJjbWRMaW5lIildCiAgICAgICAgW3N0cmluZ10kVmF1bHROYW1lCiAgICAgICAgIyBUT0RPIGFkZCB5b3VyIHNwZWNpZmljIHBhcmFtZXRlcnMKICAgICkKICAgICMgSW4gb3JkZXIgdG8gcmVnaXN0ZXIgYSB2YXVsdCB5b3UgbmVlZCB0aGUgbW9kdWxlIG5hbWUuIEZvciBkZXYgcHVycG9zZXMKICAgICMgdGhpcyBjb2RlIChzZWUgY29uZmlndXJhdGlvbi5wczEpIGVuYWJsZXMgdGhlIGRldGVjdGlvbiBpZiB0aGUgbW9kdWxlIGlzIGluc3RhbGxlZAogICAgIyBvciB0aGUgUFNEMSBmaWxlIGlzIGltcG9ydGVkIGRpcmVjdGx5LgogICAgJG15TW9kdWxlUGF0aCA9ICIkTW9kdWxlUm9vdFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEiCiAgICAkcHNkRGF0YSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgJG15TW9kdWxlUGF0aAogICAgJHJlZ2lzdGVyUGFyYW0gPSBAewogICAgICAgIE1vZHVsZU5hbWUgICAgICA9IEdldC1QU0ZDb25maWdWYWx1ZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5JbnRlckFjdGl2ZVJlZ2lzdGVyLm1vZHVsZXBhdGgnCiAgICAgICAgTmFtZSAgICAgICAgICAgID0gJFZhdWx0TmFtZQogICAgICAgIFZhdWx0UGFyYW1ldGVycyA9ICRQU0JvdW5kUGFyYW1ldGVycyB8IENvbnZlcnRUby1QU0ZIYXNodGFibGUgLUluaGVyaXQgLUV4Y2x1ZGUgQCgKICAgICAgICAgICAgIyBUT0RPIEluY2x1ZGUgYWxsIGZ1bmN0aW9uIHBhcmFtZXRlciBuYW1lcyB3aGljaCBzaG91bGQgYmUgdHJhbnNmZXJyZWQgdG8gdGhlIFZhdWx0LVBhcmFtZXRlcnMKICAgICAgICAgICAgIyAnU2VydmVyJwogICAgICAgICAgICAjICdQb3J0JwogICAgICAgICAgICAjICdEYXRhYmFzZScKICAgICAgICAgICAgIyAnVXNlck5hbWUnCiAgICAgICAgKQogICAgfQogICAgJHJlZ2lzdGVyUGFyYW0uVmF1bHRQYXJhbWV0ZXJzLnZlcnNpb24gPSAkcHNkRGF0YS5Nb2R1bGVWZXJzaW9uCiAgICBpZiAoJFBTQ21kbGV0LlNob3VsZFByb2Nlc3MoJG5hbWUpKSB7CiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAiUmVnaXN0ZXJpbmcgVmF1bHQgJHZhdWx0IHdpdGggUGFyYW0gJCgkcmVnaXN0ZXJQYXJhbXxDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIgogICAgICAgIFJlZ2lzdGVyLVNlY3JldFZhdWx0IEByZWdpc3RlclBhcmFtCiAgICB9CiAgICBlbHNlIHsKICAgICAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0ICJXaGF0SWYgdXNlZCwgbm8gdmF1bHQgcmVnaXN0ZXJlZC4iCiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAiWW91IG1heSByZWdpc3RlciB0aGUgY2hvc2VuIHZhdWx0IGxhdGVyIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kOmByYG5AcmVnaXN0ZXJQYXJhbT0kKCRyZWdpc3RlclBhcmFtfENvbnZlcnRUby1NZXRhZGF0YSAtQXNIYXNodGFibGUpYHJgblJlZ2lzdGVyLcO+ZnVuY3Rpb25QcmVmaXjDvlNlY3VyZVZhdWx0IEByZWdpc3RlclBhcmFtIgogICAgfQp9AQk8AQAACT0BAAAGPgEAACpSZWdpc3Rlci3DvmZ1bmN0aW9uUHJlZml4w75TZWN1cmVWYXVsdC5wczEGPwEAAGkvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2Z1bmN0aW9ucy9SZWdpc3Rlci3DvmZ1bmN0aW9uUHJlZml4w75TZWN1cmVWYXVsdC5wczEJBgAAAAlBAQAACUIBAAAB9gAAAAEAAAAJQwEAAAZEAQAADmNvbmZpZ3VyYXRpb25zBkUBAABML1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9jb25maWd1cmF0aW9ucwkGAAAACUcBAAAJSAEAAAH3AAAAAQAAAAlJAQAABkoBAAAJZnVuY3Rpb25zBksBAABHL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9mdW5jdGlvbnMJBgAAAAlNAQAACU4BAAAB+AAAAAEAAAAJTwEAAAZQAQAADHNjcmlwdGJsb2NrcwZRAQAASi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvc2NyaXB0YmxvY2tzCQYAAAAJUwEAAAlUAQAAAfkAAAABAAAACVUBAAAGVgEAAAdzY3JpcHRzBlcBAABFL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9zY3JpcHRzCQYAAAAJWQEAAAlaAQAAAfoAAAABAAAACVsBAAAGXAEAAAR0ZXBwBl0BAABCL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC90ZXBwCQYAAAAJXwEAAAlgAQAAAfsAAAABAAAACWEBAAAGYgEAAANiaW4GYwEAAFwvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2JpbgkGAAAACWUBAAAJZgEAAAH8AAAAAQAAAAlnAQAABmgBAAAFZW4tdXMGaQEAAF4vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2VuLXVzCQYAAAAJawEAAAlsAQAAAf0AAAABAAAACW0BAAAGbgEAAAlmdW5jdGlvbnMGbwEAAGIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucwkGAAAACXEBAAAJcgEAAAH+AAAAAQAAAAlzAQAABnQBAAAYZnVuY3Rpb25zLnNoYXJlZGludGVybmFsBnUBAABxL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMuc2hhcmVkaW50ZXJuYWwJBgAAAAl3AQAACXgBAAAB/wAAAAEAAAAJeQEAAAZ6AQAACGludGVybmFsBnsBAABhL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbAkGAAAACX0BAAAJfgEAAAEAAQAAAQAAAAl/AQAABoABAAAFdGVzdHMGgQEAAF4vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzCQYAAAAJgwEAAAmEAQAAAQEBAAABAAAACYUBAAAGhgEAAAN4bWwGhwEAAFwvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3htbAkGAAAACYkBAAAJigEAAAECAQAADgAAAAaLAQAAaiMgQ2hhbmdlbG9nCiMjIDEuMC4wICjDviFkeW5hbWljc2NyaXB0XzM5NDQzMiHDvikKIC0gTmV3OiBTb21lIFN0dWZmCiAtIFVwZDogTW9hciBTdHVmZgogLSBGaXg6IE11Y2ggU3R1ZmYBCYwBAAAJjQEAAAaOAQAADGNoYW5nZWxvZy5tZAaPAQAAZS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vY2hhbmdlbG9nLm1kCQYAAAAJkQEAAAmSAQAAAQMBAAAOAAAABpMBAAD+ByMgUFNGTW9kdWxlIGd1aWRhbmNlCgpUaGlzIGlzIGEgZmluaXNoZWQgbW9kdWxlIGxheW91dCBvcHRpbWl6ZWQgZm9yIGltcGxlbWVudGluZyB0aGUgUFNGcmFtZXdvcmsuCgpJZiB5b3UgZG9uJ3QgY2FyZSB0byBkZWFsIHdpdGggdGhlIGRldGFpbHMsIHRoaXMgaXMgd2hhdCB5b3UgbmVlZCB0byBkbyB0byBnZXQgc3RhcnRlZCBzZWVpbmcgcmVzdWx0czoKCiAtIEFkZCB0aGUgZnVuY3Rpb25zIHlvdSB3YW50IHRvIHB1Ymxpc2ggdG8gYC9mdW5jdGlvbnMvYAogLSBVcGRhdGUgdGhlIGBGdW5jdGlvbnNUb0V4cG9ydGAgbm9kZSBpbiB0aGUgbW9kdWxlIG1hbmlmZXN0ICjDvm5hbWXDvi5wc2QxKS4gQWxsIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHNob3VsZCBiZSBpbiBhIGxpc3QuCiAtIEFkZCBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRoZSB1c2VyIHNob3VsZCBub3Qgc2VlIHRvIGAvaW50ZXJuYWwvZnVuY3Rpb25zL2AKIAogIyMgUGF0aCBXYXJuaW5nCiAKID4gSWYgeW91IHdhbnQgeW91ciBtb2R1bGUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIExpbnV4IGFuZCBNYWNPUywga2VlcCBpbiBtaW5kIHRoYXQgdGhvc2UgT1MgYXJlIGNhc2Ugc2Vuc2l0aXZlIGZvciBwYXRocyBhbmQgZmlsZXMuCiAKIGBJbXBvcnQtTW9kdWxlRmlsZWAgaXMgcHJlY29uZmlndXJlZCB0byByZXNvbHZlIHRoZSBwYXRoIG9mIHRoZSBmaWxlcyBzcGVjaWZpZWQsIHNvIGl0IHdpbGwgcmVsaWFibHkgY29udmVydCB3ZWlyZCBwYXRoIG5vdGF0aW9ucyB0aGUgc3lzdGVtIGNhbid0IGhhbmRsZS4KIENvbnRlbnQgaW1wb3J0ZWQgdGhyb3VnaCB0aGF0IGNvbW1hbmQgdGh1cyBuZWVkIG5vdCBtaW5kIHRoZSBwYXRoIHNlcGFyYXRvci4KIElmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB5b3VyIGNvZGUgdG9vIHdpbGwgc3Vydml2ZSBPUy1zcGVjaWZpYyBwYXRoIG5vdGF0aW9ucywgZ2V0IHVzZWQgdG8gdXNpbmcgYFJlc29sdmUtcGF0aGAgb3IgdGhlIG1vcmUgcG93ZXJmdWwgYFJlc29sdmUtUFNGUGF0aGAuAQmUAQAACZUBAAAGlgEAAAlyZWFkbWUubWQGlwEAAGIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3JlYWRtZS5tZAkGAAAACZkBAAAJmgEAAAEEAQAADgAAAAabAQAAzBFAewoJIyBTY3JpcHQgbW9kdWxlIG9yIGJpbmFyeSBtb2R1bGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYW5pZmVzdAoJUm9vdE1vZHVsZSAgICAgICAgPSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc20xJwoKCSMgVmVyc2lvbiBudW1iZXIgb2YgdGhpcyBtb2R1bGUuCglNb2R1bGVWZXJzaW9uID0gJzEuMC4wJwoKCSMgSUQgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIG1vZHVsZQoJR1VJRCA9ICfDviFndWlkRXh0ZW5zaW9uIcO+JwoKCSMgQXV0aG9yIG9mIHRoaXMgbW9kdWxlCglBdXRob3IgPSAnw75hdXRob3LDvicKCgkjIENvbXBhbnkgb3IgdmVuZG9yIG9mIHRoaXMgbW9kdWxlCglDb21wYW55TmFtZSA9ICfDvmNvbXBhbnnDvicKCgkjIENvcHlyaWdodCBzdGF0ZW1lbnQgZm9yIHRoaXMgbW9kdWxlCglDb3B5cmlnaHQgPSAnQ29weXJpZ2h0IChjKSDDviF5ZWFyIcO+IMO+YXV0aG9yw74nCgoJIyBEZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGlzIG1vZHVsZQoJRGVzY3JpcHRpb24gPSAnw75kZXNjcmlwdGlvbsO+JwoKCSMgTWluaW11bSB2ZXJzaW9uIG9mIHRoZSBXaW5kb3dzIFBvd2VyU2hlbGwgZW5naW5lIHJlcXVpcmVkIGJ5IHRoaXMgbW9kdWxlCglQb3dlclNoZWxsVmVyc2lvbiA9ICc1LjAnCgoJIyBNb2R1bGVzIHRoYXQgbXVzdCBiZSBpbXBvcnRlZCBpbnRvIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgcHJpb3IgdG8gaW1wb3J0aW5nCgkjIHRoaXMgbW9kdWxlCglSZXF1aXJlZE1vZHVsZXMgPSBAKAoJCUB7IE1vZHVsZU5hbWU9J1BTRnJhbWV3b3JrJzsgTW9kdWxlVmVyc2lvbj0nw74hcHNmdmVyc2lvbiHDvicgfQoJKQoKCSMgQXNzZW1ibGllcyB0aGF0IG11c3QgYmUgbG9hZGVkIHByaW9yIHRvIGltcG9ydGluZyB0aGlzIG1vZHVsZQoJIyBSZXF1aXJlZEFzc2VtYmxpZXMgPSBAKCdiaW5cw75uYW1lw74uZGxsJykKCgkjIFR5cGUgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQoJIyBUeXBlc1RvUHJvY2VzcyA9IEAoJ3htbFzDvm5hbWXDvi5UeXBlcy5wczF4bWwnKQoKCSMgRm9ybWF0IGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUKCSMgRm9ybWF0c1RvUHJvY2VzcyA9IEAoJ3htbFzDvm5hbWXDvi5Gb3JtYXQucHMxeG1sJykKCgkjIEZ1bmN0aW9ucyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJRnVuY3Rpb25zVG9FeHBvcnQgPSAnJwoKCSMgQ21kbGV0cyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJQ21kbGV0c1RvRXhwb3J0ID0gJycKCgkjIFZhcmlhYmxlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJVmFyaWFibGVzVG9FeHBvcnQgPSAnJwoKCSMgQWxpYXNlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJQWxpYXNlc1RvRXhwb3J0ID0gJycKCgkjIExpc3Qgb2YgYWxsIG1vZHVsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQoJTW9kdWxlTGlzdCA9IEAoKQoKCSMgTGlzdCBvZiBhbGwgZmlsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQoJRmlsZUxpc3QgPSBAKCkKCgkjIFByaXZhdGUgZGF0YSB0byBwYXNzIHRvIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGluIE1vZHVsZVRvUHJvY2Vzcy4gVGhpcyBtYXkgYWxzbyBjb250YWluIGEgUFNEYXRhIGhhc2h0YWJsZSB3aXRoIGFkZGl0aW9uYWwgbW9kdWxlIG1ldGFkYXRhIHVzZWQgYnkgUG93ZXJTaGVsbC4KCVByaXZhdGVEYXRhID0gQHsKCgkJI1N1cHBvcnQgZm9yIFBvd2VyU2hlbGxHZXQgZ2FsbGVyaWVzLgoJCVBTRGF0YSA9IEB7CgoJCQkjIFRhZ3MgYXBwbGllZCB0byB0aGlzIG1vZHVsZS4gVGhlc2UgaGVscCB3aXRoIG1vZHVsZSBkaXNjb3ZlcnkgaW4gb25saW5lIGdhbGxlcmllcy4KCQkJIyBUYWdzID0gQCgpCgoJCQkjIEEgVVJMIHRvIHRoZSBsaWNlbnNlIGZvciB0aGlzIG1vZHVsZS4KCQkJIyBMaWNlbnNlVXJpID0gJycKCgkJCSMgQSBVUkwgdG8gdGhlIG1haW4gd2Vic2l0ZSBmb3IgdGhpcyBwcm9qZWN0LgoJCQkjIFByb2plY3RVcmkgPSAnJwoKCQkJIyBBIFVSTCB0byBhbiBpY29uIHJlcHJlc2VudGluZyB0aGlzIG1vZHVsZS4KCQkJIyBJY29uVXJpID0gJycKCgkJCSMgUmVsZWFzZU5vdGVzIG9mIHRoaXMgbW9kdWxlCgkJCSMgUmVsZWFzZU5vdGVzID0gJycKCgkJfSAjIEVuZCBvZiBQU0RhdGEgaGFzaHRhYmxlCgoJfSAjIEVuZCBvZiBQcml2YXRlRGF0YSBoYXNodGFibGUKfQEJnAEAAAmdAQAABp4BAAAoU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNkMQafAQAAgQEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLnBzZDEJBgAAAAmhAQAACaIBAAABBQEAAA4AAAAGowEAAPwZJHNjcmlwdDpNb2R1bGVSb290ID0gJFBTU2NyaXB0Um9vdAokc2NyaXB0Ok1vZHVsZVZlcnNpb24gPSAoSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXMO+bmFtZcO+LnBzZDEiKS5Nb2R1bGVWZXJzaW9uCgojIERldGVjdCB3aGV0aGVyIGF0IHNvbWUgbGV2ZWwgZG90c291cmNpbmcgd2FzIGVuZm9yY2VkCiRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5Eb0RvdFNvdXJjZSAtRmFsbGJhY2sgJGZhbHNlCmlmICgkw75uYW1lw75fZG90c291cmNlbW9kdWxlKSB7ICRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSAkdHJ1ZSB9Cgo8IwpOb3RlIG9uIFJlc29sdmUtUGF0aDoKQWxsIHBhdGhzIGFyZSBzZW50IHRocm91Z2ggUmVzb2x2ZS1QYXRoL1Jlc29sdmUtUFNGUGF0aCBpbiBvcmRlciB0byBjb252ZXJ0IHRoZW0gdG8gdGhlIGNvcnJlY3QgcGF0aCBzZXBhcmF0b3IuClRoaXMgYWxsb3dzIGlnbm9yaW5nIHBhdGggc2VwYXJhdG9ycyB0aHJvdWdob3V0IHRoZSBpbXBvcnQgc2VxdWVuY2UsIHdoaWNoIGNvdWxkIG90aGVyd2lzZSBjYXVzZSB0cm91YmxlIGRlcGVuZGluZyBvbiBPUy4KUmVzb2x2ZS1QYXRoIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHBhdGhzIHRoYXQgYWxyZWFkeSBleGlzdCwgUmVzb2x2ZS1QU0ZQYXRoIGNhbiBhY2NlcHQgdGhhdCB0aGUgbGFzdCBsZWFmIG15IG5vdCBleGlzdC4KVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiB0ZXN0aW5nIGZvciBwYXRocy4KIz4KCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBsb2FkaW5nIGluZGl2aWR1YWwgbW9kdWxlIGZpbGVzLCByYXRoZXIgdGhhbiB0aGUgY29tcGlsZWQgbW9kdWxlIHdhcyBlbmZvcmNlZAokaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuSW5kaXZpZHVhbEZpbGVzIC1GYWxsYmFjayAkZmFsc2UKaWYgKCTDvm5hbWXDvl9pbXBvcnRJbmRpdmlkdWFsRmlsZXMpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0KaWYgKFRlc3QtUGF0aCAoUmVzb2x2ZS1QU0ZQYXRoIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcLi5cLmdpdCIgLVNpbmdsZUl0ZW0gLU5ld0NoaWxkKSkgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQppZiAoIjx3YXMgbm90IGNvbXBpbGVkPiIgLWVxICc8d2FzIG5vdCBjb21waWxlZD4nKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9CgpmdW5jdGlvbiBJbXBvcnQtTW9kdWxlRmlsZQp7Cgk8IwoJCS5TWU5PUFNJUwoJCQlMb2FkcyBmaWxlcyBpbnRvIHRoZSBtb2R1bGUgb24gbW9kdWxlIGltcG9ydC4KCgkJLkRFU0NSSVBUSU9OCgkJCVRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4KCQkJSXQgc2hvdWxkIGFsd2F5cyBiZSBkb3Rzb3VyY2VkIGl0c2VsZiwgaW4gb3JkZXIgdG8gcHJvcGVyIGZ1bmN0aW9uLgoKCQkJVGhpcyBwcm92aWRlcyBhIGNlbnRyYWwgbG9jYXRpb24gdG8gcmVhY3QgdG8gZmlsZXMgYmVpbmcgaW1wb3J0ZWQsIGlmIGxhdGVyIGRlc2lyZWQKCgkJLlBBUkFNRVRFUiBQYXRoCgkJCVRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGxvYWQKCgkJLkVYQU1QTEUKCQkJUFMgQzpcPiAuIEltcG9ydC1Nb2R1bGVGaWxlIC1GaWxlICRmdW5jdGlvbi5GdWxsTmFtZQoKCQkJSW1wb3J0cyB0aGUgZmlsZSBzdG9yZWQgaW4gJGZ1bmN0aW9uIGFjY29yZGluZyB0byBpbXBvcnQgcG9saWN5CgkjPgoJW0NtZGxldEJpbmRpbmcoKV0KCVBhcmFtICgKCQlbc3RyaW5nXQoJCSRQYXRoCgkpCgoJJHJlc29sdmVkUGF0aCA9ICRFeGVjdXRpb25Db250ZXh0LlNlc3Npb25TdGF0ZS5QYXRoLkdldFJlc29sdmVkUFNQYXRoRnJvbVBTUGF0aCgkUGF0aCkuUHJvdmlkZXJQYXRoCglpZiAoJGRvRG90U291cmNlKSB7IC4gJHJlc29sdmVkUGF0aCB9CgllbHNlIHsgJEV4ZWN1dGlvbkNvbnRleHQuSW52b2tlQ29tbWFuZC5JbnZva2VTY3JpcHQoJGZhbHNlLCAoW3NjcmlwdGJsb2NrXTo6Q3JlYXRlKFtpby5maWxlXTo6UmVhZEFsbFRleHQoJHJlc29sdmVkUGF0aCkpKSwgJG51bGwsICRudWxsKSB9Cn0KCiNyZWdpb24gTG9hZCBpbmRpdmlkdWFsIGZpbGVzCmlmICgkaW1wb3J0SW5kaXZpZHVhbEZpbGVzKQp7CgkjIEV4ZWN1dGUgUHJlaW1wb3J0IGFjdGlvbnMKCWZvcmVhY2ggKCRwYXRoIGluICgmICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEiKSkgewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJHBhdGgKCX0KCgkjIEltcG9ydCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKQoJewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lCgl9CgoJIyBJbXBvcnQgYWxsIGludGVybmFsIGZ1bmN0aW9ucyB3aGljaCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIEV4dGVuc2lvbiBhbmQgdGhlIE1haW4tTW9kdWxlCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGZ1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbCIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKSB7CgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUKCX0KCgkjIEltcG9ydCBhbGwgcHVibGljIGZ1bmN0aW9ucwoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkKCXsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQoJfQoKCSMgRXhlY3V0ZSBQb3N0aW1wb3J0IGFjdGlvbnMKCWZvcmVhY2ggKCRwYXRoIGluICgmICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHBvc3RpbXBvcnQucHMxIikpIHsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRwYXRoCgl9CgoJIyBFbmQgaXQgaGVyZSwgZG8gbm90IGxvYWQgY29tcGlsZWQgY29kZSBiZWxvdwoJcmV0dXJuCn0KI2VuZHJlZ2lvbiBMb2FkIGluZGl2aWR1YWwgZmlsZXMKCiNyZWdpb24gTG9hZCBjb21waWxlZCBjb2RlCiI8Y29tcGlsZSBjb2RlIGludG8gaGVyZT4iCiNlbmRyZWdpb24gTG9hZCBjb21waWxlZCBjb2RlAQmkAQAACaUBAAAGpgEAAChTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi5wc20xBqcBAACBAS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNtMQkGAAAACakBAAAJqgEAAAEHAQAAAQAAAAmrAQAABqwBAAAJZnVuY3Rpb25zBq0BAABEL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9mdW5jdGlvbnMJBgAAAAmvAQAACbABAAABCAEAAAEAAAAJsQEAAAayAQAAB2dlbmVyYWwGswEAAEIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL2dlbmVyYWwJBgAAAAm1AQAACbYBAAABCQEAAA4AAAAGtwEAALoacGFyYW0gKAoJJFRlc3RHZW5lcmFsID0gJHRydWUsCgkKCSRUZXN0RnVuY3Rpb25zID0gJHRydWUsCgkKCVtWYWxpZGF0ZVNldCgnTm9uZScsICdOb3JtYWwnLCAnRGV0YWlsZWQnLCAnRGlhZ25vc3RpYycpXQoJW0FsaWFzKCdTaG93JyldCgkkT3V0cHV0ID0gIk5vbmUiLAoJCgkkSW5jbHVkZSA9ICIqIiwKCQoJJEV4Y2x1ZGUgPSAiIgopCgpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlN0YXJ0aW5nIFRlc3RzIgoKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJJbXBvcnRpbmcgTW9kdWxlIgoKJGdsb2JhbDp0ZXN0cm9vdCA9ICRQU1NjcmlwdFJvb3QKJGdsb2JhbDpfX3Blc3Rlcl9kYXRhID0gQHsgfQoKUmVtb3ZlLU1vZHVsZSDDvm5hbWXDviAtRXJyb3JBY3Rpb24gSWdub3JlCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw74ucHNkMSIKSW1wb3J0LU1vZHVsZSAiJFBTU2NyaXB0Um9vdFwuLlzDvm5hbWXDvi5wc20xIiAtRm9yY2UKCiMgTmVlZCB0byBpbXBvcnQgZXhwbGljaXRseSBzbyB3ZSBjYW4gdXNlIHRoZSBjb25maWd1cmF0aW9uIGNsYXNzCkltcG9ydC1Nb2R1bGUgUGVzdGVyCgrDviF0ZXN0Zm9sZGVyIcO+CgokdG90YWxGYWlsZWQgPSAwCiR0b3RhbFJ1biA9IDAKCiR0ZXN0cmVzdWx0cyA9IEAoKQokY29uZmlnID0gW1Blc3RlckNvbmZpZ3VyYXRpb25dOjpEZWZhdWx0CsO+IXBlc3RlcmNvbmZpZyHDvgoKI3JlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cwppZiAoJFRlc3RHZW5lcmFsKQp7CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIk1vZHVsZXMgaW1wb3J0ZWQsIHByb2NlZWRpbmcgd2l0aCBnZW5lcmFsIHRlc3RzIgoJZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRQU1NjcmlwdFJvb3RcZ2VuZXJhbCIgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5UZXN0cy5wczEiKSkKCXsKCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9CgkJaWYgKCRmaWxlLk5hbWUgLWxpa2UgJEV4Y2x1ZGUpIHsgY29udGludWUgfQoKCQlXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBTaWduaWZpY2FudCAtTWVzc2FnZSAiICBFeGVjdXRpbmcgPGM9J2VtJz4kKCRmaWxlLk5hbWUpPC9jPiIKCQkkY29uZmlnLlRlc3RSZXN1bHQuT3V0cHV0UGF0aCA9IEpvaW4tUGF0aCAiJFBTU2NyaXB0Um9vdFwuLlwuLlxUZXN0UmVzdWx0cyIgIlRFU1QtJCgkZmlsZS5CYXNlTmFtZSkueG1sIgoJCSRjb25maWcuUnVuLlBhdGggPSAkZmlsZS5GdWxsTmFtZQoJCSRjb25maWcuUnVuLlBhc3NUaHJ1ID0gJHRydWUKCQkkY29uZmlnLk91dHB1dC5WZXJib3NpdHkgPSAkT3V0cHV0CiAgICAJJHJlc3VsdHMgPSBJbnZva2UtUGVzdGVyIC1Db25maWd1cmF0aW9uICRjb25maWcKCQlmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQoJCXsKCQkJJHRvdGFsUnVuICs9ICRyZXN1bHQuVG90YWxDb3VudAoJCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudAoJCQkkcmVzdWx0LlRlc3RzIHwgV2hlcmUtT2JqZWN0IFJlc3VsdCAtbmUgJ1Bhc3NlZCcgfCBGb3JFYWNoLU9iamVjdCB7CgkJCQkkdGVzdHJlc3VsdHMgKz0gW3BzY3VzdG9tb2JqZWN0XUB7CgkJCQkJQmxvY2sgICAgPSAkXy5CbG9jawoJCQkJCU5hbWUJID0gIkl0ICQoJF8uTmFtZSkiCgkJCQkJUmVzdWx0ICAgPSAkXy5SZXN1bHQKCQkJCQlNZXNzYWdlICA9ICRfLkVycm9yUmVjb3JkLkRpc3BsYXlFcnJvck1lc3NhZ2UKCQkJCX0KCQkJfQoJCX0KCX0KfQojZW5kcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzCgokZ2xvYmFsOl9fcGVzdGVyX2RhdGEuU2NyaXB0QW5hbHl6ZXIgfCBPdXQtSG9zdAoKI3JlZ2lvbiBUZXN0IENvbW1hbmRzCmlmICgkVGVzdEZ1bmN0aW9ucykKewoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJQcm9jZWVkaW5nIHdpdGggaW5kaXZpZHVhbCB0ZXN0cyIKCWZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkUFNTY3JpcHRSb290XGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKlRlc3RzLnBzMSIpKQoJewoJCWlmICgkZmlsZS5OYW1lIC1ub3RsaWtlICRJbmNsdWRlKSB7IGNvbnRpbnVlIH0KCQlpZiAoJGZpbGUuTmFtZSAtbGlrZSAkRXhjbHVkZSkgeyBjb250aW51ZSB9CgkJCgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgU2lnbmlmaWNhbnQgLU1lc3NhZ2UgIiAgRXhlY3V0aW5nICQoJGZpbGUuTmFtZSkiCgkJJGNvbmZpZy5UZXN0UmVzdWx0Lk91dHB1dFBhdGggPSBKb2luLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi5cVGVzdFJlc3VsdHMiICJURVNULSQoJGZpbGUuQmFzZU5hbWUpLnhtbCIKCQkkY29uZmlnLlJ1bi5QYXRoID0gJGZpbGUuRnVsbE5hbWUKCQkkY29uZmlnLlJ1bi5QYXNzVGhydSA9ICR0cnVlCgkJJGNvbmZpZy5PdXRwdXQuVmVyYm9zaXR5ID0gJE91dHB1dAogICAgCSRyZXN1bHRzID0gSW52b2tlLVBlc3RlciAtQ29uZmlndXJhdGlvbiAkY29uZmlnCgkJZm9yZWFjaCAoJHJlc3VsdCBpbiAkcmVzdWx0cykKCQl7CgkJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQKCQkJJHRvdGFsRmFpbGVkICs9ICRyZXN1bHQuRmFpbGVkQ291bnQKCQkJJHJlc3VsdC5UZXN0cyB8IFdoZXJlLU9iamVjdCBSZXN1bHQgLW5lICdQYXNzZWQnIHwgRm9yRWFjaC1PYmplY3QgewoJCQkJJHRlc3RyZXN1bHRzICs9IFtwc2N1c3RvbW9iamVjdF1AewoJCQkJCUJsb2NrICAgID0gJF8uQmxvY2sKCQkJCQlOYW1lCSA9ICJJdCAkKCRfLk5hbWUpIgoJCQkJCVJlc3VsdCAgID0gJF8uUmVzdWx0CgkJCQkJTWVzc2FnZSAgPSAkXy5FcnJvclJlY29yZC5EaXNwbGF5RXJyb3JNZXNzYWdlCgkJCQl9CgkJCX0KCQl9Cgl9Cn0KI2VuZHJlZ2lvbiBUZXN0IENvbW1hbmRzCgokdGVzdHJlc3VsdHMgfCBTb3J0LU9iamVjdCBEZXNjcmliZSwgQ29udGV4dCwgTmFtZSwgUmVzdWx0LCBNZXNzYWdlIHwgRm9ybWF0LUxpc3QKCmlmICgkdG90YWxGYWlsZWQgLWVxIDApIHsgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgQ3JpdGljYWwgLU1lc3NhZ2UgIkFsbCA8Yz0nZW0nPiR0b3RhbFJ1bjwvYz4gdGVzdHMgZXhlY3V0ZWQgd2l0aG91dCBhIHNpbmdsZSBmYWlsdXJlISIgfQplbHNlIHsgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgQ3JpdGljYWwgLU1lc3NhZ2UgIjxjPSdlbSc+JHRvdGFsRmFpbGVkIHRlc3RzPC9jPiBvdXQgb2YgPGM9J3N1Yic+JHRvdGFsUnVuPC9jPiB0ZXN0cyBmYWlsZWQhIiB9CgppZiAoJHRvdGFsRmFpbGVkIC1ndCAwKQp7Cgl0aHJvdyAiJHRvdGFsRmFpbGVkIC8gJHRvdGFsUnVuIHRlc3RzIGZhaWxlZCEiCn0BCbgBAAAJuQEAAAa6AQAACnBlc3Rlci5wczEGuwEAAEUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL3Blc3Rlci5wczEJBgAAAAm9AQAACb4BAAABCgEAAA4AAAAGvwEAAIQHIyBEZXNjcmlwdGlvbgoKVGhpcyBpcyB0aGUgZm9sZGVyLCB3aGVyZSBhbGwgdGhlIHRlc3RzIGdvLgoKVGhvc2UgYXJlIHN1YmRpdmlkZWQgaW4gdHdvIGNhdGVnb3JpZXM6CgogLSBHZW5lcmFsCiAtIEZ1bmN0aW9uCgojIyBHZW5lcmFsIFRlc3RzCgpHZW5lcmFsIHRlc3RzIGFyZSBmdW5jdGlvbiBnZW5lcmljIGFuZCB0ZXN0IGZvciBnZW5lcmFsIHBvbGljaWVzLgoKVGhlc2UgdGVzdCBzY2FuIGFuc3dlciBxdWVzdGlvbnMgc3VjaCBhczoKCiAtIElzIG15IG1vZHVsZSBmb2xsb3dpbmcgbXkgc3R5bGUgZ3VpZGVzPwogLSBEb2VzIGFueSBvZiBteSBzY3JpcHRzIGhhdmUgYSBzeW50YXggZXJyb3I/CiAtIERvIG15IHNjcmlwdHMgdXNlIGNvbW1hbmRzIEkgZG8gbm90IHdhbnQgdGhlbSB0byB1c2U/CiAtIERvIG15IGNvbW1hbmRzIGZvbGxvdyBiZXN0IHByYWN0aWNlcz8KIC0gRG8gbXkgY29tbWFuZHMgaGF2ZSBwcm9wZXIgaGVscD8KCkJhc2ljYWxseSwgdGhlc2UgYWxsb3cgYSBnZW5lcmFsIG1vZHVsZSBoZWFsdGggY2hlY2suCgpUaGVzZSB0ZXN0cyBhcmUgYWxyZWFkeSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZSB0ZW1wbGF0ZS4KCiMjIEZ1bmN0aW9uIFRlc3RzCgpBIGhlYWx0aHkgbW9kdWxlIHNob3VsZCBwcm92aWRlIHVuaXQgYW5kIGludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgY29tbWFuZHMgJiBjb21wb25lbnRzIGl0IHNoaXBzLgpPbmx5IHRoZW4gY2FuIGJlIGd1YXJhbnRlZWQsIHRoYXQgdGhleSB3aWxsIGFjdHVhbGx5IHBlcmZvcm0gYXMgcHJvbWlzZWQuCgpIb3dldmVyLCBhcyBlYWNoIHN1Y2ggdGVzdCBtdXN0IGJlIHNwZWNpZmljIHRvIHRoZSBmdW5jdGlvbiBpdCB0ZXN0cywgdGhlcmUgY2Fubm90IGJlIG11Y2ggaW4gdGhlIHdheSBvZiB0ZW1wbGF0ZXMuAQnAAQAACcEBAAAGwgEAAAlyZWFkbWUubWQGwwEAAEQvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL3JlYWRtZS5tZAkGAAAACcUBAAAJxgEAAAELAQAADgAAAAbHAQAAggsjIFhNTAoKVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHByb2plY3QgWE1MIGZpbGVzIGdvLCBub3RhYmx5OgoKIC0gRm9ybWF0IFhNTAogLSBUeXBlIEV4dGVuc2lvbiBYTUwKCkV4dGVybmFsIGhlbHAgZmlsZXMgc2hvdWxkIF9ub3RfIGJlIHBsYWNlZCBpbiB0aGlzIGZvbGRlciEKCiMjIE5vdGVzIG9uIEZpbGVzIGFuZCBOYW1pbmcKClRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBmb3JtYXQgZmlsZSBhbmQgb25lIHR5cGUgZXh0ZW5zaW9uIGZpbGUgcGVyIHByb2plY3QsIGFzIGltcG9ydGluZyB0aGVtIGhhcyBhIG5vdGFibGUgaW1wYWN0IG9uIGltcG9ydCB0aW1lcy4KCiAtIFRoZSBGb3JtYXQgWE1MIHNob3VsZCBiZSBuYW1lZCBgw75uYW1lw74uRm9ybWF0LnBzMXhtbGAKIC0gVGhlIFR5cGUgRXh0ZW5zaW9uIFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LlR5cGVzLnBzMXhtbGAKCiMjIFRvb2xzCgojIyMgTmV3LVBTTURGb3JtYXRUYWJsZURlZmluaXRpb24KClRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGFuIGlucHV0IG9iamVjdCBhbmQgZ2VuZXJhdGUgZm9ybWF0IHhtbCBmb3IgYW4gYXV0by1zaXplZCB0YWJsZS4KCkl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSB0byBnZXQgc3RhcnRlZCB3aXRoIGZvcm1hdHMuCgojIyMgR2V0LVBTRlR5cGVTZXJpYWxpemF0aW9uRGF0YQoKYGBgCkMjIFdhcm5pbmchClRoaXMgc2VjdGlvbiBpcyBvbmx5IGludGVyZXN0IGlmIHlvdSdyZSB1c2luZyBDIyB0b2dldGhlciB3aXRoIFBvd2VyU2hlbGwuCmBgYAoKVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdHlwZSBleHRlbnNpb24gWE1MIHRoYXQgYWxsb3dzIFBvd2VyU2hlbGwgdG8gY29udmVydCB0eXBlcyB3cml0dGVuIGluIEMjIHRvIGJlIHdyaXR0ZW4gdG8gZmlsZSBhbmQgcmVzdG9yZWQgZnJvbSBpdCB3aXRob3V0IGJlaW5nICdEZXNlcmlhbGl6ZWQnLiBBbHNvIHdvcmtzIGZvciBqb2JzIG9yIHJlbW90aW5nLCBpZiBib3RoIHNpZGVzIGhhdmUgdGhlIGBQU0ZyYW1ld29ya2AgbW9kdWxlIGFuZCB0eXBlIGV4dGVuc2lvbiBsb2FkZWQuCgpJbiBvcmRlciBmb3IgYSBjbGFzcyB0byBiZSBlbGlnaWJsZSBmb3IgdGhpcywgaXQgbmVlZHMgdG8gY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOgoKIC0gSGF2ZSB0aGUgYFtTZXJpYWxpemFibGVdYCBhdHRyaWJ1dGUKIC0gQmUgcHVibGljCiAtIEhhdmUgYW4gZW1wdHkgY29uc3RydWN0b3IKIC0gQWxsb3cgYWxsIHB1YmxpYyBwcm9wZXJ0aWVzL2ZpZWxkcyB0byBiZSBzZXQgKGV2ZW4gaWYgc2V0dGluZyBpdCBkb2Vzbid0IGRvIGFueXRoaW5nKSB3aXRob3V0IHRocm93aW5nIGFuIGV4Y2VwdGlvbi4KCmBgYApub24tcHVibGljIHByb3BlcnRpZXMgYW5kIGZpZWxkcyB3aWxsIGJlIGxvc3QgaW4gdGhpcyBwcm9jZXNzIQpgYGABCcgBAAAJyQEAAAbKAQAACXJlYWRtZS5tZAbLAQAAQi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74veG1sL3JlYWRtZS5tZAkGAAAACc0BAAAJzgEAAAEMAQAADgAAAAbPAQAAygU8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtMTYiPz4KPENvbmZpZ3VyYXRpb24+Cgk8Vmlld0RlZmluaXRpb25zPgoJCTwhLS0gRm9vLkJhciAtLT4KCQk8Vmlldz4KCQkJPE5hbWU+Rm9vLkJhcjwvTmFtZT4KCQkJPFZpZXdTZWxlY3RlZEJ5PgoJCQkJPFR5cGVOYW1lPkZvby5CYXI8L1R5cGVOYW1lPgoJCQk8L1ZpZXdTZWxlY3RlZEJ5PgoJCQk8VGFibGVDb250cm9sPgoJCQkJPEF1dG9TaXplLz4KCQkJCTxUYWJsZUhlYWRlcnM+CgkJCQkJPFRhYmxlQ29sdW1uSGVhZGVyLz4KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPgoJCQkJPC9UYWJsZUhlYWRlcnM+CgkJCQk8VGFibGVSb3dFbnRyaWVzPgoJCQkJCTxUYWJsZVJvd0VudHJ5PgoJCQkJCQk8VGFibGVDb2x1bW5JdGVtcz4KCQkJCQkJCTxUYWJsZUNvbHVtbkl0ZW0+CgkJCQkJCQkJPFByb3BlcnR5TmFtZT5Gb288L1Byb3BlcnR5TmFtZT4KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPgoJCQkJCQkJPFRhYmxlQ29sdW1uSXRlbT4KCQkJCQkJCQk8UHJvcGVydHlOYW1lPkJhcjwvUHJvcGVydHlOYW1lPgoJCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW0+CgkJCQkJCTwvVGFibGVDb2x1bW5JdGVtcz4KCQkJCQk8L1RhYmxlUm93RW50cnk+CgkJCQk8L1RhYmxlUm93RW50cmllcz4KCQkJPC9UYWJsZUNvbnRyb2w+CgkJPC9WaWV3PgoJPC9WaWV3RGVmaW5pdGlvbnM+CjwvQ29uZmlndXJhdGlvbj4BCdABAAAJ0QEAAAbSAQAAFsO+bmFtZcO+LkZvcm1hdC5wczF4bWwG0wEAAE8vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3htbC/Dvm5hbWXDvi5Gb3JtYXQucHMxeG1sCQYAAAAJ1QEAAAnWAQAAAQ0BAAAOAAAABtcBAAC8Bzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CjxUeXBlcz4KICA8IS0tIEZvby5CYXIgLS0+CiAgPFR5cGU+CiAgICA8TmFtZT5EZXNlcmlhbGl6ZWQuRm9vLkJhcjwvTmFtZT4KICAgIDxNZW1iZXJzPgogICAgICA8TWVtYmVyU2V0PgogICAgICAgIDxOYW1lPlBTU3RhbmRhcmRNZW1iZXJzPC9OYW1lPgogICAgICAgIDxNZW1iZXJzPgogICAgICAgICAgPE5vdGVQcm9wZXJ0eT4KICAgICAgICAgICAgPE5hbWU+CiAgICAgICAgICAgICAgVGFyZ2V0VHlwZUZvckRlc2VyaWFsaXphdGlvbgogICAgICAgICAgICA8L05hbWU+CiAgICAgICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgICBGb28uQmFyCiAgICAgICAgICAgIDwvVmFsdWU+CiAgICAgICAgICA8L05vdGVQcm9wZXJ0eT4KICAgICAgICA8L01lbWJlcnM+CiAgICAgIDwvTWVtYmVyU2V0PgogICAgPC9NZW1iZXJzPgogIDwvVHlwZT4KICA8VHlwZT4KICAgIDxOYW1lPkZvby5CYXI8L05hbWU+CiAgICA8TWVtYmVycz4KICAgICAgPENvZGVQcm9wZXJ0eSBJc0hpZGRlbj0idHJ1ZSI+CiAgICAgICAgPE5hbWU+U2VyaWFsaXphdGlvbkRhdGE8L05hbWU+CiAgICAgICAgPEdldENvZGVSZWZlcmVuY2U+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aW9uUHJlZml4BhwCAAAEbmFtZQ0CEeYBAAAEAAAABh0CAAAOZnVuY3Rpb25QcmVmaXgNAwfoAQAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACR4CAAAJHwIAAA0CB+oBAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJIAIAAA0DB+wBAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJIQIAAA0DB+4BAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJIgIAAAkjAgAACSQCAAAJJQIAAAfwAQAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACSYCAAAJJwIAAAkoAgAACgfyAQAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACSkCAAANAwf0AQAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACSoCAAAJKwIAAA0CB/YBAAAAAQAAABAAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJLAIAAAktAgAACS4CAAAJLwIAAAkwAgAACTECAAAJMgIAAAkzAgAACTQCAAANBwf4AQAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTUCAAANAwf6AQAAAAEAAAAIAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTYCAAAJNwIAAAk4AgAACTkCAAAJOgIAAA0DB/wBAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJOwIAAAk8AgAACT0CAAAJPgIAAAf+AQAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACT8CAAAJQAIAAAlBAgAAChEAAgAABAAAAAZCAgAAFGR5bmFtaWNzY3JpcHRfMzk0NDMyDQMRAgIAAAQAAAAGQwIAAARuYW1lDQMRBAIAAAQAAAAGRAIAAARuYW1lBkUCAAAGYXV0aG9yBkYCAAAHY29tcGFueQZHAgAAC2Rlc2NyaXB0aW9uEQUCAAAEAAAABkgCAAANZ3VpZEV4dGVuc2lvbgZJAgAABHllYXIGSgIAAApwc2Z2ZXJzaW9uChEGAgAABAAAAAZLAgAABG5hbWUNAxEIAgAABAAAAAZMAgAABG5hbWUNAxEKAgAABAAAAAZNAgAABG5hbWUNAwcMAgAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACU4CAAANAwcOAgAAAAEAAAAIAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACU8CAAAJUAIAAAlRAgAACVICAAAJUwIAAAlUAgAACVUCAAAJVgIAABEQAgAABAAAAAZXAgAABG5hbWUNAxERAgAABAAAAAZYAgAACnRlc3Rmb2xkZXIGWQIAAAxwZXN0ZXJjb25maWcNAhETAgAABAAAAAZaAgAABG5hbWUNAxEVAgAABAAAAAZbAgAABG5hbWUNAxEXAgAABAAAAAZcAgAABG5hbWUNAwEeAgAADgAAAAZdAgAA5RA8IwpUaGlzIGlzIGFuIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlCgpCeSBkZWZhdWx0LCBpdCBpcyBlbm91Z2ggdG8gaGF2ZSBhIHNpbmdsZSBvbmUgb2YgdGhlbSwKaG93ZXZlciBpZiB5b3UgaGF2ZSBlbm91Z2ggY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBqdXN0aWZ5IGhhdmluZyBtdWx0aXBsZSBjb3BpZXMgb2YgaXQsCmZlZWwgdG90YWxseSBmcmVlIHRvIHNwbGl0IHRoZW0gaW50byBtdWx0aXBsZSBmaWxlcy4KIz4KCjwjCiMgRXhhbXBsZSBDb25maWd1cmF0aW9uClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLU5hbWUgJ0V4YW1wbGUuU2V0dGluZycgLVZhbHVlIDEwIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdpbnRlZ2VyJyAtSGFuZGxlciB7IH0gLURlc2NyaXB0aW9uICJFeGFtcGxlIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gWW91ciBtb2R1bGUgY2FuIHRoZW4gdXNlIHRoZSBzZXR0aW5nIHVzaW5nICdHZXQtUFNGQ29uZmlnVmFsdWUnIgojPgoKU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTmFtZSAnSW1wb3J0LkRvRG90U291cmNlJyAtVmFsdWUgJGZhbHNlIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdib29sJyAtRGVzY3JpcHRpb24gIldoZXRoZXIgdGhlIG1vZHVsZSBmaWxlcyBzaG91bGQgYmUgZG90c291cmNlZCBvbiBpbXBvcnQuIEJ5IGRlZmF1bHQsIHRoZSBmaWxlcyBvZiB0aGlzIG1vZHVsZSBhcmUgcmVhZCBhcyBzdHJpbmcgdmFsdWUgYW5kIGludm9rZWQsIHdoaWNoIGlzIGZhc3RlciBidXQgd29yc2Ugb24gZGVidWdnaW5nLiIKU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTmFtZSAnSW1wb3J0LkluZGl2aWR1YWxGaWxlcycgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGltcG9ydGVkIGluZGl2aWR1YWxseS4gRHVyaW5nIHRoZSBtb2R1bGUgYnVpbGQsIGFsbCBtb2R1bGUgY29kZSBpcyBjb21waWxlZCBpbnRvIGZldyBmaWxlcywgd2hpY2ggYXJlIGltcG9ydGVkIGluc3RlYWQgYnkgZGVmYXVsdC4gTG9hZGluZyB0aGUgY29tcGlsZWQgdmVyc2lvbnMgaXMgZmFzdGVyLCB1c2luZyB0aGUgaW5kaXZpZHVhbCBmaWxlcyBpcyBlYXNpZXIgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvdXQgYWRqdXN0bWVudHMuIgoKJGN1cnJlbnRQYXRoID0gIiRNb2R1bGVSb290XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSIKJGxhdGVzdEluc3RhbGxlZE1vZHVsZXMgPSBnZXQtbW9kdWxlIFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74gLUxpc3RBdmFpbGFibGUgfCBTb3J0LU9iamVjdCB2ZXJzaW9uIC1EZXNjZW5kaW5nIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgcGF0aCAtZmlyc3QgMQpXcml0ZS1QU0ZNZXNzYWdlICJDaGVja2luZyBpZiBjdXJyZW50IG1vZHVsZSAnJGN1cnJlbnRQYXRoJyBhZ2FpbnN0IGxhdGVzdCBpbnN0YWxsZWQgdmVyc2lvbiAnJGxhdGVzdEluc3RhbGxlZE1vZHVsZXMnIgppZiAoJGN1cnJlbnRQYXRoIC1lcSAkbGF0ZXN0SW5zdGFsbGVkTW9kdWxlcykgewogICAgU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTmFtZSAnSW50ZXJBY3RpdmVSZWdpc3Rlci5tb2R1bGVwYXRoJyAtVmFsdWUgIlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74iIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIk1vZHVsZSBQYXRoIGZvciBWYXVsdCBSZWdpc3RyYXRpb24sIE5hbWUgb2YgdGhlIG1vZHVsZSBhcyBsYXRlc3QgaW5zdGFsbGVkIHZlcnNpb24iCn0KZWxzZSB7CiAgICBTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74nIC1OYW1lICdJbnRlckFjdGl2ZVJlZ2lzdGVyLm1vZHVsZXBhdGgnIC1WYWx1ZSAkY3VycmVudFBhdGggLUluaXRpYWxpemUgLVZhbGlkYXRpb24gc3RyaW5nIC1EZXNjcmlwdGlvbiAiTW9kdWxlIFBhdGggZm9yIFZhdWx0IFJlZ2lzdHJhdGlvbiwgZGV2ZWxvcG1lbnQgcG9pbnQgdG8gbG9jYWwgbm9uIGluc3RhbGxlZCBQU00xIgp9AQleAgAACV8CAAAGYAIAABFjb25maWd1cmF0aW9uLnBzMQZhAgAAXi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbi5wczEJBgAAAAljAgAACWQCAAABHwIAAA4AAAAGZQIAAPEDIyBDb25maWd1cmF0aW9ucwoKVGhyb3VnaCB0aGUgYFBTRnJhbWV3b3JrYCB5b3UgaGF2ZSBhIHNpbXBsZSBtZXRob2QgdGhhdCBhbGxvd3MgeW91IHRvIC4uLgoKIC0gUHVibGlzaCBzZXR0aW5ncwogLSBXaXRoIG9uYm9hcmQgZG9jdW1lbnRhdGlvbgogLSBJbnB1dCB2YWxpZGF0aW9uCiAtIFNjcmlwdHMgdGhhdCBydW4gb24gY2hhbmdlIG9mIHNldHRpbmdzCiAtIFRoYXQgY2FuIGJlIGRpc2NvdmVyZWQgYW5kIHVwZGF0ZWQgYnkgdGhlIHVzZXIKIC0gVGhhdCBjYW4gYmUgYWRtaW5pc3RyYXRlZCBieSBwb2xpY3kgJiBEU0MKClRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBhIGJpdCB0b28gY29tcGxleCB0byBkZXNjcmliZSBpbiBhIGhlbHAgZmlsZSwgeW91IGNhbiBob3dldmVyIHZpc2l0IHVzIGF0IGh0dHA6Ly9wc2ZyYW1ld29yay5vcmcgZm9yIGRldGFpbGVkIGd1aWRhbmNlLgoKQW4gZXhhbXBsZSBjYW4gYmUgc2VlbiBpbiB0aGUgYXR0YWNoZWQgcHMxIGZpbGUBCWYCAAAJZwIAAAZoAgAACXJlYWRtZS5tZAZpAgAAVi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvY29uZmlndXJhdGlvbnMvcmVhZG1lLm1kCQYAAAAJawIAAAlsAgAAASACAAAOAAAABm0CAADVASMgRnVuY3Rpb25zCgpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGludGVybmFsIGZ1bmN0aW9ucyBnby4KCkRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbW9kdWxlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdWJkaXZpZGUgdGhlbSBpbnRvIHN1YmZvbGRlcnMuCgpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseQEJbgIAAAlvAgAABnACAAAJcmVhZG1lLm1kBnECAABRL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9mdW5jdGlvbnMvcmVhZG1lLm1kCQYAAAAJcwIAAAl0AgAAASECAAAOAAAABnUCAAD5AjwjClN0b3JlZCBzY3JpcHRibG9ja3MgYXJlIGF2YWlsYWJsZSBpbiBbUHNmVmFsaWRhdGVTY3JpcHQoKV0gYXR0cmlidXRlcy4KVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gY2VudHJhbGx5IHByb3ZpZGUgdGhlIHNhbWUgc2NyaXB0YmxvY2sgbXVsdGlwbGUgdGltZXMsCndpdGhvdXQgaGF2aW5nIHRvIG1haW50YWluIGl0IGluIHNlcGFyYXRlIGxvY2F0aW9ucy4KCkl0IGFsc28gcHJldmVudHMgbGVuZ3RoeSB2YWxpZGF0aW9uIHNjcmlwdGJsb2NrcyBmcm9tIG1ha2luZyB5b3VyIHBhcmFtZXRlciBibG9jawpoYXJkIHRvIHJlYWQuCgpTZXQtUFNGU2NyaXB0YmxvY2sgLU5hbWUgJ8O+bmFtZcO+LlNjcmlwdEJsb2NrTmFtZScgLVNjcmlwdGJsb2NrIHsKCQp9CiM+AQl2AgAACXcCAAAGeAIAABBzY3JpcHRibG9ja3MucHMxBnkCAABbL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9zY3JpcHRibG9ja3Mvc2NyaXB0YmxvY2tzLnBzMQkGAAAACXsCAAAJfAIAAAEiAgAADgAAAAZ9AgAA4glOZXctUFNGTGljZW5zZSAtUHJvZHVjdCAnw75uYW1lw74nIC1NYW51ZmFjdHVyZXIgJ8O+YXV0aG9yw74nIC1Qcm9kdWN0VmVyc2lvbiAkc2NyaXB0Ok1vZHVsZVZlcnNpb24gLVByb2R1Y3RUeXBlIE1vZHVsZSAtTmFtZSBNSVQgLVZlcnNpb24gIjEuMC4wLjAiIC1EYXRlIChHZXQtRGF0ZSAiw74hZGF0ZSHDviIpIC1UZXh0IEAiCkNvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoiQAEJfgIAAAl/AgAABoACAAALbGljZW5zZS5wczEGgQIAAFEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3NjcmlwdHMvbGljZW5zZS5wczEJBgAAAAmDAgAACYQCAAABIwIAAA4AAAAGhQIAAJ4GPCMKQWRkIGFsbCB0aGluZ3MgeW91IHdhbnQgdG8gcnVuIGFmdGVyIGltcG9ydGluZyB0aGUgbWFpbiBmdW5jdGlvbiBjb2RlCgpXQVJOSU5HOiBPTkxZIHByb3ZpZGUgcGF0aHMgdG8gZmlsZXMhCgpBZnRlciBidWlsZGluZyB0aGUgbW9kdWxlLCB0aGlzIGZpbGUgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQsIGFkZGluZyBhbnl0aGluZyBidXQgcGF0aHMgdG8gZmlsZXMgLi4uCi0gV2lsbCBub3Qgd29yayBhZnRlciBwdWJsaXNoaW5nCi0gQ291bGQgYnJlYWsgdGhlIGJ1aWxkIHByb2Nlc3MKIz4KCiRtb2R1bGVSb290ID0gU3BsaXQtUGF0aCAoU3BsaXQtUGF0aCAkUFNTY3JpcHRSb290KQoKIyBMb2FkIENvbmZpZ3VyYXRpb25zCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxjb25maWd1cmF0aW9uc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUKCiMgTG9hZCBTY3JpcHRibG9ja3MKKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdGJsb2Nrc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUKCiMgTG9hZCBUYWIgRXhwYW5zaW9uCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFx0ZXBwXCoudGVwcC5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lCgojIExvYWQgVGFiIEV4cGFuc2lvbiBBc3NpZ25tZW50CiIkbW9kdWxlUm9vdFxpbnRlcm5hbFx0ZXBwXGFzc2lnbm1lbnQucHMxIgoKIyBMb2FkIExpY2Vuc2UKIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNcbGljZW5zZS5wczEiAQmGAgAACYcCAAAGiAIAAA5wb3N0aW1wb3J0LnBzMQaJAgAAVC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvc2NyaXB0cy9wb3N0aW1wb3J0LnBzMQkGAAAACYsCAAAJjAIAAAEkAgAADgAAAAaNAgAAowM8IwpBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYmVmb3JlIGltcG9ydGluZyB0aGUgbWFpbiBmdW5jdGlvbiBjb2RlLgoKV0FSTklORzogT05MWSBwcm92aWRlIHBhdGhzIHRvIGZpbGVzIQoKQWZ0ZXIgYnVpbGRpbmcgdGhlIG1vZHVsZSwgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkLCBhZGRpbmcgYW55dGhpbmcgYnV0IHBhdGhzIHRvIGZpbGVzIC4uLgotIFdpbGwgbm90IHdvcmsgYWZ0ZXIgcHVibGlzaGluZwotIENvdWxkIGJyZWFrIHRoZSBidWlsZCBwcm9jZXNzCiM+CgokbW9kdWxlUm9vdCA9IFNwbGl0LVBhdGggKFNwbGl0LVBhdGggJFBTU2NyaXB0Um9vdCkKCiMgTG9hZCB0aGUgc3RyaW5ncyB1c2VkIGluIG1lc3NhZ2VzCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHN0cmluZ3MucHMxIgEJjgIAAAmPAgAABpACAAANcHJlaW1wb3J0LnBzMQaRAgAAUy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvc2NyaXB0cy9wcmVpbXBvcnQucHMxCQYAAAAJkwIAAAmUAgAAASUCAAAOAAAABpUCAADCAzwjClRoaXMgZmlsZSBsb2FkcyB0aGUgc3RyaW5ncyBkb2N1bWVudHMgZnJvbSB0aGUgcmVzcGVjdGl2ZSBsYW5ndWFnZSBmb2xkZXJzLgpUaGlzIGFsbG93cyBsb2NhbGl6aW5nIG1lc3NhZ2VzIGFuZCBlcnJvcnMuCkxvYWQgcHNkMSBsYW5ndWFnZSBmaWxlcyBmb3IgZWFjaCBsYW5ndWFnZSB5b3Ugd2lzaCB0byBzdXBwb3J0LgpQYXJ0aWFsIHRyYW5zbGF0aW9ucyBhcmUgYWNjZXB0YWJsZSAtIHdoZW4gbWlzc2luZyBhIGN1cnJlbnQgbGFuZ3VhZ2UgbWVzc2FnZSwKaXQgd2lsbCBmYWxsYmFjayB0byBFbmdsaXNoIG9yIGFub3RoZXIgYXZhaWxhYmxlIGxhbmd1YWdlLgojPgpJbXBvcnQtUFNGTG9jYWxpemVkU3RyaW5nIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcZW4tdXNcKi5wc2QxIiAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTGFuZ3VhZ2UgJ2VuLVVTJwEJlgIAAAmXAgAABpgCAAALc3RyaW5ncy5wczEGmQIAAFEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3NjcmlwdHMvc3RyaW5ncy5wczEJBgAAAAmbAgAACZwCAAABJgIAAA4AAAAGnQIAAG48IwojIEV4YW1wbGU6ClJlZ2lzdGVyLVBTRlRlcHBBcmd1bWVudENvbXBsZXRlciAtQ29tbWFuZCBHZXQtQWxjb2hvbCAtUGFyYW1ldGVyIFR5cGUgLU5hbWUgw75uYW1lw74uYWxjb2hvbAojPgEJngIAAAmfAgAABqACAAAOYXNzaWdubWVudC5wczEGoQIAAFEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3RlcHAvYXNzaWdubWVudC5wczEJBgAAAAmjAgAACaQCAAABJwIAAA4AAAAGpQIAAKABPCMKIyBFeGFtcGxlOgpSZWdpc3Rlci1QU0ZUZXBwU2NyaXB0YmxvY2sgLU5hbWUgIsO+bmFtZcO+LmFsY29ob2wiIC1TY3JpcHRCbG9jayB7ICdCZWVyJywnTWVhZCcsJ1doaXNrZXknLCdXaW5lJywnVm9ka2EnLCdSdW0gKDN5KScsICdSdW0gKDV5KScsICdSdW0gKDd5KScgfQojPgEJpgIAAAmnAgAABqgCAAAQZXhhbXBsZS50ZXBwLnBzMQapAgAAUy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvdGVwcC9leGFtcGxlLnRlcHAucHMxCQYAAAAJqwIAAAmsAgAAASgCAAAOAAAABq0CAACoByMgVGFiIEV4cGFuc2lvbgoKIyMgRGVzY3JpcHRpb24KCk1vZGVybiBUYWIgRXhwYW5zaW9uIHdhcyBvcGVuZWQgdG8gdXNlcnMgd2l0aCB0aGUgbW9kdWxlIGBUYWIgRXhwYW5zaW9uIFBsdXMgUGx1c2AgKFRFUFApLgoKSXQgYWxsb3dzIHlvdSB0byBkZWZpbmUsIHdoYXQgb3B0aW9ucyBhIHVzZXIgaXMgb2ZmZXJlZCB3aGVuIHRhYmJpbmcgdGhyb3VnaCBpbnB1dCBvcHRpb25zLiBUaGlzIGNhbiBzYXZlIGEgbG90IG9mIHRpbWUgZm9yIHRoZSB1c2VyIGFuZCBpcyBjb25zaWRlcmVkIGEga2V5IGVsZW1lbnQgaW4gdXNlciBleHBlcmllbmNlLgoKVGhlIGBQU0ZyYW1ld29ya2Agb2ZmZXJzIGEgc2ltcGxpZmllZCB3YXkgb2Ygb2ZmZXJpbmcganVzdCB0aGlzLCBhcyB0aGUgdHdvIGV4YW1wbGUgZmlsZXMgc2hvdy4KCiMjIENvbmNlcHQKCkN1c3RvbSB0YWIgY29tcGxldGlvbiBpcyBkZWZpbmVkIGluIHR3byBzdGVwczoKCiAtIERlZmluZSBhIHNjcmlwdGJsb2NrIHRoYXQgaXMgcnVuIHdoZW4gdGhlIHVzZXIgaGl0cyBgVEFCYCBhbmQgcHJvdmlkZXMgdGhlIHN0cmluZ3MgdGhhdCBhcmUgaGlzIG9wdGlvbnMuCiAtIEFzc2lnbiB0aGF0IHNjcmlwdGJsb2NrIHRvIHRoZSBwYXJhbWV0ZXIgb2YgYSBjb21tYW5kLiBZb3UgY2FuIGFzc2lnbiB0aGUgc2FtZSBzY3JpcHRibG9jayBtdWx0aXBsZSB0aW1lcy4KCiMjIFN0cnVjdHVyZQoKSW1wb3J0IG9yZGVyIG1hdHRlcnMuIEluIG9yZGVyIHRvIG1ha2UgdGhpbmdzIHdvcmsgd2l0aCB0aGUgZGVmYXVsdCBzY2FmZm9sZCwgZm9sbG93IHRob3NlIHJ1bGVzOgoKIC0gQWxsIHNjcmlwdGZpbGVzIF9kZWZpbmluZ18gY29tcGxldGlvbiBzY3JpcHRibG9ja3MgbGlrZSB0aGlzOiBgKi50ZXBwLnBzMWAKIC0gUHV0IGFsbCB5b3VyIGNvbXBsZXRpb24gYXNzaWdubWVudHMgaW4gYGFzc2lnbm1lbnQucHMxYAEJrgIAAAmvAgAABrACAAAJcmVhZG1lLm1kBrECAABML1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC90ZXBwL3JlYWRtZS5tZAkGAAAACbMCAAAJtAIAAAEpAgAADgAAAAa1AgAA6AIjIGJpbiBmb2xkZXIKClRoZSBiaW4gZm9sZGVyIGV4aXN0cyB0byBzdG9yZSBiaW5hcnkgZGF0YS4gQW5kIHNjcmlwdHMgcmVsYXRlZCB0byB0aGUgdHlwZSBzeXN0ZW0uCgpUaGlzIG1heSBpbmNsdWRlIHlvdXIgb3duIEMjLWJhc2VkIGxpYnJhcnksIHRoaXJkIHBhcnR5IGxpYnJhcmllcyB5b3Ugd2FudCB0byBpbmNsdWRlICh3YXRjaCB0aGUgbGljZW5zZSEpLCBvciBhIHNjcmlwdCBkZWNsYXJpbmcgdHlwZSBhY2NlbGVyYXRvcnMgKGVmZmVjdGl2ZWx5IGFsaWFzZXMgZm9yIC5ORVQgdHlwZXMpCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBUeXBlIEFjY2VsZXJhdG9ycywgc2VlIHRoZSBoZWxwIG9uIFNldC1QU0ZUeXBlQWxpYXMBCbYCAAAJtwIAAAa4AgAACXJlYWRtZS5tZAa5AgAAZi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vYmluL3JlYWRtZS5tZAkGAAAACbsCAAAJvAIAAAEqAgAADgAAAAa9AgAAmwFUT1BJQwoJYWJvdXRfw75uYW1lw74KCQpTSE9SVCBERVNDUklQVElPTgoJRXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgw75uYW1lw74gcG93ZXJzaGVsbCBtb2R1bGUKCQpMT05HIERFU0NSSVBUSU9OCgk8SW5zZXJ0IENvbnRlbnQgaGVyZT4KCktFWVdPUkRTCgnDvm5hbWXDvgEJvgIAAAm/AgAABsACAAAXYWJvdXRfw75uYW1lw74uaGVscC50eHQGwQIAAHYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2VuLXVzL2Fib3V0X8O+bmFtZcO+LmhlbHAudHh0CQYAAAAJwwIAAAnEAgAAASsCAAAOAAAABsUCAACZASMgVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBnbywgdGhhdCBhcmUgd3JpdHRlbiBieQojIFdyaXRlLVBTRk1lc3NhZ2UsIFN0b3AtUFNGRnVuY3Rpb24gb3IgdGhlIFBTRnJhbWV3b3JrIHZhbGlkYXRpb24gc2NyaXB0YmxvY2tzCkB7Cgkna2V5JyA9ICdWYWx1ZScKfQEJxgIAAAnHAgAABsgCAAAMc3RyaW5ncy5wc2QxBskCAABrL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9lbi11cy9zdHJpbmdzLnBzZDEJBgAAAAnLAgAACcwCAAABLAIAAA4AAAAGzQIAAO4LZnVuY3Rpb24gR2V0LVNlY3JldCB7CiAgICA8IwogICAgLlNZTk9QU0lTCiAgICBRdWVyeSBhIHNpbmdsZSBzZWNyZXQuCgogICAgLkRFU0NSSVBUSU9OCiAgICBRdWVyeSBhIHNpbmdsZSBzZWNyZXQuCgogICAgLlBBUkFNRVRFUiBOYW1lCiAgICBOYW1lIHRvIGJlIHNlYXJjaGVkIGZvci4KCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuCgogICAgLkVYQU1QTEUKICAgIEdldC1TZWNyZXQgLVZhdWx0ICRWYXVsdG5hbWUgLU5hbWUgZm9vCgogICAgUmV0dXJucyB0aGUgc3RvcmVkIHNlY3JldCBmb3IgdGhlIGVudHJ5IGZvby4KCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbQ21kbGV0QmluZGluZygpXQogICAgcGFyYW0gKAogICAgICAgIFtzdHJpbmddICROYW1lLAogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICApCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUKICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgaWYgKCRBZGRpdGlvbmFsUGFyYW1ldGVycy5WZXJib3NlKSB7ICRWZXJib3NlUHJlZmVyZW5jZSA9ICdjb250aW51ZScgfQoKICAgIFdyaXRlLVBTRk1lc3NhZ2UgIkdldC1TZWNyZXQsIE5hbWU9JE5hbWUsICRWYXVsdE5hbWUsIEFkZGl0aW9uYWxQYXJhbWV0ZXJzPSQoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzfENvbnZlcnRUby1Kc29uIC1Db21wcmVzcykiCiAgICAjIFRPRE8gUGVyZm9ybSBSZXRyaWV2YWwgdm9vZG9vIDstKQogICAgIyAkc2VjcmV0ID0gR2V0LcO+ZnVuY3Rpb25QcmVmaXjDvlNlY3JldAogICAgIyBXcml0ZS1QU0ZNZXNzYWdlICJGb3VuZCBgJHNlY3JldD0kKCRzZWNyZXQuZ2V0dHlwZSgpKSIKICAgICMgIyBDaGVjayBpZiBvbmx5IG9uZSBzZWNyZXQgd2FzIHJldHJpZXZlZAogICAgIyBpZiAoJHNlY3JldC5Db3VudCAtZ3QgMSAtYW5kICRzZWNyZXQgLWlzbm90IFtoYXNodGFibGVdKSB7CiAgICAjICAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBFcnJvciAnTXVsdGlwbGUgY3JlZGVudGlhbHMgZm91bmQ7IFNlYXJjaCB3aXRoIEdldC1TZWNyZXRJbmZvIGFuZCByZXF1aXJlIHRoZSBjb3JyZWN0IG9uZSBieSAqLk1ldGFEYXRhLmlkJwogICAgIyAgICAgV2FpdC1QU0ZNZXNzYWdlCiAgICAjICAgICB0aHJvdyAnTXVsdGlwbGUgY3JlZGVudGlhbHMgZm91bmQ7IFNlYXJjaCB3aXRoIEdldC1TZWNyZXRJbmZvIGFuZCByZXF1aXJlIHRoZSBjb3JyZWN0IG9uZSBieSAqLk1ldGFEYXRhLmlkJwogICAgIyB9CiAgICByZXR1cm4gJHNlY3JldCB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEKfQoKAQnOAgAACc8CAAAG0AIAAA5HZXQtU2VjcmV0LnBzMQbRAgAAcS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL0dldC1TZWNyZXQucHMxCQYAAAAJ0wIAAAnUAgAAAS0CAAAOAAAABtUCAADcC2Z1bmN0aW9uIEdldC1TZWNyZXRJbmZvIHsKICAgIDwjCiAgICAuU1lOT1BTSVMKICAgIFJldHVybnMgU2VjcmV0bWFuYWdlbWVudEluZm9ybWF0aW9uIG9iamVjdHMgZm9yIHRoZSByZXF1ZXN0ZWQgZW50cmllcy4KCiAgICAuREVTQ1JJUFRJT04KICAgIFJldHVybnMgU2VjcmV0bWFuYWdlbWVudEluZm9ybWF0aW9uIG9iamVjdHMgZm9yIHRoZSByZXF1ZXN0ZWQgZW50cmllcy4KCiAgICAuUEFSQU1FVEVSIEZpbHRlcgogICAgVGhlIG5hbWUgdG8gYmUgc2VhcmNoZWQKCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuCgogICAgLkVYQU1QTEUKICAgIEdldC1TZWNyZXRJbmZvIC1WYXVsdCAkVmF1bHRuYW1lIC1OYW1lIGZvb2JhcgogICAgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICBWYXVsdE5hbWUKICAgIC0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tICAgICAgICAgLS0tLS0tLS0tCiAgICBmb29iYXIgWzVkZDkzN2M0LWIwYTAtZWQxMS1hODc2LTAwNTA1NmJjZTk0OF0gUFNDcmVkZW50aWFsIFBXU2FmZUludAogICAgZm9vYmFyIFtlZjJmZTExZC1iMGEwLWVkMTEtYTg3Ni0wMDUwNTZiY2U5NDhdIFBTQ3JlZGVudGlhbCBQV1NhZmVJbnQKCiAgICBSZXR1cm5zIHRoZSBzdG9yZWQgc2VjcmV0IGluZm8uCgogICAgLk5PVEVTCiAgICBHZW5lcmFsIG5vdGVzCiAgICAjPgogICAgW0NtZGxldEJpbmRpbmcoKV0KICAgIHBhcmFtICgKICAgICAgICBbc3RyaW5nXSAkRmlsdGVyLAogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICApCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUKICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgaWYgKCRBZGRpdGlvbmFsUGFyYW1ldGVycy5WZXJib3NlKSB7ICRWZXJib3NlUHJlZmVyZW5jZSA9ICdjb250aW51ZScgfQoKICAgIFdyaXRlLVBTRk1lc3NhZ2UgIkdldC1TZWNyZXRJbmZvLCBGaWx0ZXI9JEZpbHRlciwgJFZhdWx0TmFtZSwgQWRkaXRpb25hbFBhcmFtZXRlcnM9JCgkQWRkaXRpb25hbFBhcmFtZXRlcnN8Q29udmVydFRvLUpzb24gLUNvbXByZXNzKSIKICAgIHJldHVybiBHZXQtTmV0d3JpeENvbnRhaW5lciAtRmlsdGVyICRGaWx0ZXIgLVZhdWx0TmFtZSAkVmF1bHROYW1lIC1BZGRpdGlvbmFsUGFyYW1ldGVycyAkQWRkaXRpb25hbFBhcmFtZXRlcnMgLVJldHVyblR5cGUgU2VjcmV0SW5mb3JtYXRpb24KICAgICMgVE9ETyBQZXJmb3JtIHVwZGF0ZSB2b29kb28gOy0pCn0KCgEJ1gIAAAnXAgAABtgCAAASR2V0LVNlY3JldEluZm8ucHMxBtkCAAB1L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMvR2V0LVNlY3JldEluZm8ucHMxCQYAAAAJ2wIAAAncAgAAAS4CAAAOAAAABt0CAADMASMgRnVuY3Rpb25zCgpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGZ1bmN0aW9ucyBnby4KCkRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbW9kdWxlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdWJkaXZpZGUgdGhlbSBpbnRvIHN1YmZvbGRlcnMuCgpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseQEJ3gIAAAnfAgAABuACAAAJcmVhZG1lLm1kBuECAABsL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMvcmVhZG1lLm1kCQYAAAAJ4wIAAAnkAgAAAS8CAAAOAAAABuUCAADrBgpmdW5jdGlvbiBSZW1vdmUtU2VjcmV0IHsKICAgIDwjCiAgICAuU1lOT1BTSVMKICAgIFJlbW92ZXMgYSBzZWNyZXQgZnJvbSB0aGUgdmF1bHQuIE5PVCBpbXBsZW1lbnRlZCB5ZXQuCgogICAgLkRFU0NSSVBUSU9OCiAgICBSZW1vdmVzIGEgc2VjcmV0IGZyb20gdGhlIHZhdWx0LiBOT1QgaW1wbGVtZW50ZWQgeWV0LgoKICAgIC5QQVJBTUVURVIgTmFtZQogICAgTmFtZSB0byBiZSBzZWFyY2hlZCBmb3IuCgogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUKICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0LgoKICAgIC5FWEFNUExFCiAgICBBbiBleGFtcGxlCiAgICBpcyBub3QgbmVjY2Vzc2FyeQoKICAgIEFzIG5vdCBpbXBsZW1lbnRlZAoKICAgIC5OT1RFUwogICAgR2VuZXJhbCBub3RlcwogICAgIz4KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1Jldmlld1VudXNlZFBhcmFtZXRlcicsICcnKV0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1VzZVNob3VsZFByb2Nlc3Nmb3JTdGF0ZUNoYW5naW5nRnVuY3Rpb25zJywgJycpXQogICAgW0NtZGxldEJpbmRpbmcoKV0KICAgIHBhcmFtICgKICAgICAgICBbc3RyaW5nXSAkTmFtZSwKICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLAogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgKQogICAgdGhyb3cgIk5vdCBJbXBsZW1lbnRlZCIKfQoKAQnmAgAACecCAAAG6AIAABFSZW1vdmUtU2VjcmV0LnBzMQbpAgAAdC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL1JlbW92ZS1TZWNyZXQucHMxCQYAAAAJ6wIAAAnsAgAAATACAAAOAAAABu0CAADQCWZ1bmN0aW9uIFNldC1TZWNyZXQgewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgVXBkYXRlcyBhIHNlY3JldCBzdG9yZWQgaW4gdGhlIHZhdWx0LgoKICAgIC5ERVNDUklQVElPTgogICAgVXBkYXRlcyBhIHNlY3JldCBzdG9yZWQgaW4gdGhlIHZhdWx0LgoKICAgIC5QQVJBTUVURVIgTmFtZQogICAgTmFtZSBvZiB0aGUgZW50cnkKCiAgICAuUEFSQU1FVEVSIFNlY3JldAogICAgVGhlIE5ldyBTZWNyZXQuIENhbiBiZSBhIFNlY3VyZVN0cmluZyBvciBhIFBTQ3JlZGVudGlhbC1vYmplY3QKCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuCgogICAgLkVYQU1QTEUKICAgIFNldC1TZWNyZXQgLVZlcmJvc2UgLVZhdWx0ICRWYXVsdG5hbWUgLVNlY3JldCAoR2V0LUNyZWRlbnRpYWwpIC1OYW1lIGZvbwoKICAgIFVwZGF0ZXMgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIG9mIHRoZSBlbnRyeS4KCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbQ21kbGV0QmluZGluZygpXQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTVXNlU2hvdWxkUHJvY2Vzc2ZvclN0YXRlQ2hhbmdpbmdGdW5jdGlvbnMnLCAnJyldCiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNVc2VPdXRwdXRUeXBlQ29ycmVjdGx5JywgJycpXQogICAgcGFyYW0gKAogICAgICAgIFtzdHJpbmddICROYW1lLAogICAgICAgIFtvYmplY3RdICRTZWNyZXQsCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwKICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgICkKICAgICMgV29ya2Fyb3VuZCBDYXNlU2Vuc2l0aXZlIEhhc2hUYWJsZQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBpZiAoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzLlZlcmJvc2UpIHsgJFZlcmJvc2VQcmVmZXJlbmNlID0gJ2NvbnRpbnVlJyB9CiAgICAjIFRPRE8gUGVyZm9ybSB1cGRhdGUgdm9vZG9vIDstKQogICAgV2FpdC1QU0ZNZXNzYWdlCiAgICByZXR1cm4gJHRydWUKfQoKAQnuAgAACe8CAAAG8AIAAA5TZXQtU2VjcmV0LnBzMQbxAgAAcS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL1NldC1TZWNyZXQucHMxCQYAAAAJ8wIAAAn0AgAAATECAAAOAAAABvUCAACjC2Z1bmN0aW9uIFNldC1TZWNyZXRJbmZvIHsKICAgIDwjCiAgICAuU1lOT1BTSVMKICAgIFVwZGF0ZXMgYWRkaXRpb25hbCBmaWVsZHMgb2YgYSBzaW5nbGUgZW50cnkuCgogICAgLkRFU0NSSVBUSU9OCiAgICBVcGRhdGVzIGFkZGl0aW9uYWwgZmllbGRzIG9mIGEgc2luZ2xlIGVudHJ5LgoKICAgIC5QQVJBTUVURVIgTmFtZQogICAgTmFtZSBvZiB0aGUgZW50cnkKCiAgICAuUEFSQU1FVEVSIE1ldGFkYXRhCiAgICBUaGUgSGFzaFRhYmxlIHdpdGggdGhlIGZpZWxkcyB0byB1cGRhdGUuCiAgICBQb3NzaWJsZSBLZXlzOiAnVXNlcm5hbWUnLCAnUGFzc3dvcmQnLCAnTmFtZScsICdNZW1vJwoKICAgIC5QQVJBTUVURVIgVmF1bHROYW1lCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0LgoKICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4KCiAgICAuRVhBTVBMRQogICAgU2V0LVNlY3JldEluZm8gIC1WYXVsdCAkVmF1bHRuYW1lICAtTmFtZSBmb28gLU1ldGFkYXRhIEB7bWVtbz0nTm90aXogMic7dXNlcm5hbWU9J2Zvbyc7cGFzc3dvcmQ9JG15TmV3U2VjcmV0fQoKICAgIFVwZGF0ZXMgdGhlIGVudHJ5IHdpdGggbmV3IG1lbW8uCgogICAgLkVYQU1QTEUKICAgIFNldC1TZWNyZXRJbmZvICAtVmF1bHQgJFZhdWx0bmFtZSAgLU5hbWUgZm9vIC1NZXRhZGF0YSBAe25hbWU9J0Jhcid9CgogICAgUmVuYW1lcyB0aGUgZW50cnkgJ2ZvbycgdG8gJ0JhcicKCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbQ21kbGV0QmluZGluZygpXQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTVXNlU2hvdWxkUHJvY2Vzc2ZvclN0YXRlQ2hhbmdpbmdGdW5jdGlvbnMnLCAnJyldCiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNVc2VPdXRwdXRUeXBlQ29ycmVjdGx5JywgJycpXQogICAgcGFyYW0gKAogICAgICAgIFtzdHJpbmddICROYW1lLAogICAgICAgIFtoYXNodGFibGVdICRNZXRhZGF0YSwKICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLAogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgKQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIGlmICgkQWRkaXRpb25hbFBhcmFtZXRlcnMuVmVyYm9zZSkgeyAkVmVyYm9zZVByZWZlcmVuY2UgPSAnY29udGludWUnIH0KICAgICMgVE9ETyBQZXJmb3JtIHVwZGF0ZSB2b29kb28gOy0pCiAgICBXYWl0LVBTRk1lc3NhZ2UKICAgIHJldHVybiAkdHJ1ZQp9CgEJ9gIAAAn3AgAABvgCAAASU2V0LVNlY3JldEluZm8ucHMxBvkCAAB1L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMvU2V0LVNlY3JldEluZm8ucHMxCQYAAAAJ+wIAAAn8AgAAATICAAAOAAAABv0CAACuCgpmdW5jdGlvbiBUZXN0LVNlY3JldFZhdWx0IHsKICAgIDwjCiAgICAuU1lOT1BTSVMKICAgIFRlc3RzIGlmIHRoZSB2YXVsdCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBhbmQgaWYgaXQgaXMgdW5sb2NrZWQuCgogICAgLkRFU0NSSVBUSU9OCiAgICBUZXN0cyBpZiB0aGUgdmF1bHQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgYW5kIGlmIGl0IGlzIHVubG9ja2VkLgoKICAgIC5QQVJBTUVURVIgVmF1bHROYW1lCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0LgoKICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4KCiAgICAuRVhBTVBMRQogICAgVGVzdC1TZWNyZXRWYXVsdCAtVmF1bHROYW1lICR2YXVsdG5hbWUKCiAgICBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bGwKCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbQ21kbGV0QmluZGluZygpXQogICAgcGFyYW0gKAogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICApCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUKICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgaWYgKCRBZGRpdGlvbmFsUGFyYW1ldGVycy5WZXJib3NlKSB7ICRWZXJib3NlUHJlZmVyZW5jZSA9ICdjb250aW51ZScgfQogICAgV3JpdGUtUFNGTWVzc2FnZSAgIlRlc3QtU2VjcmV0VmF1bHQgZnJvbSAkVmF1bHROYW1lLCBBZGRpdGlvbmFsUGFyYW1ldGVycz0kKCRBZGRpdGlvbmFsUGFyYW1ldGVyc3xDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIgoKICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFZlcmJvc2UgIlNlY3JldE1hbmFnZW1lbnQ6IFRlc3RpbmcgVmF1bHQgJHtWYXVsdE5hbWV9IgogICAgJHZhdWx0ID0gR2V0LVNlY3JldFZhdWx0ICRWYXVsdE5hbWUgLUVycm9yQWN0aW9uIFN0b3AKICAgIGlmICgkdmF1bHQuTW9kdWxlTmFtZSAtbmUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74nKSB7CiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgRXJyb3IgIiR2YXVsdE5hbWUgd2FzIGZvdW5kIGJ1dCBpcyBub3QgYSDDvm5hbWXDviBWYXVsdC4iCiAgICAgICAgV2FpdC1QU0ZNZXNzYWdlCiAgICAgICAgcmV0dXJuICRmYWxzZQogICAgfQogICAgIyBUT0RPIFBlcmZvcm0gc29tZSB0ZXN0aW5nIHZvb2RvbyA7LSkKICAgIHJldHVybiAkdHJ1ZQp9CgEJ/gIAAAn/AgAABgADAAAUVGVzdC1TZWNyZXRWYXVsdC5wczEGAQMAAHcvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy9UZXN0LVNlY3JldFZhdWx0LnBzMQkGAAAACQMDAAAJBAMAAAEzAgAADgAAAAYFAwAAyApmdW5jdGlvbiBVbmxvY2stU2VjcmV0VmF1bHQgewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgVW5sb2NrcyB0aGUgdmF1bHQuCgogICAgLkRFU0NSSVBUSU9OCiAgICBVbmxvY2tzIHRoZSB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIFBhc3N3b3JkCiAgICBUaGUgcGFzc3dvcmQgbmVlZGVkIGZvciB1bmxvY2tpbmcuCgogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUKICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0LgoKICAgIC5FWEFNUExFCiAgICBVbmxvY2stU2VjcmV0VmF1bHQgLVZhdWx0TmFtZSAkdmF1bHROYW1lIC1QYXNzd29yZCAoUmVhZC1Ib3N0IC1Bc1NlY3VyZVN0cmluZykKCiAgICBVbmxvY2tzIHRoZSB2YXVsdAoKICAgIC5OT1RFUwogICAgR2VuZXJhbCBub3RlcwogICAgIz4KICAgIFtDbWRsZXRCaW5kaW5nKCldCiAgICBwYXJhbSAoCiAgICAgICAgW1NlY3VyZVN0cmluZ10gJFBhc3N3b3JkLAogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICApCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUKICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycwoKICAgIFdyaXRlLVBTRk1lc3NhZ2UgIlVubG9ja2luZyBTZWNyZXRWYXVsdCAkVmF1bHROYW1lLCBBZGRpdGlvbmFsUGFyYW1ldGVycz0kKCRBZGRpdGlvbmFsUGFyYW1ldGVyc3xDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIgogICAgJHZhdWx0ID0gR2V0LVNlY3JldFZhdWx0ICRWYXVsdE5hbWUgLUVycm9yQWN0aW9uIFN0b3AKICAgIGlmICgkdmF1bHQuTW9kdWxlTmFtZSAtbmUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74nKSB7CiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgRXJyb3IgIiR2YXVsdE5hbWUgd2FzIGZvdW5kIGJ1dCBpcyBub3QgYSDDvm5hbWXDviBWYXVsdC4iCiAgICAgICAgV2FpdC1QU0ZNZXNzYWdlCiAgICAgICAgcmV0dXJuICRmYWxzZQogICAgfQogICAgIyBUT0RPIFNob3VsZCB0aGUgbWFzdGVyIHBhc3N3b3JkIGJlIGNhY2hlZD8KICAgICMgU2V0LVZhcmlhYmxlIC1OYW1lICJWYXVsdF8ke3ZhdWx0TmFtZX1fTWFzdGVyUGFzc3dvcmQiIC1TY29wZSBTY3JpcHQgLVZhbHVlICRQYXNzd29yZCAtRm9yY2UKCiAgICAjIFRPRE8gUGVyZm9ybSB0aGUgY29ubmVjdGlvbiB2b29kb28gOy0pCiAgICByZXR1cm4gJHRydWUKfQEJBgMAAAkHAwAABggDAAAWVW5sb2NrLVNlY3JldFZhdWx0LnBzMQYJAwAAeS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL1VubG9jay1TZWNyZXRWYXVsdC5wczEJBgAAAAkLAwAACQwDAAABNAIAAA4AAAAGDQMAAPYHZnVuY3Rpb24gVW5yZWdpc3Rlci1TZWNyZXRWYXVsdCB7CiAgICA8IwogICAgLlNZTk9QU0lTCiAgICBVbnJlZ2lzdGVycyB0aGUgdmF1bHQgYW5kIHJlbW92ZXMgaW5NZW1vcnkgZGF0YSBmb3Igc2VjdXJpdHkuCgogICAgLkRFU0NSSVBUSU9OCiAgICBVbnJlZ2lzdGVycyB0aGUgdmF1bHQgYW5kIHJlbW92ZXMgaW5NZW1vcnkgZGF0YSBmb3Igc2VjdXJpdHkuCgogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUKICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0LgoKICAgIC5FWEFNUExFCiAgICBVbnJlZ2lzdGVyLVNlY3JldFZhdWx0IC1WYXVsdE5hbWUgJHZhdWx0TmFtZQoKICAgIFJlbW92ZXMgdGhlIHJlZ2lzdHJhdGlvbgoKICAgIC5OT1RFUwogICAgR2VuZXJhbCBub3RlcwogICAgIz4KICAgIFtDbWRsZXRCaW5kaW5nKCldCiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNSZXZpZXdVbnVzZWRQYXJhbWV0ZXInLCAnJyldCiAgICBwYXJhbSAoCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwKICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgICkKICAgICMgV29ya2Fyb3VuZCBDYXNlU2Vuc2l0aXZlIEhhc2hUYWJsZQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCgogICAgIyBUT0RPIEFkZCB5b3VyIHNwZWNpZmljIGRpc2Nvbm5lY3Rpb24gY29tbWFuZHMsIGUuZy4gcmVtb3ZpbmcgdGhlIHN0b3JlZCBtYXN0ZXIgcGFzc3dvcmQKICAgICMgUmVtb3ZlLVZhcmlhYmxlIC1OYW1lICJWYXVsdF8ke3ZhdWx0TmFtZX1fTWFzdGVyUGFzc3dvcmQiIC1TY29wZSBTY3JpcHQgLUZvcmNlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlCn0KAQkOAwAACQ8DAAAGEAMAABpVbnJlZ2lzdGVyLVNlY3JldFZhdWx0LnBzMQYRAwAAfS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL1VucmVnaXN0ZXItU2VjcmV0VmF1bHQucHMxCQYAAAAJEwMAAAkUAwAAATUCAAAOAAAABhUDAACqAiMgRnVuY3Rpb25zLlNoYXJlZEludGVybmFsCgpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgaW50ZXJuYWwgZnVuY3Rpb25zIGdvIHdoaWNoIHdpbGwgYmUgaW1wb3J0ZWQgZnJvbSB0aGUgbWFpbgphbmQgdGhlIGV4dGVuc2lvbiBtb2R1bGUuCgpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseS4gSWYgdGhlIG1vZHVsZSBpcyBidWlsZCB3aXRoCid2c3RzLWJ1aWxkLnBzMScgdGhlIGNvbnRlbnQgb2YgYWxsICoucHMxIGZpbGVzIGlzIGNvcGllZCBpbnRvIHRoZSAqLnBzbTEgZmlsZS4BCRYDAAAJFwMAAAYYAwAACXJlYWRtZS5tZAYZAwAAey9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zLnNoYXJlZGludGVybmFsL3JlYWRtZS5tZAkGAAAACRsDAAAJHAMAAAE2AgAAAQAAAAkdAwAABh4DAAAOY29uZmlndXJhdGlvbnMGHwMAAHAvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL2NvbmZpZ3VyYXRpb25zCQYAAAAJIQMAAAkiAwAAATcCAAABAAAACSMDAAAGJAMAAAlmdW5jdGlvbnMGJQMAAGsvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL2Z1bmN0aW9ucwkGAAAACScDAAAJKAMAAAE4AgAAAQAAAAkpAwAABioDAAAMc2NyaXB0YmxvY2tzBisDAABuL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9zY3JpcHRibG9ja3MJBgAAAAktAwAACS4DAAABOQIAAAEAAAAJLwMAAAYwAwAAB3NjcmlwdHMGMQMAAGkvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3NjcmlwdHMJBgAAAAkzAwAACTQDAAABOgIAAAEAAAAJNQMAAAY2AwAABHRlcHAGNwMAAGYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3RlcHAJBgAAAAk5AwAACToDAAABOwIAAAEAAAAJOwMAAAY8AwAACWZ1bmN0aW9ucwY9AwAAaC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZnVuY3Rpb25zCQYAAAAJPwMAAAlAAwAAATwCAAABAAAACUEDAAAGQgMAAAdnZW5lcmFsBkMDAABmL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsCQYAAAAJRQMAAAlGAwAAAT0CAAAOAAAABkcDAAC6GnBhcmFtICgKCSRUZXN0R2VuZXJhbCA9ICR0cnVlLAoJCgkkVGVzdEZ1bmN0aW9ucyA9ICR0cnVlLAoJCglbVmFsaWRhdGVTZXQoJ05vbmUnLCAnTm9ybWFsJywgJ0RldGFpbGVkJywgJ0RpYWdub3N0aWMnKV0KCVtBbGlhcygnU2hvdycpXQoJJE91dHB1dCA9ICJOb25lIiwKCQoJJEluY2x1ZGUgPSAiKiIsCgkKCSRFeGNsdWRlID0gIiIKKQoKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJTdGFydGluZyBUZXN0cyIKCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiSW1wb3J0aW5nIE1vZHVsZSIKCiRnbG9iYWw6dGVzdHJvb3QgPSAkUFNTY3JpcHRSb290CiRnbG9iYWw6X19wZXN0ZXJfZGF0YSA9IEB7IH0KClJlbW92ZS1Nb2R1bGUgw75uYW1lw74gLUVycm9yQWN0aW9uIElnbm9yZQpJbXBvcnQtTW9kdWxlICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+LnBzZDEiCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw74ucHNtMSIgLUZvcmNlCgojIE5lZWQgdG8gaW1wb3J0IGV4cGxpY2l0bHkgc28gd2UgY2FuIHVzZSB0aGUgY29uZmlndXJhdGlvbiBjbGFzcwpJbXBvcnQtTW9kdWxlIFBlc3RlcgoKw74hdGVzdGZvbGRlciHDvgoKJHRvdGFsRmFpbGVkID0gMAokdG90YWxSdW4gPSAwCgokdGVzdHJlc3VsdHMgPSBAKCkKJGNvbmZpZyA9IFtQZXN0ZXJDb25maWd1cmF0aW9uXTo6RGVmYXVsdArDviFwZXN0ZXJjb25maWchw74KCiNyZWdpb24gUnVuIEdlbmVyYWwgVGVzdHMKaWYgKCRUZXN0R2VuZXJhbCkKewoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJNb2R1bGVzIGltcG9ydGVkLCBwcm9jZWVkaW5nIHdpdGggZ2VuZXJhbCB0ZXN0cyIKCWZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkUFNTY3JpcHRSb290XGdlbmVyYWwiIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIiouVGVzdHMucHMxIikpCgl7CgkJaWYgKCRmaWxlLk5hbWUgLW5vdGxpa2UgJEluY2x1ZGUpIHsgY29udGludWUgfQoJCWlmICgkZmlsZS5OYW1lIC1saWtlICRFeGNsdWRlKSB7IGNvbnRpbnVlIH0KCgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgU2lnbmlmaWNhbnQgLU1lc3NhZ2UgIiAgRXhlY3V0aW5nIDxjPSdlbSc+JCgkZmlsZS5OYW1lKTwvYz4iCgkJJGNvbmZpZy5UZXN0UmVzdWx0Lk91dHB1dFBhdGggPSBKb2luLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi5cVGVzdFJlc3VsdHMiICJURVNULSQoJGZpbGUuQmFzZU5hbWUpLnhtbCIKCQkkY29uZmlnLlJ1bi5QYXRoID0gJGZpbGUuRnVsbE5hbWUKCQkkY29uZmlnLlJ1bi5QYXNzVGhydSA9ICR0cnVlCgkJJGNvbmZpZy5PdXRwdXQuVmVyYm9zaXR5ID0gJE91dHB1dAogICAgCSRyZXN1bHRzID0gSW52b2tlLVBlc3RlciAtQ29uZmlndXJhdGlvbiAkY29uZmlnCgkJZm9yZWFjaCAoJHJlc3VsdCBpbiAkcmVzdWx0cykKCQl7CgkJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQKCQkJJHRvdGFsRmFpbGVkICs9ICRyZXN1bHQuRmFpbGVkQ291bnQKCQkJJHJlc3VsdC5UZXN0cyB8IFdoZXJlLU9iamVjdCBSZXN1bHQgLW5lICdQYXNzZWQnIHwgRm9yRWFjaC1PYmplY3QgewoJCQkJJHRlc3RyZXN1bHRzICs9IFtwc2N1c3RvbW9iamVjdF1AewoJCQkJCUJsb2NrICAgID0gJF8uQmxvY2sKCQkJCQlOYW1lCSA9ICJJdCAkKCRfLk5hbWUpIgoJCQkJCVJlc3VsdCAgID0gJF8uUmVzdWx0CgkJCQkJTWVzc2FnZSAgPSAkXy5FcnJvclJlY29yZC5EaXNwbGF5RXJyb3JNZXNzYWdlCgkJCQl9CgkJCX0KCQl9Cgl9Cn0KI2VuZHJlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cwoKJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyIHwgT3V0LUhvc3QKCiNyZWdpb24gVGVzdCBDb21tYW5kcwppZiAoJFRlc3RGdW5jdGlvbnMpCnsKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHJvY2VlZGluZyB3aXRoIGluZGl2aWR1YWwgdGVzdHMiCglmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJFBTU2NyaXB0Um9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIipUZXN0cy5wczEiKSkKCXsKCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9CgkJaWYgKCRmaWxlLk5hbWUgLWxpa2UgJEV4Y2x1ZGUpIHsgY29udGludWUgfQoJCQoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyAkKCRmaWxlLk5hbWUpIgoJCSRjb25maWcuVGVzdFJlc3VsdC5PdXRwdXRQYXRoID0gSm9pbi1QYXRoICIkUFNTY3JpcHRSb290XC4uXC4uXFRlc3RSZXN1bHRzIiAiVEVTVC0kKCRmaWxlLkJhc2VOYW1lKS54bWwiCgkJJGNvbmZpZy5SdW4uUGF0aCA9ICRmaWxlLkZ1bGxOYW1lCgkJJGNvbmZpZy5SdW4uUGFzc1RocnUgPSAkdHJ1ZQoJCSRjb25maWcuT3V0cHV0LlZlcmJvc2l0eSA9ICRPdXRwdXQKICAgIAkkcmVzdWx0cyA9IEludm9rZS1QZXN0ZXIgLUNvbmZpZ3VyYXRpb24gJGNvbmZpZwoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpCgkJewoJCQkkdG90YWxSdW4gKz0gJHJlc3VsdC5Ub3RhbENvdW50CgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50CgkJCSRyZXN1bHQuVGVzdHMgfCBXaGVyZS1PYmplY3QgUmVzdWx0IC1uZSAnUGFzc2VkJyB8IEZvckVhY2gtT2JqZWN0IHsKCQkJCSR0ZXN0cmVzdWx0cyArPSBbcHNjdXN0b21vYmplY3RdQHsKCQkJCQlCbG9jayAgICA9ICRfLkJsb2NrCgkJCQkJTmFtZQkgPSAiSXQgJCgkXy5OYW1lKSIKCQkJCQlSZXN1bHQgICA9ICRfLlJlc3VsdAoJCQkJCU1lc3NhZ2UgID0gJF8uRXJyb3JSZWNvcmQuRGlzcGxheUVycm9yTWVzc2FnZQoJCQkJfQoJCQl9CgkJfQoJfQp9CiNlbmRyZWdpb24gVGVzdCBDb21tYW5kcwoKJHRlc3RyZXN1bHRzIHwgU29ydC1PYmplY3QgRGVzY3JpYmUsIENvbnRleHQsIE5hbWUsIFJlc3VsdCwgTWVzc2FnZSB8IEZvcm1hdC1MaXN0CgppZiAoJHRvdGFsRmFpbGVkIC1lcSAwKSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICJBbGwgPGM9J2VtJz4kdG90YWxSdW48L2M+IHRlc3RzIGV4ZWN1dGVkIHdpdGhvdXQgYSBzaW5nbGUgZmFpbHVyZSEiIH0KZWxzZSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICI8Yz0nZW0nPiR0b3RhbEZhaWxlZCB0ZXN0czwvYz4gb3V0IG9mIDxjPSdzdWInPiR0b3RhbFJ1bjwvYz4gdGVzdHMgZmFpbGVkISIgfQoKaWYgKCR0b3RhbEZhaWxlZCAtZ3QgMCkKewoJdGhyb3cgIiR0b3RhbEZhaWxlZCAvICR0b3RhbFJ1biB0ZXN0cyBmYWlsZWQhIgp9AQlIAwAACUkDAAAGSgMAAApwZXN0ZXIucHMxBksDAABpL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9wZXN0ZXIucHMxCQYAAAAJTQMAAAlOAwAAAT4CAAAOAAAABk8DAACEByMgRGVzY3JpcHRpb24KClRoaXMgaXMgdGhlIGZvbGRlciwgd2hlcmUgYWxsIHRoZSB0ZXN0cyBnby4KClRob3NlIGFyZSBzdWJkaXZpZGVkIGluIHR3byBjYXRlZ29yaWVzOgoKIC0gR2VuZXJhbAogLSBGdW5jdGlvbgoKIyMgR2VuZXJhbCBUZXN0cwoKR2VuZXJhbCB0ZXN0cyBhcmUgZnVuY3Rpb24gZ2VuZXJpYyBhbmQgdGVzdCBmb3IgZ2VuZXJhbCBwb2xpY2llcy4KClRoZXNlIHRlc3Qgc2NhbiBhbnN3ZXIgcXVlc3Rpb25zIHN1Y2ggYXM6CgogLSBJcyBteSBtb2R1bGUgZm9sbG93aW5nIG15IHN0eWxlIGd1aWRlcz8KIC0gRG9lcyBhbnkgb2YgbXkgc2NyaXB0cyBoYXZlIGEgc3ludGF4IGVycm9yPwogLSBEbyBteSBzY3JpcHRzIHVzZSBjb21tYW5kcyBJIGRvIG5vdCB3YW50IHRoZW0gdG8gdXNlPwogLSBEbyBteSBjb21tYW5kcyBmb2xsb3cgYmVzdCBwcmFjdGljZXM/CiAtIERvIG15IGNvbW1hbmRzIGhhdmUgcHJvcGVyIGhlbHA/CgpCYXNpY2FsbHksIHRoZXNlIGFsbG93IGEgZ2VuZXJhbCBtb2R1bGUgaGVhbHRoIGNoZWNrLgoKVGhlc2UgdGVzdHMgYXJlIGFscmVhZHkgcHJvdmlkZWQgYXMgcGFydCBvZiB0aGUgdGVtcGxhdGUuCgojIyBGdW5jdGlvbiBUZXN0cwoKQSBoZWFsdGh5IG1vZHVsZSBzaG91bGQgcHJvdmlkZSB1bml0IGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgdGhlIGNvbW1hbmRzICYgY29tcG9uZW50cyBpdCBzaGlwcy4KT25seSB0aGVuIGNhbiBiZSBndWFyYW50ZWVkLCB0aGF0IHRoZXkgd2lsbCBhY3R1YWxseSBwZXJmb3JtIGFzIHByb21pc2VkLgoKSG93ZXZlciwgYXMgZWFjaCBzdWNoIHRlc3QgbXVzdCBiZSBzcGVjaWZpYyB0byB0aGUgZnVuY3Rpb24gaXQgdGVzdHMsIHRoZXJlIGNhbm5vdCBiZSBtdWNoIGluIHRoZSB3YXkgb2YgdGVtcGxhdGVzLgEJUAMAAAlRAwAABlIDAAAJcmVhZG1lLm1kBlMDAABoL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9yZWFkbWUubWQJBgAAAAlVAwAACVYDAAABPwIAAA4AAAAGVwMAAIILIyBYTUwKClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSBwcm9qZWN0IFhNTCBmaWxlcyBnbywgbm90YWJseToKCiAtIEZvcm1hdCBYTUwKIC0gVHlwZSBFeHRlbnNpb24gWE1MCgpFeHRlcm5hbCBoZWxwIGZpbGVzIHNob3VsZCBfbm90XyBiZSBwbGFjZWQgaW4gdGhpcyBmb2xkZXIhCgojIyBOb3RlcyBvbiBGaWxlcyBhbmQgTmFtaW5nCgpUaGVyZSBzaG91bGQgYmUgb25seSBvbmUgZm9ybWF0IGZpbGUgYW5kIG9uZSB0eXBlIGV4dGVuc2lvbiBmaWxlIHBlciBwcm9qZWN0LCBhcyBpbXBvcnRpbmcgdGhlbSBoYXMgYSBub3RhYmxlIGltcGFjdCBvbiBpbXBvcnQgdGltZXMuCgogLSBUaGUgRm9ybWF0IFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LkZvcm1hdC5wczF4bWxgCiAtIFRoZSBUeXBlIEV4dGVuc2lvbiBYTUwgc2hvdWxkIGJlIG5hbWVkIGDDvm5hbWXDvi5UeXBlcy5wczF4bWxgCgojIyBUb29scwoKIyMjIE5ldy1QU01ERm9ybWF0VGFibGVEZWZpbml0aW9uCgpUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhbiBpbnB1dCBvYmplY3QgYW5kIGdlbmVyYXRlIGZvcm1hdCB4bWwgZm9yIGFuIGF1dG8tc2l6ZWQgdGFibGUuCgpJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBmb3JtYXRzLgoKIyMjIEdldC1QU0ZUeXBlU2VyaWFsaXphdGlvbkRhdGEKCmBgYApDIyBXYXJuaW5nIQpUaGlzIHNlY3Rpb24gaXMgb25seSBpbnRlcmVzdCBpZiB5b3UncmUgdXNpbmcgQyMgdG9nZXRoZXIgd2l0aCBQb3dlclNoZWxsLgpgYGAKClRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHR5cGUgZXh0ZW5zaW9uIFhNTCB0aGF0IGFsbG93cyBQb3dlclNoZWxsIHRvIGNvbnZlcnQgdHlwZXMgd3JpdHRlbiBpbiBDIyB0byBiZSB3cml0dGVuIHRvIGZpbGUgYW5kIHJlc3RvcmVkIGZyb20gaXQgd2l0aG91dCBiZWluZyAnRGVzZXJpYWxpemVkJy4gQWxzbyB3b3JrcyBmb3Igam9icyBvciByZW1vdGluZywgaWYgYm90aCBzaWRlcyBoYXZlIHRoZSBgUFNGcmFtZXdvcmtgIG1vZHVsZSBhbmQgdHlwZSBleHRlbnNpb24gbG9hZGVkLgoKSW4gb3JkZXIgZm9yIGEgY2xhc3MgdG8gYmUgZWxpZ2libGUgZm9yIHRoaXMsIGl0IG5lZWRzIHRvIGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBydWxlczoKCiAtIEhhdmUgdGhlIGBbU2VyaWFsaXphYmxlXWAgYXR0cmlidXRlCiAtIEJlIHB1YmxpYwogLSBIYXZlIGFuIGVtcHR5IGNvbnN0cnVjdG9yCiAtIEFsbG93IGFsbCBwdWJsaWMgcHJvcGVydGllcy9maWVsZHMgdG8gYmUgc2V0IChldmVuIGlmIHNldHRpbmcgaXQgZG9lc24ndCBkbyBhbnl0aGluZykgd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24uCgpgYGAKbm9uLXB1YmxpYyBwcm9wZXJ0aWVzIGFuZCBmaWVsZHMgd2lsbCBiZSBsb3N0IGluIHRoaXMgcHJvY2VzcyEKYGBgAQlYAwAACVkDAAAGWgMAAAlyZWFkbWUubWQGWwMAAGYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3htbC9yZWFkbWUubWQJBgAAAAldAwAACV4DAAABQAIAAA4AAAAGXwMAAMoFPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTE2Ij8+CjxDb25maWd1cmF0aW9uPgoJPFZpZXdEZWZpbml0aW9ucz4KCQk8IS0tIEZvby5CYXIgLS0+CgkJPFZpZXc+CgkJCTxOYW1lPkZvby5CYXI8L05hbWU+CgkJCTxWaWV3U2VsZWN0ZWRCeT4KCQkJCTxUeXBlTmFtZT5Gb28uQmFyPC9UeXBlTmFtZT4KCQkJPC9WaWV3U2VsZWN0ZWRCeT4KCQkJPFRhYmxlQ29udHJvbD4KCQkJCTxBdXRvU2l6ZS8+CgkJCQk8VGFibGVIZWFkZXJzPgoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+CgkJCQkJPFRhYmxlQ29sdW1uSGVhZGVyLz4KCQkJCTwvVGFibGVIZWFkZXJzPgoJCQkJPFRhYmxlUm93RW50cmllcz4KCQkJCQk8VGFibGVSb3dFbnRyeT4KCQkJCQkJPFRhYmxlQ29sdW1uSXRlbXM+CgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPgoJCQkJCQkJCTxQcm9wZXJ0eU5hbWU+Rm9vPC9Qcm9wZXJ0eU5hbWU+CgkJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbT4KCQkJCQkJCTxUYWJsZUNvbHVtbkl0ZW0+CgkJCQkJCQkJPFByb3BlcnR5TmFtZT5CYXI8L1Byb3BlcnR5TmFtZT4KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPgoJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbXM+CgkJCQkJPC9UYWJsZVJvd0VudHJ5PgoJCQkJPC9UYWJsZVJvd0VudHJpZXM+CgkJCTwvVGFibGVDb250cm9sPgoJCTwvVmlldz4KCTwvVmlld0RlZmluaXRpb25zPgo8L0NvbmZpZ3VyYXRpb24+AQlgAwAACWEDAAAGYgMAABbDvm5hbWXDvi5Gb3JtYXQucHMxeG1sBmMDAABzL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi94bWwvw75uYW1lw74uRm9ybWF0LnBzMXhtbAkGAAAACWUDAAAJZgMAAAFBAgAADgAAAAZnAwAAvAc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pgo8VHlwZXM+CiAgPCEtLSBGb28uQmFyIC0tPgogIDxUeXBlPgogICAgPE5hbWU+RGVzZXJpYWxpemVkLkZvby5CYXI8L05hbWU+CiAgICA8TWVtYmVycz4KICAgICAgPE1lbWJlclNldD4KICAgICAgICA8TmFtZT5QU1N0YW5kYXJkTWVtYmVyczwvTmFtZT4KICAgICAgICA8TWVtYmVycz4KICAgICAgICAgIDxOb3RlUHJvcGVydHk+CiAgICAgICAgICAgIDxOYW1lPgogICAgICAgICAgICAgIFRhcmdldFR5cGVGb3JEZXNlcmlhbGl6YXRpb24KICAgICAgICAgICAgPC9OYW1lPgogICAgICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgICAgRm9vLkJhcgogICAgICAgICAgICA8L1ZhbHVlPgogICAgICAgICAgPC9Ob3RlUHJvcGVydHk+CiAgICAgICAgPC9NZW1iZXJzPgogICAgICA8L01lbWJlclNldD4KICAgIDwvTWVtYmVycz4KICA8L1R5cGU+CiAgPFR5cGU+CiAgICA8TmFtZT5Gb28uQmFyPC9OYW1lPgogICAgPE1lbWJlcnM+CiAgICAgIDxDb2RlUHJvcGVydHkgSXNIaWRkZW49InRydWUiPgogICAgICAgIDxOYW1lPlNlcmlhbGl6YXRpb25EYXRhPC9OYW1lPgogICAgICAgIDxHZXRDb2RlUmVmZXJlbmNlPgogICAgICAgICAgPFR5cGVOYW1lPlBTRnJhbWV3b3JrLlNlcmlhbGl6YXRpb24uU2VyaWFsaXphdGlvblR5cGVDb252ZXJ0ZXI8L1R5cGVOYW1lPgogICAgICAgICAgPE1ldGhvZE5hbWU+R2V0U2VyaWFsaXphdGlvbkRhdGE8L01ldGhvZE5hbWU+CiAgICAgICAgPC9HZXRDb2RlUmVmZXJlbmNlPgogICAgICA8L0NvZGVQcm9wZXJ0eT4KICAgIDwvTWVtYmVycz4KICAgIDxUeXBlQ29udmVydGVyPgogICAgICA8VHlwZU5hbWU+UFNGcmFtZXdvcmsuU2VyaWFsaXphdGlvbi5TZXJpYWxpemF0aW9uVHlwZUNvbnZlcnRlcjwvVHlwZU5hbWU+CiAgICA8L1R5cGVDb252ZXJ0ZXI+CiAgPC9UeXBlPgo8L1R5cGVzPgEJaAMAAAlpAwAABmoDAAAVw75uYW1lw74uVHlwZXMucHMxeG1sBmsDAAByL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi94bWwvw75uYW1lw74uVHlwZXMucHMxeG1sCQYAAAAJbQMAAAluAwAAAU4CAAAOAAAABm8DAADPASMgRGVzY3JpcHRpb24KClRoaXMgaXMgd2hlcmUgdGhlIGZ1bmN0aW9uIHRlc3RzIGdvLgoKTWFrZSBzdXJlIHRvIHB1dCB0aGVtIGluIGZvbGRlcnMgcmVmbGVjdGluZyB0aGUgYWN0dWFsIG1vZHVsZSBzdHJ1Y3R1cmUuCgpJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBpbnRlcm5hbCBhbmQgcHVibGljIGZ1bmN0aW9ucyBoZXJlLgEJcAMAAAlxAwAABnIDAAAJcmVhZG1lLm1kBnMDAABOL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9mdW5jdGlvbnMvcmVhZG1lLm1kCQYAAAAJdQMAAAl2AwAAAU8CAAAOAAAABncDAADeBSMgTGlzdCBvZiBmb3JiaWRkZW4gY29tbWFuZHMKJGdsb2JhbDpCYW5uZWRDb21tYW5kcyA9IEAoCgknV3JpdGUtSG9zdCcKCSdXcml0ZS1WZXJib3NlJwoJJ1dyaXRlLVdhcm5pbmcnCgknV3JpdGUtRXJyb3InCgknV3JpdGUtT3V0cHV0JwoJJ1dyaXRlLUluZm9ybWF0aW9uJwoJJ1dyaXRlLURlYnVnJwoJCgkjIFVzZSBDSU0gaW5zdGVhZCB3aGVyZSBwb3NzaWJsZQoJJ0dldC1XbWlPYmplY3QnCgknSW52b2tlLVdtaU1ldGhvZCcKCSdSZWdpc3Rlci1XbWlFdmVudCcKCSdSZW1vdmUtV21pT2JqZWN0JwoJJ1NldC1XbWlJbnN0YW5jZScKCgkjIFVzZSBHZXQtV2luRXZlbnQgaW5zdGVhZAoJJ0dldC1FdmVudExvZycKKQoKPCMKCUNvbnRhaW5zIGxpc3Qgb2YgZXhjZXB0aW9ucyBmb3IgYmFubmVkIGNtZGxldHMuCglJbnNlcnQgdGhlIGZpbGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBtYXkgY29udGFpbiB0aGVtLgoJCglFeGFtcGxlOgoJIldyaXRlLUhvc3QiICA9IEAoJ1dyaXRlLVBTRkhvc3RDb2xvci5wczEnLCdXcml0ZS1QU0ZNZXNzYWdlLnBzMScpCiM+CiRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmQgPSBAewoJIldyaXRlLUhvc3QiICA9IEAoKQoJIldyaXRlLVZlcmJvc2UiID0gQCgpCgkiV3JpdGUtV2FybmluZyIgPSBAKCkKCSJXcml0ZS1FcnJvciIgID0gQCgpCgkiV3JpdGUtT3V0cHV0IiA9IEAoKQoJIldyaXRlLUluZm9ybWF0aW9uIiA9IEAoKQoJIldyaXRlLURlYnVnIiA9IEAoKQp9AQl4AwAACXkDAAAGegMAABxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxBnsDAABfL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsL0ZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEJBgAAAAl9AwAACX4DAAABUAIAAA4AAAAGfwMAAIIYJG1vZHVsZVJvb3QgPSAoUmVzb2x2ZS1QYXRoICIkZ2xvYmFsOnRlc3Ryb290XC4uIikuUGF0aAoKLiAiJGdsb2JhbDp0ZXN0cm9vdFxnZW5lcmFsXEZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEiCgpEZXNjcmliZSAiVmVyaWZ5aW5nIGludGVncml0eSBvZiBtb2R1bGUgZmlsZXMiIHsKCUJlZm9yZUFsbCB7CgkJZnVuY3Rpb24gR2V0LUZpbGVFbmNvZGluZwoJCXsKCQk8IwoJCQkuU1lOT1BTSVMKCQkJCVRlc3RzIGEgZmlsZSBmb3IgZW5jb2RpbmcuCgkJCQoJCQkuREVTQ1JJUFRJT04KCQkJCVRlc3RzIGEgZmlsZSBmb3IgZW5jb2RpbmcuCgkJCQoJCQkuUEFSQU1FVEVSIFBhdGgKCQkJCVRoZSBmaWxlIHRvIHRlc3QKCQkjPgoJCQlbQ21kbGV0QmluZGluZygpXQoJCQlQYXJhbSAoCgkJCQlbUGFyYW1ldGVyKE1hbmRhdG9yeSA9ICRUcnVlLCBWYWx1ZUZyb21QaXBlbGluZUJ5UHJvcGVydHlOYW1lID0gJFRydWUpXQoJCQkJW0FsaWFzKCdGdWxsTmFtZScpXQoJCQkJW3N0cmluZ10KCQkJCSRQYXRoCgkJCSkKCQkJCgkJCWlmICgkUFNWZXJzaW9uVGFibGUuUFNWZXJzaW9uLk1ham9yIC1sdCA2KQoJCQl7CgkJCQlbYnl0ZVtdXSRieXRlID0gZ2V0LWNvbnRlbnQgLUVuY29kaW5nIGJ5dGUgLVJlYWRDb3VudCA0IC1Ub3RhbENvdW50IDQgLVBhdGggJFBhdGgKCQkJfQoJCQllbHNlCgkJCXsKCQkJCVtieXRlW11dJGJ5dGUgPSBHZXQtQ29udGVudCAtQXNCeXRlU3RyZWFtIC1SZWFkQ291bnQgNCAtVG90YWxDb3VudCA0IC1QYXRoICRQYXRoCgkJCX0KCQkJCgkJCWlmICgkYnl0ZVswXSAtZXEgMHhlZiAtYW5kICRieXRlWzFdIC1lcSAweGJiIC1hbmQgJGJ5dGVbMl0gLWVxIDB4YmYpIHsgJ1VURjggQk9NJyB9CgkJCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVsxXSAtZXEgMHhmZikgeyAnVW5pY29kZScgfQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAwIC1hbmQgJGJ5dGVbMV0gLWVxIDAgLWFuZCAkYnl0ZVsyXSAtZXEgMHhmZSAtYW5kICRieXRlWzNdIC1lcSAweGZmKSB7ICdVVEYzMicgfQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAweDJiIC1hbmQgJGJ5dGVbMV0gLWVxIDB4MmYgLWFuZCAkYnl0ZVsyXSAtZXEgMHg3NikgeyAnVVRGNycgfQoJCQllbHNlIHsgJ1Vua25vd24nIH0KCQl9Cgl9CgoJQ29udGV4dCAiVmFsaWRhdGluZyBQUzEgU2NyaXB0IGZpbGVzIiB7CgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIgfCBXaGVyZS1PYmplY3QgRnVsbE5hbWUgLU5vdExpa2UgIiRtb2R1bGVSb290XHRlc3RzXCoiCgkJCgkJZm9yZWFjaCAoJGZpbGUgaW4gJGFsbEZpbGVzKQoJCXsKCQkJJG5hbWUgPSAkZmlsZS5GdWxsTmFtZS5SZXBsYWNlKCIkbW9kdWxlUm9vdFwiLCAnJykKCQkJCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIFVURjggZW5jb2Rpbmcgd2l0aCBCeXRlIE9yZGVyIE1hcmsiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gewoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjggQk9NJwoJCQl9CgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyB0cmFpbGluZyBzcGFjZSIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7CgkJCQkoJGZpbGUgfCBTZWxlY3QtU3RyaW5nICJccyQiIHwgV2hlcmUtT2JqZWN0IHsgJF8uTGluZS5UcmltKCkuTGVuZ3RoIC1ndCAwfSkuTGluZU51bWJlciB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCQl9CgkJCQoJCQkkdG9rZW5zID0gJG51bGwKCQkJJHBhcnNlRXJyb3JzID0gJG51bGwKCQkJJGFzdCA9IFtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLkxhbmd1YWdlLlBhcnNlcl06OlBhcnNlRmlsZSgkZmlsZS5GdWxsTmFtZSwgW3JlZl0kdG9rZW5zLCBbcmVmXSRwYXJzZUVycm9ycykKCQkJCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHN5bnRheCBlcnJvcnMiIC1UZXN0Q2FzZXMgQHsgcGFyc2VFcnJvcnMgPSAkcGFyc2VFcnJvcnMgfSB7CgkJCQkkcGFyc2VFcnJvcnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQkJfQoJCQkKCQkJZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGdsb2JhbDpCYW5uZWRDb21tYW5kcykKCQkJewoJCQkJaWYgKCRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmRbIiRjb21tYW5kIl0gLW5vdGNvbnRhaW5zICRmaWxlLk5hbWUpCgkJCQl7CgkJCQkJSXQgIlskbmFtZV0gU2hvdWxkIG5vdCB1c2UgJGNvbW1hbmQiIC1UZXN0Q2FzZXMgQHsgdG9rZW5zID0gJHRva2VuczsgY29tbWFuZCA9ICRjb21tYW5kIH0gewoJCQkJCQkkdG9rZW5zIHwgV2hlcmUtT2JqZWN0IFRleHQgLUVRICRjb21tYW5kIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoJCglDb250ZXh0ICJWYWxpZGF0aW5nIGhlbHAudHh0IGhlbHAgZmlsZXMiIHsKCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIiouaGVscC50eHQiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIgoJCQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykKCQl7CgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpCgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsKCQkJCUdldC1GaWxlRW5jb2RpbmcgLVBhdGggJGZpbGUuRnVsbE5hbWUgfCBTaG91bGQgLUJlICdVVEY4IEJPTScKCQkJfQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gewoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMCB9IHwgTWVhc3VyZS1PYmplY3QpLkNvdW50IHwgU2hvdWxkIC1CZSAwCgkJCX0KCQl9Cgl9Cn0BCYADAAAJgQMAAAaCAwAAF0ZpbGVJbnRlZ3JpdHkuVGVzdHMucHMxBoMDAABaL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsL0ZpbGVJbnRlZ3JpdHkuVGVzdHMucHMxCQYAAAAJhQMAAAmGAwAAAVECAAAOAAAABocDAACDBSMgTGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaWdub3JlZAokZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zID0gQCgKICAgIAopCgo8IwogIExpc3Qgb2YgYXJyYXllZCBlbnVtZXJhdGlvbnMuIFRoZXNlIG5lZWQgdG8gYmUgdHJlYXRlZCBkaWZmZXJlbnRseS4gQWRkIGZ1bGwgbmFtZS4KICBFeGFtcGxlOgoKICAiU3FsY29sbGFib3JhdGl2ZS5EYmF0b29scy5Db25uZWN0aW9uLk1hbmFnZW1lbnRDb25uZWN0aW9uVHlwZVtdIgojPgokZ2xvYmFsOkhlbHBUZXN0RW51bWVyYXRlZEFycmF5cyA9IEAoCgkKKQoKPCMKICBTb21lIHR5cGVzIG9uIHBhcmFtZXRlcnMganVzdCBmYWlsIHRoZWlyIHZhbGlkYXRpb24gbm8gbWF0dGVyIHdoYXQuCiAgRm9yIHRob3NlIGl0IGJlY29tZXMgcG9zc2libGUgdG8gc2tpcCB0aGVtLCBieSBhZGRpbmcgdGhlbSB0byB0aGlzIGhhc2h0YWJsZS4KICBBZGQgYnkgZm9sbG93aW5nIHRoaXMgY29udmVudGlvbjogPGNvbW1hbmQgbmFtZT4gPSBAKDxsaXN0IG9mIHBhcmFtZXRlciBuYW1lcz4pCiAgRXhhbXBsZToKCiAgIkdldC1EYmFDbU9iamVjdCIgICAgICAgPSBAKCJEb05vdFVzZSIpCiM+CiRnbG9iYWw6SGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZSA9IEB7CiAgICAKfQoBCYgDAAAJiQMAAAaKAwAAE0hlbHAuRXhjZXB0aW9ucy5wczEGiwMAAFYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL2dlbmVyYWwvSGVscC5FeGNlcHRpb25zLnBzMQkGAAAACY0DAAAJjgMAAAFSAgAADgAAAAaPAwAAvDM8IwogICAgLk5PVEVTCiAgICAgICAgVGhlIG9yaWdpbmFsIHRlc3QgdGhpcyBpcyBiYXNlZCB1cG9uIHdhcyB3cml0dGVuIGJ5IEp1bmUgQmxlbmRlci4KCQlBZnRlciBzZXZlcmFsIHJvdW5kcyBvZiBtb2RpZmljYXRpb25zIGl0IHN0YW5kcyBub3cgYXMgaXQgaXMsIGJ1dCB0aGUgaG9ub3IgcmVtYWlucyBoZXJzLgoKCQlUaGFuayB5b3UgSnVuZSwgZm9yIGFsbCB5b3UgaGF2ZSBkb25lIQoKICAgIC5ERVNDUklQVElPTgoJCVRoaXMgdGVzdCBldmFsdWF0ZXMgdGhlIGhlbHAgZm9yIGFsbCBjb21tYW5kcyBpbiBhIG1vZHVsZS4KCgkuUEFSQU1FVEVSIFNraXBUZXN0CgkJRGlzYWJsZXMgdGhpcyB0ZXN0LgoJCgkuUEFSQU1FVEVSIENvbW1hbmRQYXRoCgkJTGlzdCBvZiBwYXRocyB1bmRlciB3aGljaCB0aGUgc2NyaXB0IGZpbGVzIGFyZSBzdG9yZWQuCgkJVGhpcyB0ZXN0IGFzc3VtZXMgdGhhdCBhbGwgZnVuY3Rpb25zIGhhdmUgdGhlaXIgb3duIGZpbGUgdGhhdCBpcyBuYW1lZCBhZnRlciB0aGVtc2VsdmVzLgoJCVRoZXNlIHBhdGhzIGFyZSB1c2VkIHRvIHNlYXJjaCBmb3IgY29tbWFuZHMgdGhhdCBzaG91bGQgZXhpc3QgYW5kIGJlIHRlc3RlZC4KCQlXaWxsIHNlYXJjaCByZWN1cnNpdmVseSBhbmQgYWNjZXB0cyB3aWxkY2FyZHMsIG1ha2Ugc3VyZSBvbmx5IGZ1bmN0aW9ucyBhcmUgZm91bmQKCgkuUEFSQU1FVEVSIE1vZHVsZU5hbWUKCQlOYW1lIG9mIHRoZSBtb2R1bGUgdG8gYmUgdGVzdGVkLgoJCVRoZSBtb2R1bGUgbXVzdCBhbHJlYWR5IGJlIGltcG9ydGVkCgoJLlBBUkFNRVRFUiBFeGNlcHRpb25zRmlsZQoJCUZpbGUgaW4gd2hpY2ggZXhjZXB0aW9ucyBhbmQgYWRqdXN0bWVudHMgYXJlIGNvbmZpZ3VyZWQuCgkJSW4gaXQgdGhlcmUgc2hvdWxkIGJlIHR3byBhcnJheXMgYW5kIGEgaGFzaHRhYmxlIGRlZmluZWQ6CgkJCSRnbG9iYWw6RnVuY3Rpb25IZWxwVGVzdEV4Y2VwdGlvbnMKCQkJJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMKCQkJJGdsb2JhbDpIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlCgkJVGhlc2UgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhlIHRlc3RzIHNsaWdodGx5IGluIGNhc2VzIG9mIG5lZWQuCgkJU2VlIHRoZSBleGFtcGxlIGZpbGUgZm9yIGV4cGxhbmF0aW9ucyBvbiBlYWNoIG9mIHRoZXNlIHVzYWdlIGFuZCBlZmZlY3QuCiM+CltDbWRsZXRCaW5kaW5nKCldClBhcmFtICgKCVtzd2l0Y2hdCgkkU2tpcFRlc3QsCgkKCVtzdHJpbmdbXV0KCSRDb21tYW5kUGF0aCA9IEAoIiRnbG9iYWw6dGVzdHJvb3RcLi5cZnVuY3Rpb25zIiwgIiRnbG9iYWw6dGVzdHJvb3RcLi5caW50ZXJuYWxcZnVuY3Rpb25zIiksCgkKCVtzdHJpbmddCgkkTW9kdWxlTmFtZSA9ICLDvm5hbWXDviIsCgkKCVtzdHJpbmddCgkkRXhjZXB0aW9uc0ZpbGUgPSAiJGdsb2JhbDp0ZXN0cm9vdFxnZW5lcmFsXEhlbHAuRXhjZXB0aW9ucy5wczEiCikKaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQouICRFeGNlcHRpb25zRmlsZQoKJGluY2x1ZGVkTmFtZXMgPSAoR2V0LUNoaWxkSXRlbSAkQ29tbWFuZFBhdGggLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiKS5CYXNlTmFtZQokY29tbWFuZFR5cGVzID0gQCgnQ21kbGV0JywgJ0Z1bmN0aW9uJykKaWYgKCRQU1ZlcnNpb25UYWJsZS5QU0VkaXRpb24gLWVxICdEZXNrdG9wJyApIHsgJGNvbW1hbmRUeXBlcyArPSAnV29ya2Zsb3cnIH0KJGNvbW1hbmRzID0gR2V0LUNvbW1hbmQgLU1vZHVsZSAoR2V0LU1vZHVsZSAkTW9kdWxlTmFtZSkgLUNvbW1hbmRUeXBlICRjb21tYW5kVHlwZXMgfCBXaGVyZS1PYmplY3QgTmFtZSAtSW4gJGluY2x1ZGVkTmFtZXMKCiMjIFdoZW4gdGVzdGluZyBoZWxwLCByZW1lbWJlciB0aGF0IGhlbHAgaXMgY2FjaGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBzZXNzaW9uLgojIyBUbyB0ZXN0LCByZXN0YXJ0IHNlc3Npb24uCgoKZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGNvbW1hbmRzKSB7CiAgICAkY29tbWFuZE5hbWUgPSAkY29tbWFuZC5OYW1lCiAgICAKICAgICMgU2tpcCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG9uIHRoZSBleGNsdXNpb25zIGxpc3QKICAgIGlmICgkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zIC1jb250YWlucyAkY29tbWFuZE5hbWUpIHsgY29udGludWUgfQogICAgCiAgICAjIFRoZSBtb2R1bGUtcXVhbGlmaWVkIGNvbW1hbmQgZmFpbHMgb24gTWljcm9zb2Z0LlBvd2VyU2hlbGwuQXJjaGl2ZSBjbWRsZXRzCiAgICAkSGVscCA9IEdldC1IZWxwICRjb21tYW5kTmFtZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQoJCglEZXNjcmliZSAiVGVzdCBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsKICAgICAgICAKCQkjIElmIGhlbHAgaXMgbm90IGZvdW5kLCBzeW5vcHNpcyBpbiBhdXRvLWdlbmVyYXRlZCBoZWxwIGlzIHRoZSBzeW50YXggZGlhZ3JhbQoJCUl0ICJzaG91bGQgbm90IGJlIGF1dG8tZ2VuZXJhdGVkIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsKCQkJJEhlbHAuU3lub3BzaXMgfCBTaG91bGQgLU5vdCAtQmVMaWtlICcqYFtgPENvbW1vblBhcmFtZXRlcnNgPmBdKicKCQl9CiAgICAgICAgCgkJIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgZnVuY3Rpb24KCQlJdCAiZ2V0cyBkZXNjcmlwdGlvbiBmb3IgJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsKCQkJJEhlbHAuRGVzY3JpcHRpb24gfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCX0KICAgICAgICAKCQkjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZQoJCUl0ICJnZXRzIGV4YW1wbGUgY29kZSBmcm9tICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7CgkJCSgkSGVscC5FeGFtcGxlcy5FeGFtcGxlIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuQ29kZSB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJfQoJCgkJIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUgZGVzY3JpcHRpb24KCQlJdCAiZ2V0cyBleGFtcGxlIGhlbHAgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gewoJCQkoJEhlbHAuRXhhbXBsZXMuRXhhbXBsZS5SZW1hcmtzIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJfQogICAgICAgIAogICAgICAgIENvbnRleHQgIlRlc3QgcGFyYW1ldGVyIGhlbHAgZm9yICRjb21tYW5kTmFtZSIgewogICAgICAgICAgICAKICAgICAgICAgICAgJGNvbW1vbiA9ICdEZWJ1ZycsICdFcnJvckFjdGlvbicsICdFcnJvclZhcmlhYmxlJywgJ0luZm9ybWF0aW9uQWN0aW9uJywgJ0luZm9ybWF0aW9uVmFyaWFibGUnLCAnT3V0QnVmZmVyJywgJ091dFZhcmlhYmxlJywgJ1BpcGVsaW5lVmFyaWFibGUnLCAnVmVyYm9zZScsICdXYXJuaW5nQWN0aW9uJywgJ1dhcm5pbmdWYXJpYWJsZScKICAgICAgICAgICAgCiAgICAgICAgICAgICRwYXJhbWV0ZXJzID0gJGNvbW1hbmQuUGFyYW1ldGVyU2V0cy5QYXJhbWV0ZXJzIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IE5hbWUgLVVuaXF1ZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1ub3RpbiAkY29tbW9uCiAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lcyA9ICRwYXJhbWV0ZXJzLk5hbWUKICAgICAgICAgICAgJEhlbHBQYXJhbWV0ZXJOYW1lcyA9ICRIZWxwLlBhcmFtZXRlcnMuUGFyYW1ldGVyLk5hbWUgfCBTb3J0LU9iamVjdCAtVW5pcXVlCiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbWV0ZXIgaW4gJHBhcmFtZXRlcnMpIHsKICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lID0gJHBhcmFtZXRlci5OYW1lCiAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscCA9ICRIZWxwLnBhcmFtZXRlcnMucGFyYW1ldGVyIHwgV2hlcmUtT2JqZWN0IE5hbWUgLUVRICRwYXJhbWV0ZXJOYW1lCgkJCQoJCQkJIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgcGFyYW1ldGVyCgkJCQlJdCAiZ2V0cyBoZWxwIGZvciBwYXJhbWV0ZXI6ICRwYXJhbWV0ZXJOYW1lIDogaW4gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscCB9IHsKCQkJCQkkcGFyYW1ldGVySGVscC5EZXNjcmlwdGlvbi5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkKCQkJCX0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJGNvZGVNYW5kYXRvcnkgPSAkcGFyYW1ldGVyLklzTWFuZGF0b3J5LnRvU3RyaW5nKCkKCQkJCUl0ICJoZWxwIGZvciAkcGFyYW1ldGVyTmFtZSBwYXJhbWV0ZXIgaW4gJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IE1hbmRhdG9yeSB2YWx1ZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IGNvZGVNYW5kYXRvcnkgPSAkY29kZU1hbmRhdG9yeSB9IHsKCQkJCQkkcGFyYW1ldGVySGVscC5SZXF1aXJlZCB8IFNob3VsZCAtQmUgJGNvZGVNYW5kYXRvcnkKCQkJCX0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCRIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlWyRjb21tYW5kTmFtZV0gLWNvbnRhaW5zICRwYXJhbWV0ZXJOYW1lKSB7IGNvbnRpbnVlIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJGNvZGVUeXBlID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLk5hbWUKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5Jc0VudW0pIHsKICAgICAgICAgICAgICAgICAgICAjIEVudW1lcmF0aW9ucyBvZnRlbiBoYXZlIGlzc3VlcyB3aXRoIHRoZSB0eXBlbmFtZSBub3QgYmVpbmcgcmVsaWFibHkgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgICAgJG5hbWVzID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlOjpHZXROYW1lcygkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUpCgkJCQkJCSMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscDsgbmFtZXMgPSAkbmFtZXMgfSB7CgkJCQkJCSRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcwoJCQkJCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2VpZiAoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkZ1bGxOYW1lIC1pbiAkSGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzKSB7CiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9IFtFbnVtXTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkRlY2xhcmVkTWVtYmVyc1swXS5SZXR1cm5UeXBlKQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscDsgbmFtZXMgPSAkbmFtZXMgfSB7CgkJCQkJCSRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcwoJCQkJCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMgVG8gYXZvaWQgY2FsbGluZyBUcmltIG1ldGhvZCBvbiBhIG51bGwgb2JqZWN0LgogICAgICAgICAgICAgICAgICAgICRoZWxwVHlwZSA9IGlmICgkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZSkgeyAkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZS5UcmltKCkgfQoJCQkJCSMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IGhlbHBUeXBlID0gJGhlbHBUeXBlOyBjb2RlVHlwZSA9ICRjb2RlVHlwZSB9IHsKCQkJCQkJJGhlbHBUeXBlIHwgU2hvdWxkIC1iZSAkY29kZVR5cGUKCQkJCQl9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yZWFjaCAoJGhlbHBQYXJtIGluICRIZWxwUGFyYW1ldGVyTmFtZXMpIHsKCQkJCSMgU2hvdWxkbid0IGZpbmQgZXh0cmEgcGFyYW1ldGVycyBpbiBoZWxwLgoJCQkJSXQgImZpbmRzIGhlbHAgcGFyYW1ldGVyIGluIGNvZGU6ICRoZWxwUGFybSIgLVRlc3RDYXNlcyBAeyBoZWxwUGFybSA9ICRoZWxwUGFybTsgcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVyTmFtZXMgfSB7CgkJCQkJJGhlbHBQYXJtIC1pbiAkcGFyYW1ldGVyTmFtZXMgfCBTaG91bGQgLUJlICR0cnVlCgkJCQl9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0BCZADAAAJkQMAAAaSAwAADkhlbHAuVGVzdHMucHMxBpMDAABRL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsL0hlbHAuVGVzdHMucHMxCQYAAAAJlQMAAAmWAwAAAVMCAAAOAAAABpcDAACOFURlc2NyaWJlICJWYWxpZGF0aW5nIHRoZSBtb2R1bGUgbWFuaWZlc3QiIHsKCSRtb2R1bGVSb290ID0gKFJlc29sdmUtUGF0aCAiJGdsb2JhbDp0ZXN0cm9vdFwuLiIpLlBhdGgKCSRtYW5pZmVzdCA9ICgoR2V0LUNvbnRlbnQgIiRtb2R1bGVSb290XMO+bmFtZcO+LnBzZDEiKSAtam9pbiAiYG4iKSB8IEludm9rZS1FeHByZXNzaW9uCglDb250ZXh0ICJCYXNpYyByZXNvdXJjZXMgdmFsaWRhdGlvbiIgewoJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiCgkJSXQgIkV4cG9ydHMgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgcHVibGljIGZvbGRlciIgLVRlc3RDYXNlcyBAeyBmaWxlcyA9ICRmaWxlczsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7CgkJCQoJCQkkZnVuY3Rpb25zID0gKENvbXBhcmUtT2JqZWN0IC1SZWZlcmVuY2VPYmplY3QgJGZpbGVzLkJhc2VOYW1lIC1EaWZmZXJlbmNlT2JqZWN0ICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFdoZXJlLU9iamVjdCBTaWRlSW5kaWNhdG9yIC1MaWtlICc8PScpLklucHV0T2JqZWN0CgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQl9CgkJSXQgIkV4cG9ydHMgbm8gZnVuY3Rpb24gdGhhdCBpc24ndCBhbHNvIHByZXNlbnQgaW4gdGhlIHB1YmxpYyBmb2xkZXIiIC1UZXN0Q2FzZXMgQHsgZmlsZXMgPSAkZmlsZXM7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gewoJCQkkZnVuY3Rpb25zID0gKENvbXBhcmUtT2JqZWN0IC1SZWZlcmVuY2VPYmplY3QgJGZpbGVzLkJhc2VOYW1lIC1EaWZmZXJlbmNlT2JqZWN0ICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFdoZXJlLU9iamVjdCBTaWRlSW5kaWNhdG9yIC1MaWtlICc9PicpLklucHV0T2JqZWN0CgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQl9CgkJCgkJSXQgIkV4cG9ydHMgbm9uZSBvZiBpdHMgaW50ZXJuYWwgZnVuY3Rpb25zIiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7CgkJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiCgkJCSRmaWxlcyB8IFdoZXJlLU9iamVjdCBCYXNlTmFtZSAtSW4gJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJfQoJfQoJCglDb250ZXh0ICJJbmRpdmlkdWFsIGZpbGUgdmFsaWRhdGlvbiIgewoJCUl0ICJUaGUgcm9vdCBtb2R1bGUgZmlsZSBleGlzdHMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsKCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkKCRtYW5pZmVzdC5Sb290TW9kdWxlKSIgfCBTaG91bGQgLUJlICR0cnVlCgkJfQoJCQoJCWZvcmVhY2ggKCRmb3JtYXQgaW4gJG1hbmlmZXN0LkZvcm1hdHNUb1Byb2Nlc3MpCgkJewoJCQlJdCAiVGhlIGZpbGUgJGZvcm1hdCBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBmb3JtYXQgPSAkZm9ybWF0IH0gewoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkZm9ybWF0IiB8IFNob3VsZCAtQmUgJHRydWUKCQkJfQoJCX0KCQkKCQlmb3JlYWNoICgkdHlwZSBpbiAkbWFuaWZlc3QuVHlwZXNUb1Byb2Nlc3MpCgkJewoJCQlJdCAiVGhlIGZpbGUgJHR5cGUgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgdHlwZSA9ICR0eXBlIH0gewoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkdHlwZSIgfCBTaG91bGQgLUJlICR0cnVlCgkJCX0KCQl9CgkJCgkJZm9yZWFjaCAoJGFzc2VtYmx5IGluICRtYW5pZmVzdC5SZXF1aXJlZEFzc2VtYmxpZXMpCgkJewogICAgICAgICAgICBpZiAoJGFzc2VtYmx5IC1saWtlICIqLmRsbCIpIHsKICAgICAgICAgICAgICAgIEl0ICJUaGUgZmlsZSAkYXNzZW1ibHkgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgYXNzZW1ibHkgPSAkYXNzZW1ibHkgfSB7CiAgICAgICAgICAgICAgICAgICAgVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkYXNzZW1ibHkiIHwgU2hvdWxkIC1CZSAkdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgSXQgIlRoZSBmaWxlICRhc3NlbWJseSBzaG91bGQgbG9hZCBmcm9tIHRoZSBHQUMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBhc3NlbWJseSA9ICRhc3NlbWJseSB9IHsKICAgICAgICAgICAgICAgICAgICB7IEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgJGFzc2VtYmx5IH0gfCBTaG91bGQgLU5vdCAtVGhyb3cKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCQkKCQlmb3JlYWNoICgkdGFnIGluICRtYW5pZmVzdC5Qcml2YXRlRGF0YS5QU0RhdGEuVGFncykKCQl7CgkJCUl0ICJUYWdzIHNob3VsZCBoYXZlIG5vIHNwYWNlcyBpbiBuYW1lIiAtVGVzdENhc2VzIEB7IHRhZyA9ICR0YWcgfSB7CgkJCQkkdGFnIC1tYXRjaCAiICIgfCBTaG91bGQgLUJlICRmYWxzZQoJCQl9CgkJfQoJfQp9AQmYAwAACZkDAAAGmgMAABJNYW5pZmVzdC5UZXN0cy5wczEGmwMAAFUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL2dlbmVyYWwvTWFuaWZlc3QuVGVzdHMucHMxCQYAAAAJnQMAAAmeAwAAAVQCAAAOAAAABp8DAADtCFtDbWRsZXRCaW5kaW5nKCldClBhcmFtICgKCVtzd2l0Y2hdCgkkU2tpcFRlc3QsCgkKCVtzdHJpbmdbXV0KCSRDb21tYW5kUGF0aCA9IEAoIiRnbG9iYWw6dGVzdHJvb3RcLi5cZnVuY3Rpb25zIiwgIiRnbG9iYWw6dGVzdHJvb3RcLi5caW50ZXJuYWxcZnVuY3Rpb25zIikKKQoKaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQoKJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0CgpEZXNjcmliZSAnSW52b2tpbmcgUFNTY3JpcHRBbmFseXplciBhZ2FpbnN0IGNvbW1hbmRiYXNlJyB7CgkkY29tbWFuZEZpbGVzID0gZm9yZWFjaCAoJHBhdGggaW4gJENvbW1hbmRQYXRoKSB7CiAgICAgICAgR2V0LUNoaWxkSXRlbSAtUGF0aCAkcGF0aCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIKICAgIH0KCSRzY3JpcHRBbmFseXplclJ1bGVzID0gR2V0LVNjcmlwdEFuYWx5emVyUnVsZQoJCglmb3JlYWNoICgkZmlsZSBpbiAkY29tbWFuZEZpbGVzKQoJewoJCUNvbnRleHQgIkFuYWx5emluZyAkKCRmaWxlLkJhc2VOYW1lKSIgewoJCQkkYW5hbHlzaXMgPSBJbnZva2UtU2NyaXB0QW5hbHl6ZXIgLVBhdGggJGZpbGUuRnVsbE5hbWUgLUV4Y2x1ZGVSdWxlIFBTQXZvaWRUcmFpbGluZ1doaXRlc3BhY2UsIFBTU2hvdWxkUHJvY2VzcwoJCQkKCQkJZm9yRWFjaCAoJHJ1bGUgaW4gJHNjcmlwdEFuYWx5emVyUnVsZXMpCgkJCXsKCQkJCUl0ICJTaG91bGQgcGFzcyAkcnVsZSIgLVRlc3RDYXNlcyBAeyBhbmFseXNpcyA9ICRhbmFseXNpczsgcnVsZSA9ICRydWxlIH0gewoJCQkJCUlmICgkYW5hbHlzaXMuUnVsZU5hbWUgLWNvbnRhaW5zICRydWxlKQoJCQkJCXsKCQkJCQkJJGFuYWx5c2lzIHwgV2hlcmUtT2JqZWN0IFJ1bGVOYW1lIC1FUSAkcnVsZSAtb3V0dmFyaWFibGUgZmFpbHVyZXMgfCBGb3JFYWNoLU9iamVjdCB7ICRudWxsID0gJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyLkFkZCgkXykgfQoJCQkJCQkKCQkJCQkJMSB8IFNob3VsZCAtQmUgMAoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkwIHwgU2hvdWxkIC1CZSAwCgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQp9AQmgAwAACaEDAAAGogMAABpQU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQajAwAAXS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMvZ2VuZXJhbC9QU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQkGAAAACaUDAAAJpgMAAAFVAgAADgAAAAanAwAAwwckZXhjZXB0aW9ucyA9IEB7IH0KCjwjCkEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgTUFZIGJlIGluIHRoZSBsYW5ndWFnZSBmaWxlcywgd2l0aG91dCBjYXVzaW5nIHRoZSB0ZXN0cyB0byBmYWlsLgpUaGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4gbW9kdWxlcyB0aGF0IGdlbmVyYXRlIGxvY2FsaXplZCBtZXNzYWdlcyBzdHJhaWdodCBmcm9tIEMjLgpTcGVjaWZ5IHRoZSBmdWxsIGtleSBhcyBpdCBpcyB3cml0dGVuIGluIHRoZSBsYW5ndWFnZSBmaWxlcywgZG8gbm90IHByZXBlbmQgdGhlIG1vZHVsZW5hbWUsCmFzIHlvdSB3b3VsZCBoYXZlIHRvIGluIEMjIGNvZGUuCgpFeGFtcGxlOgokZXhjZXB0aW9uc1snTGVnYWxTdXJwbHVzJ10gPSBAKAogICAgJ0V4Y2VwdGlvbi5TdHJlYW1zLkZhaWxlZENyZWF0ZScKICAgICdFeGNlcHRpb24uU3RyZWFtcy5GYWlsZWREaXNwb3NlJwopCiM+CiRleGNlcHRpb25zWydMZWdhbFN1cnBsdXMnXSA9IEAoCgopCjwjCkEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgTUFZIGJlIHVzZWQgd2l0aG91dCBuZWVkaW5nIHRvIGhhdmUgdGV4dCBkZWZpbmVkLgpUaGlzIGlzIGludGVuZGVkIGZvciBtb2R1bGVzIChyZS0pdXNpbmcgc3RyaW5ncyBwcm92aWRlZCBieSBhbm90aGVyIG1vZHVsZQojPgokZXhjZXB0aW9uc1snTm9UZXh0TmVlZGVkJ10gPSBAKAoJJ1ZhbGlkYXRlLkZTUGF0aCcKCSdWYWxpZGF0ZS5GU1BhdGguRmlsZScKCSdWYWxpZGF0ZS5GU1BhdGguRmlsZU9yUGFyZW50JwoJJ1ZhbGlkYXRlLkZTUGF0aC5Gb2xkZXInCgknVmFsaWRhdGUuUGF0aCcKCSdWYWxpZGF0ZS5QYXRoLkNvbnRhaW5lcicKCSdWYWxpZGF0ZS5QYXRoLkxlYWYnCgknVmFsaWRhdGUuVGltZVNwYW4uUG9zaXRpdmUnCgknVmFsaWRhdGUuVXJpLkFic29sdXRlJwoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZS5GaWxlJwoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZS5IdHRwcycKKQoKJGV4Y2VwdGlvbnMBCagDAAAJqQMAAAaqAwAAFnN0cmluZ3MuRXhjZXB0aW9ucy5wczEGqwMAAFkvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL2dlbmVyYWwvc3RyaW5ncy5FeGNlcHRpb25zLnBzMQkGAAAACa0DAAAJrgMAAAFWAgAADgAAAAavAwAA/Qc8IwouREVTQ1JJUFRJT04KICAgIFRoaXMgdGVzdCB2ZXJpZmllcywgdGhhdCBhbGwgc3RyaW5ncyB0aGF0IGhhdmUgYmVlbiB1c2VkLAogICAgYXJlIGxpc3RlZCBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMgYW5kIHRodXMgaGF2ZSBhIG1lc3NhZ2UgYmVpbmcgZGlzcGxheWVkLgoKICAgIEl0IGFsc28gY2hlY2tzLCB3aGV0aGVyIHRoZSBsYW5ndWFnZSBmaWxlcyBoYXZlIG9ycGhhbmVkIGVudHJpZXMgdGhhdCBuZWVkIGNsZWFuaW5nIHVwLgojPgoKCgpEZXNjcmliZSAiVGVzdGluZyBsb2NhbGl6YXRpb24gc3RyaW5ncyIgewoJJG1vZHVsZVJvb3QgPSAoR2V0LU1vZHVsZSDDvm5hbWXDvikuTW9kdWxlQmFzZQoJJHN0cmluZ3NSZXN1bHRzID0gRXhwb3J0LVBTTURTdHJpbmcgLU1vZHVsZVJvb3QgJG1vZHVsZVJvb3QKCSRleGNlcHRpb25zID0gJiAiJGdsb2JhbDp0ZXN0cm9vdFxnZW5lcmFsXHN0cmluZ3MuRXhjZXB0aW9ucy5wczEiCgkKCWZvcmVhY2ggKCRzdHJpbmdFbnRyeSBpbiAkc3RyaW5nc1Jlc3VsdHMpIHsKICAgICAgICBpZiAoJHN0cmluZ0VudHJ5LlN0cmluZyAtZXEgImtleSIpIHsgY29udGludWUgfSAjIFNraXBwaW5nIHRoZSB0ZW1wbGF0ZSBkZWZhdWx0IGVudHJ5CgkJSXQgIlNob3VsZCBiZSB1c2VkICYgaGF2ZSB0ZXh0OiAkKCRzdHJpbmdFbnRyeS5TdHJpbmcpIiAtVGVzdENhc2VzIEB7IHN0cmluZ0VudHJ5ID0gJHN0cmluZ0VudHJ5OyBleGNlcHRpb25zID0gJGV4Y2VwdGlvbnMgfSB7CiAgICAgICAgICAgIGlmICgkZXhjZXB0aW9ucy5MZWdhbFN1cnBsdXMgLW5vdGNvbnRhaW5zICRzdHJpbmdFbnRyeS5TdHJpbmcpIHsKICAgICAgICAgICAgICAgICRzdHJpbmdFbnRyeS5TdXJwbHVzIHwgU2hvdWxkIC1CZUZhbHNlCgkJCX0KCQkJaWYgKCRleGNlcHRpb25zLk5vVGV4dE5lZWRlZCAtbm90Y29udGFpbnMgJHN0cmluZ0VudHJ5LlN0cmluZykgewoJCQkJJHN0cmluZ0VudHJ5LlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCQl9CiAgICAgICAgfQogICAgfQp9AQmwAwAACbEDAAAGsgMAABFzdHJpbmdzLlRlc3RzLnBzMQazAwAAVC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+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RGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJAgQAAAkDBAAACQQEAAAKB9gDAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJBQQAAA0DB9oDAAAAAQAAAAgAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJBgQAAAkHBAAACQgEAAAJCQQAAAkKBAAACQsEAAAJDAQAAAkNBAAAEdwDAAAEAAAABg4EAAAEbmFtZQ0DEd0DAAAEAAAABg8EAAAKdGVzdGZvbGRlcgYQBAAADHBlc3RlcmNvbmZpZw0CEd8DAAAEAAAABhEEAAAEbmFtZQ0DEeEDAAAEAAAABhIEAAAEbmFtZQ0DEeMDAAAEAAAABhMEAAAEbmFtZQ0DEeUDAAAEAAAABhQEAAAEbmFtZQ0DEecDAAAEAAAABhUEAAAEbmFtZQ0DEekDAAAEAAAABhYEAAAEbmFtZQ0DAfkDAAAOAAAABhcEAACmFjwjClRoaXMgaXMgYW4gZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUKCkJ5IGRlZmF1bHQsIGl0IGlzIGVub3VnaCB0byBoYXZlIGEgc2luZ2xlIG9uZSBvZiB0aGVtLApob3dldmVyIGlmIHlvdSBoYXZlIGVub3VnaCBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIGp1c3RpZnkgaGF2aW5nIG11bHRpcGxlIGNvcGllcyBvZiBpdCwKZmVlbCB0b3RhbGx5IGZyZWUgdG8gc3BsaXQgdGhlbSBpbnRvIG11bHRpcGxlIGZpbGVzLgojPgoKPCMKIyBFeGFtcGxlIENvbmZpZ3VyYXRpb24KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0V4YW1wbGUuU2V0dGluZycgLVZhbHVlIDEwIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdpbnRlZ2VyJyAtSGFuZGxlciB7IH0gLURlc2NyaXB0aW9uICJFeGFtcGxlIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gWW91ciBtb2R1bGUgY2FuIHRoZW4gdXNlIHRoZSBzZXR0aW5nIHVzaW5nICdHZXQtUFNGQ29uZmlnVmFsdWUnIgojPgoKU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0ltcG9ydC5Eb0RvdFNvdXJjZScgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGRvdHNvdXJjZWQgb24gaW1wb3J0LiBCeSBkZWZhdWx0LCB0aGUgZmlsZXMgb2YgdGhpcyBtb2R1bGUgYXJlIHJlYWQgYXMgc3RyaW5nIHZhbHVlIGFuZCBpbnZva2VkLCB3aGljaCBpcyBmYXN0ZXIgYnV0IHdvcnNlIG9uIGRlYnVnZ2luZy4iClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdJbXBvcnQuSW5kaXZpZHVhbEZpbGVzJyAtVmFsdWUgJGZhbHNlIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdib29sJyAtRGVzY3JpcHRpb24gIldoZXRoZXIgdGhlIG1vZHVsZSBmaWxlcyBzaG91bGQgYmUgaW1wb3J0ZWQgaW5kaXZpZHVhbGx5LiBEdXJpbmcgdGhlIG1vZHVsZSBidWlsZCwgYWxsIG1vZHVsZSBjb2RlIGlzIGNvbXBpbGVkIGludG8gZmV3IGZpbGVzLCB3aGljaCBhcmUgaW1wb3J0ZWQgaW5zdGVhZCBieSBkZWZhdWx0LiBMb2FkaW5nIHRoZSBjb21waWxlZCB2ZXJzaW9ucyBpcyBmYXN0ZXIsIHVzaW5nIHRoZSBpbmRpdmlkdWFsIGZpbGVzIGlzIGVhc2llciBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIG91dCBhZGp1c3RtZW50cy4iCgpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnQ29uc29sZUxvZ2dpbmcuZW5hYmxlZCcgLVZhbHVlICR0cnVlIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdib29sJyAtRGVzY3JpcHRpb24gIklmIHNldCB0byBgJHRydWUsIE1lc3NhZ2VzIGZyb20gdGhlIG1vZHVsZSB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgbWFpbiBjb25zb2xlIgojIFNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdDb25zb2xlTG9nZ2luZy5zdHlsZScgLVZhbHVlICdDT046ICVNZXNzYWdlJScgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gc3RyaW5nIC1EZXNjcmlwdGlvbiAiV2hhdCBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSBjb25zb2xlPyIKIyBTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnQ29uc29sZUxvZ2dpbmcuc3R5bGUnIC1WYWx1ZSAnJVRhZ3MlfCVMZXZlbCV8JU1vZHVsZSV8JUZ1bmN0aW9uTmFtZSU6ICVNZXNzYWdlJScgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gc3RyaW5nIC1EZXNjcmlwdGlvbiAiV2hhdCBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSBjb25zb2xlPyIKU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLnN0eWxlJyAtVmFsdWUgJ1slTGV2ZWwlXSAlTWVzc2FnZSUnIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIldoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZT8iCiMgUG9zc2libGUgbGV2ZWxzOiBDcml0aWNhbCAoMSksIEltcG9ydGFudCAvIE91dHB1dCAvIEhvc3QgKDIpLCBTaWduaWZpY2FudCAoMyksIFZlcnlWZXJib3NlICg0KSwgVmVyYm9zZSAoNSksIFNvbWV3aGF0VmVyYm9zZSAoNiksIFN5c3RlbSAoNyksIERlYnVnICg4KSwgSW50ZXJuYWxDb21tZW50ICg5KSwgV2FybmluZwojICAgICAgICAgKDY2NikgRWl0aGVyIG9uZSBvZiB0aGUgc3RyaW5ncyBvciBpdHMgcmVzcGVjdGl2ZSBudW1iZXIgd2lsbCBkbyBhcyBpbnB1dC4KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLk1pbkxldmVsJyAtVmFsdWUgMSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBpbnRlZ2VyIC1EZXNjcmlwdGlvbiAiRnJvbSB3aGljaCBsZXZlbCBzdGFydGluZyBvbiBzaG91bGQgbWVzc2FnZXMgYmUgc2VudCB0byB0aGUgcHJvdmlkZXI/IgpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnQ29uc29sZUxvZ2dpbmcuTWF4TGV2ZWwnIC1WYWx1ZSAxIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIGludGVnZXIgLURlc2NyaXB0aW9uICJVcCB0byB3aGljaCBsZXZlbCBzaG91bGQgbWVzc2FnZXMgYmUgc2VudCB0byB0aGUgcHJvdmlkZXI/IgoBCRgEAAAJGQQAAAYaBAAAEWNvbmZpZ3VyYXRpb24ucHMxBhsEAACCAS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbi5wczEJBgAAAAkdBAAACR4EAAAB+gMAAA4AAAAGHwQAAPEDIyBDb25maWd1cmF0aW9ucwoKVGhyb3VnaCB0aGUgYFBTRnJhbWV3b3JrYCB5b3UgaGF2ZSBhIHNpbXBsZSBtZXRob2QgdGhhdCBhbGxvd3MgeW91IHRvIC4uLgoKIC0gUHVibGlzaCBzZXR0aW5ncwogLSBXaXRoIG9uYm9hcmQgZG9jdW1lbnRhdGlvbgogLSBJbnB1dCB2YWxpZGF0aW9uCiAtIFNjcmlwdHMgdGhhdCBydW4gb24gY2hhbmdlIG9mIHNldHRpbmdzCiAtIFRoYXQgY2FuIGJlIGRpc2NvdmVyZWQgYW5kIHVwZGF0ZWQgYnkgdGhlIHVzZXIKIC0gVGhhdCBjYW4gYmUgYWRtaW5pc3RyYXRlZCBieSBwb2xpY3kgJiBEU0MKClRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBhIGJpdCB0b28gY29tcGxleCB0byBkZXNjcmliZSBpbiBhIGhlbHAgZmlsZSwgeW91IGNhbiBob3dldmVyIHZpc2l0IHVzIGF0IGh0dHA6Ly9wc2ZyYW1ld29yay5vcmcgZm9yIGRldGFpbGVkIGd1aWRhbmNlLgoKQW4gZXhhbXBsZSBjYW4gYmUgc2VlbiBpbiB0aGUgYXR0YWNoZWQgcHMxIGZpbGUBCSAEAAAJIQQAAAYiBAAACXJlYWRtZS5tZAYjBAAAei9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvY29uZmlndXJhdGlvbnMvcmVhZG1lLm1kCQYAAAAJJQQAAAkmBAAAAfsDAAAOAAAABicEAADVASMgRnVuY3Rpb25zCgpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGludGVybmFsIGZ1bmN0aW9ucyBnby4KCkRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbW9kdWxlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdWJkaXZpZGUgdGhlbSBpbnRvIHN1YmZvbGRlcnMuCgpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseQEJKAQAAAkpBAAABioEAAAJcmVhZG1lLm1kBisEAAB1L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9mdW5jdGlvbnMvcmVhZG1lLm1kCQYAAAAJLQQAAAkuBAAAAfwDAAAOAAAABi8EAAD5AjwjClN0b3JlZCBzY3JpcHRibG9ja3MgYXJlIGF2YWlsYWJsZSBpbiBbUHNmVmFsaWRhdGVTY3JpcHQoKV0gYXR0cmlidXRlcy4KVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gY2VudHJhbGx5IHByb3ZpZGUgdGhlIHNhbWUgc2NyaXB0YmxvY2sgbXVsdGlwbGUgdGltZXMsCndpdGhvdXQgaGF2aW5nIHRvIG1haW50YWluIGl0IGluIHNlcGFyYXRlIGxvY2F0aW9ucy4KCkl0IGFsc28gcHJldmVudHMgbGVuZ3RoeSB2YWxpZGF0aW9uIHNjcmlwdGJsb2NrcyBmcm9tIG1ha2luZyB5b3VyIHBhcmFtZXRlciBibG9jawpoYXJkIHRvIHJlYWQuCgpTZXQtUFNGU2NyaXB0YmxvY2sgLU5hbWUgJ8O+bmFtZcO+LlNjcmlwdEJsb2NrTmFtZScgLVNjcmlwdGJsb2NrIHsKCQp9CiM+AQkwBAAACTEEAAAGMgQAABBzY3JpcHRibG9ja3MucHMxBjMEAAB/L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9zY3JpcHRibG9ja3Mvc2NyaXB0YmxvY2tzLnBzMQkGAAAACTUEAAAJNgQAAAH9AwAADgAAAAY3BAAA5wZXcml0ZS1QU0ZNZXNzYWdlICJDb25maWd1cmUgQ29uc29sZSBMb2dnaW5nIgppZiAoR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24uQ29uc29sZUxvZ2dpbmcuZW5hYmxlZCcgLUZhbGxiYWNrICRmYWxzZSkgewogICAgJHByb3ZpZGVyUGFyYW09QHsKICAgICAgICBOYW1lPSJjb25zb2xlIgogICAgICAgIEVuYWJsZWQ9JHRydWUKICAgICAgICBzdHlsZT1HZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi5Db25zb2xlTG9nZ2luZy5zdHlsZScKICAgICAgICBNaW5MZXZlbD1HZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi5Db25zb2xlTG9nZ2luZy5NaW5MZXZlbCcKICAgICAgICBNYXhMZXZlbD1HZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi5Db25zb2xlTG9nZ2luZy5NYXhMZXZlbCcKICAgICAgICBJbnN0YW5jZU5hbWUgPSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5jb25zb2xlJwogICAgfQogICAgV3JpdGUtUFNGTWVzc2FnZSAiQ29uZmlndXJlIENvbnNvbGUgTG9nZ2luZyB3aXRoIFBhcmFtPSQoJHByb3ZpZGVyUGFyYW18Q29udmVydFRvLUpzb24gLUNvbXByZXNzKSIKICAgIFNldC1QU0ZMb2dnaW5nUHJvdmlkZXIgQHByb3ZpZGVyUGFyYW0gLUluY2x1ZGVNb2R1bGVzICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicKCn1lbHNlewogICAgV3JpdGUtUFNGTWVzc2FnZSAiTk9UIENvbmZpZ3VyZSBDb25zb2xlIExvZ2dpbmciCn0KAQk4BAAACTkEAAAGOgQAABNjb25zb2xlX2xvZ2dpbmcucHMxBjsEAAB9L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9zY3JpcHRzL2NvbnNvbGVfbG9nZ2luZy5wczEJBgAAAAk9BAAACT4EAAAB/gMAAA4AAAAGPwQAAOIJTmV3LVBTRkxpY2Vuc2UgLVByb2R1Y3QgJ8O+bmFtZcO+JyAtTWFudWZhY3R1cmVyICfDvmF1dGhvcsO+JyAtUHJvZHVjdFZlcnNpb24gJHNjcmlwdDpNb2R1bGVWZXJzaW9uIC1Qcm9kdWN0VHlwZSBNb2R1bGUgLU5hbWUgTUlUIC1WZXJzaW9uICIxLjAuMC4wIiAtRGF0ZSAoR2V0LURhdGUgIsO+IWRhdGUhw74iKSAtVGV4dCBAIgpDb3B5cmlnaHQgKGMpIMO+IXllYXIhw74gw75hdXRob3LDvgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KIkABCUAEAAAJQQQAAAZCBAAAC2xpY2Vuc2UucHMxBkMEAAB1L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9zY3JpcHRzL2xpY2Vuc2UucHMxCQYAAAAJRQQAAAlGBAAAAf8DAAAOAAAABkcEAACeBjwjCkFkZCBhbGwgdGhpbmdzIHlvdSB3YW50IHRvIHJ1biBhZnRlciBpbXBvcnRpbmcgdGhlIG1haW4gZnVuY3Rpb24gY29kZQoKV0FSTklORzogT05MWSBwcm92aWRlIHBhdGhzIHRvIGZpbGVzIQoKQWZ0ZXIgYnVpbGRpbmcgdGhlIG1vZHVsZSwgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkLCBhZGRpbmcgYW55dGhpbmcgYnV0IHBhdGhzIHRvIGZpbGVzIC4uLgotIFdpbGwgbm90IHdvcmsgYWZ0ZXIgcHVibGlzaGluZwotIENvdWxkIGJyZWFrIHRoZSBidWlsZCBwcm9jZXNzCiM+CgokbW9kdWxlUm9vdCA9IFNwbGl0LVBhdGggKFNwbGl0LVBhdGggJFBTU2NyaXB0Um9vdCkKCiMgTG9hZCBDb25maWd1cmF0aW9ucwooR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcY29uZmlndXJhdGlvbnNcKi5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lCgojIExvYWQgU2NyaXB0YmxvY2tzCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRibG9ja3NcKi5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lCgojIExvYWQgVGFiIEV4cGFuc2lvbgooR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcdGVwcFwqLnRlcHAucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKS5GdWxsTmFtZQoKIyBMb2FkIFRhYiBFeHBhbnNpb24gQXNzaWdubWVudAoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcdGVwcFxhc3NpZ25tZW50LnBzMSIKCiMgTG9hZCBMaWNlbnNlCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXGxpY2Vuc2UucHMxIgEJSAQAAAlJBAAABkoEAAAOcG9zdGltcG9ydC5wczEGSwQAAHgvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3NjcmlwdHMvcG9zdGltcG9ydC5wczEJBgAAAAlNBAAACU4EAAABAAQAAA4AAAAGTwQAAKMDPCMKQWRkIGFsbCB0aGluZ3MgeW91IHdhbnQgdG8gcnVuIGJlZm9yZSBpbXBvcnRpbmcgdGhlIG1haW4gZnVuY3Rpb24gY29kZS4KCldBUk5JTkc6IE9OTFkgcHJvdmlkZSBwYXRocyB0byBmaWxlcyEKCkFmdGVyIGJ1aWxkaW5nIHRoZSBtb2R1bGUsIHRoaXMgZmlsZSB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZCwgYWRkaW5nIGFueXRoaW5nIGJ1dCBwYXRocyB0byBmaWxlcyAuLi4KLSBXaWxsIG5vdCB3b3JrIGFmdGVyIHB1Ymxpc2hpbmcKLSBDb3VsZCBicmVhayB0aGUgYnVpbGQgcHJvY2VzcwojPgoKJG1vZHVsZVJvb3QgPSBTcGxpdC1QYXRoIChTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QpCgojIExvYWQgdGhlIHN0cmluZ3MgdXNlZCBpbiBtZXNzYWdlcwoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xzdHJpbmdzLnBzMSIBCVAEAAAJUQQAAAZSBAAADXByZWltcG9ydC5wczEGUwQAAHcvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3NjcmlwdHMvcHJlaW1wb3J0LnBzMQkGAAAACVUEAAAJVgQAAAEBBAAADgAAAAZXBAAAzAM8IwpUaGlzIGZpbGUgbG9hZHMgdGhlIHN0cmluZ3MgZG9jdW1lbnRzIGZyb20gdGhlIHJlc3BlY3RpdmUgbGFuZ3VhZ2UgZm9sZGVycy4KVGhpcyBhbGxvd3MgbG9jYWxpemluZyBtZXNzYWdlcyBhbmQgZXJyb3JzLgpMb2FkIHBzZDEgbGFuZ3VhZ2UgZmlsZXMgZm9yIGVhY2ggbGFuZ3VhZ2UgeW91IHdpc2ggdG8gc3VwcG9ydC4KUGFydGlhbCB0cmFuc2xhdGlvbnMgYXJlIGFjY2VwdGFibGUgLSB3aGVuIG1pc3NpbmcgYSBjdXJyZW50IGxhbmd1YWdlIG1lc3NhZ2UsCml0IHdpbGwgZmFsbGJhY2sgdG8gRW5nbGlzaCBvciBhbm90aGVyIGF2YWlsYWJsZSBsYW5ndWFnZS4KIz4KSW1wb3J0LVBTRkxvY2FsaXplZFN0cmluZyAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGVuLXVzXCoucHNkMSIgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1MYW5ndWFnZSAnZW4tVVMnAQlYBAAACVkEAAAGWgQAAAtzdHJpbmdzLnBzMQZbBAAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvc2NyaXB0cy9zdHJpbmdzLnBzMQkGAAAACV0EAAAJXgQAAAECBAAADgAAAAZfBAAAbjwjCiMgRXhhbXBsZToKUmVnaXN0ZXItUFNGVGVwcEFyZ3VtZW50Q29tcGxldGVyIC1Db21tYW5kIEdldC1BbGNvaG9sIC1QYXJhbWV0ZXIgVHlwZSAtTmFtZSDDvm5hbWXDvi5hbGNvaG9sCiM+AQlgBAAACWEEAAAGYgQAAA5hc3NpZ25tZW50LnBzMQZjBAAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvdGVwcC9hc3NpZ25tZW50LnBzMQkGAAAACWUEAAAJZgQAAAEDBAAADgAAAAZnBAAAoAE8IwojIEV4YW1wbGU6ClJlZ2lzdGVyLVBTRlRlcHBTY3JpcHRibG9jayAtTmFtZSAiw75uYW1lw74uYWxjb2hvbCIgLVNjcmlwdEJsb2NrIHsgJ0JlZXInLCdNZWFkJywnV2hpc2tleScsJ1dpbmUnLCdWb2RrYScsJ1J1bSAoM3kpJywgJ1J1bSAoNXkpJywgJ1J1bSAoN3kpJyB9CiM+AQloBAAACWkEAAAGagQAABBleGFtcGxlLnRlcHAucHMxBmsEAAB3L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC90ZXBwL2V4YW1wbGUudGVwcC5wczEJBgAAAAltBAAACW4EAAABBAQAAA4AAAAGbwQAAKgHIyBUYWIgRXhwYW5zaW9uCgojIyBEZXNjcmlwdGlvbgoKTW9kZXJuIFRhYiBFeHBhbnNpb24gd2FzIG9wZW5lZCB0byB1c2VycyB3aXRoIHRoZSBtb2R1bGUgYFRhYiBFeHBhbnNpb24gUGx1cyBQbHVzYCAoVEVQUCkuCgpJdCBhbGxvd3MgeW91IHRvIGRlZmluZSwgd2hhdCBvcHRpb25zIGEgdXNlciBpcyBvZmZlcmVkIHdoZW4gdGFiYmluZyB0aHJvdWdoIGlucHV0IG9wdGlvbnMuIFRoaXMgY2FuIHNhdmUgYSBsb3Qgb2YgdGltZSBmb3IgdGhlIHVzZXIgYW5kIGlzIGNvbnNpZGVyZWQgYSBrZXkgZWxlbWVudCBpbiB1c2VyIGV4cGVyaWVuY2UuCgpUaGUgYFBTRnJhbWV3b3JrYCBvZmZlcnMgYSBzaW1wbGlmaWVkIHdheSBvZiBvZmZlcmluZyBqdXN0IHRoaXMsIGFzIHRoZSB0d28gZXhhbXBsZSBmaWxlcyBzaG93LgoKIyMgQ29uY2VwdAoKQ3VzdG9tIHRhYiBjb21wbGV0aW9uIGlzIGRlZmluZWQgaW4gdHdvIHN0ZXBzOgoKIC0gRGVmaW5lIGEgc2NyaXB0YmxvY2sgdGhhdCBpcyBydW4gd2hlbiB0aGUgdXNlciBoaXRzIGBUQUJgIGFuZCBwcm92aWRlcyB0aGUgc3RyaW5ncyB0aGF0IGFyZSBoaXMgb3B0aW9ucy4KIC0gQXNzaWduIHRoYXQgc2NyaXB0YmxvY2sgdG8gdGhlIHBhcmFtZXRlciBvZiBhIGNvbW1hbmQuIFlvdSBjYW4gYXNzaWduIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLgoKIyMgU3RydWN0dXJlCgpJbXBvcnQgb3JkZXIgbWF0dGVycy4gSW4gb3JkZXIgdG8gbWFrZSB0aGluZ3Mgd29yayB3aXRoIHRoZSBkZWZhdWx0IHNjYWZmb2xkLCBmb2xsb3cgdGhvc2UgcnVsZXM6CgogLSBBbGwgc2NyaXB0ZmlsZXMgX2RlZmluaW5nXyBjb21wbGV0aW9uIHNjcmlwdGJsb2NrcyBsaWtlIHRoaXM6IGAqLnRlcHAucHMxYAogLSBQdXQgYWxsIHlvdXIgY29tcGxldGlvbiBhc3NpZ25tZW50cyBpbiBgYXNzaWdubWVudC5wczFgAQlwBAAACXEEAAAGcgQAAAlyZWFkbWUubWQGcwQAAHAvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3RlcHAvcmVhZG1lLm1kCQYAAAAJdQQAAAl2BAAAAQUEAAAOAAAABncEAADPASMgRGVzY3JpcHRpb24KClRoaXMgaXMgd2hlcmUgdGhlIGZ1bmN0aW9uIHRlc3RzIGdvLgoKTWFrZSBzdXJlIHRvIHB1dCB0aGVtIGluIGZvbGRlcnMgcmVmbGVjdGluZyB0aGUgYWN0dWFsIG1vZHVsZSBzdHJ1Y3R1cmUuCgpJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBpbnRlcm5hbCBhbmQgcHVibGljIGZ1bmN0aW9ucyBoZXJlLgEJeAQAAAl5BAAABnoEAAAJcmVhZG1lLm1kBnsEAAByL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9mdW5jdGlvbnMvcmVhZG1lLm1kCQYAAAAJfQQAAAl+BAAAAQYEAAAOAAAABn8EAADeBSMgTGlzdCBvZiBmb3JiaWRkZW4gY29tbWFuZHMKJGdsb2JhbDpCYW5uZWRDb21tYW5kcyA9IEAoCgknV3JpdGUtSG9zdCcKCSdXcml0ZS1WZXJib3NlJwoJJ1dyaXRlLVdhcm5pbmcnCgknV3JpdGUtRXJyb3InCgknV3JpdGUtT3V0cHV0JwoJJ1dyaXRlLUluZm9ybWF0aW9uJwoJJ1dyaXRlLURlYnVnJwoJCgkjIFVzZSBDSU0gaW5zdGVhZCB3aGVyZSBwb3NzaWJsZQoJJ0dldC1XbWlPYmplY3QnCgknSW52b2tlLVdtaU1ldGhvZCcKCSdSZWdpc3Rlci1XbWlFdmVudCcKCSdSZW1vdmUtV21pT2JqZWN0JwoJJ1NldC1XbWlJbnN0YW5jZScKCgkjIFVzZSBHZXQtV2luRXZlbnQgaW5zdGVhZAoJJ0dldC1FdmVudExvZycKKQoKPCMKCUNvbnRhaW5zIGxpc3Qgb2YgZXhjZXB0aW9ucyBmb3IgYmFubmVkIGNtZGxldHMuCglJbnNlcnQgdGhlIGZpbGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBtYXkgY29udGFpbiB0aGVtLgoJCglFeGFtcGxlOgoJIldyaXRlLUhvc3QiICA9IEAoJ1dyaXRlLVBTRkhvc3RDb2xvci5wczEnLCdXcml0ZS1QU0ZNZXNzYWdlLnBzMScpCiM+CiRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmQgPSBAewoJIldyaXRlLUhvc3QiICA9IEAoKQoJIldyaXRlLVZlcmJvc2UiID0gQCgpCgkiV3JpdGUtV2FybmluZyIgPSBAKCkKCSJXcml0ZS1FcnJvciIgID0gQCgpCgkiV3JpdGUtT3V0cHV0IiA9IEAoKQoJIldyaXRlLUluZm9ybWF0aW9uIiA9IEAoKQoJIldyaXRlLURlYnVnIiA9IEAoKQp9AQmABAAACYEEAAAGggQAABxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxBoMEAACDAS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZ2VuZXJhbC9GaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxCQYAAAAJhQQAAAmGBAAAAQcEAAAOAAAABocEAACCGCRtb2R1bGVSb290ID0gKFJlc29sdmUtUGF0aCAiJGdsb2JhbDp0ZXN0cm9vdFwuLiIpLlBhdGgKCi4gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxIgoKRGVzY3JpYmUgIlZlcmlmeWluZyBpbnRlZ3JpdHkgb2YgbW9kdWxlIGZpbGVzIiB7CglCZWZvcmVBbGwgewoJCWZ1bmN0aW9uIEdldC1GaWxlRW5jb2RpbmcKCQl7CgkJPCMKCQkJLlNZTk9QU0lTCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLgoJCQkKCQkJLkRFU0NSSVBUSU9OCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLgoJCQkKCQkJLlBBUkFNRVRFUiBQYXRoCgkJCQlUaGUgZmlsZSB0byB0ZXN0CgkJIz4KCQkJW0NtZGxldEJpbmRpbmcoKV0KCQkJUGFyYW0gKAoJCQkJW1BhcmFtZXRlcihNYW5kYXRvcnkgPSAkVHJ1ZSwgVmFsdWVGcm9tUGlwZWxpbmVCeVByb3BlcnR5TmFtZSA9ICRUcnVlKV0KCQkJCVtBbGlhcygnRnVsbE5hbWUnKV0KCQkJCVtzdHJpbmddCgkJCQkkUGF0aAoJCQkpCgkJCQoJCQlpZiAoJFBTVmVyc2lvblRhYmxlLlBTVmVyc2lvbi5NYWpvciAtbHQgNikKCQkJewoJCQkJW2J5dGVbXV0kYnl0ZSA9IGdldC1jb250ZW50IC1FbmNvZGluZyBieXRlIC1SZWFkQ291bnQgNCAtVG90YWxDb3VudCA0IC1QYXRoICRQYXRoCgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlbYnl0ZVtdXSRieXRlID0gR2V0LUNvbnRlbnQgLUFzQnl0ZVN0cmVhbSAtUmVhZENvdW50IDQgLVRvdGFsQ291bnQgNCAtUGF0aCAkUGF0aAoJCQl9CgkJCQoJCQlpZiAoJGJ5dGVbMF0gLWVxIDB4ZWYgLWFuZCAkYnl0ZVsxXSAtZXEgMHhiYiAtYW5kICRieXRlWzJdIC1lcSAweGJmKSB7ICdVVEY4IEJPTScgfQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAweGZlIC1hbmQgJGJ5dGVbMV0gLWVxIDB4ZmYpIHsgJ1VuaWNvZGUnIH0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMCAtYW5kICRieXRlWzFdIC1lcSAwIC1hbmQgJGJ5dGVbMl0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVszXSAtZXEgMHhmZikgeyAnVVRGMzInIH0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMHgyYiAtYW5kICRieXRlWzFdIC1lcSAweDJmIC1hbmQgJGJ5dGVbMl0gLWVxIDB4NzYpIHsgJ1VURjcnIH0KCQkJZWxzZSB7ICdVbmtub3duJyB9CgkJfQoJfQoKCUNvbnRleHQgIlZhbGlkYXRpbmcgUFMxIFNjcmlwdCBmaWxlcyIgewoJCSRhbGxGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJG1vZHVsZVJvb3QgLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIgoJCQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykKCQl7CgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpCgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIHdpdGggQnl0ZSBPcmRlciBNYXJrIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsKCQkJCUdldC1GaWxlRW5jb2RpbmcgLVBhdGggJGZpbGUuRnVsbE5hbWUgfCBTaG91bGQgLUJlICdVVEY4IEJPTScKCQkJfQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gewoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMH0pLkxpbmVOdW1iZXIgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQkJfQoJCQkKCQkJJHRva2VucyA9ICRudWxsCgkJCSRwYXJzZUVycm9ycyA9ICRudWxsCgkJCSRhc3QgPSBbU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5MYW5ndWFnZS5QYXJzZXJdOjpQYXJzZUZpbGUoJGZpbGUuRnVsbE5hbWUsIFtyZWZdJHRva2VucywgW3JlZl0kcGFyc2VFcnJvcnMpCgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyBzeW50YXggZXJyb3JzIiAtVGVzdENhc2VzIEB7IHBhcnNlRXJyb3JzID0gJHBhcnNlRXJyb3JzIH0gewoJCQkJJHBhcnNlRXJyb3JzIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJCX0KCQkJCgkJCWZvcmVhY2ggKCRjb21tYW5kIGluICRnbG9iYWw6QmFubmVkQ29tbWFuZHMpCgkJCXsKCQkJCWlmICgkZ2xvYmFsOk1heUNvbnRhaW5Db21tYW5kWyIkY29tbWFuZCJdIC1ub3Rjb250YWlucyAkZmlsZS5OYW1lKQoJCQkJewoJCQkJCUl0ICJbJG5hbWVdIFNob3VsZCBub3QgdXNlICRjb21tYW5kIiAtVGVzdENhc2VzIEB7IHRva2VucyA9ICR0b2tlbnM7IGNvbW1hbmQgPSAkY29tbWFuZCB9IHsKCQkJCQkJJHRva2VucyB8IFdoZXJlLU9iamVjdCBUZXh0IC1FUSAkY29tbWFuZCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCQoJQ29udGV4dCAiVmFsaWRhdGluZyBoZWxwLnR4dCBoZWxwIGZpbGVzIiB7CgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLmhlbHAudHh0IiB8IFdoZXJlLU9iamVjdCBGdWxsTmFtZSAtTm90TGlrZSAiJG1vZHVsZVJvb3RcdGVzdHNcKiIKCQkKCQlmb3JlYWNoICgkZmlsZSBpbiAkYWxsRmlsZXMpCgkJewoJCQkkbmFtZSA9ICRmaWxlLkZ1bGxOYW1lLlJlcGxhY2UoIiRtb2R1bGVSb290XCIsICcnKQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgVVRGOCBlbmNvZGluZyIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7CgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCBCT00nCgkJCX0KCQkJCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHRyYWlsaW5nIHNwYWNlIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsKCQkJCSgkZmlsZSB8IFNlbGVjdC1TdHJpbmcgIlxzJCIgfCBXaGVyZS1PYmplY3QgeyAkXy5MaW5lLlRyaW0oKS5MZW5ndGggLWd0IDAgfSB8IE1lYXN1cmUtT2JqZWN0KS5Db3VudCB8IFNob3VsZCAtQmUgMAoJCQl9CgkJfQoJfQp9AQmIBAAACYkEAAAGigQAABdGaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQaLBAAAfi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZ2VuZXJhbC9GaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQkGAAAACY0EAAAJjgQAAAEIBAAADgAAAAaPBAAAgwUjIExpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQKJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucyA9IEAoCiAgICAKKQoKPCMKICBMaXN0IG9mIGFycmF5ZWQgZW51bWVyYXRpb25zLiBUaGVzZSBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuIEFkZCBmdWxsIG5hbWUuCiAgRXhhbXBsZToKCiAgIlNxbGNvbGxhYm9yYXRpdmUuRGJhdG9vbHMuQ29ubmVjdGlvbi5NYW5hZ2VtZW50Q29ubmVjdGlvblR5cGVbXSIKIz4KJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMgPSBAKAoJCikKCjwjCiAgU29tZSB0eXBlcyBvbiBwYXJhbWV0ZXJzIGp1c3QgZmFpbCB0aGVpciB2YWxpZGF0aW9uIG5vIG1hdHRlciB3aGF0LgogIEZvciB0aG9zZSBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIHNraXAgdGhlbSwgYnkgYWRkaW5nIHRoZW0gdG8gdGhpcyBoYXNodGFibGUuCiAgQWRkIGJ5IGZvbGxvd2luZyB0aGlzIGNvbnZlbnRpb246IDxjb21tYW5kIG5hbWU+ID0gQCg8bGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXM+KQogIEV4YW1wbGU6CgogICJHZXQtRGJhQ21PYmplY3QiICAgICAgID0gQCgiRG9Ob3RVc2UiKQojPgokZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUgPSBAewogICAgCn0KAQmQBAAACZEEAAAGkgQAABNIZWxwLkV4Y2VwdGlvbnMucHMxBpMEAAB6L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsL0hlbHAuRXhjZXB0aW9ucy5wczEJBgAAAAmVBAAACZYEAAABCQQAAA4AAAAGlwQAALwzPCMKICAgIC5OT1RFUwogICAgICAgIFRoZSBvcmlnaW5hbCB0ZXN0IHRoaXMgaXMgYmFzZWQgdXBvbiB3YXMgd3JpdHRlbiBieSBKdW5lIEJsZW5kZXIuCgkJQWZ0ZXIgc2V2ZXJhbCByb3VuZHMgb2YgbW9kaWZpY2F0aW9ucyBpdCBzdGFuZHMgbm93IGFzIGl0IGlzLCBidXQgdGhlIGhvbm9yIHJlbWFpbnMgaGVycy4KCgkJVGhhbmsgeW91IEp1bmUsIGZvciBhbGwgeW91IGhhdmUgZG9uZSEKCiAgICAuREVTQ1JJUFRJT04KCQlUaGlzIHRlc3QgZXZhbHVhdGVzIHRoZSBoZWxwIGZvciBhbGwgY29tbWFuZHMgaW4gYSBtb2R1bGUuCgoJLlBBUkFNRVRFUiBTa2lwVGVzdAoJCURpc2FibGVzIHRoaXMgdGVzdC4KCQoJLlBBUkFNRVRFUiBDb21tYW5kUGF0aAoJCUxpc3Qgb2YgcGF0aHMgdW5kZXIgd2hpY2ggdGhlIHNjcmlwdCBmaWxlcyBhcmUgc3RvcmVkLgoJCVRoaXMgdGVzdCBhc3N1bWVzIHRoYXQgYWxsIGZ1bmN0aW9ucyBoYXZlIHRoZWlyIG93biBmaWxlIHRoYXQgaXMgbmFtZWQgYWZ0ZXIgdGhlbXNlbHZlcy4KCQlUaGVzZSBwYXRocyBhcmUgdXNlZCB0byBzZWFyY2ggZm9yIGNvbW1hbmRzIHRoYXQgc2hvdWxkIGV4aXN0IGFuZCBiZSB0ZXN0ZWQuCgkJV2lsbCBzZWFyY2ggcmVjdXJzaXZlbHkgYW5kIGFjY2VwdHMgd2lsZGNhcmRzLCBtYWtlIHN1cmUgb25seSBmdW5jdGlvbnMgYXJlIGZvdW5kCgoJLlBBUkFNRVRFUiBNb2R1bGVOYW1lCgkJTmFtZSBvZiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZC4KCQlUaGUgbW9kdWxlIG11c3QgYWxyZWFkeSBiZSBpbXBvcnRlZAoKCS5QQVJBTUVURVIgRXhjZXB0aW9uc0ZpbGUKCQlGaWxlIGluIHdoaWNoIGV4Y2VwdGlvbnMgYW5kIGFkanVzdG1lbnRzIGFyZSBjb25maWd1cmVkLgoJCUluIGl0IHRoZXJlIHNob3VsZCBiZSB0d28gYXJyYXlzIGFuZCBhIGhhc2h0YWJsZSBkZWZpbmVkOgoJCQkkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zCgkJCSRnbG9iYWw6SGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzCgkJCSRnbG9iYWw6SGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZQoJCVRoZXNlIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHRoZSB0ZXN0cyBzbGlnaHRseSBpbiBjYXNlcyBvZiBuZWVkLgoJCVNlZSB0aGUgZXhhbXBsZSBmaWxlIGZvciBleHBsYW5hdGlvbnMgb24gZWFjaCBvZiB0aGVzZSB1c2FnZSBhbmQgZWZmZWN0LgojPgpbQ21kbGV0QmluZGluZygpXQpQYXJhbSAoCglbc3dpdGNoXQoJJFNraXBUZXN0LAoJCglbc3RyaW5nW11dCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpLAoJCglbc3RyaW5nXQoJJE1vZHVsZU5hbWUgPSAiw75uYW1lw74iLAoJCglbc3RyaW5nXQoJJEV4Y2VwdGlvbnNGaWxlID0gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxIgopCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0KLiAkRXhjZXB0aW9uc0ZpbGUKCiRpbmNsdWRlZE5hbWVzID0gKEdldC1DaGlsZEl0ZW0gJENvbW1hbmRQYXRoIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIikuQmFzZU5hbWUKJGNvbW1hbmRUeXBlcyA9IEAoJ0NtZGxldCcsICdGdW5jdGlvbicpCmlmICgkUFNWZXJzaW9uVGFibGUuUFNFZGl0aW9uIC1lcSAnRGVza3RvcCcgKSB7ICRjb21tYW5kVHlwZXMgKz0gJ1dvcmtmbG93JyB9CiRjb21tYW5kcyA9IEdldC1Db21tYW5kIC1Nb2R1bGUgKEdldC1Nb2R1bGUgJE1vZHVsZU5hbWUpIC1Db21tYW5kVHlwZSAkY29tbWFuZFR5cGVzIHwgV2hlcmUtT2JqZWN0IE5hbWUgLUluICRpbmNsdWRlZE5hbWVzCgojIyBXaGVuIHRlc3RpbmcgaGVscCwgcmVtZW1iZXIgdGhhdCBoZWxwIGlzIGNhY2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc2Vzc2lvbi4KIyMgVG8gdGVzdCwgcmVzdGFydCBzZXNzaW9uLgoKCmZvcmVhY2ggKCRjb21tYW5kIGluICRjb21tYW5kcykgewogICAgJGNvbW1hbmROYW1lID0gJGNvbW1hbmQuTmFtZQogICAgCiAgICAjIFNraXAgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBvbiB0aGUgZXhjbHVzaW9ucyBsaXN0CiAgICBpZiAoJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucyAtY29udGFpbnMgJGNvbW1hbmROYW1lKSB7IGNvbnRpbnVlIH0KICAgIAogICAgIyBUaGUgbW9kdWxlLXF1YWxpZmllZCBjb21tYW5kIGZhaWxzIG9uIE1pY3Jvc29mdC5Qb3dlclNoZWxsLkFyY2hpdmUgY21kbGV0cwogICAgJEhlbHAgPSBHZXQtSGVscCAkY29tbWFuZE5hbWUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUKCQoJRGVzY3JpYmUgIlRlc3QgaGVscCBmb3IgJGNvbW1hbmROYW1lIiB7CiAgICAgICAgCgkJIyBJZiBoZWxwIGlzIG5vdCBmb3VuZCwgc3lub3BzaXMgaW4gYXV0by1nZW5lcmF0ZWQgaGVscCBpcyB0aGUgc3ludGF4IGRpYWdyYW0KCQlJdCAic2hvdWxkIG5vdCBiZSBhdXRvLWdlbmVyYXRlZCIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7CgkJCSRIZWxwLlN5bm9wc2lzIHwgU2hvdWxkIC1Ob3QgLUJlTGlrZSAnKmBbYDxDb21tb25QYXJhbWV0ZXJzYD5gXSonCgkJfQogICAgICAgIAoJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IGZ1bmN0aW9uCgkJSXQgImdldHMgZGVzY3JpcHRpb24gZm9yICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7CgkJCSRIZWxwLkRlc2NyaXB0aW9uIHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkKCQl9CiAgICAgICAgCgkJIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUKCQlJdCAiZ2V0cyBleGFtcGxlIGNvZGUgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gewoJCQkoJEhlbHAuRXhhbXBsZXMuRXhhbXBsZSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLkNvZGUgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCX0KCQoJCSMgU2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBleGFtcGxlIGRlc2NyaXB0aW9uCgkJSXQgImdldHMgZXhhbXBsZSBoZWxwIGZyb20gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsKCQkJKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCX0KICAgICAgICAKICAgICAgICBDb250ZXh0ICJUZXN0IHBhcmFtZXRlciBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsKICAgICAgICAgICAgCiAgICAgICAgICAgICRjb21tb24gPSAnRGVidWcnLCAnRXJyb3JBY3Rpb24nLCAnRXJyb3JWYXJpYWJsZScsICdJbmZvcm1hdGlvbkFjdGlvbicsICdJbmZvcm1hdGlvblZhcmlhYmxlJywgJ091dEJ1ZmZlcicsICdPdXRWYXJpYWJsZScsICdQaXBlbGluZVZhcmlhYmxlJywgJ1ZlcmJvc2UnLCAnV2FybmluZ0FjdGlvbicsICdXYXJuaW5nVmFyaWFibGUnCiAgICAgICAgICAgIAogICAgICAgICAgICAkcGFyYW1ldGVycyA9ICRjb21tYW5kLlBhcmFtZXRlclNldHMuUGFyYW1ldGVycyB8IFNvcnQtT2JqZWN0IC1Qcm9wZXJ0eSBOYW1lIC1VbmlxdWUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbm90aW4gJGNvbW1vbgogICAgICAgICAgICAkcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVycy5OYW1lCiAgICAgICAgICAgICRIZWxwUGFyYW1ldGVyTmFtZXMgPSAkSGVscC5QYXJhbWV0ZXJzLlBhcmFtZXRlci5OYW1lIHwgU29ydC1PYmplY3QgLVVuaXF1ZQogICAgICAgICAgICBmb3JlYWNoICgkcGFyYW1ldGVyIGluICRwYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyTmFtZSA9ICRwYXJhbWV0ZXIuTmFtZQogICAgICAgICAgICAgICAgJHBhcmFtZXRlckhlbHAgPSAkSGVscC5wYXJhbWV0ZXJzLnBhcmFtZXRlciB8IFdoZXJlLU9iamVjdCBOYW1lIC1FUSAkcGFyYW1ldGVyTmFtZQoJCQkKCQkJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IHBhcmFtZXRlcgoJCQkJSXQgImdldHMgaGVscCBmb3IgcGFyYW1ldGVyOiAkcGFyYW1ldGVyTmFtZSA6IGluICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHAgfSB7CgkJCQkJJHBhcmFtZXRlckhlbHAuRGVzY3JpcHRpb24uVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJCQl9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRjb2RlTWFuZGF0b3J5ID0gJHBhcmFtZXRlci5Jc01hbmRhdG9yeS50b1N0cmluZygpCgkJCQlJdCAiaGVscCBmb3IgJHBhcmFtZXRlck5hbWUgcGFyYW1ldGVyIGluICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBNYW5kYXRvcnkgdmFsdWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwOyBjb2RlTWFuZGF0b3J5ID0gJGNvZGVNYW5kYXRvcnkgfSB7CgkJCQkJJHBhcmFtZXRlckhlbHAuUmVxdWlyZWQgfCBTaG91bGQgLUJlICRjb2RlTWFuZGF0b3J5CgkJCQl9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICgkSGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZVskY29tbWFuZE5hbWVdIC1jb250YWlucyAkcGFyYW1ldGVyTmFtZSkgeyBjb250aW51ZSB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRjb2RlVHlwZSA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5OYW1lCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuSXNFbnVtKSB7CiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlKQoJCQkJCQkjIFBhcmFtZXRlciB0eXBlIGluIEhlbHAgc2hvdWxkIG1hdGNoIGNvZGUKCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gewoJCQkJCQkkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMKCQkJCQl9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5GdWxsTmFtZSAtaW4gJEhlbHBUZXN0RW51bWVyYXRlZEFycmF5cykgewogICAgICAgICAgICAgICAgICAgICMgRW51bWVyYXRpb25zIG9mdGVuIGhhdmUgaXNzdWVzIHdpdGggdGhlIHR5cGVuYW1lIG5vdCBiZWluZyByZWxpYWJseSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSBbRW51bV06OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5EZWNsYXJlZE1lbWJlcnNbMF0uUmV0dXJuVHlwZSkKCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gewoJCQkJCQkkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMKCQkJCQl9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIFRvIGF2b2lkIGNhbGxpbmcgVHJpbSBtZXRob2Qgb24gYSBudWxsIG9iamVjdC4KICAgICAgICAgICAgICAgICAgICAkaGVscFR5cGUgPSBpZiAoJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUpIHsgJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUuVHJpbSgpIH0KCQkJCQkjIFBhcmFtZXRlciB0eXBlIGluIEhlbHAgc2hvdWxkIG1hdGNoIGNvZGUKCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBoZWxwVHlwZSA9ICRoZWxwVHlwZTsgY29kZVR5cGUgPSAkY29kZVR5cGUgfSB7CgkJCQkJCSRoZWxwVHlwZSB8IFNob3VsZCAtYmUgJGNvZGVUeXBlCgkJCQkJfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcmVhY2ggKCRoZWxwUGFybSBpbiAkSGVscFBhcmFtZXRlck5hbWVzKSB7CgkJCQkjIFNob3VsZG4ndCBmaW5kIGV4dHJhIHBhcmFtZXRlcnMgaW4gaGVscC4KCQkJCUl0ICJmaW5kcyBoZWxwIHBhcmFtZXRlciBpbiBjb2RlOiAkaGVscFBhcm0iIC1UZXN0Q2FzZXMgQHsgaGVscFBhcm0gPSAkaGVscFBhcm07IHBhcmFtZXRlck5hbWVzID0gJHBhcmFtZXRlck5hbWVzIH0gewoJCQkJCSRoZWxwUGFybSAtaW4gJHBhcmFtZXRlck5hbWVzIHwgU2hvdWxkIC1CZSAkdHJ1ZQoJCQkJfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9AQmYBAAACZkEAAAGmgQAAA5IZWxwLlRlc3RzLnBzMQabBAAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZ2VuZXJhbC9IZWxwLlRlc3RzLnBzMQkGAAAACZ0EAAAJngQAAAEKBAAADgAAAAafBAAAjhVEZXNjcmliZSAiVmFsaWRhdGluZyB0aGUgbW9kdWxlIG1hbmlmZXN0IiB7CgkkbW9kdWxlUm9vdCA9IChSZXNvbHZlLVBhdGggIiRnbG9iYWw6dGVzdHJvb3RcLi4iKS5QYXRoCgkkbWFuaWZlc3QgPSAoKEdldC1Db250ZW50ICIkbW9kdWxlUm9vdFzDvm5hbWXDvi5wc2QxIikgLWpvaW4gImBuIikgfCBJbnZva2UtRXhwcmVzc2lvbgoJQ29udGV4dCAiQmFzaWMgcmVzb3VyY2VzIHZhbGlkYXRpb24iIHsKCQkkZmlsZXMgPSBHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIgoJCUl0ICJFeHBvcnRzIGFsbCBmdW5jdGlvbnMgaW4gdGhlIHB1YmxpYyBmb2xkZXIiIC1UZXN0Q2FzZXMgQHsgZmlsZXMgPSAkZmlsZXM7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gewoJCQkKCQkJJGZ1bmN0aW9ucyA9IChDb21wYXJlLU9iamVjdCAtUmVmZXJlbmNlT2JqZWN0ICRmaWxlcy5CYXNlTmFtZSAtRGlmZmVyZW5jZU9iamVjdCAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBXaGVyZS1PYmplY3QgU2lkZUluZGljYXRvciAtTGlrZSAnPD0nKS5JbnB1dE9iamVjdAoJCQkkZnVuY3Rpb25zIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJfQoJCUl0ICJFeHBvcnRzIG5vIGZ1bmN0aW9uIHRoYXQgaXNuJ3QgYWxzbyBwcmVzZW50IGluIHRoZSBwdWJsaWMgZm9sZGVyIiAtVGVzdENhc2VzIEB7IGZpbGVzID0gJGZpbGVzOyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsKCQkJJGZ1bmN0aW9ucyA9IChDb21wYXJlLU9iamVjdCAtUmVmZXJlbmNlT2JqZWN0ICRmaWxlcy5CYXNlTmFtZSAtRGlmZmVyZW5jZU9iamVjdCAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBXaGVyZS1PYmplY3QgU2lkZUluZGljYXRvciAtTGlrZSAnPT4nKS5JbnB1dE9iamVjdAoJCQkkZnVuY3Rpb25zIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJfQoJCQoJCUl0ICJFeHBvcnRzIG5vbmUgb2YgaXRzIGludGVybmFsIGZ1bmN0aW9ucyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gewoJCQkkZmlsZXMgPSBHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIioucHMxIgoJCQkkZmlsZXMgfCBXaGVyZS1PYmplY3QgQmFzZU5hbWUgLUluICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCX0KCX0KCQoJQ29udGV4dCAiSW5kaXZpZHVhbCBmaWxlIHZhbGlkYXRpb24iIHsKCQlJdCAiVGhlIHJvb3QgbW9kdWxlIGZpbGUgZXhpc3RzIiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7CgkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJCgkbWFuaWZlc3QuUm9vdE1vZHVsZSkiIHwgU2hvdWxkIC1CZSAkdHJ1ZQoJCX0KCQkKCQlmb3JlYWNoICgkZm9ybWF0IGluICRtYW5pZmVzdC5Gb3JtYXRzVG9Qcm9jZXNzKQoJCXsKCQkJSXQgIlRoZSBmaWxlICRmb3JtYXQgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgZm9ybWF0ID0gJGZvcm1hdCB9IHsKCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGZvcm1hdCIgfCBTaG91bGQgLUJlICR0cnVlCgkJCX0KCQl9CgkJCgkJZm9yZWFjaCAoJHR5cGUgaW4gJG1hbmlmZXN0LlR5cGVzVG9Qcm9jZXNzKQoJCXsKCQkJSXQgIlRoZSBmaWxlICR0eXBlIHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IHR5cGUgPSAkdHlwZSB9IHsKCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJHR5cGUiIHwgU2hvdWxkIC1CZSAkdHJ1ZQoJCQl9CgkJfQoJCQoJCWZvcmVhY2ggKCRhc3NlbWJseSBpbiAkbWFuaWZlc3QuUmVxdWlyZWRBc3NlbWJsaWVzKQoJCXsKICAgICAgICAgICAgaWYgKCRhc3NlbWJseSAtbGlrZSAiKi5kbGwiKSB7CiAgICAgICAgICAgICAgICBJdCAiVGhlIGZpbGUgJGFzc2VtYmx5IHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IGFzc2VtYmx5ID0gJGFzc2VtYmx5IH0gewogICAgICAgICAgICAgICAgICAgIFRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGFzc2VtYmx5IiB8IFNob3VsZCAtQmUgJHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIEl0ICJUaGUgZmlsZSAkYXNzZW1ibHkgc2hvdWxkIGxvYWQgZnJvbSB0aGUgR0FDIiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgYXNzZW1ibHkgPSAkYXNzZW1ibHkgfSB7CiAgICAgICAgICAgICAgICAgICAgeyBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lICRhc3NlbWJseSB9IHwgU2hvdWxkIC1Ob3QgLVRocm93CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgkJCgkJZm9yZWFjaCAoJHRhZyBpbiAkbWFuaWZlc3QuUHJpdmF0ZURhdGEuUFNEYXRhLlRhZ3MpCgkJewoJCQlJdCAiVGFncyBzaG91bGQgaGF2ZSBubyBzcGFjZXMgaW4gbmFtZSIgLVRlc3RDYXNlcyBAeyB0YWcgPSAkdGFnIH0gewoJCQkJJHRhZyAtbWF0Y2ggIiAiIHwgU2hvdWxkIC1CZSAkZmFsc2UKCQkJfQoJCX0KCX0KfQEJoAQAAAmhBAAABqIEAAASTWFuaWZlc3QuVGVzdHMucHMxBqMEAAB5L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsL01hbmlmZXN0LlRlc3RzLnBzMQkGAAAACaUEAAAJpgQAAAELBAAADgAAAAanBAAA7QhbQ21kbGV0QmluZGluZygpXQpQYXJhbSAoCglbc3dpdGNoXQoJJFNraXBUZXN0LAoJCglbc3RyaW5nW11dCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpCikKCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0KCiRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplciA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdAoKRGVzY3JpYmUgJ0ludm9raW5nIFBTU2NyaXB0QW5hbHl6ZXIgYWdhaW5zdCBjb21tYW5kYmFzZScgewoJJGNvbW1hbmRGaWxlcyA9IGZvcmVhY2ggKCRwYXRoIGluICRDb21tYW5kUGF0aCkgewogICAgICAgIEdldC1DaGlsZEl0ZW0gLVBhdGggJHBhdGggLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiCiAgICB9Cgkkc2NyaXB0QW5hbHl6ZXJSdWxlcyA9IEdldC1TY3JpcHRBbmFseXplclJ1bGUKCQoJZm9yZWFjaCAoJGZpbGUgaW4gJGNvbW1hbmRGaWxlcykKCXsKCQlDb250ZXh0ICJBbmFseXppbmcgJCgkZmlsZS5CYXNlTmFtZSkiIHsKCQkJJGFuYWx5c2lzID0gSW52b2tlLVNjcmlwdEFuYWx5emVyIC1QYXRoICRmaWxlLkZ1bGxOYW1lIC1FeGNsdWRlUnVsZSBQU0F2b2lkVHJhaWxpbmdXaGl0ZXNwYWNlLCBQU1Nob3VsZFByb2Nlc3MKCQkJCgkJCWZvckVhY2ggKCRydWxlIGluICRzY3JpcHRBbmFseXplclJ1bGVzKQoJCQl7CgkJCQlJdCAiU2hvdWxkIHBhc3MgJHJ1bGUiIC1UZXN0Q2FzZXMgQHsgYW5hbHlzaXMgPSAkYW5hbHlzaXM7IHJ1bGUgPSAkcnVsZSB9IHsKCQkJCQlJZiAoJGFuYWx5c2lzLlJ1bGVOYW1lIC1jb250YWlucyAkcnVsZSkKCQkJCQl7CgkJCQkJCSRhbmFseXNpcyB8IFdoZXJlLU9iamVjdCBSdWxlTmFtZSAtRVEgJHJ1bGUgLW91dHZhcmlhYmxlIGZhaWx1cmVzIHwgRm9yRWFjaC1PYmplY3QgeyAkbnVsbCA9ICRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplci5BZGQoJF8pIH0KCQkJCQkJCgkJCQkJCTEgfCBTaG91bGQgLUJlIDAKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJMCB8IFNob3VsZCAtQmUgMAoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KfQEJqAQAAAmpBAAABqoEAAAaUFNTY3JpcHRBbmFseXplci5UZXN0cy5wczEGqwQAAIEBL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsL1BTU2NyaXB0QW5hbHl6ZXIuVGVzdHMucHMxCQYAAAAJrQQAAAmuBAAAAQwEAAAOAAAABq8EAADDByRleGNlcHRpb25zID0gQHsgfQoKPCMKQSBsaXN0IG9mIGVudHJpZXMgdGhhdCBNQVkgYmUgaW4gdGhlIGxhbmd1YWdlIGZpbGVzLCB3aXRob3V0IGNhdXNpbmcgdGhlIHRlc3RzIHRvIGZhaWwuClRoaXMgaXMgY29tbW9ubHkgdXNlZCBpbiBtb2R1bGVzIHRoYXQgZ2VuZXJhdGUgbG9jYWxpemVkIG1lc3NhZ2VzIHN0cmFpZ2h0IGZyb20gQyMuClNwZWNpZnkgdGhlIGZ1bGwga2V5IGFzIGl0IGlzIHdyaXR0ZW4gaW4gdGhlIGxhbmd1YWdlIGZpbGVzLCBkbyBub3QgcHJlcGVuZCB0aGUgbW9kdWxlbmFtZSwKYXMgeW91IHdvdWxkIGhhdmUgdG8gaW4gQyMgY29kZS4KCkV4YW1wbGU6CiRleGNlcHRpb25zWydMZWdhbFN1cnBsdXMnXSA9IEAoCiAgICAnRXhjZXB0aW9uLlN0cmVhbXMuRmFpbGVkQ3JlYXRlJwogICAgJ0V4Y2VwdGlvbi5TdHJlYW1zLkZhaWxlZERpc3Bvc2UnCikKIz4KJGV4Y2VwdGlvbnNbJ0xlZ2FsU3VycGx1cyddID0gQCgKCikKPCMKQSBsaXN0IG9mIGVudHJpZXMgdGhhdCBNQVkgYmUgdXNlZCB3aXRob3V0IG5lZWRpbmcgdG8gaGF2ZSB0ZXh0IGRlZmluZWQuClRoaXMgaXMgaW50ZW5kZWQgZm9yIG1vZHVsZXMgKHJlLSl1c2luZyBzdHJpbmdzIHByb3ZpZGVkIGJ5IGFub3RoZXIgbW9kdWxlCiM+CiRleGNlcHRpb25zWydOb1RleHROZWVkZWQnXSA9IEAoCgknVmFsaWRhdGUuRlNQYXRoJwoJJ1ZhbGlkYXRlLkZTUGF0aC5GaWxlJwoJJ1ZhbGlkYXRlLkZTUGF0aC5GaWxlT3JQYXJlbnQnCgknVmFsaWRhdGUuRlNQYXRoLkZvbGRlcicKCSdWYWxpZGF0ZS5QYXRoJwoJJ1ZhbGlkYXRlLlBhdGguQ29udGFpbmVyJwoJJ1ZhbGlkYXRlLlBhdGguTGVhZicKCSdWYWxpZGF0ZS5UaW1lU3Bhbi5Qb3NpdGl2ZScKCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUnCgknVmFsaWRhdGUuVXJpLkFic29sdXRlLkZpbGUnCgknVmFsaWRhdGUuVXJpLkFic29sdXRlLkh0dHBzJwopCgokZXhjZXB0aW9ucwEJsAQAAAmxBAAABrIEAAAWc3RyaW5ncy5FeGNlcHRpb25zLnBzMQazBAAAfS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZ2VuZXJhbC9zdHJpbmdzLkV4Y2VwdGlvbnMucHMxCQYAAAAJtQQAAAm2BAAAAQ0EAAAOAAAABrcEAAD9BzwjCi5ERVNDUklQVElPTgogICAgVGhpcyB0ZXN0IHZlcmlmaWVzLCB0aGF0IGFsbCBzdHJpbmdzIHRoYXQgaGF2ZSBiZWVuIHVzZWQsCiAgICBhcmUgbGlzdGVkIGluIHRoZSBsYW5ndWFnZSBmaWxlcyBhbmQgdGh1cyBoYXZlIGEgbWVzc2FnZSBiZWluZyBkaXNwbGF5ZWQuCgogICAgSXQgYWxzbyBjaGVja3MsIHdoZXRoZXIgdGhlIGxhbmd1YWdlIGZpbGVzIGhhdmUgb3JwaGFuZWQgZW50cmllcyB0aGF0IG5lZWQgY2xlYW5pbmcgdXAuCiM+CgoKCkRlc2NyaWJlICJUZXN0aW5nIGxvY2FsaXphdGlvbiBzdHJpbmdzIiB7CgkkbW9kdWxlUm9vdCA9IChHZXQtTW9kdWxlIMO+bmFtZcO+KS5Nb2R1bGVCYXNlCgkkc3RyaW5nc1Jlc3VsdHMgPSBFeHBvcnQtUFNNRFN0cmluZyAtTW9kdWxlUm9vdCAkbW9kdWxlUm9vdAoJJGV4Y2VwdGlvbnMgPSAmICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcc3RyaW5ncy5FeGNlcHRpb25zLnBzMSIKCQoJZm9yZWFjaCAoJHN0cmluZ0VudHJ5IGluICRzdHJpbmdzUmVzdWx0cykgewogICAgICAgIGlmICgkc3RyaW5nRW50cnkuU3RyaW5nIC1lcSAia2V5IikgeyBjb250aW51ZSB9ICMgU2tpcHBpbmcgdGhlIHRlbXBsYXRlIGRlZmF1bHQgZW50cnkKCQlJdCAiU2hvdWxkIGJlIHVzZWQgJiBoYXZlIHRleHQ6ICQoJHN0cmluZ0VudHJ5LlN0cmluZykiIC1UZXN0Q2FzZXMgQHsgc3RyaW5nRW50cnkgPSAkc3RyaW5nRW50cnk7IGV4Y2VwdGlvbnMgPSAkZXhjZXB0aW9ucyB9IHsKICAgICAgICAgICAgaWYgKCRleGNlcHRpb25zLkxlZ2FsU3VycGx1cyAtbm90Y29udGFpbnMgJHN0cmluZ0VudHJ5LlN0cmluZykgewogICAgICAgICAgICAgICAgJHN0cmluZ0VudHJ5LlN1cnBsdXMgfCBTaG91bGQgLUJlRmFsc2UKCQkJfQoJCQlpZiAoJGV4Y2VwdGlvbnMuTm9UZXh0TmVlZGVkIC1ub3Rjb250YWlucyAkc3RyaW5nRW50cnkuU3RyaW5nKSB7CgkJCQkkc3RyaW5nRW50cnkuVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJCX0KICAgICAgICB9CiAgICB9Cn0BCbgEAAAJuQQAAAa6BAAAEXN0cmluZ3MuVGVzdHMucHMxBrsEAAB4L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsL3N0cmluZ3MuVGVzdHMucHMxCQYAAAAJvQQAAAm+BAAAARgEAAAHAAAACb8EAAABAAAAAQAAAAEZBAAABwAAAAkLAAAAAAAAAAAAAAABHQQAAAcAAAAJCwAAAAAAAAAAAAAAAR4EAAAHAAAACQsAAAAAAAAAAAAAAAEgBAAABwAAAAkLAAAAAAAAAAAAAAABIQQAAAcAAAAJCwAAAAAAAAAAAAAAASUEAAAHAAAACQsAAAAA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</BA>
            </MS>
          </Obj>
        </LST>
      </Obj>
      <I32 N="Generation">1</I32>
    </Props>
    <MS>
      <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGUMAAAABE5hbWUEVHlwZQdWZXJzaW9uC0Rlc2NyaXB0aW9uBkF1dGhvcglDcmVhdGVkT24EVGFncwpQYXJhbWV0ZXJzB1NjcmlwdHMLUGFyYW1ldGVyczIIQ2hpbGRyZW4KR2VuZXJhdGlvbgEEAwEBAAMDAwMDAClQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlVHlwZQIAAAAOU3lzdGVtLlZlcnNpb24Nf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXYACU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdCwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXYgCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlci5QYXJhbWV0ZXJCYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQgCAAAABgMAAAAaU2VjcmV0TWFuYWdlbWVudC5FeHRlbnNpb24F/P///ylQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlVHlwZQEAAAAHdmFsdWVfXwAIAgAAAAEAAAAJBQAAAAYGAAAAJ0V4dGVuc2lvbiBtb2R1bGUgZm9yIFNlY3JldCBNYW5hZ2VtZW50LgYHAAAAElNhc2NoYSBTcGlla2VybWFubgAAqrrVHduICQgAAAAJCQAAAAkKAAAACQsAAAAJDAAAAAEAAAAEBQAAAA5TeXN0ZW0uVmVyc2lvbgQAAAAGX01ham9yBl9NaW5vcgZfQnVpbGQJX1JldmlzaW9uAAAAAAgICAgBAAAAAAAAAAAAAAAAAAAABAgAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgJDQAAAAIAAAAAAAAAAQkAAAAIAAAACQ4AAAAFAAAABQAAAAQKAAAAgAJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dBAAAAAdWZXJzaW9uCENvbXBhcmVyCEhhc2hTaXplDUtleVZhbHVlUGFpcnMAAwADCBZTeXN0ZW0uT3JkaW5hbENvbXBhcmVyCIQCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dW10MAAAACQ8AAAARAAAACRAAAAAECwAAAIgCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlci5QYXJhbWV0ZXJCYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dAwAAAAdWZXJzaW9uCENvbXBhcmVyCEhhc2hTaXplAAMACBZTeXN0ZW0uT3JkaW5hbENvbXBhcmVyCAAAAAAJDwAAAAAAAAAEDAAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkSAAAAAQAAAAEAAAARDQAAAAIAAAAGEwAAAAZtb2R1bGUGFAAAAAtwc2ZyYW1ld29yaxEOAAAACAAAAAYVAAAABG5hbWUGFgAAAA5mdW5jdGlvblByZWZpeAYXAAAABmF1dGhvcgYYAAAAB2NvbXBhbnkGGQAAAAtkZXNjcmlwdGlvbg0DBA8AAAAWU3lzdGVtLk9yZGluYWxDb21wYXJlcgEAAAALX2lnbm9yZUNhc2UAAQEHEAAAAAABAAAADAAAAAOCAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdCwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQTm////ggJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0CAAAAA2tleQV2YWx1ZQEELFBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0AgAAAAYbAAAAC3BzZnJhbWV3b3JrCRwAAAAB4////+b///8GHgAAAAR5ZWFyCR8AAAAB4P///+b///8GIQAAAARndWlkCSIAAAAB3f///+b///8GJAAAAARkYXRlCSUAAAAB2v///+b///8GJwAAABdzZWNyZXRNYW5hZ2VtZW50VmVyc2lvbgkoAAAAAdf////m////BioAAAANZ3VpZEV4dGVuc2lvbgkrAAAAAdT////m////Bi0AAAAKcHNmdmVyc2lvbgkuAAAAAdH////m////BjAAAAAUZHluYW1pY3NjcmlwdF84NDQxMTIJMQAAAAHO////5v///wYzAAAACnRlc3Rmb2xkZXIJNAAAAAHL////5v///wY2AAAADmd1aWRSb290TW9kdWxlCTcAAAAByP///+b///8GOQAAAAxwZXN0ZXJjb25maWcJOgAAAAHF////5v///wY8AAAAFGR5bmFtaWNzY3JpcHRfMzk0NDMyCT0AAAAHEgAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAk+AAAADQMMPwAAAGJTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLCBWZXJzaW9uPTcuMi4xMC41MDAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQUcAAAALFBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0AgAAAAROYW1lC1NjcmlwdEJsb2NrAQQ7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXI/AAAAAgAAAAkbAAAACUEAAAABHwAAABwAAAAJHgAAAAlDAAAAASIAAAAcAAAACSEAAAAJRQAAAAElAAAAHAAAAAkkAAAACUcAAAABKAAAABwAAAAJJwAAAAlJAAAAASsAAAAcAAAACSoAAAAJSwAAAAEuAAAAHAAAAAktAAAACU0AAAABMQAAABwAAAAJMAAAAAlPAAAAATQAAAAcAAAACTMAAAAJUQAAAAE3AAAAHAAAAAk2AAAACVMAAAABOgAAABwAAAAJOQAAAAlVAAAAAT0AAAAcAAAACTwAAAAJVwAAAAU+AAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJWAAAAAZZAAAAGVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74GWgAAABovU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvgZbAAAAAsO+CVwAAAAJXQAAAAVBAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AT8AAAAGXgAAADIKCQkJKEdldC1Nb2R1bGUgUFNGcmFtZXdvcmspLlZlcnNpb24uVG9TdHJpbmcoKQoJCQFDAAAAQQAAAAZfAAAAHgoJCQlHZXQtRGF0ZSAtRm9ybWF0ICJ5eXl5IgoJCQFFAAAAQQAAAAZgAAAAKgoJCQlbU3lzdGVtLkd1aWRdOjpOZXdHdWlkKCkuVG9TdHJpbmcoKQoJCQFHAAAAQQAAAAZhAAAAJAoJCQlHZXQtRGF0ZSAtRm9ybWF0ICJ5eXl5LU1NLWRkIgoJCQFJAAAAQQAAAAZiAAAATAoJCQkoR2V0LU1vZHVsZSBNaWNyb3NvZnQuUG93ZXJzaGVsbC5TZWNyZXRNYW5hZ2VtZW50KS5WZXJzaW9uLlRvU3RyaW5nKCkKCQkBSwAAAEEAAAAGYwAAACoKCQkJW1N5c3RlbS5HdWlkXTo6TmV3R3VpZCgpLlRvU3RyaW5nKCkKCQkBTQAAAEEAAAAGZAAAADIKCQkJKEdldC1Nb2R1bGUgUFNGcmFtZXdvcmspLlZlcnNpb24uVG9TdHJpbmcoKQoJCQFPAAAAQQAAAAZlAAAAJAoJCSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5LU1NLWRkJwoJCQFRAAAAQQAAAAZmAAAABAoKCQkBUwAAAEEAAAAGZwAAACoKCQkJW1N5c3RlbS5HdWlkXTo6TmV3R3VpZCgpLlRvU3RyaW5nKCkKCQkBVQAAAEEAAAAGaAAAAAQKCgkJAVcAAABBAAAABmkAAAAkCgkJIEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQnCgkJAVgAAAAMAAAACWoAAAAEAAAABAAAAAFcAAAACAAAAAlrAAAAAQAAAAEAAAABXQAAAAgAAAAJbAAAAAAAAAAAAAAAB2oAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJbQAAAAluAAAACW8AAAAJcAAAABFrAAAABAAAAAZxAAAABG5hbWUNAxFsAAAAAAAAAAFtAAAAPgAAAAlyAAAABnMAAAAFYnVpbGQGdAAAACAvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9idWlsZAlbAAAACXYAAAAJdwAAAAFuAAAAPgAAAAl4AAAABnkAAAAZU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvgZ6AAAANC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74JWwAAAAl8AAAACX0AAAAFbwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGfgAAALAITUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgEJfwAAAAmAAAAABoEAAAAHTElDRU5TRQaCAAAAIi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L0xJQ0VOU0UJWwAAAAmEAAAACYUAAAABcAAAAG8AAAAGhgAAAOMJIyBEZXNjcmlwdGlvbgoKSW5zZXJ0IGEgdXNlZnVsIGRlc2NyaXB0aW9uIGZvciB0aGUgw75uYW1lw74gcHJvamVjdCBoZXJlLgoKUmVtZW1iZXIsIGl0J3MgdGhlIGZpcnN0IHRoaW5nIGEgdmlzaXRvciB3aWxsIHNlZS4KCiMgUHJvamVjdCBTZXR1cCBJbnN0cnVjdGlvbnMKIyMgV29ya2luZyB3aXRoIHRoZSBsYXlvdXQKCi0gRG9uJ3QgdG91Y2ggdGhlIHBzbTEgZmlsZQotIFBsYWNlIGZ1bmN0aW9ucyB5b3UgZXhwb3J0IGluIGBmdW5jdGlvbnMvYCAoY2FuIGhhdmUgc3ViZm9sZGVycykKLSBQbGFjZSBwcml2YXRlL2ludGVybmFsIGZ1bmN0aW9ucyBpbnZpc2libGUgdG8gdGhlIHVzZXIgaW4gYGludGVybmFsL2Z1bmN0aW9uc2AgKGNhbiBoYXZlIHN1YmZvbGRlcnMpCi0gRG9uJ3QgYWRkIGNvZGUgZGlyZWN0bHkgdG8gdGhlIGBwb3N0aW1wb3J0LnBzMWAgb3IgYHByZWltcG9ydC5wczFgLgogIFRob3NlIGZpbGVzIGFyZSBkZXNpZ25lZCB0byBpbXBvcnQgb3RoZXIgZmlsZXMgb25seS4KLSBXaGVuIGFkZGluZyBmaWxlcyAmIGZvbGRlcnMsIG1ha2Ugc3VyZSB0aGV5IGFyZSBjb3ZlcmVkIGJ5IGVpdGhlciBgcG9zdGltcG9ydC5wczFgIG9yIGBwcmVpbXBvcnQucHMxYC4KICBUaGlzIGFkZHMgdGhlbSB0byBib3RoIHRoZSBpbXBvcnQgYW5kIHRoZSBidWlsZCBzZXF1ZW5jZS4KCiMjIFNldHRpbmcgdXAgQ0kvQ0QKCj4gVG8gY3JlYXRlIGEgUFIgdmFsaWRhdGlvbiBwaXBlbGluZSwgc2V0IHVwIHRhc2tzIGxpa2UgdGhpczoKCi0gSW5zdGFsbCBQcmVyZXF1aXNpdGVzIChQb3dlclNoZWxsIFRhc2s7IFZTVFMtUHJlcmVxdWlzaXRlcy5wczEpCi0gVmFsaWRhdGUgKFBvd2VyU2hlbGwgVGFzazsgVlNUUy1WYWxpZGF0ZS5wczEpCi0gUHVibGlzaCBUZXN0IFJlc3VsdHMgKFB1Ymxpc2ggVGVzdCBSZXN1bHRzOyBOVW5pdCBmb3JtYXQ7IFJ1biBubyBtYXR0ZXIgd2hhdCkKCj4gVG8gY3JlYXRlIGEgYnVpbGQvcHVibGlzaCBwaXBlbGluZSwgc2V0IHVwIHRhc2tzIGxpa2UgdGhpczoKCi0gSW5zdGFsbCBQcmVyZXF1aXNpdGVzIChQb3dlclNoZWxsIFRhc2s7IFZTVFMtUHJlcmVxdWlzaXRlcy5wczEpCi0gVmFsaWRhdGUgKFBvd2VyU2hlbGwgVGFzazsgVlNUUy1WYWxpZGF0ZS5wczEpCi0gQnVpbGQgKFBvd2VyU2hlbGwgVGFzazsgVlNUUy1CdWlsZC5wczEpCi0gUHVibGlzaCBUZXN0IFJlc3VsdHMgKFB1Ymxpc2ggVGVzdCBSZXN1bHRzOyBOVW5pdCBmb3JtYXQ7IFJ1biBubyBtYXR0ZXIgd2hhdCkKAQmHAAAACYgAAAAGiQAAAAlSRUFETUUubWQGigAAACQvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9SRUFETUUubWQJWwAAAAmMAAAACY0AAAABcgAAAAwAAAAJjgAAAAYAAAAGAAAAAXYAAAAIAAAACWwAAAAAAAAAAAAAAAF3AAAACAAAAAlsAAAAAAAAAAAAAAABeAAAAAwAAAAJkAAAAAsAAAALAAAAAXwAAAAIAAAACZEAAAABAAAAAQAAAAF9AAAACAAAAAlsAAAAAAAAAAAAAAABfwAAAAgAAAAJkwAAAAEAAAABAAAAAYAAAAAIAAAACZQAAAABAAAAAQAAAAGEAAAACAAAAAlsAAAAAAAAAAAAAAABhQAAAAgAAAAJbAAAAAAAAAAAAAAAAYcAAAAIAAAACZYAAAABAAAAAQAAAAGIAAAACAAAAAlsAAAAAAAAAAAAAAABjAAAAAgAAAAJbAAAAAAAAAAAAAAAAY0AAAAIAAAACWwAAAAAAAAAAAAAAAeOAAAAAAEAAAAIAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACZgAAAAJmQAAAAmaAAAACZsAAAAJnAAAAAmdAAAADQIHkAAAAAABAAAAEAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmeAAAACZ8AAAAJoAAAAAmhAAAACaIAAAAJowAAAAmkAAAACaUAAAAJpgAAAAmnAAAACagAAAANBRGRAAAABAAAAAapAAAABG5hbWUNAxGTAAAABAAAAAaqAAAABmF1dGhvcg0DEZQAAAAEAAAABqsAAAAEeWVhcg0DEZYAAAAEAAAABqwAAAAEbmFtZQ0DAZgAAABvAAAABq0AAACGByMgU2V0dGluZyB1cCB0aGUgcmVsZWFzZSBwaXBlbGluZToKCiMjIFByZWxpbWluYXJ5CgpTZXR0aW5nIHVwIGEgcmVsZWFzZSBwaXBlbGluZSwgc2V0IHRoZSB0cmlnZ2VyIHRvIGRvIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gYWdhaW5zdCB0aGUgbWFzdGVyIGJyYW5jaCBvbmx5LgpJbiBTdGFnZSAxIHNldCB1cCBhIHRhc2tzZXF1ZW5jZToKCiMjIDEpIFBvd2VyU2hlbGwgVGFzazogUHJlcmVxdWlzaXRlcwoKSGF2ZSBpdCBleGVjdXRlIGB2c3RzLXByZXJlcXVpc2l0ZXMucHMxYAoKIyMgMikgUG93ZXJTaGVsbCBUYXNrOiBWYWxpZGF0ZQoKSGF2ZSBpdCBleGVjdXRlIGB2c3RzLXByZXJlcXVpc2l0ZXMucHMxYAoKIyMgMykgUG93ZXJTaGVsbCBUYXNrOiBCdWlsZAoKSGF2ZSBpdCBleGVjdXRlIGB2c3RzLWJ1aWxkLnBzMWAuClRoZSB0YXNrIHJlcXVpcmVzIHR3byBwYXJhbWV0ZXJzOgoKIC0gYC1Mb2NhbFJlcG9gCiAtIGAtV29ya2luZ0RpcmVjdG9yeSAkKFN5c3RlbS5EZWZhdWx0V29ya2luZ0RpcmVjdG9yeSkvX++/vW5hbWXvv71gCgojIyA0KSBQdWJsaXNoIFRlc3QgUmVzdWx0cwoKQ29uZmlndXJlIHRhc2sgdG8gcGljayB1cCBudW5pdCB0eXBlIG9mIHRlc3RzIChyYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBqdW5pdCkuCkNvbmZpZ3VyZSB0YXNrIHRvIGV4ZWN1dGUsIGV2ZW4gaWYgcHJldmlvdXMgc3RlcHMgZmFpbGVkIG9yIHRoZSB0YXNrIHNlcXVlbmNlIHdhcyBjYW5jZWxsZWQuCgojIyA1KSBQb3dlclNoZWxsIFRhc2s6IFBhY2thZ2UgRnVuY3Rpb24KCkhhdmUgaXQgZXhlY3V0ZSBgdnN0cy1wYWNrYWdlRnVuY3Rpb24ucHMxYAoKIyMgNikgQXp1cmUgRnVuY3Rpb24gQXBwRGVwbG95CgpDb25maWd1cmUgdG8gcHVibGlzaCB0byB0aGUgY29ycmVjdCBmdW5jdGlvbiBhcHAuAQmuAAAACa8AAAAGsAAAABdBenVyZUZ1bmN0aW9uLnJlYWRtZS5tZAaxAAAAOC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2J1aWxkL0F6dXJlRnVuY3Rpb24ucmVhZG1lLm1kCVsAAAAJswAAAAm0AAAAAZkAAABvAAAABrUAAADGJDwjClRoaXMgc2NyaXB0IHB1Ymxpc2hlcyB0aGUgbW9kdWxlIHRvIHRoZSBnYWxsZXJ5LgpJdCBleHBlY3RzIGFzIGlucHV0IGFuIEFwaUtleSBhdXRob3JpemVkIHRvIHB1Ymxpc2ggdGhlIG1vZHVsZS4KCkluc2VydCBhbnkgYnVpbGQgc3RlcHMgeW91IG1heSBuZWVkIHRvIHRha2UgYmVmb3JlIHB1Ymxpc2hpbmcgaXQgaGVyZS4KIz4KcGFyYW0gKAoJJEFwaUtleSwKCgkkV29ya2luZ0RpcmVjdG9yeSwKCgkkUmVwb3NpdG9yeSA9ICdQU0dhbGxlcnknLAoKCVtzd2l0Y2hdCgkkTG9jYWxSZXBvLAoKCVtzd2l0Y2hdCgkkU2tpcFB1Ymxpc2gsCgoJW3N3aXRjaF0KCSRBdXRvVmVyc2lvbgopCgojcmVnaW9uIEhhbmRsZSBXb3JraW5nIERpcmVjdG9yeSBEZWZhdWx0cwppZiAoLW5vdCAkV29ya2luZ0RpcmVjdG9yeSkKewoJaWYgKCRlbnY6UkVMRUFTRV9QUklNQVJZQVJUSUZBQ1RTT1VSQ0VBTElBUykKCXsKCQkkV29ya2luZ0RpcmVjdG9yeSA9IEpvaW4tUGF0aCAtUGF0aCAkZW52OlNZU1RFTV9ERUZBVUxUV09SS0lOR0RJUkVDVE9SWSAtQ2hpbGRQYXRoICRlbnY6UkVMRUFTRV9QUklNQVJZQVJUSUZBQ1RTT1VSQ0VBTElBUwoJfQoJZWxzZSB7ICRXb3JraW5nRGlyZWN0b3J5ID0gJGVudjpTWVNURU1fREVGQVVMVFdPUktJTkdESVJFQ1RPUlkgfQp9CmlmICgtbm90ICRXb3JraW5nRGlyZWN0b3J5KSB7ICRXb3JraW5nRGlyZWN0b3J5ID0gU3BsaXQtUGF0aCAkUFNTY3JpcHRSb290IH0KI2VuZHJlZ2lvbiBIYW5kbGUgV29ya2luZyBEaXJlY3RvcnkgRGVmYXVsdHMKCiMgUHJlcGFyZSBwdWJsaXNoIGZvbGRlcgpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkNyZWF0aW5nIGFuZCBwb3B1bGF0aW5nIHB1Ymxpc2hpbmcgZGlyZWN0b3J5IgokcHVibGlzaERpciA9IE5ldy1JdGVtIC1QYXRoICRXb3JraW5nRGlyZWN0b3J5IC1OYW1lIHB1Ymxpc2ggLUl0ZW1UeXBlIERpcmVjdG9yeSAtRm9yY2UKQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVzDvm5hbWXDviIgLURlc3RpbmF0aW9uICRwdWJsaXNoRGlyLkZ1bGxOYW1lIC1SZWN1cnNlIC1Gb3JjZQoKI3JlZ2lvbiBHYXRoZXIgdGV4dCBkYXRhIHRvIGNvbXBpbGUKJHRleHQgPSBAKCkKJHByb2Nlc3NlZCA9IEAoKQoKIyBHYXRoZXIgU3R1ZmYgdG8gcnVuIGJlZm9yZQpmb3JlYWNoICgkZmlsZVBhdGggaW4gKCYgIiQoJFBTU2NyaXB0Um9vdClcLi5cw75uYW1lw75caW50ZXJuYWxcc2NyaXB0c1xwcmVpbXBvcnQucHMxIikpCnsKCWlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRmaWxlUGF0aCkpIHsgY29udGludWUgfQoKCSRpdGVtID0gR2V0LUl0ZW0gJGZpbGVQYXRoCglpZiAoJGl0ZW0uUFNJc0NvbnRhaW5lcikgeyBjb250aW51ZSB9CglpZiAoJGl0ZW0uRnVsbE5hbWUgLWluICRwcm9jZXNzZWQpIHsgY29udGludWUgfQoJJHRleHQgKz0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJGl0ZW0uRnVsbE5hbWUpCgkkcHJvY2Vzc2VkICs9ICRpdGVtLkZ1bGxOYW1lCn0KCiMgR2F0aGVyIGNvbW1hbmRzCkdldC1DaGlsZEl0ZW0gLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXMO+bmFtZcO+XGludGVybmFsXGZ1bmN0aW9uc1wiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIioucHMxIiB8IEZvckVhY2gtT2JqZWN0IHsKCSR0ZXh0ICs9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRfLkZ1bGxOYW1lKQp9CkdldC1DaGlsZEl0ZW0gLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cZnVuY3Rpb25zLnNoYXJlZGludGVybmFsXCIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiIHwgRm9yRWFjaC1PYmplY3QgewoJJHRleHQgKz0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJF8uRnVsbE5hbWUpCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBWZXJib3NlIC1NZXNzYWdlICIgIzMgSW1wb3J0aW5nIGNvbnRlbnQgZnJvbSAkKCRfLkZ1bGxOYW1lKSIKfQpHZXQtQ2hpbGRJdGVtIC1QYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVzDvm5hbWXDvlxmdW5jdGlvbnNcIiAtUmVjdXJzZSAtRmlsZSAtRmlsdGVyICIqLnBzMSIgfCBGb3JFYWNoLU9iamVjdCB7CgkkdGV4dCArPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkXy5GdWxsTmFtZSkKfQoKIyBHYXRoZXIgc3R1ZmYgdG8gcnVuIGFmdGVyd2FyZHMKZm9yZWFjaCAoJGZpbGVQYXRoIGluICgmICIkKCRQU1NjcmlwdFJvb3QpXC4uXMO+bmFtZcO+XGludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEiKSkKewoJaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJGZpbGVQYXRoKSkgeyBjb250aW51ZSB9CgoJJGl0ZW0gPSBHZXQtSXRlbSAkZmlsZVBhdGgKCWlmICgkaXRlbS5QU0lzQ29udGFpbmVyKSB7IGNvbnRpbnVlIH0KCWlmICgkaXRlbS5GdWxsTmFtZSAtaW4gJHByb2Nlc3NlZCkgeyBjb250aW51ZSB9CgkkdGV4dCArPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkaXRlbS5GdWxsTmFtZSkKCSRwcm9jZXNzZWQgKz0gJGl0ZW0uRnVsbE5hbWUKfQojZW5kcmVnaW9uIEdhdGhlciB0ZXh0IGRhdGEgdG8gY29tcGlsZQoKI3JlZ2lvbiBVcGRhdGUgdGhlIHBzbTEgZmlsZQokZmlsZURhdGEgPSBHZXQtQ29udGVudCAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw75cw75uYW1lw74ucHNtMSIgLVJhdwokZmlsZURhdGEgPSAkZmlsZURhdGEuUmVwbGFjZSgnIjx3YXMgbm90IGNvbXBpbGVkPiInLCAnIjx3YXMgY29tcGlsZWQ+IicpCiRmaWxlRGF0YSA9ICRmaWxlRGF0YS5SZXBsYWNlKCciPGNvbXBpbGUgY29kZSBpbnRvIGhlcmU+IicsICgkdGV4dCAtam9pbiAiYG5gbiIpKQpbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbFRleHQoIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXMO+bmFtZcO+XMO+bmFtZcO+LnBzbTEiLCAkZmlsZURhdGEsIFtTeXN0ZW0uVGV4dC5FbmNvZGluZ106OlVURjgpCiNlbmRyZWdpb24gVXBkYXRlIHRoZSBwc20xIGZpbGUKCiNyZWdpb24gVXBkYXRpbmcgdGhlIE1vZHVsZSBWZXJzaW9uCmlmICgkQXV0b1ZlcnNpb24pCnsKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiVXBkYXRpbmcgbW9kdWxlIHZlcnNpb24gbnVtYmVycy4iCgl0cnkgeyBbdmVyc2lvbl0kcmVtb3RlVmVyc2lvbiA9IChGaW5kLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLVJlcG9zaXRvcnkgJFJlcG9zaXRvcnkgLUVycm9yQWN0aW9uIFN0b3ApLlZlcnNpb24gfQoJY2F0Y2gKCXsKCQlTdG9wLVBTRkZ1bmN0aW9uIC1NZXNzYWdlICJGYWlsZWQgdG8gYWNjZXNzICQoJFJlcG9zaXRvcnkpIiAtRW5hYmxlRXhjZXB0aW9uICR0cnVlIC1FcnJvclJlY29yZCAkXwoJfQoJaWYgKC1ub3QgJHJlbW90ZVZlcnNpb24pCgl7CgkJU3RvcC1QU0ZGdW5jdGlvbiAtTWVzc2FnZSAiQ291bGRuJ3QgZmluZCDDvm5hbWXDviBvbiByZXBvc2l0b3J5ICQoJFJlcG9zaXRvcnkpIiAtRW5hYmxlRXhjZXB0aW9uICR0cnVlCgl9CgkkbmV3QnVpbGROdW1iZXIgPSAkcmVtb3RlVmVyc2lvbi5CdWlsZCArIDEKCVt2ZXJzaW9uXSRsb2NhbFZlcnNpb24gPSAoSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw75cw75uYW1lw74ucHNkMSIpLk1vZHVsZVZlcnNpb24KCVVwZGF0ZS1Nb2R1bGVNYW5pZmVzdCAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw75cw75uYW1lw74ucHNkMSIgLU1vZHVsZVZlcnNpb24gIiQoJGxvY2FsVmVyc2lvbi5NYWpvcikuJCgkbG9jYWxWZXJzaW9uLk1pbm9yKS4kKCRuZXdCdWlsZE51bWJlcikiCn0KI2VuZHJlZ2lvbiBVcGRhdGluZyB0aGUgTW9kdWxlIFZlcnNpb24KCiNyZWdpb24gUHVibGlzaAppZiAoJFNraXBQdWJsaXNoKSB7IHJldHVybiB9CmlmICgkTG9jYWxSZXBvKQp7CgkjIERlcGVuZGVuY2llcyBtdXN0IGdvIGZpcnN0CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkNyZWF0aW5nIE51Z2V0IFBhY2thZ2UgZm9yIG1vZHVsZTogUFNGcmFtZXdvcmsiCglOZXctUFNNRE1vZHVsZU51Z2V0UGFja2FnZSAtTW9kdWxlUGF0aCAoR2V0LU1vZHVsZSAtTmFtZSBQU0ZyYW1ld29yaykuTW9kdWxlQmFzZSAtUGFja2FnZVBhdGggLgoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJDcmVhdGluZyBOdWdldCBQYWNrYWdlIGZvciBtb2R1bGU6IMO+bmFtZcO+IgoJTmV3LVBTTURNb2R1bGVOdWdldFBhY2thZ2UgLU1vZHVsZVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXMO+bmFtZcO+IiAtUGFja2FnZVBhdGggLgp9CmVsc2UKewoJIyBQdWJsaXNoIHRvIEdhbGxlcnkKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHVibGlzaGluZyB0aGUgw75uYW1lw74gbW9kdWxlIHRvICQoJFJlcG9zaXRvcnkpIgoJUHVibGlzaC1Nb2R1bGUgLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXMO+bmFtZcO+IiAtTnVHZXRBcGlLZXkgJEFwaUtleSAtRm9yY2UgLVJlcG9zaXRvcnkgJFJlcG9zaXRvcnkKfQojZW5kcmVnaW9uIFB1Ymxpc2gBCbYAAAAJtwAAAAa4AAAADnZzdHMtYnVpbGQucHMxBrkAAAAvL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vYnVpbGQvdnN0cy1idWlsZC5wczEJWwAAAAm7AAAACbwAAAABmgAAAG8AAAAGvQAAAPQ/CjwjCgkuU1lOT1BTSVMKCQlCdWlsZCBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgYSBjbGllbnQgbW9kdWxlIGZvciBSRVNUIEFQSSBlbmRwb2ludHMgb2YgYSBBenVyZSBQb3dlclNoZWxsIEZ1bmN0aW9ucyBwcm9qZWN0LgoJCgkuREVTQ1JJUFRJT04KCQlCdWlsZCBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgYSBjbGllbnQgbW9kdWxlIGZvciBSRVNUIEFQSSBlbmRwb2ludHMgb2YgYSBBenVyZSBQb3dlclNoZWxsIEZ1bmN0aW9ucyBwcm9qZWN0LgoJCgkuUEFSQU1FVEVSIEFwaUtleQoJCVRoZSBBUEkga2V5IHRvIHVzZSB0byBwdWJsaXNoIHRoZSBtb2R1bGUgdG8gYSBOdWdldCBSZXBvc2l0b3J5CgkKCS5QQVJBTUVURVIgV29ya2luZ0RpcmVjdG9yeQoJCVRoZSByb290IGZvbGRlciBmcm9tIHdoaWNoIHRvIGJ1aWxkIHRoZSBtb2R1bGUuCgkKCS5QQVJBTUVURVIgUmVwb3NpdG9yeQoJCVRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5IHRvIHB1Ymxpc2ggdG8uCgkJRGVmYXVsdHMgdG8gUFNHYWxsZXJ5LgoJCgkuUEFSQU1FVEVSIExvY2FsUmVwbwoJCUluc3RlYWQgb2YgcHVibGlzaGluZyB0byBhIGdhbGxlcnksIGRyb3AgYSBudWdldCBwYWNrYWdlIGluIHRoZSByb290IGZvbGRlci4KCQlUaGlzIHBhY2thZ2UgY2FuIHRoZW4gYmUgcGlja2VkIHVwIGluIGEgbGF0ZXIgc3RlcCBmb3IgcHVibGlzaGluZyB0byBBenVyZSBBcnRpZmFjdHMuCgoJLlBBUkFNRVRFUiBNb2R1bGVOYW1lCgkJVGhlIG5hbWUgdG8gZ2l2ZSB0byB0aGUgY2xpZW50IG1vZHVsZS4KCQlCeSBkZWZhdWx0LCB0aGUgY2xpZW50IG1vZHVsZSB3aWxsIGJlIG5hbWVkICc8TW9kdWxlTmFtZT4uQ2xpZW50Jy4KCQoJLlBBUkFNRVRFUiBJbmNsdWRlRm9ybWF0CgkJSW5jbHVkZSB0aGUgZm9ybWF0IHhtbCBvZiB0aGUgc291cmNlIG1vZHVsZSBmb3IgdGhlIGNsaWVudCBtb2R1bGUuCgkKCS5QQVJBTUVURVIgSW5jbHVkZVR5cGUKCQlJbmNsdWRlIHRoZSB0eXBlIGV4dGVuc2lvbiB4bWwgb2YgdGhlIHNvdXJjZSBtb2R1bGUgZm9yIHRoZSBjbGllbnQgbW9kdWxlLgoJCgkuUEFSQU1FVEVSIEluY2x1ZGVBc3NlbWJseQoJCUluY2x1ZGUgdGhlIGJpbmFyaWVzIG9mIHRoZSBzb3VyY2UgbW9kdWxlIGZvciB0aGUgY2xpZW50IG1vZHVsZS4KIz4KcGFyYW0gKAoJJEFwaUtleSwKCQoJJFdvcmtpbmdEaXJlY3RvcnksCgkKCSRSZXBvc2l0b3J5ID0gJ1BTR2FsbGVyeScsCgkKCVtzd2l0Y2hdCgkkTG9jYWxSZXBvLAoJCgkkTW9kdWxlTmFtZSwKCQoJW3N3aXRjaF0KCSRJbmNsdWRlRm9ybWF0LAoJCglbc3dpdGNoXQoJJEluY2x1ZGVUeXBlLAoJCglbc3dpdGNoXQoJJEluY2x1ZGVBc3NlbWJseQopCgojcmVnaW9uIEhhbmRsZSBXb3JraW5nIERpcmVjdG9yeSBEZWZhdWx0cwppZiAoLW5vdCAkV29ya2luZ0RpcmVjdG9yeSkKewoJaWYgKCRlbnY6UkVMRUFTRV9QUklNQVJZQVJUSUZBQ1RTT1VSQ0VBTElBUykKCXsKCQkkV29ya2luZ0RpcmVjdG9yeSA9IEpvaW4tUGF0aCAtUGF0aCAkZW52OlNZU1RFTV9ERUZBVUxUV09SS0lOR0RJUkVDVE9SWSAtQ2hpbGRQYXRoICRlbnY6UkVMRUFTRV9QUklNQVJZQVJUSUZBQ1RTT1VSQ0VBTElBUwoJfQoJZWxzZSB7ICRXb3JraW5nRGlyZWN0b3J5ID0gJGVudjpTWVNURU1fREVGQVVMVFdPUktJTkdESVJFQ1RPUlkgfQp9CiNlbmRyZWdpb24gSGFuZGxlIFdvcmtpbmcgRGlyZWN0b3J5IERlZmF1bHRzCgpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICdTdGFydGluZyBCdWlsZDogQ2xpZW50IE1vZHVsZScKJHBhcmVudE1vZHVsZSA9ICfDvm5hbWXDvicKaWYgKC1ub3QgJE1vZHVsZU5hbWUpIHsgJE1vZHVsZU5hbWUgPSAnw75uYW1lw74uQ2xpZW50JyB9CldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgJ0NyZWF0aW5nIEZvbGRlciBTdHJ1Y3R1cmUnCiR3b3JraW5nUm9vdCA9IE5ldy1JdGVtIC1QYXRoICRXb3JraW5nRGlyZWN0b3J5IC1OYW1lICRNb2R1bGVOYW1lIC1JdGVtVHlwZSBEaXJlY3RvcnkKJHB1Ymxpc2hSb290ID0gSm9pbi1QYXRoIC1QYXRoICRXb3JraW5nRGlyZWN0b3J5IC1DaGlsZFBhdGggJ3B1Ymxpc2hcw75uYW1lw74nCkNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xjbGllbnRNb2R1bGVcZnVuY3Rpb25zIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVwiIC1SZWN1cnNlCkNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xjbGllbnRNb2R1bGVcaW50ZXJuYWwiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIgLVJlY3Vyc2UKQ29weS1JdGVtIC1QYXRoICIkKCRwdWJsaXNoUm9vdClcZW4tdXMiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIgLVJlY3Vyc2UKJGZ1bmN0aW9uRm9sZGVyID0gR2V0LUl0ZW0gLVBhdGggIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVxmdW5jdGlvbnMiCgojcmVnaW9uIENyZWF0ZSBGdW5jdGlvbnMKJGVuY29kaW5nID0gW1BTRkVuY29kaW5nXSd1dGY4JwokZnVuY3Rpb25zVGV4dCA9IEdldC1Db250ZW50IC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGNsaWVudE1vZHVsZVxmdW5jdGlvbi5wczEiIC1SYXcKCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgJ0NyZWF0aW5nIEZ1bmN0aW9ucycKZm9yZWFjaCAoJGZ1bmN0aW9uU291cmNlRmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkcHVibGlzaFJvb3QpXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbHRlciAnKi5wczEnKSkKewoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiICBQcm9jZXNzaW5nIGZ1bmN0aW9uOiAkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpIgoJJGNvbmRlbnNlZE5hbWUgPSAkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lIC1yZXBsYWNlICctJywgJycKCQoJI3JlZ2lvbiBMb2FkIE92ZXJyaWRlcwoJJG92ZXJyaWRlID0gQHsgfQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHNkMSIpCgl7CgkJJG92ZXJyaWRlID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHNkMSIKCX0KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5wc2QxIikKCXsKCQkkb3ZlcnJpZGUgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkY29uZGVuc2VkTmFtZSkucHNkMSIKCX0KCWlmICgkb3ZlcnJpZGUuTm9DbGllbnRGdW5jdGlvbikKCXsKCQlXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICIgICAgT3ZlcnJpZGUgJ05vQ2xpZW50RnVuY3Rpb24nIGRldGVjdGVkLCBza2lwcGluZyEiCgkJY29udGludWUKCX0KCQoJIyBJZiB0aGVyZSBpcyBhbiBkZWZpbml0aW9uIG92ZXJyaWRlLCB1c2UgaXQgYW5kIGNvbnRpbnVlCglpZiAoVGVzdC1QYXRoIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5wczEiKQoJewoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIiAgICBPdmVycmlkZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRldGVjdGVkLCB1c2luZyBvdmVycmlkZSIKCQlDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpLnBzMSIgLURlc3RpbmF0aW9uICRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZQoJCWNvbnRpbnVlCgl9CgkKCSMgRmlndXJlIG91dCB0aGUgUmVzdCBNZXRob2QgdG8gdXNlCgkkbWV0aG9kTmFtZSA9ICdQb3N0JwoJaWYgKCRvdmVycmlkZS5SZXN0TWV0aG9kcykKCXsKCQkkbWV0aG9kTmFtZSA9ICRvdmVycmlkZS5SZXN0TWV0aG9kcyB8IFdoZXJlLU9iamVjdCB7ICRfIC1uZSAnR2V0JyB9IHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMQoJfQoJCgkjZW5kcmVnaW9uIExvYWQgT3ZlcnJpZGVzCgkKCSRjdXJyZW50RnVuY3Rpb25zVGV4dCA9ICRmdW5jdGlvbnNUZXh0IC1yZXBsYWNlICclZnVuY3Rpb25uYW1lJScsICRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUgLXJlcGxhY2UgJyVjb25kZW5zZWRuYW1lJScsICRjb25kZW5zZWROYW1lIC1yZXBsYWNlICclbWV0aG9kJScsICRtZXRob2ROYW1lCgkKCSRwYXJzZWRGdW5jdGlvbiA9IFJlYWQtUFNNRFNjcmlwdCAtUGF0aCAkZnVuY3Rpb25Tb3VyY2VGaWxlLkZ1bGxOYW1lCgkkZnVuY3Rpb25Bc3QgPSAkcGFyc2VkRnVuY3Rpb24uQXN0LkVuZEJsb2NrLlN0YXRlbWVudHMgfCBXaGVyZS1PYmplY3QgewoJCSRfIC1pcyBbU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5MYW5ndWFnZS5GdW5jdGlvbkRlZmluaXRpb25Bc3RdCgl9IHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMQoJCgkkZW5kID0gJGZ1bmN0aW9uQXN0LkJvZHkuUGFyYW1CbG9jay5FeHRlbnQuRW5kT2ZmU2V0Cgkkc3RhcnQgPSAkZnVuY3Rpb25Bc3QuQm9keS5FeHRlbnQuU3RhcnRPZmZTZXQgKyAxCgkkY3VycmVudEZ1bmN0aW9uc1RleHQgPSAkY3VycmVudEZ1bmN0aW9uc1RleHQuUmVwbGFjZSgnJXBhcmFtZXRlciUnLCAkZnVuY3Rpb25Bc3QuQm9keS5FeHRlbnQuVGV4dC5TdWJTdHJpbmcoMSwgKCRlbmQgLSAkc3RhcnQpKSkKCQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiICAgIENyZWF0aW5nIGZpbGU6ICQoJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lKVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuTmFtZSkiCglbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbFRleHQoIiQoJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lKVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuTmFtZSkiLCAkY3VycmVudEZ1bmN0aW9uc1RleHQsICRlbmNvZGluZykKfQokZnVuY3Rpb25zVG9FeHBvcnQgPSAoR2V0LUNoaWxkSXRlbSAtUGF0aCAkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUgLVJlY3Vyc2UgLUZpbHRlciAqLnBzMSkuQmFzZU5hbWUgfCBTb3J0LU9iamVjdAojZW5kcmVnaW9uIENyZWF0ZSBGdW5jdGlvbnMKCiNyZWdpb24gQ3JlYXRlIENvcmUgTW9kdWxlIEZpbGVzCiMgR2V0IE1hbmlmZXN0IG9mIHB1Ymxpc2hlZCB2ZXJzaW9uLCBpbiBvcmRlciB0byBjYXRjaCBidWlsZC1waGFzZSBjaGFuZ2VzIHN1Y2ggYXMgbW9kdWxlIHZlcnNpb24uCiRvcmlnaW5hbE1hbmlmZXN0RGF0YSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiRwdWJsaXNoUm9vdFzDvm5hbWXDvi5wc2QxIgokcHJlcmVxSGFzaCA9IEB7CglNb2R1bGVOYW1lICAgID0gJ1BTRnJhbWV3b3JrJwoJTW9kdWxlVmVyc2lvbiA9IChHZXQtTW9kdWxlIFBTRnJhbWV3b3JrKS5WZXJzaW9uCn0KJHBhcmFtTmV3TW9kdWxlTWFuaWZlc3QgPSBAewoJUGF0aAkJCSAgPSAoJ3swfVx7MX0ucHNkMScgLWYgJHdvcmtpbmdSb290LkZ1bGxOYW1lLCAkTW9kdWxlTmFtZSkKCUZ1bmN0aW9uc1RvRXhwb3J0ID0gJGZ1bmN0aW9uc1RvRXhwb3J0CglDb21wYW55TmFtZQkgICAgICA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5Db21wYW55TmFtZQoJQXV0aG9yCQkgICAgICA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5BdXRob3IKCURlc2NyaXB0aW9uCSAgICAgID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLkRlc2NyaXB0aW9uCglNb2R1bGVWZXJzaW9uCSAgPSAkb3JpZ2luYWxNYW5pZmVzdERhdGEuTW9kdWxlVmVyc2lvbgoJUm9vdE1vZHVsZQkgICAgICA9ICgnezB9LnBzbTEnIC1mICRNb2R1bGVOYW1lKQoJQ29weXJpZ2h0CQkgID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLkNvcHlyaWdodAoJVHlwZXNUb1Byb2Nlc3MgICAgPSBAKCkKCUZvcm1hdHNUb1Byb2Nlc3MgID0gQCgpCglSZXF1aXJlZEFzc2VtYmxpZXMgPSBAKCkKCVJlcXVpcmVkTW9kdWxlcyAgID0gQCgkcHJlcmVxSGFzaCkKCUNvbXBhdGlibGVQU0VkaXRpb25zID0gJ0NvcmUnLCAnRGVza3RvcCcKCVBvd2VyU2hlbGxWZXJzaW9uID0gJzUuMScKfQoKaWYgKCRJbmNsdWRlQXNzZW1ibHkpIHsgJHBhcmFtTmV3TW9kdWxlTWFuaWZlc3QuUmVxdWlyZWRBc3NlbWJsaWVzID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLlJlcXVpcmVkQXNzZW1ibGllcyB9CmlmICgkSW5jbHVkZUZvcm1hdCkgeyAkcGFyYW1OZXdNb2R1bGVNYW5pZmVzdC5Gb3JtYXRzVG9Qcm9jZXNzID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLkZvcm1hdHNUb1Byb2Nlc3MgfQppZiAoJEluY2x1ZGVUeXBlKSB7ICRwYXJhbU5ld01vZHVsZU1hbmlmZXN0LlR5cGVzVG9Qcm9jZXNzID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLlR5cGVzVG9Qcm9jZXNzIH0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiQ3JlYXRpbmcgTW9kdWxlIE1hbmlmZXN0IGZvciBtb2R1bGU6ICRNb2R1bGVOYW1lIgpOZXctTW9kdWxlTWFuaWZlc3QgQHBhcmFtTmV3TW9kdWxlTWFuaWZlc3QKCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIkNvcHlpbmcgYWRkaXRpb25hbCBtb2R1bGUgZmlsZXMiCkNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xjbGllbnRNb2R1bGVcbW9kdWxlcm9vdC5wc20xIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVwkKCRNb2R1bGVOYW1lKS5wc20xIgpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXExJQ0VOU0UiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIKI2VuZHJlZ2lvbiBDcmVhdGUgQ29yZSBNb2R1bGUgRmlsZXMKCiNyZWdpb24gVHJhbnNmZXIgQWRkaXRpb25hbCBDb250ZW50CmlmICgkSW5jbHVkZUFzc2VtYmx5KQp7CglDb3B5LUl0ZW0gLVBhdGggIiRwdWJsaXNoUm9vdFxiaW4iIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIgLVJlY3Vyc2UKfQppZiAoJEluY2x1ZGVGb3JtYXQgLW9yICRJbmNsdWRlVHlwZSkKewoJQ29weS1JdGVtIC1QYXRoICIkcHVibGlzaFJvb3RceG1sIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVwiIC1SZWN1cnNlCn0KI2VuZHJlZ2lvbiBUcmFuc2ZlciBBZGRpdGlvbmFsIENvbnRlbnQKCiNyZWdpb24gUHVibGlzaAppZiAoJExvY2FsUmVwbykKewoJIyBEZXBlbmRlbmNpZXMgbXVzdCBnbyBmaXJzdAoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJDcmVhdGluZyBOdWdldCBQYWNrYWdlIGZvciBtb2R1bGU6IFBTRnJhbWV3b3JrIgoJTmV3LVBTTURNb2R1bGVOdWdldFBhY2thZ2UgLU1vZHVsZVBhdGggKEdldC1Nb2R1bGUgLU5hbWUgUFNGcmFtZXdvcmspLk1vZHVsZUJhc2UgLVBhY2thZ2VQYXRoIC4gLVdhcm5pbmdBY3Rpb24gU2lsZW50bHlDb250aW51ZQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJDcmVhdGluZyBOdWdldCBQYWNrYWdlIGZvciBtb2R1bGU6IMO+bmFtZcO+IgoJTmV3LVBTTURNb2R1bGVOdWdldFBhY2thZ2UgLU1vZHVsZVBhdGggJHdvcmtpbmdSb290LkZ1bGxOYW1lIC1QYWNrYWdlUGF0aCAuIC1FbmFibGVFeGNlcHRpb24KfQplbHNlCnsKCSMgUHVibGlzaCB0byBHYWxsZXJ5CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlB1Ymxpc2hpbmcgdGhlIMO+bmFtZcO+IG1vZHVsZSB0byAkKCRSZXBvc2l0b3J5KSIKCVB1Ymxpc2gtTW9kdWxlIC1QYXRoICR3b3JraW5nUm9vdC5GdWxsTmFtZSAtTnVHZXRBcGlLZXkgJEFwaUtleSAtRm9yY2UgLVJlcG9zaXRvcnkgJFJlcG9zaXRvcnkKfQojZW5kcmVnaW9uIFB1Ymxpc2gBCb4AAAAJvwAAAAbAAAAAI3ZzdHMtY3JlYXRlRnVuY3Rpb25DbGllbnRNb2R1bGUucHMxBsEAAABEL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vYnVpbGQvdnN0cy1jcmVhdGVGdW5jdGlvbkNsaWVudE1vZHVsZS5wczEJWwAAAAnDAAAACcQAAAABmwAAAG8AAAAGxQAAAI0rCjwjCgkuU1lOT1BTSVMKCQlQYWNrYWdlcyBhbiBBenVyZSBGdW5jdGlvbnMgcHJvamVjdCwgcmVhZHkgdG8gcmVsZWFzZS4KCQoJLkRFU0NSSVBUSU9OCgkJUGFja2FnZXMgYW4gQXp1cmUgRnVuY3Rpb25zIHByb2plY3QsIHJlYWR5IHRvIHJlbGVhc2UuCgkJU2hvdWxkIGJlIHBhcnQgb2YgdGhlIHJlbGVhc2UgcGlwZWxpbmUsIGFmdGVyIGVuc3VyaW5nIHZhbGlkYXRpb24uCgoJCUxvb2sgaW50byB0aGUgJ0F6dXJlRnVuY3Rpb25SZXN0JyB0ZW1wbGF0ZSBmb3IgZ2VuZXJhdGluZyBmdW5jdGlvbnMgZm9yIHRoZSBtb2R1bGUgaWYgeW91IGRvLgoJCgkuUEFSQU1FVEVSIFdvcmtpbmdEaXJlY3RvcnkKCQlUaGUgcm9vdCBmb2xkZXIgdG8gd29yayBmcm9tLgoJCgkuUEFSQU1FVEVSIFJlcG9zaXRvcnkKCQlUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeSB0byB1c2UgZm9yIGdhdGhlcmluZyBkZXBlbmRlbmNpZXMgZnJvbS4KIz4KcGFyYW0gKAoJJFdvcmtpbmdEaXJlY3RvcnkgPSAiJCgkZW52OlNZU1RFTV9ERUZBVUxUV09SS0lOR0RJUkVDVE9SWSlcX8O+bmFtZcO+IiwKCQoJJFJlcG9zaXRvcnkgPSAnUFNHYWxsZXJ5JywKCglbc3dpdGNoXQoJJEluY2x1ZGVBWgopCgokbW9kdWxlTmFtZSA9ICfDvm5hbWXDvicKCiMgUHJlcGFyZSBQYXRocwpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJDcmVhdGluZyB3b3JraW5nIGZvbGRlcnMiCiRtb2R1bGVSb290ID0gSm9pbi1QYXRoIC1QYXRoICRXb3JraW5nRGlyZWN0b3J5IC1DaGlsZFBhdGggJ3B1Ymxpc2gnCiR3b3JraW5nUm9vdCA9IE5ldy1JdGVtIC1QYXRoICRXb3JraW5nRGlyZWN0b3J5IC1OYW1lICd3b3JraW5nJyAtSXRlbVR5cGUgRGlyZWN0b3J5CiRtb2R1bGVzRm9sZGVyID0gTmV3LUl0ZW0gLVBhdGggJHdvcmtpbmdSb290LkZ1bGxOYW1lIC1OYW1lIE1vZHVsZXMgLUl0ZW1UeXBlIERpcmVjdG9yeQoKIyBGaWxsIG91dCB0aGUgbW9kdWxlcyBmb2xkZXIKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiVHJhbnNmZXJpbmcgYnVpbHQgbW9kdWxlIGRhdGEgaW50byB3b3JraW5nIGRpcmVjdG9yeSIKQ29weS1JdGVtIC1QYXRoICIkbW9kdWxlUm9vdFwkbW9kdWxlTmFtZSIgLURlc3RpbmF0aW9uICRtb2R1bGVzRm9sZGVyLkZ1bGxOYW1lIC1SZWN1cnNlIC1Gb3JjZQpmb3JlYWNoICgkZGVwZW5kZW5jeSBpbiAoSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJG1vZHVsZVJvb3RcJG1vZHVsZU5hbWVcJG1vZHVsZU5hbWUucHNkMSIpLlJlcXVpcmVkTW9kdWxlcykKewoJJHBhcmFtID0gQHsKCQlSZXBvc2l0b3J5ID0gJFJlcG9zaXRvcnkKCQlOYW1lCSAgID0gJGRlcGVuZGVuY3kuTW9kdWxlTmFtZQoJCVBhdGgJICAgPSAkbW9kdWxlc0ZvbGRlci5GdWxsTmFtZQoJfQoJaWYgKCRkZXBlbmRlbmN5IC1pcyBbc3RyaW5nXSkgeyAkcGFyYW1bJ05hbWUnXSA9ICRkZXBlbmRlbmN5IH0KCWlmICgkZGVwZW5kZW5jeS5SZXF1aXJlZFZlcnNpb24pCgl7CgkJJHBhcmFtWydSZXF1aXJlZFZlcnNpb24nXSA9ICRkZXBlbmRlbmN5LlJlcXVpcmVkVmVyc2lvbgoJfQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiUHJlcGFyaW5nIERlcGVuZGVuY3k6ICQoJHBhcmFtWydOYW1lJ10pIgoJU2F2ZS1Nb2R1bGUgQHBhcmFtCn0KCiMgR2VuZXJhdGUgZnVuY3Rpb24gY29uZmlndXJhdGlvbgpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICdHZW5lcmF0aW5nIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24nCiRydW5UZW1wbGF0ZSA9IEdldC1Db250ZW50IC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXHJ1bi5wczEiIC1SYXcKZm9yZWFjaCAoJGZ1bmN0aW9uU291cmNlRmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkbW9kdWxlUm9vdClcJG1vZHVsZU5hbWVcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsdGVyICcqLnBzMScpKQp7CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICIgIFByb2Nlc3NpbmcgZnVuY3Rpb246ICRmdW5jdGlvblNvdXJjZUZpbGUiCgkkY29uZGVuc2VkTmFtZSA9ICRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUgLXJlcGxhY2UgJy0nLCAnJwoJJGZ1bmN0aW9uRm9sZGVyID0gTmV3LUl0ZW0gLVBhdGggJHdvcmtpbmdSb290LkZ1bGxOYW1lIC1OYW1lICRjb25kZW5zZWROYW1lIC1JdGVtVHlwZSBEaXJlY3RvcnkKCQoJI3JlZ2lvbiBMb2FkIE92ZXJyaWRlcwoJJG92ZXJyaWRlID0gQHsgfQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHNkMSIpCgl7CgkJJG92ZXJyaWRlID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHNkMSIKCX0KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5wc2QxIikKCXsKCQkkb3ZlcnJpZGUgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkY29uZGVuc2VkTmFtZSkucHNkMSIKCX0KCSNlbmRyZWdpb24gTG9hZCBPdmVycmlkZXMKCQoJI3JlZ2lvbiBDcmVhdGUgRnVuY3Rpb24gQ29uZmlndXJhdGlvbgoJJHJlc3RNZXRob2RzID0gJ2dldCcsICdwb3N0JwoJaWYgKCRvdmVycmlkZS5SZXN0TWV0aG9kcykgeyAkcmVzdE1ldGhvZHMgPSAkb3ZlcnJpZGUuUmVzdE1ldGhvZHMgfQoJCglTZXQtQ29udGVudCAtUGF0aCAiJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXGZ1bmN0aW9uLmpzb24iIC1WYWx1ZSBAIgp7CiAgICAiYmluZGluZ3MiOiBbCiAgICAgICAgewogICAgICAgICJhdXRoTGV2ZWwiOiAiZnVuY3Rpb24iLAogICAgICAgICJ0eXBlIjogImh0dHBUcmlnZ2VyIiwKICAgICAgICAiZGlyZWN0aW9uIjogImluIiwKICAgICAgICAibmFtZSI6ICJSZXF1ZXN0IiwKICAgICAgICAibWV0aG9kcyI6IFsKICAgICAgICAgICAgIiQoJHJlc3RNZXRob2RzIC1qb2luICJgIiwKICAgICAgICAgICAgYCIiKSIKICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgInR5cGUiOiAiaHR0cCIsCiAgICAgICAgImRpcmVjdGlvbiI6ICJvdXQiLAogICAgICAgICJuYW1lIjogIlJlc3BvbnNlIgogICAgICAgIH0KICAgIF0sCiAgICAiZGlzYWJsZWQiOiBmYWxzZQp9CiJACgkjZW5kcmVnaW9uIENyZWF0ZSBGdW5jdGlvbiBDb25maWd1cmF0aW9uCgkKCSNyZWdpb24gT3ZlcnJpZGUgRnVuY3Rpb24gQ29uZmlndXJhdGlvbgoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkuanNvbiIpCgl7CgkJQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5qc29uIiAtRGVzdGluYXRpb24gIiQoJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lKVxmdW5jdGlvbi5qc29uIiAtRm9yY2UKCX0KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5qc29uIikKCXsKCQlDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5qc29uIiAtRGVzdGluYXRpb24gIiQoJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lKVxmdW5jdGlvbi5qc29uIiAtRm9yY2UKCX0KCSNlbmRyZWdpb24gT3ZlcnJpZGUgRnVuY3Rpb24gQ29uZmlndXJhdGlvbgoJCgkjIEdlbmVyYXRlIHRoZSBydW4ucHMxIGZpbGUKCSRydW5UZXh0ID0gJHJ1blRlbXBsYXRlIC1yZXBsYWNlICclZnVuY3Rpb25uYW1lJScsICRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUKCSRydW5UZXh0IHwgU2V0LUNvbnRlbnQgLVBhdGggIiQoJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lKVxydW4ucHMxIiAtRW5jb2RpbmcgVVRGOAp9CgojIFRyYW5zZmVyIGNvbW1vbiBmaWxlcwpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJUcmFuc2ZlcmluZyBjb3JlIGZ1bmN0aW9uIGRhdGEiCmlmICgkSW5jbHVkZUFaKQp7CglDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcaG9zdC1hei5qc29uIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdyb290LkZ1bGxOYW1lKVxob3N0Lmpzb24iCglDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNccmVxdWlyZW1lbnRzLnBzZDEiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXCIKfQplbHNlCnsKCUNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xob3N0Lmpzb24iIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXCIKfQpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcbG9jYWwuc2V0dGluZ3MuanNvbiIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5ncm9vdC5GdWxsTmFtZSlcIgoKIyBCdWlsZCB0aGUgcHJvZmlsZSBmaWxlCiR0ZXh0ID0gQCgpCiR0ZXh0ICs9IEdldC1Db250ZW50IC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXHByb2ZpbGUucHMxIiAtUmF3CmZvcmVhY2ggKCRmdW5jdGlvbkZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNccHJvZmlsZUZ1bmN0aW9ucyIgLVJlY3Vyc2UpKQp7CgkkdGV4dCArPSBHZXQtQ29udGVudCAtUGF0aCAkZnVuY3Rpb25GaWxlLkZ1bGxOYW1lIC1SYXcKfQokdGV4dCAtam9pbiAiYG5gbiIgfCBTZXQtQ29udGVudCAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXHByb2ZpbGUucHMxIgoKIyBaaXAgSXQKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiQ3JlYXRpbmcgZnVuY3Rpb24gYXJjaGl2ZSBpbiAnJCgkV29ya2luZ0RpcmVjdG9yeSlcJG1vZHVsZU5hbWUuemlwJyIKQ29tcHJlc3MtQXJjaGl2ZSAtUGF0aCAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXCoiIC1EZXN0aW5hdGlvblBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXCRtb2R1bGVOYW1lLnppcCIgLUZvcmNlAQnGAAAACccAAAAGyAAAABh2c3RzLXBhY2thZ2VGdW5jdGlvbi5wczEGyQAAADkvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9idWlsZC92c3RzLXBhY2thZ2VGdW5jdGlvbi5wczEJWwAAAAnLAAAACcwAAAABnAAAAG8AAAAGzQAAAI4GcGFyYW0gKAogICAgW3N0cmluZ10KICAgICRSZXBvc2l0b3J5ID0gJ1BTR2FsbGVyeScKKQoKJG1vZHVsZXMgPSBAKCJQZXN0ZXIiLCAiUFNGcmFtZXdvcmsiLCAiUFNNb2R1bGVEZXZlbG9wbWVudCIsICJQU1NjcmlwdEFuYWx5emVyIikKCiMgQXV0b21hdGljYWxseSBhZGQgbWlzc2luZyBkZXBlbmRlbmNpZXMKJGRhdGEgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+XMO+bmFtZcO+LnBzZDEiCmZvcmVhY2ggKCRkZXBlbmRlbmN5IGluICRkYXRhLlJlcXVpcmVkTW9kdWxlcykgewogICAgaWYgKCRkZXBlbmRlbmN5IC1pcyBbc3RyaW5nXSkgewogICAgICAgIGlmICgkbW9kdWxlcyAtY29udGFpbnMgJGRlcGVuZGVuY3kpIHsgY29udGludWUgfQogICAgICAgICRtb2R1bGVzICs9ICRkZXBlbmRlbmN5CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiAoJG1vZHVsZXMgLWNvbnRhaW5zICRkZXBlbmRlbmN5Lk1vZHVsZU5hbWUpIHsgY29udGludWUgfQogICAgICAgICRtb2R1bGVzICs9ICRkZXBlbmRlbmN5Lk1vZHVsZU5hbWUKICAgIH0KfQoKZm9yZWFjaCAoJG1vZHVsZSBpbiAkbW9kdWxlcykgewogICAgV3JpdGUtSG9zdCAiSW5zdGFsbGluZyAkbW9kdWxlIiAtRm9yZWdyb3VuZENvbG9yIEN5YW4KICAgIEluc3RhbGwtTW9kdWxlICRtb2R1bGUgLUZvcmNlIC1Ta2lwUHVibGlzaGVyQ2hlY2sgLVJlcG9zaXRvcnkgJFJlcG9zaXRvcnkKICAgIEltcG9ydC1Nb2R1bGUgJG1vZHVsZSAtRm9yY2UgLVBhc3NUaHJ1Cn0BCc4AAAAJzwAAAAbQAAAAFnZzdHMtcHJlcmVxdWlzaXRlcy5wczEG0QAAADcvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9idWlsZC92c3RzLXByZXJlcXVpc2l0ZXMucHMxCVsAAAAJ0wAAAAnUAAAAAZ0AAABvAAAABtUAAADEAiMgR3VpZGUgZm9yIGF2YWlsYWJsZSB2YXJpYWJsZXMgYW5kIHdvcmtpbmcgd2l0aCBzZWNyZXRzOgojIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3ZzdHMvYnVpbGQtcmVsZWFzZS9jb25jZXB0cy9kZWZpbml0aW9ucy9idWlsZC92YXJpYWJsZXM/dGFicz1wb3dlcnNoZWxsCgojIE5lZWRzIHRvIGVuc3VyZSB0aGluZ3MgYXJlIERvbmUgUmlnaHQgYW5kIG9ubHkgbGVnYWwgY29tbWl0cyB0byBtYXN0ZXIgZ2V0IGJ1aWx0CgojIFJ1biBpbnRlcm5hbCBwZXN0ZXIgdGVzdHMKJiAiJFBTU2NyaXB0Um9vdFwuLlzDvm5hbWXDvlx0ZXN0c1xwZXN0ZXIucHMxIgEJ1gAAAAnXAAAABtgAAAARdnN0cy12YWxpZGF0ZS5wczEG2QAAADIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9idWlsZC92c3RzLXZhbGlkYXRlLnBzMQlbAAAACdsAAAAJ3AAAAAGeAAAAPgAAAAndAAAABt4AAAADYmluBt8AAAA4L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9iaW4JWwAAAAnhAAAACeIAAAABnwAAAD4AAAAJ4wAAAAbkAAAABWVuLXVzBuUAAAA6L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9lbi11cwlbAAAACecAAAAJ6AAAAAGgAAAAPgAAAAnpAAAABuoAAAAJZnVuY3Rpb25zBusAAAA+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9mdW5jdGlvbnMJWwAAAAntAAAACe4AAAABoQAAAD4AAAAJ7wAAAAbwAAAACGludGVybmFsBvEAAAA9L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbAlbAAAACfMAAAAJ9AAAAAGiAAAAPgAAAAn1AAAABvYAAAAjU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24G9wAAAFgvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uCVsAAAAJ+QAAAAn6AAAAAaMAAAA+AAAACfsAAAAG/AAAAAV0ZXN0cwb9AAAAOi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMJWwAAAAn/AAAACQABAAABpAAAAD4AAAAJAQEAAAYCAQAAA3htbAYDAQAAOC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74veG1sCVsAAAAJBQEAAAkGAQAAAaUAAABvAAAABgcBAABqIyBDaGFuZ2Vsb2cKIyMgMS4wLjAgKMO+IWR5bmFtaWNzY3JpcHRfODQ0MTEyIcO+KQogLSBOZXc6IFNvbWUgU3R1ZmYKIC0gVXBkOiBNb2FyIFN0dWZmCiAtIEZpeDogTXVjaCBTdHVmZgEJCAEAAAkJAQAABgoBAAAMY2hhbmdlbG9nLm1kBgsBAABBL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9jaGFuZ2Vsb2cubWQJWwAAAAkNAQAACQ4BAAABpgAAAG8AAAAGDwEAAP4HIyBQU0ZNb2R1bGUgZ3VpZGFuY2UKClRoaXMgaXMgYSBmaW5pc2hlZCBtb2R1bGUgbGF5b3V0IG9wdGltaXplZCBmb3IgaW1wbGVtZW50aW5nIHRoZSBQU0ZyYW1ld29yay4KCklmIHlvdSBkb24ndCBjYXJlIHRvIGRlYWwgd2l0aCB0aGUgZGV0YWlscywgdGhpcyBpcyB3aGF0IHlvdSBuZWVkIHRvIGRvIHRvIGdldCBzdGFydGVkIHNlZWluZyByZXN1bHRzOgoKIC0gQWRkIHRoZSBmdW5jdGlvbnMgeW91IHdhbnQgdG8gcHVibGlzaCB0byBgL2Z1bmN0aW9ucy9gCiAtIFVwZGF0ZSB0aGUgYEZ1bmN0aW9uc1RvRXhwb3J0YCBub2RlIGluIHRoZSBtb2R1bGUgbWFuaWZlc3QgKMO+bmFtZcO+LnBzZDEpLiBBbGwgZnVuY3Rpb25zIHlvdSB3YW50IHRvIHB1Ymxpc2ggc2hvdWxkIGJlIGluIGEgbGlzdC4KIC0gQWRkIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgdGhlIHVzZXIgc2hvdWxkIG5vdCBzZWUgdG8gYC9pbnRlcm5hbC9mdW5jdGlvbnMvYAogCiAjIyBQYXRoIFdhcm5pbmcKIAogPiBJZiB5b3Ugd2FudCB5b3VyIG1vZHVsZSB0byBiZSBjb21wYXRpYmxlIHdpdGggTGludXggYW5kIE1hY09TLCBrZWVwIGluIG1pbmQgdGhhdCB0aG9zZSBPUyBhcmUgY2FzZSBzZW5zaXRpdmUgZm9yIHBhdGhzIGFuZCBmaWxlcy4KIAogYEltcG9ydC1Nb2R1bGVGaWxlYCBpcyBwcmVjb25maWd1cmVkIHRvIHJlc29sdmUgdGhlIHBhdGggb2YgdGhlIGZpbGVzIHNwZWNpZmllZCwgc28gaXQgd2lsbCByZWxpYWJseSBjb252ZXJ0IHdlaXJkIHBhdGggbm90YXRpb25zIHRoZSBzeXN0ZW0gY2FuJ3QgaGFuZGxlLgogQ29udGVudCBpbXBvcnRlZCB0aHJvdWdoIHRoYXQgY29tbWFuZCB0aHVzIG5lZWQgbm90IG1pbmQgdGhlIHBhdGggc2VwYXJhdG9yLgogSWYgeW91IHdhbnQgdG8gbWFrZSBzdXJlIHlvdXIgY29kZSB0b28gd2lsbCBzdXJ2aXZlIE9TLXNwZWNpZmljIHBhdGggbm90YXRpb25zLCBnZXQgdXNlZCB0byB1c2luZyBgUmVzb2x2ZS1wYXRoYCBvciB0aGUgbW9yZSBwb3dlcmZ1bCBgUmVzb2x2ZS1QU0ZQYXRoYC4BCRABAAAJEQEAAAYSAQAACXJlYWRtZS5tZAYTAQAAPi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vcmVhZG1lLm1kCVsAAAAJFQEAAAkWAQAAAacAAABvAAAABhcBAAD7EkB7CgkjIFNjcmlwdCBtb2R1bGUgb3IgYmluYXJ5IG1vZHVsZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hbmlmZXN0CglSb290TW9kdWxlICAgICAgICA9ICfDvm5hbWXDvi5wc20xJwoKCSMgVmVyc2lvbiBudW1iZXIgb2YgdGhpcyBtb2R1bGUuCglNb2R1bGVWZXJzaW9uICAgICA9ICcxLjAuMCcKCgkjIElEIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBtb2R1bGUKCUdVSUQgICAgICAgICAgICAgID0gJ8O+IWd1aWRSb290TW9kdWxlIcO+JwoKCSMgQXV0aG9yIG9mIHRoaXMgbW9kdWxlCglBdXRob3IgICAgICAgICAgICA9ICfDvmF1dGhvcsO+JwoKCSMgQ29tcGFueSBvciB2ZW5kb3Igb2YgdGhpcyBtb2R1bGUKCUNvbXBhbnlOYW1lICAgICAgID0gJ8O+Y29tcGFuecO+JwoKCSMgQ29weXJpZ2h0IHN0YXRlbWVudCBmb3IgdGhpcyBtb2R1bGUKCUNvcHlyaWdodCAgICAgICAgID0gJ0NvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+JwoKCSMgRGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUKCURlc2NyaXB0aW9uICAgICAgID0gJ8O+ZGVzY3JpcHRpb27DvicKCgkjIE1pbmltdW0gdmVyc2lvbiBvZiB0aGUgV2luZG93cyBQb3dlclNoZWxsIGVuZ2luZSByZXF1aXJlZCBieSB0aGlzIG1vZHVsZQoJUG93ZXJTaGVsbFZlcnNpb24gPSAnNS4wJwoKCSMgTW9kdWxlcyB0aGF0IG11c3QgYmUgaW1wb3J0ZWQgaW50byB0aGUgZ2xvYmFsIGVudmlyb25tZW50IHByaW9yIHRvIGltcG9ydGluZwoJIyB0aGlzIG1vZHVsZQoJUmVxdWlyZWRNb2R1bGVzICAgPSBAKAoJCUB7IE1vZHVsZU5hbWUgPSAnUFNGcmFtZXdvcmsnOyBNb2R1bGVWZXJzaW9uID0gJ8O+IXBzZnJhbWV3b3JrIcO+JyB9CgkJQHsgTW9kdWxlTmFtZSA9ICdNaWNyb3NvZnQuUG93ZXJzaGVsbC5TZWNyZXRNYW5hZ2VtZW50JzsgTW9kdWxlVmVyc2lvbiA9ICfDviFzZWNyZXRNYW5hZ2VtZW50VmVyc2lvbiHDvicgfSwKCSkKCgkjIEFzc2VtYmxpZXMgdGhhdCBtdXN0IGJlIGxvYWRlZCBwcmlvciB0byBpbXBvcnRpbmcgdGhpcyBtb2R1bGUKCSMgUmVxdWlyZWRBc3NlbWJsaWVzID0gQCgnYmluXMO+bmFtZcO+LmRsbCcpCgoJIyBUeXBlIGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUKCSMgVHlwZXNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uVHlwZXMucHMxeG1sJykKCgkjIEZvcm1hdCBmaWxlcyAoLnBzMXhtbCkgdG8gYmUgbG9hZGVkIHdoZW4gaW1wb3J0aW5nIHRoaXMgbW9kdWxlCgkjIEZvcm1hdHNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uRm9ybWF0LnBzMXhtbCcpCgoJIyBGdW5jdGlvbnMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUKCUZ1bmN0aW9uc1RvRXhwb3J0ID0gJycKCgkjIENtZGxldHMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUKCUNtZGxldHNUb0V4cG9ydCAgID0gJycKCgkjIFZhcmlhYmxlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJVmFyaWFibGVzVG9FeHBvcnQgPSAnJwoKCSMgQWxpYXNlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJQWxpYXNlc1RvRXhwb3J0ICAgPSAnJwoKCSMgTGlzdCBvZiBhbGwgbW9kdWxlcyBwYWNrYWdlZCB3aXRoIHRoaXMgbW9kdWxlCglNb2R1bGVMaXN0ICAgICAgICA9IEAoKQoKCSMgTGlzdCBvZiBhbGwgZmlsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQoJRmlsZUxpc3QgICAgICAgICAgPSBAKCkKCgkjIFByaXZhdGUgZGF0YSB0byBwYXNzIHRvIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGluIE1vZHVsZVRvUHJvY2Vzcy4gVGhpcyBtYXkgYWxzbyBjb250YWluIGEgUFNEYXRhIGhhc2h0YWJsZSB3aXRoIGFkZGl0aW9uYWwgbW9kdWxlIG1ldGFkYXRhIHVzZWQgYnkgUG93ZXJTaGVsbC4KCVByaXZhdGVEYXRhICAgICAgID0gQHsKCgkJI1N1cHBvcnQgZm9yIFBvd2VyU2hlbGxHZXQgZ2FsbGVyaWVzLgoJCVBTRGF0YSA9IEB7CgoJCQkjIFRhZ3MgYXBwbGllZCB0byB0aGlzIG1vZHVsZS4gVGhlc2UgaGVscCB3aXRoIG1vZHVsZSBkaXNjb3ZlcnkgaW4gb25saW5lIGdhbGxlcmllcy4KCQkJIyBUYWdzID0gQCgpCgoJCQkjIEEgVVJMIHRvIHRoZSBsaWNlbnNlIGZvciB0aGlzIG1vZHVsZS4KCQkJIyBMaWNlbnNlVXJpID0gJycKCgkJCSMgQSBVUkwgdG8gdGhlIG1haW4gd2Vic2l0ZSBmb3IgdGhpcyBwcm9qZWN0LgoJCQkjIFByb2plY3RVcmkgPSAnJwoKCQkJIyBBIFVSTCB0byBhbiBpY29uIHJlcHJlc2VudGluZyB0aGlzIG1vZHVsZS4KCQkJIyBJY29uVXJpID0gJycKCgkJCSMgUmVsZWFzZU5vdGVzIG9mIHRoaXMgbW9kdWxlCgkJCSMgUmVsZWFzZU5vdGVzID0gJycKCgkJfSAjIEVuZCBvZiBQU0RhdGEgaGFzaHRhYmxlCgoJfSAjIEVuZCBvZiBQcml2YXRlRGF0YSBoYXNodGFibGUKfQEJGAEAAAkZAQAABhoBAAAeU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxBhsBAABTL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEJWwAAAAkdAQAACR4BAAABqAAAAG8AAAAGHwEAAKAaJHNjcmlwdDpNb2R1bGVSb290ID0gJFBTU2NyaXB0Um9vdAokc2NyaXB0Ok1vZHVsZVZlcnNpb24gPSAoSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXMO+bmFtZcO+LnBzZDEiKS5Nb2R1bGVWZXJzaW9uCgojIERldGVjdCB3aGV0aGVyIGF0IHNvbWUgbGV2ZWwgZG90c291cmNpbmcgd2FzIGVuZm9yY2VkCiRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5Eb0RvdFNvdXJjZSAtRmFsbGJhY2sgJGZhbHNlCmlmICgkw75uYW1lw75fZG90c291cmNlbW9kdWxlKSB7ICRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSAkdHJ1ZSB9Cgo8IwpOb3RlIG9uIFJlc29sdmUtUGF0aDoKQWxsIHBhdGhzIGFyZSBzZW50IHRocm91Z2ggUmVzb2x2ZS1QYXRoL1Jlc29sdmUtUFNGUGF0aCBpbiBvcmRlciB0byBjb252ZXJ0IHRoZW0gdG8gdGhlIGNvcnJlY3QgcGF0aCBzZXBhcmF0b3IuClRoaXMgYWxsb3dzIGlnbm9yaW5nIHBhdGggc2VwYXJhdG9ycyB0aHJvdWdob3V0IHRoZSBpbXBvcnQgc2VxdWVuY2UsIHdoaWNoIGNvdWxkIG90aGVyd2lzZSBjYXVzZSB0cm91YmxlIGRlcGVuZGluZyBvbiBPUy4KUmVzb2x2ZS1QYXRoIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHBhdGhzIHRoYXQgYWxyZWFkeSBleGlzdCwgUmVzb2x2ZS1QU0ZQYXRoIGNhbiBhY2NlcHQgdGhhdCB0aGUgbGFzdCBsZWFmIG15IG5vdCBleGlzdC4KVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiB0ZXN0aW5nIGZvciBwYXRocy4KIz4KCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBsb2FkaW5nIGluZGl2aWR1YWwgbW9kdWxlIGZpbGVzLCByYXRoZXIgdGhhbiB0aGUgY29tcGlsZWQgbW9kdWxlIHdhcyBlbmZvcmNlZAokaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuSW5kaXZpZHVhbEZpbGVzIC1GYWxsYmFjayAkZmFsc2UKaWYgKCTDvm5hbWXDvl9pbXBvcnRJbmRpdmlkdWFsRmlsZXMpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0KaWYgKFRlc3QtUGF0aCAoUmVzb2x2ZS1QU0ZQYXRoIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcLi5cLmdpdCIgLVNpbmdsZUl0ZW0gLU5ld0NoaWxkKSkgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQppZiAoIjx3YXMgbm90IGNvbXBpbGVkPiIgLWVxICc8d2FzIG5vdCBjb21waWxlZD4nKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9CgpmdW5jdGlvbiBJbXBvcnQtTW9kdWxlRmlsZQp7Cgk8IwoJCS5TWU5PUFNJUwoJCQlMb2FkcyBmaWxlcyBpbnRvIHRoZSBtb2R1bGUgb24gbW9kdWxlIGltcG9ydC4KCgkJLkRFU0NSSVBUSU9OCgkJCVRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4KCQkJSXQgc2hvdWxkIGFsd2F5cyBiZSBkb3Rzb3VyY2VkIGl0c2VsZiwgaW4gb3JkZXIgdG8gcHJvcGVyIGZ1bmN0aW9uLgoKCQkJVGhpcyBwcm92aWRlcyBhIGNlbnRyYWwgbG9jYXRpb24gdG8gcmVhY3QgdG8gZmlsZXMgYmVpbmcgaW1wb3J0ZWQsIGlmIGxhdGVyIGRlc2lyZWQKCgkJLlBBUkFNRVRFUiBQYXRoCgkJCVRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGxvYWQKCgkJLkVYQU1QTEUKCQkJUFMgQzpcPiAuIEltcG9ydC1Nb2R1bGVGaWxlIC1GaWxlICRmdW5jdGlvbi5GdWxsTmFtZQoKCQkJSW1wb3J0cyB0aGUgZmlsZSBzdG9yZWQgaW4gJGZ1bmN0aW9uIGFjY29yZGluZyB0byBpbXBvcnQgcG9saWN5CgkjPgoJW0NtZGxldEJpbmRpbmcoKV0KCVBhcmFtICgKCQlbc3RyaW5nXQoJCSRQYXRoCgkpCgoJJHJlc29sdmVkUGF0aCA9ICRFeGVjdXRpb25Db250ZXh0LlNlc3Npb25TdGF0ZS5QYXRoLkdldFJlc29sdmVkUFNQYXRoRnJvbVBTUGF0aCgkUGF0aCkuUHJvdmlkZXJQYXRoCglpZiAoJGRvRG90U291cmNlKSB7IC4gJHJlc29sdmVkUGF0aCB9CgllbHNlIHsgJEV4ZWN1dGlvbkNvbnRleHQuSW52b2tlQ29tbWFuZC5JbnZva2VTY3JpcHQoJGZhbHNlLCAoW3NjcmlwdGJsb2NrXTo6Q3JlYXRlKFtpby5maWxlXTo6UmVhZEFsbFRleHQoJHJlc29sdmVkUGF0aCkpKSwgJG51bGwsICRudWxsKSB9Cn0KCiNyZWdpb24gTG9hZCBpbmRpdmlkdWFsIGZpbGVzCmlmICgkaW1wb3J0SW5kaXZpZHVhbEZpbGVzKQp7CgkjIEV4ZWN1dGUgUHJlaW1wb3J0IGFjdGlvbnMKCWZvcmVhY2ggKCRwYXRoIGluICgmICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEiKSkgewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJHBhdGgKCX0KCgkjIEltcG9ydCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKQoJewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lCgl9CgoJIyBJbXBvcnQgYWxsIGludGVybmFsIGZ1bmN0aW9ucyB3aGljaCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIEV4dGVuc2lvbiBhbmQgdGhlIE1haW4tTW9kdWxlCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbCIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKSB7CgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUKCX0KCgkjIEltcG9ydCBhbGwgcHVibGljIGZ1bmN0aW9ucwoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkKCXsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQoJfQoKCSMgRXhlY3V0ZSBQb3N0aW1wb3J0IGFjdGlvbnMKCWZvcmVhY2ggKCRwYXRoIGluICgmICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHBvc3RpbXBvcnQucHMxIikpIHsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRwYXRoCgl9CgoJIyBFbmQgaXQgaGVyZSwgZG8gbm90IGxvYWQgY29tcGlsZWQgY29kZSBiZWxvdwoJcmV0dXJuCn0KI2VuZHJlZ2lvbiBMb2FkIGluZGl2aWR1YWwgZmlsZXMKCiNyZWdpb24gTG9hZCBjb21waWxlZCBjb2RlCiI8Y29tcGlsZSBjb2RlIGludG8gaGVyZT4iCiNlbmRyZWdpb24gTG9hZCBjb21waWxlZCBjb2RlAQkgAQAACSEBAAAGIgEAAB5TZWNyZXRNYW5hZ2VtZW50LsO+bmFt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cGUgYWNjZWxlcmF0b3JzIChlZmZlY3RpdmVseSBhbGlhc2VzIGZvciAuTkVUIHR5cGVzKQoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVHlwZSBBY2NlbGVyYXRvcnMsIHNlZSB0aGUgaGVscCBvbiBTZXQtUFNGVHlwZUFsaWFzAQl9AQAACX4BAAAGfwEAAAlyZWFkbWUubWQGgAEAAEIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2Jpbi9yZWFkbWUubWQJWwAAAAmCAQAACYMBAAABUwEAAG8AAAAGhAEAAJsBVE9QSUMKCWFib3V0X8O+bmFtZcO+CgkKU0hPUlQgREVTQ1JJUFRJT04KCUV4cGxhaW5zIGhvdyB0byB1c2UgdGhlIMO+bmFtZcO+IHBvd2Vyc2hlbGwgbW9kdWxlCgkKTE9ORyBERVNDUklQVElPTgoJPEluc2VydCBDb250ZW50IGhlcmU+CgpLRVlXT1JEUwoJw75uYW1lw74BCYUBAAAJhgEAAAaHAQAAF2Fib3V0X8O+bmFtZcO+LmhlbHAudHh0BogBAABSL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9lbi11cy9hYm91dF/Dvm5hbWXDvi5oZWxwLnR4dAlbAAAACYoBAAAJiwEAAAFUAQAAbwAAAAaMAQAAmQEjIFRoaXMgaXMgd2hlcmUgdGhlIHN0cmluZ3MgZ28sIHRoYXQgYXJlIHdyaXR0ZW4gYnkKIyBXcml0ZS1QU0ZNZXNzYWdlLCBTdG9wLVBTRkZ1bmN0aW9uIG9yIHRoZSBQU0ZyYW1ld29yayB2YWxpZGF0aW9uIHNjcmlwdGJsb2NrcwpAewoJJ2tleScgPSAnVmFsdWUnCn0BCY0BAAAJjgEAAAaPAQAADHN0cmluZ3MucHNkMQaQAQAARy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vZW4tdXMvc3RyaW5ncy5wc2QxCVsAAAAJkgEAAAmTAQAAAVUBAABvAAAABpQBAADMASMgRnVuY3Rpb25zCgpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGZ1bmN0aW9ucyBnby4KCkRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbW9kdWxlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdWJkaXZpZGUgdGhlbSBpbnRvIHN1YmZvbGRlcnMuCgpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseQEJlQEAAAmWAQAABpcBAAAJcmVhZG1lLm1kBpgBAABIL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9mdW5jdGlvbnMvcmVhZG1lLm1kCVsAAAAJmgEAAAmbAQAAAVYBAABvAAAABpwBAADEDmZ1bmN0aW9uIFJlZ2lzdGVyLcO+ZnVuY3Rpb25QcmVmaXjDvlNlY3VyZVZhdWx0IHsKICAgIDwjCiAgICAuU1lOT1BTSVMKICAgIFJlZ2lzdGVycyBhIG5ldyBTZWNyZXR2YXVsdCBvZiB0eXBlIMO+bmFtZcO+LgoKICAgIC5ERVNDUklQVElPTgogICAgUmVnaXN0ZXJzIGEgbmV3IFNlY3JldHZhdWx0IG9mIHR5cGUgw75uYW1lw74uCgogICAgI1RPRE8gQWRkIHBhcmFtZXRlciBkZXNjcmlwdGlvbgoKICAgIC5OT1RFUwogICAgR2VuZXJhbCBub3RlcwogICAgIz4KICAgIFtDbWRsZXRCaW5kaW5nKFN1cHBvcnRzU2hvdWxkUHJvY2VzcyldCiAgICBwYXJhbSAoCgogICAgICAgIFtwYXJhbWV0ZXIobWFuZGF0b3J5ID0gJHRydWUsIFBhcmFtZXRlclNldE5hbWUgPSAiY21kTGluZSIpXQogICAgICAgIFtzdHJpbmddJFZhdWx0TmFtZQogICAgICAgICMgVE9ETyBhZGQgeW91ciBzcGVjaWZpYyBwYXJhbWV0ZXJzCiAgICApCiAgICAjIEluIG9yZGVyIHRvIHJlZ2lzdGVyIGEgdmF1bHQgeW91IG5lZWQgdGhlIG1vZHVsZSBuYW1lLiBGb3IgZGV2IHB1cnBvc2VzCiAgICAjIHRoaXMgY29kZSAoc2VlIGNvbmZpZ3VyYXRpb24ucHMxKSBlbmFibGVzIHRoZSBkZXRlY3Rpb24gaWYgdGhlIG1vZHVsZSBpcyBpbnN0YWxsZWQKICAgICMgb3IgdGhlIFBTRDEgZmlsZSBpcyBpbXBvcnRlZCBkaXJlY3RseS4KICAgICRteU1vZHVsZVBhdGggPSAiJE1vZHVsZVJvb3RcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxIgogICAgJHBzZERhdGEgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlICRteU1vZHVsZVBhdGgKICAgICRyZWdpc3RlclBhcmFtID0gQHsKICAgICAgICBNb2R1bGVOYW1lICAgICAgPSBHZXQtUFNGQ29uZmlnVmFsdWUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uSW50ZXJBY3RpdmVSZWdpc3Rlci5tb2R1bGVwYXRoJwogICAgICAgIE5hbWUgICAgICAgICAgICA9ICRWYXVsdE5hbWUKICAgICAgICBWYXVsdFBhcmFtZXRlcnMgPSAkUFNCb3VuZFBhcmFtZXRlcnMgfCBDb252ZXJ0VG8tUFNGSGFzaHRhYmxlIC1Jbmhlcml0IC1FeGNsdWRlIEAoCiAgICAgICAgICAgICMgVE9ETyBJbmNsdWRlIGFsbCBmdW5jdGlvbiBwYXJhbWV0ZXIgbmFtZXMgd2hpY2ggc2hvdWxkIGJlIHRyYW5zZmVycmVkIHRvIHRoZSBWYXVsdC1QYXJhbWV0ZXJzCiAgICAgICAgICAgICMgJ1NlcnZlcicKICAgICAgICAgICAgIyAnUG9ydCcKICAgICAgICAgICAgIyAnRGF0YWJhc2UnCiAgICAgICAgICAgICMgJ1VzZXJOYW1lJwogICAgICAgICkKICAgIH0KICAgICRyZWdpc3RlclBhcmFtLlZhdWx0UGFyYW1ldGVycy52ZXJzaW9uID0gJHBzZERhdGEuTW9kdWxlVmVyc2lvbgogICAgaWYgKCRQU0NtZGxldC5TaG91bGRQcm9jZXNzKCRuYW1lKSkgewogICAgICAgIFdyaXRlLVBTRk1lc3NhZ2UgIlJlZ2lzdGVyaW5nIFZhdWx0ICR2YXVsdCB3aXRoIFBhcmFtICQoJHJlZ2lzdGVyUGFyYW18Q29udmVydFRvLUpzb24gLUNvbXByZXNzKSIKICAgICAgICBSZWdpc3Rlci1TZWNyZXRWYXVsdCBAcmVnaXN0ZXJQYXJhbQogICAgfQogICAgZWxzZSB7CiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAiV2hhdElmIHVzZWQsIG5vIHZhdWx0IHJlZ2lzdGVyZWQuIgogICAgICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgIllvdSBtYXkgcmVnaXN0ZXIgdGhlIGNob3NlbiB2YXVsdCBsYXRlciB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpgcmBuQHJlZ2lzdGVyUGFyYW09JCgkcmVnaXN0ZXJQYXJhbXxDb252ZXJ0VG8tTWV0YWRhdGEgLUFzSGFzaHRhYmxlKWByYG5SZWdpc3Rlci3DvmZ1bmN0aW9uUHJlZml4w75TZWN1cmVWYXVsdCBAcmVnaXN0ZXJQYXJhbSIKICAgIH0KfQEJnQEAAAmeAQAABp8BAAAqUmVnaXN0ZXItw75mdW5jdGlvblByZWZpeMO+U2VjdXJlVmF1bHQucHMxBqABAABpL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9mdW5jdGlvbnMvUmVnaXN0ZXItw75mdW5jdGlvblByZWZpeMO+U2VjdXJlVmF1bHQucHMxCVsAAAAJogEAAAmjAQAAAVcBAAA+AAAACaQBAAAGpQEAAA5jb25maWd1cmF0aW9ucwamAQAATC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvY29uZmlndXJhdGlvbnMJWwAAAAmoAQAACakBAAABWAEAAD4AAAAJqgEAAAarAQAACWZ1bmN0aW9ucwasAQAARy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvZnVuY3Rpb25zCVsAAAAJrgEAAAmvAQAAAVkBAAA+AAAACbABAAAGsQEAAAxzY3JpcHRibG9ja3MGsgEAAEovU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3NjcmlwdGJsb2NrcwlbAAAACbQBAAAJtQEAAAFaAQAAPgAAAAm2AQAABrcBAAAHc2NyaXB0cwa4AQAARS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvc2NyaXB0cwlbAAAACboBAAAJuwEAAAFbAQAAPgAAAAm8AQAABr0BAAAEdGVwcAa+AQAAQi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvdGVwcAlbAAAACcABAAAJwQEAAAFcAQAAPgAAAAnCAQAABsMBAAADYmluBsQBAABcL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9iaW4JWwAAAAnGAQAACccBAAABXQEAAD4AAAAJyAEAAAbJAQAABWVuLXVzBsoBAABeL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9lbi11cwlbAAAACcwBAAAJzQEAAAFeAQAAPgAAAAnOAQAABs8BAAAJZnVuY3Rpb25zBtABAABiL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMJWwAAAAnSAQAACdMBAAABXwEAAD4AAAAJ1AEAAAbVAQAAGGZ1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbAbWAQAAcS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zLnNoYXJlZGludGVybmFsCVsAAAAJ2AEAAAnZAQAAAWABAAA+AAAACdoBAAAG2wEAAAhpbnRlcm5hbAbcAQAAYS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwJWwAAAAneAQAACd8BAAABYQEAAD4AAAAJ4AEAAAbhAQAABXRlc3RzBuIBAABeL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cwlbAAAACeQBAAAJ5QEAAAFiAQAAPgAAAAnmAQAABucBAAADeG1sBugBAABcL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi94bWwJWwAAAAnqAQAACesBAAABYwEAAG8AAAAG7AEAAGojIENoYW5nZWxvZwojIyAxLjAuMCAow74hZHluYW1pY3NjcmlwdF8zOTQ0MzIhw74pCiAtIE5ldzogU29tZSBTdHVmZgogLSBVcGQ6IE1vYXIgU3R1ZmYKIC0gRml4OiBNdWNoIFN0dWZmAQntAQAACe4BAAAG7wEAAAxjaGFuZ2Vsb2cubWQG8AEAAGUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2NoYW5nZWxvZy5tZAlbAAAACfIBAAAJ8wEAAAFkAQAAbwAAAAb0AQAA/gcjIFBTRk1vZHVsZSBndWlkYW5jZQoKVGhpcyBpcyBhIGZpbmlzaGVkIG1vZHVsZSBsYXlvdXQgb3B0aW1pemVkIGZvciBpbXBsZW1lbnRpbmcgdGhlIFBTRnJhbWV3b3JrLgoKSWYgeW91IGRvbid0IGNhcmUgdG8gZGVhbCB3aXRoIHRoZSBkZXRhaWxzLCB0aGlzIGlzIHdoYXQgeW91IG5lZWQgdG8gZG8gdG8gZ2V0IHN0YXJ0ZWQgc2VlaW5nIHJlc3VsdHM6CgogLSBBZGQgdGhlIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHRvIGAvZnVuY3Rpb25zL2AKIC0gVXBkYXRlIHRoZSBgRnVuY3Rpb25zVG9FeHBvcnRgIG5vZGUgaW4gdGhlIG1vZHVsZSBtYW5pZmVzdCAow75uYW1lw74ucHNkMSkuIEFsbCBmdW5jdGlvbnMgeW91IHdhbnQgdG8gcHVibGlzaCBzaG91bGQgYmUgaW4gYSBsaXN0LgogLSBBZGQgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyB0aGUgdXNlciBzaG91bGQgbm90IHNlZSB0byBgL2ludGVybmFsL2Z1bmN0aW9ucy9gCiAKICMjIFBhdGggV2FybmluZwogCiA+IElmIHlvdSB3YW50IHlvdXIgbW9kdWxlIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBMaW51eCBhbmQgTWFjT1MsIGtlZXAgaW4gbWluZCB0aGF0IHRob3NlIE9TIGFyZSBjYXNlIHNlbnNpdGl2ZSBmb3IgcGF0aHMgYW5kIGZpbGVzLgogCiBgSW1wb3J0LU1vZHVsZUZpbGVgIGlzIHByZWNvbmZpZ3VyZWQgdG8gcmVzb2x2ZSB0aGUgcGF0aCBvZiB0aGUgZmlsZXMgc3BlY2lmaWVkLCBzbyBpdCB3aWxsIHJlbGlhYmx5IGNvbnZlcnQgd2VpcmQgcGF0aCBub3RhdGlvbnMgdGhlIHN5c3RlbSBjYW4ndCBoYW5kbGUuCiBDb250ZW50IGltcG9ydGVkIHRocm91Z2ggdGhhdCBjb21tYW5kIHRodXMgbmVlZCBub3QgbWluZCB0aGUgcGF0aCBzZXBhcmF0b3IuCiBJZiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgeW91ciBjb2RlIHRvbyB3aWxsIHN1cnZpdmUgT1Mtc3BlY2lmaWMgcGF0aCBub3RhdGlvbnMsIGdldCB1c2VkIHRvIHVzaW5nIGBSZXNvbHZlLXBhdGhgIG9yIHRoZSBtb3JlIHBvd2VyZnVsIGBSZXNvbHZlLVBTRlBhdGhgLgEJ9QEAAAn2AQAABvcBAAAJcmVhZG1lLm1kBvgBAABiL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9yZWFkbWUubWQJWwAAAAn6AQAACfsBAAABZQEAAG8AAAAG/AEAAMwRQHsKCSMgU2NyaXB0IG1vZHVsZSBvciBiaW5hcnkgbW9kdWxlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFuaWZlc3QKCVJvb3RNb2R1bGUgICAgICAgID0gJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNtMScKCgkjIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgbW9kdWxlLgoJTW9kdWxlVmVyc2lvbiA9ICcxLjAuMCcKCgkjIElEIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBtb2R1bGUKCUdVSUQgPSAnw74hZ3VpZEV4dGVuc2lvbiHDvicKCgkjIEF1dGhvciBvZiB0aGlzIG1vZHVsZQoJQXV0aG9yID0gJ8O+YXV0aG9yw74nCgoJIyBDb21wYW55IG9yIHZlbmRvciBvZiB0aGlzIG1vZHVsZQoJQ29tcGFueU5hbWUgPSAnw75jb21wYW55w74nCgoJIyBDb3B5cmlnaHQgc3RhdGVtZW50IGZvciB0aGlzIG1vZHVsZQoJQ29weXJpZ2h0ID0gJ0NvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+JwoKCSMgRGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUKCURlc2NyaXB0aW9uID0gJ8O+ZGVzY3JpcHRpb27DvicKCgkjIE1pbmltdW0gdmVyc2lvbiBvZiB0aGUgV2luZG93cyBQb3dlclNoZWxsIGVuZ2luZSByZXF1aXJlZCBieSB0aGlzIG1vZHVsZQoJUG93ZXJTaGVsbFZlcnNpb24gPSAnNS4wJwoKCSMgTW9kdWxlcyB0aGF0IG11c3QgYmUgaW1wb3J0ZWQgaW50byB0aGUgZ2xvYmFsIGVudmlyb25tZW50IHByaW9yIHRvIGltcG9ydGluZwoJIyB0aGlzIG1vZHVsZQoJUmVxdWlyZWRNb2R1bGVzID0gQCgKCQlAeyBNb2R1bGVOYW1lPSdQU0ZyYW1ld29yayc7IE1vZHVsZVZlcnNpb249J8O+IXBzZnZlcnNpb24hw74nIH0KCSkKCgkjIEFzc2VtYmxpZXMgdGhhdCBtdXN0IGJlIGxvYWRlZCBwcmlvciB0byBpbXBvcnRpbmcgdGhpcyBtb2R1bGUKCSMgUmVxdWlyZWRBc3NlbWJsaWVzID0gQCgnYmluXMO+bmFtZcO+LmRsbCcpCgoJIyBUeXBlIGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUKCSMgVHlwZXNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uVHlwZXMucHMxeG1sJykKCgkjIEZvcm1hdCBmaWxlcyAoLnBzMXhtbCkgdG8gYmUgbG9hZGVkIHdoZW4gaW1wb3J0aW5nIHRoaXMgbW9kdWxlCgkjIEZvcm1hdHNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uRm9ybWF0LnBzMXhtbCcpCgoJIyBGdW5jdGlvbnMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUKCUZ1bmN0aW9uc1RvRXhwb3J0ID0gJycKCgkjIENtZGxldHMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUKCUNtZGxldHNUb0V4cG9ydCA9ICcnCgoJIyBWYXJpYWJsZXMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUKCVZhcmlhYmxlc1RvRXhwb3J0ID0gJycKCgkjIEFsaWFzZXMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUKCUFsaWFzZXNUb0V4cG9ydCA9ICcnCgoJIyBMaXN0IG9mIGFsbCBtb2R1bGVzIHBhY2thZ2VkIHdpdGggdGhpcyBtb2R1bGUKCU1vZHVsZUxpc3QgPSBAKCkKCgkjIExpc3Qgb2YgYWxsIGZpbGVzIHBhY2thZ2VkIHdpdGggdGhpcyBtb2R1bGUKCUZpbGVMaXN0ID0gQCgpCgoJIyBQcml2YXRlIGRhdGEgdG8gcGFzcyB0byB0aGUgbW9kdWxlIHNwZWNpZmllZCBpbiBNb2R1bGVUb1Byb2Nlc3MuIFRoaXMgbWF5IGFsc28gY29udGFpbiBhIFBTRGF0YSBoYXNodGFibGUgd2l0aCBhZGRpdGlvbmFsIG1vZHVsZSBtZXRhZGF0YSB1c2VkIGJ5IFBvd2VyU2hlbGwuCglQcml2YXRlRGF0YSA9IEB7CgoJCSNTdXBwb3J0IGZvciBQb3dlclNoZWxsR2V0IGdhbGxlcmllcy4KCQlQU0RhdGEgPSBAewoKCQkJIyBUYWdzIGFwcGxpZWQgdG8gdGhpcyBtb2R1bGUuIFRoZXNlIGhlbHAgd2l0aCBtb2R1bGUgZGlzY292ZXJ5IGluIG9ubGluZSBnYWxsZXJpZXMuCgkJCSMgVGFncyA9IEAoKQoKCQkJIyBBIFVSTCB0byB0aGUgbGljZW5zZSBmb3IgdGhpcyBtb2R1bGUuCgkJCSMgTGljZW5zZVVyaSA9ICcnCgoJCQkjIEEgVVJMIHRvIHRoZSBtYWluIHdlYnNpdGUgZm9yIHRoaXMgcHJvamVjdC4KCQkJIyBQcm9qZWN0VXJpID0gJycKCgkJCSMgQSBVUkwgdG8gYW4gaWNvbiByZXByZXNlbnRpbmcgdGhpcyBtb2R1bGUuCgkJCSMgSWNvblVyaSA9ICcnCgoJCQkjIFJlbGVhc2VOb3RlcyBvZiB0aGlzIG1vZHVsZQoJCQkjIFJlbGVhc2VOb3RlcyA9ICcnCgoJCX0gIyBFbmQgb2YgUFNEYXRhIGhhc2h0YWJsZQoKCX0gIyBFbmQgb2YgUHJpdmF0ZURhdGEgaGFzaHRhYmxlCn0BCf0BAAAJ/gEAAAb/AQAAKFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLnBzZDEGAAIAAIEBL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi5wc2QxCVsAAAAJAgIAAAkDAgAAAWYBAABvAAAABgQCAAD8GSRzY3JpcHQ6TW9kdWxlUm9vdCA9ICRQU1NjcmlwdFJvb3QKJHNjcmlwdDpNb2R1bGVWZXJzaW9uID0gKEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVzDvm5hbWXDvi5wc2QxIikuTW9kdWxlVmVyc2lvbgoKIyBEZXRlY3Qgd2hldGhlciBhdCBzb21lIGxldmVsIGRvdHNvdXJjaW5nIHdhcyBlbmZvcmNlZAokc2NyaXB0OmRvRG90U291cmNlID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuRG9Eb3RTb3VyY2UgLUZhbGxiYWNrICRmYWxzZQppZiAoJMO+bmFtZcO+X2RvdHNvdXJjZW1vZHVsZSkgeyAkc2NyaXB0OmRvRG90U291cmNlID0gJHRydWUgfQoKPCMKTm90ZSBvbiBSZXNvbHZlLVBhdGg6CkFsbCBwYXRocyBhcmUgc2VudCB0aHJvdWdoIFJlc29sdmUtUGF0aC9SZXNvbHZlLVBTRlBhdGggaW4gb3JkZXIgdG8gY29udmVydCB0aGVtIHRvIHRoZSBjb3JyZWN0IHBhdGggc2VwYXJhdG9yLgpUaGlzIGFsbG93cyBpZ25vcmluZyBwYXRoIHNlcGFyYXRvcnMgdGhyb3VnaG91dCB0aGUgaW1wb3J0IHNlcXVlbmNlLCB3aGljaCBjb3VsZCBvdGhlcndpc2UgY2F1c2UgdHJvdWJsZSBkZXBlbmRpbmcgb24gT1MuClJlc29sdmUtUGF0aCBjYW4gb25seSBiZSB1c2VkIGZvciBwYXRocyB0aGF0IGFscmVhZHkgZXhpc3QsIFJlc29sdmUtUFNGUGF0aCBjYW4gYWNjZXB0IHRoYXQgdGhlIGxhc3QgbGVhZiBteSBub3QgZXhpc3QuClRoaXMgaXMgaW1wb3J0YW50IHdoZW4gdGVzdGluZyBmb3IgcGF0aHMuCiM+CgojIERldGVjdCB3aGV0aGVyIGF0IHNvbWUgbGV2ZWwgbG9hZGluZyBpbmRpdmlkdWFsIG1vZHVsZSBmaWxlcywgcmF0aGVyIHRoYW4gdGhlIGNvbXBpbGVkIG1vZHVsZSB3YXMgZW5mb3JjZWQKJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9IEdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgw75uYW1lw74uSW1wb3J0LkluZGl2aWR1YWxGaWxlcyAtRmFsbGJhY2sgJGZhbHNlCmlmICgkw75uYW1lw75faW1wb3J0SW5kaXZpZHVhbEZpbGVzKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9CmlmIChUZXN0LVBhdGggKFJlc29sdmUtUFNGUGF0aCAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXC4uXC5naXQiIC1TaW5nbGVJdGVtIC1OZXdDaGlsZCkpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0KaWYgKCI8d2FzIG5vdCBjb21waWxlZD4iIC1lcSAnPHdhcyBub3QgY29tcGlsZWQ+JykgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQoKZnVuY3Rpb24gSW1wb3J0LU1vZHVsZUZpbGUKewoJPCMKCQkuU1lOT1BTSVMKCQkJTG9hZHMgZmlsZXMgaW50byB0aGUgbW9kdWxlIG9uIG1vZHVsZSBpbXBvcnQuCgoJCS5ERVNDUklQVElPTgoJCQlUaGlzIGhlbHBlciBmdW5jdGlvbiBpcyB1c2VkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24uCgkJCUl0IHNob3VsZCBhbHdheXMgYmUgZG90c291cmNlZCBpdHNlbGYsIGluIG9yZGVyIHRvIHByb3BlciBmdW5jdGlvbi4KCgkJCVRoaXMgcHJvdmlkZXMgYSBjZW50cmFsIGxvY2F0aW9uIHRvIHJlYWN0IHRvIGZpbGVzIGJlaW5nIGltcG9ydGVkLCBpZiBsYXRlciBkZXNpcmVkCgoJCS5QQVJBTUVURVIgUGF0aAoJCQlUaGUgcGF0aCB0byB0aGUgZmlsZSB0byBsb2FkCgoJCS5FWEFNUExFCgkJCVBTIEM6XD4gLiBJbXBvcnQtTW9kdWxlRmlsZSAtRmlsZSAkZnVuY3Rpb24uRnVsbE5hbWUKCgkJCUltcG9ydHMgdGhlIGZpbGUgc3RvcmVkIGluICRmdW5jdGlvbiBhY2NvcmRpbmcgdG8gaW1wb3J0IHBvbGljeQoJIz4KCVtDbWRsZXRCaW5kaW5nKCldCglQYXJhbSAoCgkJW3N0cmluZ10KCQkkUGF0aAoJKQoKCSRyZXNvbHZlZFBhdGggPSAkRXhlY3V0aW9uQ29udGV4dC5TZXNzaW9uU3RhdGUuUGF0aC5HZXRSZXNvbHZlZFBTUGF0aEZyb21QU1BhdGgoJFBhdGgpLlByb3ZpZGVyUGF0aAoJaWYgKCRkb0RvdFNvdXJjZSkgeyAuICRyZXNvbHZlZFBhdGggfQoJZWxzZSB7ICRFeGVjdXRpb25Db250ZXh0Lkludm9rZUNvbW1hbmQuSW52b2tlU2NyaXB0KCRmYWxzZSwgKFtzY3JpcHRibG9ja106OkNyZWF0ZShbaW8uZmlsZV06OlJlYWRBbGxUZXh0KCRyZXNvbHZlZFBhdGgpKSksICRudWxsLCAkbnVsbCkgfQp9CgojcmVnaW9uIExvYWQgaW5kaXZpZHVhbCBmaWxlcwppZiAoJGltcG9ydEluZGl2aWR1YWxGaWxlcykKewoJIyBFeGVjdXRlIFByZWltcG9ydCBhY3Rpb25zCglmb3JlYWNoICgkcGF0aCBpbiAoJiAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xwcmVpbXBvcnQucHMxIikpIHsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRwYXRoCgl9CgoJIyBJbXBvcnQgYWxsIGludGVybmFsIGZ1bmN0aW9ucwoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxmdW5jdGlvbnMiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkKCXsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQoJfQoKCSMgSW1wb3J0IGFsbCBpbnRlcm5hbCBmdW5jdGlvbnMgd2hpY2ggYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBFeHRlbnNpb24gYW5kIHRoZSBNYWluLU1vZHVsZQoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxmdW5jdGlvbnMuc2hhcmVkaW50ZXJuYWwiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkgewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lCgl9CgoJIyBJbXBvcnQgYWxsIHB1YmxpYyBmdW5jdGlvbnMKCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcZnVuY3Rpb25zIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpCgl7CgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUKCX0KCgkjIEV4ZWN1dGUgUG9zdGltcG9ydCBhY3Rpb25zCglmb3JlYWNoICgkcGF0aCBpbiAoJiAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xwb3N0aW1wb3J0LnBzMSIpKSB7CgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkcGF0aAoJfQoKCSMgRW5kIGl0IGhlcmUsIGRvIG5vdCBsb2FkIGNvbXBpbGVkIGNvZGUgYmVsb3cKCXJldHVybgp9CiNlbmRyZWdpb24gTG9hZCBpbmRpdmlkdWFsIGZpbGVzCgojcmVnaW9uIExvYWQgY29tcGlsZWQgY29kZQoiPGNvbXBpbGUgY29kZSBpbnRvIGhlcmU+IgojZW5kcmVnaW9uIExvYWQgY29tcGlsZWQgY29kZQEJBQIAAAkGAgAABgcCAAAoU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNtMQYIAgAAgQEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLnBzbTEJWwAAAAkKAgAACQsCAAABaAEAAD4AAAAJDAIAAAYNAgAACWZ1bmN0aW9ucwYOAgAARC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMvZnVuY3Rpb25zCVsAAAAJEAIAAAkRAgAAAWkBAAA+AAAACRICAAAGEwIAAAdnZW5lcmFsBhQCAABCL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsCVsAAAAJFgIAAAkXAgAAAWoBAABvAAAABhgCAAC6GnBhcmFtICgKCSRUZXN0R2VuZXJhbCA9ICR0cnVlLAoJCgkkVGVzdEZ1bmN0aW9ucyA9ICR0cnVlLAoJCglbVmFsaWRhdGVTZXQoJ05vbmUnLCAnTm9ybWFsJywgJ0RldGFpbGVkJywgJ0RpYWdub3N0aWMnKV0KCVtBbGlhcygnU2hvdycpXQoJJE91dHB1dCA9ICJOb25lIiwKCQoJJEluY2x1ZGUgPSAiKiIsCgkKCSRFeGNsdWRlID0gIiIKKQoKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJTdGFydGluZyBUZXN0cyIKCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiSW1wb3J0aW5nIE1vZHVsZSIKCiRnbG9iYWw6dGVzdHJvb3QgPSAkUFNTY3JpcHRSb290CiRnbG9iYWw6X19wZXN0ZXJfZGF0YSA9IEB7IH0KClJlbW92ZS1Nb2R1bGUgw75uYW1lw74gLUVycm9yQWN0aW9uIElnbm9yZQpJbXBvcnQtTW9kdWxlICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+LnBzZDEiCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw74ucHNtMSIgLUZvcmNlCgojIE5lZWQgdG8gaW1wb3J0IGV4cGxpY2l0bHkgc28gd2UgY2FuIHVzZSB0aGUgY29uZmlndXJhdGlvbiBjbGFzcwpJbXBvcnQtTW9kdWxlIFBlc3RlcgoKw74hdGVzdGZvbGRlciHDvgoKJHRvdGFsRmFpbGVkID0gMAokdG90YWxSdW4gPSAwCgokdGVzdHJlc3VsdHMgPSBAKCkKJGNvbmZpZyA9IFtQZXN0ZXJDb25maWd1cmF0aW9uXTo6RGVmYXVsdArDviFwZXN0ZXJjb25maWchw74KCiNyZWdpb24gUnVuIEdlbmVyYWwgVGVzdHMKaWYgKCRUZXN0R2VuZXJhbCkKewoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJNb2R1bGVzIGltcG9ydGVkLCBwcm9jZWVkaW5nIHdpdGggZ2VuZXJhbCB0ZXN0cyIKCWZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkUFNTY3JpcHRSb290XGdlbmVyYWwiIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIiouVGVzdHMucHMxIikpCgl7CgkJaWYgKCRmaWxlLk5hbWUgLW5vdGxpa2UgJEluY2x1ZGUpIHsgY29udGludWUgfQoJCWlmICgkZmlsZS5OYW1lIC1saWtlICRFeGNsdWRlKSB7IGNvbnRpbnVlIH0KCgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgU2lnbmlmaWNhbnQgLU1lc3NhZ2UgIiAgRXhlY3V0aW5nIDxjPSdlbSc+JCgkZmlsZS5OYW1lKTwvYz4iCgkJJGNvbmZpZy5UZXN0UmVzdWx0Lk91dHB1dFBhdGggPSBKb2luLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi5cVGVzdFJlc3VsdHMiICJURVNULSQoJGZpbGUuQmFzZU5hbWUpLnhtbCIKCQkkY29uZmlnLlJ1bi5QYXRoID0gJGZpbGUuRnVsbE5hbWUKCQkkY29uZmlnLlJ1bi5QYXNzVGhydSA9ICR0cnVlCgkJJGNvbmZpZy5PdXRwdXQuVmVyYm9zaXR5ID0gJE91dHB1dAogICAgCSRyZXN1bHRzID0gSW52b2tlLVBlc3RlciAtQ29uZmlndXJhdGlvbiAkY29uZmlnCgkJZm9yZWFjaCAoJHJlc3VsdCBpbiAkcmVzdWx0cykKCQl7CgkJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQKCQkJJHRvdGFsRmFpbGVkICs9ICRyZXN1bHQuRmFpbGVkQ291bnQKCQkJJHJlc3VsdC5UZXN0cyB8IFdoZXJlLU9iamVjdCBSZXN1bHQgLW5lICdQYXNzZWQnIHwgRm9yRWFjaC1PYmplY3QgewoJCQkJJHRlc3RyZXN1bHRzICs9IFtwc2N1c3RvbW9iamVjdF1AewoJCQkJCUJsb2NrICAgID0gJF8uQmxvY2sKCQkJCQlOYW1lCSA9ICJJdCAkKCRfLk5hbWUpIgoJCQkJCVJlc3VsdCAgID0gJF8uUmVzdWx0CgkJCQkJTWVzc2FnZSAgPSAkXy5FcnJvclJlY29yZC5EaXNwbGF5RXJyb3JNZXNzYWdlCgkJCQl9CgkJCX0KCQl9Cgl9Cn0KI2VuZHJlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cwoKJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyIHwgT3V0LUhvc3QKCiNyZWdpb24gVGVzdCBDb21tYW5kcwppZiAoJFRlc3RGdW5jdGlvbnMpCnsKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHJvY2VlZGluZyB3aXRoIGluZGl2aWR1YWwgdGVzdHMiCglmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJFBTU2NyaXB0Um9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIipUZXN0cy5wczEiKSkKCXsKCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9CgkJaWYgKCRmaWxlLk5hbWUgLWxpa2UgJEV4Y2x1ZGUpIHsgY29udGludWUgfQoJCQoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyAkKCRmaWxlLk5hbWUpIgoJCSRjb25maWcuVGVzdFJlc3VsdC5PdXRwdXRQYXRoID0gSm9pbi1QYXRoICIkUFNTY3JpcHRSb290XC4uXC4uXFRlc3RSZXN1bHRzIiAiVEVTVC0kKCRmaWxlLkJhc2VOYW1lKS54bWwiCgkJJGNvbmZpZy5SdW4uUGF0aCA9ICRmaWxlLkZ1bGxOYW1lCgkJJGNvbmZpZy5SdW4uUGFzc1RocnUgPSAkdHJ1ZQoJCSRjb25maWcuT3V0cHV0LlZlcmJvc2l0eSA9ICRPdXRwdXQKICAgIAkkcmVzdWx0cyA9IEludm9rZS1QZXN0ZXIgLUNvbmZpZ3VyYXRpb24gJGNvbmZpZwoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpCgkJewoJCQkkdG90YWxSdW4gKz0gJHJlc3VsdC5Ub3RhbENvdW50CgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50CgkJCSRyZXN1bHQuVGVzdHMgfCBXaGVyZS1PYmplY3QgUmVzdWx0IC1uZSAnUGFzc2VkJyB8IEZvckVhY2gtT2JqZWN0IHsKCQkJCSR0ZXN0cmVzdWx0cyArPSBbcHNjdXN0b21vYmplY3RdQHsKCQkJCQlCbG9jayAgICA9ICRfLkJsb2NrCgkJCQkJTmFtZQkgPSAiSXQgJCgkXy5OYW1lKSIKCQkJCQlSZXN1bHQgICA9ICRfLlJlc3VsdAoJCQkJCU1lc3NhZ2UgID0gJF8uRXJyb3JSZWNvcmQuRGlzcGxheUVycm9yTWVzc2FnZQoJCQkJfQoJCQl9CgkJfQoJfQp9CiNlbmRyZWdpb24gVGVzdCBDb21tYW5kcwoKJHRlc3RyZXN1bHRzIHwgU29ydC1PYmplY3QgRGVzY3JpYmUsIENvbnRleHQsIE5hbWUsIFJlc3VsdCwgTWVzc2FnZSB8IEZvcm1hdC1MaXN0CgppZiAoJHRvdGFsRmFpbGVkIC1lcSAwKSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICJBbGwgPGM9J2VtJz4kdG90YWxSdW48L2M+IHRlc3RzIGV4ZWN1dGVkIHdpdGhvdXQgYSBzaW5nbGUgZmFpbHVyZSEiIH0KZWxzZSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICI8Yz0nZW0nPiR0b3RhbEZhaWxlZCB0ZXN0czwvYz4gb3V0IG9mIDxjPSdzdWInPiR0b3RhbFJ1bjwvYz4gdGVzdHMgZmFpbGVkISIgfQoKaWYgKCR0b3RhbEZhaWxlZCAtZ3QgMCkKewoJdGhyb3cgIiR0b3RhbEZhaWxlZCAvICR0b3RhbFJ1biB0ZXN0cyBmYWlsZWQhIgp9AQkZAgAACRoCAAAGGwIAAApwZXN0ZXIucHMxBhwCAABFL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9wZXN0ZXIucHMxCVsAAAAJHgIAAAkfAgAAAWsBAABvAAAABiACAACEByMgRGVzY3JpcHRpb24KClRoaXMgaXMgdGhlIGZvbGRlciwgd2hlcmUgYWxsIHRoZSB0ZXN0cyBnby4KClRob3NlIGFyZSBzdWJkaXZpZGVkIGluIHR3byBjYXRlZ29yaWVzOgoKIC0gR2VuZXJhbAogLSBGdW5jdGlvbgoKIyMgR2VuZXJhbCBUZXN0cwoKR2VuZXJhbCB0ZXN0cyBhcmUgZnVuY3Rpb24gZ2VuZXJpYyBhbmQgdGVzdCBmb3IgZ2VuZXJhbCBwb2xpY2llcy4KClRoZXNlIHRlc3Qgc2NhbiBhbnN3ZXIgcXVlc3Rpb25zIHN1Y2ggYXM6CgogLSBJcyBteSBtb2R1bGUgZm9sbG93aW5nIG15IHN0eWxlIGd1aWRlcz8KIC0gRG9lcyBhbnkgb2YgbXkgc2NyaXB0cyBoYXZlIGEgc3ludGF4IGVycm9yPwogLSBEbyBteSBzY3JpcHRzIHVzZSBjb21tYW5kcyBJIGRvIG5vdCB3YW50IHRoZW0gdG8gdXNlPwogLSBEbyBteSBjb21tYW5kcyBmb2xsb3cgYmVzdCBwcmFjdGljZXM/CiAtIERvIG15IGNvbW1hbmRzIGhhdmUgcHJvcGVyIGhlbHA/CgpCYXNpY2FsbHksIHRoZXNlIGFsbG93IGEgZ2VuZXJhbCBtb2R1bGUgaGVhbHRoIGNoZWNrLgoKVGhlc2UgdGVzdHMgYXJlIGFscmVhZHkgcHJvdmlkZWQgYXMgcGFydCBvZiB0aGUgdGVtcGxhdGUuCgojIyBGdW5jdGlvbiBUZXN0cwoKQSBoZWFsdGh5IG1vZHVsZSBzaG91bGQgcHJvdmlkZSB1bml0IGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgdGhlIGNvbW1hbmRzICYgY29tcG9uZW50cyBpdCBzaGlwcy4KT25seSB0aGVuIGNhbiBiZSBndWFyYW50ZWVkLCB0aGF0IHRoZXkgd2lsbCBhY3R1YWxseSBwZXJmb3JtIGFzIHByb21pc2VkLgoKSG93ZXZlciwgYXMgZWFjaCBzdWNoIHRlc3QgbXVzdCBiZSBzcGVjaWZpYyB0byB0aGUgZnVuY3Rpb24gaXQgdGVzdHMsIHRoZXJlIGNhbm5vdCBiZSBtdWNoIGluIHRoZSB3YXkgb2YgdGVtcGxhdGVzLgEJIQIAAAkiAgAABiMCAAAJcmVhZG1lLm1kBiQCAABEL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9yZWFkbWUubWQJWwAAAAkmAgAACScCAAABbAEAAG8AAAAGKAIAAIILIyBYTUwKClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSBwcm9qZWN0IFhNTCBmaWxlcyBnbywgbm90YWJseToKCiAtIEZvcm1hdCBYTUwKIC0gVHlwZSBFeHRlbnNpb24gWE1MCgpFeHRlcm5hbCBoZWxwIGZpbGVzIHNob3VsZCBfbm90XyBiZSBwbGFjZWQgaW4gdGhpcyBmb2xkZXIhCgojIyBOb3RlcyBvbiBGaWxlcyBhbmQgTmFtaW5nCgpUaGVyZSBzaG91bGQgYmUgb25seSBvbmUgZm9ybWF0IGZpbGUgYW5kIG9uZSB0eXBlIGV4dGVuc2lvbiBmaWxlIHBlciBwcm9qZWN0LCBhcyBpbXBvcnRpbmcgdGhlbSBoYXMgYSBub3RhYmxlIGltcGFjdCBvbiBpbXBvcnQgdGltZXMuCgogLSBUaGUgRm9ybWF0IFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LkZvcm1hdC5wczF4bWxgCiAtIFRoZSBUeXBlIEV4dGVuc2lvbiBYTUwgc2hvdWxkIGJlIG5hbWVkIGDDvm5hbWXDvi5UeXBlcy5wczF4bWxgCgojIyBUb29scwoKIyMjIE5ldy1QU01ERm9ybWF0VGFibGVEZWZpbml0aW9uCgpUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhbiBpbnB1dCBvYmplY3QgYW5kIGdlbmVyYXRlIGZvcm1hdCB4bWwgZm9yIGFuIGF1dG8tc2l6ZWQgdGFibGUuCgpJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBmb3JtYXRzLgoKIyMjIEdldC1QU0ZUeXBlU2VyaWFsaXphdGlvbkRhdGEKCmBgYApDIyBXYXJuaW5nIQpUaGlzIHNlY3Rpb24gaXMgb25seSBpbnRlcmVzdCBpZiB5b3UncmUgdXNpbmcgQyMgdG9nZXRoZXIgd2l0aCBQb3dlclNoZWxsLgpgYGAKClRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHR5cGUgZXh0ZW5zaW9uIFhNTCB0aGF0IGFsbG93cyBQb3dlclNoZWxsIHRvIGNvbnZlcnQgdHlwZXMgd3JpdHRlbiBpbiBDIyB0byBiZSB3cml0dGVuIHRvIGZpbGUgYW5kIHJlc3RvcmVkIGZyb20gaXQgd2l0aG91dCBiZWluZyAnRGVzZXJpYWxpemVkJy4gQWxzbyB3b3JrcyBmb3Igam9icyBvciByZW1vdGluZywgaWYgYm90aCBzaWRlcyBoYXZlIHRoZSBgUFNGcmFtZXdvcmtgIG1vZHVsZSBhbmQgdHlwZSBleHRlbnNpb24gbG9hZGVkLgoKSW4gb3JkZXIgZm9yIGEgY2xhc3MgdG8gYmUgZWxpZ2libGUgZm9yIHRoaXMsIGl0IG5lZWRzIHRvIGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBydWxlczoKCiAtIEhhdmUgdGhlIGBbU2VyaWFsaXphYmxlXWAgYXR0cmlidXRlCiAtIEJlIHB1YmxpYwogLSBIYXZlIGFuIGVtcHR5IGNvbnN0cnVjdG9yCiAtIEFsbG93IGFsbCBwdWJsaWMgcHJvcGVydGllcy9maWVsZHMgdG8gYmUgc2V0IChldmVuIGlmIHNldHRpbmcgaXQgZG9lc24ndCBkbyBhbnl0aGluZykgd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24uCgpgYGAKbm9uLXB1YmxpYyBwcm9wZXJ0aWVzIGFuZCBmaWVsZHMgd2lsbCBiZSBsb3N0IGluIHRoaXMgcHJvY2VzcyEKYGBgAQkpAgAACSoCAAAGKwIAAAlyZWFkbWUubWQGLAIAAEIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3htbC9yZWFkbWUubWQJWwAAAAkuAgAACS8CAAABbQEAAG8AAAAGMAIAAMoFPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTE2Ij8+CjxDb25maWd1cmF0aW9uPgoJPFZpZXdEZWZpbml0aW9ucz4KCQk8IS0tIEZvby5CYXIgLS0+CgkJPFZpZXc+CgkJCTxOYW1lPkZvby5CYXI8L05hbWU+CgkJCTxWaWV3U2VsZWN0ZWRCeT4KCQkJCTxUeXBlTmFtZT5Gb28uQmFyPC9UeXBlTmFtZT4KCQkJPC9WaWV3U2VsZWN0ZWRCeT4KCQkJPFRhYmxlQ29udHJvbD4KCQkJCTxBdXRvU2l6ZS8+CgkJCQk8VGFibGVIZWFkZXJzPgoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+CgkJCQkJPFRhYmxlQ29sdW1uSGVhZGVyLz4KCQkJCTwvVGFibGVIZWFkZXJzPgoJCQkJPFRhYmxlUm93RW50cmllcz4KCQkJCQk8VGFibGVSb3dFbnRyeT4KCQkJCQkJPFRhYmxlQ29sdW1uSXRlbXM+CgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPgoJCQkJCQkJCTxQcm9wZXJ0eU5hbWU+Rm9vPC9Qcm9wZXJ0eU5hbWU+CgkJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbT4KCQkJCQkJCTxUYWJsZUNvbHVtbkl0ZW0+CgkJCQkJCQkJPFByb3BlcnR5TmFtZT5CYXI8L1Byb3BlcnR5TmFtZT4KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPgoJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbXM+CgkJCQkJPC9UYWJsZVJvd0VudHJ5PgoJCQkJPC9UYWJsZVJvd0VudHJpZXM+CgkJCTwvVGFibGVDb250cm9sPgoJCTwvVmlldz4KCTwvVmlld0RlZmluaXRpb25zPgo8L0NvbmZpZ3VyYXRpb24+AQkxAgAACTICAAAGMwIAABbDvm5hbWXDvi5Gb3JtYXQucHMxeG1sBjQCAABPL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi94bWwvw75uYW1lw74uRm9ybWF0LnBzMXhtbAlbAAAACTYCAAAJNwIAAAFuAQAAbwAAAAY4AgAAvAc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pgo8VHlwZXM+CiAgPCEtLSBGb28uQmFyIC0tPgogIDxUeXBlPgogICAgPE5hbWU+RGVzZXJpYWxpemVkLkZvby5CYXI8L05hbWU+CiAgICA8TWVtYmVycz4KICAgICAgPE1lbWJlclNldD4KICAgICAgICA8TmFtZT5QU1N0YW5kYXJkTWVtYmVyczwvTmFtZT4KICAgICAgICA8TWVtYmVycz4KICAgICAgICAgIDxOb3RlUHJvcGVydHk+CiAgICAgICAgICAgIDxOYW1lPgogICAgICAgICAgICAgIFRhcmdldFR5cGVGb3JEZXNlcmlhbGl6YXRpb24KICAgICAgICAgICAgPC9OYW1lPgogICAgICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgICAgRm9vLkJhcgogICAgICAgICAgICA8L1ZhbHVlPgogICAgICAgICAgPC9Ob3RlUHJvcGVydHk+CiAgICAgICAgPC9NZW1iZXJzPgogICAgICA8L01lbWJlclNldD4KICAgIDwvTWVtYmVycz4KICA8L1R5cGU+CiAgPFR5cGU+CiAgICA8TmFtZT5Gb28uQmFyPC9OYW1lPgogICAgPE1lbWJlcnM+CiAgICAgIDxDb2RlUHJvcGVydHkgSXNIaWRkZW49InRydWUiPgogICAgICAgIDxOYW1lPlNlcmlhbGl6YXRpb25EYXRhPC9OYW1lPgogICAgICAgIDxHZXRDb2RlUmVmZXJlbmNlPgogICAgICAgICAgPFR5cGVOYW1lPlBTRnJhbWV3b3JrLlNlcmlhbGl6YXRpb24uU2VyaWFsaXphdGlvblR5cGVDb252ZXJ0ZXI8L1R5cGVOYW1lPgogICAgICAgICAgPE1ldGhvZE5hbWU+R2V0U2VyaWFsaXphdGlvbkRhdGE8L01ldGhvZE5hbWU+CiAgICAgICAgPC9HZXRDb2RlUmVmZXJlbmNlPgogICAgICA8L0NvZGVQcm9wZXJ0eT4KICAgIDwvTWVtYmVycz4KICAgIDxUeXBlQ29udmVydGVyPgogICAgICA8VHlwZU5hbWU+UFNGcmFtZXdvcmsuU2VyaWFsaXphdGlvbi5TZXJpYWxpemF0aW9uVHlwZUNvbnZlcnRlcjwvVHlwZU5hbWU+CiAgICA8L1R5cGVDb252ZXJ0ZXI+CiAgPC9UeXBlPgo8L1R5cGVzPgEJOQIAAAk6AgAABjsCAAAVw75uYW1lw74uVHlwZXMucHMxeG1sBjwCAABOL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi94bWwvw75uYW1lw74uVHlwZXMucHMxeG1sCVsAAAAJPgIAAAk/AgAAAX0BAAAIAAAACWwAAAAAAAAAAAAAAAF+AQAACAAAAAlsAAAAAAAAAAAAAAAB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UFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmLAgAACYwCAAANAgdXAgAAAAEAAAAQAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACY0CAAAJjgIAAAmPAgAACZACAAAJkQIAAAmSAgAACZMCAAAJlAIAAAmVAgAADQcHWQIAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmWAgAADQMHWwIAAAABAAAACAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmXAgAACZgCAAAJmQIAAAmaAgAACZsCAAANAwddAgAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACZwCAAAJnQIAAAmeAgAACZ8CAAAHXwIAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmgAgAACaECAAAJogIAAAoRYQIAAAQAAAAGowIAABRkeW5hbWljc2NyaXB0XzM5NDQzMg0DEWMCAAAEAAAABqQCAAAEbmFtZQ0DEWUCAAAEAAAABqUCAAAEbmFtZQamAgAABmF1dGhvcganAgAAB2NvbXBhbnkGqAIAAAtkZXNjcmlwdGlvbhFmAgAABAAAAAapAgAADWd1aWRFeHRlbnNpb24GqgIAAAR5ZWFyBqsCAAAKcHNmdmVyc2lvbgoRZwIAAAQAAAAGrAIAAARuYW1lDQMRaQIAAAQAAAAGrQIAAARuYW1lDQMRawIAAAQAAAAGrgIAAARuYW1lDQMHbQIAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmvAgAADQMHbwIAAAABAAAACAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmwAgAACbECAAAJsgIAAAmzAgAACbQCAAAJtQIAAAm2AgAACbcCAAARcQIAAAQAAAAGuAIAAARuYW1lDQMRcgIAAAQAAAAGuQIAAAp0ZXN0Zm9sZGVyBroCAAAMcGVzdGVyY29uZmlnDQIRdAIAAAQAAAAGuwIAAARuYW1lDQMRdgIAAAQAAAAGvAIAAARuYW1lDQMReAIAAAQAAAAGvQIAAARuYW1lDQMBfwIAAG8AAAAGvgIAAOUQPCMKVGhpcyBpcyBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZQoKQnkgZGVmYXVsdCwgaXQgaXMgZW5vdWdoIHRvIGhhdmUgYSBzaW5nbGUgb25lIG9mIHRoZW0sCmhvd2V2ZXIgaWYgeW91IGhhdmUgZW5vdWdoIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8ganVzdGlmeSBoYXZpbmcgbXVsdGlwbGUgY29waWVzIG9mIGl0LApmZWVsIHRvdGFsbHkgZnJlZSB0byBzcGxpdCB0aGVtIGludG8gbXVsdGlwbGUgZmlsZXMuCiM+Cgo8IwojIEV4YW1wbGUgQ29uZmlndXJhdGlvbgpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74nIC1OYW1lICdFeGFtcGxlLlNldHRpbmcnIC1WYWx1ZSAxMCAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnaW50ZWdlcicgLUhhbmRsZXIgeyB9IC1EZXNjcmlwdGlvbiAiRXhhbXBsZSBjb25maWd1cmF0aW9uIHNldHRpbmcuIFlvdXIgbW9kdWxlIGNhbiB0aGVuIHVzZSB0aGUgc2V0dGluZyB1c2luZyAnR2V0LVBTRkNvbmZpZ1ZhbHVlJyIKIz4KClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLU5hbWUgJ0ltcG9ydC5Eb0RvdFNvdXJjZScgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGRvdHNvdXJjZWQgb24gaW1wb3J0LiBCeSBkZWZhdWx0LCB0aGUgZmlsZXMgb2YgdGhpcyBtb2R1bGUgYXJlIHJlYWQgYXMgc3RyaW5nIHZhbHVlIGFuZCBpbnZva2VkLCB3aGljaCBpcyBmYXN0ZXIgYnV0IHdvcnNlIG9uIGRlYnVnZ2luZy4iClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLU5hbWUgJ0ltcG9ydC5JbmRpdmlkdWFsRmlsZXMnIC1WYWx1ZSAkZmFsc2UgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2Jvb2wnIC1EZXNjcmlwdGlvbiAiV2hldGhlciB0aGUgbW9kdWxlIGZpbGVzIHNob3VsZCBiZSBpbXBvcnRlZCBpbmRpdmlkdWFsbHkuIER1cmluZyB0aGUgbW9kdWxlIGJ1aWxkLCBhbGwgbW9kdWxlIGNvZGUgaXMgY29tcGlsZWQgaW50byBmZXcgZmlsZXMsIHdoaWNoIGFyZSBpbXBvcnRlZCBpbnN0ZWFkIGJ5IGRlZmF1bHQuIExvYWRpbmcgdGhlIGNvbXBpbGVkIHZlcnNpb25zIGlzIGZhc3RlciwgdXNpbmcgdGhlIGluZGl2aWR1YWwgZmlsZXMgaXMgZWFzaWVyIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3Rpbmcgb3V0IGFkanVzdG1lbnRzLiIKCiRjdXJyZW50UGF0aCA9ICIkTW9kdWxlUm9vdFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEiCiRsYXRlc3RJbnN0YWxsZWRNb2R1bGVzID0gZ2V0LW1vZHVsZSBTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+IC1MaXN0QXZhaWxhYmxlIHwgU29ydC1PYmplY3QgdmVyc2lvbiAtRGVzY2VuZGluZyB8IFNlbGVjdC1PYmplY3QgLUV4cGFuZFByb3BlcnR5IHBhdGggLWZpcnN0IDEKV3JpdGUtUFNGTWVzc2FnZSAiQ2hlY2tpbmcgaWYgY3VycmVudCBtb2R1bGUgJyRjdXJyZW50UGF0aCcgYWdhaW5zdCBsYXRlc3QgaW5zdGFsbGVkIHZlcnNpb24gJyRsYXRlc3RJbnN0YWxsZWRNb2R1bGVzJyIKaWYgKCRjdXJyZW50UGF0aCAtZXEgJGxhdGVzdEluc3RhbGxlZE1vZHVsZXMpIHsKICAgIFNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLU5hbWUgJ0ludGVyQWN0aXZlUmVnaXN0ZXIubW9kdWxlcGF0aCcgLVZhbHVlICJTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+IiAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBzdHJpbmcgLURlc2NyaXB0aW9uICJNb2R1bGUgUGF0aCBmb3IgVmF1bHQgUmVnaXN0cmF0aW9uLCBOYW1lIG9mIHRoZSBtb2R1bGUgYXMgbGF0ZXN0IGluc3RhbGxlZCB2ZXJzaW9uIgp9CmVsc2UgewogICAgU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTmFtZSAnSW50ZXJBY3RpdmVSZWdpc3Rlci5tb2R1bGVwYXRoJyAtVmFsdWUgJGN1cnJlbnRQYXRoIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIk1vZHVsZSBQYXRoIGZvciBWYXVsdCBSZWdpc3RyYXRpb24sIGRldmVsb3BtZW50IHBvaW50IHRvIGxvY2FsIG5vbiBpbnN0YWxsZWQgUFNNMSIKfQEJvwIAAAnAAgAABsECAAARY29uZmlndXJhdGlvbi5wczEGwgIAAF4vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb24ucHMxCVsAAAAJxAIAAAnFAgAAAYACAABvAAAABsYCAADxAyMgQ29uZmlndXJhdGlvbnMKClRocm91Z2ggdGhlIGBQU0ZyYW1ld29ya2AgeW91IGhhdmUgYSBzaW1wbGUgbWV0aG9kIHRoYXQgYWxsb3dzIHlvdSB0byAuLi4KCiAtIFB1Ymxpc2ggc2V0dGluZ3MKIC0gV2l0aCBvbmJvYXJkIGRvY3VtZW50YXRpb24KIC0gSW5wdXQgdmFsaWRhdGlvbgogLSBTY3JpcHRzIHRoYXQgcnVuIG9uIGNoYW5nZSBvZiBzZXR0aW5ncwogLSBUaGF0IGNhbiBiZSBkaXNjb3ZlcmVkIGFuZCB1cGRhdGVkIGJ5IHRoZSB1c2VyCiAtIFRoYXQgY2FuIGJlIGFkbWluaXN0cmF0ZWQgYnkgcG9saWN5ICYgRFNDCgpUaGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgYSBiaXQgdG9vIGNvbXBsZXggdG8gZGVzY3JpYmUgaW4gYSBoZWxwIGZpbGUsIHlvdSBjYW4gaG93ZXZlciB2aXNpdCB1cyBhdCBodHRwOi8vcHNmcmFtZXdvcmsub3JnIGZvciBkZXRhaWxlZCBndWlkYW5jZS4KCkFuIGV4YW1wbGUgY2FuIGJlIHNlZW4gaW4gdGhlIGF0dGFjaGVkIHBzMSBmaWxlAQnHAgAACcgCAAAGyQIAAAlyZWFkbWUubWQGygIAAFYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL2NvbmZpZ3VyYXRpb25zL3JlYWRtZS5tZAlbAAAACcwCAAAJzQIAAAGBAgAAbwAAAAbOAgAA1QEjIEZ1bmN0aW9ucwoKVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgZ28uCgpEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG1vZHVsZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViZGl2aWRlIHRoZW0gaW50byBzdWJmb2xkZXJzLgoKVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCc8CAAAJ0AIAAAbRAgAACXJlYWRtZS5tZAbSAgAAUS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvZnVuY3Rpb25zL3JlYWRtZS5tZAlbAAAACdQCAAAJ1QIAAAGCAgAAbwAAAAbWAgAA+QI8IwpTdG9yZWQgc2NyaXB0YmxvY2tzIGFyZSBhdmFpbGFibGUgaW4gW1BzZlZhbGlkYXRlU2NyaXB0KCldIGF0dHJpYnV0ZXMuClRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNlbnRyYWxseSBwcm92aWRlIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLAp3aXRob3V0IGhhdmluZyB0byBtYWludGFpbiBpdCBpbiBzZXBhcmF0ZSBsb2NhdGlvbnMuCgpJdCBhbHNvIHByZXZlbnRzIGxlbmd0aHkgdmFsaWRhdGlvbiBzY3JpcHRibG9ja3MgZnJvbSBtYWtpbmcgeW91ciBwYXJhbWV0ZXIgYmxvY2sKaGFyZCB0byByZWFkLgoKU2V0LVBTRlNjcmlwdGJsb2NrIC1OYW1lICfDvm5hbWXDvi5TY3JpcHRCbG9ja05hbWUnIC1TY3JpcHRibG9jayB7CgkKfQojPgEJ1wIAAAnYAgAABtkCAAAQc2NyaXB0YmxvY2tzLnBzMQbaAgAAWy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvc2NyaXB0YmxvY2tzL3NjcmlwdGJsb2Nrcy5wczEJWwAAAAncAgAACd0CAAABgwIAAG8AAAAG3gIAAOIJTmV3LVBTRkxpY2Vuc2UgLVByb2R1Y3QgJ8O+bmFtZcO+JyAtTWFudWZhY3R1cmVyICfDvmF1dGhvcsO+JyAtUHJvZHVjdFZlcnNpb24gJHNjcmlwdDpNb2R1bGVWZXJzaW9uIC1Qcm9kdWN0VHlwZSBNb2R1bGUgLU5hbWUgTUlUIC1WZXJzaW9uICIxLjAuMC4wIiAtRGF0ZSAoR2V0LURhdGUgIsO+IWRhdGUhw74iKSAtVGV4dCBAIgpDb3B5cmlnaHQgKGMpIMO+IXllYXIhw74gw75hdXRob3LDvgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KIkABCd8CAAAJ4AIAAAbhAgAAC2xpY2Vuc2UucHMxBuICAABRL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9zY3JpcHRzL2xpY2Vuc2UucHMxCVsAAAAJ5AIAAAnlAgAAAYQCAABvAAAABuYCAACeBjwjCkFkZCBhbGwgdGhpbmdzIHlvdSB3YW50IHRvIHJ1biBhZnRlciBpbXBvcnRpbmcgdGhlIG1haW4gZnVuY3Rpb24gY29kZQoKV0FSTklORzogT05MWSBwcm92aWRlIHBhdGhzIHRvIGZpbGVzIQoKQWZ0ZXIgYnVpbGRpbmcgdGhlIG1vZHVsZSwgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkLCBhZGRpbmcgYW55dGhpbmcgYnV0IHBhdGhzIHRvIGZpbGVzIC4uLgotIFdpbGwgbm90IHdvcmsgYWZ0ZXIgcHVibGlzaGluZwotIENvdWxkIGJyZWFrIHRoZSBidWlsZCBwcm9jZXNzCiM+CgokbW9kdWxlUm9vdCA9IFNwbGl0LVBhdGggKFNwbGl0LVBhdGggJFBTU2NyaXB0Um9vdCkKCiMgTG9hZCBDb25maWd1cmF0aW9ucwooR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcY29uZmlndXJhdGlvbnNcKi5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lCgojIExvYWQgU2NyaXB0YmxvY2tzCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRibG9ja3NcKi5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lCgojIExvYWQgVGFiIEV4cGFuc2lvbgooR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcdGVwcFwqLnRlcHAucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKS5GdWxsTmFtZQoKIyBMb2FkIFRhYiBFeHBhbnNpb24gQXNzaWdubWVudAoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcdGVwcFxhc3NpZ25tZW50LnBzMSIKCiMgTG9hZCBMaWNlbnNlCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXGxpY2Vuc2UucHMxIgEJ5wIAAAnoAgAABukCAAAOcG9zdGltcG9ydC5wczEG6gIAAFQvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3NjcmlwdHMvcG9zdGltcG9ydC5wczEJWwAAAAnsAgAACe0CAAABhQIAAG8AAAAG7gIAAKMDPCMKQWRkIGFsbCB0aGluZ3MgeW91IHdhbnQgdG8gcnVuIGJlZm9yZSBpbXBvcnRpbmcgdGhlIG1haW4gZnVuY3Rpb24gY29kZS4KCldBUk5JTkc6IE9OTFkgcHJvdmlkZSBwYXRocyB0byBmaWxlcyEKCkFmdGVyIGJ1aWxkaW5nIHRoZSBtb2R1bGUsIHRoaXMgZmlsZSB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZCwgYWRkaW5nIGFueXRoaW5nIGJ1dCBwYXRocyB0byBmaWxlcyAuLi4KLSBXaWxsIG5vdCB3b3JrIGFmdGVyIHB1Ymxpc2hpbmcKLSBDb3VsZCBicmVhayB0aGUgYnVpbGQgcHJvY2VzcwojPgoKJG1vZHVsZVJvb3QgPSBTcGxpdC1QYXRoIChTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QpCgojIExvYWQgdGhlIHN0cmluZ3MgdXNlZCBpbiBtZXNzYWdlcwoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xzdHJpbmdzLnBzMSIBCe8CAAAJ8AIAAAbxAgAADXByZWltcG9ydC5wczEG8gIAAFMvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3NjcmlwdHMvcHJlaW1wb3J0LnBzMQlbAAAACfQCAAAJ9QIAAAGGAgAAbwAAAAb2AgAAwgM8IwpUaGlzIGZpbGUgbG9hZHMgdGhlIHN0cmluZ3MgZG9jdW1lbnRzIGZyb20gdGhlIHJlc3BlY3RpdmUgbGFuZ3VhZ2UgZm9sZGVycy4KVGhpcyBhbGxvd3MgbG9jYWxpemluZyBtZXNzYWdlcyBhbmQgZXJyb3JzLgpMb2FkIHBzZDEgbGFuZ3VhZ2UgZmlsZXMgZm9yIGVhY2ggbGFuZ3VhZ2UgeW91IHdpc2ggdG8gc3VwcG9ydC4KUGFydGlhbCB0cmFuc2xhdGlvbnMgYXJlIGFjY2VwdGFibGUgLSB3aGVuIG1pc3NpbmcgYSBjdXJyZW50IGxhbmd1YWdlIG1lc3NhZ2UsCml0IHdpbGwgZmFsbGJhY2sgdG8gRW5nbGlzaCBvciBhbm90aGVyIGF2YWlsYWJsZSBsYW5ndWFnZS4KIz4KSW1wb3J0LVBTRkxvY2FsaXplZFN0cmluZyAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGVuLXVzXCoucHNkMSIgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLUxhbmd1YWdlICdlbi1VUycBCfcCAAAJ+AIAAAb5AgAAC3N0cmluZ3MucHMxBvoCAABRL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9zY3JpcHRzL3N0cmluZ3MucHMxCVsAAAAJ/AIAAAn9AgAAAYcCAABvAAAABv4CAABuPCMKIyBFeGFtcGxlOgpSZWdpc3Rlci1QU0ZUZXBwQXJndW1lbnRDb21wbGV0ZXIgLUNvbW1hbmQgR2V0LUFsY29ob2wgLVBhcmFtZXRlciBUeXBlIC1OYW1lIMO+bmFtZcO+LmFsY29ob2wKIz4BCf8CAAAJAAMAAAYBAwAADmFzc2lnbm1lbnQucHMxBgIDAABRL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC90ZXBwL2Fzc2lnbm1lbnQucHMxCVsAAAAJBAMAAAkFAwAAAYgCAABvAAAABgYDAACgATwjCiMgRXhhbXBsZToKUmVnaXN0ZXItUFNGVGVwcFNjcmlwdGJsb2NrIC1OYW1lICLDvm5hbWXDvi5hbGNvaG9sIiAtU2NyaXB0QmxvY2sgeyAnQmVlcicsJ01lYWQnLCdXaGlza2V5JywnV2luZScsJ1ZvZGthJywnUnVtICgzeSknLCAnUnVtICg1eSknLCAnUnVtICg3eSknIH0KIz4BCQcDAAAJCAMAAAYJAwAAEGV4YW1wbGUudGVwcC5wczEGCgMAAFMvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3RlcHAvZXhhbXBsZS50ZXBwLnBzMQlbAAAACQwDAAAJDQMAAAGJAgAAbwAAAAYOAwAAqAcjIFRhYiBFeHBhbnNpb24KCiMjIERlc2NyaXB0aW9uCgpNb2Rlcm4gVGFiIEV4cGFuc2lvbiB3YXMgb3BlbmVkIHRvIHVzZXJzIHdpdGggdGhlIG1vZHVsZSBgVGFiIEV4cGFuc2lvbiBQbHVzIFBsdXNgIChURVBQKS4KCkl0IGFsbG93cyB5b3UgdG8gZGVmaW5lLCB3aGF0IG9wdGlvbnMgYSB1c2VyIGlzIG9mZmVyZWQgd2hlbiB0YWJiaW5nIHRocm91Z2ggaW5wdXQgb3B0aW9ucy4gVGhpcyBjYW4gc2F2ZSBhIGxvdCBvZiB0aW1lIGZvciB0aGUgdXNlciBhbmQgaXMgY29uc2lkZXJlZCBhIGtleSBlbGVtZW50IGluIHVzZXIgZXhwZXJpZW5jZS4KClRoZSBgUFNGcmFtZXdvcmtgIG9mZmVycyBhIHNpbXBsaWZpZWQgd2F5IG9mIG9mZmVyaW5nIGp1c3QgdGhpcywgYXMgdGhlIHR3byBleGFtcGxlIGZpbGVzIHNob3cuCgojIyBDb25jZXB0CgpDdXN0b20gdGFiIGNvbXBsZXRpb24gaXMgZGVmaW5lZCBpbiB0d28gc3RlcHM6CgogLSBEZWZpbmUgYSBzY3JpcHRibG9jayB0aGF0IGlzIHJ1biB3aGVuIHRoZSB1c2VyIGhpdHMgYFRBQmAgYW5kIHByb3ZpZGVzIHRoZSBzdHJpbmdzIHRoYXQgYXJlIGhpcyBvcHRpb25zLgogLSBBc3NpZ24gdGhhdCBzY3JpcHRibG9jayB0byB0aGUgcGFyYW1ldGVyIG9mIGEgY29tbWFuZC4gWW91IGNhbiBhc3NpZ24gdGhlIHNhbWUgc2NyaXB0YmxvY2sgbXVsdGlwbGUgdGltZXMuCgojIyBTdHJ1Y3R1cmUKCkltcG9ydCBvcmRlciBtYXR0ZXJzLiBJbiBvcmRlciB0byBtYWtlIHRoaW5ncyB3b3JrIHdpdGggdGhlIGRlZmF1bHQgc2NhZmZvbGQsIGZvbGxvdyB0aG9zZSBydWxlczoKCiAtIEFsbCBzY3JpcHRmaWxlcyBfZGVmaW5pbmdfIGNvbXBsZXRpb24gc2NyaXB0YmxvY2tzIGxpa2UgdGhpczogYCoudGVwcC5wczFgCiAtIFB1dCBhbGwgeW91ciBjb21wbGV0aW9uIGFzc2lnbm1lbnRzIGluIGBhc3NpZ25tZW50LnBzMWABCQ8DAAAJEAMAAAYRAwAACXJlYWRtZS5tZAYSAwAATC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvdGVwcC9yZWFkbWUubWQJWwAAAAkUAwAACRUDAAABigIAAG8AAAAGFgMAAOgCIyBiaW4gZm9sZGVyCgpUaGUgYmluIGZvbGRlciBleGlzdHMgdG8gc3RvcmUgYmluYXJ5IGRhdGEuIEFuZCBzY3JpcHRzIHJlbGF0ZWQgdG8gdGhlIHR5cGUgc3lzdGVtLgoKVGhpcyBtYXkgaW5jbHVkZSB5b3VyIG93biBDIy1iYXNlZCBsaWJyYXJ5LCB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMgeW91IHdhbnQgdG8gaW5jbHVkZSAod2F0Y2ggdGhlIGxpY2Vuc2UhKSwgb3IgYSBzY3JpcHQgZGVjbGFyaW5nIHR5cGUgYWNjZWxlcmF0b3JzIChlZmZlY3RpdmVseSBhbGlhc2VzIGZvciAuTkVUIHR5cGVzKQoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVHlwZSBBY2NlbGVyYXRvcnMsIHNlZSB0aGUgaGVscCBvbiBTZXQtUFNGVHlwZUFsaWFzAQkXAwAACRgDAAAGGQMAAAlyZWFkbWUubWQGGgMAAGYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Jpbi9yZWFkbWUubWQJWwAAAAkcAwAACR0DAAABiwIAAG8AAAAGHgMAAJsBVE9QSUMKCWFib3V0X8O+bmFtZcO+CgkKU0hPUlQgREVTQ1JJUFRJT04KCUV4cGxhaW5zIGhvdyB0byB1c2UgdGhlIMO+bmFtZcO+IHBvd2Vyc2hlbGwgbW9kdWxlCgkKTE9ORyBERVNDUklQVElPTgoJPEluc2VydCBDb250ZW50IGhlcmU+CgpLRVlXT1JEUwoJw75uYW1lw74BCR8DAAAJIAMAAAYhAwAAF2Fib3V0X8O+bmFtZcO+LmhlbHAudHh0BiIDAAB2L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9lbi11cy9hYm91dF/Dvm5hbWXDvi5oZWxwLnR4dAlbAAAACSQDAAAJJQMAAAGMAgAAbwAAAAYmAwAAmQEjIFRoaXMgaXMgd2hlcmUgdGhlIHN0cmluZ3MgZ28sIHRoYXQgYXJlIHdyaXR0ZW4gYnkKIyBXcml0ZS1QU0ZNZXNzYWdlLCBTdG9wLVBTRkZ1bmN0aW9uIG9yIHRoZSBQU0ZyYW1ld29yayB2YWxpZGF0aW9uIHNjcmlwdGJsb2NrcwpAewoJJ2tleScgPSAnVmFsdWUnCn0BCScDAAAJKAMAAAYpAwAADHN0cmluZ3MucHNkMQYqAwAAay9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZW4tdXMvc3RyaW5ncy5wc2QxCVsAAAAJLAMAAAktAwAAAY0CAABvAAAABi4DAADuC2Z1bmN0aW9uIEdldC1TZWNyZXQgewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgUXVlcnkgYSBzaW5nbGUgc2VjcmV0LgoKICAgIC5ERVNDUklQVElPTgogICAgUXVlcnkgYSBzaW5nbGUgc2VjcmV0LgoKICAgIC5QQVJBTUVURVIgTmFtZQogICAgTmFtZSB0byBiZSBzZWFyY2hlZCBmb3IuCgogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUKICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0LgoKICAgIC5FWEFNUExFCiAgICBHZXQtU2VjcmV0IC1WYXVsdCAkVmF1bHRuYW1lIC1OYW1lIGZvbwoKICAgIFJldHVybnMgdGhlIHN0b3JlZCBzZWNyZXQgZm9yIHRoZSBlbnRyeSBmb28uCgogICAgLk5PVEVTCiAgICBHZW5lcmFsIG5vdGVzCiAgICAjPgogICAgW0NtZGxldEJpbmRpbmcoKV0KICAgIHBhcmFtICgKICAgICAgICBbc3RyaW5nXSAkTmFtZSwKICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLAogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgKQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIGlmICgkQWRkaXRpb25hbFBhcmFtZXRlcnMuVmVyYm9zZSkgeyAkVmVyYm9zZVByZWZlcmVuY2UgPSAnY29udGludWUnIH0KCiAgICBXcml0ZS1QU0ZNZXNzYWdlICJHZXQtU2VjcmV0LCBOYW1lPSROYW1lLCAkVmF1bHROYW1lLCBBZGRpdGlvbmFsUGFyYW1ldGVycz0kKCRBZGRpdGlvbmFsUGFyYW1ldGVyc3xDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIgogICAgIyBUT0RPIFBlcmZvcm0gUmV0cmlldmFsIHZvb2RvbyA7LSkKICAgICMgJHNlY3JldCA9IEdldC3DvmZ1bmN0aW9uUHJlZml4w75TZWNyZXQKICAgICMgV3JpdGUtUFNGTWVzc2FnZSAiRm91bmQgYCRzZWNyZXQ9JCgkc2VjcmV0LmdldHR5cGUoKSkiCiAgICAjICMgQ2hlY2sgaWYgb25seSBvbmUgc2VjcmV0IHdhcyByZXRyaWV2ZWQKICAgICMgaWYgKCRzZWNyZXQuQ291bnQgLWd0IDEgLWFuZCAkc2VjcmV0IC1pc25vdCBbaGFzaHRhYmxlXSkgewogICAgIyAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgRXJyb3IgJ011bHRpcGxlIGNyZWRlbnRpYWxzIGZvdW5kOyBTZWFyY2ggd2l0aCBHZXQtU2VjcmV0SW5mbyBhbmQgcmVxdWlyZSB0aGUgY29ycmVjdCBvbmUgYnkgKi5NZXRhRGF0YS5pZCcKICAgICMgICAgIFdhaXQtUFNGTWVzc2FnZQogICAgIyAgICAgdGhyb3cgJ011bHRpcGxlIGNyZWRlbnRpYWxzIGZvdW5kOyBTZWFyY2ggd2l0aCBHZXQtU2VjcmV0SW5mbyBhbmQgcmVxdWlyZSB0aGUgY29ycmVjdCBvbmUgYnkgKi5NZXRhRGF0YS5pZCcKICAgICMgfQogICAgcmV0dXJuICRzZWNyZXQgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxCn0KCgEJLwMAAAkwAwAABjEDAAAOR2V0LVNlY3JldC5wczEGMgMAAHEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy9HZXQtU2VjcmV0LnBzMQlbAAAACTQDAAAJNQMAAAGOAgAAbwAAAAY2AwAA3AtmdW5jdGlvbiBHZXQtU2VjcmV0SW5mbyB7CiAgICA8IwogICAgLlNZTk9QU0lTCiAgICBSZXR1cm5zIFNlY3JldG1hbmFnZW1lbnRJbmZvcm1hdGlvbiBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIGVudHJpZXMuCgogICAgLkRFU0NSSVBUSU9OCiAgICBSZXR1cm5zIFNlY3JldG1hbmFnZW1lbnRJbmZvcm1hdGlvbiBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIGVudHJpZXMuCgogICAgLlBBUkFNRVRFUiBGaWx0ZXIKICAgIFRoZSBuYW1lIHRvIGJlIHNlYXJjaGVkCgogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUKICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0LgoKICAgIC5FWEFNUExFCiAgICBHZXQtU2VjcmV0SW5mbyAtVmF1bHQgJFZhdWx0bmFtZSAtTmFtZSBmb29iYXIKICAgIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgVmF1bHROYW1lCiAgICAtLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAgICAgIC0tLS0tLS0tLQogICAgZm9vYmFyIFs1ZGQ5MzdjNC1iMGEwLWVkMTEtYTg3Ni0wMDUwNTZiY2U5NDhdIFBTQ3JlZGVudGlhbCBQV1NhZmVJbnQKICAgIGZvb2JhciBbZWYyZmUxMWQtYjBhMC1lZDExLWE4NzYtMDA1MDU2YmNlOTQ4XSBQU0NyZWRlbnRpYWwgUFdTYWZlSW50CgogICAgUmV0dXJucyB0aGUgc3RvcmVkIHNlY3JldCBpbmZvLgoKICAgIC5OT1RFUwogICAgR2VuZXJhbCBub3RlcwogICAgIz4KICAgIFtDbWRsZXRCaW5kaW5nKCldCiAgICBwYXJhbSAoCiAgICAgICAgW3N0cmluZ10gJEZpbHRlciwKICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLAogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgKQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIGlmICgkQWRkaXRpb25hbFBhcmFtZXRlcnMuVmVyYm9zZSkgeyAkVmVyYm9zZVByZWZlcmVuY2UgPSAnY29udGludWUnIH0KCiAgICBXcml0ZS1QU0ZNZXNzYWdlICJHZXQtU2VjcmV0SW5mbywgRmlsdGVyPSRGaWx0ZXIsICRWYXVsdE5hbWUsIEFkZGl0aW9uYWxQYXJhbWV0ZXJzPSQoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzfENvbnZlcnRUby1Kc29uIC1Db21wcmVzcykiCiAgICByZXR1cm4gR2V0LU5ldHdyaXhDb250YWluZXIgLUZpbHRlciAkRmlsdGVyIC1WYXVsdE5hbWUgJFZhdWx0TmFtZSAtQWRkaXRpb25hbFBhcmFtZXRlcnMgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzIC1SZXR1cm5UeXBlIFNlY3JldEluZm9ybWF0aW9uCiAgICAjIFRPRE8gUGVyZm9ybSB1cGRhdGUgdm9vZG9vIDstKQp9CgoBCTcDAAAJOAMAAAY5AwAAEkdldC1TZWNyZXRJbmZvLnBzMQY6AwAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL0dldC1TZWNyZXRJbmZvLnBzMQlbAAAACTwDAAAJPQMAAAGPAgAAbwAAAAY+AwAAzAEjIEZ1bmN0aW9ucwoKVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBmdW5jdGlvbnMgZ28uCgpEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG1vZHVsZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViZGl2aWRlIHRoZW0gaW50byBzdWJmb2xkZXJzLgoKVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCT8DAAAJQAMAAAZBAwAACXJlYWRtZS5tZAZCAwAAbC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL3JlYWRtZS5tZAlbAAAACUQDAAAJRQMAAAGQAgAAbwAAAAZGAwAA6wYKZnVuY3Rpb24gUmVtb3ZlLVNlY3JldCB7CiAgICA8IwogICAgLlNZTk9QU0lTCiAgICBSZW1vdmVzIGEgc2VjcmV0IGZyb20gdGhlIHZhdWx0LiBOT1QgaW1wbGVtZW50ZWQgeWV0LgoKICAgIC5ERVNDUklQVElPTgogICAgUmVtb3ZlcyBhIHNlY3JldCBmcm9tIHRoZSB2YXVsdC4gTk9UIGltcGxlbWVudGVkIHlldC4KCiAgICAuUEFSQU1FVEVSIE5hbWUKICAgIE5hbWUgdG8gYmUgc2VhcmNoZWQgZm9yLgoKICAgIC5QQVJBTUVURVIgVmF1bHROYW1lCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0LgoKICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4KCiAgICAuRVhBTVBMRQogICAgQW4gZXhhbXBsZQogICAgaXMgbm90IG5lY2Nlc3NhcnkKCiAgICBBcyBub3QgaW1wbGVtZW50ZWQKCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNSZXZpZXdVbnVzZWRQYXJhbWV0ZXInLCAnJyldCiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNVc2VTaG91bGRQcm9jZXNzZm9yU3RhdGVDaGFuZ2luZ0Z1bmN0aW9ucycsICcnKV0KICAgIFtDbWRsZXRCaW5kaW5nKCldCiAgICBwYXJhbSAoCiAgICAgICAgW3N0cmluZ10gJE5hbWUsCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwKICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgICkKICAgIHRocm93ICJOb3QgSW1wbGVtZW50ZWQiCn0KCgEJRwMAAAlIAwAABkkDAAARUmVtb3ZlLVNlY3JldC5wczEGSgMAAHQvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy9SZW1vdmUtU2VjcmV0LnBzMQlbAAAACUwDAAAJTQMAAAGRAgAAbwAAAAZOAwAA0AlmdW5jdGlvbiBTZXQtU2VjcmV0IHsKICAgIDwjCiAgICAuU1lOT1BTSVMKICAgIFVwZGF0ZXMgYSBzZWNyZXQgc3RvcmVkIGluIHRoZSB2YXVsdC4KCiAgICAuREVTQ1JJUFRJT04KICAgIFVwZGF0ZXMgYSBzZWNyZXQgc3RvcmVkIGluIHRoZSB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIE5hbWUKICAgIE5hbWUgb2YgdGhlIGVudHJ5CgogICAgLlBBUkFNRVRFUiBTZWNyZXQKICAgIFRoZSBOZXcgU2VjcmV0LiBDYW4gYmUgYSBTZWN1cmVTdHJpbmcgb3IgYSBQU0NyZWRlbnRpYWwtb2JqZWN0CgogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUKICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0LgoKICAgIC5FWEFNUExFCiAgICBTZXQtU2VjcmV0IC1WZXJib3NlIC1WYXVsdCAkVmF1bHRuYW1lIC1TZWNyZXQgKEdldC1DcmVkZW50aWFsKSAtTmFtZSBmb28KCiAgICBVcGRhdGVzIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBvZiB0aGUgZW50cnkuCgogICAgLk5PVEVTCiAgICBHZW5lcmFsIG5vdGVzCiAgICAjPgogICAgW0NtZGxldEJpbmRpbmcoKV0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1VzZVNob3VsZFByb2Nlc3Nmb3JTdGF0ZUNoYW5naW5nRnVuY3Rpb25zJywgJycpXQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTVXNlT3V0cHV0VHlwZUNvcnJlY3RseScsICcnKV0KICAgIHBhcmFtICgKICAgICAgICBbc3RyaW5nXSAkTmFtZSwKICAgICAgICBbb2JqZWN0XSAkU2VjcmV0LAogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICApCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUKICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgaWYgKCRBZGRpdGlvbmFsUGFyYW1ldGVycy5WZXJib3NlKSB7ICRWZXJib3NlUHJlZmVyZW5jZSA9ICdjb250aW51ZScgfQogICAgIyBUT0RPIFBlcmZvcm0gdXBkYXRlIHZvb2RvbyA7LSkKICAgIFdhaXQtUFNGTWVzc2FnZQogICAgcmV0dXJuICR0cnVlCn0KCgEJTwMAAAlQAwAABlEDAAAOU2V0LVNlY3JldC5wczEGUgMAAHEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy9TZXQtU2VjcmV0LnBzMQlbAAAACVQDAAAJVQMAAAGSAgAAbwAAAAZWAwAAowtmdW5jdGlvbiBTZXQtU2VjcmV0SW5mbyB7CiAgICA8IwogICAgLlNZTk9QU0lTCiAgICBVcGRhdGVzIGFkZGl0aW9uYWwgZmllbGRzIG9mIGEgc2luZ2xlIGVudHJ5LgoKICAgIC5ERVNDUklQVElPTgogICAgVXBkYXRlcyBhZGRpdGlvbmFsIGZpZWxkcyBvZiBhIHNpbmdsZSBlbnRyeS4KCiAgICAuUEFSQU1FVEVSIE5hbWUKICAgIE5hbWUgb2YgdGhlIGVudHJ5CgogICAgLlBBUkFNRVRFUiBNZXRhZGF0YQogICAgVGhlIEhhc2hUYWJsZSB3aXRoIHRoZSBmaWVsZHMgdG8gdXBkYXRlLgogICAgUG9zc2libGUgS2V5czogJ1VzZXJuYW1lJywgJ1Bhc3N3b3JkJywgJ05hbWUnLCAnTWVtbycKCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuCgogICAgLkVYQU1QTEUKICAgIFNldC1TZWNyZXRJbmZvICAtVmF1bHQgJFZhdWx0bmFtZSAgLU5hbWUgZm9vIC1NZXRhZGF0YSBAe21lbW89J05vdGl6IDInO3VzZXJuYW1lPSdmb28nO3Bhc3N3b3JkPSRteU5ld1NlY3JldH0KCiAgICBVcGRhdGVzIHRoZSBlbnRyeSB3aXRoIG5ldyBtZW1vLgoKICAgIC5FWEFNUExFCiAgICBTZXQtU2VjcmV0SW5mbyAgLVZhdWx0ICRWYXVsdG5hbWUgIC1OYW1lIGZvbyAtTWV0YWRhdGEgQHtuYW1lPSdCYXInfQoKICAgIFJlbmFtZXMgdGhlIGVudHJ5ICdmb28nIHRvICdCYXInCgogICAgLk5PVEVTCiAgICBHZW5lcmFsIG5vdGVzCiAgICAjPgogICAgW0NtZGxldEJpbmRpbmcoKV0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1VzZVNob3VsZFByb2Nlc3Nmb3JTdGF0ZUNoYW5naW5nRnVuY3Rpb25zJywgJycpXQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTVXNlT3V0cHV0VHlwZUNvcnJlY3RseScsICcnKV0KICAgIHBhcmFtICgKICAgICAgICBbc3RyaW5nXSAkTmFtZSwKICAgICAgICBbaGFzaHRhYmxlXSAkTWV0YWRhdGEsCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwKICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgICkKICAgICMgV29ya2Fyb3VuZCBDYXNlU2Vuc2l0aXZlIEhhc2hUYWJsZQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBpZiAoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzLlZlcmJvc2UpIHsgJFZlcmJvc2VQcmVmZXJlbmNlID0gJ2NvbnRpbnVlJyB9CiAgICAjIFRPRE8gUGVyZm9ybSB1cGRhdGUgdm9vZG9vIDstKQogICAgV2FpdC1QU0ZNZXNzYWdlCiAgICByZXR1cm4gJHRydWUKfQoBCVcDAAAJWAMAAAZZAwAAElNldC1TZWNyZXRJbmZvLnBzMQZaAwAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL1NldC1TZWNyZXRJbmZvLnBzMQlbAAAACVwDAAAJXQMAAAGTAgAAbwAAAAZeAwAArgoKZnVuY3Rpb24gVGVzdC1TZWNyZXRWYXVsdCB7CiAgICA8IwogICAgLlNZTk9QU0lTCiAgICBUZXN0cyBpZiB0aGUgdmF1bHQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgYW5kIGlmIGl0IGlzIHVubG9ja2VkLgoKICAgIC5ERVNDUklQVElPTgogICAgVGVzdHMgaWYgdGhlIHZhdWx0IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCBpZiBpdCBpcyB1bmxvY2tlZC4KCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuCgogICAgLkVYQU1QTEUKICAgIFRlc3QtU2VjcmV0VmF1bHQgLVZhdWx0TmFtZSAkdmF1bHRuYW1lCgogICAgUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWxsCgogICAgLk5PVEVTCiAgICBHZW5lcmFsIG5vdGVzCiAgICAjPgogICAgW0NtZGxldEJpbmRpbmcoKV0KICAgIHBhcmFtICgKICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLAogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgKQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIGlmICgkQWRkaXRpb25hbFBhcmFtZXRlcnMuVmVyYm9zZSkgeyAkVmVyYm9zZVByZWZlcmVuY2UgPSAnY29udGludWUnIH0KICAgIFdyaXRlLVBTRk1lc3NhZ2UgICJUZXN0LVNlY3JldFZhdWx0IGZyb20gJFZhdWx0TmFtZSwgQWRkaXRpb25hbFBhcmFtZXRlcnM9JCgkQWRkaXRpb25hbFBhcmFtZXRlcnN8Q29udmVydFRvLUpzb24gLUNvbXByZXNzKSIKCiAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBWZXJib3NlICJTZWNyZXRNYW5hZ2VtZW50OiBUZXN0aW5nIFZhdWx0ICR7VmF1bHROYW1lfSIKICAgICR2YXVsdCA9IEdldC1TZWNyZXRWYXVsdCAkVmF1bHROYW1lIC1FcnJvckFjdGlvbiBTdG9wCiAgICBpZiAoJHZhdWx0Lk1vZHVsZU5hbWUgLW5lICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JykgewogICAgICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEVycm9yICIkdmF1bHROYW1lIHdhcyBmb3VuZCBidXQgaXMgbm90IGEgw75uYW1lw74gVmF1bHQuIgogICAgICAgIFdhaXQtUFNGTWVzc2FnZQogICAgICAgIHJldHVybiAkZmFsc2UKICAgIH0KICAgICMgVE9ETyBQZXJmb3JtIHNvbWUgdGVzdGluZyB2b29kb28gOy0pCiAgICByZXR1cm4gJHRydWUKfQoBCV8DAAAJYAMAAAZhAwAAFFRlc3QtU2VjcmV0VmF1bHQucHMxBmIDAAB3L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMvVGVzdC1TZWNyZXRWYXVsdC5wczEJWwAAAAlkAwAACWUDAAABlAIAAG8AAAAGZgMAAMgKZnVuY3Rpb24gVW5sb2NrLVNlY3JldFZhdWx0IHsKICAgIDwjCiAgICAuU1lOT1BTSVMKICAgIFVubG9ja3MgdGhlIHZhdWx0LgoKICAgIC5ERVNDUklQVElPTgogICAgVW5sb2NrcyB0aGUgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBQYXNzd29yZAogICAgVGhlIHBhc3N3b3JkIG5lZWRlZCBmb3IgdW5sb2NraW5nLgoKICAgIC5QQVJBTUVURVIgVmF1bHROYW1lCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0LgoKICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4KCiAgICAuRVhBTVBMRQogICAgVW5sb2NrLVNlY3JldFZhdWx0IC1WYXVsdE5hbWUgJHZhdWx0TmFtZSAtUGFzc3dvcmQgKFJlYWQtSG9zdCAtQXNTZWN1cmVTdHJpbmcpCgogICAgVW5sb2NrcyB0aGUgdmF1bHQKCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbQ21kbGV0QmluZGluZygpXQogICAgcGFyYW0gKAogICAgICAgIFtTZWN1cmVTdHJpbmddICRQYXNzd29yZCwKICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLAogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgKQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMKCiAgICBXcml0ZS1QU0ZNZXNzYWdlICJVbmxvY2tpbmcgU2VjcmV0VmF1bHQgJFZhdWx0TmFtZSwgQWRkaXRpb25hbFBhcmFtZXRlcnM9JCgkQWRkaXRpb25hbFBhcmFtZXRlcnN8Q29udmVydFRvLUpzb24gLUNvbXByZXNzKSIKICAgICR2YXVsdCA9IEdldC1TZWNyZXRWYXVsdCAkVmF1bHROYW1lIC1FcnJvckFjdGlvbiBTdG9wCiAgICBpZiAoJHZhdWx0Lk1vZHVsZU5hbWUgLW5lICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JykgewogICAgICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEVycm9yICIkdmF1bHROYW1lIHdhcyBmb3VuZCBidXQgaXMgbm90IGEgw75uYW1lw74gVmF1bHQuIgogICAgICAgIFdhaXQtUFNGTWVzc2FnZQogICAgICAgIHJldHVybiAkZmFsc2UKICAgIH0KICAgICMgVE9ETyBTaG91bGQgdGhlIG1hc3RlciBwYXNzd29yZCBiZSBjYWNoZWQ/CiAgICAjIFNldC1WYXJpYWJsZSAtTmFtZSAiVmF1bHRfJHt2YXVsdE5hbWV9X01hc3RlclBhc3N3b3JkIiAtU2NvcGUgU2NyaXB0IC1WYWx1ZSAkUGFzc3dvcmQgLUZvcmNlCgogICAgIyBUT0RPIFBlcmZvcm0gdGhlIGNvbm5lY3Rpb24gdm9vZG9vIDstKQogICAgcmV0dXJuICR0cnVlCn0BCWcDAAAJaAMAAAZpAwAAFlVubG9jay1TZWNyZXRWYXVsdC5wczEGagMAAHkvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy9VbmxvY2stU2VjcmV0VmF1bHQucHMxCVsAAAAJbAMAAAltAwAAAZUCAABvAAAABm4DAAD2B2Z1bmN0aW9uIFVucmVnaXN0ZXItU2VjcmV0VmF1bHQgewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgVW5yZWdpc3RlcnMgdGhlIHZhdWx0IGFuZCByZW1vdmVzIGluTWVtb3J5IGRhdGEgZm9yIHNlY3VyaXR5LgoKICAgIC5ERVNDUklQVElPTgogICAgVW5yZWdpc3RlcnMgdGhlIHZhdWx0IGFuZCByZW1vdmVzIGluTWVtb3J5IGRhdGEgZm9yIHNlY3VyaXR5LgoKICAgIC5QQVJBTUVURVIgVmF1bHROYW1lCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0LgoKICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4KCiAgICAuRVhBTVBMRQogICAgVW5yZWdpc3Rlci1TZWNyZXRWYXVsdCAtVmF1bHROYW1lICR2YXVsdE5hbWUKCiAgICBSZW1vdmVzIHRoZSByZWdpc3RyYXRpb24KCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbQ21kbGV0QmluZGluZygpXQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTUmV2aWV3VW51c2VkUGFyYW1ldGVyJywgJycpXQogICAgcGFyYW0gKAogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICApCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUKICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycwoKICAgICMgVE9ETyBBZGQgeW91ciBzcGVjaWZpYyBkaXNjb25uZWN0aW9uIGNvbW1hbmRzLCBlLmcuIHJlbW92aW5nIHRoZSBzdG9yZWQgbWFzdGVyIHBhc3N3b3JkCiAgICAjIFJlbW92ZS1WYXJpYWJsZSAtTmFtZSAiVmF1bHRfJHt2YXVsdE5hbWV9X01hc3RlclBhc3N3b3JkIiAtU2NvcGUgU2NyaXB0IC1Gb3JjZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQp9CgEJbwMAAAlwAwAABnEDAAAaVW5yZWdpc3Rlci1TZWNyZXRWYXVsdC5wczEGcgMAAH0vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy9VbnJlZ2lzdGVyLVNlY3JldFZhdWx0LnBzMQlbAAAACXQDAAAJdQMAAAGWAgAAbwAAAAZ2AwAAqgIjIEZ1bmN0aW9ucy5TaGFyZWRJbnRlcm5hbAoKVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIGludGVybmFsIGZ1bmN0aW9ucyBnbyB3aGljaCB3aWxsIGJlIGltcG9ydGVkIGZyb20gdGhlIG1haW4KYW5kIHRoZSBleHRlbnNpb24gbW9kdWxlLgoKVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkuIElmIHRoZSBtb2R1bGUgaXMgYnVpbGQgd2l0aAondnN0cy1idWlsZC5wczEnIHRoZSBjb250ZW50IG9mIGFsbCAqLnBzMSBmaWxlcyBpcyBjb3BpZWQgaW50byB0aGUgKi5wc20xIGZpbGUuAQl3AwAACXgDAAAGeQMAAAlyZWFkbWUubWQGegMAAHsvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbC9yZWFkbWUubWQJWwAAAAl8AwAACX0DAAABlwIAAD4AAAAJfgMAAAZ/AwAADmNvbmZpZ3VyYXRpb25zBoADAABwL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9jb25maWd1cmF0aW9ucwlbAAAACYIDAAAJgwMAAAGYAgAAPgAAAAmEAwAABoUDAAAJZnVuY3Rpb25zBoYDAABrL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9mdW5jdGlvbnMJWwAAAAmIAwAACYkDAAABmQIAAD4AAAAJigMAAAaLAwAADHNjcmlwdGJsb2NrcwaMAwAAbi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvc2NyaXB0YmxvY2tzCVsAAAAJjgMAAAmPAwAAAZoCAAA+AAAACZADAAAGkQMAAAdzY3JpcHRzBpIDAABpL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9zY3JpcHRzCVsAAAAJlAMAAAmVAwAAAZsCAAA+AAAACZYDAAAGlwMAAAR0ZXBwBpgDAABmL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC90ZXBwCVsAAAAJmgMAAAmbAwAAAZwCAAA+AAAACZwDAAAGnQMAAAlmdW5jdGlvbnMGngMAAGgvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzL2Z1bmN0aW9ucwlbAAAACaADAAAJoQMAAAGdAgAAPgAAAAmiAwAABqMDAAAHZ2VuZXJhbAakAwAAZi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZ2VuZXJhbAlbAAAACaYDAAAJpwMAAAGeAgAAbwAAAAaoAwAAuhpwYXJhbSAoCgkkVGVzdEdlbmVyYWwgPSAkdHJ1ZSwKCQoJJFRlc3RGdW5jdGlvbnMgPSAkdHJ1ZSwKCQoJW1ZhbGlkYXRlU2V0KCdOb25lJywgJ05vcm1hbCcsICdEZXRhaWxlZCcsICdEaWFnbm9zdGljJyldCglbQWxpYXMoJ1Nob3cnKV0KCSRPdXRwdXQgPSAiTm9uZSIsCgkKCSRJbmNsdWRlID0gIioiLAoJCgkkRXhjbHVkZSA9ICIiCikKCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiU3RhcnRpbmcgVGVzdHMiCgpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkltcG9ydGluZyBNb2R1bGUiCgokZ2xvYmFsOnRlc3Ryb290ID0gJFBTU2NyaXB0Um9vdAokZ2xvYmFsOl9fcGVzdGVyX2RhdGEgPSBAeyB9CgpSZW1vdmUtTW9kdWxlIMO+bmFtZcO+IC1FcnJvckFjdGlvbiBJZ25vcmUKSW1wb3J0LU1vZHVsZSAiJFBTU2NyaXB0Um9vdFwuLlzDvm5hbWXDvi5wc2QxIgpJbXBvcnQtTW9kdWxlICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+LnBzbTEiIC1Gb3JjZQoKIyBOZWVkIHRvIGltcG9ydCBleHBsaWNpdGx5IHNvIHdlIGNhbiB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gY2xhc3MKSW1wb3J0LU1vZHVsZSBQZXN0ZXIKCsO+IXRlc3Rmb2xkZXIhw74KCiR0b3RhbEZhaWxlZCA9IDAKJHRvdGFsUnVuID0gMAoKJHRlc3RyZXN1bHRzID0gQCgpCiRjb25maWcgPSBbUGVzdGVyQ29uZmlndXJhdGlvbl06OkRlZmF1bHQKw74hcGVzdGVyY29uZmlnIcO+CgojcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzCmlmICgkVGVzdEdlbmVyYWwpCnsKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiTW9kdWxlcyBpbXBvcnRlZCwgcHJvY2VlZGluZyB3aXRoIGdlbmVyYWwgdGVzdHMiCglmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJFBTU2NyaXB0Um9vdFxnZW5lcmFsIiB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLlRlc3RzLnBzMSIpKQoJewoJCWlmICgkZmlsZS5OYW1lIC1ub3RsaWtlICRJbmNsdWRlKSB7IGNvbnRpbnVlIH0KCQlpZiAoJGZpbGUuTmFtZSAtbGlrZSAkRXhjbHVkZSkgeyBjb250aW51ZSB9CgoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyA8Yz0nZW0nPiQoJGZpbGUuTmFtZSk8L2M+IgoJCSRjb25maWcuVGVzdFJlc3VsdC5PdXRwdXRQYXRoID0gSm9pbi1QYXRoICIkUFNTY3JpcHRSb290XC4uXC4uXFRlc3RSZXN1bHRzIiAiVEVTVC0kKCRmaWxlLkJhc2VOYW1lKS54bWwiCgkJJGNvbmZpZy5SdW4uUGF0aCA9ICRmaWxlLkZ1bGxOYW1lCgkJJGNvbmZpZy5SdW4uUGFzc1RocnUgPSAkdHJ1ZQoJCSRjb25maWcuT3V0cHV0LlZlcmJvc2l0eSA9ICRPdXRwdXQKICAgIAkkcmVzdWx0cyA9IEludm9rZS1QZXN0ZXIgLUNvbmZpZ3VyYXRpb24gJGNvbmZpZwoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpCgkJewoJCQkkdG90YWxSdW4gKz0gJHJlc3VsdC5Ub3RhbENvdW50CgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50CgkJCSRyZXN1bHQuVGVzdHMgfCBXaGVyZS1PYmplY3QgUmVzdWx0IC1uZSAnUGFzc2VkJyB8IEZvckVhY2gtT2JqZWN0IHsKCQkJCSR0ZXN0cmVzdWx0cyArPSBbcHNjdXN0b21vYmplY3RdQHsKCQkJCQlCbG9jayAgICA9ICRfLkJsb2NrCgkJCQkJTmFtZQkgPSAiSXQgJCgkXy5OYW1lKSIKCQkJCQlSZXN1bHQgICA9ICRfLlJlc3VsdAoJCQkJCU1lc3NhZ2UgID0gJF8uRXJyb3JSZWNvcmQuRGlzcGxheUVycm9yTWVzc2FnZQoJCQkJfQoJCQl9CgkJfQoJfQp9CiNlbmRyZWdpb24gUnVuIEdlbmVyYWwgVGVzdHMKCiRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplciB8IE91dC1Ib3N0CgojcmVnaW9uIFRlc3QgQ29tbWFuZHMKaWYgKCRUZXN0RnVuY3Rpb25zKQp7CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlByb2NlZWRpbmcgd2l0aCBpbmRpdmlkdWFsIHRlc3RzIgoJZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRQU1NjcmlwdFJvb3RcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqVGVzdHMucHMxIikpCgl7CgkJaWYgKCRmaWxlLk5hbWUgLW5vdGxpa2UgJEluY2x1ZGUpIHsgY29udGludWUgfQoJCWlmICgkZmlsZS5OYW1lIC1saWtlICRFeGNsdWRlKSB7IGNvbnRpbnVlIH0KCQkKCQlXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBTaWduaWZpY2FudCAtTWVzc2FnZSAiICBFeGVjdXRpbmcgJCgkZmlsZS5OYW1lKSIKCQkkY29uZmlnLlRlc3RSZXN1bHQuT3V0cHV0UGF0aCA9IEpvaW4tUGF0aCAiJFBTU2NyaXB0Um9vdFwuLlwuLlxUZXN0UmVzdWx0cyIgIlRFU1QtJCgkZmlsZS5CYXNlTmFtZSkueG1sIgoJCSRjb25maWcuUnVuLlBhdGggPSAkZmlsZS5GdWxsTmFtZQoJCSRjb25maWcuUnVuLlBhc3NUaHJ1ID0gJHRydWUKCQkkY29uZmlnLk91dHB1dC5WZXJib3NpdHkgPSAkT3V0cHV0CiAgICAJJHJlc3VsdHMgPSBJbnZva2UtUGVzdGVyIC1Db25maWd1cmF0aW9uICRjb25maWcKCQlmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQoJCXsKCQkJJHRvdGFsUnVuICs9ICRyZXN1bHQuVG90YWxDb3VudAoJCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudAoJCQkkcmVzdWx0LlRlc3RzIHwgV2hlcmUtT2JqZWN0IFJlc3VsdCAtbmUgJ1Bhc3NlZCcgfCBGb3JFYWNoLU9iamVjdCB7CgkJCQkkdGVzdHJlc3VsdHMgKz0gW3BzY3VzdG9tb2JqZWN0XUB7CgkJCQkJQmxvY2sgICAgPSAkXy5CbG9jawoJCQkJCU5hbWUJID0gIkl0ICQoJF8uTmFtZSkiCgkJCQkJUmVzdWx0ICAgPSAkXy5SZXN1bHQKCQkJCQlNZXNzYWdlICA9ICRfLkVycm9yUmVjb3JkLkRpc3BsYXlFcnJvck1lc3NhZ2UKCQkJCX0KCQkJfQoJCX0KCX0KfQojZW5kcmVnaW9uIFRlc3QgQ29tbWFuZHMKCiR0ZXN0cmVzdWx0cyB8IFNvcnQtT2JqZWN0IERlc2NyaWJlLCBDb250ZXh0LCBOYW1lLCBSZXN1bHQsIE1lc3NhZ2UgfCBGb3JtYXQtTGlzdAoKaWYgKCR0b3RhbEZhaWxlZCAtZXEgMCkgeyBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBDcml0aWNhbCAtTWVzc2FnZSAiQWxsIDxjPSdlbSc+JHRvdGFsUnVuPC9jPiB0ZXN0cyBleGVjdXRlZCB3aXRob3V0IGEgc2luZ2xlIGZhaWx1cmUhIiB9CmVsc2UgeyBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBDcml0aWNhbCAtTWVzc2FnZSAiPGM9J2VtJz4kdG90YWxGYWlsZWQgdGVzdHM8L2M+IG91dCBvZiA8Yz0nc3ViJz4kdG90YWxSdW48L2M+IHRlc3RzIGZhaWxlZCEiIH0KCmlmICgkdG90YWxGYWlsZWQgLWd0IDApCnsKCXRocm93ICIkdG90YWxGYWlsZWQgLyAkdG90YWxSdW4gdGVzdHMgZmFpbGVkISIKfQEJqQMAAAmqAwAABqsDAAAKcGVzdGVyLnBzMQasAwAAaS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvcGVzdGVyLnBzMQlbAAAACa4DAAAJrwMAAAGfAgAAbwAAAAawAwAAhAcjIERlc2NyaXB0aW9uCgpUaGlzIGlzIHRoZSBmb2xkZXIsIHdoZXJlIGFsbCB0aGUgdGVzdHMgZ28uCgpUaG9zZSBhcmUgc3ViZGl2aWRlZCBpbiB0d28gY2F0ZWdvcmllczoKCiAtIEdlbmVyYWwKIC0gRnVuY3Rpb24KCiMjIEdlbmVyYWwgVGVzdHMKCkdlbmVyYWwgdGVzdHMgYXJlIGZ1bmN0aW9uIGdlbmVyaWMgYW5kIHRlc3QgZm9yIGdlbmVyYWwgcG9saWNpZXMuCgpUaGVzZSB0ZXN0IHNjYW4gYW5zd2VyIHF1ZXN0aW9ucyBzdWNoIGFzOgoKIC0gSXMgbXkgbW9kdWxlIGZvbGxvd2luZyBteSBzdHlsZSBndWlkZXM/CiAtIERvZXMgYW55IG9mIG15IHNjcmlwdHMgaGF2ZSBhIHN5bnRheCBlcnJvcj8KIC0gRG8gbXkgc2NyaXB0cyB1c2UgY29tbWFuZHMgSSBkbyBub3Qgd2FudCB0aGVtIHRvIHVzZT8KIC0gRG8gbXkgY29tbWFuZHMgZm9sbG93IGJlc3QgcHJhY3RpY2VzPwogLSBEbyBteSBjb21tYW5kcyBoYXZlIHByb3BlciBoZWxwPwoKQmFzaWNhbGx5LCB0aGVzZSBhbGxvdyBhIGdlbmVyYWwgbW9kdWxlIGhlYWx0aCBjaGVjay4KClRoZXNlIHRlc3RzIGFyZSBhbHJlYWR5IHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhlIHRlbXBsYXRlLgoKIyMgRnVuY3Rpb24gVGVzdHMKCkEgaGVhbHRoeSBtb2R1bGUgc2hvdWxkIHByb3ZpZGUgdW5pdCBhbmQgaW50ZWdyYXRpb24gdGVzdHMgZm9yIHRoZSBjb21tYW5kcyAmIGNvbXBvbmVudHMgaXQgc2hpcHMuCk9ubHkgdGhlbiBjYW4gYmUgZ3VhcmFudGVlZCwgdGhhdCB0aGV5IHdpbGwgYWN0dWFsbHkgcGVyZm9ybSBhcyBwcm9taXNlZC4KCkhvd2V2ZXIsIGFzIGVhY2ggc3VjaCB0ZXN0IG11c3QgYmUgc3BlY2lmaWMgdG8gdGhlIGZ1bmN0aW9uIGl0IHRlc3RzLCB0aGVyZSBjYW5ub3QgYmUgbXVjaCBpbiB0aGUgd2F5IG9mIHRlbXBsYXRlcy4BCbEDAAAJsgMAAAazAwAACXJlYWRtZS5tZAa0AwAAaC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvcmVhZG1lLm1kCVsAAAAJtgMAAAm3AwAAAaACAABvAAAABrgDAACCCyMgWE1MCgpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgcHJvamVjdCBYTUwgZmlsZXMgZ28sIG5vdGFibHk6CgogLSBGb3JtYXQgWE1MCiAtIFR5cGUgRXh0ZW5zaW9uIFhNTAoKRXh0ZXJuYWwgaGVscCBmaWxlcyBzaG91bGQgX25vdF8gYmUgcGxhY2VkIGluIHRoaXMgZm9sZGVyIQoKIyMgTm90ZXMgb24gRmlsZXMgYW5kIE5hbWluZwoKVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGZvcm1hdCBmaWxlIGFuZCBvbmUgdHlwZSBleHRlbnNpb24gZmlsZSBwZXIgcHJvamVjdCwgYXMgaW1wb3J0aW5nIHRoZW0gaGFzIGEgbm90YWJsZSBpbXBhY3Qgb24gaW1wb3J0IHRpbWVzLgoKIC0gVGhlIEZvcm1hdCBYTUwgc2hvdWxkIGJlIG5hbWVkIGDDvm5hbWXDvi5Gb3JtYXQucHMxeG1sYAogLSBUaGUgVHlwZSBFeHRlbnNpb24gWE1MIHNob3VsZCBiZSBuYW1lZCBgw75uYW1lw74uVHlwZXMucHMxeG1sYAoKIyMgVG9vbHMKCiMjIyBOZXctUFNNREZvcm1hdFRhYmxlRGVmaW5pdGlvbgoKVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYW4gaW5wdXQgb2JqZWN0IGFuZCBnZW5lcmF0ZSBmb3JtYXQgeG1sIGZvciBhbiBhdXRvLXNpemVkIHRhYmxlLgoKSXQgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IHRvIGdldCBzdGFydGVkIHdpdGggZm9ybWF0cy4KCiMjIyBHZXQtUFNGVHlwZVNlcmlhbGl6YXRpb25EYXRhCgpgYGAKQyMgV2FybmluZyEKVGhpcyBzZWN0aW9uIGlzIG9ubHkgaW50ZXJlc3QgaWYgeW91J3JlIHVzaW5nIEMjIHRvZ2V0aGVyIHdpdGggUG93ZXJTaGVsbC4KYGBgCgpUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyB0eXBlIGV4dGVuc2lvbiBYTUwgdGhhdCBhbGxvd3MgUG93ZXJTaGVsbCB0byBjb252ZXJ0IHR5cGVzIHdyaXR0ZW4gaW4gQyMgdG8gYmUgd3JpdHRlbiB0byBmaWxlIGFuZCByZXN0b3JlZCBmcm9tIGl0IHdpdGhvdXQgYmVpbmcgJ0Rlc2VyaWFsaXplZCcuIEFsc28gd29ya3MgZm9yIGpvYnMgb3IgcmVtb3RpbmcsIGlmIGJvdGggc2lkZXMgaGF2ZSB0aGUgYFBTRnJhbWV3b3JrYCBtb2R1bGUgYW5kIHR5cGUgZXh0ZW5zaW9uIGxvYWRlZC4KCkluIG9yZGVyIGZvciBhIGNsYXNzIHRvIGJlIGVsaWdpYmxlIGZvciB0aGlzLCBpdCBuZWVkcyB0byBjb25mb3JtIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXM6CgogLSBIYXZlIHRoZSBgW1NlcmlhbGl6YWJsZV1gIGF0dHJpYnV0ZQogLSBCZSBwdWJsaWMKIC0gSGF2ZSBhbiBlbXB0eSBjb25zdHJ1Y3RvcgogLSBBbGxvdyBhbGwgcHVibGljIHByb3BlcnRpZXMvZmllbGRzIHRvIGJlIHNldCAoZXZlbiBpZiBzZXR0aW5nIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcpIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLgoKYGBgCm5vbi1wdWJsaWMgcHJvcGVydGllcyBhbmQgZmllbGRzIHdpbGwgYmUgbG9zdCBpbiB0aGlzIHByb2Nlc3MhCmBgYAEJuQMAAAm6AwAABrsDAAAJcmVhZG1lLm1kBrwDAABmL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi94bWwvcmVhZG1lLm1kCVsAAAAJvgMAAAm/AwAAAaECAABvAAAABsADAADKBTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi0xNiI/Pgo8Q29uZmlndXJhdGlvbj4KCTxWaWV3RGVmaW5pdGlvbnM+CgkJPCEtLSBGb28uQmFyIC0tPgoJCTxWaWV3PgoJCQk8TmFtZT5Gb28uQmFyPC9OYW1lPgoJCQk8Vmlld1NlbGVjdGVkQnk+CgkJCQk8VHlwZU5hbWU+Rm9vLkJhcjwvVHlwZU5hbWU+CgkJCTwvVmlld1NlbGVjdGVkQnk+CgkJCTxUYWJsZUNvbnRyb2w+CgkJCQk8QXV0b1NpemUvPgoJCQkJPFRhYmxlSGVhZGVycz4KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPgoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+CgkJCQk8L1RhYmxlSGVhZGVycz4KCQkJCTxUYWJsZVJvd0VudHJpZXM+CgkJCQkJPFRhYmxlUm93RW50cnk+CgkJCQkJCTxUYWJsZUNvbHVtbkl0ZW1zPgoJCQkJCQkJPFRhYmxlQ29sdW1uSXRlbT4KCQkJCQkJCQk8UHJvcGVydHlOYW1lPkZvbzwvUHJvcGVydHlOYW1lPgoJCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW0+CgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPgoJCQkJCQkJCTxQcm9wZXJ0eU5hbWU+QmFyPC9Qcm9wZXJ0eU5hbWU+CgkJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbT4KCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW1zPgoJCQkJCTwvVGFibGVSb3dFbnRyeT4KCQkJCTwvVGFibGVSb3dFbnRyaWVzPgoJCQk8L1RhYmxlQ29udHJvbD4KCQk8L1ZpZXc+Cgk8L1ZpZXdEZWZpbml0aW9ucz4KPC9Db25maWd1cmF0aW9uPgEJwQMAAAnCAwAABsMDAAAWw75uYW1lw74uRm9ybWF0LnBzMXhtbAbEAwAAcy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24veG1sL8O+bmFtZcO+LkZvcm1hdC5wczF4bWwJWwAAAAnGAwAACccDAAABogIAAG8AAAAGyAMAALwHPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPFR5cGVzPgogIDwhLS0gRm9vLkJhciAtLT4KICA8VHlwZT4KICAgIDxOYW1lPkRlc2VyaWFsaXplZC5Gb28uQmFyPC9OYW1lPgogICAgPE1lbWJlcnM+CiAgICAgIDxNZW1iZXJTZXQ+CiAgICAgICAgPE5hbWU+UFNTdGFuZGFyZE1lbWJlcnM8L05hbWU+CiAgICAgICAgPE1lbWJlcnM+CiAgICAgICAgICA8Tm90ZVByb3BlcnR5PgogICAgICAgICAgICA8TmFtZT4KICAgICAgICAgICAgICBUYXJnZXRUeXBlRm9yRGVzZXJpYWxpemF0aW9uCiAgICAgICAgICAgIDwvTmFtZT4KICAgICAgICAgICAgPFZhbHVlPgogICAgICAgICAgICAgIEZvby5CYXIKICAgICAgICAgICAgPC9WYWx1ZT4KICAgICAgICAgIDwvTm90ZVByb3BlcnR5PgogICAgICAgIDwvTWVtYmVycz4KICAgICAgPC9NZW1iZXJTZXQ+CiAgICA8L01lbWJlcnM+CiAgPC9UeXBlPgogIDxUeXBlPgogICAgPE5hbWU+Rm9vLkJhcjwvTmFtZT4KICAgIDxNZW1iZXJzPgogICAgICA8Q29kZVByb3BlcnR5IElzSGlkZGVuPSJ0cnVlIj4KICAgICAgICA8TmFtZT5TZXJpYWxpemF0aW9uRGF0YTwvTmFtZT4KICAgICAgICA8R2V0Q29kZVJlZmVyZW5jZT4KICAgICAgICAgIDxUeXBlTmFtZT5QU0ZyYW1ld29yay5TZXJpYWxpemF0aW9uLlNlcmlhbGl6YXRpb25UeXBlQ29udmVydGVyPC9UeXBlTmFtZT4KICAgICAgICAgIDxNZXRob2ROYW1lPkdldFNlcmlhbGl6YXRpb25EYXRhPC9NZXRob2ROYW1lPgogICAgICAgIDwvR2V0Q29kZVJlZmVyZW5jZT4KICAgICAgPC9Db2RlUHJvcGVydHk+CiAgICA8L01lbWJlcnM+CiAgICA8VHlwZUNvbnZlcnRlcj4KICAgICAgPFR5cGVOYW1lPlBTRnJhbWV3b3JrLlNlcmlhbGl6YXRpb24uU2VyaWFsaXphdGlvblR5cGVDb252ZXJ0ZXI8L1R5cGVOYW1lPgogICAgPC9UeXBlQ29udmVydGVyPgogIDwvVHlwZT4KPC9UeXBlcz4BCckDAAAJygMAAAbLAwAAFcO+bmFtZcO+LlR5cGVzLnBzMXhtbAbMAwAAci9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24veG1sL8O+bmFtZcO+LlR5cGVzLnBzMXhtbAlbAAAACc4DAAAJzwMAAAGvAgAAbwAAAAbQAwAAzwEjIERlc2NyaXB0aW9uCgpUaGlzIGlzIHdoZXJlIHRoZSBmdW5jdGlvbiB0ZXN0cyBnby4KCk1ha2Ugc3VyZSB0byBwdXQgdGhlbSBpbiBmb2xkZXJzIHJlZmxlY3RpbmcgdGhlIGFjdHVhbCBtb2R1bGUgc3RydWN0dXJlLgoKSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgYW5kIHB1YmxpYyBmdW5jdGlvbnMgaGVyZS4BCdEDAAAJ0gMAAAbTAwAACXJlYWRtZS5tZAbUAwAATi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMvZnVuY3Rpb25zL3JlYWRtZS5tZAlbAAAACdYDAAAJ1wMAAAGwAgAAbwAAAAbYAwAA3gUjIExpc3Qgb2YgZm9yYmlkZGVuIGNvbW1hbmRzCiRnbG9iYWw6QmFubmVkQ29tbWFuZHMgPSBAKAoJJ1dyaXRlLUhvc3QnCgknV3JpdGUtVmVyYm9zZScKCSdXcml0ZS1XYXJuaW5nJwoJJ1dyaXRlLUVycm9yJwoJJ1dyaXRlLU91dHB1dCcKCSdXcml0ZS1JbmZvcm1hdGlvbicKCSdXcml0ZS1EZWJ1ZycKCQoJIyBVc2UgQ0lNIGluc3RlYWQgd2hlcmUgcG9zc2libGUKCSdHZXQtV21pT2JqZWN0JwoJJ0ludm9rZS1XbWlNZXRob2QnCgknUmVnaXN0ZXItV21pRXZlbnQnCgknUmVtb3ZlLVdtaU9iamVjdCcKCSdTZXQtV21pSW5zdGFuY2UnCgoJIyBVc2UgR2V0LVdpbkV2ZW50IGluc3RlYWQKCSdHZXQtRXZlbnRMb2cnCikKCjwjCglDb250YWlucyBsaXN0IG9mIGV4Y2VwdGlvbnMgZm9yIGJhbm5lZCBjbWRsZXRzLgoJSW5zZXJ0IHRoZSBmaWxlIG5hbWVzIG9mIGZpbGVzIHRoYXQgbWF5IGNvbnRhaW4gdGhlbS4KCQoJRXhhbXBsZToKCSJXcml0ZS1Ib3N0IiAgPSBAKCdXcml0ZS1QU0ZIb3N0Q29sb3IucHMxJywnV3JpdGUtUFNGTWVzc2FnZS5wczEnKQojPgokZ2xvYmFsOk1heUNvbnRhaW5Db21tYW5kID0gQHsKCSJXcml0ZS1Ib3N0IiAgPSBAKCkKCSJXcml0ZS1WZXJib3NlIiA9IEAoKQoJIldyaXRlLVdhcm5pbmciID0gQCgpCgkiV3JpdGUtRXJyb3IiICA9IEAoKQoJIldyaXRlLU91dHB1dCIgPSBAKCkKCSJXcml0ZS1JbmZvcm1hdGlvbiIgPSBAKCkKCSJXcml0ZS1EZWJ1ZyIgPSBAKCkKfQEJ2QMAAAnaAwAABtsDAAAcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQbcAwAAXy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMvZ2VuZXJhbC9GaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxCVsAAAAJ3gMAAAnfAwAAAbECAABvAAAABuADAACCGCRtb2R1bGVSb290ID0gKFJlc29sdmUtUGF0aCAiJGdsb2JhbDp0ZXN0cm9vdFwuLiIpLlBhdGgKCi4gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxIgoKRGVzY3JpYmUgIlZlcmlmeWluZyBpbnRlZ3JpdHkgb2YgbW9kdWxlIGZpbGVzIiB7CglCZWZvcmVBbGwgewoJCWZ1bmN0aW9uIEdldC1GaWxlRW5jb2RpbmcKCQl7CgkJPCMKCQkJLlNZTk9QU0lTCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLgoJCQkKCQkJLkRFU0NSSVBUSU9OCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLgoJCQkKCQkJLlBBUkFNRVRFUiBQYXRoCgkJCQlUaGUgZmlsZSB0byB0ZXN0CgkJIz4KCQkJW0NtZGxldEJpbmRpbmcoKV0KCQkJUGFyYW0gKAoJCQkJW1BhcmFtZXRlcihNYW5kYXRvcnkgPSAkVHJ1ZSwgVmFsdWVGcm9tUGlwZWxpbmVCeVByb3BlcnR5TmFtZSA9ICRUcnVlKV0KCQkJCVtBbGlhcygnRnVsbE5hbWUnKV0KCQkJCVtzdHJpbmddCgkJCQkkUGF0aAoJCQkpCgkJCQoJCQlpZiAoJFBTVmVyc2lvblRhYmxlLlBTVmVyc2lvbi5NYWpvciAtbHQgNikKCQkJewoJCQkJW2J5dGVbXV0kYnl0ZSA9IGdldC1jb250ZW50IC1FbmNvZGluZyBieXRlIC1SZWFkQ291bnQgNCAtVG90YWxDb3VudCA0IC1QYXRoICRQYXRoCgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlbYnl0ZVtdXSRieXRlID0gR2V0LUNvbnRlbnQgLUFzQnl0ZVN0cmVhbSAtUmVhZENvdW50IDQgLVRvdGFsQ291bnQgNCAtUGF0aCAkUGF0aAoJCQl9CgkJCQoJCQlpZiAoJGJ5dGVbMF0gLWVxIDB4ZWYgLWFuZCAkYnl0ZVsxXSAtZXEgMHhiYiAtYW5kICRieXRlWzJdIC1lcSAweGJmKSB7ICdVVEY4IEJPTScgfQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAweGZlIC1hbmQgJGJ5dGVbMV0gLWVxIDB4ZmYpIHsgJ1VuaWNvZGUnIH0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMCAtYW5kICRieXRlWzFdIC1lcSAwIC1hbmQgJGJ5dGVbMl0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVszXSAtZXEgMHhmZikgeyAnVVRGMzInIH0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMHgyYiAtYW5kICRieXRlWzFdIC1lcSAweDJmIC1hbmQgJGJ5dGVbMl0gLWVxIDB4NzYpIHsgJ1VURjcnIH0KCQkJZWxzZSB7ICdVbmtub3duJyB9CgkJfQoJfQoKCUNvbnRleHQgIlZhbGlkYXRpbmcgUFMxIFNjcmlwdCBmaWxlcyIgewoJCSRhbGxGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJG1vZHVsZVJvb3QgLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIgoJCQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykKCQl7CgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpCgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIHdpdGggQnl0ZSBPcmRlciBNYXJrIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsKCQkJCUdldC1GaWxlRW5jb2RpbmcgLVBhdGggJGZpbGUuRnVsbE5hbWUgfCBTaG91bGQgLUJlICdVVEY4IEJPTScKCQkJfQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gewoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMH0pLkxpbmVOdW1iZXIgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQkJfQoJCQkKCQkJJHRva2VucyA9ICRudWxsCgkJCSRwYXJzZUVycm9ycyA9ICRudWxsCgkJCSRhc3QgPSBbU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5MYW5ndWFnZS5QYXJzZXJdOjpQYXJzZUZpbGUoJGZpbGUuRnVsbE5hbWUsIFtyZWZdJHRva2VucywgW3JlZl0kcGFyc2VFcnJvcnMpCgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyBzeW50YXggZXJyb3JzIiAtVGVzdENhc2VzIEB7IHBhcnNlRXJyb3JzID0gJHBhcnNlRXJyb3JzIH0gewoJCQkJJHBhcnNlRXJyb3JzIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJCX0KCQkJCgkJCWZvcmVhY2ggKCRjb21tYW5kIGluICRnbG9iYWw6QmFubmVkQ29tbWFuZHMpCgkJCXsKCQkJCWlmICgkZ2xvYmFsOk1heUNvbnRhaW5Db21tYW5kWyIkY29tbWFuZCJdIC1ub3Rjb250YWlucyAkZmlsZS5OYW1lKQoJCQkJewoJCQkJCUl0ICJbJG5hbWVdIFNob3VsZCBub3QgdXNlICRjb21tYW5kIiAtVGVzdENhc2VzIEB7IHRva2VucyA9ICR0b2tlbnM7IGNvbW1hbmQgPSAkY29tbWFuZCB9IHsKCQkJCQkJJHRva2VucyB8IFdoZXJlLU9iamVjdCBUZXh0IC1FUSAkY29tbWFuZCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCQoJQ29udGV4dCAiVmFsaWRhdGluZyBoZWxwLnR4dCBoZWxwIGZpbGVzIiB7CgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLmhlbHAudHh0IiB8IFdoZXJlLU9iamVjdCBGdWxsTmFtZSAtTm90TGlrZSAiJG1vZHVsZVJvb3RcdGVzdHNcKiIKCQkKCQlmb3JlYWNoICgkZmlsZSBpbiAkYWxsRmlsZXMpCgkJewoJCQkkbmFtZSA9ICRmaWxlLkZ1bGxOYW1lLlJlcGxhY2UoIiRtb2R1bGVSb290XCIsICcnKQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgVVRGOCBlbmNvZGluZyIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7CgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCBCT00nCgkJCX0KCQkJCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHRyYWlsaW5nIHNwYWNlIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsKCQkJCSgkZmlsZSB8IFNlbGVjdC1TdHJpbmcgIlxzJCIgfCBXaGVyZS1PYmplY3QgeyAkXy5MaW5lLlRyaW0oKS5MZW5ndGggLWd0IDAgfSB8IE1lYXN1cmUtT2JqZWN0KS5Db3VudCB8IFNob3VsZCAtQmUgMAoJCQl9CgkJfQoJfQp9AQnhAwAACeIDAAAG4wMAABdGaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQbkAwAAWi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMvZ2VuZXJhbC9GaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQlbAAAACeYDAAAJ5wMAAAGyAgAAbwAAAAboAwAAgwUjIExpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQKJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucyA9IEAoCiAgICAKKQoKPCMKICBMaXN0IG9mIGFycmF5ZWQgZW51bWVyYXRpb25zLiBUaGVzZSBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuIEFkZCBmdWxsIG5hbWUuCiAgRXhhbXBsZToKCiAgIlNxbGNvbGxhYm9yYXRpdmUuRGJhdG9vbHMuQ29ubmVjdGlvbi5NYW5hZ2VtZW50Q29ubmVjdGlvblR5cGVbXSIKIz4KJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMgPSBAKAoJCikKCjwjCiAgU29tZSB0eXBlcyBvbiBwYXJhbWV0ZXJzIGp1c3QgZmFpbCB0aGVpciB2YWxpZGF0aW9uIG5vIG1hdHRlciB3aGF0LgogIEZvciB0aG9zZSBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIHNraXAgdGhlbSwgYnkgYWRkaW5nIHRoZW0gdG8gdGhpcyBoYXNodGFibGUuCiAgQWRkIGJ5IGZvbGxvd2luZyB0aGlzIGNvbnZlbnRpb246IDxjb21tYW5kIG5hbWU+ID0gQCg8bGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXM+KQogIEV4YW1wbGU6CgogICJHZXQtRGJhQ21PYmplY3QiICAgICAgID0gQCgiRG9Ob3RVc2UiKQojPgokZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUgPSBAewogICAgCn0KAQnpAwAACeoDAAAG6wMAABNIZWxwLkV4Y2VwdGlvbnMucHMxBuwDAABWL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsL0hlbHAuRXhjZXB0aW9ucy5wczEJWwAAAAnuAwAACe8DAAABswIAAG8AAAAG8AMAALwzPCMKICAgIC5OT1RFUwogICAgICAgIFRoZSBvcmlnaW5hbCB0ZXN0IHRoaXMgaXMgYmFzZWQgdXBvbiB3YXMgd3JpdHRlbiBieSBKdW5lIEJsZW5kZXIuCgkJQWZ0ZXIgc2V2ZXJhbCByb3VuZHMgb2YgbW9kaWZpY2F0aW9ucyBpdCBzdGFuZHMgbm93IGFzIGl0IGlzLCBidXQgdGhlIGhvbm9yIHJlbWFpbnMgaGVycy4KCgkJVGhhbmsgeW91IEp1bmUsIGZvciBhbGwgeW91IGhhdmUgZG9uZSEKCiAgICAuREVTQ1JJUFRJT04KCQlUaGlzIHRlc3QgZXZhbHVhdGVzIHRoZSBoZWxwIGZvciBhbGwgY29tbWFuZHMgaW4gYSBtb2R1bGUuCgoJLlBBUkFNRVRFUiBTa2lwVGVzdAoJCURpc2FibGVzIHRoaXMgdGVzdC4KCQoJLlBBUkFNRVRFUiBDb21tYW5kUGF0aAoJCUxpc3Qgb2YgcGF0aHMgdW5kZXIgd2hpY2ggdGhlIHNjcmlwdCBmaWxlcyBhcmUgc3RvcmVkLgoJCVRoaXMgdGVzdCBhc3N1bWVzIHRoYXQgYWxsIGZ1bmN0aW9ucyBoYXZlIHRoZWlyIG93biBmaWxlIHRoYXQgaXMgbmFtZWQgYWZ0ZXIgdGhlbXNlbHZlcy4KCQlUaGVzZSBwYXRocyBhcmUgdXNlZCB0byBzZWFyY2ggZm9yIGNvbW1hbmRzIHRoYXQgc2hvdWxkIGV4aXN0IGFuZCBiZSB0ZXN0ZWQuCgkJV2lsbCBzZWFyY2ggcmVjdXJzaXZlbHkgYW5kIGFjY2VwdHMgd2lsZGNhcmRzLCBtYWtlIHN1cmUgb25seSBmdW5jdGlvbnMgYXJlIGZvdW5kCgoJLlBBUkFNRVRFUiBNb2R1bGVOYW1lCgkJTmFtZSBvZiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZC4KCQlUaGUgbW9kdWxlIG11c3QgYWxyZWFkeSBiZSBpbXBvcnRlZAoKCS5QQVJBTUVURVIgRXhjZXB0aW9uc0ZpbGUKCQlGaWxlIGluIHdoaWNoIGV4Y2VwdGlvbnMgYW5kIGFkanVzdG1lbnRzIGFyZSBjb25maWd1cmVkLgoJCUluIGl0IHRoZXJlIHNob3VsZCBiZSB0d28gYXJyYXlzIGFuZCBhIGhhc2h0YWJsZSBkZWZpbmVkOgoJCQkkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zCgkJCSRnbG9iYWw6SGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzCgkJCSRnbG9iYWw6SGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZQoJCVRoZXNlIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHRoZSB0ZXN0cyBzbGlnaHRseSBpbiBjYXNlcyBvZiBuZWVkLgoJCVNlZSB0aGUgZXhhbXBsZSBmaWxlIGZvciBleHBsYW5hdGlvbnMgb24gZWFjaCBvZiB0aGVzZSB1c2FnZSBhbmQgZWZmZWN0LgojPgpbQ21kbGV0QmluZGluZygpXQpQYXJhbSAoCglbc3dpdGNoXQoJJFNraXBUZXN0LAoJCglbc3RyaW5nW11dCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpLAoJCglbc3RyaW5nXQoJJE1vZHVsZU5hbWUgPSAiw75uYW1lw74iLAoJCglbc3RyaW5nXQoJJEV4Y2VwdGlvbnNGaWxlID0gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxIgopCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0KLiAkRXhjZXB0aW9uc0ZpbGUKCiRpbmNsdWRlZE5hbWVzID0gKEdldC1DaGlsZEl0ZW0gJENvbW1hbmRQYXRoIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIikuQmFzZU5hbWUKJGNvbW1hbmRUeXBlcyA9IEAoJ0NtZGxldCcsICdGdW5jdGlvbicpCmlmICgkUFNWZXJzaW9uVGFibGUuUFNFZGl0aW9uIC1lcSAnRGVza3RvcCcgKSB7ICRjb21tYW5kVHlwZXMgKz0gJ1dvcmtmbG93JyB9CiRjb21tYW5kcyA9IEdldC1Db21tYW5kIC1Nb2R1bGUgKEdldC1Nb2R1bGUgJE1vZHVsZU5hbWUpIC1Db21tYW5kVHlwZSAkY29tbWFuZFR5cGVzIHwgV2hlcmUtT2JqZWN0IE5hbWUgLUluICRpbmNsdWRlZE5hbWVzCgojIyBXaGVuIHRlc3RpbmcgaGVscCwgcmVtZW1iZXIgdGhhdCBoZWxwIGlzIGNhY2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc2Vzc2lvbi4KIyMgVG8gdGVzdCwgcmVzdGFydCBzZXNzaW9uLgoKCmZvcmVhY2ggKCRjb21tYW5kIGluICRjb21tYW5kcykgewogICAgJGNvbW1hbmROYW1lID0gJGNvbW1hbmQuTmFtZQogICAgCiAgICAjIFNraXAgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBvbiB0aGUgZXhjbHVzaW9ucyBsaXN0CiAgICBpZiAoJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucyAtY29udGFpbnMgJGNvbW1hbmROYW1lKSB7IGNvbnRpbnVlIH0KICAgIAogICAgIyBUaGUgbW9kdWxlLXF1YWxpZmllZCBjb21tYW5kIGZhaWxzIG9uIE1pY3Jvc29mdC5Qb3dlclNoZWxsLkFyY2hpdmUgY21kbGV0cwogICAgJEhlbHAgPSBHZXQtSGVscCAkY29tbWFuZE5hbWUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUKCQoJRGVzY3JpYmUgIlRlc3QgaGVscCBmb3IgJGNvbW1hbmROYW1lIiB7CiAgICAgICAgCgkJIyBJZiBoZWxwIGlzIG5vdCBmb3VuZCwgc3lub3BzaXMgaW4gYXV0by1nZW5lcmF0ZWQgaGVscCBpcyB0aGUgc3ludGF4IGRpYWdyYW0KCQlJdCAic2hvdWxkIG5vdCBiZSBhdXRvLWdlbmVyYXRlZCIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7CgkJCSRIZWxwLlN5bm9wc2lzIHwgU2hvdWxkIC1Ob3QgLUJlTGlrZSAnKmBbYDxDb21tb25QYXJhbWV0ZXJzYD5gXSonCgkJfQogICAgICAgIAoJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IGZ1bmN0aW9uCgkJSXQgImdldHMgZGVzY3JpcHRpb24gZm9yICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7CgkJCSRIZWxwLkRlc2NyaXB0aW9uIHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkKCQl9CiAgICAgICAgCgkJIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUKCQlJdCAiZ2V0cyBleGFtcGxlIGNvZGUgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gewoJCQkoJEhlbHAuRXhhbXBsZXMuRXhhbXBsZSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLkNvZGUgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCX0KCQoJCSMgU2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBleGFtcGxlIGRlc2NyaXB0aW9uCgkJSXQgImdldHMgZXhhbXBsZSBoZWxwIGZyb20gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsKCQkJKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCX0KICAgICAgICAKICAgICAgICBDb250ZXh0ICJUZXN0IHBhcmFtZXRlciBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsKICAgICAgICAgICAgCiAgICAgICAgICAgICRjb21tb24gPSAnRGVidWcnLCAnRXJyb3JBY3Rpb24nLCAnRXJyb3JWYXJpYWJsZScsICdJbmZvcm1hdGlvbkFjdGlvbicsICdJbmZvcm1hdGlvblZhcmlhYmxlJywgJ091dEJ1ZmZlcicsICdPdXRWYXJpYWJsZScsICdQaXBlbGluZVZhcmlhYmxlJywgJ1ZlcmJvc2UnLCAnV2FybmluZ0FjdGlvbicsICdXYXJuaW5nVmFyaWFibGUnCiAgICAgICAgICAgIAogICAgICAgICAgICAkcGFyYW1ldGVycyA9ICRjb21tYW5kLlBhcmFtZXRlclNldHMuUGFyYW1ldGVycyB8IFNvcnQtT2JqZWN0IC1Qcm9wZXJ0eSBOYW1lIC1VbmlxdWUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbm90aW4gJGNvbW1vbgogICAgICAgICAgICAkcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVycy5OYW1lCiAgICAgICAgICAgICRIZWxwUGFyYW1ldGVyTmFtZXMgPSAkSGVscC5QYXJhbWV0ZXJzLlBhcmFtZXRlci5OYW1lIHwgU29ydC1PYmplY3QgLVVuaXF1ZQogICAgICAgICAgICBmb3JlYWNoICgkcGFyYW1ldGVyIGluICRwYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyTmFtZSA9ICRwYXJhbWV0ZXIuTmFtZQogICAgICAgICAgICAgICAgJHBhcmFtZXRlckhlbHAgPSAkSGVscC5wYXJhbWV0ZXJzLnBhcmFtZXRlciB8IFdoZXJlLU9iamVjdCBOYW1lIC1FUSAkcGFyYW1ldGVyTmFtZQoJCQkKCQkJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IHBhcmFtZXRlcgoJCQkJSXQgImdldHMgaGVscCBmb3IgcGFyYW1ldGVyOiAkcGFyYW1ldGVyTmFtZSA6IGluICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHAgfSB7CgkJCQkJJHBhcmFtZXRlckhlbHAuRGVzY3JpcHRpb24uVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJCQl9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRjb2RlTWFuZGF0b3J5ID0gJHBhcmFtZXRlci5Jc01hbmRhdG9yeS50b1N0cmluZygpCgkJCQlJdCAiaGVscCBmb3IgJHBhcmFtZXRlck5hbWUgcGFyYW1ldGVyIGluICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBNYW5kYXRvcnkgdmFsdWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwOyBjb2RlTWFuZGF0b3J5ID0gJGNvZGVNYW5kYXRvcnkgfSB7CgkJCQkJJHBhcmFtZXRlckhlbHAuUmVxdWlyZWQgfCBTaG91bGQgLUJlICRjb2RlTWFuZGF0b3J5CgkJCQl9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICgkSGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZVskY29tbWFuZE5hbWVdIC1jb250YWlucyAkcGFyYW1ldGVyTmFtZSkgeyBjb250aW51ZSB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRjb2RlVHlwZSA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5OYW1lCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuSXNFbnVtKSB7CiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlKQoJCQkJCQkjIFBhcmFtZXRlciB0eXBlIGluIEhlbHAgc2hvdWxkIG1hdGNoIGNvZGUKCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gewoJCQkJCQkkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMKCQkJCQl9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5GdWxsTmFtZSAtaW4gJEhlbHBUZXN0RW51bWVyYXRlZEFycmF5cykgewogICAgICAgICAgICAgICAgICAgICMgRW51bWVyYXRpb25zIG9mdGVuIGhhdmUgaXNzdWVzIHdpdGggdGhlIHR5cGVuYW1lIG5vdCBiZWluZyByZWxpYWJseSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSBbRW51bV06OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5EZWNsYXJlZE1lbWJlcnNbMF0uUmV0dXJuVHlwZSkKCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gewoJCQkJCQkkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMKCQkJCQl9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIFRvIGF2b2lkIGNhbGxpbmcgVHJpbSBtZXRob2Qgb24gYSBudWxsIG9iamVjdC4KICAgICAgICAgICAgICAgICAgICAkaGVscFR5cGUgPSBpZiAoJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUpIHsgJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUuVHJpbSgpIH0KCQkJCQkjIFBhcmFtZXRlciB0eXBlIGluIEhlbHAgc2hvdWxkIG1hdGNoIGNvZGUKCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBoZWxwVHlwZSA9ICRoZWxwVHlwZTsgY29kZVR5cGUgPSAkY29kZVR5cGUgfSB7CgkJCQkJCSRoZWxwVHlwZSB8IFNob3VsZCAtYmUgJGNvZGVUeXBlCgkJCQkJfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcmVhY2ggKCRoZWxwUGFybSBpbiAkSGVscFBhcmFtZXRlck5hbWVzKSB7CgkJCQkjIFNob3VsZG4ndCBmaW5kIGV4dHJhIHBhcmFtZXRlcnMgaW4gaGVscC4KCQkJCUl0ICJmaW5kcyBoZWxwIHBhcmFtZXRlciBpbiBjb2RlOiAkaGVscFBhcm0iIC1UZXN0Q2FzZXMgQHsgaGVscFBhcm0gPSAkaGVscFBhcm07IHBhcmFtZXRlck5hbWVzID0gJHBhcmFtZXRlck5hbWVzIH0gewoJCQkJCSRoZWxwUGFybSAtaW4gJHBhcmFtZXRlck5hbWVzIHwgU2hvdWxkIC1CZSAkdHJ1ZQoJCQkJfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9AQnxAwAACfIDAAAG8wMAAA5IZWxwLlRlc3RzLnBzMQb0AwAAUS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMvZ2VuZXJhbC9IZWxwLlRlc3RzLnBzMQlbAAAACfYDAAAJ9wMAAAG0AgAAbwAAAAb4AwAAjhVEZXNjcmliZSAiVmFsaWRhdGluZyB0aGUgbW9kdWxlIG1hbmlmZXN0IiB7CgkkbW9kdWxlUm9vdCA9IChSZXNvbHZlLVBhdGggIiRnbG9iYWw6dGVzdHJvb3RcLi4iKS5QYXRoCgkkbWFuaWZlc3QgPSAoKEdldC1Db250ZW50ICIkbW9kdWxlUm9vdFzDvm5hbWXDvi5wc2QxIikgLWpvaW4gImBuIikgfCBJbnZva2UtRXhwcmVzc2lvbgoJQ29udGV4dCAiQmFzaWMgcmVzb3VyY2VzIHZhbGlkYXRpb24iIHsKCQkkZmlsZXMgPSBHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIgoJCUl0ICJFeHBvcnRzIGFsbCBmdW5jdGlvbnMgaW4gdGhlIHB1YmxpYyBmb2xkZXIiIC1UZXN0Q2FzZXMgQHsgZmlsZXMgPSAkZmlsZXM7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gewoJCQkKCQkJJGZ1bmN0aW9ucyA9IChDb21wYXJlLU9iamVjdCAtUmVmZXJlbmNlT2JqZWN0ICRmaWxlcy5CYXNlTmFtZSAtRGlmZmVyZW5jZU9iamVjdCAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBXaGVyZS1PYmplY3QgU2lkZUluZGljYXRvciAtTGlrZSAnPD0nKS5JbnB1dE9iamVjdAoJCQkkZnVuY3Rpb25zIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJfQoJCUl0ICJFeHBvcnRzIG5vIGZ1bmN0aW9uIHRoYXQgaXNuJ3QgYWxzbyBwcmVzZW50IGluIHRoZSBwdWJsaWMgZm9sZGVyIiAtVGVzdENhc2VzIEB7IGZpbGVzID0gJGZpbGVzOyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsKCQkJJGZ1bmN0aW9ucyA9IChDb21wYXJlLU9iamVjdCAtUmVmZXJlbmNlT2JqZWN0ICRmaWxlcy5CYXNlTmFtZSAtRGlmZmVyZW5jZU9iamVjdCAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBXaGVyZS1PYmplY3QgU2lkZUluZGljYXRvciAtTGlrZSAnPT4nKS5JbnB1dE9iamVjdAoJCQkkZnVuY3Rpb25zIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJfQoJCQoJCUl0ICJFeHBvcnRzIG5vbmUgb2YgaXRzIGludGVybmFsIGZ1bmN0aW9ucyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gewoJCQkkZmlsZXMgPSBHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIioucHMxIgoJCQkkZmlsZXMgfCBXaGVyZS1PYmplY3QgQmFzZU5hbWUgLUluICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCX0KCX0KCQoJQ29udGV4dCAiSW5kaXZpZHVhbCBmaWxlIHZhbGlkYXRpb24iIHsKCQlJdCAiVGhlIHJvb3QgbW9kdWxlIGZpbGUgZXhpc3RzIiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7CgkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJCgkbWFuaWZlc3QuUm9vdE1vZHVsZSkiIHwgU2hvdWxkIC1CZSAkdHJ1ZQoJCX0KCQkKCQlmb3JlYWNoICgkZm9ybWF0IGluICRtYW5pZmVzdC5Gb3JtYXRzVG9Qcm9jZXNzKQoJCXsKCQkJSXQgIlRoZSBmaWxlICRmb3JtYXQgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgZm9ybWF0ID0gJGZvcm1hdCB9IHsKCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGZvcm1hdCIgfCBTaG91bGQgLUJlICR0cnVlCgkJCX0KCQl9CgkJCgkJZm9yZWFjaCAoJHR5cGUgaW4gJG1hbmlmZXN0LlR5cGVzVG9Qcm9jZXNzKQoJCXsKCQkJSXQgIlRoZSBmaWxlICR0eXBlIHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IHR5cGUgPSAkdHlwZSB9IHsKCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJHR5cGUiIHwgU2hvdWxkIC1CZSAkdHJ1ZQoJCQl9CgkJfQoJCQoJCWZvcmVhY2ggKCRhc3NlbWJseSBpbiAkbWFuaWZlc3QuUmVxdWlyZWRBc3NlbWJsaWVzKQoJCXsKICAgICAgICAgICAgaWYgKCRhc3NlbWJseSAtbGlrZSAiKi5kbGwiKSB7CiAgICAgICAgICAgICAgICBJdCAiVGhlIGZpbGUgJGFzc2VtYmx5IHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IGFzc2VtYmx5ID0gJGFzc2VtYmx5IH0gewogICAgICAgICAgICAgICAgICAgIFRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGFzc2VtYmx5IiB8IFNob3VsZCAtQmUgJHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIEl0ICJUaGUgZmlsZSAkYXNzZW1ibHkgc2hvdWxkIGxvYWQgZnJvbSB0aGUgR0FDIiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgYXNzZW1ibHkgPSAkYXNzZW1ibHkgfSB7CiAgICAgICAgICAgICAgICAgICAgeyBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lICRhc3NlbWJseSB9IHwgU2hvdWxkIC1Ob3QgLVRocm93CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgkJCgkJZm9yZWFjaCAoJHRhZyBpbiAkbWFuaWZlc3QuUHJpdmF0ZURhdGEuUFNEYXRhLlRhZ3MpCgkJewoJCQlJdCAiVGFncyBzaG91bGQgaGF2ZSBubyBzcGFjZXMgaW4gbmFtZSIgLVRlc3RDYXNlcyBAeyB0YWcgPSAkdGFnIH0gewoJCQkJJHRhZyAtbWF0Y2ggIiAiIHwgU2hvdWxkIC1CZSAkZmFsc2UKCQkJfQoJCX0KCX0KfQEJ+QMAAAn6AwAABvsDAAASTWFuaWZlc3QuVGVzdHMucHMxBvwDAABVL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsL01hbmlmZXN0LlRlc3RzLnBzMQlbAAAACf4DAAAJ/wMAAAG1AgAAbwAAAAYABAAA7QhbQ21kbGV0QmluZGluZygpXQpQYXJhbSAoCglbc3dpdGNoXQoJJFNraXBUZXN0LAoJCglbc3RyaW5nW11dCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpCikKCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0KCiRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplciA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdAoKRGVzY3JpYmUgJ0ludm9raW5nIFBTU2NyaXB0QW5hbHl6ZXIgYWdhaW5zdCBjb21tYW5kYmFzZScgewoJJGNvbW1hbmRGaWxlcyA9IGZvcmVhY2ggKCRwYXRoIGluICRDb21tYW5kUGF0aCkgewogICAgICAgIEdldC1DaGlsZEl0ZW0gLVBhdGggJHBhdGggLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiCiAgICB9Cgkkc2NyaXB0QW5hbHl6ZXJSdWxlcyA9IEdldC1TY3JpcHRBbmFseXplclJ1bGUKCQoJZm9yZWFjaCAoJGZpbGUgaW4gJGNvbW1hbmRGaWxlcykKCXsKCQlDb250ZXh0ICJBbmFseXppbmcgJCgkZmlsZS5CYXNlTmFtZSkiIHsKCQkJJGFuYWx5c2lzID0gSW52b2tlLVNjcmlwdEFuYWx5emVyIC1QYXRoICRmaWxlLkZ1bGxOYW1lIC1FeGNsdWRlUnVsZSBQU0F2b2lkVHJhaWxpbmdXaGl0ZXNwYWNlLCBQU1Nob3VsZFByb2Nlc3MKCQkJCgkJCWZvckVhY2ggKCRydWxlIGluICRzY3JpcHRBbmFseXplclJ1bGVzKQoJCQl7CgkJCQlJdCAiU2hvdWxkIHBhc3MgJHJ1bGUiIC1UZXN0Q2FzZXMgQHsgYW5hbHlzaXMgPSAkYW5hbHlzaXM7IHJ1bGUgPSAkcnVsZSB9IHsKCQkJCQlJZiAoJGFuYWx5c2lzLlJ1bGVOYW1lIC1jb250YWlucyAkcnVsZSkKCQkJCQl7CgkJCQkJCSRhbmFseXNpcyB8IFdoZXJlLU9iamVjdCBSdWxlTmFtZSAtRVEgJHJ1bGUgLW91dHZhcmlhYmxlIGZhaWx1cmVzIHwgRm9yRWFjaC1PYmplY3QgeyAkbnVsbCA9ICRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplci5BZGQoJF8pIH0KCQkJCQkJCgkJCQkJCTEgfCBTaG91bGQgLUJlIDAKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJMCB8IFNob3VsZCAtQmUgMAoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KfQEJAQQAAAkCBAAABgMEAAAaUFNTY3JpcHRBbmFseXplci5UZXN0cy5wczEGBAQAAF0vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL2dlbmVyYWwvUFNTY3JpcHRBbmFseXplci5UZXN0cy5wczEJWwAAAAkGBAAACQcEAAABtgIAAG8AAAAGCAQAAMMHJGV4Y2VwdGlvbnMgPSBAeyB9Cgo8IwpBIGxpc3Qgb2YgZW50cmllcyB0aGF0IE1BWSBiZSBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMsIHdpdGhvdXQgY2F1c2luZyB0aGUgdGVzdHMgdG8gZmFpbC4KVGhpcyBpcyBjb21tb25seSB1c2VkIGluIG1vZHVsZXMgdGhhdCBnZW5lcmF0ZSBsb2NhbGl6ZWQgbWVzc2FnZXMgc3RyYWlnaHQgZnJvbSBDIy4KU3BlY2lmeSB0aGUgZnVsbCBrZXkgYXMgaXQgaXMgd3JpdHRlbiBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMsIGRvIG5vdCBwcmVwZW5kIHRoZSBtb2R1bGVuYW1lLAphcyB5b3Ugd291bGQgaGF2ZSB0byBpbiBDIyBjb2RlLgoKRXhhbXBsZToKJGV4Y2VwdGlvbnNbJ0xlZ2FsU3VycGx1cyddID0gQCgKICAgICdFeGNlcHRpb24uU3RyZWFtcy5GYWlsZWRDcmVhdGUnCiAgICAnRXhjZXB0aW9uLlN0cmVhbXMuRmFpbGVkRGlzcG9zZScKKQojPgokZXhjZXB0aW9uc1snTGVnYWxTdXJwbHVzJ10gPSBAKAoKKQo8IwpBIGxpc3Qgb2YgZW50cmllcyB0aGF0IE1BWSBiZSB1c2VkIHdpdGhvdXQgbmVlZGluZyB0byBoYXZlIHRleHQgZGVmaW5lZC4KVGhpcyBpcyBpbnRlbmRlZCBmb3IgbW9kdWxlcyAocmUtKXVzaW5nIHN0cmluZ3MgcHJvdmlkZWQgYnkgYW5vdGhlciBtb2R1bGUKIz4KJGV4Y2VwdGlvbnNbJ05vVGV4dE5lZWRlZCddID0gQCgKCSdWYWxpZGF0ZS5GU1BhdGgnCgknVmFsaWRhdGUuRlNQYXRoLkZpbGUnCgknVmFsaWRhdGUuRlNQYXRoLkZpbGVPclBhcmVudCcKCSdWYWxpZGF0ZS5GU1BhdGguRm9sZGVyJwoJJ1ZhbGlkYXRlLlBhdGgnCgknVmFsaWRhdGUuUGF0aC5Db250YWluZXInCgknVmFsaWRhdGUuUGF0aC5MZWFmJwoJJ1ZhbGlkYXRlLlRpbWVTcGFuLlBvc2l0aXZlJwoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZScKCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUuRmlsZScKCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUuSHR0cHMnCikKCiRleGNlcHRpb25zAQkJBAAACQoEAAAGCwQAABZzdHJpbmdzLkV4Y2VwdGlvbnMucHMxBgwEAABZL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsL3N0cmluZ3MuRXhjZXB0aW9ucy5wczEJWwAAAAkOBAAACQ8EAAABtwIAAG8AAAAGEAQAAP0HPCMKLkRFU0NSSVBUSU9OCiAgICBUaGlzIHRlc3QgdmVyaWZpZXMsIHRoYXQgYWxsIHN0cmluZ3MgdGhhdCBoYXZlIGJlZW4gdXNlZCwKICAgIGFyZSBsaXN0ZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGVzIGFuZCB0aHVzIGhhdmUgYSBtZXNzYWdlIGJlaW5nIGRpc3BsYXllZC4KCiAgICBJdCBhbHNvIGNoZWNrcywgd2hldGhlciB0aGUgbGFuZ3VhZ2UgZmlsZXMgaGF2ZSBvcnBoYW5lZCBlbnRyaWVzIHRoYXQgbmVlZCBjbGVhbmluZyB1cC4KIz4KCgoKRGVzY3JpYmUgIlRlc3RpbmcgbG9jYWxpemF0aW9uIHN0cmluZ3MiIHsKCSRtb2R1bGVSb290ID0gKEdldC1Nb2R1bGUgw75uYW1lw74pLk1vZHVsZUJhc2UKCSRzdHJpbmdzUmVzdWx0cyA9IEV4cG9ydC1QU01EU3RyaW5nIC1Nb2R1bGVSb290ICRtb2R1bGVSb290CgkkZXhjZXB0aW9ucyA9ICYgIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxzdHJpbmdzLkV4Y2VwdGlvbnMucHMxIgoJCglmb3JlYWNoICgkc3RyaW5nRW50cnkgaW4gJHN0cmluZ3NSZXN1bHRzKSB7CiAgICAgICAgaWYgKCRzdHJpbmdFbnRyeS5TdHJpbmcgLWVxICJrZXkiKSB7IGNvbnRpbnVlIH0gIyBTa2lwcGluZyB0aGUgdGVtcGxhdGUgZGVmYXVsdCBlbnRyeQoJCUl0ICJTaG91bGQgYmUgdXNlZCAmIGhhdmUgdGV4dDogJCgkc3RyaW5nRW50cnkuU3RyaW5nKSIgLVRlc3RDYXNlcyBAeyBzdHJpbmdFbnRyeSA9ICRzdHJpbmdFbnRyeTsg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bmUgb2YgdGhlbSwKaG93ZXZlciBpZiB5b3UgaGF2ZSBlbm91Z2ggY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBqdXN0aWZ5IGhhdmluZyBtdWx0aXBsZSBjb3BpZXMgb2YgaXQsCmZlZWwgdG90YWxseSBmcmVlIHRvIHNwbGl0IHRoZW0gaW50byBtdWx0aXBsZSBmaWxlcy4KIz4KCjwjCiMgRXhhbXBsZSBDb25maWd1cmF0aW9uClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdFeGFtcGxlLlNldHRpbmcnIC1WYWx1ZSAxMCAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnaW50ZWdlcicgLUhhbmRsZXIgeyB9IC1EZXNjcmlwdGlvbiAiRXhhbXBsZSBjb25maWd1cmF0aW9uIHNldHRpbmcuIFlvdXIgbW9kdWxlIGNhbiB0aGVuIHVzZSB0aGUgc2V0dGluZyB1c2luZyAnR2V0LVBTRkNvbmZpZ1ZhbHVlJyIKIz4KClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdJbXBvcnQuRG9Eb3RTb3VyY2UnIC1WYWx1ZSAkZmFsc2UgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2Jvb2wnIC1EZXNjcmlwdGlvbiAiV2hldGhlciB0aGUgbW9kdWxlIGZpbGVzIHNob3VsZCBiZSBkb3Rzb3VyY2VkIG9uIGltcG9ydC4gQnkgZGVmYXVsdCwgdGhlIGZpbGVzIG9mIHRoaXMgbW9kdWxlIGFyZSByZWFkIGFzIHN0cmluZyB2YWx1ZSBhbmQgaW52b2tlZCwgd2hpY2ggaXMgZmFzdGVyIGJ1dCB3b3JzZSBvbiBkZWJ1Z2dpbmcuIgpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnSW1wb3J0LkluZGl2aWR1YWxGaWxlcycgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGltcG9ydGVkIGluZGl2aWR1YWxseS4gRHVyaW5nIHRoZSBtb2R1bGUgYnVpbGQsIGFsbCBtb2R1bGUgY29kZSBpcyBjb21waWxlZCBpbnRvIGZldyBmaWxlcywgd2hpY2ggYXJlIGltcG9ydGVkIGluc3RlYWQgYnkgZGVmYXVsdC4gTG9hZGluZyB0aGUgY29tcGlsZWQgdmVyc2lvbnMgaXMgZmFzdGVyLCB1c2luZyB0aGUgaW5kaXZpZHVhbCBmaWxlcyBpcyBlYXNpZXIgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvdXQgYWRqdXN0bWVudHMuIgoKU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLmVuYWJsZWQnIC1WYWx1ZSAkdHJ1ZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJJZiBzZXQgdG8gYCR0cnVlLCBNZXNzYWdlcyBmcm9tIHRoZSBtb2R1bGUgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1haW4gY29uc29sZSIKIyBTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnQ29uc29sZUxvZ2dpbmcuc3R5bGUnIC1WYWx1ZSAnQ09OOiAlTWVzc2FnZSUnIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIldoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZT8iCiMgU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLnN0eWxlJyAtVmFsdWUgJyVUYWdzJXwlTGV2ZWwlfCVNb2R1bGUlfCVGdW5jdGlvbk5hbWUlOiAlTWVzc2FnZSUnIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIldoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZT8iClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdDb25zb2xlTG9nZ2luZy5zdHlsZScgLVZhbHVlICdbJUxldmVsJV0gJU1lc3NhZ2UlJyAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBzdHJpbmcgLURlc2NyaXB0aW9uICJXaGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnNvbGU/IgojIFBvc3NpYmxlIGxldmVsczogQ3JpdGljYWwgKDEpLCBJbXBvcnRhbnQgLyBPdXRwdXQgLyBIb3N0ICgyKSwgU2lnbmlmaWNhbnQgKDMpLCBWZXJ5VmVyYm9zZSAoNCksIFZlcmJvc2UgKDUpLCBTb21ld2hhdFZlcmJvc2UgKDYpLCBTeXN0ZW0gKDcpLCBEZWJ1ZyAoOCksIEludGVybmFsQ29tbWVudCAoOSksIFdhcm5pbmcKIyAgICAgICAgICg2NjYpIEVpdGhlciBvbmUgb2YgdGhlIHN0cmluZ3Mgb3IgaXRzIHJlc3BlY3RpdmUgbnVtYmVyIHdpbGwgZG8gYXMgaW5wdXQuClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdDb25zb2xlTG9nZ2luZy5NaW5MZXZlbCcgLVZhbHVlIDEgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gaW50ZWdlciAtRGVzY3JpcHRpb24gIkZyb20gd2hpY2ggbGV2ZWwgc3RhcnRpbmcgb24gc2hvdWxkIG1lc3NhZ2VzIGJlIHNlbnQgdG8gdGhlIHByb3ZpZGVyPyIKU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLk1heExldmVsJyAtVmFsdWUgMSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBpbnRlZ2VyIC1EZXNjcmlwdGlvbiAiVXAgdG8gd2hpY2ggbGV2ZWwgc2hvdWxkIG1lc3NhZ2VzIGJlIHNlbnQgdG8gdGhlIHByb3ZpZGVyPyIKAQl5BAAACXoEAAAGewQAABFjb25maWd1cmF0aW9uLnBzMQZ8BAAAggEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb24ucHMxCVsAAAAJfgQAAAl/BAAAAVsEAABvAAAABoAEAADxAyMgQ29uZmlndXJhdGlvbnMKClRocm91Z2ggdGhlIGBQU0ZyYW1ld29ya2AgeW91IGhhdmUgYSBzaW1wbGUgbWV0aG9kIHRoYXQgYWxsb3dzIHlvdSB0byAuLi4KCiAtIFB1Ymxpc2ggc2V0dGluZ3MKIC0gV2l0aCBvbmJvYXJkIGRvY3VtZW50YXRpb24KIC0gSW5wdXQgdmFsaWRhdGlvbgogLSBTY3JpcHRzIHRoYXQgcnVuIG9uIGNoYW5nZSBvZiBzZXR0aW5ncwogLSBUaGF0IGNhbiBiZSBkaXNjb3ZlcmVkIGFuZCB1cGRhdGVkIGJ5IHRoZSB1c2VyCiAtIFRoYXQgY2FuIGJlIGFkbWluaXN0cmF0ZWQgYnkgcG9saWN5ICYgRFNDCgpUaGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgYSBiaXQgdG9vIGNvbXBsZXggdG8gZGVzY3JpYmUgaW4gYSBoZWxwIGZpbGUsIHlvdSBjYW4gaG93ZXZlciB2aXNpdCB1cyBhdCBodHRwOi8vcHNmcmFtZXdvcmsub3JnIGZvciBkZXRhaWxlZCBndWlkYW5jZS4KCkFuIGV4YW1wbGUgY2FuIGJlIHNlZW4gaW4gdGhlIGF0dGFjaGVkIHBzMSBmaWxlAQmBBAAACYIEAAAGgwQAAAlyZWFkbWUubWQGhAQAAHovU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL2NvbmZpZ3VyYXRpb25zL3JlYWRtZS5tZAlbAAAACYYEAAAJhwQAAAFcBAAAbwAAAAaIBAAA1QEjIEZ1bmN0aW9ucwoKVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgZ28uCgpEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG1vZHVsZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViZGl2aWRlIHRoZW0gaW50byBzdWJmb2xkZXJzLgoKVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCYkEAAAJigQAAAaLBAAACXJlYWRtZS5tZAaMBAAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvZnVuY3Rpb25zL3JlYWRtZS5tZAlbAAAACY4EAAAJjwQAAAFdBAAAbwAAAAaQBAAA+QI8IwpTdG9yZWQgc2NyaXB0YmxvY2tzIGFyZSBhdmFpbGFibGUgaW4gW1BzZlZhbGlkYXRlU2NyaXB0KCldIGF0dHJpYnV0ZXMuClRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNlbnRyYWxseSBwcm92aWRlIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLAp3aXRob3V0IGhhdmluZyB0byBtYWludGFpbiBpdCBpbiBzZXBhcmF0ZSBsb2NhdGlvbnMuCgpJdCBhbHNvIHByZXZlbnRzIGxlbmd0aHkgdmFsaWRhdGlvbiBzY3JpcHRibG9ja3MgZnJvbSBtYWtpbmcgeW91ciBwYXJhbWV0ZXIgYmxvY2sKaGFyZCB0byByZWFkLgoKU2V0LVBTRlNjcmlwdGJsb2NrIC1OYW1lICfDvm5hbWXDvi5TY3JpcHRCbG9ja05hbWUnIC1TY3JpcHRibG9jayB7CgkKfQojPgEJkQQAAAmSBAAABpMEAAAQc2NyaXB0YmxvY2tzLnBzMQaUBAAAfy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvc2NyaXB0YmxvY2tzL3NjcmlwdGJsb2Nrcy5wczEJWwAAAAmWBAAACZcEAAABXgQAAG8AAAAGmAQAAOcGV3JpdGUtUFNGTWVzc2FnZSAiQ29uZmlndXJlIENvbnNvbGUgTG9nZ2luZyIKaWYgKEdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLkNvbnNvbGVMb2dnaW5nLmVuYWJsZWQnIC1GYWxsYmFjayAkZmFsc2UpIHsKICAgICRwcm92aWRlclBhcmFtPUB7CiAgICAgICAgTmFtZT0iY29uc29sZSIKICAgICAgICBFbmFibGVkPSR0cnVlCiAgICAgICAgc3R5bGU9R2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24uQ29uc29sZUxvZ2dpbmcuc3R5bGUnCiAgICAgICAgTWluTGV2ZWw9R2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24uQ29uc29sZUxvZ2dpbmcuTWluTGV2ZWwnCiAgICAgICAgTWF4TGV2ZWw9R2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24uQ29uc29sZUxvZ2dpbmcuTWF4TGV2ZWwnCiAgICAgICAgSW5zdGFuY2VOYW1lID0gJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uY29uc29sZScKICAgIH0KICAgIFdyaXRlLVBTRk1lc3NhZ2UgIkNvbmZpZ3VyZSBDb25zb2xlIExvZ2dpbmcgd2l0aCBQYXJhbT0kKCRwcm92aWRlclBhcmFtfENvbnZlcnRUby1Kc29uIC1Db21wcmVzcykiCiAgICBTZXQtUFNGTG9nZ2luZ1Byb3ZpZGVyIEBwcm92aWRlclBhcmFtIC1JbmNsdWRlTW9kdWxlcyAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nCgp9ZWxzZXsKICAgIFdyaXRlLVBTRk1lc3NhZ2UgIk5PVCBDb25maWd1cmUgQ29uc29sZSBMb2dnaW5nIgp9CgEJmQQAAAmaBAAABpsEAAATY29uc29sZV9sb2dnaW5nLnBzMQacBAAAfS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvc2NyaXB0cy9jb25zb2xlX2xvZ2dpbmcucHMxCVsAAAAJngQAAAmfBAAAAV8EAABvAAAABqAEAADiCU5ldy1QU0ZMaWNlbnNlIC1Qcm9kdWN0ICfDvm5hbWXDvicgLU1hbnVmYWN0dXJlciAnw75hdXRob3LDvicgLVByb2R1Y3RWZXJzaW9uICRzY3JpcHQ6TW9kdWxlVmVyc2lvbiAtUHJvZHVjdFR5cGUgTW9kdWxlIC1OYW1lIE1JVCAtVmVyc2lvbiAiMS4wLjAuMCIgLURhdGUgKEdldC1EYXRlICLDviFkYXRlIcO+IikgLVRleHQgQCIKQ29weXJpZ2h0IChjKSDDviF5ZWFyIcO+IMO+YXV0aG9yw74KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCiJAAQmhBAAACaIEAAAGowQAAAtsaWNlbnNlLnBzMQakBAAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvc2NyaXB0cy9saWNlbnNlLnBzMQlbAAAACaYEAAAJpwQAAAFgBAAAbwAAAAaoBAAAngY8IwpBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYWZ0ZXIgaW1wb3J0aW5nIHRoZSBtYWluIGZ1bmN0aW9uIGNvZGUKCldBUk5JTkc6IE9OTFkgcHJvdmlkZSBwYXRocyB0byBmaWxlcyEKCkFmdGVyIGJ1aWxkaW5nIHRoZSBtb2R1bGUsIHRoaXMgZmlsZSB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZCwgYWRkaW5nIGFueXRoaW5nIGJ1dCBwYXRocyB0byBmaWxlcyAuLi4KLSBXaWxsIG5vdCB3b3JrIGFmdGVyIHB1Ymxpc2hpbmcKLSBDb3VsZCBicmVhayB0aGUgYnVpbGQgcHJvY2VzcwojPgoKJG1vZHVsZVJvb3QgPSBTcGxpdC1QYXRoIChTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QpCgojIExvYWQgQ29uZmlndXJhdGlvbnMKKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGNvbmZpZ3VyYXRpb25zXCoucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKS5GdWxsTmFtZQoKIyBMb2FkIFNjcmlwdGJsb2NrcwooR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0YmxvY2tzXCoucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKS5GdWxsTmFtZQoKIyBMb2FkIFRhYiBFeHBhbnNpb24KKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXHRlcHBcKi50ZXBwLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUKCiMgTG9hZCBUYWIgRXhwYW5zaW9uIEFzc2lnbm1lbnQKIiRtb2R1bGVSb290XGludGVybmFsXHRlcHBcYXNzaWdubWVudC5wczEiCgojIExvYWQgTGljZW5zZQoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xsaWNlbnNlLnBzMSIBCakEAAAJqgQAAAarBAAADnBvc3RpbXBvcnQucHMxBqwEAAB4L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9zY3JpcHRzL3Bvc3RpbXBvcnQucHMxCVsAAAAJrgQAAAmvBAAAAWEEAABvAAAABrAEAACjAzwjCkFkZCBhbGwgdGhpbmdzIHlvdSB3YW50IHRvIHJ1biBiZWZvcmUgaW1wb3J0aW5nIHRoZSBtYWluIGZ1bmN0aW9uIGNvZGUuCgpXQVJOSU5HOiBPTkxZIHByb3ZpZGUgcGF0aHMgdG8gZmlsZXMhCgpBZnRlciBidWlsZGluZyB0aGUgbW9kdWxlLCB0aGlzIGZpbGUgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQsIGFkZGluZyBhbnl0aGluZyBidXQgcGF0aHMgdG8gZmlsZXMgLi4uCi0gV2lsbCBub3Qgd29yayBhZnRlciBwdWJsaXNoaW5nCi0gQ291bGQgYnJlYWsgdGhlIGJ1aWxkIHByb2Nlc3MKIz4KCiRtb2R1bGVSb290ID0gU3BsaXQtUGF0aCAoU3BsaXQtUGF0aCAkUFNTY3JpcHRSb290KQoKIyBMb2FkIHRoZSBzdHJpbmdzIHVzZWQgaW4gbWVzc2FnZXMKIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNcc3RyaW5ncy5wczEiAQmxBAAACbIEAAAGswQAAA1wcmVpbXBvcnQucHMxBrQEAAB3L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9zY3JpcHRzL3ByZWltcG9ydC5wczEJWwAAAAm2BAAACbcEAAABYgQAAG8AAAAGuAQAAMwDPCMKVGhpcyBmaWxlIGxvYWRzIHRoZSBzdHJpbmdzIGRvY3VtZW50cyBmcm9tIHRoZSByZXNwZWN0aXZlIGxhbmd1YWdlIGZvbGRlcnMuClRoaXMgYWxsb3dzIGxvY2FsaXppbmcgbWVzc2FnZXMgYW5kIGVycm9ycy4KTG9hZCBwc2QxIGxhbmd1YWdlIGZpbGVzIGZvciBlYWNoIGxhbmd1YWdlIHlvdSB3aXNoIHRvIHN1cHBvcnQuClBhcnRpYWwgdHJhbnNsYXRpb25zIGFyZSBhY2NlcHRhYmxlIC0gd2hlbiBtaXNzaW5nIGEgY3VycmVudCBsYW5ndWFnZSBtZXNzYWdlLAppdCB3aWxsIGZhbGxiYWNrIHRvIEVuZ2xpc2ggb3IgYW5vdGhlciBhdmFpbGFibGUgbGFuZ3VhZ2UuCiM+CkltcG9ydC1QU0ZMb2NhbGl6ZWRTdHJpbmcgLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVxlbi11c1wqLnBzZDEiIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTGFuZ3VhZ2UgJ2VuLVVTJwEJuQQAAAm6BAAABrsEAAALc3RyaW5ncy5wczEGvAQAAHUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3NjcmlwdHMvc3RyaW5ncy5wczEJWwAAAAm+BAAACb8EAAABYwQAAG8AAAAGwAQAAG48IwojIEV4YW1wbGU6ClJlZ2lzdGVyLVBTRlRlcHBBcmd1bWVudENvbXBsZXRlciAtQ29tbWFuZCBHZXQtQWxjb2hvbCAtUGFyYW1ldGVyIFR5cGUgLU5hbWUgw75uYW1lw74uYWxjb2hvbAojPgEJwQQAAAnCBAAABsMEAAAOYXNzaWdubWVudC5wczEGxAQAAHUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3RlcHAvYXNzaWdubWVudC5wczEJWwAAAAnGBAAACccEAAABZAQAAG8AAAAGyAQAAKABPCMKIyBFeGFtcGxlOgpSZWdpc3Rlci1QU0ZUZXBwU2NyaXB0YmxvY2sgLU5hbWUgIsO+bmFtZcO+LmFsY29ob2wiIC1TY3JpcHRCbG9jayB7ICdCZWVyJywnTWVhZCcsJ1doaXNrZXknLCdXaW5lJywnVm9ka2EnLCdSdW0gKDN5KScsICdSdW0gKDV5KScsICdSdW0gKDd5KScgfQojPgEJyQQAAAnKBAAABssEAAAQZXhhbXBsZS50ZXBwLnBzMQbMBAAAdy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvdGVwcC9leGFtcGxlLnRlcHAucHMxCVsAAAAJzgQAAAnPBAAAAWUEAABvAAAABtAEAACoByMgVGFiIEV4cGFuc2lvbgoKIyMgRGVzY3JpcHRpb24KCk1vZGVybiBUYWIgRXhwYW5zaW9uIHdhcyBvcGVuZWQgdG8gdXNlcnMgd2l0aCB0aGUgbW9kdWxlIGBUYWIgRXhwYW5zaW9uIFBsdXMgUGx1c2AgKFRFUFApLgoKSXQgYWxsb3dzIHlvdSB0byBkZWZpbmUsIHdoYXQgb3B0aW9ucyBhIHVzZXIgaXMgb2ZmZXJlZCB3aGVuIHRhYmJpbmcgdGhyb3VnaCBpbnB1dCBvcHRpb25zLiBUaGlzIGNhbiBzYXZlIGEgbG90IG9mIHRpbWUgZm9yIHRoZSB1c2VyIGFuZCBpcyBjb25zaWRlcmVkIGEga2V5IGVsZW1lbnQgaW4gdXNlciBleHBlcmllbmNlLgoKVGhlIGBQU0ZyYW1ld29ya2Agb2ZmZXJzIGEgc2ltcGxpZmllZCB3YXkgb2Ygb2ZmZXJpbmcganVzdCB0aGlzLCBhcyB0aGUgdHdvIGV4YW1wbGUgZmlsZXMgc2hvdy4KCiMjIENvbmNlcHQKCkN1c3RvbSB0YWIgY29tcGxldGlvbiBpcyBkZWZpbmVkIGluIHR3byBzdGVwczoKCiAtIERlZmluZSBhIHNjcmlwdGJsb2NrIHRoYXQgaXMgcnVuIHdoZW4gdGhlIHVzZXIgaGl0cyBgVEFCYCBhbmQgcHJvdmlkZXMgdGhlIHN0cmluZ3MgdGhhdCBhcmUgaGlzIG9wdGlvbnMuCiAtIEFzc2lnbiB0aGF0IHNjcmlwdGJsb2NrIHRvIHRoZSBwYXJhbWV0ZXIgb2YgYSBjb21tYW5kLiBZb3UgY2FuIGFzc2lnbiB0aGUgc2FtZSBzY3JpcHRibG9jayBtdWx0aXBsZSB0aW1lcy4KCiMjIFN0cnVjdHVyZQoKSW1wb3J0IG9yZGVyIG1hdHRlcnMuIEluIG9yZGVyIHRvIG1ha2UgdGhpbmdzIHdvcmsgd2l0aCB0aGUgZGVmYXVsdCBzY2FmZm9sZCwgZm9sbG93IHRob3NlIHJ1bGVzOgoKIC0gQWxsIHNjcmlwdGZpbGVzIF9kZWZpbmluZ18gY29tcGxldGlvbiBzY3JpcHRibG9ja3MgbGlrZSB0aGlzOiBgKi50ZXBwLnBzMWAKIC0gUHV0IGFsbCB5b3VyIGNvbXBsZXRpb24gYXNzaWdubWVudHMgaW4gYGFzc2lnbm1lbnQucHMxYAEJ0QQAAAnSBAAABtMEAAAJcmVhZG1lLm1kBtQEAABwL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC90ZXBwL3JlYWRtZS5tZAlbAAAACdYEAAAJ1wQAAAFmBAAAbwAAAAbYBAAAzwEjIERlc2NyaXB0aW9uCgpUaGlzIGlzIHdoZXJlIHRoZSBmdW5jdGlvbiB0ZXN0cyBnby4KCk1ha2Ugc3VyZSB0byBwdXQgdGhlbSBpbiBmb2xkZXJzIHJlZmxlY3RpbmcgdGhlIGFjdHVhbCBtb2R1bGUgc3RydWN0dXJlLgoKSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgYW5kIHB1YmxpYyBmdW5jdGlvbnMgaGVyZS4BCdkEAAAJ2gQAAAbbBAAACXJlYWRtZS5tZAbcBAAAci9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZnVuY3Rpb25zL3JlYWRtZS5tZAlbAAAACd4EAAAJ3wQAAAFnBAAAbwAAAAbgBAAA3gUjIExpc3Qgb2YgZm9yYmlkZGVuIGNvbW1hbmRzCiRnbG9iYWw6QmFubmVkQ29tbWFuZHMgPSBAKAoJJ1dyaXRlLUhvc3QnCgknV3JpdGUtVmVyYm9zZScKCSdXcml0ZS1XYXJuaW5nJwoJJ1dyaXRlLUVycm9yJwoJJ1dyaXRlLU91dHB1dCcKCSdXcml0ZS1JbmZvcm1hdGlvbicKCSdXcml0ZS1EZWJ1ZycKCQoJIyBVc2UgQ0lNIGluc3RlYWQgd2hlcmUgcG9zc2libGUKCSdHZXQtV21pT2JqZWN0JwoJJ0ludm9rZS1XbWlNZXRob2QnCgknUmVnaXN0ZXItV21pRXZlbnQnCgknUmVtb3ZlLVdtaU9iamVjdCcKCSdTZXQtV21pSW5zdGFuY2UnCgoJIyBVc2UgR2V0LVdpbkV2ZW50IGluc3RlYWQKCSdHZXQtRXZlbnRMb2cnCikKCjwjCglDb250YWlucyBsaXN0IG9mIGV4Y2VwdGlvbnMgZm9yIGJhbm5lZCBjbWRsZXRzLgoJSW5zZXJ0IHRoZSBmaWxlIG5hbWVzIG9mIGZpbGVzIHRoYXQgbWF5IGNvbnRhaW4gdGhlbS4KCQoJRXhhbXBsZToKCSJXcml0ZS1Ib3N0IiAgPSBAKCdXcml0ZS1QU0ZIb3N0Q29sb3IucHMxJywnV3JpdGUtUFNGTWVzc2FnZS5wczEnKQojPgokZ2xvYmFsOk1heUNvbnRhaW5Db21tYW5kID0gQHsKCSJXcml0ZS1Ib3N0IiAgPSBAKCkKCSJXcml0ZS1WZXJib3NlIiA9IEAoKQoJIldyaXRlLVdhcm5pbmciID0gQCgpCgkiV3JpdGUtRXJyb3IiICA9IEAoKQoJIldyaXRlLU91dHB1dCIgPSBAKCkKCSJXcml0ZS1JbmZvcm1hdGlvbiIgPSBAKCkKCSJXcml0ZS1EZWJ1ZyIgPSBAKCkKfQEJ4QQAAAniBAAABuMEAAAcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQbkBAAAgwEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzL2dlbmVyYWwvRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQlbAAAACeYEAAAJ5wQAAAFoBAAAbwAAAAboBAAAghgkbW9kdWxlUm9vdCA9IChSZXNvbHZlLVBhdGggIiRnbG9iYWw6dGVzdHJvb3RcLi4iKS5QYXRoCgouICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMSIKCkRlc2NyaWJlICJWZXJpZnlpbmcgaW50ZWdyaXR5IG9mIG1vZHVsZSBmaWxlcyIgewoJQmVmb3JlQWxsIHsKCQlmdW5jdGlvbiBHZXQtRmlsZUVuY29kaW5nCgkJewoJCTwjCgkJCS5TWU5PUFNJUwoJCQkJVGVzdHMgYSBmaWxlIGZvciBlbmNvZGluZy4KCQkJCgkJCS5ERVNDUklQVElPTgoJCQkJVGVzdHMgYSBmaWxlIGZvciBlbmNvZGluZy4KCQkJCgkJCS5QQVJBTUVURVIgUGF0aAoJCQkJVGhlIGZpbGUgdG8gdGVzdAoJCSM+CgkJCVtDbWRsZXRCaW5kaW5nKCldCgkJCVBhcmFtICgKCQkJCVtQYXJhbWV0ZXIoTWFuZGF0b3J5ID0gJFRydWUsIFZhbHVlRnJvbVBpcGVsaW5lQnlQcm9wZXJ0eU5hbWUgPSAkVHJ1ZSldCgkJCQlbQWxpYXMoJ0Z1bGxOYW1lJyldCgkJCQlbc3RyaW5nXQoJCQkJJFBhdGgKCQkJKQoJCQkKCQkJaWYgKCRQU1ZlcnNpb25UYWJsZS5QU1ZlcnNpb24uTWFqb3IgLWx0IDYpCgkJCXsKCQkJCVtieXRlW11dJGJ5dGUgPSBnZXQtY29udGVudCAtRW5jb2RpbmcgYnl0ZSAtUmVhZENvdW50IDQgLVRvdGFsQ291bnQgNCAtUGF0aCAkUGF0aAoJCQl9CgkJCWVsc2UKCQkJewoJCQkJW2J5dGVbXV0kYnl0ZSA9IEdldC1Db250ZW50IC1Bc0J5dGVTdHJlYW0gLVJlYWRDb3VudCA0IC1Ub3RhbENvdW50IDQgLVBhdGggJFBhdGgKCQkJfQoJCQkKCQkJaWYgKCRieXRlWzBdIC1lcSAweGVmIC1hbmQgJGJ5dGVbMV0gLWVxIDB4YmIgLWFuZCAkYnl0ZVsyXSAtZXEgMHhiZikgeyAnVVRGOCBCT00nIH0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMHhmZSAtYW5kICRieXRlWzFdIC1lcSAweGZmKSB7ICdVbmljb2RlJyB9CgkJCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDAgLWFuZCAkYnl0ZVsxXSAtZXEgMCAtYW5kICRieXRlWzJdIC1lcSAweGZlIC1hbmQgJGJ5dGVbM10gLWVxIDB4ZmYpIHsgJ1VURjMyJyB9CgkJCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDB4MmIgLWFuZCAkYnl0ZVsxXSAtZXEgMHgyZiAtYW5kICRieXRlWzJdIC1lcSAweDc2KSB7ICdVVEY3JyB9CgkJCWVsc2UgeyAnVW5rbm93bicgfQoJCX0KCX0KCglDb250ZXh0ICJWYWxpZGF0aW5nIFBTMSBTY3JpcHQgZmlsZXMiIHsKCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIiB8IFdoZXJlLU9iamVjdCBGdWxsTmFtZSAtTm90TGlrZSAiJG1vZHVsZVJvb3RcdGVzdHNcKiIKCQkKCQlmb3JlYWNoICgkZmlsZSBpbiAkYWxsRmlsZXMpCgkJewoJCQkkbmFtZSA9ICRmaWxlLkZ1bGxOYW1lLlJlcGxhY2UoIiRtb2R1bGVSb290XCIsICcnKQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgVVRGOCBlbmNvZGluZyB3aXRoIEJ5dGUgT3JkZXIgTWFyayIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7CgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCBCT00nCgkJCX0KCQkJCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHRyYWlsaW5nIHNwYWNlIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsKCQkJCSgkZmlsZSB8IFNlbGVjdC1TdHJpbmcgIlxzJCIgfCBXaGVyZS1PYmplY3QgeyAkXy5MaW5lLlRyaW0oKS5MZW5ndGggLWd0IDB9KS5MaW5lTnVtYmVyIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJCX0KCQkJCgkJCSR0b2tlbnMgPSAkbnVsbAoJCQkkcGFyc2VFcnJvcnMgPSAkbnVsbAoJCQkkYXN0ID0gW1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uTGFuZ3VhZ2UuUGFyc2VyXTo6UGFyc2VGaWxlKCRmaWxlLkZ1bGxOYW1lLCBbcmVmXSR0b2tlbnMsIFtyZWZdJHBhcnNlRXJyb3JzKQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gc3ludGF4IGVycm9ycyIgLVRlc3RDYXNlcyBAeyBwYXJzZUVycm9ycyA9ICRwYXJzZUVycm9ycyB9IHsKCQkJCSRwYXJzZUVycm9ycyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCQl9CgkJCQoJCQlmb3JlYWNoICgkY29tbWFuZCBpbiAkZ2xvYmFsOkJhbm5lZENvbW1hbmRzKQoJCQl7CgkJCQlpZiAoJGdsb2JhbDpNYXlDb250YWluQ29tbWFuZFsiJGNvbW1hbmQiXSAtbm90Y29udGFpbnMgJGZpbGUuTmFtZSkKCQkJCXsKCQkJCQlJdCAiWyRuYW1lXSBTaG91bGQgbm90IHVzZSAkY29tbWFuZCIgLVRlc3RDYXNlcyBAeyB0b2tlbnMgPSAkdG9rZW5zOyBjb21tYW5kID0gJGNvbW1hbmQgfSB7CgkJCQkJCSR0b2tlbnMgfCBXaGVyZS1PYmplY3QgVGV4dCAtRVEgJGNvbW1hbmQgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9CgkKCUNvbnRleHQgIlZhbGlkYXRpbmcgaGVscC50eHQgaGVscCBmaWxlcyIgewoJCSRhbGxGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJG1vZHVsZVJvb3QgLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5oZWxwLnR4dCIgfCBXaGVyZS1PYmplY3QgRnVsbE5hbWUgLU5vdExpa2UgIiRtb2R1bGVSb290XHRlc3RzXCoiCgkJCgkJZm9yZWFjaCAoJGZpbGUgaW4gJGFsbEZpbGVzKQoJCXsKCQkJJG5hbWUgPSAkZmlsZS5GdWxsTmFtZS5SZXBsYWNlKCIkbW9kdWxlUm9vdFwiLCAnJykKCQkJCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIFVURjggZW5jb2RpbmciIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gewoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjggQk9NJwoJCQl9CgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyB0cmFpbGluZyBzcGFjZSIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7CgkJCQkoJGZpbGUgfCBTZWxlY3QtU3RyaW5nICJccyQiIHwgV2hlcmUtT2JqZWN0IHsgJF8uTGluZS5UcmltKCkuTGVuZ3RoIC1ndCAwIH0gfCBNZWFzdXJlLU9iamVjdCkuQ291bnQgfCBTaG91bGQgLUJlIDAKCQkJfQoJCX0KCX0KfQEJ6QQAAAnqBAAABusEAAAXRmlsZUludGVncml0eS5UZXN0cy5wczEG7AQAAH4vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzL2dlbmVyYWwvRmlsZUludGVncml0eS5UZXN0cy5wczEJWwAAAAnuBAAACe8EAAABaQQAAG8AAAAG8AQAAIMFIyBMaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkCiRnbG9iYWw6RnVuY3Rpb25IZWxwVGVzdEV4Y2VwdGlvbnMgPSBAKAogICAgCikKCjwjCiAgTGlzdCBvZiBhcnJheWVkIGVudW1lcmF0aW9ucy4gVGhlc2UgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LiBBZGQgZnVsbCBuYW1lLgogIEV4YW1wbGU6CgogICJTcWxjb2xsYWJvcmF0aXZlLkRiYXRvb2xzLkNvbm5lY3Rpb24uTWFuYWdlbWVudENvbm5lY3Rpb25UeXBlW10iCiM+CiRnbG9iYWw6SGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzID0gQCgKCQopCgo8IwogIFNvbWUgdHlwZXMgb24gcGFyYW1ldGVycyBqdXN0IGZhaWwgdGhlaXIgdmFsaWRhdGlvbiBubyBtYXR0ZXIgd2hhdC4KICBGb3IgdGhvc2UgaXQgYmVjb21lcyBwb3NzaWJsZSB0byBza2lwIHRoZW0sIGJ5IGFkZGluZyB0aGVtIHRvIHRoaXMgaGFzaHRhYmxlLgogIEFkZCBieSBmb2xsb3dpbmcgdGhpcyBjb252ZW50aW9uOiA8Y29tbWFuZCBuYW1lPiA9IEAoPGxpc3Qgb2YgcGFyYW1ldGVyIG5hbWVzPikKICBFeGFtcGxlOgoKICAiR2V0LURiYUNtT2JqZWN0IiAgICAgICA9IEAoIkRvTm90VXNlIikKIz4KJGdsb2JhbDpIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlID0gQHsKICAgIAp9CgEJ8QQAAAnyBAAABvMEAAATSGVscC5FeGNlcHRpb25zLnBzMQb0BAAAei9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZ2VuZXJhbC9IZWxwLkV4Y2VwdGlvbnMucHMxCVsAAAAJ9gQAAAn3BAAAAWoEAABvAAAABvgEAAC8MzwjCiAgICAuTk9URVMKICAgICAgICBUaGUgb3JpZ2luYWwgdGVzdCB0aGlzIGlzIGJhc2VkIHVwb24gd2FzIHdyaXR0ZW4gYnkgSnVuZSBCbGVuZGVyLgoJCUFmdGVyIHNldmVyYWwgcm91bmRzIG9mIG1vZGlmaWNhdGlvbnMgaXQgc3RhbmRzIG5vdyBhcyBpdCBpcywgYnV0IHRoZSBob25vciByZW1haW5zIGhlcnMuCgoJCVRoYW5rIHlvdSBKdW5lLCBmb3IgYWxsIHlvdSBoYXZlIGRvbmUhCgogICAgLkRFU0NSSVBUSU9OCgkJVGhpcyB0ZXN0IGV2YWx1YXRlcyB0aGUgaGVscCBmb3IgYWxsIGNvbW1hbmRzIGluIGEgbW9kdWxlLgoKCS5QQVJBTUVURVIgU2tpcFRlc3QKCQlEaXNhYmxlcyB0aGlzIHRlc3QuCgkKCS5QQVJBTUVURVIgQ29tbWFuZFBhdGgKCQlMaXN0IG9mIHBhdGhzIHVuZGVyIHdoaWNoIHRoZSBzY3JpcHQgZmlsZXMgYXJlIHN0b3JlZC4KCQlUaGlzIHRlc3QgYXNzdW1lcyB0aGF0IGFsbCBmdW5jdGlvbnMgaGF2ZSB0aGVpciBvd24gZmlsZSB0aGF0IGlzIG5hbWVkIGFmdGVyIHRoZW1zZWx2ZXMuCgkJVGhlc2UgcGF0aHMgYXJlIHVzZWQgdG8gc2VhcmNoIGZvciBjb21tYW5kcyB0aGF0IHNob3VsZCBleGlzdCBhbmQgYmUgdGVzdGVkLgoJCVdpbGwgc2VhcmNoIHJlY3Vyc2l2ZWx5IGFuZCBhY2NlcHRzIHdpbGRjYXJkcywgbWFrZSBzdXJlIG9ubHkgZnVuY3Rpb25zIGFyZSBmb3VuZAoKCS5QQVJBTUVURVIgTW9kdWxlTmFtZQoJCU5hbWUgb2YgdGhlIG1vZHVsZSB0byBiZSB0ZXN0ZWQuCgkJVGhlIG1vZHVsZSBtdXN0IGFscmVhZHkgYmUgaW1wb3J0ZWQKCgkuUEFSQU1FVEVSIEV4Y2VwdGlvbnNGaWxlCgkJRmlsZSBpbiB3aGljaCBleGNlcHRpb25zIGFuZCBhZGp1c3RtZW50cyBhcmUgY29uZmlndXJlZC4KCQlJbiBpdCB0aGVyZSBzaG91bGQgYmUgdHdvIGFycmF5cyBhbmQgYSBoYXNodGFibGUgZGVmaW5lZDoKCQkJJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucwoJCQkkZ2xvYmFsOkhlbHBUZXN0RW51bWVyYXRlZEFycmF5cwoJCQkkZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUKCQlUaGVzZSBjYW4gYmUgdXNlZCB0byB0d2VhayB0aGUgdGVzdHMgc2xpZ2h0bHkgaW4gY2FzZXMgb2YgbmVlZC4KCQlTZWUgdGhlIGV4YW1wbGUgZmlsZSBmb3IgZXhwbGFuYXRpb25zIG9uIGVhY2ggb2YgdGhlc2UgdXNhZ2UgYW5kIGVmZmVjdC4KIz4KW0NtZGxldEJpbmRpbmcoKV0KUGFyYW0gKAoJW3N3aXRjaF0KCSRTa2lwVGVzdCwKCQoJW3N0cmluZ1tdXQoJJENvbW1hbmRQYXRoID0gQCgiJGdsb2JhbDp0ZXN0cm9vdFwuLlxmdW5jdGlvbnMiLCAiJGdsb2JhbDp0ZXN0cm9vdFwuLlxpbnRlcm5hbFxmdW5jdGlvbnMiKSwKCQoJW3N0cmluZ10KCSRNb2R1bGVOYW1lID0gIsO+bmFtZcO+IiwKCQoJW3N0cmluZ10KCSRFeGNlcHRpb25zRmlsZSA9ICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcSGVscC5FeGNlcHRpb25zLnBzMSIKKQppZiAoJFNraXBUZXN0KSB7IHJldHVybiB9Ci4gJEV4Y2VwdGlvbnNGaWxlCgokaW5jbHVkZWROYW1lcyA9IChHZXQtQ2hpbGRJdGVtICRDb21tYW5kUGF0aCAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIpLkJhc2VOYW1lCiRjb21tYW5kVHlwZXMgPSBAKCdDbWRsZXQnLCAnRnVuY3Rpb24nKQppZiAoJFBTVmVyc2lvblRhYmxlLlBTRWRpdGlvbiAtZXEgJ0Rlc2t0b3AnICkgeyAkY29tbWFuZFR5cGVzICs9ICdXb3JrZmxvdycgfQokY29tbWFuZHMgPSBHZXQtQ29tbWFuZCAtTW9kdWxlIChHZXQtTW9kdWxlICRNb2R1bGVOYW1lKSAtQ29tbWFuZFR5cGUgJGNvbW1hbmRUeXBlcyB8IFdoZXJlLU9iamVjdCBOYW1lIC1JbiAkaW5jbHVkZWROYW1lcwoKIyMgV2hlbiB0ZXN0aW5nIGhlbHAsIHJlbWVtYmVyIHRoYXQgaGVscCBpcyBjYWNoZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHNlc3Npb24uCiMjIFRvIHRlc3QsIHJlc3RhcnQgc2Vzc2lvbi4KCgpmb3JlYWNoICgkY29tbWFuZCBpbiAkY29tbWFuZHMpIHsKICAgICRjb21tYW5kTmFtZSA9ICRjb21tYW5kLk5hbWUKICAgIAogICAgIyBTa2lwIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgb24gdGhlIGV4Y2x1c2lvbnMgbGlzdAogICAgaWYgKCRnbG9iYWw6RnVuY3Rpb25IZWxwVGVzdEV4Y2VwdGlvbnMgLWNvbnRhaW5zICRjb21tYW5kTmFtZSkgeyBjb250aW51ZSB9CiAgICAKICAgICMgVGhlIG1vZHVsZS1xdWFsaWZpZWQgY29tbWFuZCBmYWlscyBvbiBNaWNyb3NvZnQuUG93ZXJTaGVsbC5BcmNoaXZlIGNtZGxldHMKICAgICRIZWxwID0gR2V0LUhlbHAgJGNvbW1hbmROYW1lIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlCgkKCURlc2NyaWJlICJUZXN0IGhlbHAgZm9yICRjb21tYW5kTmFtZSIgewogICAgICAgIAoJCSMgSWYgaGVscCBpcyBub3QgZm91bmQsIHN5bm9wc2lzIGluIGF1dG8tZ2VuZXJhdGVkIGhlbHAgaXMgdGhlIHN5bnRheCBkaWFncmFtCgkJSXQgInNob3VsZCBub3QgYmUgYXV0by1nZW5lcmF0ZWQiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gewoJCQkkSGVscC5TeW5vcHNpcyB8IFNob3VsZCAtTm90IC1CZUxpa2UgJypgW2A8Q29tbW9uUGFyYW1ldGVyc2A+YF0qJwoJCX0KICAgICAgICAKCQkjIFNob3VsZCBiZSBhIGRlc2NyaXB0aW9uIGZvciBldmVyeSBmdW5jdGlvbgoJCUl0ICJnZXRzIGRlc2NyaXB0aW9uIGZvciAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gewoJCQkkSGVscC5EZXNjcmlwdGlvbiB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJfQogICAgICAgIAoJCSMgU2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBleGFtcGxlCgkJSXQgImdldHMgZXhhbXBsZSBjb2RlIGZyb20gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsKCQkJKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5Db2RlIHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkKCQl9CgkKCQkjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZSBkZXNjcmlwdGlvbgoJCUl0ICJnZXRzIGV4YW1wbGUgaGVscCBmcm9tICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7CgkJCSgkSGVscC5FeGFtcGxlcy5FeGFtcGxlLlJlbWFya3MgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkKCQl9CiAgICAgICAgCiAgICAgICAgQ29udGV4dCAiVGVzdCBwYXJhbWV0ZXIgaGVscCBmb3IgJGNvbW1hbmROYW1lIiB7CiAgICAgICAgICAgIAogICAgICAgICAgICAkY29tbW9uID0gJ0RlYnVnJywgJ0Vycm9yQWN0aW9uJywgJ0Vycm9yVmFyaWFibGUnLCAnSW5mb3JtYXRpb25BY3Rpb24nLCAnSW5mb3JtYXRpb25WYXJpYWJsZScsICdPdXRCdWZmZXInLCAnT3V0VmFyaWFibGUnLCAnUGlwZWxpbmVWYXJpYWJsZScsICdWZXJib3NlJywgJ1dhcm5pbmdBY3Rpb24nLCAnV2FybmluZ1ZhcmlhYmxlJwogICAgICAgICAgICAKICAgICAgICAgICAgJHBhcmFtZXRlcnMgPSAkY29tbWFuZC5QYXJhbWV0ZXJTZXRzLlBhcmFtZXRlcnMgfCBTb3J0LU9iamVjdCAtUHJvcGVydHkgTmFtZSAtVW5pcXVlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLW5vdGluICRjb21tb24KICAgICAgICAgICAgJHBhcmFtZXRlck5hbWVzID0gJHBhcmFtZXRlcnMuTmFtZQogICAgICAgICAgICAkSGVscFBhcmFtZXRlck5hbWVzID0gJEhlbHAuUGFyYW1ldGVycy5QYXJhbWV0ZXIuTmFtZSB8IFNvcnQtT2JqZWN0IC1VbmlxdWUKICAgICAgICAgICAgZm9yZWFjaCAoJHBhcmFtZXRlciBpbiAkcGFyYW1ldGVycykgewogICAgICAgICAgICAgICAgJHBhcmFtZXRlck5hbWUgPSAkcGFyYW1ldGVyLk5hbWUKICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJIZWxwID0gJEhlbHAucGFyYW1ldGVycy5wYXJhbWV0ZXIgfCBXaGVyZS1PYmplY3QgTmFtZSAtRVEgJHBhcmFtZXRlck5hbWUKCQkJCgkJCQkjIFNob3VsZCBiZSBhIGRlc2NyaXB0aW9uIGZvciBldmVyeSBwYXJhbWV0ZXIKCQkJCUl0ICJnZXRzIGhlbHAgZm9yIHBhcmFtZXRlcjogJHBhcmFtZXRlck5hbWUgOiBpbiAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwIH0gewoJCQkJCSRwYXJhbWV0ZXJIZWxwLkRlc2NyaXB0aW9uLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCQkJfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAkY29kZU1hbmRhdG9yeSA9ICRwYXJhbWV0ZXIuSXNNYW5kYXRvcnkudG9TdHJpbmcoKQoJCQkJSXQgImhlbHAgZm9yICRwYXJhbWV0ZXJOYW1lIHBhcmFtZXRlciBpbiAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgTWFuZGF0b3J5IHZhbHVlIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscDsgY29kZU1hbmRhdG9yeSA9ICRjb2RlTWFuZGF0b3J5IH0gewoJCQkJCSRwYXJhbWV0ZXJIZWxwLlJlcXVpcmVkIHwgU2hvdWxkIC1CZSAkY29kZU1hbmRhdG9yeQoJCQkJfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoJEhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGVbJGNvbW1hbmROYW1lXSAtY29udGFpbnMgJHBhcmFtZXRlck5hbWUpIHsgY29udGludWUgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAkY29kZVR5cGUgPSAkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuTmFtZQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLklzRW51bSkgewogICAgICAgICAgICAgICAgICAgICMgRW51bWVyYXRpb25zIG9mdGVuIGhhdmUgaXNzdWVzIHdpdGggdGhlIHR5cGVuYW1lIG5vdCBiZWluZyByZWxpYWJseSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSAkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGU6OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZSkKCQkJCQkJIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlCgkJCQkJSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwOyBuYW1lcyA9ICRuYW1lcyB9IHsKCQkJCQkJJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWVHcm91cC5wYXJhbWV0ZXJWYWx1ZSB8IFNob3VsZCAtYmUgJG5hbWVzCgkJCQkJfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZWlmICgkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuRnVsbE5hbWUgLWluICRIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMpIHsKICAgICAgICAgICAgICAgICAgICAjIEVudW1lcmF0aW9ucyBvZnRlbiBoYXZlIGlzc3VlcyB3aXRoIHRoZSB0eXBlbmFtZSBub3QgYmVpbmcgcmVsaWFibHkgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgICAgJG5hbWVzID0gW0VudW1dOjpHZXROYW1lcygkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuRGVjbGFyZWRNZW1iZXJzWzBdLlJldHVyblR5cGUpCgkJCQkJSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwOyBuYW1lcyA9ICRuYW1lcyB9IHsKCQkJCQkJJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWVHcm91cC5wYXJhbWV0ZXJWYWx1ZSB8IFNob3VsZCAtYmUgJG5hbWVzCgkJCQkJfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIyBUbyBhdm9pZCBjYWxsaW5nIFRyaW0gbWV0aG9kIG9uIGEgbnVsbCBvYmplY3QuCiAgICAgICAgICAgICAgICAgICAgJGhlbHBUeXBlID0gaWYgKCRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlKSB7ICRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlLlRyaW0oKSB9CgkJCQkJIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlCgkJCQkJSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIC1UZXN0Q2FzZXMgQHsgaGVscFR5cGUgPSAkaGVscFR5cGU7IGNvZGVUeXBlID0gJGNvZGVUeXBlIH0gewoJCQkJCQkkaGVscFR5cGUgfCBTaG91bGQgLWJlICRjb2RlVHlwZQoJCQkJCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmb3JlYWNoICgkaGVscFBhcm0gaW4gJEhlbHBQYXJhbWV0ZXJOYW1lcykgewoJCQkJIyBTaG91bGRuJ3QgZmluZCBleHRyYSBwYXJhbWV0ZXJzIGluIGhlbHAuCgkJCQlJdCAiZmluZHMgaGVscCBwYXJhbWV0ZXIgaW4gY29kZTogJGhlbHBQYXJtIiAtVGVzdENhc2VzIEB7IGhlbHBQYXJtID0gJGhlbHBQYXJtOyBwYXJhbWV0ZXJOYW1lcyA9ICRwYXJhbWV0ZXJOYW1lcyB9IHsKCQkJCQkkaGVscFBhcm0gLWluICRwYXJhbWV0ZXJOYW1lcyB8IFNob3VsZCAtQmUgJHRydWUKCQkJCX0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQEJ+QQAAAn6BAAABvsEAAAOSGVscC5UZXN0cy5wczEG/AQAAHUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzL2dlbmVyYWwvSGVscC5UZXN0cy5wczEJWwAAAAn+BAAACf8EAAABawQAAG8AAAAGAAUAAI4VRGVzY3JpYmUgIlZhbGlkYXRpbmcgdGhlIG1vZHVsZSBtYW5pZmVzdCIgewoJJG1vZHVsZVJvb3QgPSAoUmVzb2x2ZS1QYXRoICIkZ2xvYmFsOnRlc3Ryb290XC4uIikuUGF0aAoJJG1hbmlmZXN0ID0gKChHZXQtQ29udGVudCAiJG1vZHVsZVJvb3Rcw75uYW1lw74ucHNkMSIpIC1qb2luICJgbiIpIHwgSW52b2tlLUV4cHJlc3Npb24KCUNvbnRleHQgIkJhc2ljIHJlc291cmNlcyB2YWxpZGF0aW9uIiB7CgkJJGZpbGVzID0gR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIKCQlJdCAiRXhwb3J0cyBhbGwgZnVuY3Rpb25zIGluIHRoZSBwdWJsaWMgZm9sZGVyIiAtVGVzdENhc2VzIEB7IGZpbGVzID0gJGZpbGVzOyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsKCQkJCgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJzw9JykuSW5wdXRPYmplY3QKCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCX0KCQlJdCAiRXhwb3J0cyBubyBmdW5jdGlvbiB0aGF0IGlzbid0IGFsc28gcHJlc2VudCBpbiB0aGUgcHVibGljIGZvbGRlciIgLVRlc3RDYXNlcyBAeyBmaWxlcyA9ICRmaWxlczsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7CgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJz0+JykuSW5wdXRPYmplY3QKCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCX0KCQkKCQlJdCAiRXhwb3J0cyBub25lIG9mIGl0cyBpbnRlcm5hbCBmdW5jdGlvbnMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsKCQkJJGZpbGVzID0gR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSAtRmlsdGVyICIqLnBzMSIKCQkJJGZpbGVzIHwgV2hlcmUtT2JqZWN0IEJhc2VOYW1lIC1JbiAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQl9Cgl9CgkKCUNvbnRleHQgIkluZGl2aWR1YWwgZmlsZSB2YWxpZGF0aW9uIiB7CgkJSXQgIlRoZSByb290IG1vZHVsZSBmaWxlIGV4aXN0cyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gewoJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCQoJG1hbmlmZXN0LlJvb3RNb2R1bGUpIiB8IFNob3VsZCAtQmUgJHRydWUKCQl9CgkJCgkJZm9yZWFjaCAoJGZvcm1hdCBpbiAkbWFuaWZlc3QuRm9ybWF0c1RvUHJvY2VzcykKCQl7CgkJCUl0ICJUaGUgZmlsZSAkZm9ybWF0IHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IGZvcm1hdCA9ICRmb3JtYXQgfSB7CgkJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCRmb3JtYXQiIHwgU2hvdWxkIC1CZSAkdHJ1ZQoJCQl9CgkJfQoJCQoJCWZvcmVhY2ggKCR0eXBlIGluICRtYW5pZmVzdC5UeXBlc1RvUHJvY2VzcykKCQl7CgkJCUl0ICJUaGUgZmlsZSAkdHlwZSBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyB0eXBlID0gJHR5cGUgfSB7CgkJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCR0eXBlIiB8IFNob3VsZCAtQmUgJHRydWUKCQkJfQoJCX0KCQkKCQlmb3JlYWNoICgkYXNzZW1ibHkgaW4gJG1hbmlmZXN0LlJlcXVpcmVkQXNzZW1ibGllcykKCQl7CiAgICAgICAgICAgIGlmICgkYXNzZW1ibHkgLWxpa2UgIiouZGxsIikgewogICAgICAgICAgICAgICAgSXQgIlRoZSBmaWxlICRhc3NlbWJseSBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBhc3NlbWJseSA9ICRhc3NlbWJseSB9IHsKICAgICAgICAgICAgICAgICAgICBUZXN0LVBhdGggIiRtb2R1bGVSb290XCRhc3NlbWJseSIgfCBTaG91bGQgLUJlICR0cnVlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBJdCAiVGhlIGZpbGUgJGFzc2VtYmx5IHNob3VsZCBsb2FkIGZyb20gdGhlIEdBQyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IGFzc2VtYmx5ID0gJGFzc2VtYmx5IH0gewogICAgICAgICAgICAgICAgICAgIHsgQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSAkYXNzZW1ibHkgfSB8IFNob3VsZCAtTm90IC1UaHJvdwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoJCQoJCWZvcmVhY2ggKCR0YWcgaW4gJG1hbmlmZXN0LlByaXZhdGVEYXRhLlBTRGF0YS5UYWdzKQoJCXsKCQkJSXQgIlRhZ3Mgc2hvdWxkIGhhdmUgbm8gc3BhY2VzIGluIG5hbWUiIC1UZXN0Q2FzZXMgQHsgdGFnID0gJHRhZyB9IHsKCQkJCSR0YWcgLW1hdGNoICIgIiB8IFNob3VsZCAtQmUgJGZhbHNlCgkJCX0KCQl9Cgl9Cn0BCQEFAAAJAgUAAAYDBQAAEk1hbmlmZXN0LlRlc3RzLnBzMQYEBQAAeS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZ2VuZXJhbC9NYW5pZmVzdC5UZXN0cy5wczEJWwAAAAkGBQAACQcFAAABbAQAAG8AAAAGCAUAAO0IW0NtZGxldEJpbmRpbmcoKV0KUGFyYW0gKAoJW3N3aXRjaF0KCSRTa2lwVGVzdCwKCQoJW3N0cmluZ1tdXQoJJENvbW1hbmRQYXRoID0gQCgiJGdsb2JhbDp0ZXN0cm9vdFwuLlxmdW5jdGlvbnMiLCAiJGdsb2JhbDp0ZXN0cm9vdFwuLlxpbnRlcm5hbFxmdW5jdGlvbnMiKQopCgppZiAoJFNraXBUZXN0KSB7IHJldHVybiB9CgokZ2xvYmFsOl9fcGVzdGVyX2RhdGEuU2NyaXB0QW5hbHl6ZXIgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QKCkRlc2NyaWJlICdJbnZva2luZyBQU1NjcmlwdEFuYWx5emVyIGFnYWluc3QgY29tbWFuZGJhc2UnIHsKCSRjb21tYW5kRmlsZXMgPSBmb3JlYWNoICgkcGF0aCBpbiAkQ29tbWFuZFBhdGgpIHsKICAgICAgICBHZXQtQ2hpbGRJdGVtIC1QYXRoICRwYXRoIC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIgogICAgfQoJJHNjcmlwdEFuYWx5emVyUnVsZXMgPSBHZXQtU2NyaXB0QW5hbHl6ZXJSdWxlCgkKCWZvcmVhY2ggKCRmaWxlIGluICRjb21tYW5kRmlsZXMpCgl7CgkJQ29udGV4dCAiQW5hbHl6aW5nICQoJGZpbGUuQmFzZU5hbWUpIiB7CgkJCSRhbmFseXNpcyA9IEludm9rZS1TY3JpcHRBbmFseXplciAtUGF0aCAkZmlsZS5GdWxsTmFtZSAtRXhjbHVkZVJ1bGUgUFNBdm9pZFRyYWlsaW5nV2hpdGVzcGFjZSwgUFNTaG91bGRQcm9jZXNzCgkJCQoJCQlmb3JFYWNoICgkcnVsZSBpbiAkc2NyaXB0QW5hbHl6ZXJSdWxlcykKCQkJewoJCQkJSXQgIlNob3VsZCBwYXNzICRydWxlIiAtVGVzdENhc2VzIEB7IGFuYWx5c2lzID0gJGFuYWx5c2lzOyBydWxlID0gJHJ1bGUgfSB7CgkJCQkJSWYgKCRhbmFseXNpcy5SdWxlTmFtZSAtY29udGFpbnMgJHJ1bGUpCgkJCQkJewoJCQkJCQkkYW5hbHlzaXMgfCBXaGVyZS1PYmplY3QgUnVsZU5hbWUgLUVRICRydWxlIC1vdXR2YXJpYWJsZSBmYWlsdXJlcyB8IEZvckVhY2gtT2JqZWN0IHsgJG51bGwgPSAkZ2xvYmFsOl9fcGVzdGVyX2RhdGEuU2NyaXB0QW5hbHl6ZXIuQWRkKCRfKSB9CgkJCQkJCQoJCQkJCQkxIHwgU2hvdWxkIC1CZSAwCgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCTAgfCBTaG91bGQgLUJlIDAKCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9Cn0BCQkFAAAJCgUAAAYLBQAAGlBTU2NyaXB0QW5hbHl6ZXIuVGVzdHMucHMxBgwFAACBAS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZ2VuZXJhbC9QU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQlbAAAACQ4FAAAJDwUAAAFtBAAAbwAAAAYQBQAAwwckZXhjZXB0aW9ucyA9IEB7IH0KCjwjCkEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgTUFZIGJlIGluIHRoZSBsYW5ndWFnZSBmaWxlcywgd2l0aG91dCBjYXVzaW5nIHRoZSB0ZXN0cyB0byBmYWlsLgpUaGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4gbW9kdWxlcyB0aGF0IGdlbmVyYXRlIGxvY2FsaXplZCBtZXNzYWdlcyBzdHJhaWdodCBmcm9tIEMjLgpTcGVjaWZ5IHRoZSBmdWxsIGtleSBhcyBpdCBpcyB3cml0dGVuIGluIHRoZSBsYW5ndWFnZSBmaWxlcywgZG8gbm90IHByZXBlbmQgdGhlIG1vZHVsZW5hbWUsCmFzIHlvdSB3b3VsZCBoYXZlIHRvIGluIEMjIGNvZGUuCgpFeGFtcGxlOgokZXhjZXB0aW9uc1snTGVnYWxTdXJwbHVzJ10gPSBAKAogICAgJ0V4Y2VwdGlvbi5TdHJlYW1zLkZhaWxlZENyZWF0ZScKICAgICdFeGNlcHRpb24uU3RyZWFtcy5GYWlsZWREaXNwb3NlJwopCiM+CiRleGNlcHRpb25zWydMZWdhbFN1cnBsdXMnXSA9IEAoCgopCjwjCkEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgTUFZIGJlIHVzZWQgd2l0aG91dCBuZWVkaW5nIHRvIGhhdmUgdGV4dCBkZWZpbmVkLgpUaGlzIGlzIGludGVuZGVkIGZvciBtb2R1bGVzIChyZS0pdXNpbmcgc3RyaW5ncyBwcm92aWRlZCBieSBhbm90aGVyIG1vZHVsZQojPgokZXhjZXB0aW9uc1snTm9UZXh0TmVlZGVkJ10gPSBAKAoJJ1ZhbGlkYXRlLkZTUGF0aCcKCSdWYWxpZGF0ZS5GU1BhdGguRmlsZScKCSdWYWxpZGF0ZS5GU1BhdGguRmlsZU9yUGFyZW50JwoJJ1ZhbGlkYXRlLkZTUGF0aC5Gb2xkZXInCgknVmFsaWRhdGUuUGF0aCcKCSdWYWxpZGF0ZS5QYXRoLkNvbnRhaW5lcicKCSdWYWxpZGF0ZS5QYXRoLkxlYWYnCgknVmFsaWRhdGUuVGltZVNwYW4uUG9zaXRpdmUnCgknVmFsaWRhdGUuVXJpLkFic29sdXRlJwoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZS5GaWxlJwoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZS5IdHRwcycKKQoKJGV4Y2VwdGlvbnMBCREFAAAJEgUAAAYTBQAAFnN0cmluZ3MuRXhjZXB0aW9ucy5wczEGFAUAAH0vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzL2dlbmVyYWwvc3RyaW5ncy5FeGNlcHRpb25zLnBzMQlbAAAACRYFAAAJFwUAAAFuBAAAbwAAAAYYBQAA/Qc8IwouREVTQ1JJUFRJT04KICAgIFRoaXMgdGVzdCB2ZXJpZmllcywgdGhhdCBhbGwgc3RyaW5ncyB0aGF0IGhhdmUgYmVlbiB1c2VkLAogICAgYXJlIGxpc3RlZCBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMgYW5kIHRodXMgaGF2ZSBhIG1lc3NhZ2UgYmVpbmcgZGlzcGxheWVkLgoKICAgIEl0IGFsc28gY2hlY2tzLCB3aGV0aGVyIHRoZSBsYW5ndWFnZSBmaWxlcyBoYXZlIG9ycGhhbmVkIGVudHJpZXMgdGhhdCBuZWVkIGNsZWFuaW5nIHVwLgojPgoKCgpEZXNjcmliZSAiVGVzdGluZyBsb2NhbGl6YXRpb24gc3RyaW5ncyIgewoJJG1vZHVsZVJvb3QgPSAoR2V0LU1vZHVsZSDDvm5hbWXDvikuTW9kdWxlQmFzZQoJJHN0cmluZ3NSZXN1bHRzID0gRXhwb3J0LVBTTURTdHJpbmcgLU1vZHVsZVJvb3QgJG1vZHVsZVJvb3QKCSRleGNlcHRpb25zID0gJiAiJGdsb2JhbDp0ZXN0cm9vdFxnZW5lcmFsXHN0cmluZ3MuRXhjZXB0aW9ucy5wczEiCgkKCWZvcmVhY2ggKCRzdHJpbmdFbnRyeSBpbiAkc3RyaW5nc1Jlc3VsdHMpIHsKICAgICAgICBpZiAoJHN0cmluZ0VudHJ5LlN0cmluZyAtZXEgImtleSIpIHsgY29udGludWUgfSAjIFNraXBwaW5nIHRoZSB0ZW1wbGF0ZSBkZWZhdWx0IGVudHJ5CgkJSXQgIlNob3VsZCBiZSB1c2VkICYgaGF2ZSB0ZXh0OiAkKCRzdHJpbmdFbnRyeS5TdHJpbmcpIiAtVGVzdENhc2VzIEB7IHN0cmluZ0VudHJ5ID0gJHN0cmluZ0VudHJ5OyBleGNlcHRpb25zID0gJGV4Y2VwdGlvbnMgfSB7CiAgICAgICAgICAgIGlmICgkZXhjZXB0aW9ucy5MZWdhbFN1cnBsdXMgLW5vdGNvbnRhaW5zICRzdHJpbmdFbnRyeS5TdHJpbmcpIHsKICAgICAgICAgICAgICAgICRzdHJpbmdFbnRyeS5TdXJwbHVzIHwgU2hvdWxkIC1CZUZhbHNlCgkJCX0KCQkJaWYgKCRleGNlcHRpb25zLk5vVGV4dE5lZWRlZCAtbm90Y29udGFpbnMgJHN0cmluZ0VudHJ5LlN0cmluZykgewoJCQkJJHN0cmluZ0VudHJ5LlRleHQg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</BA>
    </MS>
  </Obj>
</Objs>