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-13T00: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">psfversion</S>
            <Obj N="Value" RefId="6">
              <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="7">
              <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">year</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"_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">dynamicscript_394432</S>
            <Obj N="Value" RefId="9">
              <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>
          <En>
            <S N="Key">pesterconfig</S>
            <Obj N="Value" RefId="10">
              <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">testfolder</S>
            <Obj N="Value" RefId="11">
              <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">secretManagementVersion</S>
            <Obj N="Value" RefId="12">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000A__x0009__x0009__x0009_(Get-Module Microsoft.Powershell.SecretManagement -ListAvailable | Sort-Object -Property Version | Select-Object -last 1).Version.ToString()_x000A__x0009__x0009_</S>
                <S N="Name">secretManagementVersion</S>
                <SBK N="ScriptBlock">_x000A__x0009__x0009__x0009_(Get-Module Microsoft.Powershell.SecretManagement -ListAvailable | Sort-Object -Property Version | Select-Object -last 1).Version.ToString()_x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAYlN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249Ny4yLjEwLjUwMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAXc2VjcmV0TWFuYWdlbWVudFZlcnNpb24JBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAAJMBCgkJCShHZXQtTW9kdWxlIE1pY3Jvc29mdC5Qb3dlcnNoZWxsLlNlY3JldE1hbmFnZW1lbnQgLUxpc3RBdmFpbGFibGUgfCBTb3J0LU9iamVjdCAtUHJvcGVydHkgVmVyc2lvbiB8IFNlbGVjdC1PYmplY3QgLWxhc3QgMSkuVmVyc2lvbi5Ub1N0cmluZygpCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">guidRootModule</S>
            <Obj N="Value" RefId="13">
              <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">guidExtension</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">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">date</S>
            <Obj N="Value" RefId="15">
              <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">guid</S>
            <Obj N="Value" RefId="16">
              <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>
        </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.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+CQcAAAAJCAAAAAQDAAAAngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZVtdAgAAAAgICQkAAAAFAAAABQAAAAQHAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQoAAAABAAAAAQAAAAEIAAAABwAAAAkLAAAAAAAAAAAAAAAHCQAAAAABAAAACAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkMAAAACQ0AAAAJDgAAAAkPAAAACRAAAAANAxEKAAAABAAAAAYRAAAABG5hbWUNAxELAAAAAAAAAAEMAAAAAQAAAAkSAAAABhMAAAAFYnVpbGQGFAAAACAvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9idWlsZAkGAAAACRYAAAAJFwAAAAENAAAAAQAAAAkYAAAABhkAAAAZU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvgYaAAAANC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74JBgAAAAkcAAAACR0AAAABDgAAAAEAAAAJHgAAAAYfAAAABHRlc3QGIAAAAB8vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0CQYAAAAJIgAAAAkjAAAABQ8AAAAtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1GaWxlCQAAAAVWYWx1ZQlQbGFpblRleHQUQ29udGVudFBhcmFtZXRlckZsYXQWQ29udGVudFBhcmFtZXRlclNjcmlwdAROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQBAAMDAQEBAwMBf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0CAAAABiQAAACwCE1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIMO+IXllYXIhw74gw75hdXRob3LDvgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4BCSUAAAAJJgAAAAYnAAAAB0xJQ0VOU0UGKAAAACIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9MSUNFTlNFCQYAAAAJKgAAAAkrAAAAARAAAAAPAAAABiwAAADjCSMgRGVzY3JpcHRpb24KCkluc2VydCBhIHVzZWZ1bCBkZXNjcmlwdGlvbiBmb3IgdGhlIMO+bmFtZcO+IHByb2plY3QgaGVyZS4KClJlbWVtYmVyLCBpdCdzIHRoZSBmaXJzdCB0aGluZyBhIHZpc2l0b3Igd2lsbCBzZWUuCgojIFByb2plY3QgU2V0dXAgSW5zdHJ1Y3Rpb25zCiMjIFdvcmtpbmcgd2l0aCB0aGUgbGF5b3V0CgotIERvbid0IHRvdWNoIHRoZSBwc20xIGZpbGUKLSBQbGFjZSBmdW5jdGlvbnMgeW91IGV4cG9ydCBpbiBgZnVuY3Rpb25zL2AgKGNhbiBoYXZlIHN1YmZvbGRlcnMpCi0gUGxhY2UgcHJpdmF0ZS9pbnRlcm5hbCBmdW5jdGlvbnMgaW52aXNpYmxlIHRvIHRoZSB1c2VyIGluIGBpbnRlcm5hbC9mdW5jdGlvbnNgIChjYW4gaGF2ZSBzdWJmb2xkZXJzKQotIERvbid0IGFkZCBjb2RlIGRpcmVjdGx5IHRvIHRoZSBgcG9zdGltcG9ydC5wczFgIG9yIGBwcmVpbXBvcnQucHMxYC4KICBUaG9zZSBmaWxlcyBhcmUgZGVzaWduZWQgdG8gaW1wb3J0IG90aGVyIGZpbGVzIG9ubHkuCi0gV2hlbiBhZGRpbmcgZmlsZXMgJiBmb2xkZXJzLCBtYWtlIHN1cmUgdGhleSBhcmUgY292ZXJlZCBieSBlaXRoZXIgYHBvc3RpbXBvcnQucHMxYCBvciBgcHJlaW1wb3J0LnBzMWAuCiAgVGhpcyBhZGRzIHRoZW0gdG8gYm90aCB0aGUgaW1wb3J0IGFuZCB0aGUgYnVpbGQgc2VxdWVuY2UuCgojIyBTZXR0aW5nIHVwIENJL0NECgo+IFRvIGNyZWF0ZSBhIFBSIHZhbGlkYXRpb24gcGlwZWxpbmUsIHNldCB1cCB0YXNrcyBsaWtlIHRoaXM6CgotIEluc3RhbGwgUHJlcmVxdWlzaXRlcyAoUG93ZXJTaGVsbCBUYXNrOyBWU1RTLVByZXJlcXVpc2l0ZXMucHMxKQotIFZhbGlkYXRlIChQb3dlclNoZWxsIFRhc2s7IFZTVFMtVmFsaWRhdGUucHMxKQotIFB1Ymxpc2ggVGVzdCBSZXN1bHRzIChQdWJsaXNoIFRlc3QgUmVzdWx0czsgTlVuaXQgZm9ybWF0OyBSdW4gbm8gbWF0dGVyIHdoYXQpCgo+IFRvIGNyZWF0ZSBhIGJ1aWxkL3B1Ymxpc2ggcGlwZWxpbmUsIHNldCB1cCB0YXNrcyBsaWtlIHRoaXM6CgotIEluc3RhbGwgUHJlcmVxdWlzaXRlcyAoUG93ZXJTaGVsbCBUYXNrOyBWU1RTLVByZXJlcXVpc2l0ZXMucHMxKQotIFZhbGlkYXRlIChQb3dlclNoZWxsIFRhc2s7IFZTVFMtVmFsaWRhdGUucHMxKQotIEJ1aWxkIChQb3dlclNoZWxsIFRhc2s7IFZTVFMtQnVpbGQucHMxKQotIFB1Ymxpc2ggVGVzdCBSZXN1bHRzIChQdWJsaXNoIFRlc3QgUmVzdWx0czsgTlVuaXQgZm9ybWF0OyBSdW4gbm8gbWF0dGVyIHdoYXQpCgEJLQAAAAkuAAAABi8AAAAJUkVBRE1FLm1kBjAAAAAkL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vUkVBRE1FLm1kCQYAAAAJMgAAAAkzAAAAARIAAAADAAAACTQAAAAGAAAABgAAAAEWAAAABwAAAAkLAAAAAAAAAAAAAAABFwAAAAcAAAAJCwAAAAAAAAAAAAAAARgAAAADAAAACTYAAAALAAAACwAAAAEcAAAABwAAAAk3AAAAAQAAAAEAAAABHQAAAAcAAAAJCwAAAAAAAAAAAAAAAR4AAAADAAAACTkAAAABAAAAAQAAAAEiAAAABwAAAAkLAAAAAAAAAAAAAAABIwAAAAcAAAAJCwAAAAAAAAAAAAAAASUAAAAHAAAACTsAAAABAAAAAQAAAAEmAAAABwAAAAk8AAAAAQAAAAEAAAABKgAAAAcAAAAJCwAAAAAAAAAAAAAAASsAAAAHAAAACQsAAAAAAAAAAAAAAAEtAAAABwAAAAk+AAAAAQAAAAEAAAABLgAAAAcAAAAJCwAAAAAAAAAAAAAAATIAAAAHAAAACQsAAAAAAAAAAAAAAAEzAAAABwAAAAkLAAAAAAAAAAAAAAAHNAAAAAABAAAACAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAlAAAAACUEAAAAJQgAAAAlDAAAACUQAAAAJRQAAAA0CBzYAAAAAAQAAABAAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJRgAAAAlHAAAACUgAAAAJSQAAAAlKAAAACUsAAAAJTAAAAAlNAAAACU4AAAAJTwAAAAlQAAAADQURNwAAAAQAAAAGUQAAAARuYW1lDQMHOQAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAlSAAAADQMROwAAAAQAAAAGUwAAAAZhdXRob3INAxE8AAAABAAAAAZUAAAABHllYXINAxE+AAAABAAAAAZVAAAABG5hbWUNAwFAAAAADwAAAAZWAAAAhgcjIFNldHRpbmcgdXAgdGhlIHJlbGVhc2UgcGlwZWxpbmU6CgojIyBQcmVsaW1pbmFyeQoKU2V0dGluZyB1cCBhIHJlbGVhc2UgcGlwZWxpbmUsIHNldCB0aGUgdHJpZ2dlciB0byBkbyBjb250aW51b3VzIGludGVncmF0aW9uIGFnYWluc3QgdGhlIG1hc3RlciBicmFuY2ggb25seS4KSW4gU3RhZ2UgMSBzZXQgdXAgYSB0YXNrc2VxdWVuY2U6CgojIyAxKSBQb3dlclNoZWxsIFRhc2s6IFByZXJlcXVpc2l0ZXMKCkhhdmUgaXQgZXhlY3V0ZSBgdnN0cy1wcmVyZXF1aXNpdGVzLnBzMWAKCiMjIDIpIFBvd2VyU2hlbGwgVGFzazogVmFsaWRhdGUKCkhhdmUgaXQgZXhlY3V0ZSBgdnN0cy1wcmVyZXF1aXNpdGVzLnBzMWAKCiMjIDMpIFBvd2VyU2hlbGwgVGFzazogQnVpbGQKCkhhdmUgaXQgZXhlY3V0ZSBgdnN0cy1idWlsZC5wczFgLgpUaGUgdGFzayByZXF1aXJlcyB0d28gcGFyYW1ldGVyczoKCiAtIGAtTG9jYWxSZXBvYAogLSBgLVdvcmtpbmdEaXJlY3RvcnkgJChTeXN0ZW0uRGVmYXVsdFdvcmtpbmdEaXJlY3RvcnkpL1/vv71uYW1l77+9YAoKIyMgNCkgUHVibGlzaCBUZXN0IFJlc3VsdHMKCkNvbmZpZ3VyZSB0YXNrIHRvIHBpY2sgdXAgbnVuaXQgdHlwZSBvZiB0ZXN0cyAocmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQganVuaXQpLgpDb25maWd1cmUgdGFzayB0byBleGVjdXRlLCBldmVuIGlmIHByZXZpb3VzIHN0ZXBzIGZhaWxlZCBvciB0aGUgdGFzayBzZXF1ZW5jZSB3YXMgY2FuY2VsbGVkLgoKIyMgNSkgUG93ZXJTaGVsbCBUYXNrOiBQYWNrYWdlIEZ1bmN0aW9uCgpIYXZlIGl0IGV4ZWN1dGUgYHZzdHMtcGFja2FnZUZ1bmN0aW9uLnBzMWAKCiMjIDYpIEF6dXJlIEZ1bmN0aW9uIEFwcERlcGxveQoKQ29uZmlndXJlIHRvIHB1Ymxpc2ggdG8gdGhlIGNvcnJlY3QgZnVuY3Rpb24gYXBwLgEJVwAAAAlYAAAABlkAAAAXQXp1cmVGdW5jdGlvbi5yZWFkbWUubWQGWgAAADgvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9idWlsZC9BenVyZUZ1bmN0aW9uLnJlYWRtZS5tZAkGAAAACVwAAAAJXQAAAAFBAAAADwAAAAZeAAAAxSY8IwpUaGlzIHNjcmlwdCBwdWJsaXNoZXMgdGhlIG1vZHVsZSB0byB0aGUgZ2FsbGVyeS4KSXQgZXhwZWN0cyBhcyBpbnB1dCBhbiBBcGlLZXkgYXV0aG9yaXplZCB0byBwdWJsaXNoIHRoZSBtb2R1bGUuCgpJbnNlcnQgYW55IGJ1aWxkIHN0ZXBzIHlvdSBtYXkgbmVlZCB0byB0YWtlIGJlZm9yZSBwdWJsaXNoaW5nIGl0IGhlcmUuCiM+CnBhcmFtICgKCSRBcGlLZXksCgoJJFdvcmtpbmdEaXJlY3RvcnksCgoJJFJlcG9zaXRvcnkgPSAnUFNHYWxsZXJ5JywKCglbc3dpdGNoXQoJJExvY2FsUmVwbywKCglbc3dpdGNoXQoJJFNraXBQdWJsaXNoLAoKCVtzd2l0Y2hdCgkkQXV0b1ZlcnNpb24KKQoKI3JlZ2lvbiBIYW5kbGUgV29ya2luZyBEaXJlY3RvcnkgRGVmYXVsdHMKaWYgKC1ub3QgJFdvcmtpbmdEaXJlY3RvcnkpCnsKCWlmICgkZW52OlJFTEVBU0VfUFJJTUFSWUFSVElGQUNUU09VUkNFQUxJQVMpCgl7CgkJJFdvcmtpbmdEaXJlY3RvcnkgPSBKb2luLVBhdGggLVBhdGggJGVudjpTWVNURU1fREVGQVVMVFdPUktJTkdESVJFQ1RPUlkgLUNoaWxkUGF0aCAkZW52OlJFTEVBU0VfUFJJTUFSWUFSVElGQUNUU09VUkNFQUxJQVMKCX0KCWVsc2UgeyAkV29ya2luZ0RpcmVjdG9yeSA9ICRlbnY6U1lTVEVNX0RFRkFVTFRXT1JLSU5HRElSRUNUT1JZIH0KfQppZiAoLW5vdCAkV29ya2luZ0RpcmVjdG9yeSkgeyAkV29ya2luZ0RpcmVjdG9yeSA9IFNwbGl0LVBhdGggJFBTU2NyaXB0Um9vdCB9CiNlbmRyZWdpb24gSGFuZGxlIFdvcmtpbmcgRGlyZWN0b3J5IERlZmF1bHRzCgojIFByZXBhcmUgcHVibGlzaCBmb2xkZXIKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJDcmVhdGluZyBhbmQgcG9wdWxhdGluZyBwdWJsaXNoaW5nIGRpcmVjdG9yeSIKJHB1Ymxpc2hEaXIgPSBOZXctSXRlbSAtUGF0aCAkV29ya2luZ0RpcmVjdG9yeSAtTmFtZSBwdWJsaXNoIC1JdGVtVHlwZSBEaXJlY3RvcnkgLUZvcmNlCkNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDviIgLURlc3RpbmF0aW9uICRwdWJsaXNoRGlyLkZ1bGxOYW1lIC1SZWN1cnNlIC1Gb3JjZQoKI3JlZ2lvbiBHYXRoZXIgdGV4dCBkYXRhIHRvIGNvbXBpbGUKJHRleHQgPSBAKCkKJHByb2Nlc3NlZCA9IEAoKQoKIyBHYXRoZXIgU3R1ZmYgdG8gcnVuIGJlZm9yZQpmb3JlYWNoICgkZmlsZVBhdGggaW4gKCYgIiQoJFBTU2NyaXB0Um9vdClcLi5cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEiKSkKewoJaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJGZpbGVQYXRoKSkgeyBjb250aW51ZSB9CgoJJGl0ZW0gPSBHZXQtSXRlbSAkZmlsZVBhdGgKCWlmICgkaXRlbS5QU0lzQ29udGFpbmVyKSB7IGNvbnRpbnVlIH0KCWlmICgkaXRlbS5GdWxsTmFtZSAtaW4gJHByb2Nlc3NlZCkgeyBjb250aW51ZSB9CgkkdGV4dCArPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkaXRlbS5GdWxsTmFtZSkKCSRwcm9jZXNzZWQgKz0gJGl0ZW0uRnVsbE5hbWUKfQoKIyBHYXRoZXIgY29tbWFuZHMKR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbFxmdW5jdGlvbnNcIiAtUmVjdXJzZSAtRmlsZSAtRmlsdGVyICIqLnBzMSIgfCBGb3JFYWNoLU9iamVjdCB7CgkkdGV4dCArPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkXy5GdWxsTmFtZSkKfQpHZXQtQ2hpbGRJdGVtIC1QYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbFwiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIioucHMxIiB8IEZvckVhY2gtT2JqZWN0IHsKCSR0ZXh0ICs9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRfLkZ1bGxOYW1lKQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgVmVyYm9zZSAtTWVzc2FnZSAiICMzIEltcG9ydGluZyBjb250ZW50IGZyb20gJCgkXy5GdWxsTmFtZSkiCn0KR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxmdW5jdGlvbnNcIiAtUmVjdXJzZSAtRmlsZSAtRmlsdGVyICIqLnBzMSIgfCBGb3JFYWNoLU9iamVjdCB7CgkkdGV4dCArPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkXy5GdWxsTmFtZSkKfQoKIyBHYXRoZXIgc3R1ZmYgdG8gcnVuIGFmdGVyd2FyZHMKZm9yZWFjaCAoJGZpbGVQYXRoIGluICgmICIkKCRQU1NjcmlwdFJvb3QpXC4uXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcc2NyaXB0c1xwb3N0aW1wb3J0LnBzMSIpKQp7CglpZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkZmlsZVBhdGgpKSB7IGNvbnRpbnVlIH0KCgkkaXRlbSA9IEdldC1JdGVtICRmaWxlUGF0aAoJaWYgKCRpdGVtLlBTSXNDb250YWluZXIpIHsgY29udGludWUgfQoJaWYgKCRpdGVtLkZ1bGxOYW1lIC1pbiAkcHJvY2Vzc2VkKSB7IGNvbnRpbnVlIH0KCSR0ZXh0ICs9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRpdGVtLkZ1bGxOYW1lKQoJJHByb2Nlc3NlZCArPSAkaXRlbS5GdWxsTmFtZQp9CiNlbmRyZWdpb24gR2F0aGVyIHRleHQgZGF0YSB0byBjb21waWxlCgojcmVnaW9uIFVwZGF0ZSB0aGUgcHNtMSBmaWxlCiRmaWxlRGF0YSA9IEdldC1Db250ZW50IC1QYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNtMSIgLVJhdwokZmlsZURhdGEgPSAkZmlsZURhdGEuUmVwbGFjZSgnIjx3YXMgbm90IGNvbXBpbGVkPiInLCAnIjx3YXMgY29tcGlsZWQ+IicpCiRmaWxlRGF0YSA9ICRmaWxlRGF0YS5SZXBsYWNlKCciPGNvbXBpbGUgY29kZSBpbnRvIGhlcmU+IicsICgkdGV4dCAtam9pbiAiYG5gbiIpKQpbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbFRleHQoIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc20xIiwgJGZpbGVEYXRhLCBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4KQojZW5kcmVnaW9uIFVwZGF0ZSB0aGUgcHNtMSBmaWxlCgojcmVnaW9uIFVwZGF0aW5nIHRoZSBNb2R1bGUgVmVyc2lvbgppZiAoJEF1dG9WZXJzaW9uKQp7CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlVwZGF0aW5nIG1vZHVsZSB2ZXJzaW9uIG51bWJlcnMuIgoJdHJ5IHsgW3ZlcnNpb25dJHJlbW90ZVZlcnNpb24gPSAoRmluZC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74nIC1SZXBvc2l0b3J5ICRSZXBvc2l0b3J5IC1FcnJvckFjdGlvbiBTdG9wKS5WZXJzaW9uIH0KCWNhdGNoCgl7CgkJU3RvcC1QU0ZGdW5jdGlvbiAtTWVzc2FnZSAiRmFpbGVkIHRvIGFjY2VzcyAkKCRSZXBvc2l0b3J5KSIgLUVuYWJsZUV4Y2VwdGlvbiAkdHJ1ZSAtRXJyb3JSZWNvcmQgJF8KCX0KCWlmICgtbm90ICRyZW1vdGVWZXJzaW9uKQoJewoJCVN0b3AtUFNGRnVuY3Rpb24gLU1lc3NhZ2UgIkNvdWxkbid0IGZpbmQgw75uYW1lw74gb24gcmVwb3NpdG9yeSAkKCRSZXBvc2l0b3J5KSIgLUVuYWJsZUV4Y2VwdGlvbiAkdHJ1ZQoJfQoJJG5ld0J1aWxkTnVtYmVyID0gJHJlbW90ZVZlcnNpb24uQnVpbGQgKyAxCglbdmVyc2lvbl0kbG9jYWxWZXJzaW9uID0gKEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxIikuTW9kdWxlVmVyc2lvbgoJVXBkYXRlLU1vZHVsZU1hbmlmZXN0IC1QYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSIgLU1vZHVsZVZlcnNpb24gIiQoJGxvY2FsVmVyc2lvbi5NYWpvcikuJCgkbG9jYWxWZXJzaW9uLk1pbm9yKS4kKCRuZXdCdWlsZE51bWJlcikiCn0KI2VuZHJlZ2lvbiBVcGRhdGluZyB0aGUgTW9kdWxlIFZlcnNpb24KCiNyZWdpb24gUHVibGlzaAppZiAoJFNraXBQdWJsaXNoKSB7IHJldHVybiB9CmlmICgkTG9jYWxSZXBvKQp7CgkjIERlcGVuZGVuY2llcyBtdXN0IGdvIGZpcnN0CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkNyZWF0aW5nIE51Z2V0IFBhY2thZ2UgZm9yIG1vZHVsZTogUFNGcmFtZXdvcmsiCglOZXctUFNNRE1vZHVsZU51Z2V0UGFja2FnZSAtTW9kdWxlUGF0aCAoR2V0LU1vZHVsZSAtTmFtZSBQU0ZyYW1ld29yaykuTW9kdWxlQmFzZSAtUGFja2FnZVBhdGggLgoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJDcmVhdGluZyBOdWdldCBQYWNrYWdlIGZvciBtb2R1bGU6IMO+bmFtZcO+IgoJTmV3LVBTTURNb2R1bGVOdWdldFBhY2thZ2UgLU1vZHVsZVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74iIC1QYWNrYWdlUGF0aCAuCn0KZWxzZQp7CgkjIFB1Ymxpc2ggdG8gR2FsbGVyeQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJQdWJsaXNoaW5nIHRoZSDDvm5hbWXDviBtb2R1bGUgdG8gJCgkUmVwb3NpdG9yeSkiCglQdWJsaXNoLU1vZHVsZSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDviIgLU51R2V0QXBpS2V5ICRBcGlLZXkgLUZvcmNlIC1SZXBvc2l0b3J5ICRSZXBvc2l0b3J5Cn0KI2VuZHJlZ2lvbiBQdWJsaXNoAQlfAAAACWAAAAAGYQAAAA52c3RzLWJ1aWxkLnBzMQZiAAAALy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2J1aWxkL3ZzdHMtYnVpbGQucHMxCQYAAAAJZAAAAAllAAAAAUIAAAAPAAAABmYAAAD/Pwo8IwoJLlNZTk9QU0lTCgkJQnVpbGQgc2NyaXB0IHRoYXQgZ2VuZXJhdGVzIGEgY2xpZW50IG1vZHVsZSBmb3IgUkVTVCBBUEkgZW5kcG9pbnRzIG9mIGEgQXp1cmUgUG93ZXJTaGVsbCBGdW5jdGlvbnMgcHJvamVjdC4KCgkuREVTQ1JJUFRJT04KCQlCdWlsZCBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgYSBjbGllbnQgbW9kdWxlIGZvciBSRVNUIEFQSSBlbmRwb2ludHMgb2YgYSBBenVyZSBQb3dlclNoZWxsIEZ1bmN0aW9ucyBwcm9qZWN0LgoKCS5QQVJBTUVURVIgQXBpS2V5CgkJVGhlIEFQSSBrZXkgdG8gdXNlIHRvIHB1Ymxpc2ggdGhlIG1vZHVsZSB0byBhIE51Z2V0IFJlcG9zaXRvcnkKCgkuUEFSQU1FVEVSIFdvcmtpbmdEaXJlY3RvcnkKCQlUaGUgcm9vdCBmb2xkZXIgZnJvbSB3aGljaCB0byBidWlsZCB0aGUgbW9kdWxlLgoKCS5QQVJBTUVURVIgUmVwb3NpdG9yeQoJCVRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5IHRvIHB1Ymxpc2ggdG8uCgkJRGVmYXVsdHMgdG8gUFNHYWxsZXJ5LgoKCS5QQVJBTUVURVIgTG9jYWxSZXBvCgkJSW5zdGVhZCBvZiBwdWJsaXNoaW5nIHRvIGEgZ2FsbGVyeSwgZHJvcCBhIG51Z2V0IHBhY2thZ2UgaW4gdGhlIHJvb3QgZm9sZGVyLgoJCVRoaXMgcGFja2FnZSBjYW4gdGhlbiBiZSBwaWNrZWQgdXAgaW4gYSBsYXRlciBzdGVwIGZvciBwdWJsaXNoaW5nIHRvIEF6dXJlIEFydGlmYWN0cy4KCgkuUEFSQU1FVEVSIE1vZHVsZU5hbWUKCQlUaGUgbmFtZSB0byBnaXZlIHRvIHRoZSBjbGllbnQgbW9kdWxlLgoJCUJ5IGRlZmF1bHQsIHRoZSBjbGllbnQgbW9kdWxlIHdpbGwgYmUgbmFtZWQgJzxNb2R1bGVOYW1lPi5DbGllbnQnLgoKCS5QQVJBTUVURVIgSW5jbHVkZUZvcm1hdAoJCUluY2x1ZGUgdGhlIGZvcm1hdCB4bWwgb2YgdGhlIHNvdXJjZSBtb2R1bGUgZm9yIHRoZSBjbGllbnQgbW9kdWxlLgoKCS5QQVJBTUVURVIgSW5jbHVkZVR5cGUKCQlJbmNsdWRlIHRoZSB0eXBlIGV4dGVuc2lvbiB4bWwgb2YgdGhlIHNvdXJjZSBtb2R1bGUgZm9yIHRoZSBjbGllbnQgbW9kdWxlLgoKCS5QQVJBTUVURVIgSW5jbHVkZUFzc2VtYmx5CgkJSW5jbHVkZSB0aGUgYmluYXJpZXMgb2YgdGhlIHNvdXJjZSBtb2R1bGUgZm9yIHRoZSBjbGllbnQgbW9kdWxlLgojPgpwYXJhbSAoCgkkQXBpS2V5LAoKCSRXb3JraW5nRGlyZWN0b3J5LAoKCSRSZXBvc2l0b3J5ID0gJ1BTR2FsbGVyeScsCgoJW3N3aXRjaF0KCSRMb2NhbFJlcG8sCgoJJE1vZHVsZU5hbWUsCgoJW3N3aXRjaF0KCSRJbmNsdWRlRm9ybWF0LAoKCVtzd2l0Y2hdCgkkSW5jbHVkZVR5cGUsCgoJW3N3aXRjaF0KCSRJbmNsdWRlQXNzZW1ibHkKKQoKI3JlZ2lvbiBIYW5kbGUgV29ya2luZyBEaXJlY3RvcnkgRGVmYXVsdHMKaWYgKC1ub3QgJFdvcmtpbmdEaXJlY3RvcnkpCnsKCWlmICgkZW52OlJFTEVBU0VfUFJJTUFSWUFSVElGQUNUU09VUkNFQUxJQVMpCgl7CgkJJFdvcmtpbmdEaXJlY3RvcnkgPSBKb2luLVBhdGggLVBhdGggJGVudjpTWVNURU1fREVGQVVMVFdPUktJTkdESVJFQ1RPUlkgLUNoaWxkUGF0aCAkZW52OlJFTEVBU0VfUFJJTUFSWUFSVElGQUNUU09VUkNFQUxJQVMKCX0KCWVsc2UgeyAkV29ya2luZ0RpcmVjdG9yeSA9ICRlbnY6U1lTVEVNX0RFRkFVTFRXT1JLSU5HRElSRUNUT1JZIH0KfQojZW5kcmVnaW9uIEhhbmRsZSBXb3JraW5nIERpcmVjdG9yeSBEZWZhdWx0cwoKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAnU3RhcnRpbmcgQnVpbGQ6IENsaWVudCBNb2R1bGUnCiRwYXJlbnRNb2R1bGUgPSAnw75uYW1lw74nCmlmICgtbm90ICRNb2R1bGVOYW1lKSB7ICRNb2R1bGVOYW1lID0gJ8O+bmFtZcO+LkNsaWVudCcgfQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICdDcmVhdGluZyBGb2xkZXIgU3RydWN0dXJlJwokd29ya2luZ1Jvb3QgPSBOZXctSXRlbSAtUGF0aCAkV29ya2luZ0RpcmVjdG9yeSAtTmFtZSAkTW9kdWxlTmFtZSAtSXRlbVR5cGUgRGlyZWN0b3J5CiRwdWJsaXNoUm9vdCA9IEpvaW4tUGF0aCAtUGF0aCAkV29ya2luZ0RpcmVjdG9yeSAtQ2hpbGRQYXRoICdwdWJsaXNoXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74nCkNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xjbGllbnRNb2R1bGVcZnVuY3Rpb25zIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVwiIC1SZWN1cnNlCkNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xjbGllbnRNb2R1bGVcaW50ZXJuYWwiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIgLVJlY3Vyc2UKQ29weS1JdGVtIC1QYXRoICIkKCRwdWJsaXNoUm9vdClcZW4tdXMiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIgLVJlY3Vyc2UKJGZ1bmN0aW9uRm9sZGVyID0gR2V0LUl0ZW0gLVBhdGggIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVxmdW5jdGlvbnMiCgojcmVnaW9uIENyZWF0ZSBGdW5jdGlvbnMKJGVuY29kaW5nID0gW1BTRkVuY29kaW5nXSd1dGY4JwokZnVuY3Rpb25zVGV4dCA9IEdldC1Db250ZW50IC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGNsaWVudE1vZHVsZVxmdW5jdGlvbi5wczEiIC1SYXcKCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgJ0NyZWF0aW5nIEZ1bmN0aW9ucycKZm9yZWFjaCAoJGZ1bmN0aW9uU291cmNlRmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkcHVibGlzaFJvb3QpXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbHRlciAnKi5wczEnKSkKewoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiICBQcm9jZXNzaW5nIGZ1bmN0aW9uOiAkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpIgoJJGNvbmRlbnNlZE5hbWUgPSAkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lIC1yZXBsYWNlICctJywgJycKCgkjcmVnaW9uIExvYWQgT3ZlcnJpZGVzCgkkb3ZlcnJpZGUgPSBAeyB9CglpZiAoVGVzdC1QYXRoIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5wc2QxIikKCXsKCQkkb3ZlcnJpZGUgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5wc2QxIgoJfQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGNvbmRlbnNlZE5hbWUpLnBzZDEiKQoJewoJCSRvdmVycmlkZSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5wc2QxIgoJfQoJaWYgKCRvdmVycmlkZS5Ob0NsaWVudEZ1bmN0aW9uKQoJewoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIiAgICBPdmVycmlkZSAnTm9DbGllbnRGdW5jdGlvbicgZGV0ZWN0ZWQsIHNraXBwaW5nISIKCQljb250aW51ZQoJfQoKCSMgSWYgdGhlcmUgaXMgYW4gZGVmaW5pdGlvbiBvdmVycmlkZSwgdXNlIGl0IGFuZCBjb250aW51ZQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHMxIikKCXsKCQlXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICIgICAgT3ZlcnJpZGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZXRlY3RlZCwgdXNpbmcgb3ZlcnJpZGUiCgkJQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5wczEiIC1EZXN0aW5hdGlvbiAkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUKCQljb250aW51ZQoJfQoKCSMgRmlndXJlIG91dCB0aGUgUmVzdCBNZXRob2QgdG8gdXNlCgkkbWV0aG9kTmFtZSA9ICdQb3N0JwoJaWYgKCRvdmVycmlkZS5SZXN0TWV0aG9kcykKCXsKCQkkbWV0aG9kTmFtZSA9ICRvdmVycmlkZS5SZXN0TWV0aG9kcyB8IFdoZXJlLU9iamVjdCB7ICRfIC1uZSAnR2V0JyB9IHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMQoJfQoKCSNlbmRyZWdpb24gTG9hZCBPdmVycmlkZXMKCgkkY3VycmVudEZ1bmN0aW9uc1RleHQgPSAkZnVuY3Rpb25zVGV4dCAtcmVwbGFjZSAnJWZ1bmN0aW9ubmFtZSUnLCAkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lIC1yZXBsYWNlICclY29uZGVuc2VkbmFtZSUnLCAkY29uZGVuc2VkTmFtZSAtcmVwbGFjZSAnJW1ldGhvZCUnLCAkbWV0aG9kTmFtZQoKCSRwYXJzZWRGdW5jdGlvbiA9IFJlYWQtUFNNRFNjcmlwdCAtUGF0aCAkZnVuY3Rpb25Tb3VyY2VGaWxlLkZ1bGxOYW1lCgkkZnVuY3Rpb25Bc3QgPSAkcGFyc2VkRnVuY3Rpb24uQXN0LkVuZEJsb2NrLlN0YXRlbWVudHMgfCBXaGVyZS1PYmplY3QgewoJCSRfIC1pcyBbU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5MYW5ndWFnZS5GdW5jdGlvbkRlZmluaXRpb25Bc3RdCgl9IHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMQoKCSRlbmQgPSAkZnVuY3Rpb25Bc3QuQm9keS5QYXJhbUJsb2NrLkV4dGVudC5FbmRPZmZTZXQKCSRzdGFydCA9ICRmdW5jdGlvbkFzdC5Cb2R5LkV4dGVudC5TdGFydE9mZlNldCArIDEKCSRjdXJyZW50RnVuY3Rpb25zVGV4dCA9ICRjdXJyZW50RnVuY3Rpb25zVGV4dC5SZXBsYWNlKCclcGFyYW1ldGVyJScsICRmdW5jdGlvbkFzdC5Cb2R5LkV4dGVudC5UZXh0LlN1YlN0cmluZygxLCAoJGVuZCAtICRzdGFydCkpKQoKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIiAgICBDcmVhdGluZyBmaWxlOiAkKCRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSlcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLk5hbWUpIgoJW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxUZXh0KCIkKCRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSlcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLk5hbWUpIiwgJGN1cnJlbnRGdW5jdGlvbnNUZXh0LCAkZW5jb2RpbmcpCn0KJGZ1bmN0aW9uc1RvRXhwb3J0ID0gKEdldC1DaGlsZEl0ZW0gLVBhdGggJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lIC1SZWN1cnNlIC1GaWx0ZXIgKi5wczEpLkJhc2VOYW1lIHwgU29ydC1PYmplY3QKI2VuZHJlZ2lvbiBDcmVhdGUgRnVuY3Rpb25zCgojcmVnaW9uIENyZWF0ZSBDb3JlIE1vZHVsZSBGaWxlcwojIEdldCBNYW5pZmVzdCBvZiBwdWJsaXNoZWQgdmVyc2lvbiwgaW4gb3JkZXIgdG8gY2F0Y2ggYnVpbGQtcGhhc2UgY2hhbmdlcyBzdWNoIGFzIG1vZHVsZSB2ZXJzaW9uLgokb3JpZ2luYWxNYW5pZmVzdERhdGEgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkcHVibGlzaFJvb3RcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxIgokcHJlcmVxSGFzaCA9IEB7CglNb2R1bGVOYW1lICAgID0gJ1BTRnJhbWV3b3JrJwoJTW9kdWxlVmVyc2lvbiA9IChHZXQtTW9kdWxlIFBTRnJhbWV3b3JrKS5WZXJzaW9uCn0KJHBhcmFtTmV3TW9kdWxlTWFuaWZlc3QgPSBAewoJUGF0aAkJCSAgPSAoJ3swfVx7MX0ucHNkMScgLWYgJHdvcmtpbmdSb290LkZ1bGxOYW1lLCAkTW9kdWxlTmFtZSkKCUZ1bmN0aW9uc1RvRXhwb3J0ID0gJGZ1bmN0aW9uc1RvRXhwb3J0CglDb21wYW55TmFtZQkgICAgICA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5Db21wYW55TmFtZQoJQXV0aG9yCQkgICAgICA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5BdXRob3IKCURlc2NyaXB0aW9uCSAgICAgID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLkRlc2NyaXB0aW9uCglNb2R1bGVWZXJzaW9uCSAgPSAkb3JpZ2luYWxNYW5pZmVzdERhdGEuTW9kdWxlVmVyc2lvbgoJUm9vdE1vZHVsZQkgICAgICA9ICgnezB9LnBzbTEnIC1mICRNb2R1bGVOYW1lKQoJQ29weXJpZ2h0CQkgID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLkNvcHlyaWdodAoJVHlwZXNUb1Byb2Nlc3MgICAgPSBAKCkKCUZvcm1hdHNUb1Byb2Nlc3MgID0gQCgpCglSZXF1aXJlZEFzc2VtYmxpZXMgPSBAKCkKCVJlcXVpcmVkTW9kdWxlcyAgID0gQCgkcHJlcmVxSGFzaCkKCUNvbXBhdGlibGVQU0VkaXRpb25zID0gJ0NvcmUnLCAnRGVza3RvcCcKCVBvd2VyU2hlbGxWZXJzaW9uID0gJzUuMScKfQoKaWYgKCRJbmNsdWRlQXNzZW1ibHkpIHsgJHBhcmFtTmV3TW9kdWxlTWFuaWZlc3QuUmVxdWlyZWRBc3NlbWJsaWVzID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLlJlcXVpcmVkQXNzZW1ibGllcyB9CmlmICgkSW5jbHVkZUZvcm1hdCkgeyAkcGFyYW1OZXdNb2R1bGVNYW5pZmVzdC5Gb3JtYXRzVG9Qcm9jZXNzID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLkZvcm1hdHNUb1Byb2Nlc3MgfQppZiAoJEluY2x1ZGVUeXBlKSB7ICRwYXJhbU5ld01vZHVsZU1hbmlmZXN0LlR5cGVzVG9Qcm9jZXNzID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLlR5cGVzVG9Qcm9jZXNzIH0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiQ3JlYXRpbmcgTW9kdWxlIE1hbmlmZXN0IGZvciBtb2R1bGU6ICRNb2R1bGVOYW1lIgpOZXctTW9kdWxlTWFuaWZlc3QgQHBhcmFtTmV3TW9kdWxlTWFuaWZlc3QKCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIkNvcHlpbmcgYWRkaXRpb25hbCBtb2R1bGUgZmlsZXMiCkNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xjbGllbnRNb2R1bGVcbW9kdWxlcm9vdC5wc20xIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVwkKCRNb2R1bGVOYW1lKS5wc20xIgpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXExJQ0VOU0UiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIKI2VuZHJlZ2lvbiBDcmVhdGUgQ29yZSBNb2R1bGUgRmlsZXMKCiNyZWdpb24gVHJhbnNmZXIgQWRkaXRpb25hbCBDb250ZW50CmlmICgkSW5jbHVkZUFzc2VtYmx5KQp7CglDb3B5LUl0ZW0gLVBhdGggIiRwdWJsaXNoUm9vdFxiaW4iIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIgLVJlY3Vyc2UKfQppZiAoJEluY2x1ZGVGb3JtYXQgLW9yICRJbmNsdWRlVHlwZSkKewoJQ29weS1JdGVtIC1QYXRoICIkcHVibGlzaFJvb3RceG1sIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVwiIC1SZWN1cnNlCn0KI2VuZHJlZ2lvbiBUcmFuc2ZlciBBZGRpdGlvbmFsIENvbnRlbnQKCiNyZWdpb24gUHVibGlzaAppZiAoJExvY2FsUmVwbykKewoJIyBEZXBlbmRlbmNpZXMgbXVzdCBnbyBmaXJzdAoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJDcmVhdGluZyBOdWdldCBQYWNrYWdlIGZvciBtb2R1bGU6IFBTRnJhbWV3b3JrIgoJTmV3LVBTTURNb2R1bGVOdWdldFBhY2thZ2UgLU1vZHVsZVBhdGggKEdldC1Nb2R1bGUgLU5hbWUgUFNGcmFtZXdvcmspLk1vZHVsZUJhc2UgLVBhY2thZ2VQYXRoIC4gLVdhcm5pbmdBY3Rpb24gU2lsZW50bHlDb250aW51ZQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJDcmVhdGluZyBOdWdldCBQYWNrYWdlIGZvciBtb2R1bGU6IMO+bmFtZcO+IgoJTmV3LVBTTURNb2R1bGVOdWdldFBhY2thZ2UgLU1vZHVsZVBhdGggJHdvcmtpbmdSb290LkZ1bGxOYW1lIC1QYWNrYWdlUGF0aCAuIC1FbmFibGVFeGNlcHRpb24KfQplbHNlCnsKCSMgUHVibGlzaCB0byBHYWxsZXJ5CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlB1Ymxpc2hpbmcgdGhlIMO+bmFtZcO+IG1vZHVsZSB0byAkKCRSZXBvc2l0b3J5KSIKCVB1Ymxpc2gtTW9kdWxlIC1QYXRoICR3b3JraW5nUm9vdC5GdWxsTmFtZSAtTnVHZXRBcGlLZXkgJEFwaUtleSAtRm9yY2UgLVJlcG9zaXRvcnkgJFJlcG9zaXRvcnkKfQojZW5kcmVnaW9uIFB1Ymxpc2gBCWcAAAAJaAAAAAZpAAAAI3ZzdHMtY3JlYXRlRnVuY3Rpb25DbGllbnRNb2R1bGUucHMxBmoAAABEL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vYnVpbGQvdnN0cy1jcmVhdGVGdW5jdGlvbkNsaWVudE1vZHVsZS5wczEJBgAAAAlsAAAACW0AAAABQwAAAA8AAAAGbgAAAI0rCjwjCgkuU1lOT1BTSVMKCQlQYWNrYWdlcyBhbiBBenVyZSBGdW5jdGlvbnMgcHJvamVjdCwgcmVhZHkgdG8gcmVsZWFzZS4KCQoJLkRFU0NSSVBUSU9OCgkJUGFja2FnZXMgYW4gQXp1cmUgRnVuY3Rpb25zIHByb2plY3QsIHJlYWR5IHRvIHJlbGVhc2UuCgkJU2hvdWxkIGJlIHBhcnQgb2YgdGhlIHJlbGVhc2UgcGlwZWxpbmUsIGFmdGVyIGVuc3VyaW5nIHZhbGlkYXRpb24uCgoJCUxvb2sgaW50byB0aGUgJ0F6dXJlRnVuY3Rpb25SZXN0JyB0ZW1wbGF0ZSBmb3IgZ2VuZXJhdGluZyBmdW5jdGlvbnMgZm9yIHRoZSBtb2R1bGUgaWYgeW91IGRvLgoJCgkuUEFSQU1FVEVSIFdvcmtpbmdEaXJlY3RvcnkKCQlUaGUgcm9vdCBmb2xkZXIgdG8gd29yayBmcm9tLgoJCgkuUEFSQU1FVEVSIFJlcG9zaXRvcnkKCQlUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeSB0byB1c2UgZm9yIGdhdGhlcmluZyBkZXBlbmRlbmNpZXMgZnJvbS4KIz4KcGFyYW0gKAoJJFdvcmtpbmdEaXJlY3RvcnkgPSAiJCgkZW52OlNZU1RFTV9ERUZBVUxUV09SS0lOR0RJUkVDVE9SWSlcX8O+bmFtZcO+IiwKCQoJJFJlcG9zaXRvcnkgPSAnUFNHYWxsZXJ5JywKCglbc3dpdGNoXQoJJEluY2x1ZGVBWgopCgokbW9kdWxlTmFtZSA9ICfDvm5hbWXDvicKCiMgUHJlcGFyZSBQYXRocwpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJDcmVhdGluZyB3b3JraW5nIGZvbGRlcnMiCiRtb2R1bGVSb290ID0gSm9pbi1QYXRoIC1QYXRoICRXb3JraW5nRGlyZWN0b3J5IC1DaGlsZFBhdGggJ3B1Ymxpc2gnCiR3b3JraW5nUm9vdCA9IE5ldy1JdGVtIC1QYXRoICRXb3JraW5nRGlyZWN0b3J5IC1OYW1lICd3b3JraW5nJyAtSXRlbVR5cGUgRGlyZWN0b3J5CiRtb2R1bGVzRm9sZGVyID0gTmV3LUl0ZW0gLVBhdGggJHdvcmtpbmdSb290LkZ1bGxOYW1lIC1OYW1lIE1vZHVsZXMgLUl0ZW1UeXBlIERpcmVjdG9yeQoKIyBGaWxsIG91dCB0aGUgbW9kdWxlcyBmb2xkZXIKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiVHJhbnNmZXJpbmcgYnVpbHQgbW9kdWxlIGRhdGEgaW50byB3b3JraW5nIGRpcmVjdG9yeSIKQ29weS1JdGVtIC1QYXRoICIkbW9kdWxlUm9vdFwkbW9kdWxlTmFtZSIgLURlc3RpbmF0aW9uICRtb2R1bGVzRm9sZGVyLkZ1bGxOYW1lIC1SZWN1cnNlIC1Gb3JjZQpmb3JlYWNoICgkZGVwZW5kZW5jeSBpbiAoSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJG1vZHVsZVJvb3RcJG1vZHVsZU5hbWVcJG1vZHVsZU5hbWUucHNkMSIpLlJlcXVpcmVkTW9kdWxlcykKewoJJHBhcmFtID0gQHsKCQlSZXBvc2l0b3J5ID0gJFJlcG9zaXRvcnkKCQlOYW1lCSAgID0gJGRlcGVuZGVuY3kuTW9kdWxlTmFtZQoJCVBhdGgJICAgPSAkbW9kdWxlc0ZvbGRlci5GdWxsTmFtZQoJfQoJaWYgKCRkZXBlbmRlbmN5IC1pcyBbc3RyaW5nXSkgeyAkcGFyYW1bJ05hbWUnXSA9ICRkZXBlbmRlbmN5IH0KCWlmICgkZGVwZW5kZW5jeS5SZXF1aXJlZFZlcnNpb24pCgl7CgkJJHBhcmFtWydSZXF1aXJlZFZlcnNpb24nXSA9ICRkZXBlbmRlbmN5LlJlcXVpcmVkVmVyc2lvbgoJfQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiUHJlcGFyaW5nIERlcGVuZGVuY3k6ICQoJHBhcmFtWydOYW1lJ10pIgoJU2F2ZS1Nb2R1bGUgQHBhcmFtCn0KCiMgR2VuZXJhdGUgZnVuY3Rpb24gY29uZmlndXJhdGlvbgpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICdHZW5lcmF0aW5nIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24nCiRydW5UZW1wbGF0ZSA9IEdldC1Db250ZW50IC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXHJ1bi5wczEiIC1SYXcKZm9yZWFjaCAoJGZ1bmN0aW9uU291cmNlRmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkbW9kdWxlUm9vdClcJG1vZHVsZU5hbWVcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsdGVyICcqLnBzMScpKQp7CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICIgIFByb2Nlc3NpbmcgZnVuY3Rpb246ICRmdW5jdGlvblNvdXJjZUZpbGUiCgkkY29uZGVuc2VkTmFtZSA9ICRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUgLXJlcGxhY2UgJy0nLCAnJwoJJGZ1bmN0aW9uRm9sZGVyID0gTmV3LUl0ZW0gLVBhdGggJHdvcmtpbmdSb290LkZ1bGxOYW1lIC1OYW1lICRjb25kZW5zZWROYW1lIC1JdGVtVHlwZSBEaXJlY3RvcnkKCQoJI3JlZ2lvbiBMb2FkIE92ZXJyaWRlcwoJJG92ZXJyaWRlID0gQHsgfQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHNkMSIpCgl7CgkJJG92ZXJyaWRlID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHNkMSIKCX0KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5wc2QxIikKCXsKCQkkb3ZlcnJpZGUgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkY29uZGVuc2VkTmFtZSkucHNkMSIKCX0KCSNlbmRyZWdpb24gTG9hZCBPdmVycmlkZXMKCQoJI3JlZ2lvbiBDcmVhdGUgRnVuY3Rpb24gQ29uZmlndXJhdGlvbgoJJHJlc3RNZXRob2RzID0gJ2dldCcsICdwb3N0JwoJaWYgKCRvdmVycmlkZS5SZXN0TWV0aG9kcykgeyAkcmVzdE1ldGhvZHMgPSAkb3ZlcnJpZGUuUmVzdE1ldGhvZHMgfQoJCglTZXQtQ29udGVudCAtUGF0aCAiJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXGZ1bmN0aW9uLmpzb24iIC1WYWx1ZSBAIgp7CiAgICAiYmluZGluZ3MiOiBbCiAgICAgICAgewogICAgICAgICJhdXRoTGV2ZWwiOiAiZnVuY3Rpb24iLAogICAgICAgICJ0eXBlIjogImh0dHBUcmlnZ2VyIiwKICAgICAgICAiZGlyZWN0aW9uIjogImluIiwKICAgICAgICAibmFtZSI6ICJSZXF1ZXN0IiwKICAgICAgICAibWV0aG9kcyI6IFsKICAgICAgICAgICAgIiQoJHJlc3RNZXRob2RzIC1qb2luICJgIiwKICAgICAgICAgICAgYCIiKSIKICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgInR5cGUiOiAiaHR0cCIsCiAgICAgICAgImRpcmVjdGlvbiI6ICJvdXQiLAogICAgICAgICJuYW1lIjogIlJlc3BvbnNlIgogICAgICAgIH0KICAgIF0sCiAgICAiZGlzYWJsZWQiOiBmYWxzZQp9CiJACgkjZW5kcmVnaW9uIENyZWF0ZSBGdW5jdGlvbiBDb25maWd1cmF0aW9uCgkKCSNyZWdpb24gT3ZlcnJpZGUgRnVuY3Rpb24gQ29uZmlndXJhdGlvbgoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkuanNvbiIpCgl7CgkJQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5qc29uIiAtRGVzdGluYXRpb24gIiQoJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lKVxmdW5jdGlvbi5qc29uIiAtRm9yY2UKCX0KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5qc29uIikKCXsKCQlDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5qc29uIiAtRGVzdGluYXRpb24gIiQoJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lKVxmdW5jdGlvbi5qc29uIiAtRm9yY2UKCX0KCSNlbmRyZWdpb24gT3ZlcnJpZGUgRnVuY3Rpb24gQ29uZmlndXJhdGlvbgoJCgkjIEdlbmVyYXRlIHRoZSBydW4ucHMxIGZpbGUKCSRydW5UZXh0ID0gJHJ1blRlbXBsYXRlIC1yZXBsYWNlICclZnVuY3Rpb25uYW1lJScsICRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUKCSRydW5UZXh0IHwgU2V0LUNvbnRlbnQgLVBhdGggIiQoJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lKVxydW4ucHMxIiAtRW5jb2RpbmcgVVRGOAp9CgojIFRyYW5zZmVyIGNvbW1vbiBmaWxlcwpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJUcmFuc2ZlcmluZyBjb3JlIGZ1bmN0aW9uIGRhdGEiCmlmICgkSW5jbHVkZUFaKQp7CglDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcaG9zdC1hei5qc29uIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdyb290LkZ1bGxOYW1lKVxob3N0Lmpzb24iCglDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNccmVxdWlyZW1lbnRzLnBzZDEiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXCIKfQplbHNlCnsKCUNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xob3N0Lmpzb24iIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXCIKfQpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcbG9jYWwuc2V0dGluZ3MuanNvbiIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5ncm9vdC5GdWxsTmFtZSlcIgoKIyBCdWlsZCB0aGUgcHJvZmlsZSBmaWxlCiR0ZXh0ID0gQCgpCiR0ZXh0ICs9IEdldC1Db250ZW50IC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXHByb2ZpbGUucHMxIiAtUmF3CmZvcmVhY2ggKCRmdW5jdGlvbkZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNccHJvZmlsZUZ1bmN0aW9ucyIgLVJlY3Vyc2UpKQp7CgkkdGV4dCArPSBHZXQtQ29udGVudCAtUGF0aCAkZnVuY3Rpb25GaWxlLkZ1bGxOYW1lIC1SYXcKfQokdGV4dCAtam9pbiAiYG5gbiIgfCBTZXQtQ29udGVudCAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXHByb2ZpbGUucHMxIgoKIyBaaXAgSXQKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiQ3JlYXRpbmcgZnVuY3Rpb24gYXJjaGl2ZSBpbiAnJCgkV29ya2luZ0RpcmVjdG9yeSlcJG1vZHVsZU5hbWUuemlwJyIKQ29tcHJlc3MtQXJjaGl2ZSAtUGF0aCAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXCoiIC1EZXN0aW5hdGlvblBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXCRtb2R1bGVOYW1lLnppcCIgLUZvcmNlAQlvAAAACXAAAAAGcQAAABh2c3RzLXBhY2thZ2VGdW5jdGlvbi5wczEGcgAAADkvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9idWlsZC92c3RzLXBhY2thZ2VGdW5jdGlvbi5wczEJBgAAAAl0AAAACXUAAAABRAAAAA8AAAAGdgAAALAGcGFyYW0gKAogICAgW3N0cmluZ10KICAgICRSZXBvc2l0b3J5ID0gJ1BTR2FsbGVyeScKKQoKJG1vZHVsZXMgPSBAKCJQZXN0ZXIiLCAiUFNGcmFtZXdvcmsiLCAiUFNNb2R1bGVEZXZlbG9wbWVudCIsICJQU1NjcmlwdEFuYWx5emVyIikKCiMgQXV0b21hdGljYWxseSBhZGQgbWlzc2luZyBkZXBlbmRlbmNpZXMKJGRhdGEgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkUFNTY3JpcHRSb290XC4uXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxIgpmb3JlYWNoICgkZGVwZW5kZW5jeSBpbiAkZGF0YS5SZXF1aXJlZE1vZHVsZXMpIHsKICAgIGlmICgkZGVwZW5kZW5jeSAtaXMgW3N0cmluZ10pIHsKICAgICAgICBpZiAoJG1vZHVsZXMgLWNvbnRhaW5zICRkZXBlbmRlbmN5KSB7IGNvbnRpbnVlIH0KICAgICAgICAkbW9kdWxlcyArPSAkZGVwZW5kZW5jeQogICAgfQogICAgZWxzZSB7CiAgICAgICAgaWYgKCRtb2R1bGVzIC1jb250YWlucyAkZGVwZW5kZW5jeS5Nb2R1bGVOYW1lKSB7IGNvbnRpbnVlIH0KICAgICAgICAkbW9kdWxlcyArPSAkZGVwZW5kZW5jeS5Nb2R1bGVOYW1lCiAgICB9Cn0KCmZvcmVhY2ggKCRtb2R1bGUgaW4gJG1vZHVsZXMpIHsKICAgIFdyaXRlLUhvc3QgIkluc3RhbGxpbmcgJG1vZHVsZSIgLUZvcmVncm91bmRDb2xvciBDeWFuCiAgICBJbnN0YWxsLU1vZHVsZSAkbW9kdWxlIC1Gb3JjZSAtU2tpcFB1Ymxpc2hlckNoZWNrIC1SZXBvc2l0b3J5ICRSZXBvc2l0b3J5CiAgICBJbXBvcnQtTW9kdWxlICRtb2R1bGUgLUZvcmNlIC1QYXNzVGhydQp9AQl3AAAACXgAAAAGeQAAABZ2c3RzLXByZXJlcXVpc2l0ZXMucHMxBnoAAAA3L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vYnVpbGQvdnN0cy1wcmVyZXF1aXNpdGVzLnBzMQkGAAAACXwAAAAJfQAAAAFFAAAADwAAAAZ+AAAA1QIjIEd1aWRlIGZvciBhdmFpbGFibGUgdmFyaWFibGVzIGFuZCB3b3JraW5nIHdpdGggc2VjcmV0czoKIyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy92c3RzL2J1aWxkLXJlbGVhc2UvY29uY2VwdHMvZGVmaW5pdGlvbnMvYnVpbGQvdmFyaWFibGVzP3RhYnM9cG93ZXJzaGVsbAoKIyBOZWVkcyB0byBlbnN1cmUgdGhpbmdzIGFyZSBEb25lIFJpZ2h0IGFuZCBvbmx5IGxlZ2FsIGNvbW1pdHMgdG8gbWFzdGVyIGdldCBidWlsdAoKIyBSdW4gaW50ZXJuYWwgcGVzdGVyIHRlc3RzCiYgIiRQU1NjcmlwdFJvb3RcLi5cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0c1xwZXN0ZXIucHMxIgEJfwAAAAmAAAAABoEAAAARdnN0cy12YWxpZGF0ZS5wczEGggAAADIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9idWlsZC92c3RzLXZhbGlkYXRlLnBzMQkGAAAACYQAAAAJhQAAAAFGAAAAAQAAAAmGAAAABocAAAADYmluBogAAAA4L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9iaW4JBgAAAAmKAAAACYsAAAABRwAAAAEAAAAJjAAAAAaNAAAABWVuLXVzBo4AAAA6L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9lbi11cwkGAAAACZAAAAAJkQAAAAFIAAAAAQAAAAmSAAAABpMAAAAJZnVuY3Rpb25zBpQAAAA+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9mdW5jdGlvbnMJBgAAAAmWAAAACZcAAAABSQAAAAEAAAAJmAAAAAaZAAAACGludGVybmFsBpoAAAA9L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbAkGAAAACZwAAAAJnQAAAAFKAAAAAQAAAAmeAAAABp8AAAAjU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24GoAAAAFgvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uCQYAAAAJogAAAAmjAAAAAUsAAAABAAAACaQAAAAGpQAAAAV0ZXN0cwamAAAAOi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMJBgAAAAmoAAAACakAAAABTAAAAAEAAAAJqgAAAAarAAAAA3htbAasAAAAOC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74veG1sCQYAAAAJrgAAAAmvAAAAAU0AAAAPAAAABrAAAABqIyBDaGFuZ2Vsb2cKIyMgMS4wLjAgKMO+IWR5bmFtaWNzY3JpcHRfODQ0MTEyIcO+KQogLSBOZXc6IFNvbWUgU3R1ZmYKIC0gVXBkOiBNb2FyIFN0dWZmCiAtIEZpeDogTXVjaCBTdHVmZgEJsQAAAAmyAAAABrMAAAAMY2hhbmdlbG9nLm1kBrQAAABBL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9jaGFuZ2Vsb2cubWQJBgAAAAm2AAAACbcAAAABTgAAAA8AAAAGuAAAAP4HIyBQU0ZNb2R1bGUgZ3VpZGFuY2UKClRoaXMgaXMgYSBmaW5pc2hlZCBtb2R1bGUgbGF5b3V0IG9wdGltaXplZCBmb3IgaW1wbGVtZW50aW5nIHRoZSBQU0ZyYW1ld29yay4KCklmIHlvdSBkb24ndCBjYXJlIHRvIGRlYWwgd2l0aCB0aGUgZGV0YWlscywgdGhpcyBpcyB3aGF0IHlvdSBuZWVkIHRvIGRvIHRvIGdldCBzdGFydGVkIHNlZWluZyByZXN1bHRzOgoKIC0gQWRkIHRoZSBmdW5jdGlvbnMgeW91IHdhbnQgdG8gcHVibGlzaCB0byBgL2Z1bmN0aW9ucy9gCiAtIFVwZGF0ZSB0aGUgYEZ1bmN0aW9uc1RvRXhwb3J0YCBub2RlIGluIHRoZSBtb2R1bGUgbWFuaWZlc3QgKMO+bmFtZcO+LnBzZDEpLiBBbGwgZnVuY3Rpb25zIHlvdSB3YW50IHRvIHB1Ymxpc2ggc2hvdWxkIGJlIGluIGEgbGlzdC4KIC0gQWRkIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgdGhlIHVzZXIgc2hvdWxkIG5vdCBzZWUgdG8gYC9pbnRlcm5hbC9mdW5jdGlvbnMvYAogCiAjIyBQYXRoIFdhcm5pbmcKIAogPiBJZiB5b3Ugd2FudCB5b3VyIG1vZHVsZSB0byBiZSBjb21wYXRpYmxlIHdpdGggTGludXggYW5kIE1hY09TLCBrZWVwIGluIG1pbmQgdGhhdCB0aG9zZSBPUyBhcmUgY2FzZSBzZW5zaXRpdmUgZm9yIHBhdGhzIGFuZCBmaWxlcy4KIAogYEltcG9ydC1Nb2R1bGVGaWxlYCBpcyBwcmVjb25maWd1cmVkIHRvIHJlc29sdmUgdGhlIHBhdGggb2YgdGhlIGZpbGVzIHNwZWNpZmllZCwgc28gaXQgd2lsbCByZWxpYWJseSBjb252ZXJ0IHdlaXJkIHBhdGggbm90YXRpb25zIHRoZSBzeXN0ZW0gY2FuJ3QgaGFuZGxlLgogQ29udGVudCBpbXBvcnRlZCB0aHJvdWdoIHRoYXQgY29tbWFuZCB0aHVzIG5lZWQgbm90IG1pbmQgdGhlIHBhdGggc2VwYXJhdG9yLgogSWYgeW91IHdhbnQgdG8gbWFrZSBzdXJlIHlvdXIgY29kZSB0b28gd2lsbCBzdXJ2aXZlIE9TLXNwZWNpZmljIHBhdGggbm90YXRpb25zLCBnZXQgdXNlZCB0byB1c2luZyBgUmVzb2x2ZS1wYXRoYCBvciB0aGUgbW9yZSBwb3dlcmZ1bCBgUmVzb2x2ZS1QU0ZQYXRoYC4BCbkAAAAJugAAAAa7AAAACXJlYWRtZS5tZAa8AAAAPi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vcmVhZG1lLm1kCQYAAAAJvgAAAAm/AAAAAU8AAAAPAAAABsAAAACJFUB7CgkjIFNjcmlwdCBtb2R1bGUgb3IgYmluYXJ5IG1vZHVsZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hbmlmZXN0CglSb290TW9kdWxlICAgICAgICA9ICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzbTEnCgoJIyBWZXJzaW9uIG51bWJlciBvZiB0aGlzIG1vZHVsZS4KCU1vZHVsZVZlcnNpb24gICAgID0gJzEuMC4wJwoKCSMgSUQgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIG1vZHVsZQoJR1VJRCAgICAgICAgICAgICAgPSAnw74hZ3VpZFJvb3RNb2R1bGUhw74nCgoJIyBBdXRob3Igb2YgdGhpcyBtb2R1bGUKCUF1dGhvciAgICAgICAgICAgID0gJ8O+YXV0aG9yw74nCgoJIyBDb21wYW55IG9yIHZlbmRvciBvZiB0aGlzIG1vZHVsZQoJQ29tcGFueU5hbWUgICAgICAgPSAnw75jb21wYW55w74nCgoJIyBDb3B5cmlnaHQgc3RhdGVtZW50IGZvciB0aGlzIG1vZHVsZQoJQ29weXJpZ2h0ICAgICAgICAgPSAnQ29weXJpZ2h0IChjKSDDviF5ZWFyIcO+IMO+YXV0aG9yw74nCgoJIyBEZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGlzIG1vZHVsZQoJRGVzY3JpcHRpb24gICAgICAgPSAnw75kZXNjcmlwdGlvbsO+JwoKCSMgTWluaW11bSB2ZXJzaW9uIG9mIHRoZSBXaW5kb3dzIFBvd2VyU2hlbGwgZW5naW5lIHJlcXVpcmVkIGJ5IHRoaXMgbW9kdWxlCglQb3dlclNoZWxsVmVyc2lvbiA9ICc1LjAnCgoJIyBNb2R1bGVzIHRoYXQgbXVzdCBiZSBpbXBvcnRlZCBpbnRvIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgcHJpb3IgdG8gaW1wb3J0aW5nIHRoaXMgbW9kdWxlCglOZXN0ZWRNb2R1bGVzICAgICA9IEAoCgkJJy4vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNkMScKCSkKCgkjIE1vZHVsZXMgdGhhdCBtdXN0IGJlIGltcG9ydGVkIGludG8gdGhlIGdsb2JhbCBlbnZpcm9ubWVudCBwcmlvciB0byBpbXBvcnRpbmcKCSMgdGhpcyBtb2R1bGUKCVJlcXVpcmVkTW9kdWxlcyAgID0gQCgKCQlAeyBNb2R1bGVOYW1lID0gJ1BTRnJhbWV3b3JrJzsgTW9kdWxlVmVyc2lvbiA9ICfDviFwc2ZyYW1ld29yayHDvicgfQoJCUB7IE1vZHVsZU5hbWUgPSAnTWljcm9zb2Z0LlBvd2Vyc2hlbGwuU2VjcmV0TWFuYWdlbWVudCc7IE1vZHVsZVZlcnNpb24gPSAnw74hc2VjcmV0TWFuYWdlbWVudFZlcnNpb24hw74nIH0KCSkKCgkjIEFzc2VtYmxpZXMgdGhhdCBtdXN0IGJlIGxvYWRlZCBwcmlvciB0byBpbXBvcnRpbmcgdGhpcyBtb2R1bGUKCSMgUmVxdWlyZWRBc3NlbWJsaWVzID0gQCgnYmluXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uZGxsJykKCgkjIFR5cGUgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQoJIyBUeXBlc1RvUHJvY2VzcyA9IEAoJ3htbFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LlR5cGVzLnBzMXhtbCcpCgoJIyBGb3JtYXQgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQoJIyBGb3JtYXRzVG9Qcm9jZXNzID0gQCgneG1sXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRm9ybWF0LnBzMXhtbCcpCgoJIyBGdW5jdGlvbnMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUKCUZ1bmN0aW9uc1RvRXhwb3J0ID0gJycKCgkjIENtZGxldHMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUKCUNtZGxldHNUb0V4cG9ydCAgID0gJycKCgkjIFZhcmlhYmxlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJVmFyaWFibGVzVG9FeHBvcnQgPSAnJwoKCSMgQWxpYXNlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJQWxpYXNlc1RvRXhwb3J0ICAgPSAnJwoKCSMgTGlzdCBvZiBhbGwgbW9kdWxlcyBwYWNrYWdlZCB3aXRoIHRoaXMgbW9kdWxlCglNb2R1bGVMaXN0ICAgICAgICA9IEAoKQoKCSMgTGlzdCBvZiBhbGwgZmlsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQoJRmlsZUxpc3QgICAgICAgICAgPSBAKCkKCgkjIFByaXZhdGUgZGF0YSB0byBwYXNzIHRvIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGluIE1vZHVsZVRvUHJvY2Vzcy4gVGhpcyBtYXkgYWxzbyBjb250YWluIGEgUFNEYXRhIGhhc2h0YWJsZSB3aXRoIGFkZGl0aW9uYWwgbW9kdWxlIG1ldGFkYXRhIHVzZWQgYnkgUG93ZXJTaGVsbC4KCVByaXZhdGVEYXRhICAgICAgID0gQHsKCgkJI1N1cHBvcnQgZm9yIFBvd2VyU2hlbGxHZXQgZ2FsbGVyaWVzLgoJCVBTRGF0YSA9IEB7CgoJCQkjIFRhZ3MgYXBwbGllZCB0byB0aGlzIG1vZHVsZS4gVGhlc2UgaGVscCB3aXRoIG1vZHVsZSBkaXNjb3ZlcnkgaW4gb25saW5lIGdhbGxlcmllcy4KCQkJIyBUYWdzID0gQCgpCgoJCQkjIEEgVVJMIHRvIHRoZSBsaWNlbnNlIGZvciB0aGlzIG1vZHVsZS4KCQkJIyBMaWNlbnNlVXJpID0gJycKCgkJCSMgQSBVUkwgdG8gdGhlIG1haW4gd2Vic2l0ZSBmb3IgdGhpcyBwcm9qZWN0LgoJCQkjIFByb2plY3RVcmkgPSAnJwoKCQkJIyBBIFVSTCB0byBhbiBpY29uIHJlcHJlc2VudGluZyB0aGlzIG1vZHVsZS4KCQkJIyBJY29uVXJpID0gJycKCgkJCSMgUmVsZWFzZU5vdGVzIG9mIHRoaXMgbW9kdWxlCgkJCSMgUmVsZWFzZU5vdGVzID0gJycKCgkJfSAjIEVuZCBvZiBQU0RhdGEgaGFzaHRhYmxlCgoJfSAjIEVuZCBvZiBQcml2YXRlRGF0YSBoYXNodGFibGUKfQEJwQAAAAnCAAAABsMAAAAeU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxBsQAAABTL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEJBgAAAAnGAAAACccAAAABUAAAAA8AAAAGyAAAALEaJHNjcmlwdDpNb2R1bGVSb290ID0gJFBTU2NyaXB0Um9vdAokc2NyaXB0Ok1vZHVsZVZlcnNpb24gPSAoSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSIpLk1vZHVsZVZlcnNpb24KCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBkb3Rzb3VyY2luZyB3YXMgZW5mb3JjZWQKJHNjcmlwdDpkb0RvdFNvdXJjZSA9IEdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgw75uYW1lw74uSW1wb3J0LkRvRG90U291cmNlIC1GYWxsYmFjayAkZmFsc2UKaWYgKCTDvm5hbWXDvl9kb3Rzb3VyY2Vtb2R1bGUpIHsgJHNjcmlwdDpkb0RvdFNvdXJjZSA9ICR0cnVlIH0KCjwjCk5vdGUgb24gUmVzb2x2ZS1QYXRoOgpBbGwgcGF0aHMgYXJlIHNlbnQgdGhyb3VnaCBSZXNvbHZlLVBhdGgvUmVzb2x2ZS1QU0ZQYXRoIGluIG9yZGVyIHRvIGNvbnZlcnQgdGhlbSB0byB0aGUgY29ycmVjdCBwYXRoIHNlcGFyYXRvci4KVGhpcyBhbGxvd3MgaWdub3JpbmcgcGF0aCBzZXBhcmF0b3JzIHRocm91Z2hvdXQgdGhlIGltcG9ydCBzZXF1ZW5jZSwgd2hpY2ggY291bGQgb3RoZXJ3aXNlIGNhdXNlIHRyb3VibGUgZGVwZW5kaW5nIG9uIE9TLgpSZXNvbHZlLVBhdGggY2FuIG9ubHkgYmUgdXNlZCBmb3IgcGF0aHMgdGhhdCBhbHJlYWR5IGV4aXN0LCBSZXNvbHZlLVBTRlBhdGggY2FuIGFjY2VwdCB0aGF0IHRoZSBsYXN0IGxlYWYgbXkgbm90IGV4aXN0LgpUaGlzIGlzIGltcG9ydGFudCB3aGVuIHRlc3RpbmcgZm9yIHBhdGhzLgojPgoKIyBEZXRlY3Qgd2hldGhlciBhdCBzb21lIGxldmVsIGxvYWRpbmcgaW5kaXZpZHVhbCBtb2R1bGUgZmlsZXMsIHJhdGhlciB0aGFuIHRoZSBjb21waWxlZCBtb2R1bGUgd2FzIGVuZm9yY2VkCiRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5JbmRpdmlkdWFsRmlsZXMgLUZhbGxiYWNrICRmYWxzZQppZiAoJMO+bmFtZcO+X2ltcG9ydEluZGl2aWR1YWxGaWxlcykgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQppZiAoVGVzdC1QYXRoIChSZXNvbHZlLVBTRlBhdGggLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVwuLlwuZ2l0IiAtU2luZ2xlSXRlbSAtTmV3Q2hpbGQpKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9CmlmICgiPHdhcyBub3QgY29tcGlsZWQ+IiAtZXEgJzx3YXMgbm90IGNvbXBpbGVkPicpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0KCmZ1bmN0aW9uIEltcG9ydC1Nb2R1bGVGaWxlCnsKCTwjCgkJLlNZTk9QU0lTCgkJCUxvYWRzIGZpbGVzIGludG8gdGhlIG1vZHVsZSBvbiBtb2R1bGUgaW1wb3J0LgoKCQkuREVTQ1JJUFRJT04KCQkJVGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLgoJCQlJdCBzaG91bGQgYWx3YXlzIGJlIGRvdHNvdXJjZWQgaXRzZWxmLCBpbiBvcmRlciB0byBwcm9wZXIgZnVuY3Rpb24uCgoJCQlUaGlzIHByb3ZpZGVzIGEgY2VudHJhbCBsb2NhdGlvbiB0byByZWFjdCB0byBmaWxlcyBiZWluZyBpbXBvcnRlZCwgaWYgbGF0ZXIgZGVzaXJlZAoKCQkuUEFSQU1FVEVSIFBhdGgKCQkJVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gbG9hZAoKCQkuRVhBTVBMRQoJCQlQUyBDOlw+IC4gSW1wb3J0LU1vZHVsZUZpbGUgLUZpbGUgJGZ1bmN0aW9uLkZ1bGxOYW1lCgoJCQlJbXBvcnRzIHRoZSBmaWxlIHN0b3JlZCBpbiAkZnVuY3Rpb24gYWNjb3JkaW5nIHRvIGltcG9ydCBwb2xpY3kKCSM+CglbQ21kbGV0QmluZGluZygpXQoJUGFyYW0gKAoJCVtzdHJpbmddCgkJJFBhdGgKCSkKCgkkcmVzb2x2ZWRQYXRoID0gJEV4ZWN1dGlvbkNvbnRleHQuU2Vzc2lvblN0YXRlLlBhdGguR2V0UmVzb2x2ZWRQU1BhdGhGcm9tUFNQYXRoKCRQYXRoKS5Qcm92aWRlclBhdGgKCWlmICgkZG9Eb3RTb3VyY2UpIHsgLiAkcmVzb2x2ZWRQYXRoIH0KCWVsc2UgeyAkRXhlY3V0aW9uQ29udGV4dC5JbnZva2VDb21tYW5kLkludm9rZVNjcmlwdCgkZmFsc2UsIChbc2NyaXB0YmxvY2tdOjpDcmVhdGUoW2lvLmZpbGVdOjpSZWFkQWxsVGV4dCgkcmVzb2x2ZWRQYXRoKSkpLCAkbnVsbCwgJG51bGwpIH0KfQoKI3JlZ2lvbiBMb2FkIGluZGl2aWR1YWwgZmlsZXMKaWYgKCRpbXBvcnRJbmRpdmlkdWFsRmlsZXMpCnsKCSMgRXhlY3V0ZSBQcmVpbXBvcnQgYWN0aW9ucwoJZm9yZWFjaCAoJHBhdGggaW4gKCYgIiRNb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNccHJlaW1wb3J0LnBzMSIpKSB7CgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkcGF0aAoJfQoKCSMgSW1wb3J0IGFsbCBpbnRlcm5hbCBmdW5jdGlvbnMKCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcZnVuY3Rpb25zIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpCgl7CgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUKCX0KCgkjIEltcG9ydCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zIHdoaWNoIGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUgRXh0ZW5zaW9uIGFuZCB0aGUgTWFpbi1Nb2R1bGUKCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cZnVuY3Rpb25zLnNoYXJlZGludGVybmFsIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpIHsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQoJfQoKCSMgSW1wb3J0IGFsbCBwdWJsaWMgZnVuY3Rpb25zCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGZ1bmN0aW9ucyIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKQoJewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lCgl9CgoJIyBFeGVjdXRlIFBvc3RpbXBvcnQgYWN0aW9ucwoJZm9yZWFjaCAoJHBhdGggaW4gKCYgIiRNb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEiKSkgewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJHBhdGgKCX0KCgkjIEVuZCBpdCBoZXJlLCBkbyBub3QgbG9hZCBjb21waWxlZCBjb2RlIGJlbG93CglyZXR1cm4KfQojZW5kcmVnaW9uIExvYWQgaW5kaXZpZHVhbCBmaWxlcwoKI3JlZ2lvbiBMb2FkIGNvbXBpbGVkIGNvZGUKIjxjb21waWxlIGNvZGUgaW50byBoZXJlPiIKI2VuZHJlZ2lvbiBMb2FkIGNvbXBpbGVkIGNvZGUBCckAAAAJygAAAAbLAAAAHlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNtMQbMAAAAUy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc20xCQYAAAAJzgAAAAnPAAAAAVIAAAAPAAAABtAAAADqGgoKW0NtZGxldEJpbmRpbmcoKV0KcGFyYW0oCiAgICAkVmF1bHRDb25maWcgPSAnw75uYW1lw75EZW1vJywKICAgIFtzd2l0Y2hdJE5vV2F0Y2hlcgopCiR2YXVsdHNQYXJhbWV0ZXIgPSBAewogICAgw75uYW1lw75EZW1vID0KICAgIEB7CiAgICAgICAgdmF1bHROYW1lID0gIsO+bmFtZcO+RGVtbyIKICAgICAgICBzZXJ2ZXIgICAgPSAibG9jYWxob3N0IgogICAgICAgIFVzZXJOYW1lICA9ICRlbnY6VVNFUk5BTUUKICAgICAgICBwYXNzd29yZCAgPSBDb252ZXJ0VG8tU2VjdXJlU3RyaW5nIC1Bc1BsYWluVGV4dCAtU3RyaW5nICJUSElTX1NIT1VMREJFX1NXQVBQRUQiICAjIFBsZWFzZSB1c2Ugc29tZXRoaW5nIGVsc2UgbGlrZSAnR2V0LUNyZWRlbnRpYWwnIDstKQogICAgfQp9CldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgImAkUFNTY3JpcHRSb290PSRQU1NjcmlwdFJvb3QiCiMgJFBTU2NyaXB0Um9vdCBoYXMgdG8gYmUgcHJvdmlkZWQgYXMgYSBwYXJhbWV0ZXIgYXMgaXQncyBub3QgYXZhaWxhYmxlIGluIHRoZSBzY3JpcHRibG9jawpFbnRlci1SU1Nlc3Npb24gLU9uU3RhcnRBcmd1bWVudExpc3QgQCgkdmF1bHRzUGFyYW1ldGVyLiRWYXVsdENvbmZpZywgJFBTU2NyaXB0Um9vdCkgLW9uc3RhcnQgewogICAgcGFyYW0oJHZhdWx0UGFyYW0sJFBTU0MpCiAgICAkdnAgPSAkdmF1bHRQYXJhbQogICAgJHZhdWx0TmFtZSA9ICR2YXVsdFBhcmFtLnZhdWx0TmFtZQogICAgJG15TmV3U2VjcmV0ID0gQ29udmVydFRvLVNlY3VyZVN0cmluZyAiJChHZXQtRGF0ZSkiIC1Bc1BsYWluVGV4dAogICAgW3BzY3JlZGVudGlhbF0kbXlOZXdDcmVkID0gTmV3LU9iamVjdCBTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlBTQ3JlZGVudGlhbCAoJ1NvbWVVc2VyJywgJG15TmV3U2VjcmV0KQogICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAiUmVtYmVyOiBZb3UgY2FuIGFjY2VzcyB0aGUgZm9sbG93aW5nIGRlZmF1bHQgdmFyaWFibGVzOiIKICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgKEB7CiAgICAgICAgICAgICckdnAnICAgICAgICAgID0gIkN1cnJlbnRseSB1c2VkIHZhdWx0IGNvbmZpZyBwYXJhbWV0ZXJzIgogICAgICAgICAgICAnJHZhdWx0TmFtZScgICA9ICJUaGUgY3VycmVudCBjb25maWd1cmVkIHZhdWx0IgogICAgICAgICAgICAnJG15TmV3U2VjcmV0JyA9ICJBIG5ldyBTZWN1cmVTdHJpbmcgY29udGFpbmluZyB0aGUgY3VycmVudCB0aW1lIgogICAgICAgICAgICAnJG15TmV3Q3JlZCcgICA9ICJBIG5ldyBDcmVkZW50aWFsIHVzaW5nIGAkbXlOZXdTZWNyZXQiCiAgICAgICAgfSB8IEZvcm1hdC1UYWJsZSAtV3JhcCB8IE91dC1TdHJpbmcpCiAgICAkYWRkaXRpb25hbFBhcmFtZXRlciA9ICR2YXVsdFBhcmFtIHwgQ29udmVydFRvLVBTRkhhc2h0YWJsZSAtRXhjbHVkZSB2YXVsdE5hbWUsIHBhc3N3b3JkCiAgICBXcml0ZS1QU0ZNZXNzYWdlICJSZWdpc3RlciBWYXVsdCAkdmF1bHROYW1lIHdpdGggYWRkaXRpb25hbCBwYXJhbWV0ZXJzICQoJGFkZGl0aW9uYWxQYXJhbWV0ZXJ8Q29udmVydFRvLUpzb24gLUNvbXByZXNzICApIgogICAgJG1vZHVsZVBhdGggPSBqb2luLXBhdGggKHNwbGl0LXBhdGggJFBTU0MpICJTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+IgogICAgJG1hbmlmZXN0UGF0aCA9IEpvaW4tUGF0aCAkbW9kdWxlUGF0aCAiU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxIgogICAgV3JpdGUtUFNGTWVzc2FnZSAiVXNpbmcgbW9kdWxlUGF0aCAnJG1vZHVsZVBhdGgnIgogICAgSW1wb3J0LU1vZHVsZSAtZm9yY2UgJG1hbmlmZXN0UGF0aCAtVmVyYm9zZQogICAgUmVnaXN0ZXItU2VjcmV0VmF1bHQgLU5hbWUgJHZhdWx0TmFtZSAtTW9kdWxlTmFtZSAkbWFuaWZlc3RQYXRoIC1WYXVsdFBhcmFtZXRlcnMgJGFkZGl0aW9uYWxQYXJhbWV0ZXIKICAgIFVubG9jay1TZWNyZXRWYXVsdCAtTmFtZSAkdmF1bHROYW1lIC1QYXNzd29yZCAkdmF1bHRQYXJhbS5wYXNzd29yZCAtVmVyYm9zZQogICAgaWYgKCROb1dhdGNoZXIpIHsKICAgICAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0ICJVc2UgJ1Jlc3RhcnQtUlNTZXNzaW9uJyB0byByZXN0YXJ0ICB0aGUgc2Vzc2lvbi4iCiAgICB9CiAgICBlbHNlIHsKICAgICAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0ICJBbnkgRmlsZSBDaGFuZ2Ugd2l0aGluICckbW9kdWxlUGF0aCcgd2lsbCBsZWFkIHRvIGEgcmVzdGFydCBvZiB0aGUgc2Vzc2lvbi4iCiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAiVG8gZGlzYWJsZSB0aGlzIHVzZSAnU3RhcnQtw75uYW1lw75SdW5zcGFjZS5wczEgLU5vV2F0Y2hlciciCiAgICAgICAgU3RhcnQtUlNSZXN0YXJ0RmlsZVdhdGNoZXIgLVBhdGggIiRtb2R1bGVQYXRoIiAtSW5jbHVkZVN1YmRpcmVjdG9yaWVzCiAgICB9CiAgICBAKAogICAgICAgICJFeGFtcGxlIGNvbW1hbmRzIHRvIHRlc3QgdGhlIG5ldyB2YXVsdCAoZm9yIGNvcHknbidwYXN0ZSkiCiAgICAgICAgI1RPRE8gRmlsbCBpbiBsaXZlIG5hbWVzIG9mIGFscmVhZHkgc3RvcmVkIHNlY3JldCBuYW1lcyA7LSkKICAgICAgICAiIyBHZXQtU2VjcmV0IC1WYXVsdCBgJFZhdWx0bmFtZSAtTmFtZSBmb28iCiAgICAgICAgIiMgR2V0LVNlY3JldCAtVmF1bHQgYCRWYXVsdG5hbWUgLU5hbWUgTXlGaXJzdFBhc3N3b3JkIC1WZXJib3NlIgogICAgICAgICIjIEdldC1TZWNyZXRJbmZvIC1WYXVsdCBgJFZhdWx0bmFtZSAtTmFtZSBmb28iCiAgICAgICAgIiMgR2V0LVNlY3JldEluZm8gLVZhdWx0IGAkVmF1bHRuYW1lIC1OYW1lIE15Rmlyc3RQYXNzd29yZCIKICAgICAgICAiIyBTZXQtU2VjcmV0IC1WZXJib3NlIC1WYXVsdCBgJFZhdWx0bmFtZSAtU2VjcmV0IGAkbXlOZXdTZWNyZXQgLU5hbWUgZm9vIgogICAgICAgICIjIFNldC1TZWNyZXQgLVZlcmJvc2UgLVZhdWx0IGAkVmF1bHRuYW1lIC1TZWNyZXQgYCRteU5ld1NlY3JldCAtTmFtZSBIdWJiYSIKICAgICAgICAiIyBTZXQtU2VjcmV0SW5m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AAAABAAAAAYkAQAAFGR5bmFtaWNzY3JpcHRfODQ0MTEyDQMR9AAAAAQAAAAGJQEAAARuYW1lDQMR9gAAAAQAAAAGJgEAAARuYW1lBicBAAAGYXV0aG9yBigBAAAHY29tcGFueQYpAQAAC2Rlc2NyaXB0aW9uEfcAAAAEAAAABioBAAAOZ3VpZFJvb3RNb2R1bGUGKwEAAAR5ZWFyBiwBAAALcHNmcmFtZXdvcmsGLQEAABdzZWNyZXRNYW5hZ2VtZW50VmVyc2lvbhH4AAAABAAAAAYuAQAABG5hbWUNAxH6AAAABAAAAAYvAQAABG5hbWUNAxH8AAAABAAAAAYwAQAABG5hbWUNAxH+AAAABAAAAAYxAQAABG5hbWUNAxEAAQAABAAAAAYyAQAABG5hbWUNAwEHAQAADwAAAAYzAQAA6AIjIGJpbiBmb2xkZXIKClRoZSBiaW4gZm9sZGVyIGV4aXN0cyB0byBzdG9yZSBiaW5hcnkgZGF0YS4gQW5kIHNjcmlwdHMgcmVsYXRlZCB0byB0aGUgdHlwZSBzeXN0ZW0uCgpUaGlzIG1heSBpbmNsdWRlIHlvdXIgb3duIEMjLWJhc2VkIGxpYnJhcnksIHRoaXJkIHBhcnR5IGxpYnJhcmllcyB5b3Ugd2FudCB0byBpbmNsdWRlICh3YXRjaCB0aGUgbGljZW5zZSEpLCBvciBhIHNjcmlwdCBkZWNsYXJpbmcgdHlwZSBhY2NlbGVyYXRvcnMgKGVmZmVjdGl2ZWx5IGFsaWFzZXMgZm9yIC5ORVQgdHlwZXMpCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBUeXBlIEFjY2VsZXJhdG9ycywgc2VlIHRoZSBoZWxwIG9uIFNldC1QU0ZUeXBlQWxpYXMBCTQBAAAJNQEAAAY2AQAACXJlYWRtZS5tZAY3AQAAQi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vYmluL3JlYWRtZS5tZAkGAAAACTkBAAAJOgEAAAEIAQAADwAAAAY7AQAAmwFUT1BJQwoJYWJvdXRfw75uYW1lw74KCQpTSE9SVCBERVNDUklQVElPTgoJRXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgw75uYW1lw74gcG93ZXJzaGVsbCBtb2R1bGUKCQpMT05HIERFU0NSSVBUSU9OCgk8SW5zZXJ0IENvbnRlbnQgaGVyZT4KCktFWVdPUkRTCgnDvm5hbWXDvgEJPAEAAAk9AQAABj4BAAAXYWJvdXRfw75uYW1lw74uaGVscC50eHQGPwEAAFIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2VuLXVzL2Fib3V0X8O+bmFtZcO+LmhlbHAudHh0CQYAAAAJQQEAAAlCAQAAAQkBAAAPAAAABkMBAACZASMgVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBnbywgdGhhdCBhcmUgd3JpdHRlbiBieQojIFdyaXRlLVBTRk1lc3NhZ2UsIFN0b3AtUFNGRnVuY3Rpb24gb3IgdGhlIFBTRnJhbWV3b3JrIHZhbGlkYXRpb24gc2NyaXB0YmxvY2tzCkB7Cgkna2V5JyA9ICdWYWx1ZScKfQEJRAEAAAlFAQAABkYBAAAMc3RyaW5ncy5wc2QxBkcBAABHL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9lbi11cy9zdHJpbmdzLnBzZDEJBgAAAAlJAQAACUoBAAABCgEAAA8AAAAGSwEAAMwBIyBGdW5jdGlvbnMKClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSB0aGUgZnVuY3Rpb25zIGdvLgoKRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4KClRoZSBtb2R1bGUgd2lsbCBwaWNrIHVwIGFsbCAucHMxIGZpbGVzIHJlY3Vyc2l2ZWx5AQlMAQAACU0BAAAGTgEAAAlyZWFkbWUubWQGTwEAAEgvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2Z1bmN0aW9ucy9yZWFkbWUubWQJBgAAAAlRAQAACVIBAAABCwEAAA8AAAAGUwEAAMQOZnVuY3Rpb24gUmVnaXN0ZXItw75mdW5jdGlvblByZWZpeMO+U2VjdXJlVmF1bHQgewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgUmVnaXN0ZXJzIGEgbmV3IFNlY3JldHZhdWx0IG9mIHR5cGUgw75uYW1lw74uCgogICAgLkRFU0NSSVBUSU9OCiAgICBSZWdpc3RlcnMgYSBuZXcgU2VjcmV0dmF1bHQgb2YgdHlwZSDDvm5hbWXDvi4KCiAgICAjVE9ETyBBZGQgcGFyYW1ldGVyIGRlc2NyaXB0aW9uCgogICAgLk5PVEVTCiAgICBHZW5lcmFsIG5vdGVzCiAgICAjPgogICAgW0NtZGxldEJpbmRpbmcoU3VwcG9ydHNTaG91bGRQcm9jZXNzKV0KICAgIHBhcmFtICgKCiAgICAgICAgW3BhcmFtZXRlcihtYW5kYXRvcnkgPSAkdHJ1ZSwgUGFyYW1ldGVyU2V0TmFtZSA9ICJjbWRMaW5lIildCiAgICAgICAgW3N0cmluZ10kVmF1bHROYW1lCiAgICAgICAgIyBUT0RPIGFkZCB5b3VyIHNwZWNpZmljIHBhcmFtZXRlcnMKICAgICkKICAgICMgSW4gb3JkZXIgdG8gcmVnaXN0ZXIgYSB2YXVsdCB5b3UgbmVlZCB0aGUgbW9kdWxlIG5hbWUuIEZvciBkZXYgcHVycG9zZXMKICAgICMgdGhpcyBjb2RlIChzZWUgY29uZmlndXJhdGlvbi5wczEpIGVuYWJsZXMgdGhlIGRldGVjdGlvbiBpZiB0aGUgbW9kdWxlIGlzIGluc3RhbGxlZAogICAgIyBvciB0aGUgUFNEMSBmaWxlIGlzIGltcG9ydGVkIGRpcmVjdGx5LgogICAgJG15TW9kdWxlUGF0aCA9ICIkTW9kdWxlUm9vdFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEiCiAgICAkcHNkRGF0YSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgJG15TW9kdWxlUGF0aAogICAgJHJlZ2lzdGVyUGFyYW0gPSBAewogICAgICAgIE1vZHVsZU5hbWUgICAgICA9IEdldC1QU0ZDb25maWdWYWx1ZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5JbnRlckFjdGl2ZVJlZ2lzdGVyLm1vZHVsZXBhdGgnCiAgICAgICAgTmFtZSAgICAgICAgICAgID0gJFZhdWx0TmFtZQogICAgICAgIFZhdWx0UGFyYW1ldGVycyA9ICRQU0JvdW5kUGFyYW1ldGVycyB8IENvbnZlcnRUby1QU0ZIYXNodGFibGUgLUluaGVyaXQgLUV4Y2x1ZGUgQCgKICAgICAgICAgICAgIyBUT0RPIEluY2x1ZGUgYWxsIGZ1bmN0aW9uIHBhcmFtZXRlciBuYW1lcyB3aGljaCBzaG91bGQgYmUgdHJhbnNmZXJyZWQgdG8gdGhlIFZhdWx0LVBhcmFtZXRlcnMKICAgICAgICAgICAgIyAnU2VydmVyJwogICAgICAgICAgICAjICdQb3J0JwogICAgICAgICAgICAjICdEYXRhYmFzZScKICAgICAgICAgICAgIyAnVXNlck5hbWUnCiAgICAgICAgKQogICAgfQogICAgJHJlZ2lzdGVyUGFyYW0uVmF1bHRQYXJhbWV0ZXJzLnZlcnNpb24gPSAkcHNkRGF0YS5Nb2R1bGVWZXJzaW9uCiAgICBpZiAoJFBTQ21kbGV0LlNob3VsZFByb2Nlc3MoJG5hbWUpKSB7CiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAiUmVnaXN0ZXJpbmcgVmF1bHQgJHZhdWx0IHdpdGggUGFyYW0gJCgkcmVnaXN0ZXJQYXJhbXxDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIgogICAgICAgIFJlZ2lzdGVyLVNlY3JldFZhdWx0IEByZWdpc3RlclBhcmFtCiAgICB9CiAgICBlbHNlIHsKICAgICAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0ICJXaGF0SWYgdXNlZCwgbm8gdmF1bHQgcmVnaXN0ZXJlZC4iCiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAiWW91IG1heSByZWdpc3RlciB0aGUgY2hvc2VuIHZhdWx0IGxhdGVyIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kOmByYG5AcmVnaXN0ZXJQYXJhbT0kKCRyZWdpc3RlclBhcmFtfENvbnZlcnRUby1NZXRhZGF0YSAtQXNIYXNodGFibGUpYHJgblJlZ2lzdGVyLcO+ZnVuY3Rpb25QcmVmaXjDvlNlY3VyZVZhdWx0IEByZWdpc3RlclBhcmFtIgogICAgfQp9AQlUAQAACVUBAAAGVgEAACpSZWdpc3Rlci3DvmZ1bmN0aW9uUHJlZml4w75TZWN1cmVWYXVsdC5wczEGVwEAAGkvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2Z1bmN0aW9ucy9SZWdpc3Rlci3DvmZ1bmN0aW9uUHJlZml4w75TZWN1cmVWYXVsdC5wczEJBgAAAAlZAQAACVoBAAABDAEAAAEAAAAJWwEAAAZcAQAADmNvbmZpZ3VyYXRpb25zBl0BAABML1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9jb25maWd1cmF0aW9ucwkGAAAACV8BAAAJYAEAAAENAQAAAQAAAAlhAQAABmIBAAAJZnVuY3Rpb25zBmMBAABHL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9mdW5jdGlvbnMJBgAAAAllAQAACWYBAAABDgEAAAEAAAAJZwEAAAZoAQAADHNjcmlwdGJsb2NrcwZpAQAASi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvc2NyaXB0YmxvY2tzCQYAAAAJawEAAAlsAQAAAQ8BAAABAAAACW0BAAAGbgEAAAdzY3JpcHRzBm8BAABFL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9zY3JpcHRzCQYAAAAJcQEAAAlyAQAAARABAAABAAAACXMBAAAGdAEAAAR0ZXBwBnUBAABCL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC90ZXBwCQYAAAAJdwEAAAl4AQAAAREBAAABAAAACXkBAAAGegEAAANiaW4GewEAAFwvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2JpbgkGAAAACX0BAAAJfgEAAAESAQAAAQAAAAl/AQAABoABAAAFZW4tdXMGgQEAAF4vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2VuLXVzCQYAAAAJgwEAAAmEAQAAARMBAAABAAAACYUBAAAGhgEAAAlmdW5jdGlvbnMGhwEAAGIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucwkGAAAACYkBAAAJigEAAAEUAQAAAQAAAAmLAQAABowBAAAYZnVuY3Rpb25zLnNoYXJlZGludGVybmFsBo0BAABxL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMuc2hhcmVkaW50ZXJuYWwJBgAAAAmPAQAACZABAAABFQEAAAEAAAAJkQEAAAaSAQAACGludGVybmFsBpMBAABhL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbAkGAAAACZUBAAAJlgEAAAEWAQAAAQAAAAmXAQAABpgBAAAFdGVzdHMGmQEAAF4vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzCQYAAAAJmwEAAAmcAQAAARcBAAABAAAACZ0BAAAGngEAAAN4bWwGnwEAAFwvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3htbAkGAAAACaEBAAAJogEAAAEYAQAADwAAAAajAQAAaiMgQ2hhbmdlbG9nCiMjIDEuMC4wICjDviFkeW5hbWljc2NyaXB0XzM5NDQzMiHDvikKIC0gTmV3OiBTb21lIFN0dWZmCiAtIFVwZDogTW9hciBTdHVmZgogLSBGaXg6IE11Y2ggU3R1ZmYBCaQBAAAJpQEAAAamAQAADGNoYW5nZWxvZy5tZAanAQAAZS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vY2hhbmdlbG9nLm1kCQYAAAAJqQEAAAmqAQAAARkBAAAPAAAABqsBAAD+ByMgUFNGTW9kdWxlIGd1aWRhbmNlCgpUaGlzIGlzIGEgZmluaXNoZWQgbW9kdWxlIGxheW91dCBvcHRpbWl6ZWQgZm9yIGltcGxlbWVudGluZyB0aGUgUFNGcmFtZXdvcmsuCgpJZiB5b3UgZG9uJ3QgY2FyZSB0byBkZWFsIHdpdGggdGhlIGRldGFpbHMsIHRoaXMgaXMgd2hhdCB5b3UgbmVlZCB0byBkbyB0byBnZXQgc3RhcnRlZCBzZWVpbmcgcmVzdWx0czoKCiAtIEFkZCB0aGUgZnVuY3Rpb25zIHlvdSB3YW50IHRvIHB1Ymxpc2ggdG8gYC9mdW5jdGlvbnMvYAogLSBVcGRhdGUgdGhlIGBGdW5jdGlvbnNUb0V4cG9ydGAgbm9kZSBpbiB0aGUgbW9kdWxlIG1hbmlmZXN0ICjDvm5hbWXDvi5wc2QxKS4gQWxsIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHNob3VsZCBiZSBpbiBhIGxpc3QuCiAtIEFkZCBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRoZSB1c2VyIHNob3VsZCBub3Qgc2VlIHRvIGAvaW50ZXJuYWwvZnVuY3Rpb25zL2AKIAogIyMgUGF0aCBXYXJuaW5nCiAKID4gSWYgeW91IHdhbnQgeW91ciBtb2R1bGUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIExpbnV4IGFuZCBNYWNPUywga2VlcCBpbiBtaW5kIHRoYXQgdGhvc2UgT1MgYXJlIGNhc2Ugc2Vuc2l0aXZlIGZvciBwYXRocyBhbmQgZmlsZXMuCiAKIGBJbXBvcnQtTW9kdWxlRmlsZWAgaXMgcHJlY29uZmlndXJlZCB0byByZXNvbHZlIHRoZSBwYXRoIG9mIHRoZSBmaWxlcyBzcGVjaWZpZWQsIHNvIGl0IHdpbGwgcmVsaWFibHkgY29udmVydCB3ZWlyZCBwYXRoIG5vdGF0aW9ucyB0aGUgc3lzdGVtIGNhbid0IGhhbmRsZS4KIENvbnRlbnQgaW1wb3J0ZWQgdGhyb3VnaCB0aGF0IGNvbW1hbmQgdGh1cyBuZWVkIG5vdCBtaW5kIHRoZSBwYXRoIHNlcGFyYXRvci4KIElmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB5b3VyIGNvZGUgdG9vIHdpbGwgc3Vydml2ZSBPUy1zcGVjaWZpYyBwYXRoIG5vdGF0aW9ucywgZ2V0IHVzZWQgdG8gdXNpbmcgYFJlc29sdmUtcGF0aGAgb3IgdGhlIG1vcmUgcG93ZXJmdWwgYFJlc29sdmUtUFNGUGF0aGAuAQmsAQAACa0BAAAGrgEAAAlyZWFkbWUubWQGrwEAAGIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3JlYWRtZS5tZAkGAAAACbEBAAAJsgEAAAEaAQAADwAAAAazAQAAqRNAewoJIyBTY3JpcHQgbW9kdWxlIG9yIGJpbmFyeSBtb2R1bGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYW5pZmVzdAoJUm9vdE1vZHVsZSAgICAgICAgPSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNtMScKCgkjIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgbW9kdWxlLgoJTW9kdWxlVmVyc2lvbiA9ICcxLjAuMCcKCgkjIElEIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBtb2R1bGUKCUdVSUQgPSAnw74hZ3VpZEV4dGVuc2lvbiHDvicKCgkjIEF1dGhvciBvZiB0aGlzIG1vZHVsZQoJQXV0aG9yID0gJ8O+YXV0aG9yw74nCgoJIyBDb21wYW55IG9yIHZlbmRvciBvZiB0aGlzIG1vZHVsZQoJQ29tcGFueU5hbWUgPSAnw75jb21wYW55w74nCgoJIyBDb3B5cmlnaHQgc3RhdGVtZW50IGZvciB0aGlzIG1vZHVsZQoJQ29weXJpZ2h0ID0gJ0NvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+JwoKCSMgRGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUKCURlc2NyaXB0aW9uID0gJ8O+ZGVzY3JpcHRpb27DvicKCgkjIE1pbmltdW0gdmVyc2lvbiBvZiB0aGUgV2luZG93cyBQb3dlclNoZWxsIGVuZ2luZSByZXF1aXJlZCBieSB0aGlzIG1vZHVsZQoJUG93ZXJTaGVsbFZlcnNpb24gPSAnNS4wJwoKCSMgTW9kdWxlcyB0aGF0IG11c3QgYmUgaW1wb3J0ZWQgaW50byB0aGUgZ2xvYmFsIGVudmlyb25tZW50IHByaW9yIHRvIGltcG9ydGluZwoJIyB0aGlzIG1vZHVsZQoJUmVxdWlyZWRNb2R1bGVzID0gQCgKCQlAeyBNb2R1bGVOYW1lPSdQU0ZyYW1ld29yayc7IE1vZHVsZVZlcnNpb249J8O+IXBzZnZlcnNpb24hw74nIH0KCSkKCgkjIEFzc2VtYmxpZXMgdGhhdCBtdXN0IGJlIGxvYWRlZCBwcmlvciB0byBpbXBvcnRpbmcgdGhpcyBtb2R1bGUKCSMgUmVxdWlyZWRBc3NlbWJsaWVzID0gQCgnYmluXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uZGxsJykKCgkjIFR5cGUgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQoJIyBUeXBlc1RvUHJvY2VzcyA9IEAoJ3htbFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LlR5cGVzLnBzMXhtbCcpCgoJIyBGb3JtYXQgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQoJIyBGb3JtYXRzVG9Qcm9jZXNzID0gQCgneG1sXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRm9ybWF0LnBzMXhtbCcpCgoJIyBGdW5jdGlvbnMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUKCUZ1bmN0aW9uc1RvRXhwb3J0ID0gQCgKCQknU2V0LVNlY3JldCcKCQknU2V0LVNlY3JldEluZm8nCgkJJ0dldC1TZWNyZXQnCgkJJ1JlbW92ZS1TZWNyZXQnCgkJJ0dldC1TZWNyZXRJbmZvJwoJCSdUZXN0LVNlY3JldFZhdWx0JwoJCSdVbnJlZ2lzdGVyLVNlY3JldFZhdWx0JwoJCSdVbmxvY2stU2VjcmV0VmF1bHQnCgkpCgoJIyBDbWRsZXRzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlCglDbWRsZXRzVG9FeHBvcnQgPSAnJwoKCSMgVmFyaWFibGVzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlCglWYXJpYWJsZXNUb0V4cG9ydCA9ICcnCgoJIyBBbGlhc2VzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlCglBbGlhc2VzVG9FeHBvcnQgPSAnJwoKCSMgTGlzdCBvZiBhbGwgbW9kdWxlcyBwYWNrYWdlZCB3aXRoIHRoaXMgbW9kdWxlCglNb2R1bGVMaXN0ID0gQCgpCgoJIyBMaXN0IG9mIGFsbCBmaWxlcyBwYWNrYWdlZCB3aXRoIHRoaXMgbW9kdWxlCglGaWxlTGlzdCA9IEAoKQoKCSMgUHJpdmF0ZSBkYXRhIHRvIHBhc3MgdG8gdGhlIG1vZHVsZSBzcGVjaWZpZWQgaW4gTW9kdWxlVG9Qcm9jZXNzLiBUaGlzIG1heSBhbHNvIGNvbnRhaW4gYSBQU0RhdGEgaGFzaHRhYmxlIHdpdGggYWRkaXRpb25hbCBtb2R1bGUgbWV0YWRhdGEgdXNlZCBieSBQb3dlclNoZWxsLgoJUHJpdmF0ZURhdGEgPSBAewoKCQkjU3VwcG9ydCBmb3IgUG93ZXJTaGVsbEdldCBnYWxsZXJpZXMuCgkJUFNEYXRhID0gQHsKCgkJCSMgVGFncyBhcHBsaWVkIHRvIHRoaXMgbW9kdWxlLiBUaGVzZSBoZWxwIHdpdGggbW9kdWxlIGRpc2NvdmVyeSBpbiBvbmxpbmUgZ2FsbGVyaWVzLgoJCQkjIFRhZ3MgPSBAKCkKCgkJCSMgQSBVUkwgdG8gdGhlIGxpY2Vuc2UgZm9yIHRoaXMgbW9kdWxlLgoJCQkjIExpY2Vuc2VVcmkgPSAnJwoKCQkJIyBBIFVSTCB0byB0aGUgbWFpbiB3ZWJzaXRlIGZvciB0aGlzIHByb2plY3QuCgkJCSMgUHJvamVjdFVyaSA9ICcnCgoJCQkjIEEgVVJMIHRvIGFuIGljb24gcmVwcmVzZW50aW5nIHRoaXMgbW9kdWxlLgoJCQkjIEljb25VcmkgPSAnJwoKCQkJIyBSZWxlYXNlTm90ZXMgb2YgdGhpcyBtb2R1bGUKCQkJIyBSZWxlYXNlTm90ZXMgPSAnJwoKCQl9ICMgRW5kIG9mIFBTRGF0YSBoYXNodGFibGUKCgl9ICMgRW5kIG9mIFByaXZhdGVEYXRhIGhhc2h0YWJsZQp9AQm0AQAACbUBAAAGtgEAAChTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi5wc2QxBrcBAACBAS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNkMQkGAAAACbkBAAAJugEAAAEbAQAADwAAAAa7AQAAlxokc2NyaXB0Ok1vZHVsZVJvb3QgPSAkUFNTY3JpcHRSb290CiRzY3JpcHQ6TW9kdWxlVmVyc2lvbiA9IChJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNkMSIpLk1vZHVsZVZlcnNpb24KCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBkb3Rzb3VyY2luZyB3YXMgZW5mb3JjZWQKJHNjcmlwdDpkb0RvdFNvdXJjZSA9IEdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgw75uYW1lw74uSW1wb3J0LkRvRG90U291cmNlIC1GYWxsYmFjayAkZmFsc2UKaWYgKCTDvm5hbWXDvl9kb3Rzb3VyY2Vtb2R1bGUpIHsgJHNjcmlwdDpkb0RvdFNvdXJjZSA9ICR0cnVlIH0KCjwjCk5vdGUgb24gUmVzb2x2ZS1QYXRoOgpBbGwgcGF0aHMgYXJlIHNlbnQgdGhyb3VnaCBSZXNvbHZlLVBhdGgvUmVzb2x2ZS1QU0ZQYXRoIGluIG9yZGVyIHRvIGNvbnZlcnQgdGhlbSB0byB0aGUgY29ycmVjdCBwYXRoIHNlcGFyYXRvci4KVGhpcyBhbGxvd3MgaWdub3JpbmcgcGF0aCBzZXBhcmF0b3JzIHRocm91Z2hvdXQgdGhlIGltcG9ydCBzZXF1ZW5jZSwgd2hpY2ggY291bGQgb3RoZXJ3aXNlIGNhdXNlIHRyb3VibGUgZGVwZW5kaW5nIG9uIE9TLgpSZXNvbHZlLVBhdGggY2FuIG9ubHkgYmUgdXNlZCBmb3IgcGF0aHMgdGhhdCBhbHJlYWR5IGV4aXN0LCBSZXNvbHZlLVBTRlBhdGggY2FuIGFjY2VwdCB0aGF0IHRoZSBsYXN0IGxlYWYgbXkgbm90IGV4aXN0LgpUaGlzIGlzIGltcG9ydGFudCB3aGVuIHRlc3RpbmcgZm9yIHBhdGhzLgojPgoKIyBEZXRlY3Qgd2hldGhlciBhdCBzb21lIGxldmVsIGxvYWRpbmcgaW5kaXZpZHVhbCBtb2R1bGUgZmlsZXMsIHJhdGhlciB0aGFuIHRoZSBjb21waWxlZCBtb2R1bGUgd2FzIGVuZm9yY2VkCiRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5JbmRpdmlkdWFsRmlsZXMgLUZhbGxiYWNrICRmYWxzZQppZiAoJMO+bmFtZcO+X2ltcG9ydEluZGl2aWR1YWxGaWxlcykgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQppZiAoVGVzdC1QYXRoIChSZXNvbHZlLVBTRlBhdGggLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVwuLlwuZ2l0IiAtU2luZ2xlSXRlbSAtTmV3Q2hpbGQpKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9CmlmICgiPHdhcyBub3QgY29tcGlsZWQ+IiAtZXEgJzx3YXMgbm90IGNvbXBpbGVkPicpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0KCmZ1bmN0aW9uIEltcG9ydC1Nb2R1bGVGaWxlCnsKCTwjCgkJLlNZTk9QU0lTCgkJCUxvYWRzIGZpbGVzIGludG8gdGhlIG1vZHVsZSBvbiBtb2R1bGUgaW1wb3J0LgoKCQkuREVTQ1JJUFRJT04KCQkJVGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLgoJCQlJdCBzaG91bGQgYWx3YXlzIGJlIGRvdHNvdXJjZWQgaXRzZWxmLCBpbiBvcmRlciB0byBwcm9wZXIgZnVuY3Rpb24uCgoJCQlUaGlzIHByb3ZpZGVzIGEgY2VudHJhbCBsb2NhdGlvbiB0byByZWFjdCB0byBmaWxlcyBiZWluZyBpbXBvcnRlZCwgaWYgbGF0ZXIgZGVzaXJlZAoKCQkuUEFSQU1FVEVSIFBhdGgKCQkJVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gbG9hZAoKCQkuRVhBTVBMRQoJCQlQUyBDOlw+IC4gSW1wb3J0LU1vZHVsZUZpbGUgLUZpbGUgJGZ1bmN0aW9uLkZ1bGxOYW1lCgoJCQlJbXBvcnRzIHRoZSBmaWxlIHN0b3JlZCBpbiAkZnVuY3Rpb24gYWNjb3JkaW5nIHRvIGltcG9ydCBwb2xpY3kKCSM+CglbQ21kbGV0QmluZGluZygpXQoJUGFyYW0gKAoJCVtzdHJpbmddCgkJJFBhdGgKCSkKCgkkcmVzb2x2ZWRQYXRoID0gJEV4ZWN1dGlvbkNvbnRleHQuU2Vzc2lvblN0YXRlLlBhdGguR2V0UmVzb2x2ZWRQU1BhdGhGcm9tUFNQYXRoKCRQYXRoKS5Qcm92aWRlclBhdGgKCWlmICgkZG9Eb3RTb3VyY2UpIHsgLiAkcmVzb2x2ZWRQYXRoIH0KCWVsc2UgeyAkRXhlY3V0aW9uQ29udGV4dC5JbnZva2VDb21tYW5kLkludm9rZVNjcmlwdCgkZmFsc2UsIChbc2NyaXB0YmxvY2tdOjpDcmVhdGUoW2lvLmZpbGVdOjpSZWFkQWxsVGV4dCgkcmVzb2x2ZWRQYXRoKSkpLCAkbnVsbCwgJG51bGwpIH0KfQoKI3JlZ2lvbiBMb2FkIGluZGl2aWR1YWwgZmlsZXMKaWYgKCRpbXBvcnRJbmRpdmlkdWFsRmlsZXMpCnsKCSMgRXhlY3V0ZSBQcmVpbXBvcnQgYWN0aW9ucwoJZm9yZWFjaCAoJHBhdGggaW4gKCYgIiRNb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNccHJlaW1wb3J0LnBzMSIpKSB7CgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkcGF0aAoJfQoKCSMgSW1wb3J0IGFsbCBpbnRlcm5hbCBmdW5jdGlvbnMKCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcZnVuY3Rpb25zIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpCgl7CgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUKCX0KCgkjIEltcG9ydCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zIHdoaWNoIGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUgRXh0ZW5zaW9uIGFuZCB0aGUgTWFpbi1Nb2R1bGUKCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcZnVuY3Rpb25zLnNoYXJlZGludGVybmFsIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpIHsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQoJfQoKCSMgSW1wb3J0IGFsbCBwdWJsaWMgZnVuY3Rpb25zCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGZ1bmN0aW9ucyIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKQoJewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lCgl9CgoJIyBFeGVjdXRlIFBvc3RpbXBvcnQgYWN0aW9ucwoJZm9yZWFjaCAoJHBhdGggaW4gKCYgIiRNb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEiKSkgewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJHBhdGgKCX0KCgkjIEVuZCBpdCBoZXJlLCBkbyBub3QgbG9hZCBjb21waWxlZCBjb2RlIGJlbG93CglyZXR1cm4KfQojZW5kcmVnaW9uIExvYWQgaW5kaXZpZHVhbCBmaWxlcwoKI3JlZ2lvbiBMb2FkIGNvbXBpbGVkIGNvZGUKIjxjb21waWxlIGNvZGUgaW50byBoZXJlPiIKI2VuZHJlZ2lvbiBMb2FkIGNvbXBpbGVkIGNvZGUBCbwBAAAJvQEAAAa+AQAAKFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLnBzbTEGvwEAAIEBL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi5wc20xCQYAAAAJwQEAAAnCAQAAAR0BAAABAAAACcMBAAAGxAEAAAlmdW5jdGlvbnMGxQEAAEQvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL2Z1bmN0aW9ucwkGAAAACccBAAAJyAEAAAEeAQAAAQAAAAnJAQAABsoBAAAHZ2VuZXJhbAbLAQAAQi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMvZ2VuZXJhbAkGAAAACc0BAAAJzgEAAAEfAQAADwAAAAbPAQAA1hpwYXJhbSAoCgkkVGVzdEdlbmVyYWwgPSAkdHJ1ZSwKCgkkVGVzdEZ1bmN0aW9ucyA9ICR0cnVlLAoKCVtWYWxpZGF0ZVNldCgnTm9uZScsICdOb3JtYWwnLCAnRGV0YWlsZWQnLCAnRGlhZ25vc3RpYycpXQoJW0FsaWFzKCdTaG93JyldCgkkT3V0cHV0ID0gIk5vbmUiLAoKCSRJbmNsdWRlID0gIioiLAoKCSRFeGNsdWRlID0gIiIKKQoKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJTdGFydGluZyBUZXN0cyIKCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiSW1wb3J0aW5nIE1vZHVsZSIKCiRnbG9iYWw6dGVzdHJvb3QgPSAkUFNTY3JpcHRSb290CiRnbG9iYWw6X19wZXN0ZXJfZGF0YSA9IEB7IH0KClJlbW92ZS1Nb2R1bGUgw75uYW1lw74gLUVycm9yQWN0aW9uIElnbm9yZQpJbXBvcnQtTW9kdWxlICIkUFNTY3JpcHRSb290XC4uXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSIKSW1wb3J0LU1vZHVsZSAiJFBTU2NyaXB0Um9vdFwuLlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzbTEiIC1Gb3JjZQoKIyBOZWVkIHRvIGltcG9ydCBleHBsaWNpdGx5IHNvIHdlIGNhbiB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gY2xhc3MKSW1wb3J0LU1vZHVsZSBQZXN0ZXIKCsO+IXRlc3Rmb2xkZXIhw74KCiR0b3RhbEZhaWxlZCA9IDAKJHRvdGFsUnVuID0gMAoKJHRlc3RyZXN1bHRzID0gQCgpCiRjb25maWcgPSBbUGVzdGVyQ29uZmlndXJhdGlvbl06OkRlZmF1bHQKw74hcGVzdGVyY29uZmlnIcO+CgojcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzCmlmICgkVGVzdEdlbmVyYWwpCnsKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiTW9kdWxlcyBpbXBvcnRlZCwgcHJvY2VlZGluZyB3aXRoIGdlbmVyYWwgdGVzdHMiCglmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJFBTU2NyaXB0Um9vdFxnZW5lcmFsIiB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLlRlc3RzLnBzMSIpKQoJewoJCWlmICgkZmlsZS5OYW1lIC1ub3RsaWtlICRJbmNsdWRlKSB7IGNvbnRpbnVlIH0KCQlpZiAoJGZpbGUuTmFtZSAtbGlrZSAkRXhjbHVkZSkgeyBjb250aW51ZSB9CgoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyA8Yz0nZW0nPiQoJGZpbGUuTmFtZSk8L2M+IgoJCSRjb25maWcuVGVzdFJlc3VsdC5PdXRwdXRQYXRoID0gSm9pbi1QYXRoICIkUFNTY3JpcHRSb290XC4uXC4uXFRlc3RSZXN1bHRzIiAiVEVTVC0kKCRmaWxlLkJhc2VOYW1lKS54bWwiCgkJJGNvbmZpZy5SdW4uUGF0aCA9ICRmaWxlLkZ1bGxOYW1lCgkJJGNvbmZpZy5SdW4uUGFzc1RocnUgPSAkdHJ1ZQoJCSRjb25maWcuT3V0cHV0LlZlcmJvc2l0eSA9ICRPdXRwdXQKICAgIAkkcmVzdWx0cyA9IEludm9rZS1QZXN0ZXIgLUNvbmZpZ3VyYXRpb24gJGNvbmZpZwoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpCgkJewoJCQkkdG90YWxSdW4gKz0gJHJlc3VsdC5Ub3RhbENvdW50CgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50CgkJCSRyZXN1bHQuVGVzdHMgfCBXaGVyZS1PYmplY3QgUmVzdWx0IC1uZSAnUGFzc2VkJyB8IEZvckVhY2gtT2JqZWN0IHsKCQkJCSR0ZXN0cmVzdWx0cyArPSBbcHNjdXN0b21vYmplY3RdQHsKCQkJCQlCbG9jayAgICA9ICRfLkJsb2NrCgkJCQkJTmFtZQkgPSAiSXQgJCgkXy5OYW1lKSIKCQkJCQlSZXN1bHQgICA9ICRfLlJlc3VsdAoJCQkJCU1lc3NhZ2UgID0gJF8uRXJyb3JSZWNvcmQuRGlzcGxheUVycm9yTWVzc2FnZQoJCQkJfQoJCQl9CgkJfQoJfQp9CiNlbmRyZWdpb24gUnVuIEdlbmVyYWwgVGVzdHMKCiRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplciB8IE91dC1Ib3N0CgojcmVnaW9uIFRlc3QgQ29tbWFuZHMKaWYgKCRUZXN0RnVuY3Rpb25zKQp7CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlByb2NlZWRpbmcgd2l0aCBpbmRpdmlkdWFsIHRlc3RzIgoJZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRQU1NjcmlwdFJvb3RcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqVGVzdHMucHMxIikpCgl7CgkJaWYgKCRmaWxlLk5hbWUgLW5vdGxpa2UgJEluY2x1ZGUpIHsgY29udGludWUgfQoJCWlmICgkZmlsZS5OYW1lIC1saWtlICRFeGNsdWRlKSB7IGNvbnRpbnVlIH0KCgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgU2lnbmlmaWNhbnQgLU1lc3NhZ2UgIiAgRXhlY3V0aW5nICQoJGZpbGUuTmFtZSkiCgkJJGNvbmZpZy5UZXN0UmVzdWx0Lk91dHB1dFBhdGggPSBKb2luLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi5cVGVzdFJlc3VsdHMiICJURVNULSQoJGZpbGUuQmFzZU5hbWUpLnhtbCIKCQkkY29uZmlnLlJ1bi5QYXRoID0gJGZpbGUuRnVsbE5hbWUKCQkkY29uZmlnLlJ1bi5QYXNzVGhydSA9ICR0cnVlCgkJJGNvbmZpZy5PdXRwdXQuVmVyYm9zaXR5ID0gJE91dHB1dAogICAgCSRyZXN1bHRzID0gSW52b2tlLVBlc3RlciAtQ29uZmlndXJhdGlvbiAkY29uZmlnCgkJZm9yZWFjaCAoJHJlc3VsdCBpbiAkcmVzdWx0cykKCQl7CgkJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQKCQkJJHRvdGFsRmFpbGVkICs9ICRyZXN1bHQuRmFpbGVkQ291bnQKCQkJJHJlc3VsdC5UZXN0cyB8IFdoZXJlLU9iamVjdCBSZXN1bHQgLW5lICdQYXNzZWQnIHwgRm9yRWFjaC1PYmplY3QgewoJCQkJJHRlc3RyZXN1bHRzICs9IFtwc2N1c3RvbW9iamVjdF1AewoJCQkJCUJsb2NrICAgID0gJF8uQmxvY2sKCQkJCQlOYW1lCSA9ICJJdCAkKCRfLk5hbWUpIgoJCQkJCVJlc3VsdCAgID0gJF8uUmVzdWx0CgkJCQkJTWVzc2FnZSAgPSAkXy5FcnJvclJlY29yZC5EaXNwbGF5RXJyb3JNZXNzYWdlCgkJCQl9CgkJCX0KCQl9Cgl9Cn0KI2VuZHJlZ2lvbiBUZXN0IENvbW1hbmRzCgokdGVzdHJlc3VsdHMgfCBTb3J0LU9iamVjdCBEZXNjcmliZSwgQ29udGV4dCwgTmFtZSwgUmVzdWx0LCBNZXNzYWdlIHwgRm9ybWF0LUxpc3QKCmlmICgkdG90YWxGYWlsZWQgLWVxIDApIHsgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgQ3JpdGljYWwgLU1lc3NhZ2UgIkFsbCA8Yz0nZW0nPiR0b3RhbFJ1bjwvYz4gdGVzdHMgZXhlY3V0ZWQgd2l0aG91dCBhIHNpbmdsZSBmYWlsdXJlISIgfQplbHNlIHsgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgQ3JpdGljYWwgLU1lc3NhZ2UgIjxjPSdlbSc+JHRvdGFsRmFpbGVkIHRlc3RzPC9jPiBvdXQgb2YgPGM9J3N1Yic+JHRvdGFsUnVuPC9jPiB0ZXN0cyBmYWlsZWQhIiB9CgppZiAoJHRvdGFsRmFpbGVkIC1ndCAwKQp7Cgl0aHJvdyAiJHRvdGFsRmFpbGVkIC8gJHRvdGFsUnVuIHRlc3RzIGZhaWxlZCEiCn0BCdABAAAJ0QEAAAbSAQAACnBlc3Rlci5wczEG0wEAAEUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL3Blc3Rlci5wczEJBgAAAAnVAQAACdYBAAABIAEAAA8AAAAG1wEAAIQHIyBEZXNjcmlwdGlvbgoKVGhpcyBpcyB0aGUgZm9sZGVyLCB3aGVyZSBhbGwgdGhlIHRlc3RzIGdvLgoKVGhvc2UgYXJlIHN1YmRpdmlkZWQgaW4gdHdvIGNhdGVnb3JpZXM6CgogLSBHZW5lcmFsCiAtIEZ1bmN0aW9uCgojIyBHZW5lcmFsIFRlc3RzCgpHZW5lcmFsIHRlc3RzIGFyZSBmdW5jdGlvbiBnZW5lcmljIGFuZCB0ZXN0IGZvciBnZW5lcmFsIHBvbGljaWVzLgoKVGhlc2UgdGVzdCBzY2FuIGFuc3dlciBxdWVzdGlvbnMgc3VjaCBhczoKCiAtIElzIG15IG1vZHVsZSBmb2xsb3dpbmcgbXkgc3R5bGUgZ3VpZGVzPwogLSBEb2VzIGFueSBvZiBteSBzY3JpcHRzIGhhdmUgYSBzeW50YXggZXJyb3I/CiAtIERvIG15IHNjcmlwdHMgdXNlIGNvbW1hbmRzIEkgZG8gbm90IHdhbnQgdGhlbSB0byB1c2U/CiAtIERvIG15IGNvbW1hbmRzIGZvbGxvdyBiZXN0IHByYWN0aWNlcz8KIC0gRG8gbXkgY29tbWFuZHMgaGF2ZSBwcm9wZXIgaGVscD8KCkJhc2ljYWxseSwgdGhlc2UgYWxsb3cgYSBnZW5lcmFsIG1vZHVsZSBoZWFsdGggY2hlY2suCgpUaGVzZSB0ZXN0cyBhcmUgYWxyZWFkeSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZSB0ZW1wbGF0ZS4KCiMjIEZ1bmN0aW9uIFRlc3RzCgpBIGhlYWx0aHkgbW9kdWxlIHNob3VsZCBwcm92aWRlIHVuaXQgYW5kIGludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgY29tbWFuZHMgJiBjb21wb25lbnRzIGl0IHNoaXBzLgpPbmx5IHRoZW4gY2FuIGJlIGd1YXJhbnRlZWQsIHRoYXQgdGhleSB3aWxsIGFjdHVhbGx5IHBlcmZvcm0gYXMgcHJvbWlzZWQuCgpIb3dldmVyLCBhcyBlYWNoIHN1Y2ggdGVzdCBtdXN0IGJlIHNwZWNpZmljIHRvIHRoZSBmdW5jdGlvbiBpdCB0ZXN0cywgdGhlcmUgY2Fubm90IGJlIG11Y2ggaW4gdGhlIHdheSBvZiB0ZW1wbGF0ZXMuAQnYAQAACdkBAAAG2gEAAAlyZWFkbWUubWQG2wEAAEQvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL3JlYWRtZS5tZAkGAAAACd0BAAAJ3gEAAAEhAQAADwAAAAbfAQAAggsjIFhNTAoKVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHByb2plY3QgWE1MIGZpbGVzIGdvLCBub3RhYmx5OgoKIC0gRm9ybWF0IFhNTAogLSBUeXBlIEV4dGVuc2lvbiBYTUwKCkV4dGVybmFsIGhlbHAgZmlsZXMgc2hvdWxkIF9ub3RfIGJlIHBsYWNlZCBpbiB0aGlzIGZvbGRlciEKCiMjIE5vdGVzIG9uIEZpbGVzIGFuZCBOYW1pbmcKClRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBmb3JtYXQgZmlsZSBhbmQgb25lIHR5cGUgZXh0ZW5zaW9uIGZpbGUgcGVyIHByb2plY3QsIGFzIGltcG9ydGluZyB0aGVtIGhhcyBhIG5vdGFibGUgaW1wYWN0IG9uIGltcG9ydCB0aW1lcy4KCiAtIFRoZSBGb3JtYXQgWE1MIHNob3VsZCBiZSBuYW1lZCBgw75uYW1lw74uRm9ybWF0LnBzMXhtbGAKIC0gVGhlIFR5cGUgRXh0ZW5zaW9uIFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LlR5cGVzLnBzMXhtbGAKCiMjIFRvb2xzCgojIyMgTmV3LVBTTURGb3JtYXRUYWJsZURlZmluaXRpb24KClRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGFuIGlucHV0IG9iamVjdCBhbmQgZ2VuZXJhdGUgZm9ybWF0IHhtbCBmb3IgYW4gYXV0by1zaXplZCB0YWJsZS4KCkl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSB0byBnZXQgc3RhcnRlZCB3aXRoIGZvcm1hdHMuCgojIyMgR2V0LVBTRlR5cGVTZXJpYWxpemF0aW9uRGF0YQoKYGBgCkMjIFdhcm5pbmchClRoaXMgc2VjdGlvbiBpcyBvbmx5IGludGVyZXN0IGlmIHlvdSdyZSB1c2luZyBDIyB0b2dldGhlciB3aXRoIFBvd2VyU2hlbGwuCmBgYAoKVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdHlwZSBleHRlbnNpb24gWE1MIHRoYXQgYWxsb3dzIFBvd2VyU2hlbGwgdG8gY29udmVydCB0eXBlcyB3cml0dGVuIGluIEMjIHRvIGJlIHdyaXR0ZW4gdG8gZmlsZSBhbmQgcmVzdG9yZWQgZnJvbSBpdCB3aXRob3V0IGJlaW5nICdEZXNlcmlhbGl6ZWQnLiBBbHNvIHdvcmtzIGZvciBqb2JzIG9yIHJlbW90aW5nLCBpZiBib3RoIHNpZGVzIGhhdmUgdGhlIGBQU0ZyYW1ld29ya2AgbW9kdWxlIGFuZCB0eXBlIGV4dGVuc2lvbiBsb2FkZWQuCgpJbiBvcmRlciBmb3IgYSBjbGFzcyB0byBiZSBlbGlnaWJsZSBmb3IgdGhpcywgaXQgbmVlZHMgdG8gY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOgoKIC0gSGF2ZSB0aGUgYFtTZXJpYWxpemFibGVdYCBhdHRyaWJ1dGUKIC0gQmUgcHVibGljCiAtIEhhdmUgYW4gZW1wdHkgY29uc3RydWN0b3IKIC0gQWxsb3cgYWxsIHB1YmxpYyBwcm9wZXJ0aWVzL2ZpZWxkcyB0byBiZSBzZXQgKGV2ZW4gaWYgc2V0dGluZyBpdCBkb2Vzbid0IGRvIGFueXRoaW5nKSB3aXRob3V0IHRocm93aW5nIGFuIGV4Y2VwdGlvbi4KCmBgYApub24tcHVibGljIHByb3BlcnRpZXMgYW5kIGZpZWxkcyB3aWxsIGJlIGxvc3QgaW4gdGhpcyBwcm9jZXNzIQpgYGABCeABAAAJ4QEAAAbiAQAACXJlYWRtZS5tZAbjAQAAQi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74veG1sL3JlYWRtZS5tZAkGAAAACeUBAAAJ5gEAAAEiAQAADwAAAAbnAQAAygU8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtMTYiPz4KPENvbmZpZ3VyYXRpb24+Cgk8Vmlld0RlZmluaXRpb25zPgoJCTwhLS0gRm9vLkJhciAtLT4KCQk8Vmlldz4KCQkJPE5hbWU+Rm9vLkJhcjwvTmFtZT4KCQkJPFZpZXdTZWxlY3RlZEJ5PgoJCQkJPFR5cGVOYW1lPkZvby5CYXI8L1R5cGVOYW1lPgoJCQk8L1ZpZXdTZWxlY3RlZEJ5PgoJCQk8VGFibGVDb250cm9sPgoJCQkJPEF1dG9TaXplLz4KCQkJCTxUYWJsZUhlYWRlcnM+CgkJCQkJPFRhYmxlQ29sdW1uSGVhZGVyLz4KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPgoJCQkJPC9UYWJsZUhlYWRlcnM+CgkJCQk8VGFibGVSb3dFbnRyaWVzPgoJCQkJCTxUYWJsZVJvd0VudHJ5PgoJCQkJCQk8VGFibGVDb2x1bW5JdGVtcz4KCQkJCQkJCTxUYWJsZUNvbHVtbkl0ZW0+CgkJCQkJCQkJPFByb3BlcnR5TmFtZT5Gb288L1Byb3BlcnR5TmFtZT4KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPgoJCQkJCQkJPFRhYmxlQ29sdW1uSXRlbT4KCQkJCQkJCQk8UHJvcGVydHlOYW1lPkJhcjwvUHJvcGVydHlOYW1lPgoJCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW0+CgkJCQkJCTwvVGFibGVDb2x1bW5JdGVtcz4KCQkJCQk8L1RhYmxlUm93RW50cnk+CgkJCQk8L1RhYmxlUm93RW50cmllcz4KCQkJPC9UYWJsZUNvbnRyb2w+CgkJPC9WaWV3PgoJPC9WaWV3RGVmaW5pdGlvbnM+CjwvQ29uZmlndXJhdGlvbj4BCegBAAAJ6QEAAAbqAQAAFsO+bmFtZcO+LkZvcm1hdC5wczF4bWwG6wEAAE8vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3htbC/Dvm5hbWXDvi5Gb3JtYXQucHMxeG1sCQYAAAAJ7QEAAAnuAQAAASMBAAAPAAAABu8BAAC8Bzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CjxUeXBlcz4KICA8IS0tIEZvby5CYXIgLS0+CiAgPFR5cGU+CiAgICA8TmFtZT5EZXNlcmlhbGl6ZWQuRm9vLkJhcjwvTmFtZT4KICAgIDxNZW1iZXJzPgogICAgICA8TWVtYmVyU2V0PgogICAgICAgIDxOYW1lPlBTU3RhbmRhcmRNZW1iZXJzPC9OYW1lPgogICAgICAgIDxNZW1iZXJzPgogICAgICAgICAgPE5vdGVQcm9wZXJ0eT4KICAgICAgICAgICAgPE5hbWU+CiAgICAgICAgICAgICAgVGFyZ2V0VHlwZUZvckRlc2VyaWFsaXphdGlvbgogICAgICAgICAgICA8L05hbWU+CiAgICAgICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgICBGb28uQmFyCiAgICAgICAgICAgIDwvVmFsdWU+CiAgICAgICAgICA8L05vdGVQcm9wZXJ0eT4KICAgICAgICA8L01lbWJlcnM+CiAgICAgIDwvTWVtYmVyU2V0PgogICAgPC9NZW1iZXJzPgogIDwvVHlwZT4KICA8VHlwZT4KICAgIDxOYW1lPkZvby5CYXI8L05hbWU+CiAgICA8TWVtYmVycz4KICAgICAgPENvZGVQcm9wZXJ0eSBJc0hpZGRlbj0idHJ1ZSI+CiAgICAgICAgPE5hbWU+U2VyaWFsaXphdGlvbkRhdGE8L05hbWU+CiAgICAgICAgPEdldENvZGVSZWZlcmVuY2U+CiAgICAgICAgICA8VHlwZU5hbWU+UFNGcmFtZXdvcmsuU2VyaWFsaXphdGlvbi5TZXJpYWxpemF0aW9uVHlwZUNvbnZlcnRlcjwvVHlwZU5hbWU+CiAgICAgICAgICA8TWV0aG9kTmFtZT5HZXRTZXJpYWxpemF0aW9uRGF0YTwvTWV0aG9kTmFtZT4KICAgICAgICA8L0dldENvZGVSZWZlcmVuY2U+CiAgICAgIDwvQ29kZVByb3BlcnR5PgogICAgPC9NZW1iZXJzPgogICAgPFR5cGVDb252ZXJ0ZXI+CiAgICAgIDxUeXBlTmFtZT5QU0ZyYW1ld29yay5TZXJpYWxpemF0aW9uLlNlcmlhbGl6YXRpb25UeXBlQ29udmVydGVyPC9UeXBlTmFtZT4KICAgIDwvVHlwZUNvbnZlcnRlcj4KICA8L1R5cGU+CjwvVHlwZXM+AQnwAQAACfEBAAAG8gEAABXDvm5hbWXDvi5UeXBlcy5wczF4bWwG8wEAAE4vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3htbC/Dvm5hbWXDvi5UeXBlcy5wczF4bWwJBgAAAAn1AQAACfYBAAABNAEAAAcAAAAJCwAAAAAAAAAAAAAAATUBAAAHAAAACQsAAAAAAAAAAAAAAAE5AQAABwAAAAkLAAAAAAAAAAAAAAABOgEAAAcAAAAJCwAAAAAAAAAAAAAAATwBAAAHAAAACfgBAAABAAAAAQAAAAE9AQAA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ZXN0ZXJjb25maWcNAhErAgAABAAAAAZyAgAABG5hbWUNAxEtAgAABAAAAAZzAgAABG5hbWUNAxEvAgAABAAAAAZ0AgAABG5hbWUNAwE2AgAADwAAAAZ1AgAA5RA8IwpUaGlzIGlzIGFuIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlCgpCeSBkZWZhdWx0LCBpdCBpcyBlbm91Z2ggdG8gaGF2ZSBhIHNpbmdsZSBvbmUgb2YgdGhlbSwKaG93ZXZlciBpZiB5b3UgaGF2ZSBlbm91Z2ggY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBqdXN0aWZ5IGhhdmluZyBtdWx0aXBsZSBjb3BpZXMgb2YgaXQsCmZlZWwgdG90YWxseSBmcmVlIHRvIHNwbGl0IHRoZW0gaW50byBtdWx0aXBsZSBmaWxlcy4KIz4KCjwjCiMgRXhhbXBsZSBDb25maWd1cmF0aW9uClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLU5hbWUgJ0V4YW1wbGUuU2V0dGluZycgLVZhbHVlIDEwIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdpbnRlZ2VyJyAtSGFuZGxlciB7IH0gLURlc2NyaXB0aW9uICJFeGFtcGxlIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gWW91ciBtb2R1bGUgY2FuIHRoZW4gdXNlIHRoZSBzZXR0aW5nIHVzaW5nICdHZXQtUFNGQ29uZmlnVmFsdWUnIgojPgoKU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTmFtZSAnSW1wb3J0LkRvRG90U291cmNlJyAtVmFsdWUgJGZhbHNlIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdib29sJyAtRGVzY3JpcHRpb24gIldoZXRoZXIgdGhlIG1vZHVsZSBmaWxlcyBzaG91bGQgYmUgZG90c291cmNlZCBvbiBpbXBvcnQuIEJ5IGRlZmF1bHQsIHRoZSBmaWxlcyBvZiB0aGlzIG1vZHVsZSBhcmUgcmVhZCBhcyBzdHJpbmcgdmFsdWUgYW5kIGludm9rZWQsIHdoaWNoIGlzIGZhc3RlciBidXQgd29yc2Ugb24gZGVidWdnaW5nLiIKU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTmFtZSAnSW1wb3J0LkluZGl2aWR1YWxGaWxlcycgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGltcG9ydGVkIGluZGl2aWR1YWxseS4gRHVyaW5nIHRoZSBtb2R1bGUgYnVpbGQsIGFsbCBtb2R1bGUgY29kZSBpcyBjb21waWxlZCBpbnRvIGZldyBmaWxlcywgd2hpY2ggYXJlIGltcG9ydGVkIGluc3RlYWQgYnkgZGVmYXVsdC4gTG9hZGluZyB0aGUgY29tcGlsZWQgdmVyc2lvbnMgaXMgZmFzdGVyLCB1c2luZyB0aGUgaW5kaXZpZHVhbCBmaWxlcyBpcyBlYXNpZXIgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvdXQgYWRqdXN0bWVudHMuIgoKJGN1cnJlbnRQYXRoID0gIiRNb2R1bGVSb290XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSIKJGxhdGVzdEluc3RhbGxlZE1vZHVsZXMgPSBnZXQtbW9kdWxlIFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74gLUxpc3RBdmFpbGFibGUgfCBTb3J0LU9iamVjdCB2ZXJzaW9uIC1EZXNjZW5kaW5nIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgcGF0aCAtZmlyc3QgMQpXcml0ZS1QU0ZNZXNzYWdlICJDaGVja2luZyBpZiBjdXJyZW50IG1vZHVsZSAnJGN1cnJlbnRQYXRoJyBhZ2FpbnN0IGxhdGVzdCBpbnN0YWxsZWQgdmVyc2lvbiAnJGxhdGVzdEluc3RhbGxlZE1vZHVsZXMnIgppZiAoJGN1cnJlbnRQYXRoIC1lcSAkbGF0ZXN0SW5zdGFsbGVkTW9kdWxlcykgewogICAgU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTmFtZSAnSW50ZXJBY3RpdmVSZWdpc3Rlci5tb2R1bGVwYXRoJyAtVmFsdWUgIlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74iIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIk1vZHVsZSBQYXRoIGZvciBWYXVsdCBSZWdpc3RyYXRpb24sIE5hbWUgb2YgdGhlIG1vZHVsZSBhcyBsYXRlc3QgaW5zdGFsbGVkIHZlcnNpb24iCn0KZWxzZSB7CiAgICBTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74nIC1OYW1lICdJbnRlckFjdGl2ZVJlZ2lzdGVyLm1vZHVsZXBhdGgnIC1WYWx1ZSAkY3VycmVudFBhdGggLUluaXRpYWxpemUgLVZhbGlkYXRpb24gc3RyaW5nIC1EZXNjcmlwdGlvbiAiTW9kdWxlIFBhdGggZm9yIFZhdWx0IFJlZ2lzdHJhdGlvbiwgZGV2ZWxvcG1lbnQgcG9pbnQgdG8gbG9jYWwgbm9uIGluc3RhbGxlZCBQU00xIgp9AQl2AgAACXcCAAAGeAIAABFjb25maWd1cmF0aW9uLnBzMQZ5AgAAXi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbi5wczEJBgAAAAl7AgAACXwCAAABNwIAAA8AAAAGfQIAAPEDIyBDb25maWd1cmF0aW9ucwoKVGhyb3VnaCB0aGUgYFBTRnJhbWV3b3JrYCB5b3UgaGF2ZSBhIHNpbXBsZSBtZXRob2QgdGhhdCBhbGxvd3MgeW91IHRvIC4uLgoKIC0gUHVibGlzaCBzZXR0aW5ncwogLSBXaXRoIG9uYm9hcmQgZG9jdW1lbnRhdGlvbgogLSBJbnB1dCB2YWxpZGF0aW9uCiAtIFNjcmlwdHMgdGhhdCBydW4gb24gY2hhbmdlIG9mIHNldHRpbmdzCiAtIFRoYXQgY2FuIGJlIGRpc2NvdmVyZWQgYW5kIHVwZGF0ZWQgYnkgdGhlIHVzZXIKIC0gVGhhdCBjYW4gYmUgYWRtaW5pc3RyYXRlZCBieSBwb2xpY3kgJiBEU0MKClRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBhIGJpdCB0b28gY29tcGxleCB0byBkZXNjcmliZSBpbiBhIGhlbHAgZmlsZSwgeW91IGNhbiBob3dldmVyIHZpc2l0IHVzIGF0IGh0dHA6Ly9wc2ZyYW1ld29yay5vcmcgZm9yIGRldGFpbGVkIGd1aWRhbmNlLgoKQW4gZXhhbXBsZSBjYW4gYmUgc2VlbiBpbiB0aGUgYXR0YWNoZWQgcHMxIGZpbGUBCX4CAAAJfwIAAAaAAgAACXJlYWRtZS5tZAaBAgAAVi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvY29uZmlndXJhdGlvbnMvcmVhZG1lLm1kCQYAAAAJgwIAAAmEAgAAATgCAAAPAAAABoUCAADVASMgRnVuY3Rpb25zCgpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGludGVybmFsIGZ1bmN0aW9ucyBnby4KCkRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbW9kdWxlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdWJkaXZpZGUgdGhlbSBpbnRvIHN1YmZvbGRlcnMuCgpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseQEJhgIAAAmHAgAABogCAAAJcmVhZG1lLm1kBokCAABRL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9mdW5jdGlvbnMvcmVhZG1lLm1kCQYAAAAJiwIAAAmMAgAAATkCAAAPAAAABo0CAAD5AjwjClN0b3JlZCBzY3JpcHRibG9ja3MgYXJlIGF2YWlsYWJsZSBpbiBbUHNmVmFsaWRhdGVTY3JpcHQoKV0gYXR0cmlidXRlcy4KVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gY2VudHJhbGx5IHByb3ZpZGUgdGhlIHNhbWUgc2NyaXB0YmxvY2sgbXVsdGlwbGUgdGltZXMsCndpdGhvdXQgaGF2aW5nIHRvIG1haW50YWluIGl0IGluIHNlcGFyYXRlIGxvY2F0aW9ucy4KCkl0IGFsc28gcHJldmVudHMgbGVuZ3RoeSB2YWxpZGF0aW9uIHNjcmlwdGJsb2NrcyBmcm9tIG1ha2luZyB5b3VyIHBhcmFtZXRlciBibG9jawpoYXJkIHRvIHJlYWQuCgpTZXQtUFNGU2NyaXB0YmxvY2sgLU5hbWUgJ8O+bmFtZcO+LlNjcmlwdEJsb2NrTmFtZScgLVNjcmlwdGJsb2NrIHsKCQp9CiM+AQmOAgAACY8CAAAGkAIAABBzY3JpcHRibG9ja3MucHMxBpECAABbL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9zY3JpcHRibG9ja3Mvc2NyaXB0YmxvY2tzLnBzMQkGAAAACZMCAAAJlAIAAAE6AgAADwAAAAaVAgAA4glOZXctUFNGTGljZW5zZSAtUHJvZHVjdCAnw75uYW1lw74nIC1NYW51ZmFjdHVyZXIgJ8O+YXV0aG9yw74nIC1Qcm9kdWN0VmVyc2lvbiAkc2NyaXB0Ok1vZHVsZVZlcnNpb24gLVByb2R1Y3RUeXBlIE1vZHVsZSAtTmFtZSBNSVQgLVZlcnNpb24gIjEuMC4wLjAiIC1EYXRlIChHZXQtRGF0ZSAiw74hZGF0ZSHDviIpIC1UZXh0IEAiCkNvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoiQAEJlgIAAAmXAgAABpgCAAALbGljZW5zZS5wczEGmQIAAFEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3NjcmlwdHMvbGljZW5zZS5wczEJBgAAAAmbAgAACZwCAAABOwIAAA8AAAAGnQIAAJ4GPCMKQWRkIGFsbCB0aGluZ3MgeW91IHdhbnQgdG8gcnVuIGFmdGVyIGltcG9ydGluZyB0aGUgbWFpbiBmdW5jdGlvbiBjb2RlCgpXQVJOSU5HOiBPTkxZIHByb3ZpZGUgcGF0aHMgdG8gZmlsZXMhCgpBZnRlciBidWlsZGluZyB0aGUgbW9kdWxlLCB0aGlzIGZpbGUgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQsIGFkZGluZyBhbnl0aGluZyBidXQgcGF0aHMgdG8gZmlsZXMgLi4uCi0gV2lsbCBub3Qgd29yayBhZnRlciBwdWJsaXNoaW5nCi0gQ291bGQgYnJlYWsgdGhlIGJ1aWxkIHByb2Nlc3MKIz4KCiRtb2R1bGVSb290ID0gU3BsaXQtUGF0aCAoU3BsaXQtUGF0aCAkUFNTY3JpcHRSb290KQoKIyBMb2FkIENvbmZpZ3VyYXRpb25zCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxjb25maWd1cmF0aW9uc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUKCiMgTG9hZCBTY3JpcHRibG9ja3MKKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdGJsb2Nrc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUKCiMgTG9hZCBUYWIgRXhwYW5zaW9uCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFx0ZXBwXCoudGVwcC5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lCgojIExvYWQgVGFiIEV4cGFuc2lvbiBBc3NpZ25tZW50CiIkbW9kdWxlUm9vdFxpbnRlcm5hbFx0ZXBwXGFzc2lnbm1lbnQucHMxIgoKIyBMb2FkIExpY2Vuc2UKIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNcbGljZW5zZS5wczEiAQmeAgAACZ8CAAAGoAIAAA5wb3N0aW1wb3J0LnBzMQahAgAAVC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvc2NyaXB0cy9wb3N0aW1wb3J0LnBzMQkGAAAACaMCAAAJpAIAAAE8AgAADwAAAAalAgAAowM8IwpBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYmVmb3JlIGltcG9ydGluZyB0aGUgbWFpbiBmdW5jdGlvbiBjb2RlLgoKV0FSTklORzogT05MWSBwcm92aWRlIHBhdGhzIHRvIGZpbGVzIQoKQWZ0ZXIgYnVpbGRpbmcgdGhlIG1vZHVsZSwgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkLCBhZGRpbmcgYW55dGhpbmcgYnV0IHBhdGhzIHRvIGZpbGVzIC4uLgotIFdpbGwgbm90IHdvcmsgYWZ0ZXIgcHVibGlzaGluZwotIENvdWxkIGJyZWFrIHRoZSBidWlsZCBwcm9jZXNzCiM+CgokbW9kdWxlUm9vdCA9IFNwbGl0LVBhdGggKFNwbGl0LVBhdGggJFBTU2NyaXB0Um9vdCkKCiMgTG9hZCB0aGUgc3RyaW5ncyB1c2VkIGluIG1lc3NhZ2VzCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHN0cmluZ3MucHMxIgEJpgIAAAmnAgAABqgCAAANcHJlaW1wb3J0LnBzMQapAgAAUy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvc2NyaXB0cy9wcmVpbXBvcnQucHMxCQYAAAAJqwIAAAmsAgAAAT0CAAAPAAAABq0CAADCAzwjClRoaXMgZmlsZSBsb2FkcyB0aGUgc3RyaW5ncyBkb2N1bWVudHMgZnJvbSB0aGUgcmVzcGVjdGl2ZSBsYW5ndWFnZSBmb2xkZXJzLgpUaGlzIGFsbG93cyBsb2NhbGl6aW5nIG1lc3NhZ2VzIGFuZCBlcnJvcnMuCkxvYWQgcHNkMSBsYW5ndWFnZSBmaWxlcyBmb3IgZWFjaCBsYW5ndWFnZSB5b3Ugd2lzaCB0byBzdXBwb3J0LgpQYXJ0aWFsIHRyYW5zbGF0aW9ucyBhcmUgYWNjZXB0YWJsZSAtIHdoZW4gbWlzc2luZyBhIGN1cnJlbnQgbGFuZ3VhZ2UgbWVzc2FnZSwKaXQgd2lsbCBmYWxsYmFjayB0byBFbmdsaXNoIG9yIGFub3RoZXIgYXZhaWxhYmxlIGxhbmd1YWdlLgojPgpJbXBvcnQtUFNGTG9jYWxpemVkU3RyaW5nIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcZW4tdXNcKi5wc2QxIiAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTGFuZ3VhZ2UgJ2VuLVVTJwEJrgIAAAmvAgAABrACAAALc3RyaW5ncy5wczEGsQIAAFEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3NjcmlwdHMvc3RyaW5ncy5wczEJBgAAAAmzAgAACbQCAAABPgIAAA8AAAAGtQIAAG48IwojIEV4YW1wbGU6ClJlZ2lzdGVyLVBTRlRlcHBBcmd1bWVudENvbXBsZXRlciAtQ29tbWFuZCBHZXQtQWxjb2hvbCAtUGFyYW1ldGVyIFR5cGUgLU5hbWUgw75uYW1lw74uYWxjb2hvbAojPgEJtgIAAAm3AgAABrgCAAAOYXNzaWdubWVudC5wczEGuQIAAFEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3RlcHAvYXNzaWdubWVudC5wczEJBgAAAAm7AgAACbwCAAABPwIAAA8AAAAGvQIAAKABPCMKIyBFeGFtcGxlOgpSZWdpc3Rlci1QU0ZUZXBwU2NyaXB0YmxvY2sgLU5hbWUgIsO+bmFtZcO+LmFsY29ob2wiIC1TY3JpcHRCbG9jayB7ICdCZWVyJywnTWVhZCcsJ1doaXNrZXknLCdXaW5lJywnVm9ka2EnLCdSdW0gKDN5KScsICdSdW0gKDV5KScsICdSdW0gKDd5KScgfQojPgEJvgIAAAm/AgAABsACAAAQZXhhbXBsZS50ZXBwLnBzMQbBAgAAUy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvdGVwcC9leGFtcGxlLnRlcHAucHMxCQYAAAAJwwIAAAnEAgAAAUACAAAPAAAABsUCAACoByMgVGFiIEV4cGFuc2lvbgoKIyMgRGVzY3JpcHRpb24KCk1vZGVybiBUYWIgRXhwYW5zaW9uIHdhcyBvcGVuZWQgdG8gdXNlcnMgd2l0aCB0aGUgbW9kdWxlIGBUYWIgRXhwYW5zaW9uIFBsdXMgUGx1c2AgKFRFUFApLgoKSXQgYWxsb3dzIHlvdSB0byBkZWZpbmUsIHdoYXQgb3B0aW9ucyBhIHVzZXIgaXMgb2ZmZXJlZCB3aGVuIHRhYmJpbmcgdGhyb3VnaCBpbnB1dCBvcHRpb25zLiBUaGlzIGNhbiBzYXZlIGEgbG90IG9mIHRpbWUgZm9yIHRoZSB1c2VyIGFuZCBpcyBjb25zaWRlcmVkIGEga2V5IGVsZW1lbnQgaW4gdXNlciBleHBlcmllbmNlLgoKVGhlIGBQU0ZyYW1ld29ya2Agb2ZmZXJzIGEgc2ltcGxpZmllZCB3YXkgb2Ygb2ZmZXJpbmcganVzdCB0aGlzLCBhcyB0aGUgdHdvIGV4YW1wbGUgZmlsZXMgc2hvdy4KCiMjIENvbmNlcHQKCkN1c3RvbSB0YWIgY29tcGxldGlvbiBpcyBkZWZpbmVkIGluIHR3byBzdGVwczoKCiAtIERlZmluZSBhIHNjcmlwdGJsb2NrIHRoYXQgaXMgcnVuIHdoZW4gdGhlIHVzZXIgaGl0cyBgVEFCYCBhbmQgcHJvdmlkZXMgdGhlIHN0cmluZ3MgdGhhdCBhcmUgaGlzIG9wdGlvbnMuCiAtIEFzc2lnbiB0aGF0IHNjcmlwdGJsb2NrIHRvIHRoZSBwYXJhbWV0ZXIgb2YgYSBjb21tYW5kLiBZb3UgY2FuIGFzc2lnbiB0aGUgc2FtZSBzY3JpcHRibG9jayBtdWx0aXBsZSB0aW1lcy4KCiMjIFN0cnVjdHVyZQoKSW1wb3J0IG9yZGVyIG1hdHRlcnMuIEluIG9yZGVyIHRvIG1ha2UgdGhpbmdzIHdvcmsgd2l0aCB0aGUgZGVmYXVsdCBzY2FmZm9sZCwgZm9sbG93IHRob3NlIHJ1bGVzOgoKIC0gQWxsIHNjcmlwdGZpbGVzIF9kZWZpbmluZ18gY29tcGxldGlvbiBzY3JpcHRibG9ja3MgbGlrZSB0aGlzOiBgKi50ZXBwLnBzMWAKIC0gUHV0IGFsbCB5b3VyIGNvbXBsZXRpb24gYXNzaWdubWVudHMgaW4gYGFzc2lnbm1lbnQucHMxYAEJxgIAAAnHAgAABsgCAAAJcmVhZG1lLm1kBskCAABML1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC90ZXBwL3JlYWRtZS5tZAkGAAAACcsCAAAJzAIAAAFBAgAADwAAAAbNAgAA6AIjIGJpbiBmb2xkZXIKClRoZSBiaW4gZm9sZGVyIGV4aXN0cyB0byBzdG9yZSBiaW5hcnkgZGF0YS4gQW5kIHNjcmlwdHMgcmVsYXRlZCB0byB0aGUgdHlwZSBzeXN0ZW0uCgpUaGlzIG1heSBpbmNsdWRlIHlvdXIgb3duIEMjLWJhc2VkIGxpYnJhcnksIHRoaXJkIHBhcnR5IGxpYnJhcmllcyB5b3Ugd2FudCB0byBpbmNsdWRlICh3YXRjaCB0aGUgbGljZW5zZSEpLCBvciBhIHNjcmlwdCBkZWNsYXJpbmcgdHlwZSBhY2NlbGVyYXRvcnMgKGVmZmVjdGl2ZWx5IGFsaWFzZXMgZm9yIC5ORVQgdHlwZXMpCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBUeXBlIEFjY2VsZXJhdG9ycywgc2VlIHRoZSBoZWxwIG9uIFNldC1QU0ZUeXBlQWxpYXMBCc4CAAAJzwIAAAbQAgAACXJlYWRtZS5tZAbRAgAAZi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vYmluL3JlYWRtZS5tZAkGAAAACdMCAAAJ1AIAAAFCAgAADwAAAAbVAgAAmwFUT1BJQwoJYWJvdXRfw75uYW1lw74KCQpTSE9SVCBERVNDUklQVElPTgoJRXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgw75uYW1lw74gcG93ZXJzaGVsbCBtb2R1bGUKCQpMT05HIERFU0NSSVBUSU9OCgk8SW5zZXJ0IENvbnRlbnQgaGVyZT4KCktFWVdPUkRTCgnDvm5hbWXDvgEJ1gIAAAnXAgAABtgCAAAXYWJvdXRfw75uYW1lw74uaGVscC50eHQG2QIAAHYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2VuLXVzL2Fib3V0X8O+bmFtZcO+LmhlbHAudHh0CQYAAAAJ2wIAAAncAgAAAUMCAAAPAAAABt0CAACZASMgVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBnbywgdGhhdCBhcmUgd3JpdHRlbiBieQojIFdyaXRlLVBTRk1lc3NhZ2UsIFN0b3AtUFNGRnVuY3Rpb24gb3IgdGhlIFBTRnJhbWV3b3JrIHZhbGlkYXRpb24gc2NyaXB0YmxvY2tzCkB7Cgkna2V5JyA9ICdWYWx1ZScKfQEJ3gIAAAnfAgAABuACAAAMc3RyaW5ncy5wc2QxBuECAABrL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9lbi11cy9zdHJpbmdzLnBzZDEJBgAAAAnjAgAACeQCAAABRAIAAA8AAAAG5QIAAIMOZnVuY3Rpb24gR2V0LVNlY3JldCB7CiAgICA8IwogICAgLlNZTk9QU0lTCiAgICBRdWVyeSBhIHNpbmdsZSBzZWNyZXQuCgogICAgLkRFU0NSSVBUSU9OCiAgICBRdWVyeSBhIHNpbmdsZSBzZWNyZXQuCgogICAgLlBBUkFNRVRFUiBOYW1lCiAgICBOYW1lIHRvIGJlIHNlYXJjaGVkIGZvci4KCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuCgogICAgLkVYQU1QTEUKICAgIEdldC1TZWNyZXQgLVZhdWx0ICRWYXVsdG5hbWUgLU5hbWUgZm9vCgogICAgUmV0dXJucyB0aGUgc3RvcmVkIHNlY3JldCBmb3IgdGhlIGVudHJ5IGZvby4KCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbQ21kbGV0QmluZGluZygpXQogICAgcGFyYW0gKAogICAgICAgIFtzdHJpbmddICROYW1lLAogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICApCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUKICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgaWYgKCRBZGRpdGlvbmFsUGFyYW1ldGVycy5WZXJib3NlKSB7ICRWZXJib3NlUHJlZmVyZW5jZSA9ICdjb250aW51ZScgfQoKICAgIFdyaXRlLVBTRk1lc3NhZ2UgIkdldC1TZWNyZXQsIE5hbWU9JE5hbWUsICRWYXVsdE5hbWUsIEFkZGl0aW9uYWxQYXJhbWV0ZXJzPSQoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzfENvbnZlcnRUby1Kc29uIC1Db21wcmVzcykiCiAgICAjIFRPRE8gUGVyZm9ybSBSZXRyaWV2YWwgdm9vZG9vIDstKQoKICAgICNyZWdpb24gQ2hhbmdlIHRoaXMgY29kZSBhZ2FpbnN0IHNvbWV0aGluZyB1c2VmdWwvbW9yZSBzZWNyZXQKICAgICRzZWNyZXQ9R2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSAiU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5EdW1teUltcGxtZW50YXRpb24uU2VjcmV0cy4kTmFtZSIKICAgICNlbmRyZWdpb24gQ2hhbmdlIHRoaXMgY29kZSBhZ2FpbnN0IHNvbWV0aGluZyB1c2VmdWwvbW9yZSBzZWNyZXQKCiAgICAjIEV4YW1wbGUgQ29kZSBoYXMgdG8gYmUgcmVtb3ZlZCEKICAgICMgJHNlY3JldCA9IEdldC3DvmZ1bmN0aW9uUHJlZml4w75TZWNyZXQKICAgICMgV3JpdGUtUFNGTWVzc2FnZSAiRm91bmQgYCRzZWNyZXQ9JCgkc2VjcmV0LmdldHR5cGUoKSkiCiAgICAjICMgQ2hlY2sgaWYgb25seSBvbmUgc2VjcmV0IHdhcyByZXRyaWV2ZWQKICAgICMgaWYgKCRzZWNyZXQuQ291bnQgLWd0IDEgLWFuZCAkc2VjcmV0IC1pc25vdCBbaGFzaHRhYmxlXSkgewogICAgIyAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgRXJyb3IgJ011bHRpcGxlIGNyZWRlbnRpYWxzIGZvdW5kOyBTZWFyY2ggd2l0aCBHZXQtU2VjcmV0SW5mbyBhbmQgcmVxdWlyZSB0aGUgY29ycmVjdCBvbmUgYnkgKi5NZXRhRGF0YS5pZCcKICAgICMgICAgIFdhaXQtUFNGTWVzc2FnZQogICAgIyAgICAgdGhyb3cgJ011bHRpcGxlIGNyZWRlbnRpYWxzIGZvdW5kOyBTZWFyY2ggd2l0aCBHZXQtU2VjcmV0SW5mbyBhbmQgcmVxdWlyZSB0aGUgY29ycmVjdCBvbmUgYnkgKi5NZXRhRGF0YS5pZCcKICAgICMgfQogICAgcmV0dXJuICRzZWNyZXQgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxCn0KCgEJ5gIAAAnnAgAABugCAAAOR2V0LVNlY3JldC5wczEG6QIAAHEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy9HZXQtU2VjcmV0LnBzMQkGAAAACesCAAAJ7AIAAAFFAgAADwAAAAbtAgAA0xFmdW5jdGlvbiBHZXQtU2VjcmV0SW5mbyB7CiAgICA8IwogICAgLlNZTk9QU0lTCiAgICBSZXR1cm5zIFNlY3JldG1hbmFnZW1lbnRJbmZvcm1hdGlvbiBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIGVudHJpZXMuCgogICAgLkRFU0NSSVBUSU9OCiAgICBSZXR1cm5zIFNlY3JldG1hbmFnZW1lbnRJbmZvcm1hdGlvbiBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIGVudHJpZXMuCgogICAgLlBBUkFNRVRFUiBGaWx0ZXIKICAgIFRoZSBuYW1lIHRvIGJlIHNlYXJjaGVkCgogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUKICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0LgoKICAgIC5FWEFNUExFCiAgICBHZXQtU2VjcmV0SW5mbyAtVmF1bHQgJFZhdWx0bmFtZSAtTmFtZSBmb29iYXIKICAgIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgVmF1bHROYW1lCiAgICAtLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAgICAgIC0tLS0tLS0tLQogICAgZm9vYmFyIFs1ZGQ5MzdjNC1iMGEwLWVkMTEtYTg3Ni0wMDUwNTZiY2U5NDhdIFBTQ3JlZGVudGlhbCBQV1NhZmVJbnQKICAgIGZvb2JhciBbZWYyZmUxMWQtYjBhMC1lZDExLWE4NzYtMDA1MDU2YmNlOTQ4XSBQU0NyZWRlbnRpYWwgUFdTYWZlSW50CgogICAgUmV0dXJucyB0aGUgc3RvcmVkIHNlY3JldCBpbmZvLgoKICAgIC5OT1RFUwogICAgR2VuZXJhbCBub3RlcwogICAgIz4KICAgIFtDbWRsZXRCaW5kaW5nKCldCiAgICBwYXJhbSAoCiAgICAgICAgW3N0cmluZ10gJEZpbHRlciwKICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLAogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgKQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIGlmICgkQWRkaXRpb25hbFBhcmFtZXRlcnMuVmVyYm9zZSkgeyAkVmVyYm9zZVByZWZlcmVuY2UgPSAnY29udGludWUnIH0KCiAgICBXcml0ZS1QU0ZNZXNzYWdlICJHZXQtU2VjcmV0SW5mbywgRmlsdGVyPSRGaWx0ZXIsICRWYXVsdE5hbWUsIEFkZGl0aW9uYWxQYXJhbWV0ZXJzPSQoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzfENvbnZlcnRUby1Kc29uIC1Db21wcmVzcykiCiAgICAjIFRPRE8gUGVyZm9ybSBSZXRyaWV2YWwgdm9vZG9vIDstKSBvciBqdXN0IHRocm93ICdOb3RJbXBsZW1lbnRlZCcgaWYgeW91ciB2YXVsdCBkb2VzIG5vdCBzdXBwb3J0IGl0CiAgICAjcmVnaW9uIENoYW5nZSB0aGlzIGNvZGUgYWdhaW5zdCBzb21ldGhpbmcgdXNlZnVsL21vcmUgc2VjcmV0CiAgICBXcml0ZS1QU0ZNZXNzYWdlICJRdWVyeSBDb25maWcgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRHVtbXlJbXBsbWVudGF0aW9uLlNlY3JldEluZm8uJEZpbHRlciciCiAgICAkbWV0YURhdGEgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lICJTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkR1bW15SW1wbG1lbnRhdGlvbi5TZWNyZXRJbmZvLiRGaWx0ZXIiIC1GYWxsYmFjayAoQHtpbmZvID0gIlRoaXMgc2VjcmV0IHdpbGwgZXZhcG9yYXRlIHdpdGggc2Vzc2lvbiBjbG9zdXJlIiB9KQogICAgV3JpdGUtUFNGTWVzc2FnZSAiRm91bmQgaW5mbyAkKCRpbmZvfENvbnZlcnRUby1Kc29uIC1Db21wcmVzcykiCiAgICBXYWl0LVBTRk1lc3NhZ2UKICAgICRpbmZvID0gW01pY3Jvc29mdC5Qb3dlclNoZWxsLlNlY3JldE1hbmFnZW1lbnQuU2VjcmV0SW5mb3JtYXRpb25dOjpuZXcoCiAgICAgICAgJGZpbHRlciwgIyBOYW1lIG9mIHNlY3JldAogICAgICAgIFtNaWNyb3NvZnQuUG93ZXJTaGVsbC5TZWNyZXRNYW5hZ2VtZW50LlNlY3JldFR5cGVdOjpQU0NyZWRlbnRpYWwsICMgU2VjcmV0IGRhdGEgdHlwZSBbTWljcm9zb2Z0LlBvd2VyU2hlbGwuU2VjcmV0TWFuYWdlbWVudC5TZWNyZXRUeXBlXQogICAgICAgICRWYXVsdE5hbWUsICMgTmFtZSBvZiB2YXVsdAogICAgICAgICRtZXRhRGF0YSkKICAgIHJldHVybiAkaW5mbwogICAgI2VuZHJlZ2lvbiBDaGFuZ2UgdGhpcyBjb2RlIGFnYWluc3Qgc29tZXRoaW5nIHVzZWZ1bC9tb3JlIHNlY3JldAp9CgoBCe4CAAAJ7wIAAAbwAgAAEkdldC1TZWNyZXRJbmZvLnBzMQbxAgAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL0dldC1TZWNyZXRJbmZvLnBzMQkGAAAACfMCAAAJ9AIAAAFGAgAADwAAAAb1AgAAzAEjIEZ1bmN0aW9ucwoKVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBmdW5jdGlvbnMgZ28uCgpEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG1vZHVsZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViZGl2aWRlIHRoZW0gaW50byBzdWJmb2xkZXJzLgoKVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCfYCAAAJ9wIAAAb4AgAACXJlYWRtZS5tZAb5AgAAbC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL3JlYWRtZS5tZAkGAAAACfsCAAAJ/AIAAAFHAgAADwAAAAb9AgAA3AgKZnVuY3Rpb24gUmVtb3ZlLVNlY3JldCB7CiAgICA8IwogICAgLlNZTk9QU0lTCiAgICBSZW1vdmVzIGEgc2VjcmV0IGZyb20gdGhlIHZhdWx0LiBOT1QgaW1wbGVtZW50ZWQgeWV0LgoKICAgIC5ERVNDUklQVElPTgogICAgUmVtb3ZlcyBhIHNlY3JldCBmcm9tIHRoZSB2YXVsdC4gTk9UIGltcGxlbWVudGVkIHlldC4KCiAgICAuUEFSQU1FVEVSIE5hbWUKICAgIE5hbWUgdG8gYmUgc2VhcmNoZWQgZm9yLgoKICAgIC5QQVJBTUVURVIgVmF1bHROYW1lCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0LgoKICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4KCiAgICAuRVhBTVBMRQogICAgQW4gZXhhbXBsZQogICAgaXMgbm90IG5lY2Nlc3NhcnkKCiAgICBBcyBub3QgaW1wbGVtZW50ZWQKCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNSZXZpZXdVbnVzZWRQYXJhbWV0ZXInLCAnJyldCiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNVc2VTaG91bGRQcm9jZXNzZm9yU3RhdGVDaGFuZ2luZ0Z1bmN0aW9ucycsICcnKV0KICAgIFtDbWRsZXRCaW5kaW5nKCldCiAgICBwYXJhbSAoCiAgICAgICAgW3N0cmluZ10gJE5hbWUsCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwKICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgICkKICAgICMgV29ya2Fyb3VuZCBDYXNlU2Vuc2l0aXZlIEhhc2hUYWJsZQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBpZiAoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzLlZlcmJvc2UpIHsgJFZlcmJvc2VQcmVmZXJlbmNlID0gJ2NvbnRpbnVlJyB9CgogICAgIyBUT0RPIGFkZCB5b3VyIGRhbmdlcm91cyBjb2RlIDstKSBvciBrZWVwIHJlbW92aW5nIHVuc3VwcG9ydGVkCiAgICB0aHJvdyAiTm90IEltcGxlbWVudGVkIgp9CgoBCf4CAAAJ/wIAAAYAAwAAEVJlbW92ZS1TZWNyZXQucHMxBgEDAAB0L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMvUmVtb3ZlLVNlY3JldC5wczEJBgAAAAkDAwAACQQDAAABSAIAAA8AAAAGBQMAAM4LZnVuY3Rpb24gU2V0LVNlY3JldCB7CiAgICA8IwogICAgLlNZTk9QU0lTCiAgICBVcGRhdGVzIGEgc2VjcmV0IHN0b3JlZCBpbiB0aGUgdmF1bHQuCgogICAgLkRFU0NSSVBUSU9OCiAgICBVcGRhdGVzIGEgc2VjcmV0IHN0b3JlZCBpbiB0aGUgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBOYW1lCiAgICBOYW1lIG9mIHRoZSBlbnRyeQoKICAgIC5QQVJBTUVURVIgU2VjcmV0CiAgICBUaGUgTmV3IFNlY3JldC4gQ2FuIGJlIGEgU2VjdXJlU3RyaW5nIG9yIGEgUFNDcmVkZW50aWFsLW9iamVjdAoKICAgIC5QQVJBTUVURVIgVmF1bHROYW1lCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0LgoKICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4KCiAgICAuRVhBTVBMRQogICAgU2V0LVNlY3JldCAtVmVyYm9zZSAtVmF1bHQgJFZhdWx0bmFtZSAtU2VjcmV0IChHZXQtQ3JlZGVudGlhbCkgLU5hbWUgZm9vCgogICAgVXBkYXRlcyB1c2VybmFtZSBhbmQgcGFzc3dvcmQgb2YgdGhlIGVudHJ5LgoKICAgIC5OT1RFUwogICAgR2VuZXJhbCBub3RlcwogICAgIz4KICAgIFtDbWRsZXRCaW5kaW5nKCldCiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNVc2VTaG91bGRQcm9jZXNzZm9yU3RhdGVDaGFuZ2luZ0Z1bmN0aW9ucycsICcnKV0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1VzZU91dHB1dFR5cGVDb3JyZWN0bHknLCAnJyldCiAgICBwYXJhbSAoCiAgICAgICAgW3N0cmluZ10gJE5hbWUsCiAgICAgICAgW29iamVjdF0gJFNlY3JldCwKICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLAogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgKQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIGlmICgkQWRkaXRpb25hbFBhcmFtZXRlcnMuVmVyYm9zZSkgeyAkVmVyYm9zZVByZWZlcmVuY2UgPSAnY29udGludWUnIH0KICAgICMgVE9ETyBQZXJmb3JtIHVwZGF0ZSB2b29kb28gOy0pCiAgICAjcmVnaW9uIENoYW5nZSB0aGlzIGNvZGUgYWdhaW5zdCBzb21ldGhpbmcgdXNlZnVsL21vcmUgc2VjcmV0CiAgICBTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74nIC1OYW1lICJEdW1teUltcGxtZW50YXRpb24uU2VjcmV0cy4kTmFtZSIgLVZhbHVlICRTZWNyZXQgLUhpZGRlbgogICAgI2VuZHJlZ2lvbiBDaGFuZ2UgdGhpcyBjb2RlIGFnYWluc3Qgc29tZXRoaW5nIHVzZWZ1bC9tb3JlIHNlY3JldAoKICAgIFdhaXQtUFNGTWVzc2FnZQogICAgcmV0dXJuICR0cnVlCn0KCgEJBgMAAAkHAwAABggDAAAOU2V0LVNlY3JldC5wczEGCQMAAHEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy9TZXQtU2VjcmV0LnBzMQkGAAAACQsDAAAJDAMAAAFJAgAADwAAAAYNAwAApg1mdW5jdGlvbiBTZXQtU2VjcmV0SW5mbyB7CiAgICA8IwogICAgLlNZTk9QU0lTCiAgICBVcGRhdGVzIGFkZGl0aW9uYWwgZmllbGRzIG9mIGEgc2luZ2xlIGVudHJ5LgoKICAgIC5ERVNDUklQVElPTgogICAgVXBkYXRlcyBhZGRpdGlvbmFsIGZpZWxkcyBvZiBhIHNpbmdsZSBlbnRyeS4KCiAgICAuUEFSQU1FVEVSIE5hbWUKICAgIE5hbWUgb2YgdGhlIGVudHJ5CgogICAgLlBBUkFNRVRFUiBNZXRhZGF0YQogICAgVGhlIEhhc2hUYWJsZSB3aXRoIHRoZSBmaWVsZHMgdG8gdXBkYXRlLgogICAgUG9zc2libGUgS2V5czogJ1VzZXJuYW1lJywgJ1Bhc3N3b3JkJywgJ05hbWUnLCAnTWVtbycKCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuCgogICAgLkVYQU1QTEUKICAgIFNldC1TZWNyZXRJbmZvICAtVmF1bHQgJFZhdWx0bmFtZSAgLU5hbWUgZm9vIC1NZXRhZGF0YSBAe21lbW89J05vdGl6IDInO3VzZXJuYW1lPSdmb28nO3Bhc3N3b3JkPSRteU5ld1NlY3JldH0KCiAgICBVcGRhdGVzIHRoZSBlbnRyeSB3aXRoIG5ldyBtZW1vLgoKICAgIC5FWEFNUExFCiAgICBTZXQtU2VjcmV0SW5mbyAgLVZhdWx0ICRWYXVsdG5hbWUgIC1OYW1lIGZvbyAtTWV0YWRhdGEgQHtuYW1lPSdCYXInfQoKICAgIFJlbmFtZXMgdGhlIGVudHJ5ICdmb28nIHRvICdCYXInCgogICAgLk5PVEVTCiAgICBHZW5lcmFsIG5vdGVzCiAgICAjPgogICAgW0NtZGxldEJpbmRpbmcoKV0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1VzZVNob3VsZFByb2Nlc3Nmb3JTdGF0ZUNoYW5naW5nRnVuY3Rpb25zJywgJycpXQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTVXNlT3V0cHV0VHlwZUNvcnJlY3RseScsICcnKV0KICAgIHBhcmFtICgKICAgICAgICBbc3RyaW5nXSAkTmFtZSwKICAgICAgICBbaGFzaHRhYmxlXSAkTWV0YWRhdGEsCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwKICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgICkKICAgICMgV29ya2Fyb3VuZCBDYXNlU2Vuc2l0aXZlIEhhc2hUYWJsZQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBpZiAoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzLlZlcmJvc2UpIHsgJFZlcmJvc2VQcmVmZXJlbmNlID0gJ2NvbnRpbnVlJyB9CiAgICAjIFRPRE8gUGVyZm9ybSB1cGRhdGUgdm9vZG9vIDstKQogICAgI3JlZ2lvbiBDaGFuZ2UgdGhpcyBjb2RlIGFnYWluc3Qgc29tZXRoaW5nIHVzZWZ1bC9tb3JlIHNlY3JldAogICAgU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTmFtZSAiRHVtbXlJbXBsbWVudGF0aW9uLlNlY3JldEluZm8uJE5hbWUiIC1WYWx1ZSAkTWV0YWRhdGEgLUhpZGRlbgogICAgI2VuZHJlZ2lvbiBDaGFuZ2UgdGhpcyBjb2RlIGFnYWluc3Qgc29tZXRoaW5nIHVzZWZ1bC9tb3JlIHNlY3JldAoKICAgIFdhaXQtUFNGTWVzc2FnZQogICAgcmV0dXJuICR0cnVlCn0KAQkOAwAACQ8DAAAGEAMAABJTZXQtU2VjcmV0SW5mby5wczEGEQMAAHUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy9TZXQtU2VjcmV0SW5mby5wczEJBgAAAAkTAwAACRQDAAABSgIAAA8AAAAGFQMAAMQKCmZ1bmN0aW9uIFRlc3QtU2VjcmV0VmF1bHQgewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgVGVzdHMgaWYgdGhlIHZhdWx0IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCBpZiBpdCBpcyB1bmxvY2tlZC4KCiAgICAuREVTQ1JJUFRJT04KICAgIFRlc3RzIGlmIHRoZSB2YXVsdCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBhbmQgaWYgaXQgaXMgdW5sb2NrZWQuCgogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUKICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0LgoKICAgIC5FWEFNUExFCiAgICBUZXN0LVNlY3JldFZhdWx0IC1WYXVsdE5hbWUgJHZhdWx0bmFtZQoKICAgIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsbAoKICAgIC5OT1RFUwogICAgR2VuZXJhbCBub3RlcwogICAgIz4KICAgIFtDbWRsZXRCaW5kaW5nKCldCiAgICBwYXJhbSAoCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwKICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgICkKICAgICMgV29ya2Fyb3VuZCBDYXNlU2Vuc2l0aXZlIEhhc2hUYWJsZQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBpZiAoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzLlZlcmJvc2UpIHsgJFZlcmJvc2VQcmVmZXJlbmNlID0gJ2NvbnRpbnVlJyB9CiAgICBXcml0ZS1QU0ZNZXNzYWdlICAiVGVzdC1TZWNyZXRWYXVsdCBmcm9tICRWYXVsdE5hbWUsIEFkZGl0aW9uYWxQYXJhbWV0ZXJzPSQoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzfENvbnZlcnRUby1Kc29uIC1Db21wcmVzcykiCgogICAgIyBUT0RPIFBlcmZvcm0gc29tZSByZWFsIHdvcmxkIGNoZWNrcyBsaWtlIG9wZW5pbmcgdGhlIHZhdWx0CiAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBWZXJib3NlICJTZWNyZXRNYW5hZ2VtZW50OiBUZXN0aW5nIFZhdWx0ICR7VmF1bHROYW1lfSIKICAgICR2YXVsdCA9IEdldC1TZWNyZXRWYXVsdCAkVmF1bHROYW1lIC1FcnJvckFjdGlvbiBTdG9wCiAgICBpZiAoJHZhdWx0Lk1vZHVsZU5hbWUgLW5lICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JykgewogICAgICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEVycm9yICIkdmF1bHROYW1lIHdhcyBmb3VuZCBidXQgaXMgbm90IGEgw75uYW1lw74gVmF1bHQuIgogICAgICAgIFdhaXQtUFNGTWVzc2FnZQogICAgICAgIHJldHVybiAkZmFsc2UKICAgIH0KICAgIHJldHVybiAkdHJ1ZQp9CgEJFgMAAAkXAwAABhgDAAAUVGVzdC1TZWNyZXRWYXVsdC5wczEGGQMAAHcvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy9UZXN0LVNlY3JldFZhdWx0LnBzMQkGAAAACRsDAAAJHAMAAAFLAgAADwAAAAYdAwAAwgtmdW5jdGlvbiBVbmxvY2stU2VjcmV0VmF1bHQgewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgVW5sb2NrcyB0aGUgdmF1bHQuCgogICAgLkRFU0NSSVBUSU9OCiAgICBVbmxvY2tzIHRoZSB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIFBhc3N3b3JkCiAgICBUaGUgcGFzc3dvcmQgbmVlZGVkIGZvciB1bmxvY2tpbmcuCgogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUKICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0LgoKICAgIC5FWEFNUExFCiAgICBVbmxvY2stU2VjcmV0VmF1bHQgLVZhdWx0TmFtZSAkdmF1bHROYW1lIC1QYXNzd29yZCAoUmVhZC1Ib3N0IC1Bc1NlY3VyZVN0cmluZykKCiAgICBVbmxvY2tzIHRoZSB2YXVsdAoKICAgIC5OT1RFUwogICAgR2VuZXJhbCBub3RlcwogICAgIz4KICAgIFtDbWRsZXRCaW5kaW5nKCldCiAgICBwYXJhbSAoCiAgICAgICAgW1NlY3VyZVN0cmluZ10gJFBhc3N3b3JkLAogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICApCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUKICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycwoKICAgIFdyaXRlLVBTRk1lc3NhZ2UgIlVubG9ja2luZyBTZWNyZXRWYXVsdCAkVmF1bHROYW1lLCBBZGRpdGlvbmFsUGFyYW1ldGVycz0kKCRBZGRpdGlvbmFsUGFyYW1ldGVyc3xDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIgogICAgJHZhdWx0ID0gR2V0LVNlY3JldFZhdWx0ICRWYXVsdE5hbWUgLUVycm9yQWN0aW9uIFN0b3AKICAgIGlmICgkdmF1bHQuTW9kdWxlTmFtZSAtbmUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74nKSB7CiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgRXJyb3IgIiR2YXVsdE5hbWUgd2FzIGZvdW5kIGJ1dCBpcyBub3QgYSDDvm5hbWXDviBWYXVsdC4iCiAgICAgICAgV2FpdC1QU0ZNZXNzYWdlCiAgICAgICAgcmV0dXJuICRmYWxzZQogICAgfQogICAgIyBUT0RPIFNob3VsZCB0aGUgbWFzdGVyIHBhc3N3b3JkIGJlIGNhY2hlZD8KICAgICMgU2V0LVZhcmlhYmxlIC1OYW1lICJWYXVsdF8ke3ZhdWx0TmFtZX1fTWFzdGVyUGFzc3dvcmQiIC1TY29wZSBTY3JpcHQgLVZhbHVlICRQYXNzd29yZCAtRm9yY2UKCiAgICAjIFRPRE8gUGVyZm9ybSB0aGUgY29ubmVjdGlvbiB2b29kb28gOy0pCiAgICAjIEJlc3QgUHJhY3Rpc2UgaXMgZS5nLiB0byBjYWxsIFRlc3QtU2VjcmV0VmF1bHQgd2hpY2ggdXNlcyB0aGUgY2FjaGVkIG1hc3RlciBwYXNzd29yZCBmb3IgYSB0ZXN0IGFjY2VzcyBvZiB0aGUgdmF1bHQKICAgIHJldHVybiAkdHJ1ZQp9AQkeAwAACR8DAAAGIAMAABZVbmxvY2stU2VjcmV0VmF1bHQucHMxBiEDAAB5L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMvVW5sb2NrLVNlY3JldFZhdWx0LnBzMQkGAAAACSMDAAAJJAMAAAFMAgAADwAAAAYlAwAA9gdmdW5jdGlvbiBVbnJlZ2lzdGVyLVNlY3JldFZhdWx0IHsKICAgIDwjCiAgICAuU1lOT1BTSVMKICAgIFVucmVnaXN0ZXJzIHRoZSB2YXVsdCBhbmQgcmVtb3ZlcyBpbk1lbW9yeSBkYXRhIGZvciBzZWN1cml0eS4KCiAgICAuREVTQ1JJUFRJT04KICAgIFVucmVnaXN0ZXJzIHRoZSB2YXVsdCBhbmQgcmVtb3ZlcyBpbk1lbW9yeSBkYXRhIGZvciBzZWN1cml0eS4KCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuCgogICAgLkVYQU1QTEUKICAgIFVucmVnaXN0ZXItU2VjcmV0VmF1bHQgLVZhdWx0TmFtZSAkdmF1bHROYW1lCgogICAgUmVtb3ZlcyB0aGUgcmVnaXN0cmF0aW9uCgogICAgLk5PVEVTCiAgICBHZW5lcmFsIG5vdGVzCiAgICAjPgogICAgW0NtZGxldEJpbmRpbmcoKV0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1Jldmlld1VudXNlZFBhcmFtZXRlcicsICcnKV0KICAgIHBhcmFtICgKICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLAogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgKQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMKCiAgICAjIFRPRE8gQWRkIHlvdXIgc3BlY2lmaWMgZGlzY29ubmVjdGlvbiBjb21tYW5kcywgZS5nLiByZW1vdmluZyB0aGUgc3RvcmVkIG1hc3RlciBwYXNzd29yZAogICAgIyBSZW1vdmUtVmFyaWFibGUgLU5hbWUgIlZhdWx0XyR7dmF1bHROYW1lfV9NYXN0ZXJQYXNzd29yZCIgLVNjb3BlIFNjcmlwdCAtRm9yY2UgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUKfQoBCSYDAAAJJwMAAAYoAwAAGlVucmVnaXN0ZXItU2VjcmV0VmF1bHQucHMxBikDAAB9L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMvVW5yZWdpc3Rlci1TZWNyZXRWYXVsdC5wczEJBgAAAAkrAwAACSwDAAABTQIAAA8AAAAGLQMAAKoCIyBGdW5jdGlvbnMuU2hhcmVkSW50ZXJuYWwKClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSBpbnRlcm5hbCBmdW5jdGlvbnMgZ28gd2hpY2ggd2lsbCBiZSBpbXBvcnRlZCBmcm9tIHRoZSBtYWluCmFuZCB0aGUgZXh0ZW5zaW9uIG1vZHVsZS4KClRoZSBtb2R1bGUgd2lsbCBwaWNrIHVwIGFsbCAucHMxIGZpbGVzIHJlY3Vyc2l2ZWx5LiBJZiB0aGUgbW9kdWxlIGlzIGJ1aWxkIHdpdGgKJ3ZzdHMtYnVpbGQucHMxJyB0aGUgY29udGVudCBvZiBhbGwgKi5wczEgZmlsZXMgaXMgY29waWVkIGludG8gdGhlICoucHNtMSBmaWxlLgEJLgMAAAkvAwAABjADAAAJcmVhZG1lLm1kBjEDAAB7L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMuc2hhcmVkaW50ZXJuYWwvcmVhZG1lLm1kCQYAAAAJMwMAAAk0AwAAAU4CAAABAAAACTUDAAAGNgMAAA5jb25maWd1cmF0aW9ucwY3AwAAcC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvY29uZmlndXJhdGlvbnMJBgAAAAk5AwAACToDAAABTwIAAAEAAAAJOwMAAAY8AwAACWZ1bmN0aW9ucwY9AwAAay9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvZnVuY3Rpb25zCQYAAAAJPwMAAAlAAwAAAVACAAABAAAACUEDAAAGQgMAAAxzY3JpcHRibG9ja3MGQwMAAG4vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3NjcmlwdGJsb2NrcwkGAAAACUUDAAAJRgMAAAFRAgAAAQAAAAlHAwAABkgDAAAHc2NyaXB0cwZJAwAAaS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvc2NyaXB0cwkGAAAACUsDAAAJTAMAAAFSAgAAAQAAAAlNAwAABk4DAAAEdGVwcAZPAwAAZi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvdGVwcAkGAAAACVEDAAAJUgMAAAFTAgAAAQAAAAlTAwAABlQDAAAJZnVuY3Rpb25zBlUDAABoL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9mdW5jdGlvbnMJBgAAAAlXAwAACVgDAAABVAIAAAEAAAAJWQMAAAZaAwAAB2dlbmVyYWwGWwMAAGYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzL2dlbmVyYWwJBgAAAAldAwAACV4DAAABVQIAAA8AAAAGXwMAANYacGFyYW0gKAoJJFRlc3RHZW5lcmFsID0gJHRydWUsCgoJJFRlc3RGdW5jdGlvbnMgPSAkdHJ1ZSwKCglbVmFsaWRhdGVTZXQoJ05vbmUnLCAnTm9ybWFsJywgJ0RldGFpbGVkJywgJ0RpYWdub3N0aWMnKV0KCVtBbGlhcygnU2hvdycpXQoJJE91dHB1dCA9ICJOb25lIiwKCgkkSW5jbHVkZSA9ICIqIiwKCgkkRXhjbHVkZSA9ICIiCikKCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiU3RhcnRpbmcgVGVzdHMiCgpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkltcG9ydGluZyBNb2R1bGUiCgokZ2xvYmFsOnRlc3Ryb290ID0gJFBTU2NyaXB0Um9vdAokZ2xvYmFsOl9fcGVzdGVyX2RhdGEgPSBAeyB9CgpSZW1vdmUtTW9kdWxlIMO+bmFtZcO+IC1FcnJvckFjdGlvbiBJZ25vcmUKSW1wb3J0LU1vZHVsZSAiJFBTU2NyaXB0Um9vdFwuLlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEiCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc20xIiAtRm9yY2UKCiMgTmVlZCB0byBpbXBvcnQgZXhwbGljaXRseSBzbyB3ZSBjYW4gdXNlIHRoZSBjb25maWd1cmF0aW9uIGNsYXNzCkltcG9ydC1Nb2R1bGUgUGVzdGVyCgrDviF0ZXN0Zm9sZGVyIcO+CgokdG90YWxGYWlsZWQgPSAwCiR0b3RhbFJ1biA9IDAKCiR0ZXN0cmVzdWx0cyA9IEAoKQokY29uZmlnID0gW1Blc3RlckNvbmZpZ3VyYXRpb25dOjpEZWZhdWx0CsO+IXBlc3RlcmNvbmZpZyHDvgoKI3JlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cwppZiAoJFRlc3RHZW5lcmFsKQp7CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIk1vZHVsZXMgaW1wb3J0ZWQsIHByb2NlZWRpbmcgd2l0aCBnZW5lcmFsIHRlc3RzIgoJZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRQU1NjcmlwdFJvb3RcZ2VuZXJhbCIgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5UZXN0cy5wczEiKSkKCXsKCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9CgkJaWYgKCRmaWxlLk5hbWUgLWxpa2UgJEV4Y2x1ZGUpIHsgY29udGludWUgfQoKCQlXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBTaWduaWZpY2FudCAtTWVzc2FnZSAiICBFeGVjdXRpbmcgPGM9J2VtJz4kKCRmaWxlLk5hbWUpPC9jPiIKCQkkY29uZmlnLlRlc3RSZXN1bHQuT3V0cHV0UGF0aCA9IEpvaW4tUGF0aCAiJFBTU2NyaXB0Um9vdFwuLlwuLlxUZXN0UmVzdWx0cyIgIlRFU1QtJCgkZmlsZS5CYXNlTmFtZSkueG1sIgoJCSRjb25maWcuUnVuLlBhdGggPSAkZmlsZS5GdWxsTmFtZQoJCSRjb25maWcuUnVuLlBhc3NUaHJ1ID0gJHRydWUKCQkkY29uZmlnLk91dHB1dC5WZXJib3NpdHkgPSAkT3V0cHV0CiAgICAJJHJlc3VsdHMgPSBJbnZva2UtUGVzdGVyIC1Db25maWd1cmF0aW9uICRjb25maWcKCQlmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQoJCXsKCQkJJHRvdGFsUnVuICs9ICRyZXN1bHQuVG90YWxDb3VudAoJCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudAoJCQkkcmVzdWx0LlRlc3RzIHwgV2hlcmUtT2JqZWN0IFJlc3VsdCAtbmUgJ1Bhc3NlZCcgfCBGb3JFYWNoLU9iamVjdCB7CgkJCQkkdGVzdHJlc3VsdHMgKz0gW3BzY3VzdG9tb2JqZWN0XUB7CgkJCQkJQmxvY2sgICAgPSAkXy5CbG9jawoJCQkJCU5hbWUJID0gIkl0ICQoJF8uTmFtZSkiCgkJCQkJUmVzdWx0ICAgPSAkXy5SZXN1bHQKCQkJCQlNZXNzYWdlICA9ICRfLkVycm9yUmVjb3JkLkRpc3BsYXlFcnJvck1lc3NhZ2UKCQkJCX0KCQkJfQoJCX0KCX0KfQojZW5kcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzCgokZ2xvYmFsOl9fcGVzdGVyX2RhdGEuU2NyaXB0QW5hbHl6ZXIgfCBPdXQtSG9zdAoKI3JlZ2lvbiBUZXN0IENvbW1hbmRzCmlmICgkVGVzdEZ1bmN0aW9ucykKewoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJQcm9jZWVkaW5nIHdpdGggaW5kaXZpZHVhbCB0ZXN0cyIKCWZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkUFNTY3JpcHRSb290XGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKlRlc3RzLnBzMSIpKQoJewoJCWlmICgkZmlsZS5OYW1lIC1ub3RsaWtlICRJbmNsdWRlKSB7IGNvbnRpbnVlIH0KCQlpZiAoJGZpbGUuTmFtZSAtbGlrZSAkRXhjbHVkZSkgeyBjb250aW51ZSB9CgoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyAkKCRmaWxlLk5hbWUpIgoJCSRjb25maWcuVGVzdFJlc3VsdC5PdXRwdXRQYXRoID0gSm9pbi1QYXRoICIkUFNTY3JpcHRSb290XC4uXC4uXFRlc3RSZXN1bHRzIiAiVEVTVC0kKCRmaWxlLkJhc2VOYW1lKS54bWwiCgkJJGNvbmZpZy5SdW4uUGF0aCA9ICRmaWxlLkZ1bGxOYW1lCgkJJGNvbmZpZy5SdW4uUGFzc1RocnUgPSAkdHJ1ZQoJCSRjb25maWcuT3V0cHV0LlZlcmJvc2l0eSA9ICRPdXRwdXQKICAgIAkkcmVzdWx0cyA9IEludm9rZS1QZXN0ZXIgLUNvbmZpZ3VyYXRpb24gJGNvbmZpZwoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpCgkJewoJCQkkdG90YWxSdW4gKz0gJHJlc3VsdC5Ub3RhbENvdW50CgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50CgkJCSRyZXN1bHQuVGVzdHMgfCBXaGVyZS1PYmplY3QgUmVzdWx0IC1uZSAnUGFzc2VkJyB8IEZvckVhY2gtT2JqZWN0IHsKCQkJCSR0ZXN0cmVzdWx0cyArPSBbcHNjdXN0b21vYmplY3RdQHsKCQkJCQlCbG9jayAgICA9ICRfLkJsb2NrCgkJCQkJTmFtZQkgPSAiSXQgJCgkXy5OYW1lKSIKCQkJCQlSZXN1bHQgICA9ICRfLlJlc3VsdAoJCQkJCU1lc3NhZ2UgID0gJF8uRXJyb3JSZWNvcmQuRGlzcGxheUVycm9yTWVzc2FnZQoJCQkJfQoJCQl9CgkJfQoJfQp9CiNlbmRyZWdpb24gVGVzdCBDb21tYW5kcwoKJHRlc3RyZXN1bHRzIHwgU29ydC1PYmplY3QgRGVzY3JpYmUsIENvbnRleHQsIE5hbWUsIFJlc3VsdCwgTWVzc2FnZSB8IEZvcm1hdC1MaXN0CgppZiAoJHRvdGFsRmFpbGVkIC1lcSAwKSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICJBbGwgPGM9J2VtJz4kdG90YWxSdW48L2M+IHRlc3RzIGV4ZWN1dGVkIHdpdGhvdXQgYSBzaW5nbGUgZmFpbHVyZSEiIH0KZWxzZSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICI8Yz0nZW0nPiR0b3RhbEZhaWxlZCB0ZXN0czwvYz4gb3V0IG9mIDxjPSdzdWInPiR0b3RhbFJ1bjwvYz4gdGVzdHMgZmFpbGVkISIgfQoKaWYgKCR0b3RhbEZhaWxlZCAtZ3QgMCkKewoJdGhyb3cgIiR0b3RhbEZhaWxlZCAvICR0b3RhbFJ1biB0ZXN0cyBmYWlsZWQhIgp9AQlgAwAACWEDAAAGYgMAAApwZXN0ZXIucHMxBmMDAABpL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9wZXN0ZXIucHMxCQYAAAAJZQMAAAlmAwAAAVYCAAAPAAAABmcDAACEByMgRGVzY3JpcHRpb24KClRoaXMgaXMgdGhlIGZvbGRlciwgd2hlcmUgYWxsIHRoZSB0ZXN0cyBnby4KClRob3NlIGFyZSBzdWJkaXZpZGVkIGluIHR3byBjYXRlZ29yaWVzOgoKIC0gR2VuZXJhbAogLSBGdW5jdGlvbgoKIyMgR2VuZXJhbCBUZXN0cwoKR2VuZXJhbCB0ZXN0cyBhcmUgZnVuY3Rpb24gZ2VuZXJpYyBhbmQgdGVzdCBmb3IgZ2VuZXJhbCBwb2xpY2llcy4KClRoZXNlIHRlc3Qgc2NhbiBhbnN3ZXIgcXVlc3Rpb25zIHN1Y2ggYXM6CgogLSBJcyBteSBtb2R1bGUgZm9sbG93aW5nIG15IHN0eWxlIGd1aWRlcz8KIC0gRG9lcyBhbnkgb2YgbXkgc2NyaXB0cyBoYXZlIGEgc3ludGF4IGVycm9yPwogLSBEbyBteSBzY3JpcHRzIHVzZSBjb21tYW5kcyBJIGRvIG5vdCB3YW50IHRoZW0gdG8gdXNlPwogLSBEbyBteSBjb21tYW5kcyBmb2xsb3cgYmVzdCBwcmFjdGljZXM/CiAtIERvIG15IGNvbW1hbmRzIGhhdmUgcHJvcGVyIGhlbHA/CgpCYXNpY2FsbHksIHRoZXNlIGFsbG93IGEgZ2VuZXJhbCBtb2R1bGUgaGVhbHRoIGNoZWNrLgoKVGhlc2UgdGVzdHMgYXJlIGFscmVhZHkgcHJvdmlkZWQgYXMgcGFydCBvZiB0aGUgdGVtcGxhdGUuCgojIyBGdW5jdGlvbiBUZXN0cwoKQSBoZWFsdGh5IG1vZHVsZSBzaG91bGQgcHJvdmlkZSB1bml0IGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgdGhlIGNvbW1hbmRzICYgY29tcG9uZW50cyBpdCBzaGlwcy4KT25seSB0aGVuIGNhbiBiZSBndWFyYW50ZWVkLCB0aGF0IHRoZXkgd2lsbCBhY3R1YWxseSBwZXJmb3JtIGFzIHByb21pc2VkLgoKSG93ZXZlciwgYXMgZWFjaCBzdWNoIHRlc3QgbXVzdCBiZSBzcGVjaWZpYyB0byB0aGUgZnVuY3Rpb24gaXQgdGVzdHMsIHRoZXJlIGNhbm5vdCBiZSBtdWNoIGluIHRoZSB3YXkgb2YgdGVtcGxhdGVzLgEJaAMAAAlpAwAABmoDAAAJcmVhZG1lLm1kBmsDAABoL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9yZWFkbWUubWQJBgAAAAltAwAACW4DAAABVwIAAA8AAAAGbwMAAIILIyBYTUwKClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSBwcm9qZWN0IFhNTCBmaWxlcyBnbywgbm90YWJseToKCiAtIEZvcm1hdCBYTUwKIC0gVHlwZSBFeHRlbnNpb24gWE1MCgpFeHRlcm5hbCBoZWxwIGZpbGVzIHNob3VsZCBfbm90XyBiZSBwbGFjZWQgaW4gdGhpcyBmb2xkZXIhCgojIyBOb3RlcyBvbiBGaWxlcyBhbmQgTmFtaW5nCgpUaGVyZSBzaG91bGQgYmUgb25seSBvbmUgZm9ybWF0IGZpbGUgYW5kIG9uZSB0eXBlIGV4dGVuc2lvbiBmaWxlIHBlciBwcm9qZWN0LCBhcyBpbXBvcnRpbmcgdGhlbSBoYXMgYSBub3RhYmxlIGltcGFjdCBvbiBpbXBvcnQgdGltZXMuCgogLSBUaGUgRm9ybWF0IFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LkZvcm1hdC5wczF4bWxgCiAtIFRoZSBUeXBlIEV4dGVuc2lvbiBYTUwgc2hvdWxkIGJlIG5hbWVkIGDDvm5hbWXDvi5UeXBlcy5wczF4bWxgCgojIyBUb29scwoKIyMjIE5ldy1QU01ERm9ybWF0VGFibGVEZWZpbml0aW9uCgpUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhbiBpbnB1dCBvYmplY3QgYW5kIGdlbmVyYXRlIGZvcm1hdCB4bWwgZm9yIGFuIGF1dG8tc2l6ZWQgdGFibGUuCgpJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBmb3JtYXRzLgoKIyMjIEdldC1QU0ZUeXBlU2VyaWFsaXphdGlvbkRhdGEKCmBgYApDIyBXYXJuaW5nIQpUaGlzIHNlY3Rpb24gaXMgb25seSBpbnRlcmVzdCBpZiB5b3UncmUgdXNpbmcgQyMgdG9nZXRoZXIgd2l0aCBQb3dlclNoZWxsLgpgYGAKClRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHR5cGUgZXh0ZW5zaW9uIFhNTCB0aGF0IGFsbG93cyBQb3dlclNoZWxsIHRvIGNvbnZlcnQgdHlwZXMgd3JpdHRlbiBpbiBDIyB0byBiZSB3cml0dGVuIHRvIGZpbGUgYW5kIHJlc3RvcmVkIGZyb20gaXQgd2l0aG91dCBiZWluZyAnRGVzZXJpYWxpemVkJy4gQWxzbyB3b3JrcyBmb3Igam9icyBvciByZW1vdGluZywgaWYgYm90aCBzaWRlcyBoYXZlIHRoZSBgUFNGcmFtZXdvcmtgIG1vZHVsZSBhbmQgdHlwZSBleHRlbnNpb24gbG9hZGVkLgoKSW4gb3JkZXIgZm9yIGEgY2xhc3MgdG8gYmUgZWxpZ2libGUgZm9yIHRoaXMsIGl0IG5lZWRzIHRvIGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBydWxlczoKCiAtIEhhdmUgdGhlIGBbU2VyaWFsaXphYmxlXWAgYXR0cmlidXRlCiAtIEJlIHB1YmxpYwogLSBIYXZlIGFuIGVtcHR5IGNvbnN0cnVjdG9yCiAtIEFsbG93IGFsbCBwdWJsaWMgcHJvcGVydGllcy9maWVsZHMgdG8gYmUgc2V0IChldmVuIGlmIHNldHRpbmcgaXQgZG9lc24ndCBkbyBhbnl0aGluZykgd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24uCgpgYGAKbm9uLXB1YmxpYyBwcm9wZXJ0aWVzIGFuZCBmaWVsZHMgd2lsbCBiZSBsb3N0IGluIHRoaXMgcHJvY2VzcyEKYGBgAQlwAwAACXEDAAAGcgMAAAlyZWFkbWUubWQGcwMAAGYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3htbC9yZWFkbWUubWQJBgAAAAl1AwAACXYDAAABWAIAAA8AAAAGdwMAAMoFPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTE2Ij8+CjxDb25maWd1cmF0aW9uPgoJPFZpZXdEZWZpbml0aW9ucz4KCQk8IS0tIEZvby5CYXIgLS0+CgkJPFZpZXc+CgkJCTxOYW1lPkZvby5CYXI8L05hbWU+CgkJCTxWaWV3U2VsZWN0ZWRCeT4KCQkJCTxUeXBlTmFtZT5Gb28uQmFyPC9UeXBlTmFtZT4KCQkJPC9WaWV3U2VsZWN0ZWRCeT4KCQkJPFRhYmxlQ29udHJvbD4KCQkJCTxBdXRvU2l6ZS8+CgkJCQk8VGFibGVIZWFkZXJzPgoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+CgkJCQkJPFRhYmxlQ29sdW1uSGVhZGVyLz4KCQkJCTwvVGFibGVIZWFkZXJzPgoJCQkJPFRhYmxlUm93RW50cmllcz4KCQkJCQk8VGFibGVSb3dFbnRyeT4KCQkJCQkJPFRhYmxlQ29sdW1uSXRlbXM+CgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPgoJCQkJCQkJCTxQcm9wZXJ0eU5hbWU+Rm9vPC9Qcm9wZXJ0eU5hbWU+CgkJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbT4KCQkJCQkJCTxUYWJsZUNvbHVtbkl0ZW0+CgkJCQkJCQkJPFByb3BlcnR5TmFtZT5CYXI8L1Byb3BlcnR5TmFtZT4KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPgoJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbXM+CgkJCQkJPC9UYWJsZVJvd0VudHJ5PgoJCQkJPC9UYWJsZVJvd0VudHJpZXM+CgkJCTwvVGFibGVDb250cm9sPgoJCTwvVmlldz4KCTwvVmlld0RlZmluaXRpb25zPgo8L0NvbmZpZ3VyYXRpb24+AQl4AwAACXkDAAAGegMAABbDvm5hbWXDvi5Gb3JtYXQucHMxeG1sBnsDAABzL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi94bWwvw75uYW1lw74uRm9ybWF0LnBzMXhtbAkGAAAACX0DAAAJfgMAAAFZAgAADwAAAAZ/AwAAvAc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pgo8VHlwZXM+CiAgPCEtLSBGb28uQmFyIC0tPgogIDxUeXBlPgogICAgPE5hbWU+RGVzZXJpYWxpemVkLkZvby5CYXI8L05hbWU+CiAgICA8TWVtYmVycz4KICAgICAgPE1lbWJlclNldD4KICAgICAgICA8TmFtZT5QU1N0YW5kYXJkTWVtYmVyczwvTmFtZT4KICAgICAgICA8TWVtYmVycz4KICAgICAgICAgIDxOb3RlUHJvcGVydHk+CiAgICAgICAgICAgIDxOYW1lPgogICAgICAgICAgICAgIFRhcmdldFR5cGVGb3JEZXNlcmlhbGl6YXRpb24KICAgICAgICAgICAgPC9OYW1lPgogICAgICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgICAgRm9vLkJhcgogICAgICAgICAgICA8L1ZhbHVlPgogICAgICAgICAgPC9Ob3RlUHJvcGVydHk+CiAgICAgICAgPC9NZW1iZXJzPgogICAgICA8L01lbWJlclNldD4KICAgIDwvTWVtYmVycz4KICA8L1R5cGU+CiAgPFR5cGU+CiAgICA8TmFtZT5Gb28uQmFyPC9OYW1lPgogICAgPE1lbWJlcnM+CiAgICAgIDxDb2RlUHJvcGVydHkgSXNIaWRkZW49InRydWUiPgogICAgICAgIDxOYW1lPlNlcmlhbGl6YXRpb25EYXRhPC9OYW1lPgogICAgICAgIDxHZXRDb2RlUmVmZXJlbmNlPgogICAgICAgICAgPFR5cGVOYW1lPlBTRnJhbWV3b3JrLlNlcmlhbGl6YXRpb24uU2VyaWFsaXphdGlvblR5cGVDb252ZXJ0ZXI8L1R5cGVOYW1lPgogICAgICAgICAgPE1ldGhvZE5hbWU+R2V0U2VyaWFsaXphdGlvbkRhdGE8L01ldGhvZE5hbWU+CiAgICAgICAgPC9HZXRDb2RlUmVmZXJlbmNlPgogICAgICA8L0NvZGVQcm9wZXJ0eT4KICAgIDwvTWVtYmVycz4KICAgIDxUeXBlQ29udmVydGVyPgogICAgICA8VHlwZU5hbWU+UFNGcmFtZXdvcmsuU2VyaWFsaXphdGlvbi5TZXJpYWxpemF0aW9uVHlwZUNvbnZlcnRlcjwvVHlwZU5hbWU+CiAgICA8L1R5cGVDb252ZXJ0ZXI+CiAgPC9UeXBlPgo8L1R5cGVzPgEJgAMAAAmBAwAABoIDAAAVw75uYW1lw74uVHlwZXMucHMxeG1sBoMDAAByL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi94bWwvw75uYW1lw74uVHlwZXMucHMxeG1sCQYAAAAJhQMAAAmGAwAAAWYCAAAPAAAABocDAADPASMgRGVzY3JpcHRpb24KClRoaXMgaXMgd2hlcmUgdGhlIGZ1bmN0aW9uIHRlc3RzIGdvLgoKTWFrZSBzdXJlIHRvIHB1dCB0aGVtIGluIGZvbGRlcnMgcmVmbGVjdGluZyB0aGUgYWN0dWFsIG1vZHVsZSBzdHJ1Y3R1cmUuCgpJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBpbnRlcm5hbCBhbmQgcHVibGljIGZ1bmN0aW9ucyBoZXJlLgEJiAMAAAmJAwAABooDAAAJcmVhZG1lLm1kBosDAABOL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9mdW5jdGlvbnMvcmVhZG1lLm1kCQYAAAAJjQMAAAmOAwAAAWcCAAAPAAAABo8DAADeBSMgTGlzdCBvZiBmb3JiaWRkZW4gY29tbWFuZHMKJGdsb2JhbDpCYW5uZWRDb21tYW5kcyA9IEAoCgknV3JpdGUtSG9zdCcKCSdXcml0ZS1WZXJib3NlJwoJJ1dyaXRlLVdhcm5pbmcnCgknV3JpdGUtRXJyb3InCgknV3JpdGUtT3V0cHV0JwoJJ1dyaXRlLUluZm9ybWF0aW9uJwoJJ1dyaXRlLURlYnVnJwoJCgkjIFVzZSBDSU0gaW5zdGVhZCB3aGVyZSBwb3NzaWJsZQoJJ0dldC1XbWlPYmplY3QnCgknSW52b2tlLVdtaU1ldGhvZCcKCSdSZWdpc3Rlci1XbWlFdmVudCcKCSdSZW1vdmUtV21pT2JqZWN0JwoJJ1NldC1XbWlJbnN0YW5jZScKCgkjIFVzZSBHZXQtV2luRXZlbnQgaW5zdGVhZAoJJ0dldC1FdmVudExvZycKKQoKPCMKCUNvbnRhaW5zIGxpc3Qgb2YgZXhjZXB0aW9ucyBmb3IgYmFubmVkIGNtZGxldHMuCglJbnNlcnQgdGhlIGZpbGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBtYXkgY29udGFpbiB0aGVtLgoJCglFeGFtcGxlOgoJIldyaXRlLUhvc3QiICA9IEAoJ1dyaXRlLVBTRkhvc3RDb2xvci5wczEnLCdXcml0ZS1QU0ZNZXNzYWdlLnBzMScpCiM+CiRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmQgPSBAewoJIldyaXRlLUhvc3QiICA9IEAoKQoJIldyaXRlLVZlcmJvc2UiID0gQCgpCgkiV3JpdGUtV2FybmluZyIgPSBAKCkKCSJXcml0ZS1FcnJvciIgID0gQCgpCgkiV3JpdGUtT3V0cHV0IiA9IEAoKQoJIldyaXRlLUluZm9ybWF0aW9uIiA9IEAoKQoJIldyaXRlLURlYnVnIiA9IEAoKQp9AQmQAwAACZEDAAAGkgMAABxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxBpMDAABfL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsL0ZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEJBgAAAAmVAwAACZYDAAABaAIAAA8AAAAGlwMAAIIYJG1vZHVsZVJvb3QgPSAoUmVzb2x2ZS1QYXRoICIkZ2xvYmFsOnRlc3Ryb290XC4uIikuUGF0aAoKLiAiJGdsb2JhbDp0ZXN0cm9vdFxnZW5lcmFsXEZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEiCgpEZXNjcmliZSAiVmVyaWZ5aW5nIGludGVncml0eSBvZiBtb2R1bGUgZmlsZXMiIHsKCUJlZm9yZUFsbCB7CgkJZnVuY3Rpb24gR2V0LUZpbGVFbmNvZGluZwoJCXsKCQk8IwoJCQkuU1lOT1BTSVMKCQkJCVRlc3RzIGEgZmlsZSBmb3IgZW5jb2RpbmcuCgkJCQoJCQkuREVTQ1JJUFRJT04KCQkJCVRlc3RzIGEgZmlsZSBmb3IgZW5jb2RpbmcuCgkJCQoJCQkuUEFSQU1FVEVSIFBhdGgKCQkJCVRoZSBmaWxlIHRvIHRlc3QKCQkjPgoJCQlbQ21kbGV0QmluZGluZygpXQoJCQlQYXJhbSAoCgkJCQlbUGFyYW1ldGVyKE1hbmRhdG9yeSA9ICRUcnVlLCBWYWx1ZUZyb21QaXBlbGluZUJ5UHJvcGVydHlOYW1lID0gJFRydWUpXQoJCQkJW0FsaWFzKCdGdWxsTmFtZScpXQoJCQkJW3N0cmluZ10KCQkJCSRQYXRoCgkJCSkKCQkJCgkJCWlmICgkUFNWZXJzaW9uVGFibGUuUFNWZXJzaW9uLk1ham9yIC1sdCA2KQoJCQl7CgkJCQlbYnl0ZVtdXSRieXRlID0gZ2V0LWNvbnRlbnQgLUVuY29kaW5nIGJ5dGUgLVJlYWRDb3VudCA0IC1Ub3RhbENvdW50IDQgLVBhdGggJFBhdGgKCQkJfQoJCQllbHNlCgkJCXsKCQkJCVtieXRlW11dJGJ5dGUgPSBHZXQtQ29udGVudCAtQXNCeXRlU3RyZWFtIC1SZWFkQ291bnQgNCAtVG90YWxDb3VudCA0IC1QYXRoICRQYXRoCgkJCX0KCQkJCgkJCWlmICgkYnl0ZVswXSAtZXEgMHhlZiAtYW5kICRieXRlWzFdIC1lcSAweGJiIC1hbmQgJGJ5dGVbMl0gLWVxIDB4YmYpIHsgJ1VURjggQk9NJyB9CgkJCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVsxXSAtZXEgMHhmZikgeyAnVW5pY29kZScgfQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAwIC1hbmQgJGJ5dGVbMV0gLWVxIDAgLWFuZCAkYnl0ZVsyXSAtZXEgMHhmZSAtYW5kICRieXRlWzNdIC1lcSAweGZmKSB7ICdVVEYzMicgfQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAweDJiIC1hbmQgJGJ5dGVbMV0gLWVxIDB4MmYgLWFuZCAkYnl0ZVsyXSAtZXEgMHg3NikgeyAnVVRGNycgfQoJCQllbHNlIHsgJ1Vua25vd24nIH0KCQl9Cgl9CgoJQ29udGV4dCAiVmFsaWRhdGluZyBQUzEgU2NyaXB0IGZpbGVzIiB7CgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIgfCBXaGVyZS1PYmplY3QgRnVsbE5hbWUgLU5vdExpa2UgIiRtb2R1bGVSb290XHRlc3RzXCoiCgkJCgkJZm9yZWFjaCAoJGZpbGUgaW4gJGFsbEZpbGVzKQoJCXsKCQkJJG5hbWUgPSAkZmlsZS5GdWxsTmFtZS5SZXBsYWNlKCIkbW9kdWxlUm9vdFwiLCAnJykKCQkJCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIFVURjggZW5jb2Rpbmcgd2l0aCBCeXRlIE9yZGVyIE1hcmsiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gewoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjggQk9NJwoJCQl9CgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyB0cmFpbGluZyBzcGFjZSIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7CgkJCQkoJGZpbGUgfCBTZWxlY3QtU3RyaW5nICJccyQiIHwgV2hlcmUtT2JqZWN0IHsgJF8uTGluZS5UcmltKCkuTGVuZ3RoIC1ndCAwfSkuTGluZU51bWJlciB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCQl9CgkJCQoJCQkkdG9rZW5zID0gJG51bGwKCQkJJHBhcnNlRXJyb3JzID0gJG51bGwKCQkJJGFzdCA9IFtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLkxhbmd1YWdlLlBhcnNlcl06OlBhcnNlRmlsZSgkZmlsZS5GdWxsTmFtZSwgW3JlZl0kdG9rZW5zLCBbcmVmXSRwYXJzZUVycm9ycykKCQkJCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHN5bnRheCBlcnJvcnMiIC1UZXN0Q2FzZXMgQHsgcGFyc2VFcnJvcnMgPSAkcGFyc2VFcnJvcnMgfSB7CgkJCQkkcGFyc2VFcnJvcnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQkJfQoJCQkKCQkJZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGdsb2JhbDpCYW5uZWRDb21tYW5kcykKCQkJewoJCQkJaWYgKCRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmRbIiRjb21tYW5kIl0gLW5vdGNvbnRhaW5zICRmaWxlLk5hbWUpCgkJCQl7CgkJCQkJSXQgIlskbmFtZV0gU2hvdWxkIG5vdCB1c2UgJGNvbW1hbmQiIC1UZXN0Q2FzZXMgQHsgdG9rZW5zID0gJHRva2VuczsgY29tbWFuZCA9ICRjb21tYW5kIH0gewoJCQkJCQkkdG9rZW5zIHwgV2hlcmUtT2JqZWN0IFRleHQgLUVRICRjb21tYW5kIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoJCglDb250ZXh0ICJWYWxpZGF0aW5nIGhlbHAudHh0IGhlbHAgZmlsZXMiIHsKCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIiouaGVscC50eHQiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIgoJCQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykKCQl7CgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpCgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsKCQkJCUdldC1GaWxlRW5jb2RpbmcgLVBhdGggJGZpbGUuRnVsbE5hbWUgfCBTaG91bGQgLUJlICdVVEY4IEJPTScKCQkJfQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gewoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMCB9IHwgTWVhc3VyZS1PYmplY3QpLkNvdW50IHwgU2hvdWxkIC1CZSAwCgkJCX0KCQl9Cgl9Cn0BCZgDAAAJmQMAAAaaAwAAF0ZpbGVJbnRlZ3JpdHkuVGVzdHMucHMxBpsDAABaL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsL0ZpbGVJbnRlZ3JpdHkuVGVzdHMucHMxCQYAAAAJnQMAAAmeAwAAAWkCAAAPAAAABp8DAACDBSMgTGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaWdub3JlZAokZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zID0gQCgKICAgIAopCgo8IwogIExpc3Qgb2YgYXJyYXllZCBlbnVtZXJhdGlvbnMuIFRoZXNlIG5lZWQgdG8gYmUgdHJlYXRlZCBkaWZmZXJlbnRseS4gQWRkIGZ1bGwgbmFtZS4KICBFeGFtcGxlOgoKICAiU3FsY29sbGFib3JhdGl2ZS5EYmF0b29scy5Db25uZWN0aW9uLk1hbmFnZW1lbnRDb25uZWN0aW9uVHlwZVtdIgojPgokZ2xvYmFsOkhlbHBUZXN0RW51bWVyYXRlZEFycmF5cyA9IEAoCgkKKQoKPCMKICBTb21lIHR5cGVzIG9uIHBhcmFtZXRlcnMganVzdCBmYWlsIHRoZWlyIHZhbGlkYXRpb24gbm8gbWF0dGVyIHdoYXQuCiAgRm9yIHRob3NlIGl0IGJlY29tZXMgcG9zc2libGUgdG8gc2tpcCB0aGVtLCBieSBhZGRpbmcgdGhlbSB0byB0aGlzIGhhc2h0YWJsZS4KICBBZGQgYnkgZm9sbG93aW5nIHRoaXMgY29udmVudGlvbjogPGNvbW1hbmQgbmFtZT4gPSBAKDxsaXN0IG9mIHBhcmFtZXRlciBuYW1lcz4pCiAgRXhhbXBsZToKCiAgIkdldC1EYmFDbU9iamVjdCIgICAgICAgPSBAKCJEb05vdFVzZSIpCiM+CiRnbG9iYWw6SGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZSA9IEB7CiAgICAKfQoBCaADAAAJoQMAAAaiAwAAE0hlbHAuRXhjZXB0aW9ucy5wczEGowMAAFYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL2dlbmVyYWwvSGVscC5FeGNlcHRpb25zLnBzMQkGAAAACaUDAAAJpgMAAAFqAgAADwAAAAanAwAAvDM8IwogICAgLk5PVEVTCiAgICAgICAgVGhlIG9yaWdpbmFsIHRlc3QgdGhpcyBpcyBiYXNlZCB1cG9uIHdhcyB3cml0dGVuIGJ5IEp1bmUgQmxlbmRlci4KCQlBZnRlciBzZXZlcmFsIHJvdW5kcyBvZiBtb2RpZmljYXRpb25zIGl0IHN0YW5kcyBub3cgYXMgaXQgaXMsIGJ1dCB0aGUgaG9ub3IgcmVtYWlucyBoZXJzLgoKCQlUaGFuayB5b3UgSnVuZSwgZm9yIGFsbCB5b3UgaGF2ZSBkb25lIQoKICAgIC5ERVNDUklQVElPTgoJCVRoaXMgdGVzdCBldmFsdWF0ZXMgdGhlIGhlbHAgZm9yIGFsbCBjb21tYW5kcyBpbiBhIG1vZHVsZS4KCgkuUEFSQU1FVEVSIFNraXBUZXN0CgkJRGlzYWJsZXMgdGhpcyB0ZXN0LgoJCgkuUEFSQU1FVEVSIENvbW1hbmRQYXRoCgkJTGlzdCBvZiBwYXRocyB1bmRlciB3aGljaCB0aGUgc2NyaXB0IGZpbGVzIGFyZSBzdG9yZWQuCgkJVGhpcyB0ZXN0IGFzc3VtZXMgdGhhdCBhbGwgZnVuY3Rpb25zIGhhdmUgdGhlaXIgb3duIGZpbGUgdGhhdCBpcyBuYW1lZCBhZnRlciB0aGVtc2VsdmVzLgoJCVRoZXNlIHBhdGhzIGFyZSB1c2VkIHRvIHNlYXJjaCBmb3IgY29tbWFuZHMgdGhhdCBzaG91bGQgZXhpc3QgYW5kIGJlIHRlc3RlZC4KCQlXaWxsIHNlYXJjaCByZWN1cnNpdmVseSBhbmQgYWNjZXB0cyB3aWxkY2FyZHMsIG1ha2Ugc3VyZSBvbmx5IGZ1bmN0aW9ucyBhcmUgZm91bmQKCgkuUEFSQU1FVEVSIE1vZHVsZU5hbWUKCQlOYW1lIG9mIHRoZSBtb2R1bGUgdG8gYmUgdGVzdGVkLgoJCVRoZSBtb2R1bGUgbXVzdCBhbHJlYWR5IGJlIGltcG9ydGVkCgoJLlBBUkFNRVRFUiBFeGNlcHRpb25zRmlsZQoJCUZpbGUgaW4gd2hpY2ggZXhjZXB0aW9ucyBhbmQgYWRqdXN0bWVudHMgYXJlIGNvbmZpZ3VyZWQuCgkJSW4gaXQgdGhlcmUgc2hvdWxkIGJlIHR3byBhcnJheXMgYW5kIGEgaGFzaHRhYmxlIGRlZmluZWQ6CgkJCSRnbG9iYWw6RnVuY3Rpb25IZWxwVGVzdEV4Y2VwdGlvbnMKCQkJJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMKCQkJJGdsb2JhbDpIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlCgkJVGhlc2UgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhlIHRlc3RzIHNsaWdodGx5IGluIGNhc2VzIG9mIG5lZWQuCgkJU2VlIHRoZSBleGFtcGxlIGZpbGUgZm9yIGV4cGxhbmF0aW9ucyBvbiBlYWNoIG9mIHRoZXNlIHVzYWdlIGFuZCBlZmZlY3QuCiM+CltDbWRsZXRCaW5kaW5nKCldClBhcmFtICgKCVtzd2l0Y2hdCgkkU2tpcFRlc3QsCgkKCVtzdHJpbmdbXV0KCSRDb21tYW5kUGF0aCA9IEAoIiRnbG9iYWw6dGVzdHJvb3RcLi5cZnVuY3Rpb25zIiwgIiRnbG9iYWw6dGVzdHJvb3RcLi5caW50ZXJuYWxcZnVuY3Rpb25zIiksCgkKCVtzdHJpbmddCgkkTW9kdWxlTmFtZSA9ICLDvm5hbWXDviIsCgkKCVtzdHJpbmddCgkkRXhjZXB0aW9uc0ZpbGUgPSAiJGdsb2JhbDp0ZXN0cm9vdFxnZW5lcmFsXEhlbHAuRXhjZXB0aW9ucy5wczEiCikKaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQouICRFeGNlcHRpb25zRmlsZQoKJGluY2x1ZGVkTmFtZXMgPSAoR2V0LUNoaWxkSXRlbSAkQ29tbWFuZFBhdGggLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiKS5CYXNlTmFtZQokY29tbWFuZFR5cGVzID0gQCgnQ21kbGV0JywgJ0Z1bmN0aW9uJykKaWYgKCRQU1ZlcnNpb25UYWJsZS5QU0VkaXRpb24gLWVxICdEZXNrdG9wJyApIHsgJGNvbW1hbmRUeXBlcyArPSAnV29ya2Zsb3cnIH0KJGNvbW1hbmRzID0gR2V0LUNvbW1hbmQgLU1vZHVsZSAoR2V0LU1vZHVsZSAkTW9kdWxlTmFtZSkgLUNvbW1hbmRUeXBlICRjb21tYW5kVHlwZXMgfCBXaGVyZS1PYmplY3QgTmFtZSAtSW4gJGluY2x1ZGVkTmFtZXMKCiMjIFdoZW4gdGVzdGluZyBoZWxwLCByZW1lbWJlciB0aGF0IGhlbHAgaXMgY2FjaGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBzZXNzaW9uLgojIyBUbyB0ZXN0LCByZXN0YXJ0IHNlc3Npb24uCgoKZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGNvbW1hbmRzKSB7CiAgICAkY29tbWFuZE5hbWUgPSAkY29tbWFuZC5OYW1lCiAgICAKICAgICMgU2tpcCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG9uIHRoZSBleGNsdXNpb25zIGxpc3QKICAgIGlmICgkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zIC1jb250YWlucyAkY29tbWFuZE5hbWUpIHsgY29udGludWUgfQogICAgCiAgICAjIFRoZSBtb2R1bGUtcXVhbGlmaWVkIGNvbW1hbmQgZmFpbHMgb24gTWljcm9zb2Z0LlBvd2VyU2hlbGwuQXJjaGl2ZSBjbWRsZXRzCiAgICAkSGVscCA9IEdldC1IZWxwICRjb21tYW5kTmFtZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQoJCglEZXNjcmliZSAiVGVzdCBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsKICAgICAgICAKCQkjIElmIGhlbHAgaXMgbm90IGZvdW5kLCBzeW5vcHNpcyBpbiBhdXRvLWdlbmVyYXRlZCBoZWxwIGlzIHRoZSBzeW50YXggZGlhZ3JhbQoJCUl0ICJzaG91bGQgbm90IGJlIGF1dG8tZ2VuZXJhdGVkIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsKCQkJJEhlbHAuU3lub3BzaXMgfCBTaG91bGQgLU5vdCAtQmVMaWtlICcqYFtgPENvbW1vblBhcmFtZXRlcnNgPmBdKicKCQl9CiAgICAgICAgCgkJIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgZnVuY3Rpb24KCQlJdCAiZ2V0cyBkZXNjcmlwdGlvbiBmb3IgJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsKCQkJJEhlbHAuRGVzY3JpcHRpb24gfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCX0KICAgICAgICAKCQkjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZQoJCUl0ICJnZXRzIGV4YW1wbGUgY29kZSBmcm9tICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7CgkJCSgkSGVscC5FeGFtcGxlcy5FeGFtcGxlIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuQ29kZSB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJfQoJCgkJIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUgZGVzY3JpcHRpb24KCQlJdCAiZ2V0cyBleGFtcGxlIGhlbHAgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gewoJCQkoJEhlbHAuRXhhbXBsZXMuRXhhbXBsZS5SZW1hcmtzIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJfQogICAgICAgIAogICAgICAgIENvbnRleHQgIlRlc3QgcGFyYW1ldGVyIGhlbHAgZm9yICRjb21tYW5kTmFtZSIgewogICAgICAgICAgICAKICAgICAgICAgICAgJGNvbW1vbiA9ICdEZWJ1ZycsICdFcnJvckFjdGlvbicsICdFcnJvclZhcmlhYmxlJywgJ0luZm9ybWF0aW9uQWN0aW9uJywgJ0luZm9ybWF0aW9uVmFyaWFibGUnLCAnT3V0QnVmZmVyJywgJ091dFZhcmlhYmxlJywgJ1BpcGVsaW5lVmFyaWFibGUnLCAnVmVyYm9zZScsICdXYXJuaW5nQWN0aW9uJywgJ1dhcm5pbmdWYXJpYWJsZScKICAgICAgICAgICAgCiAgICAgICAgICAgICRwYXJhbWV0ZXJzID0gJGNvbW1hbmQuUGFyYW1ldGVyU2V0cy5QYXJhbWV0ZXJzIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IE5hbWUgLVVuaXF1ZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1ub3RpbiAkY29tbW9uCiAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lcyA9ICRwYXJhbWV0ZXJzLk5hbWUKICAgICAgICAgICAgJEhlbHBQYXJhbWV0ZXJOYW1lcyA9ICRIZWxwLlBhcmFtZXRlcnMuUGFyYW1ldGVyLk5hbWUgfCBTb3J0LU9iamVjdCAtVW5pcXVlCiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbWV0ZXIgaW4gJHBhcmFtZXRlcnMpIHsKICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lID0gJHBhcmFtZXRlci5OYW1lCiAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscCA9ICRIZWxwLnBhcmFtZXRlcnMucGFyYW1ldGVyIHwgV2hlcmUtT2JqZWN0IE5hbWUgLUVRICRwYXJhbWV0ZXJOYW1lCgkJCQoJCQkJIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgcGFyYW1ldGVyCgkJCQlJdCAiZ2V0cyBoZWxwIGZvciBwYXJhbWV0ZXI6ICRwYXJhbWV0ZXJOYW1lIDogaW4gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscCB9IHsKCQkJCQkkcGFyYW1ldGVySGVscC5EZXNjcmlwdGlvbi5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkKCQkJCX0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJGNvZGVNYW5kYXRvcnkgPSAkcGFyYW1ldGVyLklzTWFuZGF0b3J5LnRvU3RyaW5nKCkKCQkJCUl0ICJoZWxwIGZvciAkcGFyYW1ldGVyTmFtZSBwYXJhbWV0ZXIgaW4gJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IE1hbmRhdG9yeSB2YWx1ZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IGNvZGVNYW5kYXRvcnkgPSAkY29kZU1hbmRhdG9yeSB9IHsKCQkJCQkkcGFyYW1ldGVySGVscC5SZXF1aXJlZCB8IFNob3VsZCAtQmUgJGNvZGVNYW5kYXRvcnkKCQkJCX0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCRIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlWyRjb21tYW5kTmFtZV0gLWNvbnRhaW5zICRwYXJhbWV0ZXJOYW1lKSB7IGNvbnRpbnVlIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJGNvZGVUeXBlID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLk5hbWUKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5Jc0VudW0pIHsKICAgICAgICAgICAgICAgICAgICAjIEVudW1lcmF0aW9ucyBvZnRlbiBoYXZlIGlzc3VlcyB3aXRoIHRoZSB0eXBlbmFtZSBub3QgYmVpbmcgcmVsaWFibHkgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgICAgJG5hbWVzID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlOjpHZXROYW1lcygkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUpCgkJCQkJCSMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscDsgbmFtZXMgPSAkbmFtZXMgfSB7CgkJCQkJCSRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcwoJCQkJCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2VpZiAoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkZ1bGxOYW1lIC1pbiAkSGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzKSB7CiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9IFtFbnVtXTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkRlY2xhcmVkTWVtYmVyc1swXS5SZXR1cm5UeXBlKQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscDsgbmFtZXMgPSAkbmFtZXMgfSB7CgkJCQkJCSRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcwoJCQkJCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMgVG8gYXZvaWQgY2FsbGluZyBUcmltIG1ldGhvZCBvbiBhIG51bGwgb2JqZWN0LgogICAgICAgICAgICAgICAgICAgICRoZWxwVHlwZSA9IGlmICgkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZSkgeyAkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZS5UcmltKCkgfQoJCQkJCSMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IGhlbHBUeXBlID0gJGhlbHBUeXBlOyBjb2RlVHlwZSA9ICRjb2RlVHlwZSB9IHsKCQkJCQkJJGhlbHBUeXBlIHwgU2hvdWxkIC1iZSAkY29kZVR5cGUKCQkJCQl9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yZWFjaCAoJGhlbHBQYXJtIGluICRIZWxwUGFyYW1ldGVyTmFtZXMpIHsKCQkJCSMgU2hvdWxkbid0IGZpbmQgZXh0cmEgcGFyYW1ldGVycyBpbiBoZWxwLgoJCQkJSXQgImZpbmRzIGhlbHAgcGFyYW1ldGVyIGluIGNvZGU6ICRoZWxwUGFybSIgLVRlc3RDYXNlcyBAeyBoZWxwUGFybSA9ICRoZWxwUGFybTsgcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVyTmFtZXMgfSB7CgkJCQkJJGhlbHBQYXJtIC1pbiAkcGFyYW1ldGVyTmFtZXMgfCBTaG91bGQgLUJlICR0cnVlCgkJCQl9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0BCagDAAAJqQMAAAaqAwAADkhlbHAuVGVzdHMucHMxBqsDAABRL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsL0hlbHAuVGVzdHMucHMxCQYAAAAJrQMAAAmuAwAAAWsCAAAPAAAABq8DAACRFURlc2NyaWJlICJWYWxpZGF0aW5nIHRoZSBtb2R1bGUgbWFuaWZlc3QiIHsKCSRtb2R1bGVSb290ID0gKFJlc29sdmUtUGF0aCAiJGdsb2JhbDp0ZXN0cm9vdFwuLiIpLlBhdGgKCSRtYW5pZmVzdCA9ICgoR2V0LUNvbnRlbnQgIiRtb2R1bGVSb290XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSIpIC1qb2luICJgbiIpIHwgSW52b2tlLUV4cHJlc3Npb24KCUNvbnRleHQgIkJhc2ljIHJlc291cmNlcyB2YWxpZGF0aW9uIiB7CgkJJGZpbGVzID0gR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIKCQlJdCAiRXhwb3J0cyBhbGwgZnVuY3Rpb25zIGluIHRoZSBwdWJsaWMgZm9sZGVyIiAtVGVzdENhc2VzIEB7IGZpbGVzID0gJGZpbGVzOyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsKCgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJzw9JykuSW5wdXRPYmplY3QKCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCX0KCQlJdCAiRXhwb3J0cyBubyBmdW5jdGlvbiB0aGF0IGlzbid0IGFsc28gcHJlc2VudCBpbiB0aGUgcHVibGljIGZvbGRlciIgLVRlc3RDYXNlcyBAeyBmaWxlcyA9ICRmaWxlczsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7CgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJz0+JykuSW5wdXRPYmplY3QKCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCX0KCgkJSXQgIkV4cG9ydHMgbm9uZSBvZiBpdHMgaW50ZXJuYWwgZnVuY3Rpb25zIiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7CgkJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiCgkJCSRmaWxlcyB8IFdoZXJlLU9iamVjdCBCYXNlTmFtZSAtSW4gJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJfQoJfQoKCUNvbnRleHQgIkluZGl2aWR1YWwgZmlsZSB2YWxpZGF0aW9uIiB7CgkJSXQgIlRoZSByb290IG1vZHVsZSBmaWxlIGV4aXN0cyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gewoJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCQoJG1hbmlmZXN0LlJvb3RNb2R1bGUpIiB8IFNob3VsZCAtQmUgJHRydWUKCQl9CgoJCWZvcmVhY2ggKCRmb3JtYXQgaW4gJG1hbmlmZXN0LkZvcm1hdHNUb1Byb2Nlc3MpCgkJewoJCQlJdCAiVGhlIGZpbGUgJGZvcm1hdCBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBmb3JtYXQgPSAkZm9ybWF0IH0gewoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkZm9ybWF0IiB8IFNob3VsZCAtQmUgJHRydWUKCQkJfQoJCX0KCgkJZm9yZWFjaCAoJHR5cGUgaW4gJG1hbmlmZXN0LlR5cGVzVG9Qcm9jZXNzKQoJCXsKCQkJSXQgIlRoZSBmaWxlICR0eXBlIHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IHR5cGUgPSAkdHlwZSB9IHsKCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJHR5cGUiIHwgU2hvdWxkIC1CZSAkdHJ1ZQoJCQl9CgkJfQoKCQlmb3JlYWNoICgkYXNzZW1ibHkgaW4gJG1hbmlmZXN0LlJlcXVpcmVkQXNzZW1ibGllcykKCQl7CiAgICAgICAgICAgIGlmICgkYXNzZW1ibHkgLWxpa2UgIiouZGxsIikgewogICAgICAgICAgICAgICAgSXQgIlRoZSBmaWxlICRhc3NlbWJseSBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBhc3NlbWJseSA9ICRhc3NlbWJseSB9IHsKICAgICAgICAgICAgICAgICAgICBUZXN0LVBhdGggIiRtb2R1bGVSb290XCRhc3NlbWJseSIgfCBTaG91bGQgLUJlICR0cnVlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBJdCAiVGhlIGZpbGUgJGFzc2VtYmx5IHNob3VsZCBsb2FkIGZyb20gdGhlIEdBQyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IGFzc2VtYmx5ID0gJGFzc2VtYmx5IH0gewogICAgICAgICAgICAgICAgICAgIHsgQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSAkYXNzZW1ibHkgfSB8IFNob3VsZCAtTm90IC1UaHJvdwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKCQlmb3JlYWNoICgkdGFnIGluICRtYW5pZmVzdC5Qcml2YXRlRGF0YS5QU0RhdGEuVGFncykKCQl7CgkJCUl0ICJUYWdzIHNob3VsZCBoYXZlIG5vIHNwYWNlcyBpbiBuYW1lIiAtVGVzdENhc2VzIEB7IHRhZyA9ICR0YWcgfSB7CgkJCQkkdGFnIC1tYXRjaCAiICIgfCBTaG91bGQgLUJlICRmYWxzZQoJCQl9CgkJfQoJfQp9AQmwAwAACbEDAAAGsgMAABJNYW5pZmVzdC5UZXN0cy5wczEGswMAAFUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL2dlbmVyYWwvTWFuaWZlc3QuVGVzdHMucHMxCQYAAAAJtQMAAAm2AwAAAWwCAAAPAAAABrcDAADtCFtDbWRsZXRCaW5kaW5nKCldClBhcmFtICgKCVtzd2l0Y2hdCgkkU2tpcFRlc3QsCgkKCVtzdHJpbmdbXV0KCSRDb21tYW5kUGF0aCA9IEAoIiRnbG9iYWw6dGVzdHJvb3RcLi5cZnVuY3Rpb25zIiwgIiRnbG9iYWw6dGVzdHJvb3RcLi5caW50ZXJuYWxcZnVuY3Rpb25zIikKKQoKaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQoKJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0CgpEZXNjcmliZSAnSW52b2tpbmcgUFNTY3JpcHRBbmFseXplciBhZ2FpbnN0IGNvbW1hbmRiYXNlJyB7CgkkY29tbWFuZEZpbGVzID0gZm9yZWFjaCAoJHBhdGggaW4gJENvbW1hbmRQYXRoKSB7CiAgICAgICAgR2V0LUNoaWxkSXRlbSAtUGF0aCAkcGF0aCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIKICAgIH0KCSRzY3JpcHRBbmFseXplclJ1bGVzID0gR2V0LVNjcmlwdEFuYWx5emVyUnVsZQoJCglmb3JlYWNoICgkZmlsZSBpbiAkY29tbWFuZEZpbGVzKQoJewoJCUNvbnRleHQgIkFuYWx5emluZyAkKCRmaWxlLkJhc2VOYW1lKSIgewoJCQkkYW5hbHlzaXMgPSBJbnZva2UtU2NyaXB0QW5hbHl6ZXIgLVBhdGggJGZpbGUuRnVsbE5hbWUgLUV4Y2x1ZGVSdWxlIFBTQXZvaWRUcmFpbGluZ1doaXRlc3BhY2UsIFBTU2hvdWxkUHJvY2VzcwoJCQkKCQkJZm9yRWFjaCAoJHJ1bGUgaW4gJHNjcmlwdEFuYWx5emVyUnVsZXMpCgkJCXsKCQkJCUl0ICJTaG91bGQgcGFzcyAkcnVsZSIgLVRlc3RDYXNlcyBAeyBhbmFseXNpcyA9ICRhbmFseXNpczsgcnVsZSA9ICRydWxlIH0gewoJCQkJCUlmICgkYW5hbHlzaXMuUnVsZU5hbWUgLWNvbnRhaW5zICRydWxlKQoJCQkJCXsKCQkJCQkJJGFuYWx5c2lzIHwgV2hlcmUtT2JqZWN0IFJ1bGVOYW1lIC1FUSAkcnVsZSAtb3V0dmFyaWFibGUgZmFpbHVyZXMgfCBGb3JFYWNoLU9iamVjdCB7ICRudWxsID0gJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyLkFkZCgkXykgfQoJCQkJCQkKCQkJCQkJMSB8IFNob3VsZCAtQmUgMAoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkwIHwgU2hvdWxkIC1CZSAwCgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQp9AQm4AwAACbkDAAAGugMAABpQU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQa7AwAAXS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMvZ2VuZXJhbC9QU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQkGAAAACb0DAAAJvgMAAAFtAgAADwAAAAa/AwAAwwckZXhjZXB0aW9ucyA9IEB7IH0KCjwjCkEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgTUFZIGJlIGluIHRoZSBsYW5ndWFnZSBmaWxlcywgd2l0aG91dCBjYXVzaW5nIHRoZSB0ZXN0cyB0byBmYWlsLgpUaGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4gbW9kdWxlcyB0aGF0IGdlbmVyYXRlIGxvY2FsaXplZCBtZXNzYWdlcyBzdHJhaWdodCBmcm9tIEMjLgpTcGVjaWZ5IHRoZSBmdWxsIGtleSBhcyBpdCBpcyB3cml0dGVuIGluIHRoZSBsYW5ndWFnZSBmaWxlcywgZG8gbm90IHByZXBlbmQgdGhlIG1vZHVsZW5hbWUsCmFzIHlvdSB3b3VsZCBoYXZlIHRvIGluIEMjIGNvZGUuCgpFeGFtcGxlOgokZXhjZXB0aW9uc1snTGVnYWxTdXJwbHVzJ10gPSBAKAogICAgJ0V4Y2VwdGlvbi5TdHJlYW1zLkZhaWxlZENyZWF0ZScKICAgICdFeGNlcHRpb24uU3RyZWFtcy5GYWlsZWREaXNwb3NlJwopCiM+CiRleGNlcHRpb25zWydMZWdhbFN1cnBsdXMnXSA9IEAoCgopCjwjCkEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgTUFZIGJlIHVzZWQgd2l0aG91dCBuZWVkaW5nIHRvIGhhdmUgdGV4dCBkZWZpbmVkLgpUaGlzIGlzIGludGVuZGVkIGZvciBtb2R1bGVzIChyZS0pdXNpbmcgc3RyaW5ncyBwcm92aWRlZCBieSBhbm90aGVyIG1vZHVsZQojPgokZXhjZXB0aW9uc1snTm9UZXh0TmVlZGVkJ10gPSBAKAoJJ1ZhbGlkYXRlLkZTUGF0aCcKCSdWYWxpZGF0ZS5GU1BhdGguRmlsZScKCSdWYWxpZGF0ZS5GU1BhdGguRmlsZU9yUGFyZW50JwoJJ1ZhbGlkYXRlLkZTUGF0aC5Gb2xkZXInCgknVmFsaWRhdGUuUGF0aCcKCSdWYWxpZGF0ZS5QYXRoLkNvbnRhaW5lcicKCSdWYWxpZGF0ZS5QYXRoLkxlYWYnCgknVmFsaWRhdGUuVGltZVNwYW4uUG9zaXRpdmUnCgknVmFsaWRhdGUuVXJpLkFic29sdXRlJwoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZS5GaWxlJwoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZS5IdHRwcycKKQoKJGV4Y2VwdGlvbnMBCcADAAAJwQMAAAbCAwAAFnN0cmluZ3MuRXhjZXB0aW9ucy5wczEGwwMAAFkvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL2dlbmVyYWwvc3RyaW5ncy5FeGNlcHRpb25zLnBzMQkGAAAACcUDAAAJxgMAAAFuAgAADwAAAAbHAwAA/Qc8IwouREVTQ1JJUFRJT04KICAgIFRoaXMgdGVzdCB2ZXJpZmllcywgdGhhdCBhbGwgc3RyaW5ncyB0aGF0IGhhdmUgYmVlbiB1c2VkLAogICAgYXJlIGxpc3RlZCBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMgYW5kIHRodXMgaGF2ZSBhIG1lc3NhZ2UgYmVpbmcgZGlzcGxheWVkLgoKICAgIEl0IGFsc28gY2hlY2tzLCB3aGV0aGVyIHRoZSBsYW5ndWFnZSBmaWxlcyBoYXZlIG9ycGhhbmVkIGVudHJpZXMgdGhhdCBuZWVkIGNsZWFuaW5nIHVwLgojPgoKCgpEZXNjcmliZSAiVGVzdGluZyBsb2NhbGl6YXRpb24gc3RyaW5ncyIgewoJJG1vZHVsZVJvb3QgPSAoR2V0LU1vZHVsZSDDvm5hbWXDvikuTW9kdWxlQmFzZQoJJHN0cmluZ3NSZXN1bHRzID0gRXhwb3J0LVBTTURTdHJpbmcgLU1vZHVsZVJvb3QgJG1vZHVsZVJvb3QKCSRleGNlcHRpb25zID0gJiAiJGdsb2JhbDp0ZXN0cm9vdFxnZW5lcmFsXHN0cmluZ3MuRXhjZXB0aW9ucy5wczEiCgkKCWZvcmVhY2ggKCRzdHJpbmdFbnRyeSBpbiAkc3RyaW5nc1Jlc3VsdHMpIHsKICAgICAgICBpZiAoJHN0cmluZ0VudHJ5LlN0cmluZyAtZXEgImtleSIpIHsgY29udGludWUgfSAjIFNraXBwaW5nIHRoZSB0ZW1wbGF0ZSBkZWZhdWx0IGVudHJ5CgkJSXQg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bWUNAxEDBAAABAAAAAY2BAAABG5hbWUNAxEFBAAABAAAAAY3BAAABG5hbWUNAxEHBAAABAAAAAY4BAAABG5hbWUNAwEbBAAADwAAAAY5BAAAphY8IwpUaGlzIGlzIGFuIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlCgpCeSBkZWZhdWx0LCBpdCBpcyBlbm91Z2ggdG8gaGF2ZSBhIHNpbmdsZSBvbmUgb2YgdGhlbSwKaG93ZXZlciBpZiB5b3UgaGF2ZSBlbm91Z2ggY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBqdXN0aWZ5IGhhdmluZyBtdWx0aXBsZSBjb3BpZXMgb2YgaXQsCmZlZWwgdG90YWxseSBmcmVlIHRvIHNwbGl0IHRoZW0gaW50byBtdWx0aXBsZSBmaWxlcy4KIz4KCjwjCiMgRXhhbXBsZSBDb25maWd1cmF0aW9uClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdFeGFtcGxlLlNldHRpbmcnIC1WYWx1ZSAxMCAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnaW50ZWdlcicgLUhhbmRsZXIgeyB9IC1EZXNjcmlwdGlvbiAiRXhhbXBsZSBjb25maWd1cmF0aW9uIHNldHRpbmcuIFlvdXIgbW9kdWxlIGNhbiB0aGVuIHVzZSB0aGUgc2V0dGluZyB1c2luZyAnR2V0LVBTRkNvbmZpZ1ZhbHVlJyIKIz4KClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdJbXBvcnQuRG9Eb3RTb3VyY2UnIC1WYWx1ZSAkZmFsc2UgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2Jvb2wnIC1EZXNjcmlwdGlvbiAiV2hldGhlciB0aGUgbW9kdWxlIGZpbGVzIHNob3VsZCBiZSBkb3Rzb3VyY2VkIG9uIGltcG9ydC4gQnkgZGVmYXVsdCwgdGhlIGZpbGVzIG9mIHRoaXMgbW9kdWxlIGFyZSByZWFkIGFzIHN0cmluZyB2YWx1ZSBhbmQgaW52b2tlZCwgd2hpY2ggaXMgZmFzdGVyIGJ1dCB3b3JzZSBvbiBkZWJ1Z2dpbmcuIgpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnSW1wb3J0LkluZGl2aWR1YWxGaWxlcycgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGltcG9ydGVkIGluZGl2aWR1YWxseS4gRHVyaW5nIHRoZSBtb2R1bGUgYnVpbGQsIGFsbCBtb2R1bGUgY29kZSBpcyBjb21waWxlZCBpbnRvIGZldyBmaWxlcywgd2hpY2ggYXJlIGltcG9ydGVkIGluc3RlYWQgYnkgZGVmYXVsdC4gTG9hZGluZyB0aGUgY29tcGlsZWQgdmVyc2lvbnMgaXMgZmFzdGVyLCB1c2luZyB0aGUgaW5kaXZpZHVhbCBmaWxlcyBpcyBlYXNpZXIgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvdXQgYWRqdXN0bWVudHMuIgoKU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLmVuYWJsZWQnIC1WYWx1ZSAkdHJ1ZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJJZiBzZXQgdG8gYCR0cnVlLCBNZXNzYWdlcyBmcm9tIHRoZSBtb2R1bGUgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1haW4gY29uc29sZSIKIyBTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnQ29uc29sZUxvZ2dpbmcuc3R5bGUnIC1WYWx1ZSAnQ09OOiAlTWVzc2FnZSUnIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIldoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZT8iCiMgU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLnN0eWxlJyAtVmFsdWUgJyVUYWdzJXwlTGV2ZWwlfCVNb2R1bGUlfCVGdW5jdGlvbk5hbWUlOiAlTWVzc2FnZSUnIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIldoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZT8iClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdDb25zb2xlTG9nZ2luZy5zdHlsZScgLVZhbHVlICdbJUxldmVsJV0gJU1lc3NhZ2UlJyAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBzdHJpbmcgLURlc2NyaXB0aW9uICJXaGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnNvbGU/IgojIFBvc3NpYmxlIGxldmVsczogQ3JpdGljYWwgKDEpLCBJbXBvcnRhbnQgLyBPdXRwdXQgLyBIb3N0ICgyKSwgU2lnbmlmaWNhbnQgKDMpLCBWZXJ5VmVyYm9zZSAoNCksIFZlcmJvc2UgKDUpLCBTb21ld2hhdFZlcmJvc2UgKDYpLCBTeXN0ZW0gKDcpLCBEZWJ1ZyAoOCksIEludGVybmFsQ29tbWVudCAoOSksIFdhcm5pbmcKIyAgICAgICAgICg2NjYpIEVpdGhlciBvbmUgb2YgdGhlIHN0cmluZ3Mgb3IgaXRzIHJlc3BlY3RpdmUgbnVtYmVyIHdpbGwgZG8gYXMgaW5wdXQuClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdDb25zb2xlTG9nZ2luZy5NaW5MZXZlbCcgLVZhbHVlIDEgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gaW50ZWdlciAtRGVzY3JpcHRpb24gIkZyb20gd2hpY2ggbGV2ZWwgc3RhcnRpbmcgb24gc2hvdWxkIG1lc3NhZ2VzIGJlIHNlbnQgdG8gdGhlIHByb3ZpZGVyPyIKU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLk1heExldmVsJyAtVmFsdWUgMSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBpbnRlZ2VyIC1EZXNjcmlwdGlvbiAiVXAgdG8gd2hpY2ggbGV2ZWwgc2hvdWxkIG1lc3NhZ2VzIGJlIHNlbnQgdG8gdGhlIHByb3ZpZGVyPyIKAQk6BAAACTsEAAAGPAQAABFjb25maWd1cmF0aW9uLnBzMQY9BAAAggEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb24ucHMxCQYAAAAJPwQAAAlABAAAARwEAAAPAAAABkEEAADxAyMgQ29uZmlndXJhdGlvbnMKClRocm91Z2ggdGhlIGBQU0ZyYW1ld29ya2AgeW91IGhhdmUgYSBzaW1wbGUgbWV0aG9kIHRoYXQgYWxsb3dzIHlvdSB0byAuLi4KCiAtIFB1Ymxpc2ggc2V0dGluZ3MKIC0gV2l0aCBvbmJvYXJkIGRvY3VtZW50YXRpb24KIC0gSW5wdXQgdmFsaWRhdGlvbgogLSBTY3JpcHRzIHRoYXQgcnVuIG9uIGNoYW5nZSBvZiBzZXR0aW5ncwogLSBUaGF0IGNhbiBiZSBkaXNjb3ZlcmVkIGFuZCB1cGRhdGVkIGJ5IHRoZSB1c2VyCiAtIFRoYXQgY2FuIGJlIGFkbWluaXN0cmF0ZWQgYnkgcG9saWN5ICYgRFNDCgpUaGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgYSBiaXQgdG9vIGNvbXBsZXggdG8gZGVzY3JpYmUgaW4gYSBoZWxwIGZpbGUsIHlvdSBjYW4gaG93ZXZlciB2aXNpdCB1cyBhdCBodHRwOi8vcHNmcmFtZXdvcmsub3JnIGZvciBkZXRhaWxlZCBndWlkYW5jZS4KCkFuIGV4YW1wbGUgY2FuIGJlIHNlZW4gaW4gdGhlIGF0dGFjaGVkIHBzMSBmaWxlAQlCBAAACUMEAAAGRAQAAAlyZWFkbWUubWQGRQQAAHovU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL2NvbmZpZ3VyYXRpb25zL3JlYWRtZS5tZAkGAAAACUcEAAAJSAQAAAEdBAAADwAAAAZJBAAA1QEjIEZ1bmN0aW9ucwoKVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgZ28uCgpEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG1vZHVsZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViZGl2aWRlIHRoZW0gaW50byBzdWJmb2xkZXJzLgoKVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCUoEAAAJSwQAAAZMBAAACXJlYWRtZS5tZAZNBAAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvZnVuY3Rpb25zL3JlYWRtZS5tZAkGAAAACU8EAAAJUAQAAAEeBAAADwAAAAZRBAAA+QI8IwpTdG9yZWQgc2NyaXB0YmxvY2tzIGFyZSBhdmFpbGFibGUgaW4gW1BzZlZhbGlkYXRlU2NyaXB0KCldIGF0dHJpYnV0ZXMuClRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNlbnRyYWxseSBwcm92aWRlIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLAp3aXRob3V0IGhhdmluZyB0byBtYWludGFpbiBpdCBpbiBzZXBhcmF0ZSBsb2NhdGlvbnMuCgpJdCBhbHNvIHByZXZlbnRzIGxlbmd0aHkgdmFsaWRhdGlvbiBzY3JpcHRibG9ja3MgZnJvbSBtYWtpbmcgeW91ciBwYXJhbWV0ZXIgYmxvY2sKaGFyZCB0byByZWFkLgoKU2V0LVBTRlNjcmlwdGJsb2NrIC1OYW1lICfDvm5hbWXDvi5TY3JpcHRCbG9ja05hbWUnIC1TY3JpcHRibG9jayB7CgkKfQojPgEJUgQAAAlTBAAABlQEAAAQc2NyaXB0YmxvY2tzLnBzMQZVBAAAfy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvc2NyaXB0YmxvY2tzL3NjcmlwdGJsb2Nrcy5wczEJBgAAAAlXBAAACVgEAAABHwQAAA8AAAAGWQQAAOcGV3JpdGUtUFNGTWVzc2FnZSAiQ29uZmlndXJlIENvbnNvbGUgTG9nZ2luZyIKaWYgKEdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLkNvbnNvbGVMb2dnaW5nLmVuYWJsZWQnIC1GYWxsYmFjayAkZmFsc2UpIHsKICAgICRwcm92aWRlclBhcmFtPUB7CiAgICAgICAgTmFtZT0iY29uc29sZSIKICAgICAgICBFbmFibGVkPSR0cnVlCiAgICAgICAgc3R5bGU9R2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24uQ29uc29sZUxvZ2dpbmcuc3R5bGUnCiAgICAgICAgTWluTGV2ZWw9R2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24uQ29uc29sZUxvZ2dpbmcuTWluTGV2ZWwnCiAgICAgICAgTWF4TGV2ZWw9R2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24uQ29uc29sZUxvZ2dpbmcuTWF4TGV2ZWwnCiAgICAgICAgSW5zdGFuY2VOYW1lID0gJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uY29uc29sZScKICAgIH0KICAgIFdyaXRlLVBTRk1lc3NhZ2UgIkNvbmZpZ3VyZSBDb25zb2xlIExvZ2dpbmcgd2l0aCBQYXJhbT0kKCRwcm92aWRlclBhcmFtfENvbnZlcnRUby1Kc29uIC1Db21wcmVzcykiCiAgICBTZXQtUFNGTG9nZ2luZ1Byb3ZpZGVyIEBwcm92aWRlclBhcmFtIC1JbmNsdWRlTW9kdWxlcyAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nCgp9ZWxzZXsKICAgIFdyaXRlLVBTRk1lc3NhZ2UgIk5PVCBDb25maWd1cmUgQ29uc29sZSBMb2dnaW5nIgp9CgEJWgQAAAlbBAAABlwEAAATY29uc29sZV9sb2dnaW5nLnBzMQZdBAAAfS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvc2NyaXB0cy9jb25zb2xlX2xvZ2dpbmcucHMxCQYAAAAJXwQAAAlgBAAAASAEAAAPAAAABmEEAADiCU5ldy1QU0ZMaWNlbnNlIC1Qcm9kdWN0ICfDvm5hbWXDvicgLU1hbnVmYWN0dXJlciAnw75hdXRob3LDvicgLVByb2R1Y3RWZXJzaW9uICRzY3JpcHQ6TW9kdWxlVmVyc2lvbiAtUHJvZHVjdFR5cGUgTW9kdWxlIC1OYW1lIE1JVCAtVmVyc2lvbiAiMS4wLjAuMCIgLURhdGUgKEdldC1EYXRlICLDviFkYXRlIcO+IikgLVRleHQgQCIKQ29weXJpZ2h0IChjKSDDviF5ZWFyIcO+IMO+YXV0aG9yw74KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuCiJAAQliBAAACWMEAAAGZAQAAAtsaWNlbnNlLnBzMQZlBAAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvc2NyaXB0cy9saWNlbnNlLnBzMQkGAAAACWcEAAAJaAQAAAEhBAAADwAAAAZpBAAA+QY8IwpBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYWZ0ZXIgaW1wb3J0aW5nIHRoZSBtYWluIGZ1bmN0aW9uIGNvZGUKCldBUk5JTkc6IE9OTFkgcHJvdmlkZSBwYXRocyB0byBmaWxlcyEKCkFmdGVyIGJ1aWxkaW5nIHRoZSBtb2R1bGUsIHRoaXMgZmlsZSB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZCwgYWRkaW5nIGFueXRoaW5nIGJ1dCBwYXRocyB0byBmaWxlcyAuLi4KLSBXaWxsIG5vdCB3b3JrIGFmdGVyIHB1Ymxpc2hpbmcKLSBDb3VsZCBicmVhayB0aGUgYnVpbGQgcHJvY2VzcwojPgoKJG1vZHVsZVJvb3QgPSBTcGxpdC1QYXRoIChTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QpCgojIExvYWQgQ29uZmlndXJhdGlvbnMKKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGNvbmZpZ3VyYXRpb25zXCoucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKS5GdWxsTmFtZQoKIyBMb2FkIFNjcmlwdGJsb2NrcwooR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0YmxvY2tzXCoucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKS5GdWxsTmFtZQoKIyBMb2FkIFRhYiBFeHBhbnNpb24KKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXHRlcHBcKi50ZXBwLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUKCiMgTG9hZCBUYWIgRXhwYW5zaW9uIEFzc2lnbm1lbnQKIiRtb2R1bGVSb290XGludGVybmFsXHRlcHBcYXNzaWdubWVudC5wczEiCgojIENvbmZpZ3VyZSBhZGRpdGlvbmFsIGNvbnNvbGUgbG9nZ2luZwoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xjb25zb2xlX2xvZ2dpbmcucHMxIgoKIyBMb2FkIExpY2Vuc2UKIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNcbGljZW5zZS5wczEiAQlqBAAACWsEAAAGbAQAAA5wb3N0aW1wb3J0LnBzMQZtBAAAeC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvc2NyaXB0cy9wb3N0aW1wb3J0LnBzMQkGAAAACW8EAAAJcAQAAAEiBAAADwAAAAZxBAAAowM8IwpBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYmVmb3JlIGltcG9ydGluZyB0aGUgbWFpbiBmdW5jdGlvbiBjb2RlLgoKV0FSTklORzogT05MWSBwcm92aWRlIHBhdGhzIHRvIGZpbGVzIQoKQWZ0ZXIgYnVpbGRpbmcgdGhlIG1vZHVsZSwgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkLCBhZGRpbmcgYW55dGhpbmcgYnV0IHBhdGhzIHRvIGZpbGVzIC4uLgotIFdpbGwgbm90IHdvcmsgYWZ0ZXIgcHVibGlzaGluZwotIENvdWxkIGJyZWFrIHRoZSBidWlsZCBwcm9jZXNzCiM+CgokbW9kdWxlUm9vdCA9IFNwbGl0LVBhdGggKFNwbGl0LVBhdGggJFBTU2NyaXB0Um9vdCkKCiMgTG9hZCB0aGUgc3RyaW5ncyB1c2VkIGluIG1lc3NhZ2VzCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHN0cmluZ3MucHMxIgEJcgQAAAlzBAAABnQEAAANcHJlaW1wb3J0LnBzMQZ1BAAAdy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvc2NyaXB0cy9wcmVpbXBvcnQucHMxCQYAAAAJdwQAAAl4BAAAASMEAAAPAAAABnkEAADMAzwjClRoaXMgZmlsZSBsb2FkcyB0aGUgc3RyaW5ncyBkb2N1bWVudHMgZnJvbSB0aGUgcmVzcGVjdGl2ZSBsYW5ndWFnZSBmb2xkZXJzLgpUaGlzIGFsbG93cyBsb2NhbGl6aW5nIG1lc3NhZ2VzIGFuZCBlcnJvcnMuCkxvYWQgcHNkMSBsYW5ndWFnZSBmaWxlcyBmb3IgZWFjaCBsYW5ndWFnZSB5b3Ugd2lzaCB0byBzdXBwb3J0LgpQYXJ0aWFsIHRyYW5zbGF0aW9ucyBhcmUgYWNjZXB0YWJsZSAtIHdoZW4gbWlzc2luZyBhIGN1cnJlbnQgbGFuZ3VhZ2UgbWVzc2FnZSwKaXQgd2lsbCBmYWxsYmFjayB0byBFbmdsaXNoIG9yIGFub3RoZXIgYXZhaWxhYmxlIGxhbmd1YWdlLgojPgpJbXBvcnQtUFNGTG9jYWxpemVkU3RyaW5nIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcZW4tdXNcKi5wc2QxIiAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLUxhbmd1YWdlICdlbi1VUycBCXoEAAAJewQAAAZ8BAAAC3N0cmluZ3MucHMxBn0EAAB1L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9zY3JpcHRzL3N0cmluZ3MucHMxCQYAAAAJfwQAAAmABAAAASQEAAAPAAAABoEEAABuPCMKIyBFeGFtcGxlOgpSZWdpc3Rlci1QU0ZUZXBwQXJndW1lbnRDb21wbGV0ZXIgLUNvbW1hbmQgR2V0LUFsY29ob2wgLVBhcmFtZXRlciBUeXBlIC1OYW1lIMO+bmFtZcO+LmFsY29ob2wKIz4BCYIEAAAJgwQAAAaEBAAADmFzc2lnbm1lbnQucHMxBoUEAAB1L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC90ZXBwL2Fzc2lnbm1lbnQucHMxCQYAAAAJhwQAAAmIBAAAASUEAAAPAAAABokEAACgATwjCiMgRXhhbXBsZToKUmVnaXN0ZXItUFNGVGVwcFNjcmlwdGJsb2NrIC1OYW1lICLDvm5hbWXDvi5hbGNvaG9sIiAtU2NyaXB0QmxvY2sgeyAnQmVlcicsJ01lYWQnLCdXaGlza2V5JywnV2luZScsJ1ZvZGthJywnUnVtICgzeSknLCAnUnVtICg1eSknLCAnUnVtICg3eSknIH0KIz4BCYoEAAAJiwQAAAaMBAAAEGV4YW1wbGUudGVwcC5wczEGjQQAAHcvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3RlcHAvZXhhbXBsZS50ZXBwLnBzMQkGAAAACY8EAAAJkAQAAAEmBAAADwAAAAaRBAAAqAcjIFRhYiBFeHBhbnNpb24KCiMjIERlc2NyaXB0aW9uCgpNb2Rlcm4gVGFiIEV4cGFuc2lvbiB3YXMgb3BlbmVkIHRvIHVzZXJzIHdpdGggdGhlIG1vZHVsZSBgVGFiIEV4cGFuc2lvbiBQbHVzIFBsdXNgIChURVBQKS4KCkl0IGFsbG93cyB5b3UgdG8gZGVmaW5lLCB3aGF0IG9wdGlvbnMgYSB1c2VyIGlzIG9mZmVyZWQgd2hlbiB0YWJiaW5nIHRocm91Z2ggaW5wdXQgb3B0aW9ucy4gVGhpcyBjYW4gc2F2ZSBhIGxvdCBvZiB0aW1lIGZvciB0aGUgdXNlciBhbmQgaXMgY29uc2lkZXJlZCBhIGtleSBlbGVtZW50IGluIHVzZXIgZXhwZXJpZW5jZS4KClRoZSBgUFNGcmFtZXdvcmtgIG9mZmVycyBhIHNpbXBsaWZpZWQgd2F5IG9mIG9mZmVyaW5nIGp1c3QgdGhpcywgYXMgdGhlIHR3byBleGFtcGxlIGZpbGVzIHNob3cuCgojIyBDb25jZXB0CgpDdXN0b20gdGFiIGNvbXBsZXRpb24gaXMgZGVmaW5lZCBpbiB0d28gc3RlcHM6CgogLSBEZWZpbmUgYSBzY3JpcHRibG9jayB0aGF0IGlzIHJ1biB3aGVuIHRoZSB1c2VyIGhpdHMgYFRBQmAgYW5kIHByb3ZpZGVzIHRoZSBzdHJpbmdzIHRoYXQgYXJlIGhpcyBvcHRpb25zLgogLSBBc3NpZ24gdGhhdCBzY3JpcHRibG9jayB0byB0aGUgcGFyYW1ldGVyIG9mIGEgY29tbWFuZC4gWW91IGNhbiBhc3NpZ24gdGhlIHNhbWUgc2NyaXB0YmxvY2sgbXVsdGlwbGUgdGltZXMuCgojIyBTdHJ1Y3R1cmUKCkltcG9ydCBvcmRlciBtYXR0ZXJzLiBJbiBvcmRlciB0byBtYWtlIHRoaW5ncyB3b3JrIHdpdGggdGhlIGRlZmF1bHQgc2NhZmZvbGQsIGZvbGxvdyB0aG9zZSBydWxlczoKCiAtIEFsbCBzY3JpcHRmaWxlcyBfZGVmaW5pbmdfIGNvbXBsZXRpb24gc2NyaXB0YmxvY2tzIGxpa2UgdGhpczogYCoudGVwcC5wczFgCiAtIFB1dCBhbGwgeW91ciBjb21wbGV0aW9uIGFzc2lnbm1lbnRzIGluIGBhc3NpZ25tZW50LnBzMWABCZIEAAAJkwQAAAaUBAAACXJlYWRtZS5tZAaVBAAAcC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvdGVwcC9yZWFkbWUubWQJBgAAAAmXBAAACZgEAAABJwQAAA8AAAAGmQQAAM8BIyBEZXNjcmlwdGlvbgoKVGhpcyBpcyB3aGVyZSB0aGUgZnVuY3Rpb24gdGVzdHMgZ28uCgpNYWtlIHN1cmUgdG8gcHV0IHRoZW0gaW4gZm9sZGVycyByZWZsZWN0aW5nIHRoZSBhY3R1YWwgbW9kdWxlIHN0cnVjdHVyZS4KCkl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGludGVybmFsIGFuZCBwdWJsaWMgZnVuY3Rpb25zIGhlcmUuAQmaBAAACZsEAAAGnAQAAAlyZWFkbWUubWQGnQQAAHIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzL2Z1bmN0aW9ucy9yZWFkbWUubWQJBgAAAAmfBAAACaAEAAABKAQAAA8AAAAGoQQAAN4FIyBMaXN0IG9mIGZvcmJpZGRlbiBjb21tYW5kcwokZ2xvYmFsOkJhbm5lZENvbW1hbmRzID0gQCgKCSdXcml0ZS1Ib3N0JwoJJ1dyaXRlLVZlcmJvc2UnCgknV3JpdGUtV2FybmluZycKCSdXcml0ZS1FcnJvcicKCSdXcml0ZS1PdXRwdXQnCgknV3JpdGUtSW5mb3JtYXRpb24nCgknV3JpdGUtRGVidWcnCgkKCSMgVXNlIENJTSBpbnN0ZWFkIHdoZXJlIHBvc3NpYmxlCgknR2V0LVdtaU9iamVjdCcKCSdJbnZva2UtV21pTWV0aG9kJwoJJ1JlZ2lzdGVyLVdtaUV2ZW50JwoJJ1JlbW92ZS1XbWlPYmplY3QnCgknU2V0LVdtaUluc3RhbmNlJwoKCSMgVXNlIEdldC1XaW5FdmVudCBpbnN0ZWFkCgknR2V0LUV2ZW50TG9nJwopCgo8IwoJQ29udGFpbnMgbGlzdCBvZiBleGNlcHRpb25zIGZvciBiYW5uZWQgY21kbGV0cy4KCUluc2VydCB0aGUgZmlsZSBuYW1lcyBvZiBmaWxlcyB0aGF0IG1heSBjb250YWluIHRoZW0uCgkKCUV4YW1wbGU6CgkiV3JpdGUtSG9zdCIgID0gQCgnV3JpdGUtUFNGSG9zdENvbG9yLnBzMScsJ1dyaXRlLVBTRk1lc3NhZ2UucHMxJykKIz4KJGdsb2JhbDpNYXlDb250YWluQ29tbWFuZCA9IEB7CgkiV3JpdGUtSG9zdCIgID0gQCgpCgkiV3JpdGUtVmVyYm9zZSIgPSBAKCkKCSJXcml0ZS1XYXJuaW5nIiA9IEAoKQoJIldyaXRlLUVycm9yIiAgPSBAKCkKCSJXcml0ZS1PdXRwdXQiID0gQCgpCgkiV3JpdGUtSW5mb3JtYXRpb24iID0gQCgpCgkiV3JpdGUtRGVidWciID0gQCgpCn0BCaIEAAAJowQAAAakBAAAHEZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEGpQQAAIMBL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsL0ZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEJBgAAAAmnBAAACagEAAABKQQAAA8AAAAGqQQAAIIYJG1vZHVsZVJvb3QgPSAoUmVzb2x2ZS1QYXRoICIkZ2xvYmFsOnRlc3Ryb290XC4uIikuUGF0aAoKLiAiJGdsb2JhbDp0ZXN0cm9vdFxnZW5lcmFsXEZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEiCgpEZXNjcmliZSAiVmVyaWZ5aW5nIGludGVncml0eSBvZiBtb2R1bGUgZmlsZXMiIHsKCUJlZm9yZUFsbCB7CgkJZnVuY3Rpb24gR2V0LUZpbGVFbmNvZGluZwoJCXsKCQk8IwoJCQkuU1lOT1BTSVMKCQkJCVRlc3RzIGEgZmlsZSBmb3IgZW5jb2RpbmcuCgkJCQoJCQkuREVTQ1JJUFRJT04KCQkJCVRlc3RzIGEgZmlsZSBmb3IgZW5jb2RpbmcuCgkJCQoJCQkuUEFSQU1FVEVSIFBhdGgKCQkJCVRoZSBmaWxlIHRvIHRlc3QKCQkjPgoJCQlbQ21kbGV0QmluZGluZygpXQoJCQlQYXJhbSAoCgkJCQlbUGFyYW1ldGVyKE1hbmRhdG9yeSA9ICRUcnVlLCBWYWx1ZUZyb21QaXBlbGluZUJ5UHJvcGVydHlOYW1lID0gJFRydWUpXQoJCQkJW0FsaWFzKCdGdWxsTmFtZScpXQoJCQkJW3N0cmluZ10KCQkJCSRQYXRoCgkJCSkKCQkJCgkJCWlmICgkUFNWZXJzaW9uVGFibGUuUFNWZXJzaW9uLk1ham9yIC1sdCA2KQoJCQl7CgkJCQlbYnl0ZVtdXSRieXRlID0gZ2V0LWNvbnRlbnQgLUVuY29kaW5nIGJ5dGUgLVJlYWRDb3VudCA0IC1Ub3RhbENvdW50IDQgLVBhdGggJFBhdGgKCQkJfQoJCQllbHNlCgkJCXsKCQkJCVtieXRlW11dJGJ5dGUgPSBHZXQtQ29udGVudCAtQXNCeXRlU3RyZWFtIC1SZWFkQ291bnQgNCAtVG90YWxDb3VudCA0IC1QYXRoICRQYXRoCgkJCX0KCQkJCgkJCWlmICgkYnl0ZVswXSAtZXEgMHhlZiAtYW5kICRieXRlWzFdIC1lcSAweGJiIC1hbmQgJGJ5dGVbMl0gLWVxIDB4YmYpIHsgJ1VURjggQk9NJyB9CgkJCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVsxXSAtZXEgMHhmZikgeyAnVW5pY29kZScgfQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAwIC1hbmQgJGJ5dGVbMV0gLWVxIDAgLWFuZCAkYnl0ZVsyXSAtZXEgMHhmZSAtYW5kICRieXRlWzNdIC1lcSAweGZmKSB7ICdVVEYzMicgfQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAweDJiIC1hbmQgJGJ5dGVbMV0gLWVxIDB4MmYgLWFuZCAkYnl0ZVsyXSAtZXEgMHg3NikgeyAnVVRGNycgfQoJCQllbHNlIHsgJ1Vua25vd24nIH0KCQl9Cgl9CgoJQ29udGV4dCAiVmFsaWRhdGluZyBQUzEgU2NyaXB0IGZpbGVzIiB7CgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIgfCBXaGVyZS1PYmplY3QgRnVsbE5hbWUgLU5vdExpa2UgIiRtb2R1bGVSb290XHRlc3RzXCoiCgkJCgkJZm9yZWFjaCAoJGZpbGUgaW4gJGFsbEZpbGVzKQoJCXsKCQkJJG5hbWUgPSAkZmlsZS5GdWxsTmFtZS5SZXBsYWNlKCIkbW9kdWxlUm9vdFwiLCAnJykKCQkJCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIFVURjggZW5jb2Rpbmcgd2l0aCBCeXRlIE9yZGVyIE1hcmsiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gewoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjggQk9NJwoJCQl9CgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyB0cmFpbGluZyBzcGFjZSIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7CgkJCQkoJGZpbGUgfCBTZWxlY3QtU3RyaW5nICJccyQiIHwgV2hlcmUtT2JqZWN0IHsgJF8uTGluZS5UcmltKCkuTGVuZ3RoIC1ndCAwfSkuTGluZU51bWJlciB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCQl9CgkJCQoJCQkkdG9rZW5zID0gJG51bGwKCQkJJHBhcnNlRXJyb3JzID0gJG51bGwKCQkJJGFzdCA9IFtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLkxhbmd1YWdlLlBhcnNlcl06OlBhcnNlRmlsZSgkZmlsZS5GdWxsTmFtZSwgW3JlZl0kdG9rZW5zLCBbcmVmXSRwYXJzZUVycm9ycykKCQkJCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHN5bnRheCBlcnJvcnMiIC1UZXN0Q2FzZXMgQHsgcGFyc2VFcnJvcnMgPSAkcGFyc2VFcnJvcnMgfSB7CgkJCQkkcGFyc2VFcnJvcnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQkJfQoJCQkKCQkJZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGdsb2JhbDpCYW5uZWRDb21tYW5kcykKCQkJewoJCQkJaWYgKCRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmRbIiRjb21tYW5kIl0gLW5vdGNvbnRhaW5zICRmaWxlLk5hbWUpCgkJCQl7CgkJCQkJSXQgIlskbmFtZV0gU2hvdWxkIG5vdCB1c2UgJGNvbW1hbmQiIC1UZXN0Q2FzZXMgQHsgdG9rZW5zID0gJHRva2VuczsgY29tbWFuZCA9ICRjb21tYW5kIH0gewoJCQkJCQkkdG9rZW5zIHwgV2hlcmUtT2JqZWN0IFRleHQgLUVRICRjb21tYW5kIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoJCglDb250ZXh0ICJWYWxpZGF0aW5nIGhlbHAudHh0IGhlbHAgZmlsZXMiIHsKCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIiouaGVscC50eHQiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIgoJCQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykKCQl7CgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpCgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsKCQkJCUdldC1GaWxlRW5jb2RpbmcgLVBhdGggJGZpbGUuRnVsbE5hbWUgfCBTaG91bGQgLUJlICdVVEY4IEJPTScKCQkJfQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gewoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMCB9IHwgTWVhc3VyZS1PYmplY3QpLkNvdW50IHwgU2hvdWxkIC1CZSAwCgkJCX0KCQl9Cgl9Cn0BCaoEAAAJqwQAAAasBAAAF0ZpbGVJbnRlZ3JpdHkuVGVzdHMucHMxBq0EAAB+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsL0ZpbGVJbnRlZ3JpdHkuVGVzdHMucHMxCQYAAAAJrwQAAAmwBAAAASoEAAAPAAAABrEEAACDBSMgTGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaWdub3JlZAokZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zID0gQCgKICAgIAopCgo8IwogIExpc3Qgb2YgYXJyYXllZCBlbnVtZXJhdGlvbnMuIFRoZXNlIG5lZWQgdG8gYmUgdHJlYXRlZCBkaWZmZXJlbnRseS4gQWRkIGZ1bGwgbmFtZS4KICBFeGFtcGxlOgoKICAiU3FsY29sbGFib3JhdGl2ZS5EYmF0b29scy5Db25uZWN0aW9uLk1hbmFnZW1lbnRDb25uZWN0aW9uVHlwZVtdIgojPgokZ2xvYmFsOkhlbHBUZXN0RW51bWVyYXRlZEFycmF5cyA9IEAoCgkKKQoKPCMKICBTb21lIHR5cGVzIG9uIHBhcmFtZXRlcnMganVzdCBmYWlsIHRoZWlyIHZhbGlkYXRpb24gbm8gbWF0dGVyIHdoYXQuCiAgRm9yIHRob3NlIGl0IGJlY29tZXMgcG9zc2libGUgdG8gc2tpcCB0aGVtLCBieSBhZGRpbmcgdGhlbSB0byB0aGlzIGhhc2h0YWJsZS4KICBBZGQgYnkgZm9sbG93aW5nIHRoaXMgY29udmVudGlvbjogPGNvbW1hbmQgbmFtZT4gPSBAKDxsaXN0IG9mIHBhcmFtZXRlciBuYW1lcz4pCiAgRXhhbXBsZToKCiAgIkdldC1EYmFDbU9iamVjdCIgICAgICAgPSBAKCJEb05vdFVzZSIpCiM+CiRnbG9iYWw6SGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZSA9IEB7CiAgICAKfQoBCbIEAAAJswQAAAa0BAAAE0hlbHAuRXhjZXB0aW9ucy5wczEGtQQAAHovU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzL2dlbmVyYWwvSGVscC5FeGNlcHRpb25zLnBzMQkGAAAACbcEAAAJuAQAAAErBAAADwAAAAa5BAAAvDM8IwogICAgLk5PVEVTCiAgICAgICAgVGhlIG9yaWdpbmFsIHRlc3QgdGhpcyBpcyBiYXNlZCB1cG9uIHdhcyB3cml0dGVuIGJ5IEp1bmUgQmxlbmRlci4KCQlBZnRlciBzZXZlcmFsIHJvdW5kcyBvZiBtb2RpZmljYXRpb25zIGl0IHN0YW5kcyBub3cgYXMgaXQgaXMsIGJ1dCB0aGUgaG9ub3IgcmVtYWlucyBoZXJzLgoKCQlUaGFuayB5b3UgSnVuZSwgZm9yIGFsbCB5b3UgaGF2ZSBkb25lIQoKICAgIC5ERVNDUklQVElPTgoJCVRoaXMgdGVzdCBldmFsdWF0ZXMgdGhlIGhlbHAgZm9yIGFsbCBjb21tYW5kcyBpbiBhIG1vZHVsZS4KCgkuUEFSQU1FVEVSIFNraXBUZXN0CgkJRGlzYWJsZXMgdGhpcyB0ZXN0LgoJCgkuUEFSQU1FVEVSIENvbW1hbmRQYXRoCgkJTGlzdCBvZiBwYXRocyB1bmRlciB3aGljaCB0aGUgc2NyaXB0IGZpbGVzIGFyZSBzdG9yZWQuCgkJVGhpcyB0ZXN0IGFzc3VtZXMgdGhhdCBhbGwgZnVuY3Rpb25zIGhhdmUgdGhlaXIgb3duIGZpbGUgdGhhdCBpcyBuYW1lZCBhZnRlciB0aGVtc2VsdmVzLgoJCVRoZXNlIHBhdGhzIGFyZSB1c2VkIHRvIHNlYXJjaCBmb3IgY29tbWFuZHMgdGhhdCBzaG91bGQgZXhpc3QgYW5kIGJlIHRlc3RlZC4KCQlXaWxsIHNlYXJjaCByZWN1cnNpdmVseSBhbmQgYWNjZXB0cyB3aWxkY2FyZHMsIG1ha2Ugc3VyZSBvbmx5IGZ1bmN0aW9ucyBhcmUgZm91bmQKCgkuUEFSQU1FVEVSIE1vZHVsZU5hbWUKCQlOYW1lIG9mIHRoZSBtb2R1bGUgdG8gYmUgdGVzdGVkLgoJCVRoZSBtb2R1bGUgbXVzdCBhbHJlYWR5IGJlIGltcG9ydGVkCgoJLlBBUkFNRVRFUiBFeGNlcHRpb25zRmlsZQoJCUZpbGUgaW4gd2hpY2ggZXhjZXB0aW9ucyBhbmQgYWRqdXN0bWVudHMgYXJlIGNvbmZpZ3VyZWQuCgkJSW4gaXQgdGhlcmUgc2hvdWxkIGJlIHR3byBhcnJheXMgYW5kIGEgaGFzaHRhYmxlIGRlZmluZWQ6CgkJCSRnbG9iYWw6RnVuY3Rpb25IZWxwVGVzdEV4Y2VwdGlvbnMKCQkJJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMKCQkJJGdsb2JhbDpIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlCgkJVGhlc2UgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhlIHRlc3RzIHNsaWdodGx5IGluIGNhc2VzIG9mIG5lZWQuCgkJU2VlIHRoZSBleGFtcGxlIGZpbGUgZm9yIGV4cGxhbmF0aW9ucyBvbiBlYWNoIG9mIHRoZXNlIHVzYWdlIGFuZCBlZmZlY3QuCiM+CltDbWRsZXRCaW5kaW5nKCldClBhcmFtICgKCVtzd2l0Y2hdCgkkU2tpcFRlc3QsCgkKCVtzdHJpbmdbXV0KCSRDb21tYW5kUGF0aCA9IEAoIiRnbG9iYWw6dGVzdHJvb3RcLi5cZnVuY3Rpb25zIiwgIiRnbG9iYWw6dGVzdHJvb3RcLi5caW50ZXJuYWxcZnVuY3Rpb25zIiksCgkKCVtzdHJpbmddCgkkTW9kdWxlTmFtZSA9ICLDvm5hbWXDviIsCgkKCVtzdHJpbmddCgkkRXhjZXB0aW9uc0ZpbGUgPSAiJGdsb2JhbDp0ZXN0cm9vdFxnZW5lcmFsXEhlbHAuRXhjZXB0aW9ucy5wczEiCikKaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQouICRFeGNlcHRpb25zRmlsZQoKJGluY2x1ZGVkTmFtZXMgPSAoR2V0LUNoaWxkSXRlbSAkQ29tbWFuZFBhdGggLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiKS5CYXNlTmFtZQokY29tbWFuZFR5cGVzID0gQCgnQ21kbGV0JywgJ0Z1bmN0aW9uJykKaWYgKCRQU1ZlcnNpb25UYWJsZS5QU0VkaXRpb24gLWVxICdEZXNrdG9wJyApIHsgJGNvbW1hbmRUeXBlcyArPSAnV29ya2Zsb3cnIH0KJGNvbW1hbmRzID0gR2V0LUNvbW1hbmQgLU1vZHVsZSAoR2V0LU1vZHVsZSAkTW9kdWxlTmFtZSkgLUNvbW1hbmRUeXBlICRjb21tYW5kVHlwZXMgfCBXaGVyZS1PYmplY3QgTmFtZSAtSW4gJGluY2x1ZGVkTmFtZXMKCiMjIFdoZW4gdGVzdGluZyBoZWxwLCByZW1lbWJlciB0aGF0IGhlbHAgaXMgY2FjaGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBzZXNzaW9uLgojIyBUbyB0ZXN0LCByZXN0YXJ0IHNlc3Npb24uCgoKZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGNvbW1hbmRzKSB7CiAgICAkY29tbWFuZE5hbWUgPSAkY29tbWFuZC5OYW1lCiAgICAKICAgICMgU2tpcCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG9uIHRoZSBleGNsdXNpb25zIGxpc3QKICAgIGlmICgkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zIC1jb250YWlucyAkY29tbWFuZE5hbWUpIHsgY29udGludWUgfQogICAgCiAgICAjIFRoZSBtb2R1bGUtcXVhbGlmaWVkIGNvbW1hbmQgZmFpbHMgb24gTWljcm9zb2Z0LlBvd2VyU2hlbGwuQXJjaGl2ZSBjbWRsZXRzCiAgICAkSGVscCA9IEdldC1IZWxwICRjb21tYW5kTmFtZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQoJCglEZXNjcmliZSAiVGVzdCBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsKICAgICAgICAKCQkjIElmIGhlbHAgaXMgbm90IGZvdW5kLCBzeW5vcHNpcyBpbiBhdXRvLWdlbmVyYXRlZCBoZWxwIGlzIHRoZSBzeW50YXggZGlhZ3JhbQoJCUl0ICJzaG91bGQgbm90IGJlIGF1dG8tZ2VuZXJhdGVkIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsKCQkJJEhlbHAuU3lub3BzaXMgfCBTaG91bGQgLU5vdCAtQmVMaWtlICcqYFtgPENvbW1vblBhcmFtZXRlcnNgPmBdKicKCQl9CiAgICAgICAgCgkJIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgZnVuY3Rpb24KCQlJdCAiZ2V0cyBkZXNjcmlwdGlvbiBmb3IgJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsKCQkJJEhlbHAuRGVzY3JpcHRpb24gfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCX0KICAgICAgICAKCQkjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZQoJCUl0ICJnZXRzIGV4YW1wbGUgY29kZSBmcm9tICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7CgkJCSgkSGVscC5FeGFtcGxlcy5FeGFtcGxlIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuQ29kZSB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJfQoJCgkJIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUgZGVzY3JpcHRpb24KCQlJdCAiZ2V0cyBleGFtcGxlIGhlbHAgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gewoJCQkoJEhlbHAuRXhhbXBsZXMuRXhhbXBsZS5SZW1hcmtzIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJfQogICAgICAgIAogICAgICAgIENvbnRleHQgIlRlc3QgcGFyYW1ldGVyIGhlbHAgZm9yICRjb21tYW5kTmFtZSIgewogICAgICAgICAgICAKICAgICAgICAgICAgJGNvbW1vbiA9ICdEZWJ1ZycsICdFcnJvckFjdGlvbicsICdFcnJvclZhcmlhYmxlJywgJ0luZm9ybWF0aW9uQWN0aW9uJywgJ0luZm9ybWF0aW9uVmFyaWFibGUnLCAnT3V0QnVmZmVyJywgJ091dFZhcmlhYmxlJywgJ1BpcGVsaW5lVmFyaWFibGUnLCAnVmVyYm9zZScsICdXYXJuaW5nQWN0aW9uJywgJ1dhcm5pbmdWYXJpYWJsZScKICAgICAgICAgICAgCiAgICAgICAgICAgICRwYXJhbWV0ZXJzID0gJGNvbW1hbmQuUGFyYW1ldGVyU2V0cy5QYXJhbWV0ZXJzIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IE5hbWUgLVVuaXF1ZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1ub3RpbiAkY29tbW9uCiAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lcyA9ICRwYXJhbWV0ZXJzLk5hbWUKICAgICAgICAgICAgJEhlbHBQYXJhbWV0ZXJOYW1lcyA9ICRIZWxwLlBhcmFtZXRlcnMuUGFyYW1ldGVyLk5hbWUgfCBTb3J0LU9iamVjdCAtVW5pcXVlCiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbWV0ZXIgaW4gJHBhcmFtZXRlcnMpIHsKICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lID0gJHBhcmFtZXRlci5OYW1lCiAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscCA9ICRIZWxwLnBhcmFtZXRlcnMucGFyYW1ldGVyIHwgV2hlcmUtT2JqZWN0IE5hbWUgLUVRICRwYXJhbWV0ZXJOYW1lCgkJCQoJCQkJIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgcGFyYW1ldGVyCgkJCQlJdCAiZ2V0cyBoZWxwIGZvciBwYXJhbWV0ZXI6ICRwYXJhbWV0ZXJOYW1lIDogaW4gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscCB9IHsKCQkJCQkkcGFyYW1ldGVySGVscC5EZXNjcmlwdGlvbi5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkKCQkJCX0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJGNvZGVNYW5kYXRvcnkgPSAkcGFyYW1ldGVyLklzTWFuZGF0b3J5LnRvU3RyaW5nKCkKCQkJCUl0ICJoZWxwIGZvciAkcGFyYW1ldGVyTmFtZSBwYXJhbWV0ZXIgaW4gJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IE1hbmRhdG9yeSB2YWx1ZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IGNvZGVNYW5kYXRvcnkgPSAkY29kZU1hbmRhdG9yeSB9IHsKCQkJCQkkcGFyYW1ldGVySGVscC5SZXF1aXJlZCB8IFNob3VsZCAtQmUgJGNvZGVNYW5kYXRvcnkKCQkJCX0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCRIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlWyRjb21tYW5kTmFtZV0gLWNvbnRhaW5zICRwYXJhbWV0ZXJOYW1lKSB7IGNvbnRpbnVlIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJGNvZGVUeXBlID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLk5hbWUKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5Jc0VudW0pIHsKICAgICAgICAgICAgICAgICAgICAjIEVudW1lcmF0aW9ucyBvZnRlbiBoYXZlIGlzc3VlcyB3aXRoIHRoZSB0eXBlbmFtZSBub3QgYmVpbmcgcmVsaWFibHkgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgICAgJG5hbWVzID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlOjpHZXROYW1lcygkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUpCgkJCQkJCSMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscDsgbmFtZXMgPSAkbmFtZXMgfSB7CgkJCQkJCSRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcwoJCQkJCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2VpZiAoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkZ1bGxOYW1lIC1pbiAkSGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzKSB7CiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9IFtFbnVtXTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkRlY2xhcmVkTWVtYmVyc1swXS5SZXR1cm5UeXBlKQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscDsgbmFtZXMgPSAkbmFtZXMgfSB7CgkJCQkJCSRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcwoJCQkJCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMgVG8gYXZvaWQgY2FsbGluZyBUcmltIG1ldGhvZCBvbiBhIG51bGwgb2JqZWN0LgogICAgICAgICAgICAgICAgICAgICRoZWxwVHlwZSA9IGlmICgkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZSkgeyAkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZS5UcmltKCkgfQoJCQkJCSMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IGhlbHBUeXBlID0gJGhlbHBUeXBlOyBjb2RlVHlwZSA9ICRjb2RlVHlwZSB9IHsKCQkJCQkJJGhlbHBUeXBlIHwgU2hvdWxkIC1iZSAkY29kZVR5cGUKCQkJCQl9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yZWFjaCAoJGhlbHBQYXJtIGluICRIZWxwUGFyYW1ldGVyTmFtZXMpIHsKCQkJCSMgU2hvdWxkbid0IGZpbmQgZXh0cmEgcGFyYW1ldGVycyBpbiBoZWxwLgoJCQkJSXQgImZpbmRzIGhlbHAgcGFyYW1ldGVyIGluIGNvZGU6ICRoZWxwUGFybSIgLVRlc3RDYXNlcyBAeyBoZWxwUGFybSA9ICRoZWxwUGFybTsgcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVyTmFtZXMgfSB7CgkJCQkJJGhlbHBQYXJtIC1pbiAkcGFyYW1ldGVyTmFtZXMgfCBTaG91bGQgLUJlICR0cnVlCgkJCQl9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0BCboEAAAJuwQAAAa8BAAADkhlbHAuVGVzdHMucHMxBr0EAAB1L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsL0hlbHAuVGVzdHMucHMxCQYAAAAJvwQAAAnABAAAASwEAAAPAAAABsEEAACRFURlc2NyaWJlICJWYWxpZGF0aW5nIHRoZSBtb2R1bGUgbWFuaWZlc3QiIHsKCSRtb2R1bGVSb290ID0gKFJlc29sdmUtUGF0aCAiJGdsb2JhbDp0ZXN0cm9vdFwuLiIpLlBhdGgKCSRtYW5pZmVzdCA9ICgoR2V0LUNvbnRlbnQgIiRtb2R1bGVSb290XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSIpIC1qb2luICJgbiIpIHwgSW52b2tlLUV4cHJlc3Npb24KCUNvbnRleHQgIkJhc2ljIHJlc291cmNlcyB2YWxpZGF0aW9uIiB7CgkJJGZpbGVzID0gR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIKCQlJdCAiRXhwb3J0cyBhbGwgZnVuY3Rpb25zIGluIHRoZSBwdWJsaWMgZm9sZGVyIiAtVGVzdENhc2VzIEB7IGZpbGVzID0gJGZpbGVzOyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsKCgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJzw9JykuSW5wdXRPYmplY3QKCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCX0KCQlJdCAiRXhwb3J0cyBubyBmdW5jdGlvbiB0aGF0IGlzbid0IGFsc28gcHJlc2VudCBpbiB0aGUgcHVibGljIGZvbGRlciIgLVRlc3RDYXNlcyBAeyBmaWxlcyA9ICRmaWxlczsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7CgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJz0+JykuSW5wdXRPYmplY3QKCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCX0KCgkJSXQgIkV4cG9ydHMgbm9uZSBvZiBpdHMgaW50ZXJuYWwgZnVuY3Rpb25zIiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7CgkJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiCgkJCSRmaWxlcyB8IFdoZXJlLU9iamVjdCBCYXNlTmFtZSAtSW4gJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJfQoJfQoKCUNvbnRleHQgIkluZGl2aWR1YWwgZmlsZSB2YWxpZGF0aW9uIiB7CgkJSXQgIlRoZSByb290IG1vZHVsZSBmaWxlIGV4aXN0cyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gewoJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCQoJG1hbmlmZXN0LlJvb3RNb2R1bGUpIiB8IFNob3VsZCAtQmUgJHRydWUKCQl9CgoJCWZvcmVhY2ggKCRmb3JtYXQgaW4gJG1hbmlmZXN0LkZvcm1hdHNUb1Byb2Nlc3MpCgkJewoJCQlJdCAiVGhlIGZpbGUgJGZvcm1hdCBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBmb3JtYXQgPSAkZm9ybWF0IH0gewoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkZm9ybWF0IiB8IFNob3VsZCAtQmUgJHRydWUKCQkJfQoJCX0KCgkJZm9yZWFjaCAoJHR5cGUgaW4gJG1hbmlmZXN0LlR5cGVzVG9Qcm9jZXNzKQoJCXsKCQkJSXQgIlRoZSBmaWxlICR0eXBlIHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IHR5cGUgPSAkdHlwZSB9IHsKCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJHR5cGUiIHwgU2hvdWxkIC1CZSAkdHJ1ZQoJCQl9CgkJfQoKCQlmb3JlYWNoICgkYXNzZW1ibHkgaW4gJG1hbmlmZXN0LlJlcXVpcmVkQXNzZW1ibGllcykKCQl7CiAgICAgICAgICAgIGlmICgkYXNzZW1ibHkgLWxpa2UgIiouZGxsIikgewogICAgICAgICAgICAgICAgSXQgIlRoZSBmaWxlICRhc3NlbWJseSBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBhc3NlbWJseSA9ICRhc3NlbWJseSB9IHsKICAgICAgICAgICAgICAgICAgICBUZXN0LVBhdGggIiRtb2R1bGVSb290XCRhc3NlbWJseSIgfCBTaG91bGQgLUJlICR0cnVlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBJdCAiVGhlIGZpbGUgJGFzc2VtYmx5IHNob3VsZCBsb2FkIGZyb20gdGhlIEdBQyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IGFzc2VtYmx5ID0gJGFzc2VtYmx5IH0gewogICAgICAgICAgICAgICAgICAgIHsgQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSAkYXNzZW1ibHkgfSB8IFNob3VsZCAtTm90IC1UaHJvdwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKCQlmb3JlYWNoICgkdGFnIGluICRtYW5pZmVzdC5Qcml2YXRlRGF0YS5QU0RhdGEuVGFncykKCQl7CgkJCUl0ICJUYWdzIHNob3VsZCBoYXZlIG5vIHNwYWNlcyBpbiBuYW1lIiAtVGVzdENhc2VzIEB7IHRhZyA9ICR0YWcgfSB7CgkJCQkkdGFnIC1tYXRjaCAiICIgfCBTaG91bGQgLUJlICRmYWxzZQoJCQl9CgkJfQoJfQp9AQnCBAAACcMEAAAGxAQAABJNYW5pZmVzdC5UZXN0cy5wczEGxQQAAHkvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzL2dlbmVyYWwvTWFuaWZlc3QuVGVzdHMucHMxCQYAAAAJxwQAAAnIBAAAAS0EAAAPAAAABskEAADtCFtDbWRsZXRCaW5kaW5nKCldClBhcmFtICgKCVtzd2l0Y2hdCgkkU2tpcFRlc3QsCgkKCVtzdHJpbmdbXV0KCSRDb21tYW5kUGF0aCA9IEAoIiRnbG9iYWw6dGVzdHJvb3RcLi5cZnVuY3Rpb25zIiwgIiRnbG9iYWw6dGVzdHJvb3RcLi5caW50ZXJuYWxcZnVuY3Rpb25zIikKKQoKaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQoKJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0CgpEZXNjcmliZSAnSW52b2tpbmcgUFNTY3JpcHRBbmFseXplciBhZ2FpbnN0IGNvbW1hbmRiYXNlJyB7CgkkY29tbWFuZEZpbGVzID0gZm9yZWFjaCAoJHBhdGggaW4gJENvbW1hbmRQYXRoKSB7CiAgICAgICAgR2V0LUNoaWxkSXRlbSAtUGF0aCAkcGF0aCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIKICAgIH0KCSRzY3JpcHRBbmFseXplclJ1bGVzID0gR2V0LVNjcmlwdEFuYWx5emVyUnVsZQoJCglmb3JlYWNoICgkZmlsZSBpbiAkY29tbWFuZEZpbGVzKQoJewoJCUNvbnRleHQgIkFuYWx5emluZyAkKCRmaWxlLkJhc2VOYW1lKSIgewoJCQkkYW5hbHlzaXMgPSBJbnZva2UtU2NyaXB0QW5hbHl6ZXIgLVBhdGggJGZpbGUuRnVsbE5hbWUgLUV4Y2x1ZGVSdWxlIFBTQXZvaWRUcmFpbGluZ1doaXRlc3BhY2UsIFBTU2hvdWxkUHJvY2VzcwoJCQkKCQkJZm9yRWFjaCAoJHJ1bGUgaW4gJHNjcmlwdEFuYWx5emVyUnVsZXMpCgkJCXsKCQkJCUl0ICJTaG91bGQgcGFzcyAkcnVsZSIgLVRlc3RDYXNlcyBAeyBhbmFseXNpcyA9ICRhbmFseXNpczsgcnVsZSA9ICRydWxlIH0gewoJCQkJCUlmICgkYW5hbHlzaXMuUnVsZU5hbWUgLWNvbnRhaW5zICRydWxlKQoJCQkJCXsKCQkJCQkJJGFuYWx5c2lzIHwgV2hlcmUtT2JqZWN0IFJ1bGVOYW1lIC1FUSAkcnVsZSAtb3V0dmFyaWFibGUgZmFpbHVyZXMgfCBGb3JFYWNoLU9iamVjdCB7ICRudWxsID0gJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyLkFkZCgkXykgfQoJCQkJCQkKCQkJCQkJMSB8IFNob3VsZCAtQmUgMAoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkwIHwgU2hvdWxkIC1CZSAwCgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQp9AQnKBAAACcsEAAAGzAQAABpQU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQbNBAAAgQEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzL2dlbmVyYWwvUFNTY3JpcHRBbmFseXplci5UZXN0cy5wczEJBgAAAAnPBAAACdAEAAABLgQAAA8AAAAG0QQAAMMHJGV4Y2VwdGlvbnMgPSBAeyB9Cgo8IwpBIGxpc3Qgb2YgZW50cmllcyB0aGF0IE1BWSBiZSBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMsIHdpdGhvdXQgY2F1c2luZyB0aGUgdGVzdHMgdG8gZmFpbC4KVGhpcyBpcyBjb21tb25seSB1c2VkIGluIG1vZHVsZXMgdGhhdCBnZW5lcmF0ZSBsb2NhbGl6ZWQgbWVzc2FnZXMgc3RyYWlnaHQgZnJvbSBDIy4KU3BlY2lmeSB0aGUgZnVsbCBrZXkgYXMgaXQgaXMgd3JpdHRlbiBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMsIGRvIG5vdCBwcmVwZW5kIHRoZSBtb2R1bGVuYW1lLAphcyB5b3Ugd291bGQgaGF2ZSB0byBpbiBDIyBjb2RlLgoKRXhhbXBsZToKJGV4Y2VwdGlvbnNbJ0xlZ2FsU3VycGx1cyddID0gQCgKICAgICdFeGNlcHRpb24uU3RyZWFtcy5GYWlsZWRDcmVhdGUnCiAgICAnRXhjZXB0aW9uLlN0cmVhbXMuRmFpbGVkRGlzcG9zZScKKQojPgokZXhjZXB0aW9uc1snTGVnYWxTdXJwbHVzJ10gPSBAKAoKKQo8IwpBIGxpc3Qgb2YgZW50cmllcyB0aGF0IE1BWSBiZSB1c2VkIHdpdGhvdXQgbmVlZGluZyB0byBoYXZlIHRleHQgZGVmaW5lZC4KVGhpcyBpcyBpbnRlbmRlZCBmb3IgbW9kdWxlcyAocmUtKXVzaW5nIHN0cmluZ3MgcHJvdmlkZWQgYnkgYW5vdGhlciBtb2R1bGUKIz4KJGV4Y2VwdGlvbnNbJ05vVGV4dE5lZWRlZCddID0gQCgKCSdWYWxpZGF0ZS5GU1BhdGgnCgknVmFsaWRhdGUuRlNQYXRoLkZpbGUnCgknVmFsaWRhdGUuRlNQYXRoLkZpbGVPclBhcmVudCcKCSdWYWxpZGF0ZS5GU1BhdGguRm9sZGVyJwoJJ1ZhbGlkYXRlLlBhdGgnCgknVmFsaWRhdGUuUGF0aC5Db250YWluZXInCgknVmFsaWRhdGUuUGF0aC5MZWFmJwoJJ1ZhbGlkYXRlLlRpbWVTcGFuLlBvc2l0aXZlJwoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZScKCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUuRmlsZScKCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUuSHR0cHMnCikKCiRleGNlcHRpb25zAQnSBAAACdMEAAAG1AQAABZzdHJpbmdzLkV4Y2VwdGlvbnMucHMxBtUEAAB9L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsL3N0cmluZ3MuRXhjZXB0aW9ucy5wczEJBgAAAAnXBAAACdgEAAABLwQAAA8AAAAG2QQAAP0HPCMKLkRFU0NSSVBUSU9OCiAgICBUaGlzIHRlc3QgdmVyaWZpZXMsIHRoYXQgYWxsIHN0cmluZ3MgdGhhdCBoYXZlIGJlZW4gdXNlZCwKICAgIGFyZSBsaXN0ZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGVzIGFuZCB0aHVzIGhhdmUgYSBtZXNzYWdlIGJlaW5nIGRpc3BsYXllZC4KCiAgICBJdCBhbHNvIGNoZWNrcywgd2hldGhlciB0aGUgbGFuZ3VhZ2UgZmlsZXMgaGF2ZSBvcnBoYW5lZCBlbnRyaWVzIHRoYXQgbmVlZCBjbGVhbmluZyB1cC4KIz4KCgoKRGVzY3JpYmUgIlRlc3RpbmcgbG9jYWxpemF0aW9uIHN0cmluZ3MiIHsKCSRtb2R1bGVSb290ID0gKEdldC1Nb2R1bGUgw75uYW1lw74pLk1vZHVsZUJhc2UKCSRzdHJpbmdzUmVzdWx0cyA9IEV4cG9ydC1QU01EU3RyaW5nIC1Nb2R1bGVSb290ICRtb2R1bGVSb290CgkkZXhjZXB0aW9ucyA9ICYgIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxzdHJpbmdzLkV4Y2VwdGlvbnMucHMxIgoJCglmb3JlYWNoICgkc3RyaW5nRW50cnkgaW4gJHN0cmluZ3NSZXN1bHRzKSB7CiAgICAgICAgaWYgKCRzdHJpbmdFbnRyeS5TdHJpbmcgLWVxICJrZXkiKSB7IGNvbnRpbnVlIH0gIyBTa2lwcGluZyB0aGUgdGVtcGxhdGUgZGVmYXVsdCBlbnRyeQoJCUl0ICJTaG91bGQgYmUgdXNlZCAmIGhhdmUgdGV4dDogJCgkc3RyaW5nRW50cnkuU3RyaW5nKSIgLVRlc3RDYXNlcyBAeyBzdHJpbmdFbnRyeSA9ICRzdHJpbmdFbnRyeTsgZXhjZXB0aW9ucyA9ICRleGNlcHRpb25zIH0gewogICAgICAgICAgICBpZiAoJGV4Y2VwdGlvbnMuTGVnYWxTdXJwbHVzIC1ub3Rjb250YWlucyAkc3RyaW5nRW50cnkuU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAkc3RyaW5nRW50cnkuU3VycGx1cyB8IFNob3VsZCAtQmVGYWxzZQoJCQl9CgkJCWlmICgkZXhjZXB0aW9ucy5Ob1RleHROZWVkZWQgLW5vdGNvbnRhaW5zICRzdHJpbmdFbnRyeS5TdHJpbmcpIHsKCQkJCSRzdHJpbmdFbnRyeS5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkKCQkJfQogICAgICAgIH0KICAgIH0KfQEJ2gQAAAnbBAAABtwEAAARc3RyaW5ncy5UZXN0cy5wczEG3QQAAHgvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL3Rlc3RzL2dlbmVyYWwvc3RyaW5ncy5UZXN0cy5wczEJBgAAAAnfBAAACeAEAAABOgQAAAcAAAAJ4QQAAAEAAAABAAAAATsEAAAHAAAACQsAAAAAAAAAAAAAAAE/BAAABwAAAAkLAAAAAAAAAAAAAAABQAQAAAcAAAAJCwAAAAAAAAAAAAAAAUIEAAAHAAAACQsAAAAAAAAAAAAAAAFDBAAABwAAAAkLAAAAAAAAAAAAAAABRwQAAAcAAAAJCwAAAAAAAAAAAAAAAUgEAAAHAAAACQsAAAAAAAAAAAAAAAFKBAAABwAAAAkLAAAAAAAAAAAAAAABSwQAAAcAAAAJCwAAAAAAAAAAAAAAAU8EAAAHAAAACQsAAAAAAAAAAAAAAAFQBAAABwAAAAkLAAAAAAAAAAAAAAABUgQAAAcAAAAJ4wQAAAEAAAABAAAAAVMEAAAHAAAACQsAAAAAAAAAAAAAAAFXBAAABwAAAAkLAAAAAAAAAAAAAAABWAQAAAcAAAAJCwAAAAAAAAAAAAAAAVoEAAAHAAAACeUEAAABAAAAAQAAAAFbBAAABwAAAAkLAAAAAAAAAAAAAAABXwQAAAcAAAAJCwAAAAAAAAAAAAAAAWAEAAAHAAAACQsAAAAAAAAAAAAAAAFiBAAABwAAAAnnBAAAAgAAAAIAAAABYwQAAAcAAAAJ6AQAAAIAAAACAAAAAWcEAAAHAAAACQsAAAAAAAAAAAAAAAFoBAAABwAAAAkLAAAAAAAAAAAAAAABagQAAAcAAAAJCwAAAAAAAAAAAAAAAWsEAAAHAAAACQsAAAAAAAAAAAAAAAFvBAAABwAAAAkLAAAAAAAAAAAAAAABcAQAAAcAAAAJCwAAAAAAAAAAAAAAAXIEAAAHAAAACQsAAAAAAAAAAAAAAAFzBAAABwAAAAkLAAAAAAAAAAAAAAABdwQAAAcAAAAJCwAAAAAAAAAAAAAAAXgEAAAHAAAACQsAAAAAAAAAAAAAAAF6BAAABwAAAAnqBAAAAQAAAAEAAAABewQAAAcAAAAJCwAAAAAAAAAAAAAAAX8EAAAHAAAACQsAAAAAAAAAAAAAAAGABAAABwAAAAkLAAAAAAAAAAAAAAABggQAAAcAAAAJ7AQAAAEAAAABAAAAAYMEAAAHAAAACQsAAAAAAAAAAAAAAAGHBAAABwAAAAkLAAAAAAAAAAAAAAABiAQAAAcAAAAJCwAAAAAAAAAAAAAAAYoEAAAHAAAACe4EAAABAAAAAQAAAAGLBAAABwAAAAkLAAAAAAAAAAAAAAABjwQAAAcAAAAJCwAAAAAAAAAAAAAAAZAEAAAHAAAACQsAAAAAAAAAAAAAAAGSBAAABwAAAAkLAAAAAAAAAAAAAAABkwQAAAcAAAAJCwAAAAAAAAAAAAAAAZcEAAAHAAAACQsAAAAAAAAAAAAAAAGYBAAABwAAAAkLAAAAAAAAAAAAAAABmgQAAAcAAAAJCwAAAAAAAAAAAAAAAZsEAAAHAAAACQsAAAAAAAAAAAAAAAGfBAAABwAAAAkLAAAAAAAAAAAAAAABoAQAAAcAAAAJCwAAAAAAAAAAAAAAAaIEAAAHAAAACQsAAAAAAAAAAAAAAAGjBAAABwAAAAkLAAAAAAAAAAAAAAABpwQAAAcAAAAJCwAAAAAAAAAAAAAAAagEAAAHAAAACQsAAAAAAAAAAAAAAAGqBAAABwAAAAkLAAAAAAAAAAAAAAABqwQAAAcAAAAJCwAAAAAAAAAAAAAAAa8EAAAHAAAACQsAAAAAAAAAAAAAAAGwBAAABwAAAAkLAAAAAAAAAAAAAAABsgQAAAcAAAAJCwAAAAAAAAAAAAAAAbMEAAAHAAAACQsAAAAAAAAAAAAAAAG3BAAABwAAAAkLAAAAAAAAAAAAAAABuAQAAAcAAAAJCwAAAAAAAAAAAAAAAboEAAAHAAAACfAEAAABAAAAAQAAAAG7BAAABwAAAAkLAAAAAAAAAAAAAAABvwQAAAcAAAAJCwAAAAAAAAAAAAAAAcAEAAAHAAAACQsAAAAAAAAAAAAAAAHCBAAABwAAAAnyBAAAAQAAAAEAAAABwwQAAAcAAAAJCwAAAAAAAAAAAAAAAccEAAAHAAAACQsAAAAAAAAAAAAAAAHIBAAABwAAAAkLAAAAAAAAAAAAAAABygQAAAcAAAAJCwAAAAAAAAAAAAAAAcsEAAAHAAAACQsAAAAAAAAAAAAAAAHPBAAABwAAAAkLAAAAAAAAAAAAAAAB0AQAAAcAAAAJCwAAAAAAAAAAAAAAAdIEAAAHAAAACQsAAAAAAAAAAAAAAAHTBAAABwAAAAkLAAAAAAAAAAAAAAAB1wQAAAcAAAAJCwAAAAAAAAAAAAAAAdgEAAAHAAAACQsAAAAAAAAAAAAAAAHaBAAABwAAAAn0BAAAAQAAAAEAAAAB2wQAAAcAAAAJCwAAAAAAAAAAAAAAAd8EAAAHAAAACQsAAAAAAAAAAAAAAAHgBAAABwAAAAkLAAAAAAAAAAAAAAAR4QQAAAQAAAAG9gQAAARuYW1lDQMR4wQAAAQAAAAG9wQAAARuYW1lDQMR5QQAAAQAAAAG+AQAAARuYW1lDQMR5wQAAAQAAAAG+QQAAARuYW1lBvoEAAAGYXV0aG9yDQIR6AQAAAQAAAAG+wQAAARkYXRlBvwEAAAEeWVhcg0CEeoEAAAEAAAABv0EAAAEbmFtZQ0DEewEAAAEAAAABv4EAAAEbmFtZQ0DEe4EAAAEAAAABv8EAAAEbmFtZQ0DEfAEAAAEAAAABgAFAAAEbmFtZQ0DEfIEAAAEAAAABgEFAAAEbmFtZQ0DEfQEAAAEAAAABgIFAAAEbmFtZQ0DCw==</BA>
            </MS>
          </Obj>
        </LST>
      </Obj>
      <I32 N="Generation">1</I32>
    </Props>
    <MS>
      <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGUMAAAABE5hbWUEVHlwZQdWZXJzaW9uC0Rlc2NyaXB0aW9uBkF1dGhvcglDcmVhdGVkT24EVGFncwpQYXJhbWV0ZXJzB1NjcmlwdHMLUGFyYW1ldGVyczIIQ2hpbGRyZW4KR2VuZXJhdGlvbgEEAwEBAAMDAwMDAClQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlVHlwZQIAAAAOU3lzdGVtLlZlcnNpb24Nf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXYACU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdCwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXYgCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlci5QYXJhbWV0ZXJCYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQgCAAAABgMAAAAaU2VjcmV0TWFuYWdlbWVudC5FeHRlbnNpb24F/P///ylQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlVHlwZQEAAAAHdmFsdWVfXwAIAgAAAAEAAAAJBQAAAAYGAAAAJ0V4dGVuc2lvbiBtb2R1bGUgZm9yIFNlY3JldCBNYW5hZ2VtZW50LgYHAAAAElNhc2NoYSBTcGlla2VybWFubgBAjuNVI9uICQgAAAAJCQAAAAkKAAAACQsAAAAJDAAAAAEAAAAEBQAAAA5TeXN0ZW0uVmVyc2lvbgQAAAAGX01ham9yBl9NaW5vcgZfQnVpbGQJX1JldmlzaW9uAAAAAAgICAgBAAAAAAAAAAAAAAAAAAAABAgAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgJDQAAAAIAAAAAAAAAAQkAAAAIAAAACQ4AAAAFAAAABQAAAAQKAAAAgAJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dBAAAAAdWZXJzaW9uCENvbXBhcmVyCEhhc2hTaXplDUtleVZhbHVlUGFpcnMAAwADCBZTeXN0ZW0uT3JkaW5hbENvbXBhcmVyCIQCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dW10MAAAACQ8AAAARAAAACRAAAAAECwAAAIgCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlci5QYXJhbWV0ZXJCYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dAwAAAAdWZXJzaW9uCENvbXBhcmVyCEhhc2hTaXplAAMACBZTeXN0ZW0uT3JkaW5hbENvbXBhcmVyCAAAAAAJDwAAAAAAAAAEDAAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkSAAAAAQAAAAEAAAARDQAAAAIAAAAGEwAAAAZtb2R1bGUGFAAAAAtwc2ZyYW1ld29yaxEOAAAACAAAAAYVAAAABG5hbWUGFgAAAA5mdW5jdGlvblByZWZpeAYXAAAABmF1dGhvcgYYAAAAB2NvbXBhbnkGGQAAAAtkZXNjcmlwdGlvbg0DBA8AAAAWU3lzdGVtLk9yZGluYWxDb21wYXJlcgEAAAALX2lnbm9yZUNhc2UAAQEHEAAAAAABAAAADAAAAAOCAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdCwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQTm////ggJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0CAAAAA2tleQV2YWx1ZQEELFBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0AgAAAAYbAAAAC3BzZnJhbWV3b3JrCRwAAAAB4////+b///8GHgAAAApwc2Z2ZXJzaW9uCR8AAAAB4P///+b///8GIQAAABRkeW5hbWljc2NyaXB0Xzg0NDExMgkiAAAAAd3////m////BiQAAAAEeWVhcgklAAAAAdr////m////BicAAAAUZHluYW1pY3NjcmlwdF8zOTQ0MzIJKAAAAAHX////5v///wYqAAAADHBlc3RlcmNvbmZpZwkrAAAAAdT////m////Bi0AAAAKdGVzdGZvbGRlcgkuAAAAAdH////m////BjAAAAAXc2VjcmV0TWFuYWdlbWVudFZlcnNpb24JMQAAAAHO////5v///wYzAAAADmd1aWRSb290TW9kdWxlCTQAAAABy////+b///8GNgAAAA1ndWlkRXh0ZW5zaW9uCTcAAAAByP///+b///8GOQAAAARkYXRlCToAAAABxf///+b///8GPAAAAARndWlkCT0AAAAHEgAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAk+AAAADQMMPwAAAGJTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLCBWZXJzaW9uPTcuMi4xMC41MDAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQUcAAAALFBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0AgAAAAROYW1lC1NjcmlwdEJsb2NrAQQ7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXI/AAAAAgAAAAkbAAAACUEAAAABHwAAABwAAAAJHgAAAAlDAAAAASIAAAAcAAAACSEAAAAJRQAAAAElAAAAHAAAAAkkAAAACUcAAAABKAAAABwAAAAJJwAAAAlJAAAAASsAAAAcAAAACSoAAAAJSwAAAAEuAAAAHAAAAAktAAAACU0AAAABMQAAABwAAAAJMAAAAAlPAAAAATQAAAAcAAAACTMAAAAJUQAAAAE3AAAAHAAAAAk2AAAACVMAAAABOgAAABwAAAAJOQAAAAlVAAAAAT0AAAAcAAAACTwAAAAJVwAAAAU+AAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJWAAAAAZZAAAAGVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74GWgAAABovU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvgZbAAAAAsO+CVwAAAAJXQAAAAVBAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AT8AAAAGXgAAADIKCQkJKEdldC1Nb2R1bGUgUFNGcmFtZXdvcmspLlZlcnNpb24uVG9TdHJpbmcoKQoJCQFDAAAAQQAAAAZfAAAAMgoJCQkoR2V0LU1vZHVsZSBQU0ZyYW1ld29yaykuVmVyc2lvbi5Ub1N0cmluZygpCgkJAUUAAABBAAAABmAAAAAkCgkJIEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQnCgkJAUcAAABBAAAABmEAAAAeCgkJCUdldC1EYXRlIC1Gb3JtYXQgInl5eXkiCgkJAUkAAABBAAAABmIAAAAkCgkJIEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQnCgkJAUsAAABBAAAABmMAAAAECgoJCQFNAAAAQQAAAAZkAAAABAoKCQkBTwAAAEEAAAAGZQAAAJMBCgkJCShHZXQtTW9kdWxlIE1pY3Jvc29mdC5Qb3dlcnNoZWxsLlNlY3JldE1hbmFnZW1lbnQgLUxpc3RBdmFpbGFibGUgfCBTb3J0LU9iamVjdCAtUHJvcGVydHkgVmVyc2lvbiB8IFNlbGVjdC1PYmplY3QgLWxhc3QgMSkuVmVyc2lvbi5Ub1N0cmluZygpCgkJAVEAAABBAAAABmYAAAAqCgkJCVtTeXN0ZW0uR3VpZF06Ok5ld0d1aWQoKS5Ub1N0cmluZygpCgkJAVMAAABBAAAABmcAAAAqCgkJCVtTeXN0ZW0uR3VpZF06Ok5ld0d1aWQoKS5Ub1N0cmluZygpCgkJAVUAAABBAAAABmgAAAAkCgkJCUdldC1EYXRlIC1Gb3JtYXQgInl5eXktTU0tZGQiCgkJAVcAAABBAAAABmkAAAAqCgkJCVtTeXN0ZW0uR3VpZF06Ok5ld0d1aWQoKS5Ub1N0cmluZygpCgkJAVgAAAAMAAAACWoAAAAFAAAABQAAAAFcAAAACAAAAAlrAAAAAQAAAAEAAAABXQAAAAgAAAAJbAAAAAAAAAAAAAAAB2oAAAAAAQAAAAgAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJbQAAAAluAAAACW8AAAAJcAAAAAlxAAAADQMRawAAAAQAAAAGcgAAAARuYW1lDQMRbAAAAAAAAAABbQAAAD4AAAAJcwAAAAZ0AAAABWJ1aWxkBnUAAAAgL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vYnVpbGQJWwAAAAl3AAAACXgAAAABbgAAAD4AAAAJeQAAAAZ6AAAAGVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74GewAAADQvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+CVsAAAAJfQAAAAl+AAAAAW8AAAA+AAAACX8AAAAGgAAAAAR0ZXN0BoEAAAAfL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdAlbAAAACYMAAAAJhAAAAAVwAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAaFAAAAsAhNSVQgTGljZW5zZQoKQ29weXJpZ2h0IChjKSDDviF5ZWFyIcO+IMO+YXV0aG9yw74KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuAQmGAAAACYcAAAAGiAAAAAdMSUNFTlNFBokAAAAiL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vTElDRU5TRQlbAAAACYsAAAAJjAAAAAFxAAAAcAAAAAaNAAAA4wkjIERlc2NyaXB0aW9uCgpJbnNlcnQgYSB1c2VmdWwgZGVzY3JpcHRpb24gZm9yIHRoZSDDvm5hbWXDviBwcm9qZWN0IGhlcmUuCgpSZW1lbWJlciwgaXQncyB0aGUgZmlyc3QgdGhpbmcgYSB2aXNpdG9yIHdpbGwgc2VlLgoKIyBQcm9qZWN0IFNldHVwIEluc3RydWN0aW9ucwojIyBXb3JraW5nIHdpdGggdGhlIGxheW91dAoKLSBEb24ndCB0b3VjaCB0aGUgcHNtMSBmaWxlCi0gUGxhY2UgZnVuY3Rpb25zIHlvdSBleHBvcnQgaW4gYGZ1bmN0aW9ucy9gIChjYW4gaGF2ZSBzdWJmb2xkZXJzKQotIFBsYWNlIHByaXZhdGUvaW50ZXJuYWwgZnVuY3Rpb25zIGludmlzaWJsZSB0byB0aGUgdXNlciBpbiBgaW50ZXJuYWwvZnVuY3Rpb25zYCAoY2FuIGhhdmUgc3ViZm9sZGVycykKLSBEb24ndCBhZGQgY29kZSBkaXJlY3RseSB0byB0aGUgYHBvc3RpbXBvcnQucHMxYCBvciBgcHJlaW1wb3J0LnBzMWAuCiAgVGhvc2UgZmlsZXMgYXJlIGRlc2lnbmVkIHRvIGltcG9ydCBvdGhlciBmaWxlcyBvbmx5LgotIFdoZW4gYWRkaW5nIGZpbGVzICYgZm9sZGVycywgbWFrZSBzdXJlIHRoZXkgYXJlIGNvdmVyZWQgYnkgZWl0aGVyIGBwb3N0aW1wb3J0LnBzMWAgb3IgYHByZWltcG9ydC5wczFgLgogIFRoaXMgYWRkcyB0aGVtIHRvIGJvdGggdGhlIGltcG9ydCBhbmQgdGhlIGJ1aWxkIHNlcXVlbmNlLgoKIyMgU2V0dGluZyB1cCBDSS9DRAoKPiBUbyBjcmVhdGUgYSBQUiB2YWxpZGF0aW9uIHBpcGVsaW5lLCBzZXQgdXAgdGFza3MgbGlrZSB0aGlzOgoKLSBJbnN0YWxsIFByZXJlcXVpc2l0ZXMgKFBvd2VyU2hlbGwgVGFzazsgVlNUUy1QcmVyZXF1aXNpdGVzLnBzMSkKLSBWYWxpZGF0ZSAoUG93ZXJTaGVsbCBUYXNrOyBWU1RTLVZhbGlkYXRlLnBzMSkKLSBQdWJsaXNoIFRlc3QgUmVzdWx0cyAoUHVibGlzaCBUZXN0IFJlc3VsdHM7IE5Vbml0IGZvcm1hdDsgUnVuIG5vIG1hdHRlciB3aGF0KQoKPiBUbyBjcmVhdGUgYSBidWlsZC9wdWJsaXNoIHBpcGVsaW5lLCBzZXQgdXAgdGFza3MgbGlrZSB0aGlzOgoKLSBJbnN0YWxsIFByZXJlcXVpc2l0ZXMgKFBvd2VyU2hlbGwgVGFzazsgVlNUUy1QcmVyZXF1aXNpdGVzLnBzMSkKLSBWYWxpZGF0ZSAoUG93ZXJTaGVsbCBUYXNrOyBWU1RTLVZhbGlkYXRlLnBzMSkKLSBCdWlsZCAoUG93ZXJTaGVsbCBUYXNrOyBWU1RTLUJ1aWxkLnBzMSkKLSBQdWJsaXNoIFRlc3QgUmVzdWx0cyAoUHVibGlzaCBUZXN0IFJlc3VsdHM7IE5Vbml0IGZvcm1hdDsgUnVuIG5vIG1hdHRlciB3aGF0KQoBCY4AAAAJjwAAAAaQAAAACVJFQURNRS5tZAaRAAAAJC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1JFQURNRS5tZAlbAAAACZMAAAAJlAAAAAFzAAAADAAAAAmVAAAABgAAAAYAAAABdwAAAAgAAAAJbAAAAAAAAAAAAAAAAXgAAAAIAAAACWwAAAAAAAAAAAAAAAF5AAAADAAAAAmXAAAACwAAAAsAAAABfQAAAAgAAAAJmAAAAAEAAAABAAAAAX4AAAAIAAAACWwAAAAAAAAAAAAAAAF/AAAADAAAAAmaAAAAAQAAAAEAAAABgwAAAAgAAAAJbAAAAAAAAAAAAAAAAYQAAAAIAAAACWwAAAAAAAAAAAAAAAGGAAAACAAAAAmcAAAAAQAAAAEAAAABhwAAAAgAAAAJnQAAAAEAAAABAAAAAYsAAAAIAAAACWwAAAAAAAAAAAAAAAGMAAAACAAAAAlsAAAAAAAAAAAAAAABjgAAAAgAAAAJnwAAAAEAAAABAAAAAY8AAAAIAAAACWwAAAAAAAAAAAAAAAGTAAAACAAAAAlsAAAAAAAAAAAAAAABlAAAAAgAAAAJbAAAAAAAAAAAAAAAB5UAAAAAAQAAAAgAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJoQAAAAmiAAAACaMAAAAJpAAAAAmlAAAACaYAAAANAgeXAAAAAAEAAAAQAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACacAAAAJqAAAAAmpAAAACaoAAAAJqwAAAAmsAAAACa0AAAAJrgAAAAmvAAAACbAAAAAJsQAAAA0FEZgAAAAEAAAABrIAAAAEbmFtZQ0DB5oAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJswAAAA0DEZwAAAAEAAAABrQAAAAGYXV0aG9yDQMRnQAAAAQAAAAGtQAAAAR5ZWFyDQMRnwAAAAQAAAAGtgAAAARuYW1lDQMBoQAAAHAAAAAGtwAAAIYHIyBTZXR0aW5nIHVwIHRoZSByZWxlYXNlIHBpcGVsaW5lOgoKIyMgUHJlbGltaW5hcnkKClNldHRpbmcgdXAgYSByZWxlYXNlIHBpcGVsaW5lLCBzZXQgdGhlIHRyaWdnZXIgdG8gZG8gY29udGludW91cyBpbnRlZ3JhdGlvbiBhZ2FpbnN0IHRoZSBtYXN0ZXIgYnJhbmNoIG9ubHkuCkluIFN0YWdlIDEgc2V0IHVwIGEgdGFza3NlcXVlbmNlOgoKIyMgMSkgUG93ZXJTaGVsbCBUYXNrOiBQcmVyZXF1aXNpdGVzCgpIYXZlIGl0IGV4ZWN1dGUgYHZzdHMtcHJlcmVxdWlzaXRlcy5wczFgCgojIyAyKSBQb3dlclNoZWxsIFRhc2s6IFZhbGlkYXRlCgpIYXZlIGl0IGV4ZWN1dGUgYHZzdHMtcHJlcmVxdWlzaXRlcy5wczFgCgojIyAzKSBQb3dlclNoZWxsIFRhc2s6IEJ1aWxkCgpIYXZlIGl0IGV4ZWN1dGUgYHZzdHMtYnVpbGQucHMxYC4KVGhlIHRhc2sgcmVxdWlyZXMgdHdvIHBhcmFtZXRlcnM6CgogLSBgLUxvY2FsUmVwb2AKIC0gYC1Xb3JraW5nRGlyZWN0b3J5ICQoU3lzdGVtLkRlZmF1bHRXb3JraW5nRGlyZWN0b3J5KS9f77+9bmFtZe+/vWAKCiMjIDQpIFB1Ymxpc2ggVGVzdCBSZXN1bHRzCgpDb25maWd1cmUgdGFzayB0byBwaWNrIHVwIG51bml0IHR5cGUgb2YgdGVzdHMgKHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IGp1bml0KS4KQ29uZmlndXJlIHRhc2sgdG8gZXhlY3V0ZSwgZXZlbiBpZiBwcmV2aW91cyBzdGVwcyBmYWlsZWQgb3IgdGhlIHRhc2sgc2VxdWVuY2Ugd2FzIGNhbmNlbGxlZC4KCiMjIDUpIFBvd2VyU2hlbGwgVGFzazogUGFja2FnZSBGdW5jdGlvbgoKSGF2ZSBpdCBleGVjdXRlIGB2c3RzLXBhY2thZ2VGdW5jdGlvbi5wczFgCgojIyA2KSBBenVyZSBGdW5jdGlvbiBBcHBEZXBsb3kKCkNvbmZpZ3VyZSB0byBwdWJsaXNoIHRvIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIGFwcC4BCbgAAAAJuQAAAAa6AAAAF0F6dXJlRnVuY3Rpb24ucmVhZG1lLm1kBrsAAAA4L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vYnVpbGQvQXp1cmVGdW5jdGlvbi5yZWFkbWUubWQJWwAAAAm9AAAACb4AAAABogAAAHAAAAAGvwAAAMUmPCMKVGhpcyBzY3JpcHQgcHVibGlzaGVzIHRoZSBtb2R1bGUgdG8gdGhlIGdhbGxlcnkuCkl0IGV4cGVjdHMgYXMgaW5wdXQgYW4gQXBpS2V5IGF1dGhvcml6ZWQgdG8gcHVibGlzaCB0aGUgbW9kdWxlLgoKSW5zZXJ0IGFueSBidWlsZCBzdGVwcyB5b3UgbWF5IG5lZWQgdG8gdGFrZSBiZWZvcmUgcHVibGlzaGluZyBpdCBoZXJlLgojPgpwYXJhbSAoCgkkQXBpS2V5LAoKCSRXb3JraW5nRGlyZWN0b3J5LAoKCSRSZXBvc2l0b3J5ID0gJ1BTR2FsbGVyeScsCgoJW3N3aXRjaF0KCSRMb2NhbFJlcG8sCgoJW3N3aXRjaF0KCSRTa2lwUHVibGlzaCwKCglbc3dpdGNoXQoJJEF1dG9WZXJzaW9uCikKCiNyZWdpb24gSGFuZGxlIFdvcmtpbmcgRGlyZWN0b3J5IERlZmF1bHRzCmlmICgtbm90ICRXb3JraW5nRGlyZWN0b3J5KQp7CglpZiAoJGVudjpSRUxFQVNFX1BSSU1BUllBUlRJRkFDVFNPVVJDRUFMSUFTKQoJewoJCSRXb3JraW5nRGlyZWN0b3J5ID0gSm9pbi1QYXRoIC1QYXRoICRlbnY6U1lTVEVNX0RFRkFVTFRXT1JLSU5HRElSRUNUT1JZIC1DaGlsZFBhdGggJGVudjpSRUxFQVNFX1BSSU1BUllBUlRJRkFDVFNPVVJDRUFMSUFTCgl9CgllbHNlIHsgJFdvcmtpbmdEaXJlY3RvcnkgPSAkZW52OlNZU1RFTV9ERUZBVUxUV09SS0lOR0RJUkVDVE9SWSB9Cn0KaWYgKC1ub3QgJFdvcmtpbmdEaXJlY3RvcnkpIHsgJFdvcmtpbmdEaXJlY3RvcnkgPSBTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QgfQojZW5kcmVnaW9uIEhhbmRsZSBXb3JraW5nIERpcmVjdG9yeSBEZWZhdWx0cwoKIyBQcmVwYXJlIHB1Ymxpc2ggZm9sZGVyCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiQ3JlYXRpbmcgYW5kIHBvcHVsYXRpbmcgcHVibGlzaGluZyBkaXJlY3RvcnkiCiRwdWJsaXNoRGlyID0gTmV3LUl0ZW0gLVBhdGggJFdvcmtpbmdEaXJlY3RvcnkgLU5hbWUgcHVibGlzaCAtSXRlbVR5cGUgRGlyZWN0b3J5IC1Gb3JjZQpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74iIC1EZXN0aW5hdGlvbiAkcHVibGlzaERpci5GdWxsTmFtZSAtUmVjdXJzZSAtRm9yY2UKCiNyZWdpb24gR2F0aGVyIHRleHQgZGF0YSB0byBjb21waWxlCiR0ZXh0ID0gQCgpCiRwcm9jZXNzZWQgPSBAKCkKCiMgR2F0aGVyIFN0dWZmIHRvIHJ1biBiZWZvcmUKZm9yZWFjaCAoJGZpbGVQYXRoIGluICgmICIkKCRQU1NjcmlwdFJvb3QpXC4uXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcc2NyaXB0c1xwcmVpbXBvcnQucHMxIikpCnsKCWlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRmaWxlUGF0aCkpIHsgY29udGludWUgfQoKCSRpdGVtID0gR2V0LUl0ZW0gJGZpbGVQYXRoCglpZiAoJGl0ZW0uUFNJc0NvbnRhaW5lcikgeyBjb250aW51ZSB9CglpZiAoJGl0ZW0uRnVsbE5hbWUgLWluICRwcm9jZXNzZWQpIHsgY29udGludWUgfQoJJHRleHQgKz0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJGl0ZW0uRnVsbE5hbWUpCgkkcHJvY2Vzc2VkICs9ICRpdGVtLkZ1bGxOYW1lCn0KCiMgR2F0aGVyIGNvbW1hbmRzCkdldC1DaGlsZEl0ZW0gLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcZnVuY3Rpb25zXCIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiIHwgRm9yRWFjaC1PYmplY3QgewoJJHRleHQgKz0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJF8uRnVsbE5hbWUpCn0KR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnMuc2hhcmVkaW50ZXJuYWxcIiAtUmVjdXJzZSAtRmlsZSAtRmlsdGVyICIqLnBzMSIgfCBGb3JFYWNoLU9iamVjdCB7CgkkdGV4dCArPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkXy5GdWxsTmFtZSkKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFZlcmJvc2UgLU1lc3NhZ2UgIiAjMyBJbXBvcnRpbmcgY29udGVudCBmcm9tICQoJF8uRnVsbE5hbWUpIgp9CkdldC1DaGlsZEl0ZW0gLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cZnVuY3Rpb25zXCIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiIHwgRm9yRWFjaC1PYmplY3QgewoJJHRleHQgKz0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJF8uRnVsbE5hbWUpCn0KCiMgR2F0aGVyIHN0dWZmIHRvIHJ1biBhZnRlcndhcmRzCmZvcmVhY2ggKCRmaWxlUGF0aCBpbiAoJiAiJCgkUFNTY3JpcHRSb290KVwuLlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEiKSkKewoJaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJGZpbGVQYXRoKSkgeyBjb250aW51ZSB9CgoJJGl0ZW0gPSBHZXQtSXRlbSAkZmlsZVBhdGgKCWlmICgkaXRlbS5QU0lzQ29udGFpbmVyKSB7IGNvbnRpbnVlIH0KCWlmICgkaXRlbS5GdWxsTmFtZSAtaW4gJHByb2Nlc3NlZCkgeyBjb250aW51ZSB9CgkkdGV4dCArPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkaXRlbS5GdWxsTmFtZSkKCSRwcm9jZXNzZWQgKz0gJGl0ZW0uRnVsbE5hbWUKfQojZW5kcmVnaW9uIEdhdGhlciB0ZXh0IGRhdGEgdG8gY29tcGlsZQoKI3JlZ2lvbiBVcGRhdGUgdGhlIHBzbTEgZmlsZQokZmlsZURhdGEgPSBHZXQtQ29udGVudCAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzbTEiIC1SYXcKJGZpbGVEYXRhID0gJGZpbGVEYXRhLlJlcGxhY2UoJyI8d2FzIG5vdCBjb21waWxlZD4iJywgJyI8d2FzIGNvbXBpbGVkPiInKQokZmlsZURhdGEgPSAkZmlsZURhdGEuUmVwbGFjZSgnIjxjb21waWxlIGNvZGUgaW50byBoZXJlPiInLCAoJHRleHQgLWpvaW4gImBuYG4iKSkKW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxUZXh0KCIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNtMSIsICRmaWxlRGF0YSwgW1N5c3RlbS5UZXh0LkVuY29kaW5nXTo6VVRGOCkKI2VuZHJlZ2lvbiBVcGRhdGUgdGhlIHBzbTEgZmlsZQoKI3JlZ2lvbiBVcGRhdGluZyB0aGUgTW9kdWxlIFZlcnNpb24KaWYgKCRBdXRvVmVyc2lvbikKewoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJVcGRhdGluZyBtb2R1bGUgdmVyc2lvbiBudW1iZXJzLiIKCXRyeSB7IFt2ZXJzaW9uXSRyZW1vdGVWZXJzaW9uID0gKEZpbmQtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtUmVwb3NpdG9yeSAkUmVwb3NpdG9yeSAtRXJyb3JBY3Rpb24gU3RvcCkuVmVyc2lvbiB9CgljYXRjaAoJewoJCVN0b3AtUFNGRnVuY3Rpb24gLU1lc3NhZ2UgIkZhaWxlZCB0byBhY2Nlc3MgJCgkUmVwb3NpdG9yeSkiIC1FbmFibGVFeGNlcHRpb24gJHRydWUgLUVycm9yUmVjb3JkICRfCgl9CglpZiAoLW5vdCAkcmVtb3RlVmVyc2lvbikKCXsKCQlTdG9wLVBTRkZ1bmN0aW9uIC1NZXNzYWdlICJDb3VsZG4ndCBmaW5kIMO+bmFtZcO+IG9uIHJlcG9zaXRvcnkgJCgkUmVwb3NpdG9yeSkiIC1FbmFibGVFeGNlcHRpb24gJHRydWUKCX0KCSRuZXdCdWlsZE51bWJlciA9ICRyZW1vdGVWZXJzaW9uLkJ1aWxkICsgMQoJW3ZlcnNpb25dJGxvY2FsVmVyc2lvbiA9IChJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSIpLk1vZHVsZVZlcnNpb24KCVVwZGF0ZS1Nb2R1bGVNYW5pZmVzdCAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEiIC1Nb2R1bGVWZXJzaW9uICIkKCRsb2NhbFZlcnNpb24uTWFqb3IpLiQoJGxvY2FsVmVyc2lvbi5NaW5vcikuJCgkbmV3QnVpbGROdW1iZXIpIgp9CiNlbmRyZWdpb24gVXBkYXRpbmcgdGhlIE1vZHVsZSBWZXJzaW9uCgojcmVnaW9uIFB1Ymxpc2gKaWYgKCRTa2lwUHVibGlzaCkgeyByZXR1cm4gfQppZiAoJExvY2FsUmVwbykKewoJIyBEZXBlbmRlbmNpZXMgbXVzdCBnbyBmaXJzdAoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJDcmVhdGluZyBOdWdldCBQYWNrYWdlIGZvciBtb2R1bGU6IFBTRnJhbWV3b3JrIgoJTmV3LVBTTURNb2R1bGVOdWdldFBhY2thZ2UgLU1vZHVsZVBhdGggKEdldC1Nb2R1bGUgLU5hbWUgUFNGcmFtZXdvcmspLk1vZHVsZUJhc2UgLVBhY2thZ2VQYXRoIC4KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiQ3JlYXRpbmcgTnVnZXQgUGFja2FnZSBmb3IgbW9kdWxlOiDDvm5hbWXDviIKCU5ldy1QU01ETW9kdWxlTnVnZXRQYWNrYWdlIC1Nb2R1bGVQYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+IiAtUGFja2FnZVBhdGggLgp9CmVsc2UKewoJIyBQdWJsaXNoIHRvIEdhbGxlcnkKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHVibGlzaGluZyB0aGUgw75uYW1lw74gbW9kdWxlIHRvICQoJFJlcG9zaXRvcnkpIgoJUHVibGlzaC1Nb2R1bGUgLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74iIC1OdUdldEFwaUtleSAkQXBpS2V5IC1Gb3JjZSAtUmVwb3NpdG9yeSAkUmVwb3NpdG9yeQp9CiNlbmRyZWdpb24gUHVibGlzaAEJwAAAAAnBAAAABsIAAAAOdnN0cy1idWlsZC5wczEGwwAAAC8vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9idWlsZC92c3RzLWJ1aWxkLnBzMQlbAAAACcUAAAAJxgAAAAGjAAAAcAAAAAbHAAAA/z8KPCMKCS5TWU5PUFNJUwoJCUJ1aWxkIHNjcmlwdCB0aGF0IGdlbmVyYXRlcyBhIGNsaWVudCBtb2R1bGUgZm9yIFJFU1QgQVBJIGVuZHBvaW50cyBvZiBhIEF6dXJlIFBvd2VyU2hlbGwgRnVuY3Rpb25zIHByb2plY3QuCgoJLkRFU0NSSVBUSU9OCgkJQnVpbGQgc2NyaXB0IHRoYXQgZ2VuZXJhdGVzIGEgY2xpZW50IG1vZHVsZSBmb3IgUkVTVCBBUEkgZW5kcG9pbnRzIG9mIGEgQXp1cmUgUG93ZXJTaGVsbCBGdW5jdGlvbnMgcHJvamVjdC4KCgkuUEFSQU1FVEVSIEFwaUtleQoJCVRoZSBBUEkga2V5IHRvIHVzZSB0byBwdWJsaXNoIHRoZSBtb2R1bGUgdG8gYSBOdWdldCBSZXBvc2l0b3J5CgoJLlBBUkFNRVRFUiBXb3JraW5nRGlyZWN0b3J5CgkJVGhlIHJvb3QgZm9sZGVyIGZyb20gd2hpY2ggdG8gYnVpbGQgdGhlIG1vZHVsZS4KCgkuUEFSQU1FVEVSIFJlcG9zaXRvcnkKCQlUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeSB0byBwdWJsaXNoIHRvLgoJCURlZmF1bHRzIHRvIFBTR2FsbGVyeS4KCgkuUEFSQU1FVEVSIExvY2FsUmVwbwoJCUluc3RlYWQgb2YgcHVibGlzaGluZyB0byBhIGdhbGxlcnksIGRyb3AgYSBudWdldCBwYWNrYWdlIGluIHRoZSByb290IGZvbGRlci4KCQlUaGlzIHBhY2thZ2UgY2FuIHRoZW4gYmUgcGlja2VkIHVwIGluIGEgbGF0ZXIgc3RlcCBmb3IgcHVibGlzaGluZyB0byBBenVyZSBBcnRpZmFjdHMuCgoJLlBBUkFNRVRFUiBNb2R1bGVOYW1lCgkJVGhlIG5hbWUgdG8gZ2l2ZSB0byB0aGUgY2xpZW50IG1vZHVsZS4KCQlCeSBkZWZhdWx0LCB0aGUgY2xpZW50IG1vZHVsZSB3aWxsIGJlIG5hbWVkICc8TW9kdWxlTmFtZT4uQ2xpZW50Jy4KCgkuUEFSQU1FVEVSIEluY2x1ZGVGb3JtYXQKCQlJbmNsdWRlIHRoZSBmb3JtYXQgeG1sIG9mIHRoZSBzb3VyY2UgbW9kdWxlIGZvciB0aGUgY2xpZW50IG1vZHVsZS4KCgkuUEFSQU1FVEVSIEluY2x1ZGVUeXBlCgkJSW5jbHVkZSB0aGUgdHlwZSBleHRlbnNpb24geG1sIG9mIHRoZSBzb3VyY2UgbW9kdWxlIGZvciB0aGUgY2xpZW50IG1vZHVsZS4KCgkuUEFSQU1FVEVSIEluY2x1ZGVBc3NlbWJseQoJCUluY2x1ZGUgdGhlIGJpbmFyaWVzIG9mIHRoZSBzb3VyY2UgbW9kdWxlIGZvciB0aGUgY2xpZW50IG1vZHVsZS4KIz4KcGFyYW0gKAoJJEFwaUtleSwKCgkkV29ya2luZ0RpcmVjdG9yeSwKCgkkUmVwb3NpdG9yeSA9ICdQU0dhbGxlcnknLAoKCVtzd2l0Y2hdCgkkTG9jYWxSZXBvLAoKCSRNb2R1bGVOYW1lLAoKCVtzd2l0Y2hdCgkkSW5jbHVkZUZvcm1hdCwKCglbc3dpdGNoXQoJJEluY2x1ZGVUeXBlLAoKCVtzd2l0Y2hdCgkkSW5jbHVkZUFzc2VtYmx5CikKCiNyZWdpb24gSGFuZGxlIFdvcmtpbmcgRGlyZWN0b3J5IERlZmF1bHRzCmlmICgtbm90ICRXb3JraW5nRGlyZWN0b3J5KQp7CglpZiAoJGVudjpSRUxFQVNFX1BSSU1BUllBUlRJRkFDVFNPVVJDRUFMSUFTKQoJewoJCSRXb3JraW5nRGlyZWN0b3J5ID0gSm9pbi1QYXRoIC1QYXRoICRlbnY6U1lTVEVNX0RFRkFVTFRXT1JLSU5HRElSRUNUT1JZIC1DaGlsZFBhdGggJGVudjpSRUxFQVNFX1BSSU1BUllBUlRJRkFDVFNPVVJDRUFMSUFTCgl9CgllbHNlIHsgJFdvcmtpbmdEaXJlY3RvcnkgPSAkZW52OlNZU1RFTV9ERUZBVUxUV09SS0lOR0RJUkVDVE9SWSB9Cn0KI2VuZHJlZ2lvbiBIYW5kbGUgV29ya2luZyBEaXJlY3RvcnkgRGVmYXVsdHMKCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgJ1N0YXJ0aW5nIEJ1aWxkOiBDbGllbnQgTW9kdWxlJwokcGFyZW50TW9kdWxlID0gJ8O+bmFtZcO+JwppZiAoLW5vdCAkTW9kdWxlTmFtZSkgeyAkTW9kdWxlTmFtZSA9ICfDvm5hbWXDvi5DbGllbnQnIH0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAnQ3JlYXRpbmcgRm9sZGVyIFN0cnVjdHVyZScKJHdvcmtpbmdSb290ID0gTmV3LUl0ZW0gLVBhdGggJFdvcmtpbmdEaXJlY3RvcnkgLU5hbWUgJE1vZHVsZU5hbWUgLUl0ZW1UeXBlIERpcmVjdG9yeQokcHVibGlzaFJvb3QgPSBKb2luLVBhdGggLVBhdGggJFdvcmtpbmdEaXJlY3RvcnkgLUNoaWxkUGF0aCAncHVibGlzaFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JwpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcY2xpZW50TW9kdWxlXGZ1bmN0aW9ucyIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcIiAtUmVjdXJzZQpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcY2xpZW50TW9kdWxlXGludGVybmFsIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVwiIC1SZWN1cnNlCkNvcHktSXRlbSAtUGF0aCAiJCgkcHVibGlzaFJvb3QpXGVuLXVzIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVwiIC1SZWN1cnNlCiRmdW5jdGlvbkZvbGRlciA9IEdldC1JdGVtIC1QYXRoICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcZnVuY3Rpb25zIgoKI3JlZ2lvbiBDcmVhdGUgRnVuY3Rpb25zCiRlbmNvZGluZyA9IFtQU0ZFbmNvZGluZ10ndXRmOCcKJGZ1bmN0aW9uc1RleHQgPSBHZXQtQ29udGVudCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xjbGllbnRNb2R1bGVcZnVuY3Rpb24ucHMxIiAtUmF3CgpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICdDcmVhdGluZyBGdW5jdGlvbnMnCmZvcmVhY2ggKCRmdW5jdGlvblNvdXJjZUZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gLVBhdGggIiQoJHB1Ymxpc2hSb290KVxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWx0ZXIgJyoucHMxJykpCnsKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIiAgUHJvY2Vzc2luZyBmdW5jdGlvbjogJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKSIKCSRjb25kZW5zZWROYW1lID0gJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSAtcmVwbGFjZSAnLScsICcnCgoJI3JlZ2lvbiBMb2FkIE92ZXJyaWRlcwoJJG92ZXJyaWRlID0gQHsgfQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHNkMSIpCgl7CgkJJG92ZXJyaWRlID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHNkMSIKCX0KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5wc2QxIikKCXsKCQkkb3ZlcnJpZGUgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkY29uZGVuc2VkTmFtZSkucHNkMSIKCX0KCWlmICgkb3ZlcnJpZGUuTm9DbGllbnRGdW5jdGlvbikKCXsKCQlXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICIgICAgT3ZlcnJpZGUgJ05vQ2xpZW50RnVuY3Rpb24nIGRldGVjdGVkLCBza2lwcGluZyEiCgkJY29udGludWUKCX0KCgkjIElmIHRoZXJlIGlzIGFuIGRlZmluaXRpb24gb3ZlcnJpZGUsIHVzZSBpdCBhbmQgY29udGludWUKCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpLnBzMSIpCgl7CgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiICAgIE92ZXJyaWRlIGZ1bmN0aW9uIGRlZmluaXRpb24gZGV0ZWN0ZWQsIHVzaW5nIG92ZXJyaWRlIgoJCUNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHMxIiAtRGVzdGluYXRpb24gJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lCgkJY29udGludWUKCX0KCgkjIEZpZ3VyZSBvdXQgdGhlIFJlc3QgTWV0aG9kIHRvIHVzZQoJJG1ldGhvZE5hbWUgPSAnUG9zdCcKCWlmICgkb3ZlcnJpZGUuUmVzdE1ldGhvZHMpCgl7CgkJJG1ldGhvZE5hbWUgPSAkb3ZlcnJpZGUuUmVzdE1ldGhvZHMgfCBXaGVyZS1PYmplY3QgeyAkXyAtbmUgJ0dldCcgfSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEKCX0KCgkjZW5kcmVnaW9uIExvYWQgT3ZlcnJpZGVzCgoJJGN1cnJlbnRGdW5jdGlvbnNUZXh0ID0gJGZ1bmN0aW9uc1RleHQgLXJlcGxhY2UgJyVmdW5jdGlvbm5hbWUlJywgJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSAtcmVwbGFjZSAnJWNvbmRlbnNlZG5hbWUlJywgJGNvbmRlbnNlZE5hbWUgLXJlcGxhY2UgJyVtZXRob2QlJywgJG1ldGhvZE5hbWUKCgkkcGFyc2VkRnVuY3Rpb24gPSBSZWFkLVBTTURTY3JpcHQgLVBhdGggJGZ1bmN0aW9uU291cmNlRmlsZS5GdWxsTmFtZQoJJGZ1bmN0aW9uQXN0ID0gJHBhcnNlZEZ1bmN0aW9uLkFzdC5FbmRCbG9jay5TdGF0ZW1lbnRzIHwgV2hlcmUtT2JqZWN0IHsKCQkkXyAtaXMgW1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uTGFuZ3VhZ2UuRnVuY3Rpb25EZWZpbml0aW9uQXN0XQoJfSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEKCgkkZW5kID0gJGZ1bmN0aW9uQXN0LkJvZHkuUGFyYW1CbG9jay5FeHRlbnQuRW5kT2ZmU2V0Cgkkc3RhcnQgPSAkZnVuY3Rpb25Bc3QuQm9keS5FeHRlbnQuU3RhcnRPZmZTZXQgKyAxCgkkY3VycmVudEZ1bmN0aW9uc1RleHQgPSAkY3VycmVudEZ1bmN0aW9uc1RleHQuUmVwbGFjZSgnJXBhcmFtZXRlciUnLCAkZnVuY3Rpb25Bc3QuQm9keS5FeHRlbnQuVGV4dC5TdWJTdHJpbmcoMSwgKCRlbmQgLSAkc3RhcnQpKSkKCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICIgICAgQ3JlYXRpbmcgZmlsZTogJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5OYW1lKSIKCVtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsVGV4dCgiJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5OYW1lKSIsICRjdXJyZW50RnVuY3Rpb25zVGV4dCwgJGVuY29kaW5nKQp9CiRmdW5jdGlvbnNUb0V4cG9ydCA9IChHZXQtQ2hpbGRJdGVtIC1QYXRoICRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSAtUmVjdXJzZSAtRmlsdGVyICoucHMxKS5CYXNlTmFtZSB8IFNvcnQtT2JqZWN0CiNlbmRyZWdpb24gQ3JlYXRlIEZ1bmN0aW9ucwoKI3JlZ2lvbiBDcmVhdGUgQ29yZSBNb2R1bGUgRmlsZXMKIyBHZXQgTWFuaWZlc3Qgb2YgcHVibGlzaGVkIHZlcnNpb24sIGluIG9yZGVyIHRvIGNhdGNoIGJ1aWxkLXBoYXNlIGNoYW5nZXMgc3VjaCBhcyBtb2R1bGUgdmVyc2lvbi4KJG9yaWdpbmFsTWFuaWZlc3REYXRhID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJHB1Ymxpc2hSb290XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSIKJHByZXJlcUhhc2ggPSBAewoJTW9kdWxlTmFtZSAgICA9ICdQU0ZyYW1ld29yaycKCU1vZHVsZVZlcnNpb24gPSAoR2V0LU1vZHVsZSBQU0ZyYW1ld29yaykuVmVyc2lvbgp9CiRwYXJhbU5ld01vZHVsZU1hbmlmZXN0ID0gQHsKCVBhdGgJCQkgID0gKCd7MH1cezF9LnBzZDEnIC1mICR3b3JraW5nUm9vdC5GdWxsTmFtZSwgJE1vZHVsZU5hbWUpCglGdW5jdGlvbnNUb0V4cG9ydCA9ICRmdW5jdGlvbnNUb0V4cG9ydAoJQ29tcGFueU5hbWUJICAgICAgPSAkb3JpZ2luYWxNYW5pZmVzdERhdGEuQ29tcGFueU5hbWUKCUF1dGhvcgkJICAgICAgPSAkb3JpZ2luYWxNYW5pZmVzdERhdGEuQXV0aG9yCglEZXNjcmlwdGlvbgkgICAgICA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5EZXNjcmlwdGlvbgoJTW9kdWxlVmVyc2lvbgkgID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLk1vZHVsZVZlcnNpb24KCVJvb3RNb2R1bGUJICAgICAgPSAoJ3swfS5wc20xJyAtZiAkTW9kdWxlTmFtZSkKCUNvcHlyaWdodAkJICA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5Db3B5cmlnaHQKCVR5cGVzVG9Qcm9jZXNzICAgID0gQCgpCglGb3JtYXRzVG9Qcm9jZXNzICA9IEAoKQoJUmVxdWlyZWRBc3NlbWJsaWVzID0gQCgpCglSZXF1aXJlZE1vZHVsZXMgICA9IEAoJHByZXJlcUhhc2gpCglDb21wYXRpYmxlUFNFZGl0aW9ucyA9ICdDb3JlJywgJ0Rlc2t0b3AnCglQb3dlclNoZWxsVmVyc2lvbiA9ICc1LjEnCn0KCmlmICgkSW5jbHVkZUFzc2VtYmx5KSB7ICRwYXJhbU5ld01vZHVsZU1hbmlmZXN0LlJlcXVpcmVkQXNzZW1ibGllcyA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5SZXF1aXJlZEFzc2VtYmxpZXMgfQppZiAoJEluY2x1ZGVGb3JtYXQpIHsgJHBhcmFtTmV3TW9kdWxlTWFuaWZlc3QuRm9ybWF0c1RvUHJvY2VzcyA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5Gb3JtYXRzVG9Qcm9jZXNzIH0KaWYgKCRJbmNsdWRlVHlwZSkgeyAkcGFyYW1OZXdNb2R1bGVNYW5pZmVzdC5UeXBlc1RvUHJvY2VzcyA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5UeXBlc1RvUHJvY2VzcyB9CldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIkNyZWF0aW5nIE1vZHVsZSBNYW5pZmVzdCBmb3IgbW9kdWxlOiAkTW9kdWxlTmFtZSIKTmV3LU1vZHVsZU1hbmlmZXN0IEBwYXJhbU5ld01vZHVsZU1hbmlmZXN0CgpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJDb3B5aW5nIGFkZGl0aW9uYWwgbW9kdWxlIGZpbGVzIgpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcY2xpZW50TW9kdWxlXG1vZHVsZXJvb3QucHNtMSIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcJCgkTW9kdWxlTmFtZSkucHNtMSIKQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxMSUNFTlNFIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVwiCiNlbmRyZWdpb24gQ3JlYXRlIENvcmUgTW9kdWxlIEZpbGVzCgojcmVnaW9uIFRyYW5zZmVyIEFkZGl0aW9uYWwgQ29udGVudAppZiAoJEluY2x1ZGVBc3NlbWJseSkKewoJQ29weS1JdGVtIC1QYXRoICIkcHVibGlzaFJvb3RcYmluIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVwiIC1SZWN1cnNlCn0KaWYgKCRJbmNsdWRlRm9ybWF0IC1vciAkSW5jbHVkZVR5cGUpCnsKCUNvcHktSXRlbSAtUGF0aCAiJHB1Ymxpc2hSb290XHhtbCIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcIiAtUmVjdXJzZQp9CiNlbmRyZWdpb24gVHJhbnNmZXIgQWRkaXRpb25hbCBDb250ZW50CgojcmVnaW9uIFB1Ymxpc2gKaWYgKCRMb2NhbFJlcG8pCnsKCSMgRGVwZW5kZW5jaWVzIG11c3QgZ28gZmlyc3QKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiQ3JlYXRpbmcgTnVnZXQgUGFja2FnZSBmb3IgbW9kdWxlOiBQU0ZyYW1ld29yayIKCU5ldy1QU01ETW9kdWxlTnVnZXRQYWNrYWdlIC1Nb2R1bGVQYXRoIChHZXQtTW9kdWxlIC1OYW1lIFBTRnJhbWV3b3JrKS5Nb2R1bGVCYXNlIC1QYWNrYWdlUGF0aCAuIC1XYXJuaW5nQWN0aW9uIFNpbGVudGx5Q29udGludWUKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiQ3JlYXRpbmcgTnVnZXQgUGFja2FnZSBmb3IgbW9kdWxlOiDDvm5hbWXDviIKCU5ldy1QU01ETW9kdWxlTnVnZXRQYWNrYWdlIC1Nb2R1bGVQYXRoICR3b3JraW5nUm9vdC5GdWxsTmFtZSAtUGFja2FnZVBhdGggLiAtRW5hYmxlRXhjZXB0aW9uCn0KZWxzZQp7CgkjIFB1Ymxpc2ggdG8gR2FsbGVyeQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJQdWJsaXNoaW5nIHRoZSDDvm5hbWXDviBtb2R1bGUgdG8gJCgkUmVwb3NpdG9yeSkiCglQdWJsaXNoLU1vZHVsZSAtUGF0aCAkd29ya2luZ1Jvb3QuRnVsbE5hbWUgLU51R2V0QXBpS2V5ICRBcGlLZXkgLUZvcmNlIC1SZXBvc2l0b3J5ICRSZXBvc2l0b3J5Cn0KI2VuZHJlZ2lvbiBQdWJsaXNoAQnIAAAACckAAAAGygAAACN2c3RzLWNyZWF0ZUZ1bmN0aW9uQ2xpZW50TW9kdWxlLnBzMQbLAAAARC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2J1aWxkL3ZzdHMtY3JlYXRlRnVuY3Rpb25DbGllbnRNb2R1bGUucHMxCVsAAAAJzQAAAAnOAAAAAaQAAABwAAAABs8AAACNKwo8IwoJLlNZTk9QU0lTCgkJUGFja2FnZXMgYW4gQXp1cmUgRnVuY3Rpb25zIHByb2plY3QsIHJlYWR5IHRvIHJlbGVhc2UuCgkKCS5ERVNDUklQVElPTgoJCVBhY2thZ2VzIGFuIEF6dXJlIEZ1bmN0aW9ucyBwcm9qZWN0LCByZWFkeSB0byByZWxlYXNlLgoJCVNob3VsZCBiZSBwYXJ0IG9mIHRoZSByZWxlYXNlIHBpcGVsaW5lLCBhZnRlciBlbnN1cmluZyB2YWxpZGF0aW9uLgoKCQlMb29rIGludG8gdGhlICdBenVyZUZ1bmN0aW9uUmVzdCcgdGVtcGxhdGUgZm9yIGdlbmVyYXRpbmcgZnVuY3Rpb25zIGZvciB0aGUgbW9kdWxlIGlmIHlvdSBkby4KCQoJLlBBUkFNRVRFUiBXb3JraW5nRGlyZWN0b3J5CgkJVGhlIHJvb3QgZm9sZGVyIHRvIHdvcmsgZnJvbS4KCQoJLlBBUkFNRVRFUiBSZXBvc2l0b3J5CgkJVGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkgdG8gdXNlIGZvciBnYXRoZXJpbmcgZGVwZW5kZW5jaWVzIGZyb20uCiM+CnBhcmFtICgKCSRXb3JraW5nRGlyZWN0b3J5ID0gIiQoJGVudjpTWVNURU1fREVGQVVMVFdPUktJTkdESVJFQ1RPUlkpXF/Dvm5hbWXDviIsCgkKCSRSZXBvc2l0b3J5ID0gJ1BTR2FsbGVyeScsCgoJW3N3aXRjaF0KCSRJbmNsdWRlQVoKKQoKJG1vZHVsZU5hbWUgPSAnw75uYW1lw74nCgojIFByZXBhcmUgUGF0aHMKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiQ3JlYXRpbmcgd29ya2luZyBmb2xkZXJzIgokbW9kdWxlUm9vdCA9IEpvaW4tUGF0aCAtUGF0aCAkV29ya2luZ0RpcmVjdG9yeSAtQ2hpbGRQYXRoICdwdWJsaXNoJwokd29ya2luZ1Jvb3QgPSBOZXctSXRlbSAtUGF0aCAkV29ya2luZ0RpcmVjdG9yeSAtTmFtZSAnd29ya2luZycgLUl0ZW1UeXBlIERpcmVjdG9yeQokbW9kdWxlc0ZvbGRlciA9IE5ldy1JdGVtIC1QYXRoICR3b3JraW5nUm9vdC5GdWxsTmFtZSAtTmFtZSBNb2R1bGVzIC1JdGVtVHlwZSBEaXJlY3RvcnkKCiMgRmlsbCBvdXQgdGhlIG1vZHVsZXMgZm9sZGVyCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIlRyYW5zZmVyaW5nIGJ1aWx0IG1vZHVsZSBkYXRhIGludG8gd29ya2luZyBkaXJlY3RvcnkiCkNvcHktSXRlbSAtUGF0aCAiJG1vZHVsZVJvb3RcJG1vZHVsZU5hbWUiIC1EZXN0aW5hdGlvbiAkbW9kdWxlc0ZvbGRlci5GdWxsTmFtZSAtUmVjdXJzZSAtRm9yY2UKZm9yZWFjaCAoJGRlcGVuZGVuY3kgaW4gKEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiRtb2R1bGVSb290XCRtb2R1bGVOYW1lXCRtb2R1bGVOYW1lLnBzZDEiKS5SZXF1aXJlZE1vZHVsZXMpCnsKCSRwYXJhbSA9IEB7CgkJUmVwb3NpdG9yeSA9ICRSZXBvc2l0b3J5CgkJTmFtZQkgICA9ICRkZXBlbmRlbmN5Lk1vZHVsZU5hbWUKCQlQYXRoCSAgID0gJG1vZHVsZXNGb2xkZXIuRnVsbE5hbWUKCX0KCWlmICgkZGVwZW5kZW5jeSAtaXMgW3N0cmluZ10pIHsgJHBhcmFtWydOYW1lJ10gPSAkZGVwZW5kZW5jeSB9CglpZiAoJGRlcGVuZGVuY3kuUmVxdWlyZWRWZXJzaW9uKQoJewoJCSRwYXJhbVsnUmVxdWlyZWRWZXJzaW9uJ10gPSAkZGVwZW5kZW5jeS5SZXF1aXJlZFZlcnNpb24KCX0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIlByZXBhcmluZyBEZXBlbmRlbmN5OiAkKCRwYXJhbVsnTmFtZSddKSIKCVNhdmUtTW9kdWxlIEBwYXJhbQp9CgojIEdlbmVyYXRlIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAnR2VuZXJhdGluZyBmdW5jdGlvbiBjb25maWd1cmF0aW9uJwokcnVuVGVtcGxhdGUgPSBHZXQtQ29udGVudCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xydW4ucHMxIiAtUmF3CmZvcmVhY2ggKCRmdW5jdGlvblNvdXJjZUZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gLVBhdGggIiQoJG1vZHVsZVJvb3QpXCRtb2R1bGVOYW1lXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbHRlciAnKi5wczEnKSkKewoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiICBQcm9jZXNzaW5nIGZ1bmN0aW9uOiAkZnVuY3Rpb25Tb3VyY2VGaWxlIgoJJGNvbmRlbnNlZE5hbWUgPSAkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lIC1yZXBsYWNlICctJywgJycKCSRmdW5jdGlvbkZvbGRlciA9IE5ldy1JdGVtIC1QYXRoICR3b3JraW5nUm9vdC5GdWxsTmFtZSAtTmFtZSAkY29uZGVuc2VkTmFtZSAtSXRlbVR5cGUgRGlyZWN0b3J5CgkKCSNyZWdpb24gTG9hZCBPdmVycmlkZXMKCSRvdmVycmlkZSA9IEB7IH0KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpLnBzZDEiKQoJewoJCSRvdmVycmlkZSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpLnBzZDEiCgl9CglpZiAoVGVzdC1QYXRoIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkY29uZGVuc2VkTmFtZSkucHNkMSIpCgl7CgkJJG92ZXJyaWRlID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGNvbmRlbnNlZE5hbWUpLnBzZDEiCgl9CgkjZW5kcmVnaW9uIExvYWQgT3ZlcnJpZGVzCgkKCSNyZWdpb24gQ3JlYXRlIEZ1bmN0aW9uIENvbmZpZ3VyYXRpb24KCSRyZXN0TWV0aG9kcyA9ICdnZXQnLCAncG9zdCcKCWlmICgkb3ZlcnJpZGUuUmVzdE1ldGhvZHMpIHsgJHJlc3RNZXRob2RzID0gJG92ZXJyaWRlLlJlc3RNZXRob2RzIH0KCQoJU2V0LUNvbnRlbnQgLVBhdGggIiQoJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lKVxmdW5jdGlvbi5qc29uIiAtVmFsdWUgQCIKewogICAgImJpbmRpbmdzIjogWwogICAgICAgIHsKICAgICAgICAiYXV0aExldmVsIjogImZ1bmN0aW9uIiwKICAgICAgICAidHlwZSI6ICJodHRwVHJpZ2dlciIsCiAgICAgICAgImRpcmVjdGlvbiI6ICJpbiIsCiAgICAgICAgIm5hbWUiOiAiUmVxdWVzdCIsCiAgICAgICAgIm1ldGhvZHMiOiBbCiAgICAgICAgICAgICIkKCRyZXN0TWV0aG9kcyAtam9pbiAiYCIsCiAgICAgICAgICAgIGAiIikiCiAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICJ0eXBlIjogImh0dHAiLAogICAgICAgICJkaXJlY3Rpb24iOiAib3V0IiwKICAgICAgICAibmFtZSI6ICJSZXNwb25zZSIKICAgICAgICB9CiAgICBdLAogICAgImRpc2FibGVkIjogZmFsc2UKfQoiQAoJI2VuZHJlZ2lvbiBDcmVhdGUgRnVuY3Rpb24gQ29uZmlndXJhdGlvbgoJCgkjcmVnaW9uIE92ZXJyaWRlIEZ1bmN0aW9uIENvbmZpZ3VyYXRpb24KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpLmpzb24iKQoJewoJCUNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkuanNvbiIgLURlc3RpbmF0aW9uICIkKCRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSlcZnVuY3Rpb24uanNvbiIgLUZvcmNlCgl9CglpZiAoVGVzdC1QYXRoIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkY29uZGVuc2VkTmFtZSkuanNvbiIpCgl7CgkJQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkY29uZGVuc2VkTmFtZSkuanNvbiIgLURlc3RpbmF0aW9uICIkKCRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSlcZnVuY3Rpb24uanNvbiIgLUZvcmNlCgl9CgkjZW5kcmVnaW9uIE92ZXJyaWRlIEZ1bmN0aW9uIENvbmZpZ3VyYXRpb24KCQoJIyBHZW5lcmF0ZSB0aGUgcnVuLnBzMSBmaWxlCgkkcnVuVGV4dCA9ICRydW5UZW1wbGF0ZSAtcmVwbGFjZSAnJWZ1bmN0aW9ubmFtZSUnLCAkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lCgkkcnVuVGV4dCB8IFNldC1Db250ZW50IC1QYXRoICIkKCRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSlccnVuLnBzMSIgLUVuY29kaW5nIFVURjgKfQoKIyBUcmFuc2ZlciBjb21tb24gZmlsZXMKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiVHJhbnNmZXJpbmcgY29yZSBmdW5jdGlvbiBkYXRhIgppZiAoJEluY2x1ZGVBWikKewoJQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGhvc3QtYXouanNvbiIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5ncm9vdC5GdWxsTmFtZSlcaG9zdC5qc29uIgoJQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXHJlcXVpcmVtZW50cy5wc2QxIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdyb290LkZ1bGxOYW1lKVwiCn0KZWxzZQp7CglDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcaG9zdC5qc29uIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdyb290LkZ1bGxOYW1lKVwiCn0KQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGxvY2FsLnNldHRpbmdzLmpzb24iIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXCIKCiMgQnVpbGQgdGhlIHByb2ZpbGUgZmlsZQokdGV4dCA9IEAoKQokdGV4dCArPSBHZXQtQ29udGVudCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xwcm9maWxlLnBzMSIgLVJhdwpmb3JlYWNoICgkZnVuY3Rpb25GaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXHByb2ZpbGVGdW5jdGlvbnMiIC1SZWN1cnNlKSkKewoJJHRleHQgKz0gR2V0LUNvbnRlbnQgLVBhdGggJGZ1bmN0aW9uRmlsZS5GdWxsTmFtZSAtUmF3Cn0KJHRleHQgLWpvaW4gImBuYG4iIHwgU2V0LUNvbnRlbnQgIiQoJHdvcmtpbmdyb290LkZ1bGxOYW1lKVxwcm9maWxlLnBzMSIKCiMgWmlwIEl0CldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIkNyZWF0aW5nIGZ1bmN0aW9uIGFyY2hpdmUgaW4gJyQoJFdvcmtpbmdEaXJlY3RvcnkpXCRtb2R1bGVOYW1lLnppcCciCkNvbXByZXNzLUFyY2hpdmUgLVBhdGggIiQoJHdvcmtpbmdyb290LkZ1bGxOYW1lKVwqIiAtRGVzdGluYXRpb25QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVwkbW9kdWxlTmFtZS56aXAiIC1Gb3JjZQEJ0AAAAAnRAAAABtIAAAAYdnN0cy1wYWNrYWdlRnVuY3Rpb24ucHMxBtMAAAA5L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vYnVpbGQvdnN0cy1wYWNrYWdlRnVuY3Rpb24ucHMxCVsAAAAJ1QAAAAnWAAAAAaUAAABwAAAABtcAAACwBnBhcmFtICgKICAgIFtzdHJpbmddCiAgICAkUmVwb3NpdG9yeSA9ICdQU0dhbGxlcnknCikKCiRtb2R1bGVzID0gQCgiUGVzdGVyIiwgIlBTRnJhbWV3b3JrIiwgIlBTTW9kdWxlRGV2ZWxvcG1lbnQiLCAiUFNTY3JpcHRBbmFseXplciIpCgojIEF1dG9tYXRpY2FsbHkgYWRkIG1pc3NpbmcgZGVwZW5kZW5jaWVzCiRkYXRhID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJFBTU2NyaXB0Um9vdFwuLlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSIKZm9yZWFjaCAoJGRlcGVuZGVuY3kgaW4gJGRhdGEuUmVxdWlyZWRNb2R1bGVzKSB7CiAgICBpZiAoJGRlcGVuZGVuY3kgLWlzIFtzdHJpbmddKSB7CiAgICAgICAgaWYgKCRtb2R1bGVzIC1jb250YWlucyAkZGVwZW5kZW5jeSkgeyBjb250aW51ZSB9CiAgICAgICAgJG1vZHVsZXMgKz0gJGRlcGVuZGVuY3kKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICgkbW9kdWxlcyAtY29udGFpbnMgJGRlcGVuZGVuY3kuTW9kdWxlTmFtZSkgeyBjb250aW51ZSB9CiAgICAgICAgJG1vZHVsZXMgKz0gJGRlcGVuZGVuY3kuTW9kdWxlTmFtZQogICAgfQp9Cgpmb3JlYWNoICgkbW9kdWxlIGluICRtb2R1bGVzKSB7CiAgICBXcml0ZS1Ib3N0ICJJbnN0YWxsaW5nICRtb2R1bGUiIC1Gb3JlZ3JvdW5kQ29sb3IgQ3lhbgogICAgSW5zdGFsbC1Nb2R1bGUgJG1vZHVsZSAtRm9yY2UgLVNraXBQdWJsaXNoZXJDaGVjayAtUmVwb3NpdG9yeSAkUmVwb3NpdG9yeQogICAgSW1wb3J0LU1vZHVsZSAkbW9kdWxlIC1Gb3JjZSAtUGFzc1RocnUKfQEJ2AAAAAnZAAAABtoAAAAWdnN0cy1wcmVyZXF1aXNpdGVzLnBzMQbbAAAANy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2J1aWxkL3ZzdHMtcHJlcmVxdWlzaXRlcy5wczEJWwAAAAndAAAACd4AAAABpgAAAHAAAAAG3wAAANUCIyBHdWlkZSBmb3IgYXZhaWxhYmxlIHZhcmlhYmxlcyBhbmQgd29ya2luZyB3aXRoIHNlY3JldHM6CiMgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdnN0cy9idWlsZC1yZWxlYXNlL2NvbmNlcHRzL2RlZmluaXRpb25zL2J1aWxkL3ZhcmlhYmxlcz90YWJzPXBvd2Vyc2hlbGwKCiMgTmVlZHMgdG8gZW5zdXJlIHRoaW5ncyBhcmUgRG9uZSBSaWdodCBhbmQgb25seSBsZWdhbCBjb21taXRzIHRvIG1hc3RlciBnZXQgYnVpbHQKCiMgUnVuIGludGVybmFsIHBlc3RlciB0ZXN0cwomICIkUFNTY3JpcHRSb290XC4uXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cdGVzdHNccGVzdGVyLnBzMSIBCeAAAAAJ4QAAAAbiAAAAEXZzdHMtdmFsaWRhdGUucHMxBuMAAAAyL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vYnVpbGQvdnN0cy12YWxpZGF0ZS5wczEJWwAAAAnlAAAACeYAAAABpwAAAD4AAAAJ5wAAAAboAAAAA2JpbgbpAAAAOC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vYmluCVsAAAAJ6wAAAAnsAAAAAagAAAA+AAAACe0AAAAG7gAAAAVlbi11cwbvAAAAOi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vZW4tdXMJWwAAAAnxAAAACfIAAAABqQAAAD4AAAAJ8wAAAAb0AAAACWZ1bmN0aW9ucwb1AAAAPi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vZnVuY3Rpb25zCVsAAAAJ9wAAAAn4AAAAAaoAAAA+AAAACfkAAAAG+gAAAAhpbnRlcm5hbAb7AAAAPS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwJWwAAAAn9AAAACf4AAAABqwAAAD4AAAAJ/wAAAAYAAQAAI1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uBgEBAABYL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbglbAAAACQMBAAAJBAEAAAGsAAAAPgAAAAkFAQAABgYBAAAFdGVzdHMGBwEAADovU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzCVsAAAAJCQEAAAkKAQAAAa0AAAA+AAAACQsBAAAGDAEAAAN4bWwGDQEAADgvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3htbAlbAAAACQ8BAAAJEAEAAAGuAAAAcAAAAAYRAQAAaiMgQ2hhbmdlbG9nCiMjIDEuMC4wICjDviFkeW5hbWljc2NyaXB0Xzg0NDExMiHDvikKIC0gTmV3OiBTb21lIFN0dWZmCiAtIFVwZDogTW9hciBTdHVmZgogLSBGaXg6IE11Y2ggU3R1ZmYBCRIBAAAJEwEAAAYUAQAADGNoYW5nZWxvZy5tZAYVAQAAQS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vY2hhbmdlbG9nLm1kCVsAAAAJFwEAAAkYAQAAAa8AAABwAAAABhkBAAD+ByMgUFNGTW9kdWxlIGd1aWRhbmNlCgpUaGlzIGlzIGEgZmluaXNoZWQgbW9kdWxlIGxheW91dCBvcHRpbWl6ZWQgZm9yIGltcGxlbWVudGluZyB0aGUgUFNGcmFtZXdvcmsuCgpJZiB5b3UgZG9uJ3QgY2FyZSB0byBkZWFsIHdpdGggdGhlIGRldGFpbHMsIHRoaXMgaXMgd2hhdCB5b3UgbmVlZCB0byBkbyB0byBnZXQgc3RhcnRlZCBzZWVpbmcgcmVzdWx0czoKCiAtIEFkZCB0aGUgZnVuY3Rpb25zIHlvdSB3YW50IHRvIHB1Ymxpc2ggdG8gYC9mdW5jdGlvbnMvYAogLSBVcGRhdGUgdGhlIGBGdW5jdGlvbnNUb0V4cG9ydGAgbm9kZSBpbiB0aGUgbW9kdWxlIG1hbmlmZXN0ICjDvm5hbWXDvi5wc2QxKS4gQWxsIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHNob3VsZCBiZSBpbiBhIGxpc3QuCiAtIEFkZCBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRoZSB1c2VyIHNob3VsZCBub3Qgc2VlIHRvIGAvaW50ZXJuYWwvZnVuY3Rpb25zL2AKIAogIyMgUGF0aCBXYXJuaW5nCiAKID4gSWYgeW91IHdhbnQgeW91ciBtb2R1bGUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIExpbnV4IGFuZCBNYWNPUywga2VlcCBpbiBtaW5kIHRoYXQgdGhvc2UgT1MgYXJlIGNhc2Ugc2Vuc2l0aXZlIGZvciBwYXRocyBhbmQgZmlsZXMuCiAKIGBJbXBvcnQtTW9kdWxlRmlsZWAgaXMgcHJlY29uZmlndXJlZCB0byByZXNvbHZlIHRoZSBwYXRoIG9mIHRoZSBmaWxlcyBzcGVjaWZpZWQsIHNvIGl0IHdpbGwgcmVsaWFibHkgY29udmVydCB3ZWlyZCBwYXRoIG5vdGF0aW9ucyB0aGUgc3lzdGVtIGNhbid0IGhhbmRsZS4KIENvbnRlbnQgaW1wb3J0ZWQgdGhyb3VnaCB0aGF0IGNvbW1hbmQgdGh1cyBuZWVkIG5vdCBtaW5kIHRoZSBwYXRoIHNlcGFyYXRvci4KIElmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB5b3VyIGNvZGUgdG9vIHdpbGwgc3Vydml2ZSBPUy1zcGVjaWZpYyBwYXRoIG5vdGF0aW9ucywgZ2V0IHVzZWQgdG8gdXNpbmcgYFJlc29sdmUtcGF0aGAgb3IgdGhlIG1vcmUgcG93ZXJmdWwgYFJlc29sdmUtUFNGUGF0aGAuAQkaAQAACRsBAAAGHAEAAAlyZWFkbWUubWQGHQEAAD4vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3JlYWRtZS5tZAlbAAAACR8BAAAJIAEAAAGwAAAAcAAAAAYhAQAAiRVAewoJIyBTY3JpcHQgbW9kdWxlIG9yIGJpbmFyeSBtb2R1bGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYW5pZmVzdAoJUm9vdE1vZHVsZSAgICAgICAgPSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc20xJwoKCSMgVmVyc2lvbiBudW1iZXIgb2YgdGhpcyBtb2R1bGUuCglNb2R1bGVWZXJzaW9uICAgICA9ICcxLjAuMCcKCgkjIElEIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBtb2R1bGUKCUdVSUQgICAgICAgICAgICAgID0gJ8O+IWd1aWRSb290TW9kdWxlIcO+JwoKCSMgQXV0aG9yIG9mIHRoaXMgbW9kdWxlCglBdXRob3IgICAgICAgICAgICA9ICfDvmF1dGhvcsO+JwoKCSMgQ29tcGFueSBvciB2ZW5kb3Igb2YgdGhpcyBtb2R1bGUKCUNvbXBhbnlOYW1lICAgICAgID0gJ8O+Y29tcGFuecO+JwoKCSMgQ29weXJpZ2h0IHN0YXRlbWVudCBmb3IgdGhpcyBtb2R1bGUKCUNvcHlyaWdodCAgICAgICAgID0gJ0NvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+JwoKCSMgRGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUKCURlc2NyaXB0aW9uICAgICAgID0gJ8O+ZGVzY3JpcHRpb27DvicKCgkjIE1pbmltdW0gdmVyc2lvbiBvZiB0aGUgV2luZG93cyBQb3dlclNoZWxsIGVuZ2luZSByZXF1aXJlZCBieSB0aGlzIG1vZHVsZQoJUG93ZXJTaGVsbFZlcnNpb24gPSAnNS4wJwoKCSMgTW9kdWxlcyB0aGF0IG11c3QgYmUgaW1wb3J0ZWQgaW50byB0aGUgZ2xvYmFsIGVudmlyb25tZW50IHByaW9yIHRvIGltcG9ydGluZyB0aGlzIG1vZHVsZQoJTmVzdGVkTW9kdWxlcyAgICAgPSBAKAoJCScuL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLnBzZDEnCgkpCgoJIyBNb2R1bGVzIHRoYXQgbXVzdCBiZSBpbXBvcnRlZCBpbnRvIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgcHJpb3IgdG8gaW1wb3J0aW5nCgkjIHRoaXMgbW9kdWxlCglSZXF1aXJlZE1vZHVsZXMgICA9IEAoCgkJQHsgTW9kdWxlTmFtZSA9ICdQU0ZyYW1ld29yayc7IE1vZHVsZVZlcnNpb24gPSAnw74hcHNmcmFtZXdvcmshw74nIH0KCQlAeyBNb2R1bGVOYW1lID0gJ01pY3Jvc29mdC5Qb3dlcnNoZWxsLlNlY3JldE1hbmFnZW1lbnQnOyBNb2R1bGVWZXJzaW9uID0gJ8O+IXNlY3JldE1hbmFnZW1lbnRWZXJzaW9uIcO+JyB9CgkpCgoJIyBBc3NlbWJsaWVzIHRoYXQgbXVzdCBiZSBsb2FkZWQgcHJpb3IgdG8gaW1wb3J0aW5nIHRoaXMgbW9kdWxlCgkjIFJlcXVpcmVkQXNzZW1ibGllcyA9IEAoJ2JpblxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LmRsbCcpCgoJIyBUeXBlIGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUKCSMgVHlwZXNUb1Byb2Nlc3MgPSBAKCd4bWxcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5UeXBlcy5wczF4bWwnKQoKCSMgRm9ybWF0IGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUKCSMgRm9ybWF0c1RvUHJvY2VzcyA9IEAoJ3htbFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkZvcm1hdC5wczF4bWwnKQoKCSMgRnVuY3Rpb25zIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlCglGdW5jdGlvbnNUb0V4cG9ydCA9ICcnCgoJIyBDbWRsZXRzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlCglDbWRsZXRzVG9FeHBvcnQgICA9ICcnCgoJIyBWYXJpYWJsZXMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUKCVZhcmlhYmxlc1RvRXhwb3J0ID0gJycKCgkjIEFsaWFzZXMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUKCUFsaWFzZXNUb0V4cG9ydCAgID0gJycKCgkjIExpc3Qgb2YgYWxsIG1vZHVsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQoJTW9kdWxlTGlzdCAgICAgICAgPSBAKCkKCgkjIExpc3Qgb2YgYWxsIGZpbGVzIHBhY2thZ2VkIHdpdGggdGhpcyBtb2R1bGUKCUZpbGVMaXN0ICAgICAgICAgID0gQCgpCgoJIyBQcml2YXRlIGRhdGEgdG8gcGFzcyB0byB0aGUgbW9kdWxlIHNwZWNpZmllZCBpbiBNb2R1bGVUb1Byb2Nlc3MuIFRoaXMgbWF5IGFsc28gY29udGFpbiBhIFBTRGF0YSBoYXNodGFibGUgd2l0aCBhZGRpdGlvbmFsIG1vZHVsZSBtZXRhZGF0YSB1c2VkIGJ5IFBvd2VyU2hlbGwuCglQcml2YXRlRGF0YSAgICAgICA9IEB7CgoJCSNTdXBwb3J0IGZvciBQb3dlclNoZWxsR2V0IGdhbGxlcmllcy4KCQlQU0RhdGEgPSBAewoKCQkJIyBUYWdzIGFwcGxpZWQgdG8gdGhpcyBtb2R1bGUuIFRoZXNlIGhlbHAgd2l0aCBtb2R1bGUgZGlzY292ZXJ5IGluIG9ubGluZSBnYWxsZXJpZXMuCgkJCSMgVGFncyA9IEAoKQoKCQkJIyBBIFVSTCB0byB0aGUgbGljZW5zZSBmb3IgdGhpcyBtb2R1bGUuCgkJCSMgTGljZW5zZVVyaSA9ICcnCgoJCQkjIEEgVVJMIHRvIHRoZSBtYWluIHdlYnNpdGUgZm9yIHRoaXMgcHJvamVjdC4KCQkJIyBQcm9qZWN0VXJpID0gJycKCgkJCSMgQSBVUkwgdG8gYW4gaWNvbiByZXByZXNlbnRpbmcgdGhpcyBtb2R1bGUuCgkJCSMgSWNvblVyaSA9ICcnCgoJCQkjIFJlbGVhc2VOb3RlcyBvZiB0aGlzIG1vZHVsZQoJCQkjIFJlbGVhc2VOb3RlcyA9ICcnCgoJCX0gIyBFbmQgb2YgUFNEYXRhIGhhc2h0YWJsZQoKCX0gIyBFbmQgb2YgUHJpdmF0ZURhdGEgaGFzaHRhYmxlCn0BCSIBAAAJIwEAAAYkAQAAHlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMQYlAQAAUy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxCVsAAAAJJwEAAAkoAQAAAbEAAABwAAAABikBAACxGiRzY3JpcHQ6TW9kdWxlUm9vdCA9ICRQU1NjcmlwdFJvb3QKJHNjcmlwdDpNb2R1bGVWZXJzaW9uID0gKEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEiKS5Nb2R1bGVWZXJzaW9uCgojIERldGVjdCB3aGV0aGVyIGF0IHNvbWUgbGV2ZWwgZG90c291cmNpbmcgd2FzIGVuZm9yY2VkCiRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5Eb0RvdFNvdXJjZSAtRmFsbGJhY2sgJGZhbHNlCmlmICgkw75uYW1lw75fZG90c291cmNlbW9kdWxlKSB7ICRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSAkdHJ1ZSB9Cgo8IwpOb3RlIG9uIFJlc29sdmUtUGF0aDoKQWxsIHBhdGhzIGFyZSBzZW50IHRocm91Z2ggUmVzb2x2ZS1QYXRoL1Jlc29sdmUtUFNGUGF0aCBpbiBvcmRlciB0byBjb252ZXJ0IHRoZW0gdG8gdGhlIGNvcnJlY3QgcGF0aCBzZXBhcmF0b3IuClRoaXMgYWxsb3dzIGlnbm9yaW5nIHBhdGggc2VwYXJhdG9ycyB0aHJvdWdob3V0IHRoZSBpbXBvcnQgc2VxdWVuY2UsIHdoaWNoIGNvdWxkIG90aGVyd2lzZSBjYXVzZSB0cm91YmxlIGRlcGVuZGluZyBvbiBPUy4KUmVzb2x2ZS1QYXRoIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHBhdGhzIHRoYXQgYWxyZWFkeSBleGlzdCwgUmVzb2x2ZS1QU0ZQYXRoIGNhbiBhY2NlcHQgdGhhdCB0aGUgbGFzdCBsZWFmIG15IG5vdCBleGlzdC4KVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiB0ZXN0aW5nIGZvciBwYXRocy4KIz4KCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBsb2FkaW5nIGluZGl2aWR1YWwgbW9kdWxlIGZpbGVzLCByYXRoZXIgdGhhbiB0aGUgY29tcGlsZWQgbW9kdWxlIHdhcyBlbmZvcmNlZAokaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuSW5kaXZpZHVhbEZpbGVzIC1GYWxsYmFjayAkZmFsc2UKaWYgKCTDvm5hbWXDvl9pbXBvcnRJbmRpdmlkdWFsRmlsZXMpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0KaWYgKFRlc3QtUGF0aCAoUmVzb2x2ZS1QU0ZQYXRoIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcLi5cLmdpdCIgLVNpbmdsZUl0ZW0gLU5ld0NoaWxkKSkgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQppZiAoIjx3YXMgbm90IGNvbXBpbGVkPiIgLWVxICc8d2FzIG5vdCBjb21waWxlZD4nKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9CgpmdW5jdGlvbiBJbXBvcnQtTW9kdWxlRmlsZQp7Cgk8IwoJCS5TWU5PUFNJUwoJCQlMb2FkcyBmaWxlcyBpbnRvIHRoZSBtb2R1bGUgb24gbW9kdWxlIGltcG9ydC4KCgkJLkRFU0NSSVBUSU9OCgkJCVRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4KCQkJSXQgc2hvdWxkIGFsd2F5cyBiZSBkb3Rzb3VyY2VkIGl0c2VsZiwgaW4gb3JkZXIgdG8gcHJvcGVyIGZ1bmN0aW9uLgoKCQkJVGhpcyBwcm92aWRlcyBhIGNlbnRyYWwgbG9jYXRpb24gdG8gcmVhY3QgdG8gZmlsZXMgYmVpbmcgaW1wb3J0ZWQsIGlmIGxhdGVyIGRlc2lyZWQKCgkJLlBBUkFNRVRFUiBQYXRoCgkJCVRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGxvYWQKCgkJLkVYQU1QTEUKCQkJUFMgQzpcPiAuIEltcG9ydC1Nb2R1bGVGaWxlIC1GaWxlICRmdW5jdGlvbi5GdWxsTmFtZQoKCQkJSW1wb3J0cyB0aGUgZmlsZSBzdG9yZWQgaW4gJGZ1bmN0aW9uIGFjY29yZGluZyB0byBpbXBvcnQgcG9saWN5CgkjPgoJW0NtZGxldEJpbmRpbmcoKV0KCVBhcmFtICgKCQlbc3RyaW5nXQoJCSRQYXRoCgkpCgoJJHJlc29sdmVkUGF0aCA9ICRFeGVjdXRpb25Db250ZXh0LlNlc3Npb25TdGF0ZS5QYXRoLkdldFJlc29sdmVkUFNQYXRoRnJvbVBTUGF0aCgkUGF0aCkuUHJvdmlkZXJQYXRoCglpZiAoJGRvRG90U291cmNlKSB7IC4gJHJlc29sdmVkUGF0aCB9CgllbHNlIHsgJEV4ZWN1dGlvbkNvbnRleHQuSW52b2tlQ29tbWFuZC5JbnZva2VTY3JpcHQoJGZhbHNlLCAoW3NjcmlwdGJsb2NrXTo6Q3JlYXRlKFtpby5maWxlXTo6UmVhZEFsbFRleHQoJHJlc29sdmVkUGF0aCkpKSwgJG51bGwsICRudWxsKSB9Cn0KCiNyZWdpb24gTG9hZCBpbmRpdmlkdWFsIGZpbGVzCmlmICgkaW1wb3J0SW5kaXZpZHVhbEZpbGVzKQp7CgkjIEV4ZWN1dGUgUHJlaW1wb3J0IGFjdGlvbnMKCWZvcmVhY2ggKCRwYXRoIGluICgmICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEiKSkgewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJHBhdGgKCX0KCgkjIEltcG9ydCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKQoJewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lCgl9CgoJIyBJbXBvcnQgYWxsIGludGVybmFsIGZ1bmN0aW9ucyB3aGljaCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIEV4dGVuc2lvbiBhbmQgdGhlIE1haW4tTW9kdWxlCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbCIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKSB7CgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUKCX0KCgkjIEltcG9ydCBhbGwgcHVibGljIGZ1bmN0aW9ucwoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkKCXsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQoJfQoKCSMgRXhlY3V0ZSBQb3N0aW1wb3J0IGFjdGlvbnMKCWZvcmVhY2ggKCRwYXRoIGluICgmICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHBvc3RpbXBvcnQucHMxIikpIHsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRwYXRoCgl9CgoJIyBFbmQgaXQgaGVyZSwgZG8gbm90IGxvYWQgY29tcGlsZWQgY29kZSBiZWxvdwoJcmV0dXJuCn0KI2VuZHJlZ2lvbiBMb2FkIGluZGl2aWR1YWwgZmlsZXMKCiNyZWdpb24gTG9hZCBjb21waWxlZCBjb2RlCiI8Y29tcGlsZSBjb2RlIGludG8gaGVyZT4iCiNlbmRyZWdpb24gTG9hZCBjb21waWxlZCBjb2RlAQkqAQAACSsBAAAGLAEAAB5TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzbTEGLQEAAFMvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNtMQlbAAAACS8BAAAJMAEAAAGzAAAAcAAAAAYxAQAA6hoKCltDbWRsZXRCaW5kaW5nKCldCnBhcmFtKAogICAgJFZhdWx0Q29uZmlnID0gJ8O+bmFtZcO+RGVtbycsCiAgICBbc3dpdGNoXSROb1dhdGNoZXIKKQokdmF1bHRzUGFyYW1ldGVyID0gQHsKICAgIMO+bmFtZcO+RGVtbyA9CiAgICBAewogICAgICAgIHZhdWx0TmFtZSA9ICLDvm5hbWXDvkRlbW8iCiAgICAgICAgc2VydmVyICAgID0gImxvY2FsaG9zdCIKICAgICAgICBVc2VyTmFtZSAgPSAkZW52OlVTRVJOQU1FCiAgICAgICAgcGFzc3dvcmQgID0gQ29udmVydFRvLVNlY3VyZVN0cmluZyAtQXNQbGFpblRleHQgLVN0cmluZyAiVEhJU19TSE9VTERCRV9TV0FQUEVEIiAgIyBQbGVhc2UgdXNlIHNvbWV0aGluZyBlbHNlIGxpa2UgJ0dldC1DcmVkZW50aWFsJyA7LSkKICAgIH0KfQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0ICJgJFBTU2NyaXB0Um9vdD0kUFNTY3JpcHRSb290IgojICRQU1NjcmlwdFJvb3QgaGFzIHRvIGJlIHByb3ZpZGVkIGFzIGEgcGFyYW1ldGVyIGFzIGl0J3Mgbm90IGF2YWlsYWJsZSBpbiB0aGUgc2NyaXB0YmxvY2sKRW50ZXItUlNTZXNzaW9uIC1PblN0YXJ0QXJndW1lbnRMaXN0IEAoJHZhdWx0c1BhcmFtZXRlci4kVmF1bHRDb25maWcsICRQU1NjcmlwdFJvb3QpIC1vbnN0YXJ0IHsKICAgIHBhcmFtKCR2YXVsdFBhcmFtLCRQU1NDKQogICAgJHZwID0gJHZhdWx0UGFyYW0KICAgICR2YXVsdE5hbWUgPSAkdmF1bHRQYXJhbS52YXVsdE5hbWUKICAgICRteU5ld1NlY3JldCA9IENvbnZlcnRUby1TZWN1cmVTdHJpbmcgIiQoR2V0LURhdGUpIiAtQXNQbGFpblRleHQKICAgIFtwc2NyZWRlbnRpYWxdJG15TmV3Q3JlZCA9IE5ldy1PYmplY3QgU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5QU0NyZWRlbnRpYWwgKCdTb21lVXNlcicsICRteU5ld1NlY3JldCkKICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgIlJlbWJlcjogWW91IGNhbiBhY2Nlc3MgdGhlIGZvbGxvd2luZyBkZWZhdWx0IHZhcmlhYmxlczoiCiAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IChAewogICAgICAgICAgICAnJHZwJyAgICAgICAgICA9ICJDdXJyZW50bHkgdXNlZCB2YXVsdCBjb25maWcgcGFyYW1ldGVycyIKICAgICAgICAgICAgJyR2YXVsdE5hbWUnICAgPSAiVGhlIGN1cnJlbnQgY29uZmlndXJlZCB2YXVsdCIKICAgICAgICAgICAgJyRteU5ld1NlY3JldCcgPSAiQSBuZXcgU2VjdXJlU3RyaW5nIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgdGltZSIKICAgICAgICAgICAgJyRteU5ld0NyZWQnICAgPSAiQSBuZXcgQ3JlZGVudGlhbCB1c2luZyBgJG15TmV3U2VjcmV0IgogICAgICAgIH0gfCBGb3JtYXQtVGFibGUgLVdyYXAgfCBPdXQtU3RyaW5nKQogICAgJGFkZGl0aW9uYWxQYXJhbWV0ZXIgPSAkdmF1bHRQYXJhbSB8IENvbnZlcnRUby1QU0ZIYXNodGFibGUgLUV4Y2x1ZGUgdmF1bHROYW1lLCBwYXNzd29yZAogICAgV3JpdGUtUFNGTWVzc2FnZSAiUmVnaXN0ZXIgVmF1bHQgJHZhdWx0TmFtZSB3aXRoIGFkZGl0aW9uYWwgcGFyYW1ldGVycyAkKCRhZGRpdGlvbmFsUGFyYW1ldGVyfENvbnZlcnRUby1Kc29uIC1Db21wcmVzcyAgKSIKICAgICRtb2R1bGVQYXRoID0gam9pbi1wYXRoIChzcGxpdC1wYXRoICRQU1NDKSAiU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDviIKICAgICRtYW5pZmVzdFBhdGggPSBKb2luLVBhdGggJG1vZHVsZVBhdGggIlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSIKICAgIFdyaXRlLVBTRk1lc3NhZ2UgIlVzaW5nIG1vZHVsZVBhdGggJyRtb2R1bGVQYXRoJyIKICAgIEltcG9ydC1Nb2R1bGUgLWZvcmNlICRtYW5pZmVzdFBhdGggLVZlcmJvc2UKICAgIFJlZ2lzdGVyLVNlY3JldFZhdWx0IC1OYW1lICR2YXVsdE5hbWUgLU1vZHVsZU5hbWUgJG1hbmlmZXN0UGF0aCAtVmF1bHRQYXJhbWV0ZXJzICRhZGRpdGlvbmFsUGFyYW1ldGVyCiAgICBVbmxvY2stU2VjcmV0VmF1bHQgLU5hbWUgJHZhdWx0TmFtZSAtUGFzc3dvcmQgJHZhdWx0UGFyYW0ucGFzc3dvcmQgLVZlcmJvc2UKICAgIGlmICgkTm9XYXRjaGVyKSB7CiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAiVXNlICdSZXN0YXJ0LVJTU2Vzc2lvbicgdG8gcmVzdGFydCAgdGhlIHNlc3Npb24uIgogICAgfQogICAgZWxzZSB7CiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAiQW55IEZpbGUgQ2hhbmdlIHdpdGhpbiAnJG1vZHVsZVBhdGgnIHdpbGwgbGVhZCB0byBhIHJlc3RhcnQgb2YgdGhlIHNlc3Npb24uIgogICAgICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgIlRvIGRpc2FibGUgdGhpcyB1c2UgJ1N0YXJ0LcO+bmFtZcO+UnVuc3BhY2UucHMxIC1Ob1dhdGNoZXInIgogICAgICAgIFN0YXJ0LVJTUmVzdGFydEZpbGVXYXRjaGVyIC1QYXRoICIkbW9kdWxlUGF0aCIgLUluY2x1ZGVTdWJkaXJlY3RvcmllcwogICAgfQogICAgQCgKICAgICAgICAiRXhhbXBsZSBjb21tYW5kcyB0byB0ZXN0IHRoZSBuZXcgdmF1bHQgKGZvciBjb3B5J24ncGFzdGUpIgogICAgICAgICNUT0RPIEZpbGwgaW4gbGl2ZSBuYW1lcyBvZiBhbHJlYWR5IHN0b3JlZCBzZWNyZXQgbmFtZXMgOy0pCiAgICAgICAgIiMgR2V0LVNlY3JldCAtVmF1bHQgYCRWYXVsdG5hbWUgLU5hbWUgZm9vIgogICAgICAgICIjIEdldC1TZWNyZXQgLVZhdWx0IGAkVmF1bHRuYW1lIC1OYW1lIE15Rmlyc3RQYXNzd29yZCAtVmVyYm9zZSIKICAgICAgICAiIyBHZXQtU2VjcmV0SW5mbyAtVmF1bHQgYCRWYXVsdG5hbWUgLU5hbWUgZm9vIgogICAgICAgICIjIEdldC1TZWNyZXRJbmZvIC1WYXVsdCBgJFZhdWx0bmFtZSAtTmFtZSBNeUZpcnN0UGFzc3dvcmQiCiAgICAgICAgIiMgU2V0LVNlY3JldCAtVmVyYm9zZSAtVmF1bHQgYCRWYXVsdG5hbWUgLVNlY3JldCBgJG15TmV3U2VjcmV0IC1OYW1lIGZvbyIKICAgICAgICAiIyBTZXQtU2VjcmV0IC1WZXJib3NlIC1WYXVsdCBgJFZhdWx0bmFtZSAtU2VjcmV0IGAkbXlOZXdTZWNyZXQgLU5hbWUgSHViYmEiCiAgICAgICAgIiMgU2V0LVNlY3JldEluZm8gLVZlcmJvc2UgLVZhdWx0IGAkVmF1bHRuYW1lICAtTmFtZSBmb28gLU1ldGFkYXRhIEB7QmVzY2hyZWlidW5nPSdOb3Rpeid9IgogICAgICAgICcjIFNldC1TZWNyZXQgLVZlcmJvc2UgLVZhdWx0ICRWYXVsdG5hbWUgLVNlY3JldCAkbXlOZXdDcmVkIC1OYW1lICJOZXdGb28iJykgfCBGb3JFYWNoLU9iamVjdCB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgJF8gfQp9IC1vbmVuZCB7CiAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0ICJSZW1vdmluZyBhbGwgdmF1bHRzIHdoaWNoIHVzZSBhIG1vZHVsZSBuYW1lZCBsaWtlICcqw75uYW1lw74qJyIKICAgIEdldC1TZWNyZXRWYXVsdCB8IFdoZXJlLU9iamVjdCBtb2R1bGVwYXRoIC1saWtlICcqw75uYW1lw74qJyB8IFVucmVnaXN0ZXItU2VjcmV0VmF1bHQKfQEJMgEAAAkzAQAABjQBAAAaU3RhcnQtw75uYW1lw75SdW5zcGFjZS5w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ZCBsaWJyYXJ5LCB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMgeW91IHdhbnQgdG8gaW5jbHVkZSAod2F0Y2ggdGhlIGxpY2Vuc2UhKSwgb3IgYSBzY3JpcHQgZGVjbGFyaW5nIHR5cGUgYWNjZWxlcmF0b3JzIChlZmZlY3RpdmVseSBhbGlhc2VzIGZvciAuTkVUIHR5cGVzKQoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVHlwZSBBY2NlbGVyYXRvcnMsIHNlZSB0aGUgaGVscCBvbiBTZXQtUFNGVHlwZUFsaWFzAQmVAQAACZYBAAAGlwEAAAlyZWFkbWUubWQGmAEAAEIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2Jpbi9yZWFkbWUubWQJWwAAAAmaAQAACZsBAAABaQEAAHAAAAAGnAEAAJsBVE9QSUMKCWFib3V0X8O+bmFtZcO+CgkKU0hPUlQgREVTQ1JJUFRJT04KCUV4cGxhaW5zIGhvdyB0byB1c2UgdGhlIMO+bmFtZcO+IHBvd2Vyc2hlbGwgbW9kdWxlCgkKTE9ORyBERVNDUklQVElPTgoJPEluc2VydCBDb250ZW50IGhlcmU+CgpLRVlXT1JEUwoJw75uYW1lw74BCZ0BAAAJngEAAAafAQAAF2Fib3V0X8O+bmFtZcO+LmhlbHAudHh0BqABAABSL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9lbi11cy9hYm91dF/Dvm5hbWXDvi5oZWxwLnR4dAlbAAAACaIBAAAJowEAAAFqAQAAcAAAAAakAQAAmQEjIFRoaXMgaXMgd2hlcmUgdGhlIHN0cmluZ3MgZ28sIHRoYXQgYXJlIHdyaXR0ZW4gYnkKIyBXcml0ZS1QU0ZNZXNzYWdlLCBTdG9wLVBTRkZ1bmN0aW9uIG9yIHRoZSBQU0ZyYW1ld29yayB2YWxpZGF0aW9uIHNjcmlwdGJsb2NrcwpAewoJJ2tleScgPSAnVmFsdWUnCn0BCaUBAAAJpgEAAAanAQAADHN0cmluZ3MucHNkMQaoAQAARy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vZW4tdXMvc3RyaW5ncy5wc2QxCVsAAAAJqgEAAAmrAQAAAWsBAABwAAAABqwBAADMASMgRnVuY3Rpb25zCgpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGZ1bmN0aW9ucyBnby4KCkRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbW9kdWxlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdWJkaXZpZGUgdGhlbSBpbnRvIHN1YmZvbGRlcnMuCgpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseQEJrQEAAAmuAQAABq8BAAAJcmVhZG1lLm1kBrABAABIL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9mdW5jdGlvbnMvcmVhZG1lLm1kCVsAAAAJsgEAAAmzAQAAAWwBAABwAAAABrQBAADEDmZ1bmN0aW9uIFJlZ2lzdGVyLcO+ZnVuY3Rpb25QcmVmaXjDvlNlY3VyZVZhdWx0IHsKICAgIDwjCiAgICAuU1lOT1BTSVMKICAgIFJlZ2lzdGVycyBhIG5ldyBTZWNyZXR2YXVsdCBvZiB0eXBlIMO+bmFtZcO+LgoKICAgIC5ERVNDUklQVElPTgogICAgUmVnaXN0ZXJzIGEgbmV3IFNlY3JldHZhdWx0IG9mIHR5cGUgw75uYW1lw74uCgogICAgI1RPRE8gQWRkIHBhcmFtZXRlciBkZXNjcmlwdGlvbgoKICAgIC5OT1RFUwogICAgR2VuZXJhbCBub3RlcwogICAgIz4KICAgIFtDbWRsZXRCaW5kaW5nKFN1cHBvcnRzU2hvdWxkUHJvY2VzcyldCiAgICBwYXJhbSAoCgogICAgICAgIFtwYXJhbWV0ZXIobWFuZGF0b3J5ID0gJHRydWUsIFBhcmFtZXRlclNldE5hbWUgPSAiY21kTGluZSIpXQogICAgICAgIFtzdHJpbmddJFZhdWx0TmFtZQogICAgICAgICMgVE9ETyBhZGQgeW91ciBzcGVjaWZpYyBwYXJhbWV0ZXJzCiAgICApCiAgICAjIEluIG9yZGVyIHRvIHJlZ2lzdGVyIGEgdmF1bHQgeW91IG5lZWQgdGhlIG1vZHVsZSBuYW1lLiBGb3IgZGV2IHB1cnBvc2VzCiAgICAjIHRoaXMgY29kZSAoc2VlIGNvbmZpZ3VyYXRpb24ucHMxKSBlbmFibGVzIHRoZSBkZXRlY3Rpb24gaWYgdGhlIG1vZHVsZSBpcyBpbnN0YWxsZWQKICAgICMgb3IgdGhlIFBTRDEgZmlsZSBpcyBpbXBvcnRlZCBkaXJlY3RseS4KICAgICRteU1vZHVsZVBhdGggPSAiJE1vZHVsZVJvb3RcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxIgogICAgJHBzZERhdGEgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlICRteU1vZHVsZVBhdGgKICAgICRyZWdpc3RlclBhcmFtID0gQHsKICAgICAgICBNb2R1bGVOYW1lICAgICAgPSBHZXQtUFNGQ29uZmlnVmFsdWUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uSW50ZXJBY3RpdmVSZWdpc3Rlci5tb2R1bGVwYXRoJwogICAgICAgIE5hbWUgICAgICAgICAgICA9ICRWYXVsdE5hbWUKICAgICAgICBWYXVsdFBhcmFtZXRlcnMgPSAkUFNCb3VuZFBhcmFtZXRlcnMgfCBDb252ZXJ0VG8tUFNGSGFzaHRhYmxlIC1Jbmhlcml0IC1FeGNsdWRlIEAoCiAgICAgICAgICAgICMgVE9ETyBJbmNsdWRlIGFsbCBmdW5jdGlvbiBwYXJhbWV0ZXIgbmFtZXMgd2hpY2ggc2hvdWxkIGJlIHRyYW5zZmVycmVkIHRvIHRoZSBWYXVsdC1QYXJhbWV0ZXJzCiAgICAgICAgICAgICMgJ1NlcnZlcicKICAgICAgICAgICAgIyAnUG9ydCcKICAgICAgICAgICAgIyAnRGF0YWJhc2UnCiAgICAgICAgICAgICMgJ1VzZXJOYW1lJwogICAgICAgICkKICAgIH0KICAgICRyZWdpc3RlclBhcmFtLlZhdWx0UGFyYW1ldGVycy52ZXJzaW9uID0gJHBzZERhdGEuTW9kdWxlVmVyc2lvbgogICAgaWYgKCRQU0NtZGxldC5TaG91bGRQcm9jZXNzKCRuYW1lKSkgewogICAgICAgIFdyaXRlLVBTRk1lc3NhZ2UgIlJlZ2lzdGVyaW5nIFZhdWx0ICR2YXVsdCB3aXRoIFBhcmFtICQoJHJlZ2lzdGVyUGFyYW18Q29udmVydFRvLUpzb24gLUNvbXByZXNzKSIKICAgICAgICBSZWdpc3Rlci1TZWNyZXRWYXVsdCBAcmVnaXN0ZXJQYXJhbQogICAgfQogICAgZWxzZSB7CiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAiV2hhdElmIHVzZWQsIG5vIHZhdWx0IHJlZ2lzdGVyZWQuIgogICAgICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgIllvdSBtYXkgcmVnaXN0ZXIgdGhlIGNob3NlbiB2YXVsdCBsYXRlciB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpgcmBuQHJlZ2lzdGVyUGFyYW09JCgkcmVnaXN0ZXJQYXJhbXxDb252ZXJ0VG8tTWV0YWRhdGEgLUFzSGFzaHRhYmxlKWByYG5SZWdpc3Rlci3DvmZ1bmN0aW9uUHJlZml4w75TZWN1cmVWYXVsdCBAcmVnaXN0ZXJQYXJhbSIKICAgIH0KfQEJtQEAAAm2AQAABrcBAAAqUmVnaXN0ZXItw75mdW5jdGlvblByZWZpeMO+U2VjdXJlVmF1bHQucHMxBrgBAABpL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9mdW5jdGlvbnMvUmVnaXN0ZXItw75mdW5jdGlvblByZWZpeMO+U2VjdXJlVmF1bHQucHMxCVsAAAAJugEAAAm7AQAAAW0BAAA+AAAACbwBAAAGvQEAAA5jb25maWd1cmF0aW9ucwa+AQAATC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvY29uZmlndXJhdGlvbnMJWwAAAAnAAQAACcEBAAABbgEAAD4AAAAJwgEAAAbDAQAACWZ1bmN0aW9ucwbEAQAARy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvZnVuY3Rpb25zCVsAAAAJxgEAAAnHAQAAAW8BAAA+AAAACcgBAAAGyQEAAAxzY3JpcHRibG9ja3MGygEAAEovU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3NjcmlwdGJsb2NrcwlbAAAACcwBAAAJzQEAAAFwAQAAPgAAAAnOAQAABs8BAAAHc2NyaXB0cwbQAQAARS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvc2NyaXB0cwlbAAAACdIBAAAJ0wEAAAFxAQAAPgAAAAnUAQAABtUBAAAEdGVwcAbWAQAAQi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvdGVwcAlbAAAACdgBAAAJ2QEAAAFyAQAAPgAAAAnaAQAABtsBAAADYmluBtwBAABcL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9iaW4JWwAAAAneAQAACd8BAAABcwEAAD4AAAAJ4AEAAAbhAQAABWVuLXVzBuIBAABeL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9lbi11cwlbAAAACeQBAAAJ5QEAAAF0AQAAPgAAAAnmAQAABucBAAAJZnVuY3Rpb25zBugBAABiL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMJWwAAAAnqAQAACesBAAABdQEAAD4AAAAJ7AEAAAbtAQAAGGZ1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbAbuAQAAcS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zLnNoYXJlZGludGVybmFsCVsAAAAJ8AEAAAnxAQAAAXYBAAA+AAAACfIBAAAG8wEAAAhpbnRlcm5hbAb0AQAAYS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwJWwAAAAn2AQAACfcBAAABdwEAAD4AAAAJ+AEAAAb5AQAABXRlc3RzBvoBAABeL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cwlbAAAACfwBAAAJ/QEAAAF4AQAAPgAAAAn+AQAABv8BAAADeG1sBgACAABcL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi94bWwJWwAAAAkCAgAACQMCAAABeQEAAHAAAAAGBAIAAGojIENoYW5nZWxvZwojIyAxLjAuMCAow74hZHluYW1pY3NjcmlwdF8zOTQ0MzIhw74pCiAtIE5ldzogU29tZSBTdHVmZgogLSBVcGQ6IE1vYXIgU3R1ZmYKIC0gRml4OiBNdWNoIFN0dWZmAQkFAgAACQYCAAAGBwIAAAxjaGFuZ2Vsb2cubWQGCAIAAGUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2NoYW5nZWxvZy5tZAlbAAAACQoCAAAJCwIAAAF6AQAAcAAAAAYMAgAA/gcjIFBTRk1vZHVsZSBndWlkYW5jZQoKVGhpcyBpcyBhIGZpbmlzaGVkIG1vZHVsZSBsYXlvdXQgb3B0aW1pemVkIGZvciBpbXBsZW1lbnRpbmcgdGhlIFBTRnJhbWV3b3JrLgoKSWYgeW91IGRvbid0IGNhcmUgdG8gZGVhbCB3aXRoIHRoZSBkZXRhaWxzLCB0aGlzIGlzIHdoYXQgeW91IG5lZWQgdG8gZG8gdG8gZ2V0IHN0YXJ0ZWQgc2VlaW5nIHJlc3VsdHM6CgogLSBBZGQgdGhlIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHRvIGAvZnVuY3Rpb25zL2AKIC0gVXBkYXRlIHRoZSBgRnVuY3Rpb25zVG9FeHBvcnRgIG5vZGUgaW4gdGhlIG1vZHVsZSBtYW5pZmVzdCAow75uYW1lw74ucHNkMSkuIEFsbCBmdW5jdGlvbnMgeW91IHdhbnQgdG8gcHVibGlzaCBzaG91bGQgYmUgaW4gYSBsaXN0LgogLSBBZGQgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyB0aGUgdXNlciBzaG91bGQgbm90IHNlZSB0byBgL2ludGVybmFsL2Z1bmN0aW9ucy9gCiAKICMjIFBhdGggV2FybmluZwogCiA+IElmIHlvdSB3YW50IHlvdXIgbW9kdWxlIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBMaW51eCBhbmQgTWFjT1MsIGtlZXAgaW4gbWluZCB0aGF0IHRob3NlIE9TIGFyZSBjYXNlIHNlbnNpdGl2ZSBmb3IgcGF0aHMgYW5kIGZpbGVzLgogCiBgSW1wb3J0LU1vZHVsZUZpbGVgIGlzIHByZWNvbmZpZ3VyZWQgdG8gcmVzb2x2ZSB0aGUgcGF0aCBvZiB0aGUgZmlsZXMgc3BlY2lmaWVkLCBzbyBpdCB3aWxsIHJlbGlhYmx5IGNvbnZlcnQgd2VpcmQgcGF0aCBub3RhdGlvbnMgdGhlIHN5c3RlbSBjYW4ndCBoYW5kbGUuCiBDb250ZW50IGltcG9ydGVkIHRocm91Z2ggdGhhdCBjb21tYW5kIHRodXMgbmVlZCBub3QgbWluZCB0aGUgcGF0aCBzZXBhcmF0b3IuCiBJZiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgeW91ciBjb2RlIHRvbyB3aWxsIHN1cnZpdmUgT1Mtc3BlY2lmaWMgcGF0aCBub3RhdGlvbnMsIGdldCB1c2VkIHRvIHVzaW5nIGBSZXNvbHZlLXBhdGhgIG9yIHRoZSBtb3JlIHBvd2VyZnVsIGBSZXNvbHZlLVBTRlBhdGhgLgEJDQIAAAkOAgAABg8CAAAJcmVhZG1lLm1kBhACAABiL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9yZWFkbWUubWQJWwAAAAkSAgAACRMCAAABewEAAHAAAAAGFAIAAKkTQHsKCSMgU2NyaXB0IG1vZHVsZSBvciBiaW5hcnkgbW9kdWxlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFuaWZlc3QKCVJvb3RNb2R1bGUgICAgICAgID0gJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLnBzbTEnCgoJIyBWZXJzaW9uIG51bWJlciBvZiB0aGlzIG1vZHVsZS4KCU1vZHVsZVZlcnNpb24gPSAnMS4wLjAnCgoJIyBJRCB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgbW9kdWxlCglHVUlEID0gJ8O+IWd1aWRFeHRlbnNpb24hw74nCgoJIyBBdXRob3Igb2YgdGhpcyBtb2R1bGUKCUF1dGhvciA9ICfDvmF1dGhvcsO+JwoKCSMgQ29tcGFueSBvciB2ZW5kb3Igb2YgdGhpcyBtb2R1bGUKCUNvbXBhbnlOYW1lID0gJ8O+Y29tcGFuecO+JwoKCSMgQ29weXJpZ2h0IHN0YXRlbWVudCBmb3IgdGhpcyBtb2R1bGUKCUNvcHlyaWdodCA9ICdDb3B5cmlnaHQgKGMpIMO+IXllYXIhw74gw75hdXRob3LDvicKCgkjIERlc2NyaXB0aW9uIG9mIHRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlCglEZXNjcmlwdGlvbiA9ICfDvmRlc2NyaXB0aW9uw74nCgoJIyBNaW5pbXVtIHZlcnNpb24gb2YgdGhlIFdpbmRvd3MgUG93ZXJTaGVsbCBlbmdpbmUgcmVxdWlyZWQgYnkgdGhpcyBtb2R1bGUKCVBvd2VyU2hlbGxWZXJzaW9uID0gJzUuMCcKCgkjIE1vZHVsZXMgdGhhdCBtdXN0IGJlIGltcG9ydGVkIGludG8gdGhlIGdsb2JhbCBlbnZpcm9ubWVudCBwcmlvciB0byBpbXBvcnRpbmcKCSMgdGhpcyBtb2R1bGUKCVJlcXVpcmVkTW9kdWxlcyA9IEAoCgkJQHsgTW9kdWxlTmFtZT0nUFNGcmFtZXdvcmsnOyBNb2R1bGVWZXJzaW9uPSfDviFwc2Z2ZXJzaW9uIcO+JyB9CgkpCgoJIyBBc3NlbWJsaWVzIHRoYXQgbXVzdCBiZSBsb2FkZWQgcHJpb3IgdG8gaW1wb3J0aW5nIHRoaXMgbW9kdWxlCgkjIFJlcXVpcmVkQXNzZW1ibGllcyA9IEAoJ2JpblxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LmRsbCcpCgoJIyBUeXBlIGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUKCSMgVHlwZXNUb1Byb2Nlc3MgPSBAKCd4bWxcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5UeXBlcy5wczF4bWwnKQoKCSMgRm9ybWF0IGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUKCSMgRm9ybWF0c1RvUHJvY2VzcyA9IEAoJ3htbFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkZvcm1hdC5wczF4bWwnKQoKCSMgRnVuY3Rpb25zIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlCglGdW5jdGlvbnNUb0V4cG9ydCA9IEAoCgkJJ1NldC1TZWNyZXQnCgkJJ1NldC1TZWNyZXRJbmZvJwoJCSdHZXQtU2VjcmV0JwoJCSdSZW1vdmUtU2VjcmV0JwoJCSdHZXQtU2VjcmV0SW5mbycKCQknVGVzdC1TZWNyZXRWYXVsdCcKCQknVW5yZWdpc3Rlci1TZWNyZXRWYXVsdCcKCQknVW5sb2NrLVNlY3JldFZhdWx0JwoJKQoKCSMgQ21kbGV0cyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJQ21kbGV0c1RvRXhwb3J0ID0gJycKCgkjIFZhcmlhYmxlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJVmFyaWFibGVzVG9FeHBvcnQgPSAnJwoKCSMgQWxpYXNlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQoJQWxpYXNlc1RvRXhwb3J0ID0gJycKCgkjIExpc3Qgb2YgYWxsIG1vZHVsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQoJTW9kdWxlTGlzdCA9IEAoKQoKCSMgTGlzdCBvZiBhbGwgZmlsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQoJRmlsZUxpc3QgPSBAKCkKCgkjIFByaXZhdGUgZGF0YSB0byBwYXNzIHRvIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGluIE1vZHVsZVRvUHJvY2Vzcy4gVGhpcyBtYXkgYWxzbyBjb250YWluIGEgUFNEYXRhIGhhc2h0YWJsZSB3aXRoIGFkZGl0aW9uYWwgbW9kdWxlIG1ldGFkYXRhIHVzZWQgYnkgUG93ZXJTaGVsbC4KCVByaXZhdGVEYXRhID0gQHsKCgkJI1N1cHBvcnQgZm9yIFBvd2VyU2hlbGxHZXQgZ2FsbGVyaWVzLgoJCVBTRGF0YSA9IEB7CgoJCQkjIFRhZ3MgYXBwbGllZCB0byB0aGlzIG1vZHVsZS4gVGhlc2UgaGVscCB3aXRoIG1vZHVsZSBkaXNjb3ZlcnkgaW4gb25saW5lIGdhbGxlcmllcy4KCQkJIyBUYWdzID0gQCgpCgoJCQkjIEEgVVJMIHRvIHRoZSBsaWNlbnNlIGZvciB0aGlzIG1vZHVsZS4KCQkJIyBMaWNlbnNlVXJpID0gJycKCgkJCSMgQSBVUkwgdG8gdGhlIG1haW4gd2Vic2l0ZSBmb3IgdGhpcyBwcm9qZWN0LgoJCQkjIFByb2plY3RVcmkgPSAnJwoKCQkJIyBBIFVSTCB0byBhbiBpY29uIHJlcHJlc2VudGluZyB0aGlzIG1vZHVsZS4KCQkJIyBJY29uVXJpID0gJycKCgkJCSMgUmVsZWFzZU5vdGVzIG9mIHRoaXMgbW9kdWxlCgkJCSMgUmVsZWFzZU5vdGVzID0gJycKCgkJfSAjIEVuZCBvZiBQU0RhdGEgaGFzaHRhYmxlCgoJfSAjIEVuZCBvZiBQcml2YXRlRGF0YSBoYXNodGFibGUKfQEJFQIAAAkWAgAABhcCAAAoU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNkMQYYAgAAgQEvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLnBzZDEJWwAAAAkaAgAACRsCAAABfAEAAHAAAAAGHAIAAJcaJHNjcmlwdDpNb2R1bGVSb290ID0gJFBTU2NyaXB0Um9vdAokc2NyaXB0Ok1vZHVsZVZlcnNpb24gPSAoSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLnBzZDEiKS5Nb2R1bGVWZXJzaW9uCgojIERldGVjdCB3aGV0aGVyIGF0IHNvbWUgbGV2ZWwgZG90c291cmNpbmcgd2FzIGVuZm9yY2VkCiRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5Eb0RvdFNvdXJjZSAtRmFsbGJhY2sgJGZhbHNlCmlmICgkw75uYW1lw75fZG90c291cmNlbW9kdWxlKSB7ICRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSAkdHJ1ZSB9Cgo8IwpOb3RlIG9uIFJlc29sdmUtUGF0aDoKQWxsIHBhdGhzIGFyZSBzZW50IHRocm91Z2ggUmVzb2x2ZS1QYXRoL1Jlc29sdmUtUFNGUGF0aCBpbiBvcmRlciB0byBjb252ZXJ0IHRoZW0gdG8gdGhlIGNvcnJlY3QgcGF0aCBzZXBhcmF0b3IuClRoaXMgYWxsb3dzIGlnbm9yaW5nIHBhdGggc2VwYXJhdG9ycyB0aHJvdWdob3V0IHRoZSBpbXBvcnQgc2VxdWVuY2UsIHdoaWNoIGNvdWxkIG90aGVyd2lzZSBjYXVzZSB0cm91YmxlIGRlcGVuZGluZyBvbiBPUy4KUmVzb2x2ZS1QYXRoIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHBhdGhzIHRoYXQgYWxyZWFkeSBleGlzdCwgUmVzb2x2ZS1QU0ZQYXRoIGNhbiBhY2NlcHQgdGhhdCB0aGUgbGFzdCBsZWFmIG15IG5vdCBleGlzdC4KVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiB0ZXN0aW5nIGZvciBwYXRocy4KIz4KCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBsb2FkaW5nIGluZGl2aWR1YWwgbW9kdWxlIGZpbGVzLCByYXRoZXIgdGhhbiB0aGUgY29tcGlsZWQgbW9kdWxlIHdhcyBlbmZvcmNlZAokaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuSW5kaXZpZHVhbEZpbGVzIC1GYWxsYmFjayAkZmFsc2UKaWYgKCTDvm5hbWXDvl9pbXBvcnRJbmRpdmlkdWFsRmlsZXMpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0KaWYgKFRlc3QtUGF0aCAoUmVzb2x2ZS1QU0ZQYXRoIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcLi5cLmdpdCIgLVNpbmdsZUl0ZW0gLU5ld0NoaWxkKSkgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQppZiAoIjx3YXMgbm90IGNvbXBpbGVkPiIgLWVxICc8d2FzIG5vdCBjb21waWxlZD4nKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9CgpmdW5jdGlvbiBJbXBvcnQtTW9kdWxlRmlsZQp7Cgk8IwoJCS5TWU5PUFNJUwoJCQlMb2FkcyBmaWxlcyBpbnRvIHRoZSBtb2R1bGUgb24gbW9kdWxlIGltcG9ydC4KCgkJLkRFU0NSSVBUSU9OCgkJCVRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4KCQkJSXQgc2hvdWxkIGFsd2F5cyBiZSBkb3Rzb3VyY2VkIGl0c2VsZiwgaW4gb3JkZXIgdG8gcHJvcGVyIGZ1bmN0aW9uLgoKCQkJVGhpcyBwcm92aWRlcyBhIGNlbnRyYWwgbG9jYXRpb24gdG8gcmVhY3QgdG8gZmlsZXMgYmVpbmcgaW1wb3J0ZWQsIGlmIGxhdGVyIGRlc2lyZWQKCgkJLlBBUkFNRVRFUiBQYXRoCgkJCVRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGxvYWQKCgkJLkVYQU1QTEUKCQkJUFMgQzpcPiAuIEltcG9ydC1Nb2R1bGVGaWxlIC1GaWxlICRmdW5jdGlvbi5GdWxsTmFtZQoKCQkJSW1wb3J0cyB0aGUgZmlsZSBzdG9yZWQgaW4gJGZ1bmN0aW9uIGFjY29yZGluZyB0byBpbXBvcnQgcG9saWN5CgkjPgoJW0NtZGxldEJpbmRpbmcoKV0KCVBhcmFtICgKCQlbc3RyaW5nXQoJCSRQYXRoCgkpCgoJJHJlc29sdmVkUGF0aCA9ICRFeGVjdXRpb25Db250ZXh0LlNlc3Npb25TdGF0ZS5QYXRoLkdldFJlc29sdmVkUFNQYXRoRnJvbVBTUGF0aCgkUGF0aCkuUHJvdmlkZXJQYXRoCglpZiAoJGRvRG90U291cmNlKSB7IC4gJHJlc29sdmVkUGF0aCB9CgllbHNlIHsgJEV4ZWN1dGlvbkNvbnRleHQuSW52b2tlQ29tbWFuZC5JbnZva2VTY3JpcHQoJGZhbHNlLCAoW3NjcmlwdGJsb2NrXTo6Q3JlYXRlKFtpby5maWxlXTo6UmVhZEFsbFRleHQoJHJlc29sdmVkUGF0aCkpKSwgJG51bGwsICRudWxsKSB9Cn0KCiNyZWdpb24gTG9hZCBpbmRpdmlkdWFsIGZpbGVzCmlmICgkaW1wb3J0SW5kaXZpZHVhbEZpbGVzKQp7CgkjIEV4ZWN1dGUgUHJlaW1wb3J0IGFjdGlvbnMKCWZvcmVhY2ggKCRwYXRoIGluICgmICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEiKSkgewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJHBhdGgKCX0KCgkjIEltcG9ydCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKQoJewoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lCgl9CgoJIyBJbXBvcnQgYWxsIGludGVybmFsIGZ1bmN0aW9ucyB3aGljaCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIEV4dGVuc2lvbiBhbmQgdGhlIE1haW4tTW9kdWxlCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGZ1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbCIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKSB7CgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUKCX0KCgkjIEltcG9ydCBhbGwgcHVibGljIGZ1bmN0aW9ucwoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkKCXsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQoJfQoKCSMgRXhlY3V0ZSBQb3N0aW1wb3J0IGFjdGlvbnMKCWZvcmVhY2ggKCRwYXRoIGluICgmICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHBvc3RpbXBvcnQucHMxIikpIHsKCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRwYXRoCgl9CgoJIyBFbmQgaXQgaGVyZSwgZG8gbm90IGxvYWQgY29tcGlsZWQgY29kZSBiZWxvdwoJcmV0dXJuCn0KI2VuZHJlZ2lvbiBMb2FkIGluZGl2aWR1YWwgZmlsZXMKCiNyZWdpb24gTG9hZCBjb21waWxlZCBjb2RlCiI8Y29tcGlsZSBjb2RlIGludG8gaGVyZT4iCiNlbmRyZWdpb24gTG9hZCBjb21waWxlZCBjb2RlAQkdAgAACR4CAAAGHwIAAChTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi5wc20xBiACAACBAS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNtMQlbAAAACSICAAAJIwIAAAF+AQAAPgAAAAkkAgAABiUCAAAJZnVuY3Rpb25zBiYCAABEL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9mdW5jdGlvbnMJWwAAAAkoAgAACSkCAAABfwEAAD4AAAAJKgIAAAYrAgAAB2dlbmVyYWwGLAIAAEIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL2dlbmVyYWwJWwAAAAkuAgAACS8CAAABgAEAAHAAAAAGMAIAANYacGFyYW0gKAoJJFRlc3RHZW5lcmFsID0gJHRydWUsCgoJJFRlc3RGdW5jdGlvbnMgPSAkdHJ1ZSwKCglbVmFsaWRhdGVTZXQoJ05vbmUnLCAnTm9ybWFsJywgJ0RldGFpbGVkJywgJ0RpYWdub3N0aWMnKV0KCVtBbGlhcygnU2hvdycpXQoJJE91dHB1dCA9ICJOb25lIiwKCgkkSW5jbHVkZSA9ICIqIiwKCgkkRXhjbHVkZSA9ICIiCikKCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiU3RhcnRpbmcgVGVzdHMiCgpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkltcG9ydGluZyBNb2R1bGUiCgokZ2xvYmFsOnRlc3Ryb290ID0gJFBTU2NyaXB0Um9vdAokZ2xvYmFsOl9fcGVzdGVyX2RhdGEgPSBAeyB9CgpSZW1vdmUtTW9kdWxlIMO+bmFtZcO+IC1FcnJvckFjdGlvbiBJZ25vcmUKSW1wb3J0LU1vZHVsZSAiJFBTU2NyaXB0Um9vdFwuLlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEiCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc20xIiAtRm9yY2UKCiMgTmVlZCB0byBpbXBvcnQgZXhwbGljaXRseSBzbyB3ZSBjYW4gdXNlIHRoZSBjb25maWd1cmF0aW9uIGNsYXNzCkltcG9ydC1Nb2R1bGUgUGVzdGVyCgrDviF0ZXN0Zm9sZGVyIcO+CgokdG90YWxGYWlsZWQgPSAwCiR0b3RhbFJ1biA9IDAKCiR0ZXN0cmVzdWx0cyA9IEAoKQokY29uZmlnID0gW1Blc3RlckNvbmZpZ3VyYXRpb25dOjpEZWZhdWx0CsO+IXBlc3RlcmNvbmZpZyHDvgoKI3JlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cwppZiAoJFRlc3RHZW5lcmFsKQp7CglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIk1vZHVsZXMgaW1wb3J0ZWQsIHByb2NlZWRpbmcgd2l0aCBnZW5lcmFsIHRlc3RzIgoJZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRQU1NjcmlwdFJvb3RcZ2VuZXJhbCIgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5UZXN0cy5wczEiKSkKCXsKCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9CgkJaWYgKCRmaWxlLk5hbWUgLWxpa2UgJEV4Y2x1ZGUpIHsgY29udGludWUgfQoKCQlXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBTaWduaWZpY2FudCAtTWVzc2FnZSAiICBFeGVjdXRpbmcgPGM9J2VtJz4kKCRmaWxlLk5hbWUpPC9jPiIKCQkkY29uZmlnLlRlc3RSZXN1bHQuT3V0cHV0UGF0aCA9IEpvaW4tUGF0aCAiJFBTU2NyaXB0Um9vdFwuLlwuLlxUZXN0UmVzdWx0cyIgIlRFU1QtJCgkZmlsZS5CYXNlTmFtZSkueG1sIgoJCSRjb25maWcuUnVuLlBhdGggPSAkZmlsZS5GdWxsTmFtZQoJCSRjb25maWcuUnVuLlBhc3NUaHJ1ID0gJHRydWUKCQkkY29uZmlnLk91dHB1dC5WZXJib3NpdHkgPSAkT3V0cHV0CiAgICAJJHJlc3VsdHMgPSBJbnZva2UtUGVzdGVyIC1Db25maWd1cmF0aW9uICRjb25maWcKCQlmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQoJCXsKCQkJJHRvdGFsUnVuICs9ICRyZXN1bHQuVG90YWxDb3VudAoJCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudAoJCQkkcmVzdWx0LlRlc3RzIHwgV2hlcmUtT2JqZWN0IFJlc3VsdCAtbmUgJ1Bhc3NlZCcgfCBGb3JFYWNoLU9iamVjdCB7CgkJCQkkdGVzdHJlc3VsdHMgKz0gW3BzY3VzdG9tb2JqZWN0XUB7CgkJCQkJQmxvY2sgICAgPSAkXy5CbG9jawoJCQkJCU5hbWUJID0gIkl0ICQoJF8uTmFtZSkiCgkJCQkJUmVzdWx0ICAgPSAkXy5SZXN1bHQKCQkJCQlNZXNzYWdlICA9ICRfLkVycm9yUmVjb3JkLkRpc3BsYXlFcnJvck1lc3NhZ2UKCQkJCX0KCQkJfQoJCX0KCX0KfQojZW5kcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzCgokZ2xvYmFsOl9fcGVzdGVyX2RhdGEuU2NyaXB0QW5hbHl6ZXIgfCBPdXQtSG9zdAoKI3JlZ2lvbiBUZXN0IENvbW1hbmRzCmlmICgkVGVzdEZ1bmN0aW9ucykKewoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJQcm9jZWVkaW5nIHdpdGggaW5kaXZpZHVhbCB0ZXN0cyIKCWZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkUFNTY3JpcHRSb290XGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKlRlc3RzLnBzMSIpKQoJewoJCWlmICgkZmlsZS5OYW1lIC1ub3RsaWtlICRJbmNsdWRlKSB7IGNvbnRpbnVlIH0KCQlpZiAoJGZpbGUuTmFtZSAtbGlrZSAkRXhjbHVkZSkgeyBjb250aW51ZSB9CgoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyAkKCRmaWxlLk5hbWUpIgoJCSRjb25maWcuVGVzdFJlc3VsdC5PdXRwdXRQYXRoID0gSm9pbi1QYXRoICIkUFNTY3JpcHRSb290XC4uXC4uXFRlc3RSZXN1bHRzIiAiVEVTVC0kKCRmaWxlLkJhc2VOYW1lKS54bWwiCgkJJGNvbmZpZy5SdW4uUGF0aCA9ICRmaWxlLkZ1bGxOYW1lCgkJJGNvbmZpZy5SdW4uUGFzc1RocnUgPSAkdHJ1ZQoJCSRjb25maWcuT3V0cHV0LlZlcmJvc2l0eSA9ICRPdXRwdXQKICAgIAkkcmVzdWx0cyA9IEludm9rZS1QZXN0ZXIgLUNvbmZpZ3VyYXRpb24gJGNvbmZpZwoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpCgkJewoJCQkkdG90YWxSdW4gKz0gJHJlc3VsdC5Ub3RhbENvdW50CgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50CgkJCSRyZXN1bHQuVGVzdHMgfCBXaGVyZS1PYmplY3QgUmVzdWx0IC1uZSAnUGFzc2VkJyB8IEZvckVhY2gtT2JqZWN0IHsKCQkJCSR0ZXN0cmVzdWx0cyArPSBbcHNjdXN0b21vYmplY3RdQHsKCQkJCQlCbG9jayAgICA9ICRfLkJsb2NrCgkJCQkJTmFtZQkgPSAiSXQgJCgkXy5OYW1lKSIKCQkJCQlSZXN1bHQgICA9ICRfLlJlc3VsdAoJCQkJCU1lc3NhZ2UgID0gJF8uRXJyb3JSZWNvcmQuRGlzcGxheUVycm9yTWVzc2FnZQoJCQkJfQoJCQl9CgkJfQoJfQp9CiNlbmRyZWdpb24gVGVzdCBDb21tYW5kcwoKJHRlc3RyZXN1bHRzIHwgU29ydC1PYmplY3QgRGVzY3JpYmUsIENvbnRleHQsIE5hbWUsIFJlc3VsdCwgTWVzc2FnZSB8IEZvcm1hdC1MaXN0CgppZiAoJHRvdGFsRmFpbGVkIC1lcSAwKSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICJBbGwgPGM9J2VtJz4kdG90YWxSdW48L2M+IHRlc3RzIGV4ZWN1dGVkIHdpdGhvdXQgYSBzaW5nbGUgZmFpbHVyZSEiIH0KZWxzZSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICI8Yz0nZW0nPiR0b3RhbEZhaWxlZCB0ZXN0czwvYz4gb3V0IG9mIDxjPSdzdWInPiR0b3RhbFJ1bjwvYz4gdGVzdHMgZmFpbGVkISIgfQoKaWYgKCR0b3RhbEZhaWxlZCAtZ3QgMCkKewoJdGhyb3cgIiR0b3RhbEZhaWxlZCAvICR0b3RhbFJ1biB0ZXN0cyBmYWlsZWQhIgp9AQkxAgAACTICAAAGMwIAAApwZXN0ZXIucHMxBjQCAABFL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9wZXN0ZXIucHMxCVsAAAAJNgIAAAk3AgAAAYEBAABwAAAABjgCAACEByMgRGVzY3JpcHRpb24KClRoaXMgaXMgdGhlIGZvbGRlciwgd2hlcmUgYWxsIHRoZSB0ZXN0cyBnby4KClRob3NlIGFyZSBzdWJkaXZpZGVkIGluIHR3byBjYXRlZ29yaWVzOgoKIC0gR2VuZXJhbAogLSBGdW5jdGlvbgoKIyMgR2VuZXJhbCBUZXN0cwoKR2VuZXJhbCB0ZXN0cyBhcmUgZnVuY3Rpb24gZ2VuZXJpYyBhbmQgdGVzdCBmb3IgZ2VuZXJhbCBwb2xpY2llcy4KClRoZXNlIHRlc3Qgc2NhbiBhbnN3ZXIgcXVlc3Rpb25zIHN1Y2ggYXM6CgogLSBJcyBteSBtb2R1bGUgZm9sbG93aW5nIG15IHN0eWxlIGd1aWRlcz8KIC0gRG9lcyBhbnkgb2YgbXkgc2NyaXB0cyBoYXZlIGEgc3ludGF4IGVycm9yPwogLSBEbyBteSBzY3JpcHRzIHVzZSBjb21tYW5kcyBJIGRvIG5vdCB3YW50IHRoZW0gdG8gdXNlPwogLSBEbyBteSBjb21tYW5kcyBmb2xsb3cgYmVzdCBwcmFjdGljZXM/CiAtIERvIG15IGNvbW1hbmRzIGhhdmUgcHJvcGVyIGhlbHA/CgpCYXNpY2FsbHksIHRoZXNlIGFsbG93IGEgZ2VuZXJhbCBtb2R1bGUgaGVhbHRoIGNoZWNrLgoKVGhlc2UgdGVzdHMgYXJlIGFscmVhZHkgcHJvdmlkZWQgYXMgcGFydCBvZiB0aGUgdGVtcGxhdGUuCgojIyBGdW5jdGlvbiBUZXN0cwoKQSBoZWFsdGh5IG1vZHVsZSBzaG91bGQgcHJvdmlkZSB1bml0IGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgdGhlIGNvbW1hbmRzICYgY29tcG9uZW50cyBpdCBzaGlwcy4KT25seSB0aGVuIGNhbiBiZSBndWFyYW50ZWVkLCB0aGF0IHRoZXkgd2lsbCBhY3R1YWxseSBwZXJmb3JtIGFzIHByb21pc2VkLgoKSG93ZXZlciwgYXMgZWFjaCBzdWNoIHRlc3QgbXVzdCBiZSBzcGVjaWZpYyB0byB0aGUgZnVuY3Rpb24gaXQgdGVzdHMsIHRoZXJlIGNhbm5vdCBiZSBtdWNoIGluIHRoZSB3YXkgb2YgdGVtcGxhdGVzLgEJOQIAAAk6AgAABjsCAAAJcmVhZG1lLm1kBjwCAABEL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9yZWFkbWUubWQJWwAAAAk+AgAACT8CAAABggEAAHAAAAAGQAIAAIILIyBYTUwKClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSBwcm9qZWN0IFhNTCBmaWxlcyBnbywgbm90YWJseToKCiAtIEZvcm1hdCBYTUwKIC0gVHlwZSBFeHRlbnNpb24gWE1MCgpFeHRlcm5hbCBoZWxwIGZpbGVzIHNob3VsZCBfbm90XyBiZSBwbGFjZWQgaW4gdGhpcyBmb2xkZXIhCgojIyBOb3RlcyBvbiBGaWxlcyBhbmQgTmFtaW5nCgpUaGVyZSBzaG91bGQgYmUgb25seSBvbmUgZm9ybWF0IGZpbGUgYW5kIG9uZSB0eXBlIGV4dGVuc2lvbiBmaWxlIHBlciBwcm9qZWN0LCBhcyBpbXBvcnRpbmcgdGhlbSBoYXMgYSBub3RhYmxlIGltcGFjdCBvbiBpbXBvcnQgdGltZXMuCgogLSBUaGUgRm9ybWF0IFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LkZvcm1hdC5wczF4bWxgCiAtIFRoZSBUeXBlIEV4dGVuc2lvbiBYTUwgc2hvdWxkIGJlIG5hbWVkIGDDvm5hbWXDvi5UeXBlcy5wczF4bWxgCgojIyBUb29scwoKIyMjIE5ldy1QU01ERm9ybWF0VGFibGVEZWZpbml0aW9uCgpUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhbiBpbnB1dCBvYmplY3QgYW5kIGdlbmVyYXRlIGZvcm1hdCB4bWwgZm9yIGFuIGF1dG8tc2l6ZWQgdGFibGUuCgpJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBmb3JtYXRzLgoKIyMjIEdldC1QU0ZUeXBlU2VyaWFsaXphdGlvbkRhdGEKCmBgYApDIyBXYXJuaW5nIQpUaGlzIHNlY3Rpb24gaXMgb25seSBpbnRlcmVzdCBpZiB5b3UncmUgdXNpbmcgQyMgdG9nZXRoZXIgd2l0aCBQb3dlclNoZWxsLgpgYGAKClRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHR5cGUgZXh0ZW5zaW9uIFhNTCB0aGF0IGFsbG93cyBQb3dlclNoZWxsIHRvIGNvbnZlcnQgdHlwZXMgd3JpdHRlbiBpbiBDIyB0byBiZSB3cml0dGVuIHRvIGZpbGUgYW5kIHJlc3RvcmVkIGZyb20gaXQgd2l0aG91dCBiZWluZyAnRGVzZXJpYWxpemVkJy4gQWxzbyB3b3JrcyBmb3Igam9icyBvciByZW1vdGluZywgaWYgYm90aCBzaWRlcyBoYXZlIHRoZSBgUFNGcmFtZXdvcmtgIG1vZHVsZSBhbmQgdHlwZSBleHRlbnNpb24gbG9hZGVkLgoKSW4gb3JkZXIgZm9yIGEgY2xhc3MgdG8gYmUgZWxpZ2libGUgZm9yIHRoaXMsIGl0IG5lZWRzIHRvIGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBydWxlczoKCiAtIEhhdmUgdGhlIGBbU2VyaWFsaXphYmxlXWAgYXR0cmlidXRlCiAtIEJlIHB1YmxpYwogLSBIYXZlIGFuIGVtcHR5IGNvbnN0cnVjdG9yCiAtIEFsbG93IGFsbCBwdWJsaWMgcHJvcGVydGllcy9maWVsZHMgdG8gYmUgc2V0IChldmVuIGlmIHNldHRpbmcgaXQgZG9lc24ndCBkbyBhbnl0aGluZykgd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24uCgpgYGAKbm9uLXB1YmxpYyBwcm9wZXJ0aWVzIGFuZCBmaWVsZHMgd2lsbCBiZSBsb3N0IGluIHRoaXMgcHJvY2VzcyEKYGBgAQlBAgAACUICAAAGQwIAAAlyZWFkbWUubWQGRAIAAEIvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3htbC9yZWFkbWUubWQJWwAAAAlGAgAACUcCAAABgwEAAHAAAAAGSAIAAMoFPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTE2Ij8+CjxDb25maWd1cmF0aW9uPgoJPFZpZXdEZWZpbml0aW9ucz4KCQk8IS0tIEZvby5CYXIgLS0+CgkJPFZpZXc+CgkJCTxOYW1lPkZvby5CYXI8L05hbWU+CgkJCTxWaWV3U2VsZWN0ZWRCeT4KCQkJCTxUeXBlTmFtZT5Gb28uQmFyPC9UeXBlTmFtZT4KCQkJPC9WaWV3U2VsZWN0ZWRCeT4KCQkJPFRhYmxlQ29udHJvbD4KCQkJCTxBdXRvU2l6ZS8+CgkJCQk8VGFibGVIZWFkZXJzPgoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+CgkJCQkJPFRhYmxlQ29sdW1uSGVhZGVyLz4KCQkJCTwvVGFibGVIZWFkZXJzPgoJCQkJPFRhYmxlUm93RW50cmllcz4KCQkJCQk8VGFibGVSb3dFbnRyeT4KCQkJCQkJPFRhYmxlQ29sdW1uSXRlbXM+CgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPgoJCQkJCQkJCTxQcm9wZXJ0eU5hbWU+Rm9vPC9Qcm9wZXJ0eU5hbWU+CgkJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbT4KCQkJCQkJCTxUYWJsZUNvbHVtbkl0ZW0+CgkJCQkJCQkJPFByb3BlcnR5TmFtZT5CYXI8L1Byb3BlcnR5TmFtZT4KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPgoJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbXM+CgkJCQkJPC9UYWJsZVJvd0VudHJ5PgoJCQkJPC9UYWJsZVJvd0VudHJpZXM+CgkJCTwvVGFibGVDb250cm9sPgoJCTwvVmlldz4KCTwvVmlld0RlZmluaXRpb25zPgo8L0NvbmZpZ3VyYXRpb24+AQlJAgAACUoCAAAGSwIAABbDvm5hbWXDvi5Gb3JtYXQucHMxeG1sBkwCAABPL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi94bWwvw75uYW1lw74uRm9ybWF0LnBzMXhtbAlbAAAACU4CAAAJTwIAAAGEAQAAcAAAAAZQAgAAvAc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pgo8VHlwZXM+CiAgPCEtLSBGb28uQmFyIC0tPgogIDxUeXBlPgogICAgPE5hbWU+RGVzZXJpYWxpemVkLkZvby5CYXI8L05hbWU+CiAgICA8TWVtYmVycz4KICAgICAgPE1lbWJlclNldD4KICAgICAgICA8TmFtZT5QU1N0YW5kYXJkTWVtYmVyczwvTmFtZT4KICAgICAgICA8TWVtYmVycz4KICAgICAgICAgIDxOb3RlUHJvcGVydHk+CiAgICAgICAgICAgIDxOYW1lPgogICAgICAgICAgICAgIFRhcmdldFR5cGVGb3JEZXNlcmlhbGl6YXRpb24KICAgICAgICAgICAgPC9OYW1lPgogICAgICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgICAgRm9vLkJhcgogICAgICAgICAgICA8L1ZhbHVlPgogICAgICAgICAgPC9Ob3RlUHJvcGVydHk+CiAgICAgICAgPC9NZW1iZXJzPgogICAgICA8L01lbWJlclNldD4KICAgIDwvTWVtYmVycz4KICA8L1R5cGU+CiAgPFR5cGU+CiAgICA8TmFtZT5Gb28uQmFyPC9OYW1lPgogICAgPE1lbWJlcnM+CiAgICAgIDxDb2RlUHJvcGVydHkgSXNIaWRkZW49InRydWUiPgogICAgICAgIDxOYW1lPlNlcmlhbGl6YXRpb25EYXRhPC9OYW1lPgogICAgICAgIDxHZXRDb2RlUmVmZXJlbmNlPgogICAgICAgICAgPFR5cGVOYW1lPlBTRnJhbWV3b3JrLlNlcmlhbGl6YXRpb24uU2VyaWFsaXphdGlvblR5cGVDb252ZXJ0ZXI8L1R5cGVOYW1lPgogICAgICAgICAgPE1ldGhvZE5hbWU+R2V0U2VyaWFsaXphdGlvbkRhdGE8L01ldGhvZE5hbWU+CiAgICAgICAgPC9H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ZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACZkCAAANAwdlAgAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACZoCAAANAwdnAgAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACZsCAAAJnAIAAAmdAgAACZ4CAAAHaQIAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmfAgAACaACAAAJoQIAAAoHawIAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmiAgAADQMHbQIAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmjAgAACaQCAAANAgdvAgAAAAEAAAAQAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACaUCAAAJpgIAAAmnAgAACagCAAAJqQIAAAmqAgAACasCAAAJrAIAAAmtAgAADQcHcQIAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmuAgAADQMHcwIAAAABAAAACAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmvAgAACbACAAAJsQIAAAmyAgAACbMCAAANAwd1AgAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACbQCAAAJtQIAAAm2AgAACbcCAAAHdwIAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAm4AgAACbkCAAAJugIAAAoReQIAAAQAAAAGuwIAABRkeW5hbWljc2NyaXB0XzM5NDQzMg0DEXsCAAAEAAAABrwCAAAEbmFtZQ0DEX0CAAAEAAAABr0CAAAEbmFtZQa+AgAABmF1dGhvcga/AgAAB2NvbXBhbnkGwAIAAAtkZXNjcmlwdGlvbhF+AgAABAAAAAbBAgAADWd1aWRFeHRlbnNpb24GwgIAAAR5ZWFyBsMCAAAKcHNmdmVyc2lvbgoRfwIAAAQAAAAGxAIAAARuYW1lDQMRgQIAAAQAAAAGxQIAAARuYW1lDQMRgwIAAAQAAAAGxgIAAARuYW1lDQMHhQIAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAnHAgAADQMHhwIAAAABAAAACAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAnIAgAACckCAAAJygIAAAnLAgAACcwCAAAJzQIAAAnOAgAACc8CAAARiQIAAAQAAAAG0AIAAARuYW1lDQMRigIAAAQAAAAG0QIAAAp0ZXN0Zm9sZGVyBtICAAAMcGVzdGVyY29uZmlnDQIRjAIAAAQAAAAG0wIAAARuYW1lDQMRjgIAAAQAAAAG1AIAAARuYW1lDQMRkAIAAAQAAAAG1QIAAARuYW1lDQMBlwIAAHAAAAAG1gIAAOUQPCMKVGhpcyBpcyBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZQoKQnkgZGVmYXVsdCwgaXQgaXMgZW5vdWdoIHRvIGhhdmUgYSBzaW5nbGUgb25lIG9mIHRoZW0sCmhvd2V2ZXIgaWYgeW91IGhhdmUgZW5vdWdoIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8ganVzdGlmeSBoYXZpbmcgbXVsdGlwbGUgY29waWVzIG9mIGl0LApmZWVsIHRvdGFsbHkgZnJlZSB0byBzcGxpdCB0aGVtIGludG8gbXVsdGlwbGUgZmlsZXMuCiM+Cgo8IwojIEV4YW1wbGUgQ29uZmlndXJhdGlvbgpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74nIC1OYW1lICdFeGFtcGxlLlNldHRpbmcnIC1WYWx1ZSAxMCAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnaW50ZWdlcicgLUhhbmRsZXIgeyB9IC1EZXNjcmlwdGlvbiAiRXhhbXBsZSBjb25maWd1cmF0aW9uIHNldHRpbmcuIFlvdXIgbW9kdWxlIGNhbiB0aGVuIHVzZSB0aGUgc2V0dGluZyB1c2luZyAnR2V0LVBTRkNvbmZpZ1ZhbHVlJyIKIz4KClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLU5hbWUgJ0ltcG9ydC5Eb0RvdFNvdXJjZScgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGRvdHNvdXJjZWQgb24gaW1wb3J0LiBCeSBkZWZhdWx0LCB0aGUgZmlsZXMgb2YgdGhpcyBtb2R1bGUgYXJlIHJlYWQgYXMgc3RyaW5nIHZhbHVlIGFuZCBpbnZva2VkLCB3aGljaCBpcyBmYXN0ZXIgYnV0IHdvcnNlIG9uIGRlYnVnZ2luZy4iClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLU5hbWUgJ0ltcG9ydC5JbmRpdmlkdWFsRmlsZXMnIC1WYWx1ZSAkZmFsc2UgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2Jvb2wnIC1EZXNjcmlwdGlvbiAiV2hldGhlciB0aGUgbW9kdWxlIGZpbGVzIHNob3VsZCBiZSBpbXBvcnRlZCBpbmRpdmlkdWFsbHkuIER1cmluZyB0aGUgbW9kdWxlIGJ1aWxkLCBhbGwgbW9kdWxlIGNvZGUgaXMgY29tcGlsZWQgaW50byBmZXcgZmlsZXMsIHdoaWNoIGFyZSBpbXBvcnRlZCBpbnN0ZWFkIGJ5IGRlZmF1bHQuIExvYWRpbmcgdGhlIGNvbXBpbGVkIHZlcnNpb25zIGlzIGZhc3RlciwgdXNpbmcgdGhlIGluZGl2aWR1YWwgZmlsZXMgaXMgZWFzaWVyIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3Rpbmcgb3V0IGFkanVzdG1lbnRzLiIKCiRjdXJyZW50UGF0aCA9ICIkTW9kdWxlUm9vdFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEiCiRsYXRlc3RJbnN0YWxsZWRNb2R1bGVzID0gZ2V0LW1vZHVsZSBTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+IC1MaXN0QXZhaWxhYmxlIHwgU29ydC1PYmplY3QgdmVyc2lvbiAtRGVzY2VuZGluZyB8IFNlbGVjdC1PYmplY3QgLUV4cGFuZFByb3BlcnR5IHBhdGggLWZpcnN0IDEKV3JpdGUtUFNGTWVzc2FnZSAiQ2hlY2tpbmcgaWYgY3VycmVudCBtb2R1bGUgJyRjdXJyZW50UGF0aCcgYWdhaW5zdCBsYXRlc3QgaW5zdGFsbGVkIHZlcnNpb24gJyRsYXRlc3RJbnN0YWxsZWRNb2R1bGVzJyIKaWYgKCRjdXJyZW50UGF0aCAtZXEgJGxhdGVzdEluc3RhbGxlZE1vZHVsZXMpIHsKICAgIFNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLU5hbWUgJ0ludGVyQWN0aXZlUmVnaXN0ZXIubW9kdWxlcGF0aCcgLVZhbHVlICJTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+IiAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBzdHJpbmcgLURlc2NyaXB0aW9uICJNb2R1bGUgUGF0aCBmb3IgVmF1bHQgUmVnaXN0cmF0aW9uLCBOYW1lIG9mIHRoZSBtb2R1bGUgYXMgbGF0ZXN0IGluc3RhbGxlZCB2ZXJzaW9uIgp9CmVsc2UgewogICAgU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTmFtZSAnSW50ZXJBY3RpdmVSZWdpc3Rlci5tb2R1bGVwYXRoJyAtVmFsdWUgJGN1cnJlbnRQYXRoIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIk1vZHVsZSBQYXRoIGZvciBWYXVsdCBSZWdpc3RyYXRpb24sIGRldmVsb3BtZW50IHBvaW50IHRvIGxvY2FsIG5vbiBpbnN0YWxsZWQgUFNNMSIKfQEJ1wIAAAnYAgAABtkCAAARY29uZmlndXJhdGlvbi5wczEG2gIAAF4vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb24ucHMxCVsAAAAJ3AIAAAndAgAAAZgCAABwAAAABt4CAADxAyMgQ29uZmlndXJhdGlvbnMKClRocm91Z2ggdGhlIGBQU0ZyYW1ld29ya2AgeW91IGhhdmUgYSBzaW1wbGUgbWV0aG9kIHRoYXQgYWxsb3dzIHlvdSB0byAuLi4KCiAtIFB1Ymxpc2ggc2V0dGluZ3MKIC0gV2l0aCBvbmJvYXJkIGRvY3VtZW50YXRpb24KIC0gSW5wdXQgdmFsaWRhdGlvbgogLSBTY3JpcHRzIHRoYXQgcnVuIG9uIGNoYW5nZSBvZiBzZXR0aW5ncwogLSBUaGF0IGNhbiBiZSBkaXNjb3ZlcmVkIGFuZCB1cGRhdGVkIGJ5IHRoZSB1c2VyCiAtIFRoYXQgY2FuIGJlIGFkbWluaXN0cmF0ZWQgYnkgcG9saWN5ICYgRFNDCgpUaGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgYSBiaXQgdG9vIGNvbXBsZXggdG8gZGVzY3JpYmUgaW4gYSBoZWxwIGZpbGUsIHlvdSBjYW4gaG93ZXZlciB2aXNpdCB1cyBhdCBodHRwOi8vcHNmcmFtZXdvcmsub3JnIGZvciBkZXRhaWxlZCBndWlkYW5jZS4KCkFuIGV4YW1wbGUgY2FuIGJlIHNlZW4gaW4gdGhlIGF0dGFjaGVkIHBzMSBmaWxlAQnfAgAACeACAAAG4QIAAAlyZWFkbWUubWQG4gIAAFYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL2NvbmZpZ3VyYXRpb25zL3JlYWRtZS5tZAlbAAAACeQCAAAJ5QIAAAGZAgAAcAAAAAbmAgAA1QEjIEZ1bmN0aW9ucwoKVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgZ28uCgpEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG1vZHVsZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViZGl2aWRlIHRoZW0gaW50byBzdWJmb2xkZXJzLgoKVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCecCAAAJ6AIAAAbpAgAACXJlYWRtZS5tZAbqAgAAUS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvZnVuY3Rpb25zL3JlYWRtZS5tZAlbAAAACewCAAAJ7QIAAAGaAgAAcAAAAAbuAgAA+QI8IwpTdG9yZWQgc2NyaXB0YmxvY2tzIGFyZSBhdmFpbGFibGUgaW4gW1BzZlZhbGlkYXRlU2NyaXB0KCldIGF0dHJpYnV0ZXMuClRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNlbnRyYWxseSBwcm92aWRlIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLAp3aXRob3V0IGhhdmluZyB0byBtYWludGFpbiBpdCBpbiBzZXBhcmF0ZSBsb2NhdGlvbnMuCgpJdCBhbHNvIHByZXZlbnRzIGxlbmd0aHkgdmFsaWRhdGlvbiBzY3JpcHRibG9ja3MgZnJvbSBtYWtpbmcgeW91ciBwYXJhbWV0ZXIgYmxvY2sKaGFyZCB0byByZWFkLgoKU2V0LVBTRlNjcmlwdGJsb2NrIC1OYW1lICfDvm5hbWXDvi5TY3JpcHRCbG9ja05hbWUnIC1TY3JpcHRibG9jayB7CgkKfQojPgEJ7wIAAAnwAgAABvECAAAQc2NyaXB0YmxvY2tzLnBzMQbyAgAAWy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvc2NyaXB0YmxvY2tzL3NjcmlwdGJsb2Nrcy5wczEJWwAAAAn0AgAACfUCAAABmwIAAHAAAAAG9gIAAOIJTmV3LVBTRkxpY2Vuc2UgLVByb2R1Y3QgJ8O+bmFtZcO+JyAtTWFudWZhY3R1cmVyICfDvmF1dGhvcsO+JyAtUHJvZHVjdFZlcnNpb24gJHNjcmlwdDpNb2R1bGVWZXJzaW9uIC1Qcm9kdWN0VHlwZSBNb2R1bGUgLU5hbWUgTUlUIC1WZXJzaW9uICIxLjAuMC4wIiAtRGF0ZSAoR2V0LURhdGUgIsO+IWRhdGUhw74iKSAtVGV4dCBAIgpDb3B5cmlnaHQgKGMpIMO+IXllYXIhw74gw75hdXRob3LDvgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KIkABCfcCAAAJ+AIAAAb5AgAAC2xpY2Vuc2UucHMxBvoCAABRL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9zY3JpcHRzL2xpY2Vuc2UucHMxCVsAAAAJ/AIAAAn9AgAAAZwCAABwAAAABv4CAACeBjwjCkFkZCBhbGwgdGhpbmdzIHlvdSB3YW50IHRvIHJ1biBhZnRlciBpbXBvcnRpbmcgdGhlIG1haW4gZnVuY3Rpb24gY29kZQoKV0FSTklORzogT05MWSBwcm92aWRlIHBhdGhzIHRvIGZpbGVzIQoKQWZ0ZXIgYnVpbGRpbmcgdGhlIG1vZHVsZSwgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkLCBhZGRpbmcgYW55dGhpbmcgYnV0IHBhdGhzIHRvIGZpbGVzIC4uLgotIFdpbGwgbm90IHdvcmsgYWZ0ZXIgcHVibGlzaGluZwotIENvdWxkIGJyZWFrIHRoZSBidWlsZCBwcm9jZXNzCiM+CgokbW9kdWxlUm9vdCA9IFNwbGl0LVBhdGggKFNwbGl0LVBhdGggJFBTU2NyaXB0Um9vdCkKCiMgTG9hZCBDb25maWd1cmF0aW9ucwooR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcY29uZmlndXJhdGlvbnNcKi5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lCgojIExvYWQgU2NyaXB0YmxvY2tzCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRibG9ja3NcKi5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lCgojIExvYWQgVGFiIEV4cGFuc2lvbgooR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcdGVwcFwqLnRlcHAucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKS5GdWxsTmFtZQoKIyBMb2FkIFRhYiBFeHBhbnNpb24gQXNzaWdubWVudAoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcdGVwcFxhc3NpZ25tZW50LnBzMSIKCiMgTG9hZCBMaWNlbnNlCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXGxpY2Vuc2UucHMxIgEJ/wIAAAkAAwAABgEDAAAOcG9zdGltcG9ydC5wczEGAgMAAFQvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3NjcmlwdHMvcG9zdGltcG9ydC5wczEJWwAAAAkEAwAACQUDAAABnQIAAHAAAAAGBgMAAKMDPCMKQWRkIGFsbCB0aGluZ3MgeW91IHdhbnQgdG8gcnVuIGJlZm9yZSBpbXBvcnRpbmcgdGhlIG1haW4gZnVuY3Rpb24gY29kZS4KCldBUk5JTkc6IE9OTFkgcHJvdmlkZSBwYXRocyB0byBmaWxlcyEKCkFmdGVyIGJ1aWxkaW5nIHRoZSBtb2R1bGUsIHRoaXMgZmlsZSB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZCwgYWRkaW5nIGFueXRoaW5nIGJ1dCBwYXRocyB0byBmaWxlcyAuLi4KLSBXaWxsIG5vdCB3b3JrIGFmdGVyIHB1Ymxpc2hpbmcKLSBDb3VsZCBicmVhayB0aGUgYnVpbGQgcHJvY2VzcwojPgoKJG1vZHVsZVJvb3QgPSBTcGxpdC1QYXRoIChTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QpCgojIExvYWQgdGhlIHN0cmluZ3MgdXNlZCBpbiBtZXNzYWdlcwoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xzdHJpbmdzLnBzMSIBCQcDAAAJCAMAAAYJAwAADXByZWltcG9ydC5wczEGCgMAAFMvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3NjcmlwdHMvcHJlaW1wb3J0LnBzMQlbAAAACQwDAAAJDQMAAAGeAgAAcAAAAAYOAwAAwgM8IwpUaGlzIGZpbGUgbG9hZHMgdGhlIHN0cmluZ3MgZG9jdW1lbnRzIGZyb20gdGhlIHJlc3BlY3RpdmUgbGFuZ3VhZ2UgZm9sZGVycy4KVGhpcyBhbGxvd3MgbG9jYWxpemluZyBtZXNzYWdlcyBhbmQgZXJyb3JzLgpMb2FkIHBzZDEgbGFuZ3VhZ2UgZmlsZXMgZm9yIGVhY2ggbGFuZ3VhZ2UgeW91IHdpc2ggdG8gc3VwcG9ydC4KUGFydGlhbCB0cmFuc2xhdGlvbnMgYXJlIGFjY2VwdGFibGUgLSB3aGVuIG1pc3NpbmcgYSBjdXJyZW50IGxhbmd1YWdlIG1lc3NhZ2UsCml0IHdpbGwgZmFsbGJhY2sgdG8gRW5nbGlzaCBvciBhbm90aGVyIGF2YWlsYWJsZSBsYW5ndWFnZS4KIz4KSW1wb3J0LVBTRkxvY2FsaXplZFN0cmluZyAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGVuLXVzXCoucHNkMSIgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLUxhbmd1YWdlICdlbi1VUycBCQ8DAAAJEAMAAAYRAwAAC3N0cmluZ3MucHMxBhIDAABRL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC9zY3JpcHRzL3N0cmluZ3MucHMxCVsAAAAJFAMAAAkVAwAAAZ8CAABwAAAABhYDAABuPCMKIyBFeGFtcGxlOgpSZWdpc3Rlci1QU0ZUZXBwQXJndW1lbnRDb21wbGV0ZXIgLUNvbW1hbmQgR2V0LUFsY29ob2wgLVBhcmFtZXRlciBUeXBlIC1OYW1lIMO+bmFtZcO+LmFsY29ob2wKIz4BCRcDAAAJGAMAAAYZAwAADmFzc2lnbm1lbnQucHMxBhoDAABRL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9pbnRlcm5hbC90ZXBwL2Fzc2lnbm1lbnQucHMxCVsAAAAJHAMAAAkdAwAAAaACAABwAAAABh4DAACgATwjCiMgRXhhbXBsZToKUmVnaXN0ZXItUFNGVGVwcFNjcmlwdGJsb2NrIC1OYW1lICLDvm5hbWXDvi5hbGNvaG9sIiAtU2NyaXB0QmxvY2sgeyAnQmVlcicsJ01lYWQnLCdXaGlza2V5JywnV2luZScsJ1ZvZGthJywnUnVtICgzeSknLCAnUnVtICg1eSknLCAnUnVtICg3eSknIH0KIz4BCR8DAAAJIAMAAAYhAwAAEGV4YW1wbGUudGVwcC5wczEGIgMAAFMvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L2ludGVybmFsL3RlcHAvZXhhbXBsZS50ZXBwLnBzMQlbAAAACSQDAAAJJQMAAAGhAgAAcAAAAAYmAwAAqAcjIFRhYiBFeHBhbnNpb24KCiMjIERlc2NyaXB0aW9uCgpNb2Rlcm4gVGFiIEV4cGFuc2lvbiB3YXMgb3BlbmVkIHRvIHVzZXJzIHdpdGggdGhlIG1vZHVsZSBgVGFiIEV4cGFuc2lvbiBQbHVzIFBsdXNgIChURVBQKS4KCkl0IGFsbG93cyB5b3UgdG8gZGVmaW5lLCB3aGF0IG9wdGlvbnMgYSB1c2VyIGlzIG9mZmVyZWQgd2hlbiB0YWJiaW5nIHRocm91Z2ggaW5wdXQgb3B0aW9ucy4gVGhpcyBjYW4gc2F2ZSBhIGxvdCBvZiB0aW1lIGZvciB0aGUgdXNlciBhbmQgaXMgY29uc2lkZXJlZCBhIGtleSBlbGVtZW50IGluIHVzZXIgZXhwZXJpZW5jZS4KClRoZSBgUFNGcmFtZXdvcmtgIG9mZmVycyBhIHNpbXBsaWZpZWQgd2F5IG9mIG9mZmVyaW5nIGp1c3QgdGhpcywgYXMgdGhlIHR3byBleGFtcGxlIGZpbGVzIHNob3cuCgojIyBDb25jZXB0CgpDdXN0b20gdGFiIGNvbXBsZXRpb24gaXMgZGVmaW5lZCBpbiB0d28gc3RlcHM6CgogLSBEZWZpbmUgYSBzY3JpcHRibG9jayB0aGF0IGlzIHJ1biB3aGVuIHRoZSB1c2VyIGhpdHMgYFRBQmAgYW5kIHByb3ZpZGVzIHRoZSBzdHJpbmdzIHRoYXQgYXJlIGhpcyBvcHRpb25zLgogLSBBc3NpZ24gdGhhdCBzY3JpcHRibG9jayB0byB0aGUgcGFyYW1ldGVyIG9mIGEgY29tbWFuZC4gWW91IGNhbiBhc3NpZ24gdGhlIHNhbWUgc2NyaXB0YmxvY2sgbXVsdGlwbGUgdGltZXMuCgojIyBTdHJ1Y3R1cmUKCkltcG9ydCBvcmRlciBtYXR0ZXJzLiBJbiBvcmRlciB0byBtYWtlIHRoaW5ncyB3b3JrIHdpdGggdGhlIGRlZmF1bHQgc2NhZmZvbGQsIGZvbGxvdyB0aG9zZSBydWxlczoKCiAtIEFsbCBzY3JpcHRmaWxlcyBfZGVmaW5pbmdfIGNvbXBsZXRpb24gc2NyaXB0YmxvY2tzIGxpa2UgdGhpczogYCoudGVwcC5wczFgCiAtIFB1dCBhbGwgeW91ciBjb21wbGV0aW9uIGFzc2lnbm1lbnRzIGluIGBhc3NpZ25tZW50LnBzMWABCScDAAAJKAMAAAYpAwAACXJlYWRtZS5tZAYqAwAATC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vaW50ZXJuYWwvdGVwcC9yZWFkbWUubWQJWwAAAAksAwAACS0DAAABogIAAHAAAAAGLgMAAOgCIyBiaW4gZm9sZGVyCgpUaGUgYmluIGZvbGRlciBleGlzdHMgdG8gc3RvcmUgYmluYXJ5IGRhdGEuIEFuZCBzY3JpcHRzIHJlbGF0ZWQgdG8gdGhlIHR5cGUgc3lzdGVtLgoKVGhpcyBtYXkgaW5jbHVkZSB5b3VyIG93biBDIy1iYXNlZCBsaWJyYXJ5LCB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMgeW91IHdhbnQgdG8gaW5jbHVkZSAod2F0Y2ggdGhlIGxpY2Vuc2UhKSwgb3IgYSBzY3JpcHQgZGVjbGFyaW5nIHR5cGUgYWNjZWxlcmF0b3JzIChlZmZlY3RpdmVseSBhbGlhc2VzIGZvciAuTkVUIHR5cGVzKQoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVHlwZSBBY2NlbGVyYXRvcnMsIHNlZSB0aGUgaGVscCBvbiBTZXQtUFNGVHlwZUFsaWFzAQkvAwAACTADAAAGMQMAAAlyZWFkbWUubWQGMgMAAGYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Jpbi9yZWFkbWUubWQJWwAAAAk0AwAACTUDAAABowIAAHAAAAAGNgMAAJsBVE9QSUMKCWFib3V0X8O+bmFtZcO+CgkKU0hPUlQgREVTQ1JJUFRJT04KCUV4cGxhaW5zIGhvdyB0byB1c2UgdGhlIMO+bmFtZcO+IHBvd2Vyc2hlbGwgbW9kdWxlCgkKTE9ORyBERVNDUklQVElPTgoJPEluc2VydCBDb250ZW50IGhlcmU+CgpLRVlXT1JEUwoJw75uYW1lw74BCTcDAAAJOAMAAAY5AwAAF2Fib3V0X8O+bmFtZcO+LmhlbHAudHh0BjoDAAB2L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9lbi11cy9hYm91dF/Dvm5hbWXDvi5oZWxwLnR4dAlbAAAACTwDAAAJPQMAAAGkAgAAcAAAAAY+AwAAmQEjIFRoaXMgaXMgd2hlcmUgdGhlIHN0cmluZ3MgZ28sIHRoYXQgYXJlIHdyaXR0ZW4gYnkKIyBXcml0ZS1QU0ZNZXNzYWdlLCBTdG9wLVBTRkZ1bmN0aW9uIG9yIHRoZSBQU0ZyYW1ld29yayB2YWxpZGF0aW9uIHNjcmlwdGJsb2NrcwpAewoJJ2tleScgPSAnVmFsdWUnCn0BCT8DAAAJQAMAAAZBAwAADHN0cmluZ3MucHNkMQZCAwAAay9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZW4tdXMvc3RyaW5ncy5wc2QxCVsAAAAJRAMAAAlFAwAAAaUCAABwAAAABkYDAACDDmZ1bmN0aW9uIEdldC1TZWNyZXQgewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgUXVlcnkgYSBzaW5nbGUgc2VjcmV0LgoKICAgIC5ERVNDUklQVElPTgogICAgUXVlcnkgYSBzaW5nbGUgc2VjcmV0LgoKICAgIC5QQVJBTUVURVIgTmFtZQogICAgTmFtZSB0byBiZSBzZWFyY2hlZCBmb3IuCgogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUKICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0LgoKICAgIC5FWEFNUExFCiAgICBHZXQtU2VjcmV0IC1WYXVsdCAkVmF1bHRuYW1lIC1OYW1lIGZvbwoKICAgIFJldHVybnMgdGhlIHN0b3JlZCBzZWNyZXQgZm9yIHRoZSBlbnRyeSBmb28uCgogICAgLk5PVEVTCiAgICBHZW5lcmFsIG5vdGVzCiAgICAjPgogICAgW0NtZGxldEJpbmRpbmcoKV0KICAgIHBhcmFtICgKICAgICAgICBbc3RyaW5nXSAkTmFtZSwKICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLAogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgKQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIGlmICgkQWRkaXRpb25hbFBhcmFtZXRlcnMuVmVyYm9zZSkgeyAkVmVyYm9zZVByZWZlcmVuY2UgPSAnY29udGludWUnIH0KCiAgICBXcml0ZS1QU0ZNZXNzYWdlICJHZXQtU2VjcmV0LCBOYW1lPSROYW1lLCAkVmF1bHROYW1lLCBBZGRpdGlvbmFsUGFyYW1ldGVycz0kKCRBZGRpdGlvbmFsUGFyYW1ldGVyc3xDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIgogICAgIyBUT0RPIFBlcmZvcm0gUmV0cmlldmFsIHZvb2RvbyA7LSkKCiAgICAjcmVnaW9uIENoYW5nZSB0aGlzIGNvZGUgYWdhaW5zdCBzb21ldGhpbmcgdXNlZnVsL21vcmUgc2VjcmV0CiAgICAkc2VjcmV0PUdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgIlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRHVtbXlJbXBsbWVudGF0aW9uLlNlY3JldHMuJE5hbWUiCiAgICAjZW5kcmVnaW9uIENoYW5nZSB0aGlzIGNvZGUgYWdhaW5zdCBzb21ldGhpbmcgdXNlZnVsL21vcmUgc2VjcmV0CgogICAgIyBFeGFtcGxlIENvZGUgaGFzIHRvIGJlIHJlbW92ZWQhCiAgICAjICRzZWNyZXQgPSBHZXQtw75mdW5jdGlvblByZWZpeMO+U2VjcmV0CiAgICAjIFdyaXRlLVBTRk1lc3NhZ2UgIkZvdW5kIGAkc2VjcmV0PSQoJHNlY3JldC5nZXR0eXBlKCkpIgogICAgIyAjIENoZWNrIGlmIG9ubHkgb25lIHNlY3JldCB3YXMgcmV0cmlldmVkCiAgICAjIGlmICgkc2VjcmV0LkNvdW50IC1ndCAxIC1hbmQgJHNlY3JldCAtaXNub3QgW2hhc2h0YWJsZV0pIHsKICAgICMgICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEVycm9yICdNdWx0aXBsZSBjcmVkZW50aWFscyBmb3VuZDsgU2VhcmNoIHdpdGggR2V0LVNlY3JldEluZm8gYW5kIHJlcXVpcmUgdGhlIGNvcnJlY3Qgb25lIGJ5ICouTWV0YURhdGEuaWQnCiAgICAjICAgICBXYWl0LVBTRk1lc3NhZ2UKICAgICMgICAgIHRocm93ICdNdWx0aXBsZSBjcmVkZW50aWFscyBmb3VuZDsgU2VhcmNoIHdpdGggR2V0LVNlY3JldEluZm8gYW5kIHJlcXVpcmUgdGhlIGNvcnJlY3Qgb25lIGJ5ICouTWV0YURhdGEuaWQnCiAgICAjIH0KICAgIHJldHVybiAkc2VjcmV0IHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMQp9CgoBCUcDAAAJSAMAAAZJAwAADkdldC1TZWNyZXQucHMxBkoDAABxL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMvR2V0LVNlY3JldC5wczEJWwAAAAlMAwAACU0DAAABpgIAAHAAAAAGTgMAANMRZnVuY3Rpb24gR2V0LVNlY3JldEluZm8gewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgUmV0dXJucyBTZWNyZXRtYW5hZ2VtZW50SW5mb3JtYXRpb24gb2JqZWN0cyBmb3IgdGhlIHJlcXVlc3RlZCBlbnRyaWVzLgoKICAgIC5ERVNDUklQVElPTgogICAgUmV0dXJucyBTZWNyZXRtYW5hZ2VtZW50SW5mb3JtYXRpb24gb2JqZWN0cyBmb3IgdGhlIHJlcXVlc3RlZCBlbnRyaWVzLgoKICAgIC5QQVJBTUVURVIgRmlsdGVyCiAgICBUaGUgbmFtZSB0byBiZSBzZWFyY2hlZAoKICAgIC5QQVJBTUVURVIgVmF1bHROYW1lCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0LgoKICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4KCiAgICAuRVhBTVBMRQogICAgR2V0LVNlY3JldEluZm8gLVZhdWx0ICRWYXVsdG5hbWUgLU5hbWUgZm9vYmFyCiAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgIFZhdWx0TmFtZQogICAgLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0gICAgICAgICAtLS0tLS0tLS0KICAgIGZvb2JhciBbNWRkOTM3YzQtYjBhMC1lZDExLWE4NzYtMDA1MDU2YmNlOTQ4XSBQU0NyZWRlbnRpYWwgUFdTYWZlSW50CiAgICBmb29iYXIgW2VmMmZlMTFkLWIwYTAtZWQxMS1hODc2LTAwNTA1NmJjZTk0OF0gUFNDcmVkZW50aWFsIFBXU2FmZUludAoKICAgIFJldHVybnMgdGhlIHN0b3JlZCBzZWNyZXQgaW5mby4KCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbQ21kbGV0QmluZGluZygpXQogICAgcGFyYW0gKAogICAgICAgIFtzdHJpbmddICRGaWx0ZXIsCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwKICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgICkKICAgICMgV29ya2Fyb3VuZCBDYXNlU2Vuc2l0aXZlIEhhc2hUYWJsZQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBpZiAoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzLlZlcmJvc2UpIHsgJFZlcmJvc2VQcmVmZXJlbmNlID0gJ2NvbnRpbnVlJyB9CgogICAgV3JpdGUtUFNGTWVzc2FnZSAiR2V0LVNlY3JldEluZm8sIEZpbHRlcj0kRmlsdGVyLCAkVmF1bHROYW1lLCBBZGRpdGlvbmFsUGFyYW1ldGVycz0kKCRBZGRpdGlvbmFsUGFyYW1ldGVyc3xDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIgogICAgIyBUT0RPIFBlcmZvcm0gUmV0cmlldmFsIHZvb2RvbyA7LSkgb3IganVzdCB0aHJvdyAnTm90SW1wbGVtZW50ZWQnIGlmIHlvdXIgdmF1bHQgZG9lcyBub3Qgc3VwcG9ydCBpdAogICAgI3JlZ2lvbiBDaGFuZ2UgdGhpcyBjb2RlIGFnYWluc3Qgc29tZXRoaW5nIHVzZWZ1bC9tb3JlIHNlY3JldAogICAgV3JpdGUtUFNGTWVzc2FnZSAiUXVlcnkgQ29uZmlnICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkR1bW15SW1wbG1lbnRhdGlvbi5TZWNyZXRJbmZvLiRGaWx0ZXInIgogICAgJG1ldGFEYXRhID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSAiU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5EdW1teUltcGxtZW50YXRpb24uU2VjcmV0SW5mby4kRmlsdGVyIiAtRmFsbGJhY2sgKEB7aW5mbyA9ICJUaGlzIHNlY3JldCB3aWxsIGV2YXBvcmF0ZSB3aXRoIHNlc3Npb24gY2xvc3VyZSIgfSkKICAgIFdyaXRlLVBTRk1lc3NhZ2UgIkZvdW5kIGluZm8gJCgkaW5mb3xDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIgogICAgV2FpdC1QU0ZNZXNzYWdlCiAgICAkaW5mbyA9IFtNaWNyb3NvZnQuUG93ZXJTaGVsbC5TZWNyZXRNYW5hZ2VtZW50LlNlY3JldEluZm9ybWF0aW9uXTo6bmV3KAogICAgICAgICRmaWx0ZXIsICMgTmFtZSBvZiBzZWNyZXQKICAgICAgICBbTWljcm9zb2Z0LlBvd2VyU2hlbGwuU2VjcmV0TWFuYWdlbWVudC5TZWNyZXRUeXBlXTo6UFNDcmVkZW50aWFsLCAjIFNlY3JldCBkYXRhIHR5cGUgW01pY3Jvc29mdC5Qb3dlclNoZWxsLlNlY3JldE1hbmFnZW1lbnQuU2VjcmV0VHlwZV0KICAgICAgICAkVmF1bHROYW1lLCAjIE5hbWUgb2YgdmF1bHQKICAgICAgICAkbWV0YURhdGEpCiAgICByZXR1cm4gJGluZm8KICAgICNlbmRyZWdpb24gQ2hhbmdlIHRoaXMgY29kZSBhZ2FpbnN0IHNvbWV0aGluZyB1c2VmdWwvbW9yZSBzZWNyZXQKfQoKAQlPAwAACVADAAAGUQMAABJHZXQtU2VjcmV0SW5mby5wczEGUgMAAHUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy9HZXQtU2VjcmV0SW5mby5wczEJWwAAAAlUAwAACVUDAAABpwIAAHAAAAAGVgMAAMwBIyBGdW5jdGlvbnMKClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSB0aGUgZnVuY3Rpb25zIGdvLgoKRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4KClRoZSBtb2R1bGUgd2lsbCBwaWNrIHVwIGFsbCAucHMxIGZpbGVzIHJlY3Vyc2l2ZWx5AQlXAwAACVgDAAAGWQMAAAlyZWFkbWUubWQGWgMAAGwvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2Z1bmN0aW9ucy9yZWFkbWUubWQJWwAAAAlcAwAACV0DAAABqAIAAHAAAAAGXgMAANwICmZ1bmN0aW9uIFJlbW92ZS1TZWNyZXQgewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgUmVtb3ZlcyBhIHNlY3JldCBmcm9tIHRoZSB2YXVsdC4gTk9UIGltcGxlbWVudGVkIHlldC4KCiAgICAuREVTQ1JJUFRJT04KICAgIFJlbW92ZXMgYSBzZWNyZXQgZnJvbSB0aGUgdmF1bHQuIE5PVCBpbXBsZW1lbnRlZCB5ZXQuCgogICAgLlBBUkFNRVRFUiBOYW1lCiAgICBOYW1lIHRvIGJlIHNlYXJjaGVkIGZvci4KCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuCgogICAgLkVYQU1QTEUKICAgIEFuIGV4YW1wbGUKICAgIGlzIG5vdCBuZWNjZXNzYXJ5CgogICAgQXMgbm90IGltcGxlbWVudGVkCgogICAgLk5PVEVTCiAgICBHZW5lcmFsIG5vdGVzCiAgICAjPgogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTUmV2aWV3VW51c2VkUGFyYW1ldGVyJywgJycpXQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTVXNlU2hvdWxkUHJvY2Vzc2ZvclN0YXRlQ2hhbmdpbmdGdW5jdGlvbnMnLCAnJyldCiAgICBbQ21kbGV0QmluZGluZygpXQogICAgcGFyYW0gKAogICAgICAgIFtzdHJpbmddICROYW1lLAogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICApCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUKICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgaWYgKCRBZGRpdGlvbmFsUGFyYW1ldGVycy5WZXJib3NlKSB7ICRWZXJib3NlUHJlZmVyZW5jZSA9ICdjb250aW51ZScgfQoKICAgICMgVE9ETyBhZGQgeW91ciBkYW5nZXJvdXMgY29kZSA7LSkgb3Iga2VlcCByZW1vdmluZyB1bnN1cHBvcnRlZAogICAgdGhyb3cgIk5vdCBJbXBsZW1lbnRlZCIKfQoKAQlfAwAACWADAAAGYQMAABFSZW1vdmUtU2VjcmV0LnBzMQZiAwAAdC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL1JlbW92ZS1TZWNyZXQucHMxCVsAAAAJZAMAAAllAwAAAakCAABwAAAABmYDAADOC2Z1bmN0aW9uIFNldC1TZWNyZXQgewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgVXBkYXRlcyBhIHNlY3JldCBzdG9yZWQgaW4gdGhlIHZhdWx0LgoKICAgIC5ERVNDUklQVElPTgogICAgVXBkYXRlcyBhIHNlY3JldCBzdG9yZWQgaW4gdGhlIHZhdWx0LgoKICAgIC5QQVJBTUVURVIgTmFtZQogICAgTmFtZSBvZiB0aGUgZW50cnkKCiAgICAuUEFSQU1FVEVSIFNlY3JldAogICAgVGhlIE5ldyBTZWNyZXQuIENhbiBiZSBhIFNlY3VyZVN0cmluZyBvciBhIFBTQ3JlZGVudGlhbC1vYmplY3QKCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4KCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuCgogICAgLkVYQU1QTEUKICAgIFNldC1TZWNyZXQgLVZlcmJvc2UgLVZhdWx0ICRWYXVsdG5hbWUgLVNlY3JldCAoR2V0LUNyZWRlbnRpYWwpIC1OYW1lIGZvbwoKICAgIFVwZGF0ZXMgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIG9mIHRoZSBlbnRyeS4KCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbQ21kbGV0QmluZGluZygpXQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTVXNlU2hvdWxkUHJvY2Vzc2ZvclN0YXRlQ2hhbmdpbmdGdW5jdGlvbnMnLCAnJyldCiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNVc2VPdXRwdXRUeXBlQ29ycmVjdGx5JywgJycpXQogICAgcGFyYW0gKAogICAgICAgIFtzdHJpbmddICROYW1lLAogICAgICAgIFtvYmplY3RdICRTZWNyZXQsCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwKICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgICkKICAgICMgV29ya2Fyb3VuZCBDYXNlU2Vuc2l0aXZlIEhhc2hUYWJsZQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICBpZiAoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzLlZlcmJvc2UpIHsgJFZlcmJvc2VQcmVmZXJlbmNlID0gJ2NvbnRpbnVlJyB9CiAgICAjIFRPRE8gUGVyZm9ybSB1cGRhdGUgdm9vZG9vIDstKQogICAgI3JlZ2lvbiBDaGFuZ2UgdGhpcyBjb2RlIGFnYWluc3Qgc29tZXRoaW5nIHVzZWZ1bC9tb3JlIHNlY3JldAogICAgU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTmFtZSAiRHVtbXlJbXBsbWVudGF0aW9uLlNlY3JldHMuJE5hbWUiIC1WYWx1ZSAkU2VjcmV0IC1IaWRkZW4KICAgICNlbmRyZWdpb24gQ2hhbmdlIHRoaXMgY29kZSBhZ2FpbnN0IHNvbWV0aGluZyB1c2VmdWwvbW9yZSBzZWNyZXQKCiAgICBXYWl0LVBTRk1lc3NhZ2UKICAgIHJldHVybiAkdHJ1ZQp9CgoBCWcDAAAJaAMAAAZpAwAADlNldC1TZWNyZXQucHMxBmoDAABxL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMvU2V0LVNlY3JldC5wczEJWwAAAAlsAwAACW0DAAABqgIAAHAAAAAGbgMAAKYNZnVuY3Rpb24gU2V0LVNlY3JldEluZm8gewogICAgPCMKICAgIC5TWU5PUFNJUwogICAgVXBkYXRlcyBhZGRpdGlvbmFsIGZpZWxkcyBvZiBhIHNpbmdsZSBlbnRyeS4KCiAgICAuREVTQ1JJUFRJT04KICAgIFVwZGF0ZXMgYWRkaXRpb25hbCBmaWVsZHMgb2YgYSBzaW5nbGUgZW50cnkuCgogICAgLlBBUkFNRVRFUiBOYW1lCiAgICBOYW1lIG9mIHRoZSBlbnRyeQoKICAgIC5QQVJBTUVURVIgTWV0YWRhdGEKICAgIFRoZSBIYXNoVGFibGUgd2l0aCB0aGUgZmllbGRzIHRvIHVwZGF0ZS4KICAgIFBvc3NpYmxlIEtleXM6ICdVc2VybmFtZScsICdQYXNzd29yZCcsICdOYW1lJywgJ01lbW8nCgogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUKICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0LgoKICAgIC5FWEFNUExFCiAgICBTZXQtU2VjcmV0SW5mbyAgLVZhdWx0ICRWYXVsdG5hbWUgIC1OYW1lIGZvbyAtTWV0YWRhdGEgQHttZW1vPSdOb3RpeiAyJzt1c2VybmFtZT0nZm9vJztwYXNzd29yZD0kbXlOZXdTZWNyZXR9CgogICAgVXBkYXRlcyB0aGUgZW50cnkgd2l0aCBuZXcgbWVtby4KCiAgICAuRVhBTVBMRQogICAgU2V0LVNlY3JldEluZm8gIC1WYXVsdCAkVmF1bHRuYW1lICAtTmFtZSBmb28gLU1ldGFkYXRhIEB7bmFtZT0nQmFyJ30KCiAgICBSZW5hbWVzIHRoZSBlbnRyeSAnZm9vJyB0byAnQmFyJwoKICAgIC5OT1RFUwogICAgR2VuZXJhbCBub3RlcwogICAgIz4KICAgIFtDbWRsZXRCaW5kaW5nKCldCiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNVc2VTaG91bGRQcm9jZXNzZm9yU3RhdGVDaGFuZ2luZ0Z1bmN0aW9ucycsICcnKV0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1VzZU91dHB1dFR5cGVDb3JyZWN0bHknLCAnJyldCiAgICBwYXJhbSAoCiAgICAgICAgW3N0cmluZ10gJE5hbWUsCiAgICAgICAgW2hhc2h0YWJsZV0gJE1ldGFkYXRhLAogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICApCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUKICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgaWYgKCRBZGRpdGlvbmFsUGFyYW1ldGVycy5WZXJib3NlKSB7ICRWZXJib3NlUHJlZmVyZW5jZSA9ICdjb250aW51ZScgfQogICAgIyBUT0RPIFBlcmZvcm0gdXBkYXRlIHZvb2RvbyA7LSkKICAgICNyZWdpb24gQ2hhbmdlIHRoaXMgY29kZSBhZ2FpbnN0IHNvbWV0aGluZyB1c2VmdWwvbW9yZSBzZWNyZXQKICAgIFNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLU5hbWUgIkR1bW15SW1wbG1lbnRhdGlvbi5TZWNyZXRJbmZvLiROYW1lIiAtVmFsdWUgJE1ldGFkYXRhIC1IaWRkZW4KICAgICNlbmRyZWdpb24gQ2hhbmdlIHRoaXMgY29kZSBhZ2FpbnN0IHNvbWV0aGluZyB1c2VmdWwvbW9yZSBzZWNyZXQKCiAgICBXYWl0LVBTRk1lc3NhZ2UKICAgIHJldHVybiAkdHJ1ZQp9CgEJbwMAAAlwAwAABnEDAAASU2V0LVNlY3JldEluZm8ucHMxBnIDAAB1L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMvU2V0LVNlY3JldEluZm8ucHMxCVsAAAAJdAMAAAl1AwAAAasCAABwAAAABnYDAADECgpmdW5jdGlvbiBUZXN0LVNlY3JldFZhdWx0IHsKICAgIDwjCiAgICAuU1lOT1BTSVMKICAgIFRlc3RzIGlmIHRoZSB2YXVsdCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBhbmQgaWYgaXQgaXMgdW5sb2NrZWQuCgogICAgLkRFU0NSSVBUSU9OCiAgICBUZXN0cyBpZiB0aGUgdmF1bHQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgYW5kIGlmIGl0IGlzIHVubG9ja2VkLgoKICAgIC5QQVJBTUVURVIgVmF1bHROYW1lCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0LgoKICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4KCiAgICAuRVhBTVBMRQogICAgVGVzdC1TZWNyZXRWYXVsdCAtVmF1bHROYW1lICR2YXVsdG5hbWUKCiAgICBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bGwKCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbQ21kbGV0QmluZGluZygpXQogICAgcGFyYW0gKAogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCiAgICApCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUKICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgaWYgKCRBZGRpdGlvbmFsUGFyYW1ldGVycy5WZXJib3NlKSB7ICRWZXJib3NlUHJlZmVyZW5jZSA9ICdjb250aW51ZScgfQogICAgV3JpdGUtUFNGTWVzc2FnZSAgIlRlc3QtU2VjcmV0VmF1bHQgZnJvbSAkVmF1bHROYW1lLCBBZGRpdGlvbmFsUGFyYW1ldGVycz0kKCRBZGRpdGlvbmFsUGFyYW1ldGVyc3xDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIgoKICAgICMgVE9ETyBQZXJmb3JtIHNvbWUgcmVhbCB3b3JsZCBjaGVja3MgbGlrZSBvcGVuaW5nIHRoZSB2YXVsdAogICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgVmVyYm9zZSAiU2VjcmV0TWFuYWdlbWVudDogVGVzdGluZyBWYXVsdCAke1ZhdWx0TmFtZX0iCiAgICAkdmF1bHQgPSBHZXQtU2VjcmV0VmF1bHQgJFZhdWx0TmFtZSAtRXJyb3JBY3Rpb24gU3RvcAogICAgaWYgKCR2YXVsdC5Nb2R1bGVOYW1lIC1uZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicpIHsKICAgICAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBFcnJvciAiJHZhdWx0TmFtZSB3YXMgZm91bmQgYnV0IGlzIG5vdCBhIMO+bmFtZcO+IFZhdWx0LiIKICAgICAgICBXYWl0LVBTRk1lc3NhZ2UKICAgICAgICByZXR1cm4gJGZhbHNlCiAgICB9CiAgICByZXR1cm4gJHRydWUKfQoBCXcDAAAJeAMAAAZ5AwAAFFRlc3QtU2VjcmV0VmF1bHQucHMxBnoDAAB3L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9mdW5jdGlvbnMvVGVzdC1TZWNyZXRWYXVsdC5wczEJWwAAAAl8AwAACX0DAAABrAIAAHAAAAAGfgMAAMILZnVuY3Rpb24gVW5sb2NrLVNlY3JldFZhdWx0IHsKICAgIDwjCiAgICAuU1lOT1BTSVMKICAgIFVubG9ja3MgdGhlIHZhdWx0LgoKICAgIC5ERVNDUklQVElPTgogICAgVW5sb2NrcyB0aGUgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBQYXNzd29yZAogICAgVGhlIHBhc3N3b3JkIG5lZWRlZCBmb3IgdW5sb2NraW5nLgoKICAgIC5QQVJBTUVURVIgVmF1bHROYW1lCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0LgoKICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4KCiAgICAuRVhBTVBMRQogICAgVW5sb2NrLVNlY3JldFZhdWx0IC1WYXVsdE5hbWUgJHZhdWx0TmFtZSAtUGFzc3dvcmQgKFJlYWQtSG9zdCAtQXNTZWN1cmVTdHJpbmcpCgogICAgVW5sb2NrcyB0aGUgdmF1bHQKCiAgICAuTk9URVMKICAgIEdlbmVyYWwgbm90ZXMKICAgICM+CiAgICBbQ21kbGV0QmluZGluZygpXQogICAgcGFyYW0gKAogICAgICAgIFtTZWN1cmVTdHJpbmddICRQYXNzd29yZCwKICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLAogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgKQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMKCiAgICBXcml0ZS1QU0ZNZXNzYWdlICJVbmxvY2tpbmcgU2VjcmV0VmF1bHQgJFZhdWx0TmFtZSwgQWRkaXRpb25hbFBhcmFtZXRlcnM9JCgkQWRkaXRpb25hbFBhcmFtZXRlcnN8Q29udmVydFRvLUpzb24gLUNvbXByZXNzKSIKICAgICR2YXVsdCA9IEdldC1TZWNyZXRWYXVsdCAkVmF1bHROYW1lIC1FcnJvckFjdGlvbiBTdG9wCiAgICBpZiAoJHZhdWx0Lk1vZHVsZU5hbWUgLW5lICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JykgewogICAgICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEVycm9yICIkdmF1bHROYW1lIHdhcyBmb3VuZCBidXQgaXMgbm90IGEgw75uYW1lw74gVmF1bHQuIgogICAgICAgIFdhaXQtUFNGTWVzc2FnZQogICAgICAgIHJldHVybiAkZmFsc2UKICAgIH0KICAgICMgVE9ETyBTaG91bGQgdGhlIG1hc3RlciBwYXNzd29yZCBiZSBjYWNoZWQ/CiAgICAjIFNldC1WYXJpYWJsZSAtTmFtZSAiVmF1bHRfJHt2YXVsdE5hbWV9X01hc3RlclBhc3N3b3JkIiAtU2NvcGUgU2NyaXB0IC1WYWx1ZSAkUGFzc3dvcmQgLUZvcmNlCgogICAgIyBUT0RPIFBlcmZvcm0gdGhlIGNvbm5lY3Rpb24gdm9vZG9vIDstKQogICAgIyBCZXN0IFByYWN0aXNlIGlzIGUuZy4gdG8gY2FsbCBUZXN0LVNlY3JldFZhdWx0IHdoaWNoIHVzZXMgdGhlIGNhY2hlZCBtYXN0ZXIgcGFzc3dvcmQgZm9yIGEgdGVzdCBhY2Nlc3Mgb2YgdGhlIHZhdWx0CiAgICByZXR1cm4gJHRydWUKfQEJfwMAAAmAAwAABoEDAAAWVW5sb2NrLVNlY3JldFZhdWx0LnBzMQaCAwAAeS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL1VubG9jay1TZWNyZXRWYXVsdC5wczEJWwAAAAmEAwAACYUDAAABrQIAAHAAAAAGhgMAAPYHZnVuY3Rpb24gVW5yZWdpc3Rlci1TZWNyZXRWYXVsdCB7CiAgICA8IwogICAgLlNZTk9QU0lTCiAgICBVbnJlZ2lzdGVycyB0aGUgdmF1bHQgYW5kIHJlbW92ZXMgaW5NZW1vcnkgZGF0YSBmb3Igc2VjdXJpdHkuCgogICAgLkRFU0NSSVBUSU9OCiAgICBVbnJlZ2lzdGVycyB0aGUgdmF1bHQgYW5kIHJlbW92ZXMgaW5NZW1vcnkgZGF0YSBmb3Igc2VjdXJpdHkuCgogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUKICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuCgogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycwogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0LgoKICAgIC5FWEFNUExFCiAgICBVbnJlZ2lzdGVyLVNlY3JldFZhdWx0IC1WYXVsdE5hbWUgJHZhdWx0TmFtZQoKICAgIFJlbW92ZXMgdGhlIHJlZ2lzdHJhdGlvbgoKICAgIC5OT1RFUwogICAgR2VuZXJhbCBub3RlcwogICAgIz4KICAgIFtDbWRsZXRCaW5kaW5nKCldCiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNSZXZpZXdVbnVzZWRQYXJhbWV0ZXInLCAnJyldCiAgICBwYXJhbSAoCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwKICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMKICAgICkKICAgICMgV29ya2Fyb3VuZCBDYXNlU2Vuc2l0aXZlIEhhc2hUYWJsZQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzCgogICAgIyBUT0RPIEFkZCB5b3VyIHNwZWNpZmljIGRpc2Nvbm5lY3Rpb24gY29tbWFuZHMsIGUuZy4gcmVtb3ZpbmcgdGhlIHN0b3JlZCBtYXN0ZXIgcGFzc3dvcmQKICAgICMgUmVtb3ZlLVZhcmlhYmxlIC1OYW1lICJWYXVsdF8ke3ZhdWx0TmFtZX1fTWFzdGVyUGFzc3dvcmQiIC1TY29wZSBTY3JpcHQgLUZvcmNlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlCn0KAQmHAwAACYgDAAAGiQMAABpVbnJlZ2lzdGVyLVNlY3JldFZhdWx0LnBzMQaKAwAAfS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zL1VucmVnaXN0ZXItU2VjcmV0VmF1bHQucHMxCVsAAAAJjAMAAAmNAwAAAa4CAABwAAAABo4DAACqAiMgRnVuY3Rpb25zLlNoYXJlZEludGVybmFsCgpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgaW50ZXJuYWwgZnVuY3Rpb25zIGdvIHdoaWNoIHdpbGwgYmUgaW1wb3J0ZWQgZnJvbSB0aGUgbWFpbgphbmQgdGhlIGV4dGVuc2lvbiBtb2R1bGUuCgpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseS4gSWYgdGhlIG1vZHVsZSBpcyBidWlsZCB3aXRoCid2c3RzLWJ1aWxkLnBzMScgdGhlIGNvbnRlbnQgb2YgYWxsICoucHMxIGZpbGVzIGlzIGNvcGllZCBpbnRvIHRoZSAqLnBzbTEgZmlsZS4BCY8DAAAJkAMAAAaRAwAACXJlYWRtZS5tZAaSAwAAey9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vZnVuY3Rpb25zLnNoYXJlZGludGVybmFsL3JlYWRtZS5tZAlbAAAACZQDAAAJlQMAAAGvAgAAPgAAAAmWAwAABpcDAAAOY29uZmlndXJhdGlvbnMGmAMAAHAvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL2NvbmZpZ3VyYXRpb25zCVsAAAAJmgMAAAmbAwAAAbACAAA+AAAACZwDAAAGnQMAAAlmdW5jdGlvbnMGngMAAGsvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL2Z1bmN0aW9ucwlbAAAACaADAAAJoQMAAAGxAgAAPgAAAAmiAwAABqMDAAAMc2NyaXB0YmxvY2tzBqQDAABuL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9zY3JpcHRibG9ja3MJWwAAAAmmAwAACacDAAABsgIAAD4AAAAJqAMAAAapAwAAB3NjcmlwdHMGqgMAAGkvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3NjcmlwdHMJWwAAAAmsAwAACa0DAAABswIAAD4AAAAJrgMAAAavAwAABHRlcHAGsAMAAGYvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3RlcHAJWwAAAAmyAwAACbMDAAABtAIAAD4AAAAJtAMAAAa1AwAACWZ1bmN0aW9ucwa2AwAAaC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZnVuY3Rpb25zCVsAAAAJuAMAAAm5AwAAAbUCAAA+AAAACboDAAAGuwMAAAdnZW5lcmFsBrwDAABmL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsCVsAAAAJvgMAAAm/AwAAAbYCAABwAAAABsADAADWGnBhcmFtICgKCSRUZXN0R2VuZXJhbCA9ICR0cnVlLAoKCSRUZXN0RnVuY3Rpb25zID0gJHRydWUsCgoJW1ZhbGlkYXRlU2V0KCdOb25lJywgJ05vcm1hbCcsICdEZXRhaWxlZCcsICdEaWFnbm9zdGljJyldCglbQWxpYXMoJ1Nob3cnKV0KCSRPdXRwdXQgPSAiTm9uZSIsCgoJJEluY2x1ZGUgPSAiKiIsCgoJJEV4Y2x1ZGUgPSAiIgopCgpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlN0YXJ0aW5nIFRlc3RzIgoKV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJJbXBvcnRpbmcgTW9kdWxlIgoKJGdsb2JhbDp0ZXN0cm9vdCA9ICRQU1NjcmlwdFJvb3QKJGdsb2JhbDpfX3Blc3Rlcl9kYXRhID0gQHsgfQoKUmVtb3ZlLU1vZHVsZSDDvm5hbWXDviAtRXJyb3JBY3Rpb24gSWdub3JlCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxIgpJbXBvcnQtTW9kdWxlICIkUFNTY3JpcHRSb290XC4uXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNtMSIgLUZvcmNlCgojIE5lZWQgdG8gaW1wb3J0IGV4cGxpY2l0bHkgc28gd2UgY2FuIHVzZSB0aGUgY29uZmlndXJhdGlvbiBjbGFzcwpJbXBvcnQtTW9kdWxlIFBlc3RlcgoKw74hdGVzdGZvbGRlciHDvgoKJHRvdGFsRmFpbGVkID0gMAokdG90YWxSdW4gPSAwCgokdGVzdHJlc3VsdHMgPSBAKCkKJGNvbmZpZyA9IFtQZXN0ZXJDb25maWd1cmF0aW9uXTo6RGVmYXVsdArDviFwZXN0ZXJjb25maWchw74KCiNyZWdpb24gUnVuIEdlbmVyYWwgVGVzdHMKaWYgKCRUZXN0R2VuZXJhbCkKewoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJNb2R1bGVzIGltcG9ydGVkLCBwcm9jZWVkaW5nIHdpdGggZ2VuZXJhbCB0ZXN0cyIKCWZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkUFNTY3JpcHRSb290XGdlbmVyYWwiIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIiouVGVzdHMucHMxIikpCgl7CgkJaWYgKCRmaWxlLk5hbWUgLW5vdGxpa2UgJEluY2x1ZGUpIHsgY29udGludWUgfQoJCWlmICgkZmlsZS5OYW1lIC1saWtlICRFeGNsdWRlKSB7IGNvbnRpbnVlIH0KCgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgU2lnbmlmaWNhbnQgLU1lc3NhZ2UgIiAgRXhlY3V0aW5nIDxjPSdlbSc+JCgkZmlsZS5OYW1lKTwvYz4iCgkJJGNvbmZpZy5UZXN0UmVzdWx0Lk91dHB1dFBhdGggPSBKb2luLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi5cVGVzdFJlc3VsdHMiICJURVNULSQoJGZpbGUuQmFzZU5hbWUpLnhtbCIKCQkkY29uZmlnLlJ1bi5QYXRoID0gJGZpbGUuRnVsbE5hbWUKCQkkY29uZmlnLlJ1bi5QYXNzVGhydSA9ICR0cnVlCgkJJGNvbmZpZy5PdXRwdXQuVmVyYm9zaXR5ID0gJE91dHB1dAogICAgCSRyZXN1bHRzID0gSW52b2tlLVBlc3RlciAtQ29uZmlndXJhdGlvbiAkY29uZmlnCgkJZm9yZWFjaCAoJHJlc3VsdCBpbiAkcmVzdWx0cykKCQl7CgkJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQKCQkJJHRvdGFsRmFpbGVkICs9ICRyZXN1bHQuRmFpbGVkQ291bnQKCQkJJHJlc3VsdC5UZXN0cyB8IFdoZXJlLU9iamVjdCBSZXN1bHQgLW5lICdQYXNzZWQnIHwgRm9yRWFjaC1PYmplY3QgewoJCQkJJHRlc3RyZXN1bHRzICs9IFtwc2N1c3RvbW9iamVjdF1AewoJCQkJCUJsb2NrICAgID0gJF8uQmxvY2sKCQkJCQlOYW1lCSA9ICJJdCAkKCRfLk5hbWUpIgoJCQkJCVJlc3VsdCAgID0gJF8uUmVzdWx0CgkJCQkJTWVzc2FnZSAgPSAkXy5FcnJvclJlY29yZC5EaXNwbGF5RXJyb3JNZXNzYWdlCgkJCQl9CgkJCX0KCQl9Cgl9Cn0KI2VuZHJlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cwoKJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyIHwgT3V0LUhvc3QKCiNyZWdpb24gVGVzdCBDb21tYW5kcwppZiAoJFRlc3RGdW5jdGlvbnMpCnsKCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHJvY2VlZGluZyB3aXRoIGluZGl2aWR1YWwgdGVzdHMiCglmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJFBTU2NyaXB0Um9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIipUZXN0cy5wczEiKSkKCXsKCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9CgkJaWYgKCRmaWxlLk5hbWUgLWxpa2UgJEV4Y2x1ZGUpIHsgY29udGludWUgfQoKCQlXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBTaWduaWZpY2FudCAtTWVzc2FnZSAiICBFeGVjdXRpbmcgJCgkZmlsZS5OYW1lKSIKCQkkY29uZmlnLlRlc3RSZXN1bHQuT3V0cHV0UGF0aCA9IEpvaW4tUGF0aCAiJFBTU2NyaXB0Um9vdFwuLlwuLlxUZXN0UmVzdWx0cyIgIlRFU1QtJCgkZmlsZS5CYXNlTmFtZSkueG1sIgoJCSRjb25maWcuUnVuLlBhdGggPSAkZmlsZS5GdWxsTmFtZQoJCSRjb25maWcuUnVuLlBhc3NUaHJ1ID0gJHRydWUKCQkkY29uZmlnLk91dHB1dC5WZXJib3NpdHkgPSAkT3V0cHV0CiAgICAJJHJlc3VsdHMgPSBJbnZva2UtUGVzdGVyIC1Db25maWd1cmF0aW9uICRjb25maWcKCQlmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQoJCXsKCQkJJHRvdGFsUnVuICs9ICRyZXN1bHQuVG90YWxDb3VudAoJCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudAoJCQkkcmVzdWx0LlRlc3RzIHwgV2hlcmUtT2JqZWN0IFJlc3VsdCAtbmUgJ1Bhc3NlZCcgfCBGb3JFYWNoLU9iamVjdCB7CgkJCQkkdGVzdHJlc3VsdHMgKz0gW3BzY3VzdG9tb2JqZWN0XUB7CgkJCQkJQmxvY2sgICAgPSAkXy5CbG9jawoJCQkJCU5hbWUJID0gIkl0ICQoJF8uTmFtZSkiCgkJCQkJUmVzdWx0ICAgPSAkXy5SZXN1bHQKCQkJCQlNZXNzYWdlICA9ICRfLkVycm9yUmVjb3JkLkRpc3BsYXlFcnJvck1lc3NhZ2UKCQkJCX0KCQkJfQoJCX0KCX0KfQojZW5kcmVnaW9uIFRlc3QgQ29tbWFuZHMKCiR0ZXN0cmVzdWx0cyB8IFNvcnQtT2JqZWN0IERlc2NyaWJlLCBDb250ZXh0LCBOYW1lLCBSZXN1bHQsIE1lc3NhZ2UgfCBGb3JtYXQtTGlzdAoKaWYgKCR0b3RhbEZhaWxlZCAtZXEgMCkgeyBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBDcml0aWNhbCAtTWVzc2FnZSAiQWxsIDxjPSdlbSc+JHRvdGFsUnVuPC9jPiB0ZXN0cyBleGVjdXRlZCB3aXRob3V0IGEgc2luZ2xlIGZhaWx1cmUhIiB9CmVsc2UgeyBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBDcml0aWNhbCAtTWVzc2FnZSAiPGM9J2VtJz4kdG90YWxGYWlsZWQgdGVzdHM8L2M+IG91dCBvZiA8Yz0nc3ViJz4kdG90YWxSdW48L2M+IHRlc3RzIGZhaWxlZCEiIH0KCmlmICgkdG90YWxGYWlsZWQgLWd0IDApCnsKCXRocm93ICIkdG90YWxGYWlsZWQgLyAkdG90YWxSdW4gdGVzdHMgZmFpbGVkISIKfQEJwQMAAAnCAwAABsMDAAAKcGVzdGVyLnBzMQbEAwAAaS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvcGVzdGVyLnBzMQlbAAAACcYDAAAJxwMAAAG3AgAAcAAAAAbIAwAAhAcjIERlc2NyaXB0aW9uCgpUaGlzIGlzIHRoZSBmb2xkZXIsIHdoZXJlIGFsbCB0aGUgdGVzdHMgZ28uCgpUaG9zZSBhcmUgc3ViZGl2aWRlZCBpbiB0d28gY2F0ZWdvcmllczoKCiAtIEdlbmVyYWwKIC0gRnVuY3Rpb24KCiMjIEdlbmVyYWwgVGVzdHMKCkdlbmVyYWwgdGVzdHMgYXJlIGZ1bmN0aW9uIGdlbmVyaWMgYW5kIHRlc3QgZm9yIGdlbmVyYWwgcG9saWNpZXMuCgpUaGVzZSB0ZXN0IHNjYW4gYW5zd2VyIHF1ZXN0aW9ucyBzdWNoIGFzOgoKIC0gSXMgbXkgbW9kdWxlIGZvbGxvd2luZyBteSBzdHlsZSBndWlkZXM/CiAtIERvZXMgYW55IG9mIG15IHNjcmlwdHMgaGF2ZSBhIHN5bnRheCBlcnJvcj8KIC0gRG8gbXkgc2NyaXB0cyB1c2UgY29tbWFuZHMgSSBkbyBub3Qgd2FudCB0aGVtIHRvIHVzZT8KIC0gRG8gbXkgY29tbWFuZHMgZm9sbG93IGJlc3QgcHJhY3RpY2VzPwogLSBEbyBteSBjb21tYW5kcyBoYXZlIHByb3BlciBoZWxwPwoKQmFzaWNhbGx5LCB0aGVzZSBhbGxvdyBhIGdlbmVyYWwgbW9kdWxlIGhlYWx0aCBjaGVjay4KClRoZXNlIHRlc3RzIGFyZSBhbHJlYWR5IHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhlIHRlbXBsYXRlLgoKIyMgRnVuY3Rpb24gVGVzdHMKCkEgaGVhbHRoeSBtb2R1bGUgc2hvdWxkIHByb3ZpZGUgdW5pdCBhbmQgaW50ZWdyYXRpb24gdGVzdHMgZm9yIHRoZSBjb21tYW5kcyAmIGNvbXBvbmVudHMgaXQgc2hpcHMuCk9ubHkgdGhlbiBjYW4gYmUgZ3VhcmFudGVlZCwgdGhhdCB0aGV5IHdpbGwgYWN0dWFsbHkgcGVyZm9ybSBhcyBwcm9taXNlZC4KCkhvd2V2ZXIsIGFzIGVhY2ggc3VjaCB0ZXN0IG11c3QgYmUgc3BlY2lmaWMgdG8gdGhlIGZ1bmN0aW9uIGl0IHRlc3RzLCB0aGVyZSBjYW5ub3QgYmUgbXVjaCBpbiB0aGUgd2F5IG9mIHRlbXBsYXRlcy4BCckDAAAJygMAAAbLAwAACXJlYWRtZS5tZAbMAwAAaC9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvcmVhZG1lLm1kCVsAAAAJzgMAAAnPAwAAAbgCAABwAAAABtADAACCCyMgWE1MCgpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgcHJvamVjdCBYTUwgZmlsZXMgZ28sIG5vdGFibHk6CgogLSBGb3JtYXQgWE1MCiAtIFR5cGUgRXh0ZW5zaW9uIFhNTAoKRXh0ZXJuYWwgaGVscCBmaWxlcyBzaG91bGQgX25vdF8gYmUgcGxhY2VkIGluIHRoaXMgZm9sZGVyIQoKIyMgTm90ZXMgb24gRmlsZXMgYW5kIE5hbWluZwoKVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGZvcm1hdCBmaWxlIGFuZCBvbmUgdHlwZSBleHRlbnNpb24gZmlsZSBwZXIgcHJvamVjdCwgYXMgaW1wb3J0aW5nIHRoZW0gaGFzIGEgbm90YWJsZSBpbXBhY3Qgb24gaW1wb3J0IHRpbWVzLgoKIC0gVGhlIEZvcm1hdCBYTUwgc2hvdWxkIGJlIG5hbWVkIGDDvm5hbWXDvi5Gb3JtYXQucHMxeG1sYAogLSBUaGUgVHlwZSBFeHRlbnNpb24gWE1MIHNob3VsZCBiZSBuYW1lZCBgw75uYW1lw74uVHlwZXMucHMxeG1sYAoKIyMgVG9vbHMKCiMjIyBOZXctUFNNREZvcm1hdFRhYmxlRGVmaW5pdGlvbgoKVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYW4gaW5wdXQgb2JqZWN0IGFuZCBnZW5lcmF0ZSBmb3JtYXQgeG1sIGZvciBhbiBhdXRvLXNpemVkIHRhYmxlLgoKSXQgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IHRvIGdldCBzdGFydGVkIHdpdGggZm9ybWF0cy4KCiMjIyBHZXQtUFNGVHlwZVNlcmlhbGl6YXRpb25EYXRhCgpgYGAKQyMgV2FybmluZyEKVGhpcyBzZWN0aW9uIGlzIG9ubHkgaW50ZXJlc3QgaWYgeW91J3JlIHVzaW5nIEMjIHRvZ2V0aGVyIHdpdGggUG93ZXJTaGVsbC4KYGBgCgpUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyB0eXBlIGV4dGVuc2lvbiBYTUwgdGhhdCBhbGxvd3MgUG93ZXJTaGVsbCB0byBjb252ZXJ0IHR5cGVzIHdyaXR0ZW4gaW4gQyMgdG8gYmUgd3JpdHRlbiB0byBmaWxlIGFuZCByZXN0b3JlZCBmcm9tIGl0IHdpdGhvdXQgYmVpbmcgJ0Rlc2VyaWFsaXplZCcuIEFsc28gd29ya3MgZm9yIGpvYnMgb3IgcmVtb3RpbmcsIGlmIGJvdGggc2lkZXMgaGF2ZSB0aGUgYFBTRnJhbWV3b3JrYCBtb2R1bGUgYW5kIHR5cGUgZXh0ZW5zaW9uIGxvYWRlZC4KCkluIG9yZGVyIGZvciBhIGNsYXNzIHRvIGJlIGVsaWdpYmxlIGZvciB0aGlzLCBpdCBuZWVkcyB0byBjb25mb3JtIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXM6CgogLSBIYXZlIHRoZSBgW1NlcmlhbGl6YWJsZV1gIGF0dHJpYnV0ZQogLSBCZSBwdWJsaWMKIC0gSGF2ZSBhbiBlbXB0eSBjb25zdHJ1Y3RvcgogLSBBbGxvdyBhbGwgcHVibGljIHByb3BlcnRpZXMvZmllbGRzIHRvIGJlIHNldCAoZXZlbiBpZiBzZXR0aW5nIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcpIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLgoKYGBgCm5vbi1wdWJsaWMgcHJvcGVydGllcyBhbmQgZmllbGRzIHdpbGwgYmUgbG9zdCBpbiB0aGlzIHByb2Nlc3MhCmBgYAEJ0QMAAAnSAwAABtMDAAAJcmVhZG1lLm1kBtQDAABmL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi94bWwvcmVhZG1lLm1kCVsAAAAJ1gMAAAnXAwAAAbkCAABwAAAABtgDAADKBTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi0xNiI/Pgo8Q29uZmlndXJhdGlvbj4KCTxWaWV3RGVmaW5pdGlvbnM+CgkJPCEtLSBGb28uQmFyIC0tPgoJCTxWaWV3PgoJCQk8TmFtZT5Gb28uQmFyPC9OYW1lPgoJCQk8Vmlld1NlbGVjdGVkQnk+CgkJCQk8VHlwZU5hbWU+Rm9vLkJhcjwvVHlwZU5hbWU+CgkJCTwvVmlld1NlbGVjdGVkQnk+CgkJCTxUYWJsZUNvbnRyb2w+CgkJCQk8QXV0b1NpemUvPgoJCQkJPFRhYmxlSGVhZGVycz4KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPgoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+CgkJCQk8L1RhYmxlSGVhZGVycz4KCQkJCTxUYWJsZVJvd0VudHJpZXM+CgkJCQkJPFRhYmxlUm93RW50cnk+CgkJCQkJCTxUYWJsZUNvbHVtbkl0ZW1zPgoJCQkJCQkJPFRhYmxlQ29sdW1uSXRlbT4KCQkJCQkJCQk8UHJvcGVydHlOYW1lPkZvbzwvUHJvcGVydHlOYW1lPgoJCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW0+CgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPgoJCQkJCQkJCTxQcm9wZXJ0eU5hbWU+QmFyPC9Qcm9wZXJ0eU5hbWU+CgkJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbT4KCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW1zPgoJCQkJCTwvVGFibGVSb3dFbnRyeT4KCQkJCTwvVGFibGVSb3dFbnRyaWVzPgoJCQk8L1RhYmxlQ29udHJvbD4KCQk8L1ZpZXc+Cgk8L1ZpZXdEZWZpbml0aW9ucz4KPC9Db25maWd1cmF0aW9uPgEJ2QMAAAnaAwAABtsDAAAWw75uYW1lw74uRm9ybWF0LnBzMXhtbAbcAwAAcy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24veG1sL8O+bmFtZcO+LkZvcm1hdC5wczF4bWwJWwAAAAneAwAACd8DAAABugIAAHAAAAAG4AMAALwHPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPFR5cGVzPgogIDwhLS0gRm9vLkJhciAtLT4KICA8VHlwZT4KICAgIDxOYW1lPkRlc2VyaWFsaXplZC5Gb28uQmFyPC9OYW1lPgogICAgPE1lbWJlcnM+CiAgICAgIDxNZW1iZXJTZXQ+CiAgICAgICAgPE5hbWU+UFNTdGFuZGFyZE1lbWJlcnM8L05hbWU+CiAgICAgICAgPE1lbWJlcnM+CiAgICAgICAgICA8Tm90ZVByb3BlcnR5PgogICAgICAgICAgICA8TmFtZT4KICAgICAgICAgICAgICBUYXJnZXRUeXBlRm9yRGVzZXJpYWxpemF0aW9uCiAgICAgICAgICAgIDwvTmFtZT4KICAgICAgICAgICAgPFZhbHVlPgogICAgICAgICAgICAgIEZvby5CYXIKICAgICAgICAgICAgPC9WYWx1ZT4KICAgICAgICAgIDwvTm90ZVByb3BlcnR5PgogICAgICAgIDwvTWVtYmVycz4KICAgICAgPC9NZW1iZXJTZXQ+CiAgICA8L01lbWJlcnM+CiAgPC9UeXBlPgogIDxUeXBlPgogICAgPE5hbWU+Rm9vLkJhcjwvTmFtZT4KICAgIDxNZW1iZXJzPgogICAgICA8Q29kZVByb3BlcnR5IElzSGlkZGVuPSJ0cnVlIj4KICAgICAgICA8TmFtZT5TZXJpYWxpemF0aW9uRGF0YTwvTmFtZT4KICAgICAgICA8R2V0Q29kZVJlZmVyZW5jZT4KICAgICAgICAgIDxUeXBlTmFtZT5QU0ZyYW1ld29yay5TZXJpYWxpemF0aW9uLlNlcmlhbGl6YXRpb25UeXBlQ29udmVydGVyPC9UeXBlTmFtZT4KICAgICAgICAgIDxNZXRob2ROYW1lPkdldFNlcmlhbGl6YXRpb25EYXRhPC9NZXRob2ROYW1lPgogICAgICAgIDwvR2V0Q29kZVJlZmVyZW5jZT4KICAgICAgPC9Db2RlUHJvcGVydHk+CiAgICA8L01lbWJlcnM+CiAgICA8VHlwZUNvbnZlcnRlcj4KICAgICAgPFR5cGVOYW1lPlBTRnJhbWV3b3JrLlNlcmlhbGl6YXRpb24uU2VyaWFsaXphdGlvblR5cGVDb252ZXJ0ZXI8L1R5cGVOYW1lPgogICAgPC9UeXBlQ29udmVydGVyPgogIDwvVHlwZT4KPC9UeXBlcz4BCeEDAAAJ4gMAAAbjAwAAFcO+bmFtZcO+LlR5cGVzLnBzMXhtbAbkAwAAci9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24veG1sL8O+bmFtZcO+LlR5cGVzLnBzMXhtbAlbAAAACeYDAAAJ5wMAAAHHAgAAcAAAAAboAwAAzwEjIERlc2NyaXB0aW9uCgpUaGlzIGlzIHdoZXJlIHRoZSBmdW5jdGlvbiB0ZXN0cyBnby4KCk1ha2Ugc3VyZSB0byBwdXQgdGhlbSBpbiBmb2xkZXJzIHJlZmxlY3RpbmcgdGhlIGFjdHVhbCBtb2R1bGUgc3RydWN0dXJlLgoKSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgYW5kIHB1YmxpYyBmdW5jdGlvbnMgaGVyZS4BCekDAAAJ6gMAAAbrAwAACXJlYWRtZS5tZAbsAwAATi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMvZnVuY3Rpb25zL3JlYWRtZS5tZAlbAAAACe4DAAAJ7wMAAAHIAgAAcAAAAAbwAwAA3gUjIExpc3Qgb2YgZm9yYmlkZGVuIGNvbW1hbmRzCiRnbG9iYWw6QmFubmVkQ29tbWFuZHMgPSBAKAoJJ1dyaXRlLUhvc3QnCgknV3JpdGUtVmVyYm9zZScKCSdXcml0ZS1XYXJuaW5nJwoJJ1dyaXRlLUVycm9yJwoJJ1dyaXRlLU91dHB1dCcKCSdXcml0ZS1JbmZvcm1hdGlvbicKCSdXcml0ZS1EZWJ1ZycKCQoJIyBVc2UgQ0lNIGluc3RlYWQgd2hlcmUgcG9zc2libGUKCSdHZXQtV21pT2JqZWN0JwoJJ0ludm9rZS1XbWlNZXRob2QnCgknUmVnaXN0ZXItV21pRXZlbnQnCgknUmVtb3ZlLVdtaU9iamVjdCcKCSdTZXQtV21pSW5zdGFuY2UnCgoJIyBVc2UgR2V0LVdpbkV2ZW50IGluc3RlYWQKCSdHZXQtRXZlbnRMb2cnCikKCjwjCglDb250YWlucyBsaXN0IG9mIGV4Y2VwdGlvbnMgZm9yIGJhbm5lZCBjbWRsZXRzLgoJSW5zZXJ0IHRoZSBmaWxlIG5hbWVzIG9mIGZpbGVzIHRoYXQgbWF5IGNvbnRhaW4gdGhlbS4KCQoJRXhhbXBsZToKCSJXcml0ZS1Ib3N0IiAgPSBAKCdXcml0ZS1QU0ZIb3N0Q29sb3IucHMxJywnV3JpdGUtUFNGTWVzc2FnZS5wczEnKQojPgokZ2xvYmFsOk1heUNvbnRhaW5Db21tYW5kID0gQHsKCSJXcml0ZS1Ib3N0IiAgPSBAKCkKCSJXcml0ZS1WZXJib3NlIiA9IEAoKQoJIldyaXRlLVdhcm5pbmciID0gQCgpCgkiV3JpdGUtRXJyb3IiICA9IEAoKQoJIldyaXRlLU91dHB1dCIgPSBAKCkKCSJXcml0ZS1JbmZvcm1hdGlvbiIgPSBAKCkKCSJXcml0ZS1EZWJ1ZyIgPSBAKCkKfQEJ8QMAAAnyAwAABvMDAAAcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQb0AwAAXy9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMvZ2VuZXJhbC9GaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxCVsAAAAJ9gMAAAn3AwAAAckCAABwAAAABvgDAACCGCRtb2R1bGVSb290ID0gKFJlc29sdmUtUGF0aCAiJGdsb2JhbDp0ZXN0cm9vdFwuLiIpLlBhdGgKCi4gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxIgoKRGVzY3JpYmUgIlZlcmlmeWluZyBpbnRlZ3JpdHkgb2YgbW9kdWxlIGZpbGVzIiB7CglCZWZvcmVBbGwgewoJCWZ1bmN0aW9uIEdldC1GaWxlRW5jb2RpbmcKCQl7CgkJPCMKCQkJLlNZTk9QU0lTCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLgoJCQkKCQkJLkRFU0NSSVBUSU9OCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLgoJCQkKCQkJLlBBUkFNRVRFUiBQYXRoCgkJCQlUaGUgZmlsZSB0byB0ZXN0CgkJIz4KCQkJW0NtZGxldEJpbmRpbmcoKV0KCQkJUGFyYW0gKAoJCQkJW1BhcmFtZXRlcihNYW5kYXRvcnkgPSAkVHJ1ZSwgVmFsdWVGcm9tUGlwZWxpbmVCeVByb3BlcnR5TmFtZSA9ICRUcnVlKV0KCQkJCVtBbGlhcygnRnVsbE5hbWUnKV0KCQkJCVtzdHJpbmddCgkJCQkkUGF0aAoJCQkpCgkJCQoJCQlpZiAoJFBTVmVyc2lvblRhYmxlLlBTVmVyc2lvbi5NYWpvciAtbHQgNikKCQkJewoJCQkJW2J5dGVbXV0kYnl0ZSA9IGdldC1jb250ZW50IC1FbmNvZGluZyBieXRlIC1SZWFkQ291bnQgNCAtVG90YWxDb3VudCA0IC1QYXRoICRQYXRoCgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlbYnl0ZVtdXSRieXRlID0gR2V0LUNvbnRlbnQgLUFzQnl0ZVN0cmVhbSAtUmVhZENvdW50IDQgLVRvdGFsQ291bnQgNCAtUGF0aCAkUGF0aAoJCQl9CgkJCQoJCQlpZiAoJGJ5dGVbMF0gLWVxIDB4ZWYgLWFuZCAkYnl0ZVsxXSAtZXEgMHhiYiAtYW5kICRieXRlWzJdIC1lcSAweGJmKSB7ICdVVEY4IEJPTScgfQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAweGZlIC1hbmQgJGJ5dGVbMV0gLWVxIDB4ZmYpIHsgJ1VuaWNvZGUnIH0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMCAtYW5kICRieXRlWzFdIC1lcSAwIC1hbmQgJGJ5dGVbMl0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVszXSAtZXEgMHhmZikgeyAnVVRGMzInIH0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMHgyYiAtYW5kICRieXRlWzFdIC1lcSAweDJmIC1hbmQgJGJ5dGVbMl0gLWVxIDB4NzYpIHsgJ1VURjcnIH0KCQkJZWxzZSB7ICdVbmtub3duJyB9CgkJfQoJfQoKCUNvbnRleHQgIlZhbGlkYXRpbmcgUFMxIFNjcmlwdCBmaWxlcyIgewoJCSRhbGxGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJG1vZHVsZVJvb3QgLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIgoJCQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykKCQl7CgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpCgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIHdpdGggQnl0ZSBPcmRlciBNYXJrIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsKCQkJCUdldC1GaWxlRW5jb2RpbmcgLVBhdGggJGZpbGUuRnVsbE5hbWUgfCBTaG91bGQgLUJlICdVVEY4IEJPTScKCQkJfQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gewoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMH0pLkxpbmVOdW1iZXIgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQkJfQoJCQkKCQkJJHRva2VucyA9ICRudWxsCgkJCSRwYXJzZUVycm9ycyA9ICRudWxsCgkJCSRhc3QgPSBbU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5MYW5ndWFnZS5QYXJzZXJdOjpQYXJzZUZpbGUoJGZpbGUuRnVsbE5hbWUsIFtyZWZdJHRva2VucywgW3JlZl0kcGFyc2VFcnJvcnMpCgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyBzeW50YXggZXJyb3JzIiAtVGVzdENhc2VzIEB7IHBhcnNlRXJyb3JzID0gJHBhcnNlRXJyb3JzIH0gewoJCQkJJHBhcnNlRXJyb3JzIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJCX0KCQkJCgkJCWZvcmVhY2ggKCRjb21tYW5kIGluICRnbG9iYWw6QmFubmVkQ29tbWFuZHMpCgkJCXsKCQkJCWlmICgkZ2xvYmFsOk1heUNvbnRhaW5Db21tYW5kWyIkY29tbWFuZCJdIC1ub3Rjb250YWlucyAkZmlsZS5OYW1lKQoJCQkJewoJCQkJCUl0ICJbJG5hbWVdIFNob3VsZCBub3QgdXNlICRjb21tYW5kIiAtVGVzdENhc2VzIEB7IHRva2VucyA9ICR0b2tlbnM7IGNvbW1hbmQgPSAkY29tbWFuZCB9IHsKCQkJCQkJJHRva2VucyB8IFdoZXJlLU9iamVjdCBUZXh0IC1FUSAkY29tbWFuZCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCQoJQ29udGV4dCAiVmFsaWRhdGluZyBoZWxwLnR4dCBoZWxwIGZpbGVzIiB7CgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLmhlbHAudHh0IiB8IFdoZXJlLU9iamVjdCBGdWxsTmFtZSAtTm90TGlrZSAiJG1vZHVsZVJvb3RcdGVzdHNcKiIKCQkKCQlmb3JlYWNoICgkZmlsZSBpbiAkYWxsRmlsZXMpCgkJewoJCQkkbmFtZSA9ICRmaWxlLkZ1bGxOYW1lLlJlcGxhY2UoIiRtb2R1bGVSb290XCIsICcnKQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgVVRGOCBlbmNvZGluZyIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7CgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCBCT00nCgkJCX0KCQkJCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHRyYWlsaW5nIHNwYWNlIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsKCQkJCSgkZmlsZSB8IFNlbGVjdC1TdHJpbmcgIlxzJCIgfCBXaGVyZS1PYmplY3QgeyAkXy5MaW5lLlRyaW0oKS5MZW5ndGggLWd0IDAgfSB8IE1lYXN1cmUtT2JqZWN0KS5Db3VudCB8IFNob3VsZCAtQmUgMAoJCQl9CgkJfQoJfQp9AQn5AwAACfoDAAAG+wMAABdGaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQb8AwAAWi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMvZ2VuZXJhbC9GaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQlbAAAACf4DAAAJ/wMAAAHKAgAAcAAAAAYABAAAgwUjIExpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQKJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucyA9IEAoCiAgICAKKQoKPCMKICBMaXN0IG9mIGFycmF5ZWQgZW51bWVyYXRpb25zLiBUaGVzZSBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuIEFkZCBmdWxsIG5hbWUuCiAgRXhhbXBsZToKCiAgIlNxbGNvbGxhYm9yYXRpdmUuRGJhdG9vbHMuQ29ubmVjdGlvbi5NYW5hZ2VtZW50Q29ubmVjdGlvblR5cGVbXSIKIz4KJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMgPSBAKAoJCikKCjwjCiAgU29tZSB0eXBlcyBvbiBwYXJhbWV0ZXJzIGp1c3QgZmFpbCB0aGVpciB2YWxpZGF0aW9uIG5vIG1hdHRlciB3aGF0LgogIEZvciB0aG9zZSBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIHNraXAgdGhlbSwgYnkgYWRkaW5nIHRoZW0gdG8gdGhpcyBoYXNodGFibGUuCiAgQWRkIGJ5IGZvbGxvd2luZyB0aGlzIGNvbnZlbnRpb246IDxjb21tYW5kIG5hbWU+ID0gQCg8bGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXM+KQogIEV4YW1wbGU6CgogICJHZXQtRGJhQ21PYmplY3QiICAgICAgID0gQCgiRG9Ob3RVc2UiKQojPgokZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUgPSBAewogICAgCn0KAQkBBAAACQIEAAAGAwQAABNIZWxwLkV4Y2VwdGlvbnMucHMxBgQEAABWL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsL0hlbHAuRXhjZXB0aW9ucy5wczEJWwAAAAkGBAAACQcEAAABywIAAHAAAAAGCAQAALwzPCMKICAgIC5OT1RFUwogICAgICAgIFRoZSBvcmlnaW5hbCB0ZXN0IHRoaXMgaXMgYmFzZWQgdXBvbiB3YXMgd3JpdHRlbiBieSBKdW5lIEJsZW5kZXIuCgkJQWZ0ZXIgc2V2ZXJhbCByb3VuZHMgb2YgbW9kaWZpY2F0aW9ucyBpdCBzdGFuZHMgbm93IGFzIGl0IGlzLCBidXQgdGhlIGhvbm9yIHJlbWFpbnMgaGVycy4KCgkJVGhhbmsgeW91IEp1bmUsIGZvciBhbGwgeW91IGhhdmUgZG9uZSEKCiAgICAuREVTQ1JJUFRJT04KCQlUaGlzIHRlc3QgZXZhbHVhdGVzIHRoZSBoZWxwIGZvciBhbGwgY29tbWFuZHMgaW4gYSBtb2R1bGUuCgoJLlBBUkFNRVRFUiBTa2lwVGVzdAoJCURpc2FibGVzIHRoaXMgdGVzdC4KCQoJLlBBUkFNRVRFUiBDb21tYW5kUGF0aAoJCUxpc3Qgb2YgcGF0aHMgdW5kZXIgd2hpY2ggdGhlIHNjcmlwdCBmaWxlcyBhcmUgc3RvcmVkLgoJCVRoaXMgdGVzdCBhc3N1bWVzIHRoYXQgYWxsIGZ1bmN0aW9ucyBoYXZlIHRoZWlyIG93biBmaWxlIHRoYXQgaXMgbmFtZWQgYWZ0ZXIgdGhlbXNlbHZlcy4KCQlUaGVzZSBwYXRocyBhcmUgdXNlZCB0byBzZWFyY2ggZm9yIGNvbW1hbmRzIHRoYXQgc2hvdWxkIGV4aXN0IGFuZCBiZSB0ZXN0ZWQuCgkJV2lsbCBzZWFyY2ggcmVjdXJzaXZlbHkgYW5kIGFjY2VwdHMgd2lsZGNhcmRzLCBtYWtlIHN1cmUgb25seSBmdW5jdGlvbnMgYXJlIGZvdW5kCgoJLlBBUkFNRVRFUiBNb2R1bGVOYW1lCgkJTmFtZSBvZiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZC4KCQlUaGUgbW9kdWxlIG11c3QgYWxyZWFkeSBiZSBpbXBvcnRlZAoKCS5QQVJBTUVURVIgRXhjZXB0aW9uc0ZpbGUKCQlGaWxlIGluIHdoaWNoIGV4Y2VwdGlvbnMgYW5kIGFkanVzdG1lbnRzIGFyZSBjb25maWd1cmVkLgoJCUluIGl0IHRoZXJlIHNob3VsZCBiZSB0d28gYXJyYXlzIGFuZCBhIGhhc2h0YWJsZSBkZWZpbmVkOgoJCQkkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zCgkJCSRnbG9iYWw6SGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzCgkJCSRnbG9iYWw6SGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZQoJCVRoZXNlIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHRoZSB0ZXN0cyBzbGlnaHRseSBpbiBjYXNlcyBvZiBuZWVkLgoJCVNlZSB0aGUgZXhhbXBsZSBmaWxlIGZvciBleHBsYW5hdGlvbnMgb24gZWFjaCBvZiB0aGVzZSB1c2FnZSBhbmQgZWZmZWN0LgojPgpbQ21kbGV0QmluZGluZygpXQpQYXJhbSAoCglbc3dpdGNoXQoJJFNraXBUZXN0LAoJCglbc3RyaW5nW11dCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpLAoJCglbc3RyaW5nXQoJJE1vZHVsZU5hbWUgPSAiw75uYW1lw74iLAoJCglbc3RyaW5nXQoJJEV4Y2VwdGlvbnNGaWxlID0gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxIgopCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0KLiAkRXhjZXB0aW9uc0ZpbGUKCiRpbmNsdWRlZE5hbWVzID0gKEdldC1DaGlsZEl0ZW0gJENvbW1hbmRQYXRoIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIikuQmFzZU5hbWUKJGNvbW1hbmRUeXBlcyA9IEAoJ0NtZGxldCcsICdGdW5jdGlvbicpCmlmICgkUFNWZXJzaW9uVGFibGUuUFNFZGl0aW9uIC1lcSAnRGVza3RvcCcgKSB7ICRjb21tYW5kVHlwZXMgKz0gJ1dvcmtmbG93JyB9CiRjb21tYW5kcyA9IEdldC1Db21tYW5kIC1Nb2R1bGUgKEdldC1Nb2R1bGUgJE1vZHVsZU5hbWUpIC1Db21tYW5kVHlwZSAkY29tbWFuZFR5cGVzIHwgV2hlcmUtT2JqZWN0IE5hbWUgLUluICRpbmNsdWRlZE5hbWVzCgojIyBXaGVuIHRlc3RpbmcgaGVscCwgcmVtZW1iZXIgdGhhdCBoZWxwIGlzIGNhY2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc2Vzc2lvbi4KIyMgVG8gdGVzdCwgcmVzdGFydCBzZXNzaW9uLgoKCmZvcmVhY2ggKCRjb21tYW5kIGluICRjb21tYW5kcykgewogICAgJGNvbW1hbmROYW1lID0gJGNvbW1hbmQuTmFtZQogICAgCiAgICAjIFNraXAgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBvbiB0aGUgZXhjbHVzaW9ucyBsaXN0CiAgICBpZiAoJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucyAtY29udGFpbnMgJGNvbW1hbmROYW1lKSB7IGNvbnRpbnVlIH0KICAgIAogICAgIyBUaGUgbW9kdWxlLXF1YWxpZmllZCBjb21tYW5kIGZhaWxzIG9uIE1pY3Jvc29mdC5Qb3dlclNoZWxsLkFyY2hpdmUgY21kbGV0cwogICAgJEhlbHAgPSBHZXQtSGVscCAkY29tbWFuZE5hbWUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUKCQoJRGVzY3JpYmUgIlRlc3QgaGVscCBmb3IgJGNvbW1hbmROYW1lIiB7CiAgICAgICAgCgkJIyBJZiBoZWxwIGlzIG5vdCBmb3VuZCwgc3lub3BzaXMgaW4gYXV0by1nZW5lcmF0ZWQgaGVscCBpcyB0aGUgc3ludGF4IGRpYWdyYW0KCQlJdCAic2hvdWxkIG5vdCBiZSBhdXRvLWdlbmVyYXRlZCIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7CgkJCSRIZWxwLlN5bm9wc2lzIHwgU2hvdWxkIC1Ob3QgLUJlTGlrZSAnKmBbYDxDb21tb25QYXJhbWV0ZXJzYD5gXSonCgkJfQogICAgICAgIAoJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IGZ1bmN0aW9uCgkJSXQgImdldHMgZGVzY3JpcHRpb24gZm9yICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7CgkJCSRIZWxwLkRlc2NyaXB0aW9uIHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkKCQl9CiAgICAgICAgCgkJIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUKCQlJdCAiZ2V0cyBleGFtcGxlIGNvZGUgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gewoJCQkoJEhlbHAuRXhhbXBsZXMuRXhhbXBsZSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLkNvZGUgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCX0KCQoJCSMgU2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBleGFtcGxlIGRlc2NyaXB0aW9uCgkJSXQgImdldHMgZXhhbXBsZSBoZWxwIGZyb20gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsKCQkJKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCX0KICAgICAgICAKICAgICAgICBDb250ZXh0ICJUZXN0IHBhcmFtZXRlciBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsKICAgICAgICAgICAgCiAgICAgICAgICAgICRjb21tb24gPSAnRGVidWcnLCAnRXJyb3JBY3Rpb24nLCAnRXJyb3JWYXJpYWJsZScsICdJbmZvcm1hdGlvbkFjdGlvbicsICdJbmZvcm1hdGlvblZhcmlhYmxlJywgJ091dEJ1ZmZlcicsICdPdXRWYXJpYWJsZScsICdQaXBlbGluZVZhcmlhYmxlJywgJ1ZlcmJvc2UnLCAnV2FybmluZ0FjdGlvbicsICdXYXJuaW5nVmFyaWFibGUnCiAgICAgICAgICAgIAogICAgICAgICAgICAkcGFyYW1ldGVycyA9ICRjb21tYW5kLlBhcmFtZXRlclNldHMuUGFyYW1ldGVycyB8IFNvcnQtT2JqZWN0IC1Qcm9wZXJ0eSBOYW1lIC1VbmlxdWUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbm90aW4gJGNvbW1vbgogICAgICAgICAgICAkcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVycy5OYW1lCiAgICAgICAgICAgICRIZWxwUGFyYW1ldGVyTmFtZXMgPSAkSGVscC5QYXJhbWV0ZXJzLlBhcmFtZXRlci5OYW1lIHwgU29ydC1PYmplY3QgLVVuaXF1ZQogICAgICAgICAgICBmb3JlYWNoICgkcGFyYW1ldGVyIGluICRwYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyTmFtZSA9ICRwYXJhbWV0ZXIuTmFtZQogICAgICAgICAgICAgICAgJHBhcmFtZXRlckhlbHAgPSAkSGVscC5wYXJhbWV0ZXJzLnBhcmFtZXRlciB8IFdoZXJlLU9iamVjdCBOYW1lIC1FUSAkcGFyYW1ldGVyTmFtZQoJCQkKCQkJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IHBhcmFtZXRlcgoJCQkJSXQgImdldHMgaGVscCBmb3IgcGFyYW1ldGVyOiAkcGFyYW1ldGVyTmFtZSA6IGluICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHAgfSB7CgkJCQkJJHBhcmFtZXRlckhlbHAuRGVzY3JpcHRpb24uVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJCQl9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRjb2RlTWFuZGF0b3J5ID0gJHBhcmFtZXRlci5Jc01hbmRhdG9yeS50b1N0cmluZygpCgkJCQlJdCAiaGVscCBmb3IgJHBhcmFtZXRlck5hbWUgcGFyYW1ldGVyIGluICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBNYW5kYXRvcnkgdmFsdWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwOyBjb2RlTWFuZGF0b3J5ID0gJGNvZGVNYW5kYXRvcnkgfSB7CgkJCQkJJHBhcmFtZXRlckhlbHAuUmVxdWlyZWQgfCBTaG91bGQgLUJlICRjb2RlTWFuZGF0b3J5CgkJCQl9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICgkSGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZVskY29tbWFuZE5hbWVdIC1jb250YWlucyAkcGFyYW1ldGVyTmFtZSkgeyBjb250aW51ZSB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRjb2RlVHlwZSA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5OYW1lCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuSXNFbnVtKSB7CiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlKQoJCQkJCQkjIFBhcmFtZXRlciB0eXBlIGluIEhlbHAgc2hvdWxkIG1hdGNoIGNvZGUKCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gewoJCQkJCQkkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMKCQkJCQl9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5GdWxsTmFtZSAtaW4gJEhlbHBUZXN0RW51bWVyYXRlZEFycmF5cykgewogICAgICAgICAgICAgICAgICAgICMgRW51bWVyYXRpb25zIG9mdGVuIGhhdmUgaXNzdWVzIHdpdGggdGhlIHR5cGVuYW1lIG5vdCBiZWluZyByZWxpYWJseSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSBbRW51bV06OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5EZWNsYXJlZE1lbWJlcnNbMF0uUmV0dXJuVHlwZSkKCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gewoJCQkJCQkkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMKCQkJCQl9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIFRvIGF2b2lkIGNhbGxpbmcgVHJpbSBtZXRob2Qgb24gYSBudWxsIG9iamVjdC4KICAgICAgICAgICAgICAgICAgICAkaGVscFR5cGUgPSBpZiAoJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUpIHsgJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUuVHJpbSgpIH0KCQkJCQkjIFBhcmFtZXRlciB0eXBlIGluIEhlbHAgc2hvdWxkIG1hdGNoIGNvZGUKCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBoZWxwVHlwZSA9ICRoZWxwVHlwZTsgY29kZVR5cGUgPSAkY29kZVR5cGUgfSB7CgkJCQkJCSRoZWxwVHlwZSB8IFNob3VsZCAtYmUgJGNvZGVUeXBlCgkJCQkJfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcmVhY2ggKCRoZWxwUGFybSBpbiAkSGVscFBhcmFtZXRlck5hbWVzKSB7CgkJCQkjIFNob3VsZG4ndCBmaW5kIGV4dHJhIHBhcmFtZXRlcnMgaW4gaGVscC4KCQkJCUl0ICJmaW5kcyBoZWxwIHBhcmFtZXRlciBpbiBjb2RlOiAkaGVscFBhcm0iIC1UZXN0Q2FzZXMgQHsgaGVscFBhcm0gPSAkaGVscFBhcm07IHBhcmFtZXRlck5hbWVzID0gJHBhcmFtZXRlck5hbWVzIH0gewoJCQkJCSRoZWxwUGFybSAtaW4gJHBhcmFtZXRlck5hbWVzIHwgU2hvdWxkIC1CZSAkdHJ1ZQoJCQkJfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9AQkJBAAACQoEAAAGCwQAAA5IZWxwLlRlc3RzLnBzMQYMBAAAUS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vdGVzdHMvZ2VuZXJhbC9IZWxwLlRlc3RzLnBzMQlbAAAACQ4EAAAJDwQAAAHMAgAAcAAAAAYQBAAAkRVEZXNjcmliZSAiVmFsaWRhdGluZyB0aGUgbW9kdWxlIG1hbmlmZXN0IiB7CgkkbW9kdWxlUm9vdCA9IChSZXNvbHZlLVBhdGggIiRnbG9iYWw6dGVzdHJvb3RcLi4iKS5QYXRoCgkkbWFuaWZlc3QgPSAoKEdldC1Db250ZW50ICIkbW9kdWxlUm9vdFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEiKSAtam9pbiAiYG4iKSB8IEludm9rZS1FeHByZXNzaW9uCglDb250ZXh0ICJCYXNpYyByZXNvdXJjZXMgdmFsaWRhdGlvbiIgewoJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiCgkJSXQgIkV4cG9ydHMgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgcHVibGljIGZvbGRlciIgLVRlc3RDYXNlcyBAeyBmaWxlcyA9ICRmaWxlczsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7CgoJCQkkZnVuY3Rpb25zID0gKENvbXBhcmUtT2JqZWN0IC1SZWZlcmVuY2VPYmplY3QgJGZpbGVzLkJhc2VOYW1lIC1EaWZmZXJlbmNlT2JqZWN0ICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFdoZXJlLU9iamVjdCBTaWRlSW5kaWNhdG9yIC1MaWtlICc8PScpLklucHV0T2JqZWN0CgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQl9CgkJSXQgIkV4cG9ydHMgbm8gZnVuY3Rpb24gdGhhdCBpc24ndCBhbHNvIHByZXNlbnQgaW4gdGhlIHB1YmxpYyBmb2xkZXIiIC1UZXN0Q2FzZXMgQHsgZmlsZXMgPSAkZmlsZXM7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gewoJCQkkZnVuY3Rpb25zID0gKENvbXBhcmUtT2JqZWN0IC1SZWZlcmVuY2VPYmplY3QgJGZpbGVzLkJhc2VOYW1lIC1EaWZmZXJlbmNlT2JqZWN0ICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFdoZXJlLU9iamVjdCBTaWRlSW5kaWNhdG9yIC1MaWtlICc9PicpLklucHV0T2JqZWN0CgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQl9CgoJCUl0ICJFeHBvcnRzIG5vbmUgb2YgaXRzIGludGVybmFsIGZ1bmN0aW9ucyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gewoJCQkkZmlsZXMgPSBHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIioucHMxIgoJCQkkZmlsZXMgfCBXaGVyZS1PYmplY3QgQmFzZU5hbWUgLUluICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCX0KCX0KCglDb250ZXh0ICJJbmRpdmlkdWFsIGZpbGUgdmFsaWRhdGlvbiIgewoJCUl0ICJUaGUgcm9vdCBtb2R1bGUgZmlsZSBleGlzdHMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsKCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkKCRtYW5pZmVzdC5Sb290TW9kdWxlKSIgfCBTaG91bGQgLUJlICR0cnVlCgkJfQoKCQlmb3JlYWNoICgkZm9ybWF0IGluICRtYW5pZmVzdC5Gb3JtYXRzVG9Qcm9jZXNzKQoJCXsKCQkJSXQgIlRoZSBmaWxlICRmb3JtYXQgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgZm9ybWF0ID0gJGZvcm1hdCB9IHsKCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGZvcm1hdCIgfCBTaG91bGQgLUJlICR0cnVlCgkJCX0KCQl9CgoJCWZvcmVhY2ggKCR0eXBlIGluICRtYW5pZmVzdC5UeXBlc1RvUHJvY2VzcykKCQl7CgkJCUl0ICJUaGUgZmlsZSAkdHlwZSBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyB0eXBlID0gJHR5cGUgfSB7CgkJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCR0eXBlIiB8IFNob3VsZCAtQmUgJHRydWUKCQkJfQoJCX0KCgkJZm9yZWFjaCAoJGFzc2VtYmx5IGluICRtYW5pZmVzdC5SZXF1aXJlZEFzc2VtYmxpZXMpCgkJewogICAgICAgICAgICBpZiAoJGFzc2VtYmx5IC1saWtlICIqLmRsbCIpIHsKICAgICAgICAgICAgICAgIEl0ICJUaGUgZmlsZSAkYXNzZW1ibHkgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgYXNzZW1ibHkgPSAkYXNzZW1ibHkgfSB7CiAgICAgICAgICAgICAgICAgICAgVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkYXNzZW1ibHkiIHwgU2hvdWxkIC1CZSAkdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgSXQgIlRoZSBmaWxlICRhc3NlbWJseSBzaG91bGQgbG9hZCBmcm9tIHRoZSBHQUMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBhc3NlbWJseSA9ICRhc3NlbWJseSB9IHsKICAgICAgICAgICAgICAgICAgICB7IEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgJGFzc2VtYmx5IH0gfCBTaG91bGQgLU5vdCAtVGhyb3cKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgkJZm9yZWFjaCAoJHRhZyBpbiAkbWFuaWZlc3QuUHJpdmF0ZURhdGEuUFNEYXRhLlRhZ3MpCgkJewoJCQlJdCAiVGFncyBzaG91bGQgaGF2ZSBubyBzcGFjZXMgaW4gbmFtZSIgLVRlc3RDYXNlcyBAeyB0YWcgPSAkdGFnIH0gewoJCQkJJHRhZyAtbWF0Y2ggIiAiIHwgU2hvdWxkIC1CZSAkZmFsc2UKCQkJfQoJCX0KCX0KfQEJEQQAAAkSBAAABhMEAAASTWFuaWZlc3QuVGVzdHMucHMxBhQEAABVL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsL01hbmlmZXN0LlRlc3RzLnBzMQlbAAAACRYEAAAJFwQAAAHNAgAAcAAAAAYYBAAA7QhbQ21kbGV0QmluZGluZygpXQpQYXJhbSAoCglbc3dpdGNoXQoJJFNraXBUZXN0LAoJCglbc3RyaW5nW11dCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpCikKCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0KCiRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplciA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdAoKRGVzY3JpYmUgJ0ludm9raW5nIFBTU2NyaXB0QW5hbHl6ZXIgYWdhaW5zdCBjb21tYW5kYmFzZScgewoJJGNvbW1hbmRGaWxlcyA9IGZvcmVhY2ggKCRwYXRoIGluICRDb21tYW5kUGF0aCkgewogICAgICAgIEdldC1DaGlsZEl0ZW0gLVBhdGggJHBhdGggLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiCiAgICB9Cgkkc2NyaXB0QW5hbHl6ZXJSdWxlcyA9IEdldC1TY3JpcHRBbmFseXplclJ1bGUKCQoJZm9yZWFjaCAoJGZpbGUgaW4gJGNvbW1hbmRGaWxlcykKCXsKCQlDb250ZXh0ICJBbmFseXppbmcgJCgkZmlsZS5CYXNlTmFtZSkiIHsKCQkJJGFuYWx5c2lzID0gSW52b2tlLVNjcmlwdEFuYWx5emVyIC1QYXRoICRmaWxlLkZ1bGxOYW1lIC1FeGNsdWRlUnVsZSBQU0F2b2lkVHJhaWxpbmdXaGl0ZXNwYWNlLCBQU1Nob3VsZFByb2Nlc3MKCQkJCgkJCWZvckVhY2ggKCRydWxlIGluICRzY3JpcHRBbmFseXplclJ1bGVzKQoJCQl7CgkJCQlJdCAiU2hvdWxkIHBhc3MgJHJ1bGUiIC1UZXN0Q2FzZXMgQHsgYW5hbHlzaXMgPSAkYW5hbHlzaXM7IHJ1bGUgPSAkcnVsZSB9IHsKCQkJCQlJZiAoJGFuYWx5c2lzLlJ1bGVOYW1lIC1jb250YWlucyAkcnVsZSkKCQkJCQl7CgkJCQkJCSRhbmFseXNpcyB8IFdoZXJlLU9iamVjdCBSdWxlTmFtZSAtRVEgJHJ1bGUgLW91dHZhcmlhYmxlIGZhaWx1cmVzIHwgRm9yRWFjaC1PYmplY3QgeyAkbnVsbCA9ICRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplci5BZGQoJF8pIH0KCQkJCQkJCgkJCQkJCTEgfCBTaG91bGQgLUJlIDAKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJMCB8IFNob3VsZCAtQmUgMAoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KfQEJGQQAAAkaBAAABhsEAAAaUFNTY3JpcHRBbmFseXplci5UZXN0cy5wczEGHAQAAF0vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL2dlbmVyYWwvUFNTY3JpcHRBbmFseXplci5UZXN0cy5wczEJWwAAAAkeBAAACR8EAAABzgIAAHAAAAAGIAQAAMMHJGV4Y2VwdGlvbnMgPSBAeyB9Cgo8IwpBIGxpc3Qgb2YgZW50cmllcyB0aGF0IE1BWSBiZSBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMsIHdpdGhvdXQgY2F1c2luZyB0aGUgdGVzdHMgdG8gZmFpbC4KVGhpcyBpcyBjb21tb25seSB1c2VkIGluIG1vZHVsZXMgdGhhdCBnZW5lcmF0ZSBsb2NhbGl6ZWQgbWVzc2FnZXMgc3RyYWlnaHQgZnJvbSBDIy4KU3BlY2lmeSB0aGUgZnVsbCBrZXkgYXMgaXQgaXMgd3JpdHRlbiBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMsIGRvIG5vdCBwcmVwZW5kIHRoZSBtb2R1bGVuYW1lLAphcyB5b3Ugd291bGQgaGF2ZSB0byBpbiBDIyBjb2RlLgoKRXhhbXBsZToKJGV4Y2VwdGlvbnNbJ0xlZ2FsU3VycGx1cyddID0gQCgKICAgICdFeGNlcHRpb24uU3RyZWFtcy5GYWlsZWRDcmVhdGUnCiAgICAnRXhjZXB0aW9uLlN0cmVhbXMuRmFpbGVkRGlzcG9zZScKKQojPgokZXhjZXB0aW9uc1snTGVnYWxTdXJwbHVzJ10gPSBAKAoKKQo8IwpBIGxpc3Qgb2YgZW50cmllcyB0aGF0IE1BWSBiZSB1c2VkIHdpdGhvdXQgbmVlZGluZyB0byBoYXZlIHRleHQgZGVmaW5lZC4KVGhpcyBpcyBpbnRlbmRlZCBmb3IgbW9kdWxlcyAocmUtKXVzaW5nIHN0cmluZ3MgcHJvdmlkZWQgYnkgYW5vdGhlciBtb2R1bGUKIz4KJGV4Y2VwdGlvbnNbJ05vVGV4dE5lZWRlZCddID0gQCgKCSdWYWxpZGF0ZS5GU1BhdGgnCgknVmFsaWRhdGUuRlNQYXRoLkZpbGUnCgknVmFsaWRhdGUuRlNQYXRoLkZpbGVPclBhcmVudCcKCSdWYWxpZGF0ZS5GU1BhdGguRm9sZGVyJwoJJ1ZhbGlkYXRlLlBhdGgnCgknVmFsaWRhdGUuUGF0aC5Db250YWluZXInCgknVmFsaWRhdGUuUGF0aC5MZWFmJwoJJ1ZhbGlkYXRlLlRpbWVTcGFuLlBvc2l0aXZlJwoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZScKCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUuRmlsZScKCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUuSHR0cHMnCikKCiRleGNlcHRpb25zAQkhBAAACSIEAAAGIwQAABZzdHJpbmdzLkV4Y2VwdGlvbnMucHMxBiQEAABZL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi90ZXN0cy9nZW5lcmFsL3N0cmluZ3MuRXhjZXB0aW9ucy5wczEJWwAAAAkmBAAACScEAAABzwIAAHAAAAAGKAQAAP0HPCMKLkRFU0NSSVBUSU9OCiAgICBUaGlzIHRlc3QgdmVyaWZpZXMsIHRoYXQgYWxsIHN0cmluZ3MgdGhhdCBoYXZlIGJlZW4gdXNlZCwKICAgIGFyZSBsaXN0ZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGVzIGFuZCB0aHVzIGhhdmUgYSBtZXNzYWdlIGJlaW5nIGRpc3BsYXllZC4KCiAgICBJdCBhbHNvIGNoZWNrcywgd2hldGhlciB0aGUgbGFuZ3VhZ2UgZmlsZXMgaGF2ZSBvcnBoYW5lZCBlbnRyaWVzIHRoYXQgbmVlZCBjbGVhbmluZyB1cC4KIz4KCgoKRGVzY3JpYmUgIlRlc3RpbmcgbG9jYWxpemF0aW9uIHN0cmluZ3MiIHsKCSRtb2R1bGVSb290ID0gKEdldC1Nb2R1bGUgw75uYW1lw74pLk1vZHVsZUJhc2UKCSRzdHJpbmdzUmVzdWx0cyA9IEV4cG9ydC1QU01EU3RyaW5nIC1Nb2R1bGVSb290ICRtb2R1bGVSb290CgkkZXhjZXB0aW9ucyA9ICYgIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxzdHJpbmdzLkV4Y2VwdGlvbnMucHMxIgoJCglmb3JlYWNoICgkc3RyaW5nRW50cnkgaW4gJHN0cmluZ3NSZXN1bHRzKSB7CiAgICAgICAgaWYgKCRzdHJpbmdFbnRyeS5TdHJpbmcgLWVxICJrZXkiKSB7IGNvbnRpbnVlIH0gIyBTa2lwcGluZyB0aGUgdGVtcGxhdGUgZGVmYXVsdCBlbnRyeQoJCUl0ICJTaG91bGQgYmUgdXNlZCAmIGhhdmUgdGV4dDogJCgkc3RyaW5nRW50cnkuU3RyaW5nKSIgLVRlc3RDYXNlcyBAeyBzdHJpbmdFbnRyeSA9ICRzdHJpbmdFbnRyeTsgZXhjZXB0aW9ucyA9ICRleGNlcHRpb25zIH0gewogICAgICAgICAgICBpZiAoJGV4Y2VwdGlvbnMuTGVnYWxTdXJwbHVzIC1ub3Rjb250YWlucyAkc3RyaW5nRW50cnkuU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAkc3RyaW5nRW50cnkuU3VycGx1cyB8IFNob3VsZCAtQmVGYWxzZQoJCQl9CgkJCWlmICgkZXhjZXB0aW9ucy5Ob1RleHROZWVkZWQgLW5vdGNvbnRhaW5zICRzdHJpbmdFbnRyeS5TdHJpbmcpIHsKCQkJCSRzdHJpbmdFbnRyeS5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkKCQkJfQogICAgICAgIH0KICAgIH0KfQEJKQQAAAkqBAAABisEAAARc3RyaW5ncy5UZXN0cy5wczEGLAQAAFQvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L3Rlc3RzL2dlbmVyYWwvc3RyaW5ncy5UZXN0cy5wczEJWwAAAAkuBAAACS8EAAAB1wIAAAgAAAAJMAQAAAEAAAABAAAAAdgCAAAIAAAACWwAAAAAAAAAAAAAAAHcAgAACAAAAAlsAAAAAAAAAAAAAAAB3QIAAAgAAAAJbAAAAAAAAAAAAAAAAd8CAAAIAAAACWwAAAAAAAAAAAAAAAHgAgAACAAAAAlsAAAAAAAAAAAAAAAB5AIAAAgAAAAJbAAAAAAAAAAAAAAAAeUCAAAIAAAACWwAAAAAAAAAAAAAAAHnAgAACAAAAAlsAAAAAAAAAAAAAAAB6AIAAAgAAAAJbAAAAAAAAAAAAAAAAewCAAAIAAAACWwAAAAAAAAAAAAAAAHtAgAACAAAAAlsAAAAAAAAAAAAAAAB7wIAAAgAAAAJMgQAAAEAAAABAAAAAfACAAAIAAAACWwAAAAAAAAAAAAAAAH0AgAACAAAAAlsAAAAAAAAAAAAAAAB9QIAAAgAAAAJbAAAAAAAAAAAAAAAAfcCAAAIAAAACTQEAAACAAAAAgAAAAH4AgAACAAAAAk1BAAAAgAAAAIAAAAB/AIAAAgAAAAJbAAAAAAAAAAAAAAAAf0CAAAIAAAACWwAAAAAAAAAAAAAAAH/AgAACAAAAAlsAAAAAAAAAAAAAAABAAMAAAgAAAAJbAAAAAAAAAAAAAAAAQQDAAAIAAAACWwAAAAAAAAAAAAAAAEFAwAACAAAAAlsAAAAAAAAAAAAAAABBwMAAAgAAAAJbAAAAAAAAAAAAAAAAQgDAAAIAAAACWwAAAAAAAAAAAAAAAEMAwAACAAAAAlsAAAAAAAAAAAAAAABDQMAAAgAAAAJbAAAAAAAAAAAAAAAAQ8DAAAIAAAACTcEAAABAAAAAQAAAAEQAwAACAAAAAlsAAAAAAAAAAAAAAABFAMAAAgAAAAJbAAAAAAAAAAAAAAAARUDAAAIAAAACWwAAAAAAAAAAAAAAAEXAwAACAAAAAk5BAAAAQAAAAEAAAABGAMAAAgAAAAJbAAAAAAAAAAAAAAAARwDAAAIAAAACWwAAAAAAAAAAAAAAAEdAwAACAAAAAlsAAAAAAAAAAAAAAABHwMAAAgAAAAJOwQAAAEAAAABAAAAASADAAAIAAAACWwAAAAAAAAAAAAAAAEkAwAACAAAAAlsAAAAAAAAAAAAAAABJQMAAAgAAAAJbAAAAAAAAAAAAAAAAScDAAAIAAAACWwAAAAAAAAAAAAAAAEoAwAACAAAAAlsAAAAAAAAAAAAAAABLAMAAAgAAAAJbAAAAAAAAAAAAAAAAS0DAAAIAAAACWwAAAAAAAAAAAAAAAEvAwAACAAAAAlsAAAAAAAAAAAAAAABMAMAAAgAAAAJbAAAAAAAAAAAAAAAATQDAAAIAAAACWwAAAAAAAAAAAAAAAE1AwAACAAAAAlsAAAAAAAAAAAAAAABNwMAAAgAAAAJPQQAAAEAAAABAAAAATgDAAAIAAAACWwAAAAAAAAAAAAAAAE8AwAACAAAAAk/BAAAAQAAAAEAAAABPQMAAAgAAAAJbAAAAAAAAAAAAAAAAT8DAAAIAAAACWwAAAAAAAAAAAAAAAFAAwAACAAAAAlsAAAAAAAAAAAAAAABRAMAAAgAAAAJbAAAAAAAAAAAAAAAAUUDAAAIAAAACWwAAAAAAAAAAAAAAAFHAwAACAAAAAlBBAAAAgAAAAIAAAABSAMAAAgAAAAJbAAAAAAAAAAAAAAAAUwDAAAIAAAACWwAAAAAAAAAAAAAAAFNAwAACAAAAAlsAAAAAAAAAAAAAAABTwMAAAgAAAAJQwQAAAEAAAABAAAAAVADAAAIAAAACWwAAAAAAAAAAAAAAAFUAwAACAAAAAlsAAAAAAAAAAAAAAABVQMAAAgAAAAJbAAAAAAAAAAAAAAAAVcDAAAIAAAACWwAAAAAAAAAAAAAAAFYAwAACAAAAAlsAAAAAAAAAAAAAAABXAMAAAgAAAAJbAAAAAAAAAAAAAAAAV0DAAAIAAAACWwAAAAAAAAAAAAAAAFfAwAACAAAAAlsAAAAAAAAAAAAAAABYAMAAAgAAAAJbAAAAAAAAAAAAAAAAWQDAAAIAAAACWwAAAAAAAAAAAAAAAFlAwAACAAAAAlsAAAAAAAAAAAAAAABZwMAAAgAAAAJRQQAAAEAAAABAAAAAWgDAAAIAAAACWwAAAAAAAAAAAAAAAFsAwAACAAAAAlsAAAAAAAAAAAAAAABbQMAAAgAAAAJbAAAAAAAAAAAAAAAAW8DAAAIAAAACUcEAAABAAAAAQAAAAFwAwAACAAAAAlsAAAAAAAAAAAA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cG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJgAQAAAmBBAAACYIEAAAJgwQAAAmEBAAADQMHVQQAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmFBAAACYYEAAAJhwQAAAoHVwQAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmIBAAADQMHWQQAAAABAAAACAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmJBAAACYoEAAAJiwQAAAmMBAAACY0EAAAJjgQAAAmPBAAACZAEAAARWwQAAAQAAAAGkQQAAARuYW1lDQMRXAQAAAQAAAAGkgQAAAp0ZXN0Zm9sZGVyBpMEAAAMcGVzdGVyY29uZmlnDQIRXgQAAAQAAAAGlAQAAARuYW1lDQMRYAQAAAQAAAAGlQQAAARuYW1lDQMRYgQAAAQAAAAGlgQAAARuYW1lDQMRZAQAAAQAAAAGlwQAAARuYW1lDQMRZgQAAAQAAAAGmAQAAARuYW1lDQMRaAQAAAQAAAAGmQQAAARuYW1lDQMBfAQAAHAAAAAGmgQAAKYWPCMKVGhpcyBpcyBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZQoKQnkgZGVmYXVsdCwgaXQgaXMgZW5vdWdoIHRvIGhhdmUgYSBzaW5nbGUgb25lIG9mIHRoZW0sCmhvd2V2ZXIgaWYgeW91IGhhdmUgZW5vdWdoIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8ganVzdGlmeSBoYXZpbmcgbXVsdGlwbGUgY29waWVzIG9mIGl0LApmZWVsIHRvdGFsbHkgZnJlZSB0byBzcGxpdCB0aGVtIGludG8gbXVsdGlwbGUgZmlsZXMuCiM+Cgo8IwojIEV4YW1wbGUgQ29uZmlndXJhdGlvbgpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnRXhhbXBsZS5TZXR0aW5nJyAtVmFsdWUgMTAgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2ludGVnZXInIC1IYW5kbGVyIHsgfSAtRGVzY3JpcHRpb24gIkV4YW1wbGUgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBZb3VyIG1vZHVsZSBjYW4gdGhlbiB1c2UgdGhlIHNldHRpbmcgdXNpbmcgJ0dldC1QU0ZDb25maWdWYWx1ZSciCiM+CgpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnSW1wb3J0LkRvRG90U291cmNlJyAtVmFsdWUgJGZhbHNlIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdib29sJyAtRGVzY3JpcHRpb24gIldoZXRoZXIgdGhlIG1vZHVsZSBmaWxlcyBzaG91bGQgYmUgZG90c291cmNlZCBvbiBpbXBvcnQuIEJ5IGRlZmF1bHQsIHRoZSBmaWxlcyBvZiB0aGlzIG1vZHVsZSBhcmUgcmVhZCBhcyBzdHJpbmcgdmFsdWUgYW5kIGludm9rZWQsIHdoaWNoIGlzIGZhc3RlciBidXQgd29yc2Ugb24gZGVidWdnaW5nLiIKU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0ltcG9ydC5JbmRpdmlkdWFsRmlsZXMnIC1WYWx1ZSAkZmFsc2UgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2Jvb2wnIC1EZXNjcmlwdGlvbiAiV2hldGhlciB0aGUgbW9kdWxlIGZpbGVzIHNob3VsZCBiZSBpbXBvcnRlZCBpbmRpdmlkdWFsbHkuIER1cmluZyB0aGUgbW9kdWxlIGJ1aWxkLCBhbGwgbW9kdWxlIGNvZGUgaXMgY29tcGlsZWQgaW50byBmZXcgZmlsZXMsIHdoaWNoIGFyZSBpbXBvcnRlZCBpbnN0ZWFkIGJ5IGRlZmF1bHQuIExvYWRpbmcgdGhlIGNvbXBpbGVkIHZlcnNpb25zIGlzIGZhc3RlciwgdXNpbmcgdGhlIGluZGl2aWR1YWwgZmlsZXMgaXMgZWFzaWVyIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3Rpbmcgb3V0IGFkanVzdG1lbnRzLiIKClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdDb25zb2xlTG9nZ2luZy5lbmFibGVkJyAtVmFsdWUgJHRydWUgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2Jvb2wnIC1EZXNjcmlwdGlvbiAiSWYgc2V0IHRvIGAkdHJ1ZSwgTWVzc2FnZXMgZnJvbSB0aGUgbW9kdWxlIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBtYWluIGNvbnNvbGUiCiMgU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLnN0eWxlJyAtVmFsdWUgJ0NPTjogJU1lc3NhZ2UlJyAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBzdHJpbmcgLURlc2NyaXB0aW9uICJXaGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnNvbGU/IgojIFNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdDb25zb2xlTG9nZ2luZy5zdHlsZScgLVZhbHVlICclVGFncyV8JUxldmVsJXwlTW9kdWxlJXwlRnVuY3Rpb25OYW1lJTogJU1lc3NhZ2UlJyAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBzdHJpbmcgLURlc2NyaXB0aW9uICJXaGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnNvbGU/IgpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnQ29uc29sZUxvZ2dpbmcuc3R5bGUnIC1WYWx1ZSAnWyVMZXZlbCVdICVNZXNzYWdlJScgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gc3RyaW5nIC1EZXNjcmlwdGlvbiAiV2hhdCBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSBjb25zb2xlPyIKIyBQb3NzaWJsZSBsZXZlbHM6IENyaXRpY2FsICgxKSwgSW1wb3J0YW50IC8gT3V0cHV0IC8gSG9zdCAoMiksIFNpZ25pZmljYW50ICgzKSwgVmVyeVZlcmJvc2UgKDQpLCBWZXJib3NlICg1KSwgU29tZXdoYXRWZXJib3NlICg2KSwgU3lzdGVtICg3KSwgRGVidWcgKDgpLCBJbnRlcm5hbENvbW1lbnQgKDkpLCBXYXJuaW5nCiMgICAgICAgICAoNjY2KSBFaXRoZXIgb25lIG9mIHRoZSBzdHJpbmdzIG9yIGl0cyByZXNwZWN0aXZlIG51bWJlciB3aWxsIGRvIGFzIGlucHV0LgpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnQ29uc29sZUxvZ2dpbmcuTWluTGV2ZWwnIC1WYWx1ZSAxIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIGludGVnZXIgLURlc2NyaXB0aW9uICJGcm9tIHdoaWNoIGxldmVsIHN0YXJ0aW5nIG9uIHNob3VsZCBtZXNzYWdlcyBiZSBzZW50IHRvIHRoZSBwcm92aWRlcj8iClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdDb25zb2xlTG9nZ2luZy5NYXhMZXZlbCcgLVZhbHVlIDEgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gaW50ZWdlciAtRGVzY3JpcHRpb24gIlVwIHRvIHdoaWNoIGxldmVsIHNob3VsZCBtZXNzYWdlcyBiZSBzZW50IHRvIHRoZSBwcm92aWRlcj8iCgEJmwQAAAmcBAAABp0EAAARY29uZmlndXJhdGlvbi5wczEGngQAAIIBL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9jb25maWd1cmF0aW9ucy9jb25maWd1cmF0aW9uLnBzMQlbAAAACaAEAAAJoQQAAAF9BAAAcAAAAAaiBAAA8QMjIENvbmZpZ3VyYXRpb25zCgpUaHJvdWdoIHRoZSBgUFNGcmFtZXdvcmtgIHlvdSBoYXZlIGEgc2ltcGxlIG1ldGhvZCB0aGF0IGFsbG93cyB5b3UgdG8gLi4uCgogLSBQdWJsaXNoIHNldHRpbmdzCiAtIFdpdGggb25ib2FyZCBkb2N1bWVudGF0aW9uCiAtIElucHV0IHZhbGlkYXRpb24KIC0gU2NyaXB0cyB0aGF0IHJ1biBvbiBjaGFuZ2Ugb2Ygc2V0dGluZ3MKIC0gVGhhdCBjYW4gYmUgZGlzY292ZXJlZCBhbmQgdXBkYXRlZCBieSB0aGUgdXNlcgogLSBUaGF0IGNhbiBiZSBhZG1pbmlzdHJhdGVkIGJ5IHBvbGljeSAmIERTQwoKVGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIGEgYml0IHRvbyBjb21wbGV4IHRvIGRlc2NyaWJlIGluIGEgaGVscCBmaWxlLCB5b3UgY2FuIGhvd2V2ZXIgdmlzaXQgdXMgYXQgaHR0cDovL3BzZnJhbWV3b3JrLm9yZyBmb3IgZGV0YWlsZWQgZ3VpZGFuY2UuCgpBbiBleGFtcGxlIGNhbiBiZSBzZWVuIGluIHRoZSBhdHRhY2hlZCBwczEgZmlsZQEJowQAAAmkBAAABqUEAAAJcmVhZG1lLm1kBqYEAAB6L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC9jb25maWd1cmF0aW9ucy9yZWFkbWUubWQJWwAAAAmoBAAACakEAAABfgQAAHAAAAAGqgQAANUBIyBGdW5jdGlvbnMKClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIGdvLgoKRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4KClRoZSBtb2R1bGUgd2lsbCBwaWNrIHVwIGFsbCAucHMxIGZpbGVzIHJlY3Vyc2l2ZWx5AQmrBAAACawEAAAGrQQAAAlyZWFkbWUubWQGrgQAAHUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL2Z1bmN0aW9ucy9yZWFkbWUubWQJWwAAAAmwBAAACbEEAAABfwQAAHAAAAAGsgQAAPkCPCMKU3RvcmVkIHNjcmlwdGJsb2NrcyBhcmUgYXZhaWxhYmxlIGluIFtQc2ZWYWxpZGF0ZVNjcmlwdCgpXSBhdHRyaWJ1dGVzLgpUaGlzIG1ha2VzIGl0IGVhc2llciB0byBjZW50cmFsbHkgcHJvdmlkZSB0aGUgc2FtZSBzY3JpcHRibG9jayBtdWx0aXBsZSB0aW1lcywKd2l0aG91dCBoYXZpbmcgdG8gbWFpbnRhaW4gaXQgaW4gc2VwYXJhdGUgbG9jYXRpb25zLgoKSXQgYWxzbyBwcmV2ZW50cyBsZW5ndGh5IHZhbGlkYXRpb24gc2NyaXB0YmxvY2tzIGZyb20gbWFraW5nIHlvdXIgcGFyYW1ldGVyIGJsb2NrCmhhcmQgdG8gcmVhZC4KClNldC1QU0ZTY3JpcHRibG9jayAtTmFtZSAnw75uYW1lw74uU2NyaXB0QmxvY2tOYW1lJyAtU2NyaXB0YmxvY2sgewoJCn0KIz4BCbMEAAAJtAQAAAa1BAAAEHNjcmlwdGJsb2Nrcy5wczEGtgQAAH8vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3NjcmlwdGJsb2Nrcy9zY3JpcHRibG9ja3MucHMxCVsAAAAJuAQAAAm5BAAAAYAEAABwAAAABroEAADnBldyaXRlLVBTRk1lc3NhZ2UgIkNvbmZpZ3VyZSBDb25zb2xlIExvZ2dpbmciCmlmIChHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi5Db25zb2xlTG9nZ2luZy5lbmFibGVkJyAtRmFsbGJhY2sgJGZhbHNlKSB7CiAgICAkcHJvdmlkZXJQYXJhbT1AewogICAgICAgIE5hbWU9ImNvbnNvbGUiCiAgICAgICAgRW5hYmxlZD0kdHJ1ZQogICAgICAgIHN0eWxlPUdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLkNvbnNvbGVMb2dnaW5nLnN0eWxlJwogICAgICAgIE1pbkxldmVsPUdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLkNvbnNvbGVMb2dnaW5nLk1pbkxldmVsJwogICAgICAgIE1heExldmVsPUdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLkNvbnNvbGVMb2dnaW5nLk1heExldmVsJwogICAgICAgIEluc3RhbmNlTmFtZSA9ICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LmNvbnNvbGUnCiAgICB9CiAgICBXcml0ZS1QU0ZNZXNzYWdlICJDb25maWd1cmUgQ29uc29sZSBMb2dnaW5nIHdpdGggUGFyYW09JCgkcHJvdmlkZXJQYXJhbXxDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIgogICAgU2V0LVBTRkxvZ2dpbmdQcm92aWRlciBAcHJvdmlkZXJQYXJhbSAtSW5jbHVkZU1vZHVsZXMgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJwoKfWVsc2V7CiAgICBXcml0ZS1QU0ZNZXNzYWdlICJOT1QgQ29uZmlndXJlIENvbnNvbGUgTG9nZ2luZyIKfQoBCbsEAAAJvAQAAAa9BAAAE2NvbnNvbGVfbG9nZ2luZy5wczEGvgQAAH0vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3NjcmlwdHMvY29uc29sZV9sb2dnaW5nLnBzMQlbAAAACcAEAAAJwQQAAAGBBAAAcAAAAAbCBAAA4glOZXctUFNGTGljZW5zZSAtUHJvZHVjdCAnw75uYW1lw74nIC1NYW51ZmFjdHVyZXIgJ8O+YXV0aG9yw74nIC1Qcm9kdWN0VmVyc2lvbiAkc2NyaXB0Ok1vZHVsZVZlcnNpb24gLVByb2R1Y3RUeXBlIE1vZHVsZSAtTmFtZSBNSVQgLVZlcnNpb24gIjEuMC4wLjAiIC1EYXRlIChHZXQtRGF0ZSAiw74hZGF0ZSHDviIpIC1UZXh0IEAiCkNvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoiQAEJwwQAAAnEBAAABsUEAAALbGljZW5zZS5wczEGxgQAAHUvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3NjcmlwdHMvbGljZW5zZS5wczEJWwAAAAnIBAAACckEAAABggQAAHAAAAAGygQAAPkGPCMKQWRkIGFsbCB0aGluZ3MgeW91IHdhbnQgdG8gcnVuIGFmdGVyIGltcG9ydGluZyB0aGUgbWFpbiBmdW5jdGlvbiBjb2RlCgpXQVJOSU5HOiBPTkxZIHByb3ZpZGUgcGF0aHMgdG8gZmlsZXMhCgpBZnRlciBidWlsZGluZyB0aGUgbW9kdWxlLCB0aGlzIGZpbGUgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQsIGFkZGluZyBhbnl0aGluZyBidXQgcGF0aHMgdG8gZmlsZXMgLi4uCi0gV2lsbCBub3Qgd29yayBhZnRlciBwdWJsaXNoaW5nCi0gQ291bGQgYnJlYWsgdGhlIGJ1aWxkIHByb2Nlc3MKIz4KCiRtb2R1bGVSb290ID0gU3BsaXQtUGF0aCAoU3BsaXQtUGF0aCAkUFNTY3JpcHRSb290KQoKIyBMb2FkIENvbmZpZ3VyYXRpb25zCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxjb25maWd1cmF0aW9uc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUKCiMgTG9hZCBTY3JpcHRibG9ja3MKKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdGJsb2Nrc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUKCiMgTG9hZCBUYWIgRXhwYW5zaW9uCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFx0ZXBwXCoudGVwcC5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lCgojIExvYWQgVGFiIEV4cGFuc2lvbiBBc3NpZ25tZW50CiIkbW9kdWxlUm9vdFxpbnRlcm5hbFx0ZXBwXGFzc2lnbm1lbnQucHMxIgoKIyBDb25maWd1cmUgYWRkaXRpb25hbCBjb25zb2xlIGxvZ2dpbmcKIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNcY29uc29sZV9sb2dnaW5nLnBzMSIKCiMgTG9hZCBMaWNlbnNlCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXGxpY2Vuc2UucHMxIgEJywQAAAnMBAAABs0EAAAOcG9zdGltcG9ydC5wczEGzgQAAHgvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3NjcmlwdHMvcG9zdGltcG9ydC5wczEJWwAAAAnQBAAACdEEAAABgwQAAHAAAAAG0gQAAKMDPCMKQWRkIGFsbCB0aGluZ3MgeW91IHdhbnQgdG8gcnVuIGJlZm9yZSBpbXBvcnRpbmcgdGhlIG1haW4gZnVuY3Rpb24gY29kZS4KCldBUk5JTkc6IE9OTFkgcHJvdmlkZSBwYXRocyB0byBmaWxlcyEKCkFmdGVyIGJ1aWxkaW5nIHRoZSBtb2R1bGUsIHRoaXMgZmlsZSB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZCwgYWRkaW5nIGFueXRoaW5nIGJ1dCBwYXRocyB0byBmaWxlcyAuLi4KLSBXaWxsIG5vdCB3b3JrIGFmdGVyIHB1Ymxpc2hpbmcKLSBDb3VsZCBicmVhayB0aGUgYnVpbGQgcHJvY2VzcwojPgoKJG1vZHVsZVJvb3QgPSBTcGxpdC1QYXRoIChTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QpCgojIExvYWQgdGhlIHN0cmluZ3MgdXNlZCBpbiBtZXNzYWdlcwoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xzdHJpbmdzLnBzMSIBCdMEAAAJ1AQAAAbVBAAADXByZWltcG9ydC5wczEG1gQAAHcvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3NjcmlwdHMvcHJlaW1wb3J0LnBzMQlbAAAACdgEAAAJ2QQAAAGEBAAAcAAAAAbaBAAAzAM8IwpUaGlzIGZpbGUgbG9hZHMgdGhlIHN0cmluZ3MgZG9jdW1lbnRzIGZyb20gdGhlIHJlc3BlY3RpdmUgbGFuZ3VhZ2UgZm9sZGVycy4KVGhpcyBhbGxvd3MgbG9jYWxpemluZyBtZXNzYWdlcyBhbmQgZXJyb3JzLgpMb2FkIHBzZDEgbGFuZ3VhZ2UgZmlsZXMgZm9yIGVhY2ggbGFuZ3VhZ2UgeW91IHdpc2ggdG8gc3VwcG9ydC4KUGFydGlhbCB0cmFuc2xhdGlvbnMgYXJlIGFjY2VwdGFibGUgLSB3aGVuIG1pc3NpbmcgYSBjdXJyZW50IGxhbmd1YWdlIG1lc3NhZ2UsCml0IHdpbGwgZmFsbGJhY2sgdG8gRW5nbGlzaCBvciBhbm90aGVyIGF2YWlsYWJsZSBsYW5ndWFnZS4KIz4KSW1wb3J0LVBTRkxvY2FsaXplZFN0cmluZyAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGVuLXVzXCoucHNkMSIgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1MYW5ndWFnZSAnZW4tVVMnAQnbBAAACdwEAAAG3QQAAAtzdHJpbmdzLnBzMQbeBAAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvc2NyaXB0cy9zdHJpbmdzLnBzMQlbAAAACeAEAAAJ4QQAAAGFBAAAcAAAAAbiBAAAbjwjCiMgRXhhbXBsZToKUmVnaXN0ZXItUFNGVGVwcEFyZ3VtZW50Q29tcGxldGVyIC1Db21tYW5kIEdldC1BbGNvaG9sIC1QYXJhbWV0ZXIgVHlwZSAtTmFtZSDDvm5hbWXDvi5hbGNvaG9sCiM+AQnjBAAACeQEAAAG5QQAAA5hc3NpZ25tZW50LnBzMQbmBAAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vaW50ZXJuYWwvdGVwcC9hc3NpZ25tZW50LnBzMQlbAAAACegEAAAJ6QQAAAGGBAAAcAAAAAbqBAAAoAE8IwojIEV4YW1wbGU6ClJlZ2lzdGVyLVBTRlRlcHBTY3JpcHRibG9jayAtTmFtZSAiw75uYW1lw74uYWxjb2hvbCIgLVNjcmlwdEJsb2NrIHsgJ0JlZXInLCdNZWFkJywnV2hpc2tleScsJ1dpbmUnLCdWb2RrYScsJ1J1bSAoM3kpJywgJ1J1bSAoNXkpJywgJ1J1bSAoN3kpJyB9CiM+AQnrBAAACewEAAAG7QQAABBleGFtcGxlLnRlcHAucHMxBu4EAAB3L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi9pbnRlcm5hbC90ZXBwL2V4YW1wbGUudGVwcC5wczEJWwAAAAnwBAAACfEEAAABhwQAAHAAAAAG8gQAAKgHIyBUYWIgRXhwYW5zaW9uCgojIyBEZXNjcmlwdGlvbgoKTW9kZXJuIFRhYiBFeHBhbnNpb24gd2FzIG9wZW5lZCB0byB1c2VycyB3aXRoIHRoZSBtb2R1bGUgYFRhYiBFeHBhbnNpb24gUGx1cyBQbHVzYCAoVEVQUCkuCgpJdCBhbGxvd3MgeW91IHRvIGRlZmluZSwgd2hhdCBvcHRpb25zIGEgdXNlciBpcyBvZmZlcmVkIHdoZW4gdGFiYmluZyB0aHJvdWdoIGlucHV0IG9wdGlvbnMuIFRoaXMgY2FuIHNhdmUgYSBsb3Qgb2YgdGltZSBmb3IgdGhlIHVzZXIgYW5kIGlzIGNvbnNpZGVyZWQgYSBrZXkgZWxlbWVudCBpbiB1c2VyIGV4cGVyaWVuY2UuCgpUaGUgYFBTRnJhbWV3b3JrYCBvZmZlcnMgYSBzaW1wbGlmaWVkIHdheSBvZiBvZmZlcmluZyBqdXN0IHRoaXMsIGFzIHRoZSB0d28gZXhhbXBsZSBmaWxlcyBzaG93LgoKIyMgQ29uY2VwdAoKQ3VzdG9tIHRhYiBjb21wbGV0aW9uIGlzIGRlZmluZWQgaW4gdHdvIHN0ZXBzOgoKIC0gRGVmaW5lIGEgc2NyaXB0YmxvY2sgdGhhdCBpcyBydW4gd2hlbiB0aGUgdXNlciBoaXRzIGBUQUJgIGFuZCBwcm92aWRlcyB0aGUgc3RyaW5ncyB0aGF0IGFyZSBoaXMgb3B0aW9ucy4KIC0gQXNzaWduIHRoYXQgc2NyaXB0YmxvY2sgdG8gdGhlIHBhcmFtZXRlciBvZiBhIGNvbW1hbmQuIFlvdSBjYW4gYXNzaWduIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLgoKIyMgU3RydWN0dXJlCgpJbXBvcnQgb3JkZXIgbWF0dGVycy4gSW4gb3JkZXIgdG8gbWFrZSB0aGluZ3Mgd29yayB3aXRoIHRoZSBkZWZhdWx0IHNjYWZmb2xkLCBmb2xsb3cgdGhvc2UgcnVsZXM6CgogLSBBbGwgc2NyaXB0ZmlsZXMgX2RlZmluaW5nXyBjb21wbGV0aW9uIHNjcmlwdGJsb2NrcyBsaWtlIHRoaXM6IGAqLnRlcHAucHMxYAogLSBQdXQgYWxsIHlvdXIgY29tcGxldGlvbiBhc3NpZ25tZW50cyBpbiBgYXNzaWdubWVudC5wczFgAQnzBAAACfQEAAAG9QQAAAlyZWFkbWUubWQG9gQAAHAvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uL2ludGVybmFsL3RlcHAvcmVhZG1lLm1kCVsAAAAJ+AQAAAn5BAAAAYgEAABwAAAABvoEAADPASMgRGVzY3JpcHRpb24KClRoaXMgaXMgd2hlcmUgdGhlIGZ1bmN0aW9uIHRlc3RzIGdvLgoKTWFrZSBzdXJlIHRvIHB1dCB0aGVtIGluIGZvbGRlcnMgcmVmbGVjdGluZyB0aGUgYWN0dWFsIG1vZHVsZSBzdHJ1Y3R1cmUuCgpJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBpbnRlcm5hbCBhbmQgcHVibGljIGZ1bmN0aW9ucyBoZXJlLgEJ+wQAAAn8BAAABv0EAAAJcmVhZG1lLm1kBv4EAAByL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9mdW5jdGlvbnMvcmVhZG1lLm1kCVsAAAAJAAUAAAkBBQAAAYkEAABwAAAABgIFAADeBSMgTGlzdCBvZiBmb3JiaWRkZW4gY29tbWFuZHMKJGdsb2JhbDpCYW5uZWRDb21tYW5kcyA9IEAoCgknV3JpdGUtSG9zdCcKCSdXcml0ZS1WZXJib3NlJwoJJ1dyaXRlLVdhcm5pbmcnCgknV3JpdGUtRXJyb3InCgknV3JpdGUtT3V0cHV0JwoJJ1dyaXRlLUluZm9ybWF0aW9uJwoJJ1dyaXRlLURlYnVnJwoJCgkjIFVzZSBDSU0gaW5zdGVhZCB3aGVyZSBwb3NzaWJsZQoJJ0dldC1XbWlPYmplY3QnCgknSW52b2tlLVdtaU1ldGhvZCcKCSdSZWdpc3Rlci1XbWlFdmVudCcKCSdSZW1vdmUtV21pT2JqZWN0JwoJJ1NldC1XbWlJbnN0YW5jZScKCgkjIFVzZSBHZXQtV2luRXZlbnQgaW5zdGVhZAoJJ0dldC1FdmVudExvZycKKQoKPCMKCUNvbnRhaW5zIGxpc3Qgb2YgZXhjZXB0aW9ucyBmb3IgYmFubmVkIGNtZGxldHMuCglJbnNlcnQgdGhlIGZpbGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBtYXkgY29udGFpbiB0aGVtLgoJCglFeGFtcGxlOgoJIldyaXRlLUhvc3QiICA9IEAoJ1dyaXRlLVBTRkhvc3RDb2xvci5wczEnLCdXcml0ZS1QU0ZNZXNzYWdlLnBzMScpCiM+CiRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmQgPSBAewoJIldyaXRlLUhvc3QiICA9IEAoKQoJIldyaXRlLVZlcmJvc2UiID0gQCgpCgkiV3JpdGUtV2FybmluZyIgPSBAKCkKCSJXcml0ZS1FcnJvciIgID0gQCgpCgkiV3JpdGUtT3V0cHV0IiA9IEAoKQoJIldyaXRlLUluZm9ybWF0aW9uIiA9IEAoKQoJIldyaXRlLURlYnVnIiA9IEAoKQp9AQkDBQAACQQFAAAGBQUAABxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxBgYFAACDAS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZ2VuZXJhbC9GaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxCVsAAAAJCAUAAAkJBQAAAYoEAABwAAAABgoFAACCGCRtb2R1bGVSb290ID0gKFJlc29sdmUtUGF0aCAiJGdsb2JhbDp0ZXN0cm9vdFwuLiIpLlBhdGgKCi4gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxIgoKRGVzY3JpYmUgIlZlcmlmeWluZyBpbnRlZ3JpdHkgb2YgbW9kdWxlIGZpbGVzIiB7CglCZWZvcmVBbGwgewoJCWZ1bmN0aW9uIEdldC1GaWxlRW5jb2RpbmcKCQl7CgkJPCMKCQkJLlNZTk9QU0lTCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLgoJCQkKCQkJLkRFU0NSSVBUSU9OCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLgoJCQkKCQkJLlBBUkFNRVRFUiBQYXRoCgkJCQlUaGUgZmlsZSB0byB0ZXN0CgkJIz4KCQkJW0NtZGxldEJpbmRpbmcoKV0KCQkJUGFyYW0gKAoJCQkJW1BhcmFtZXRlcihNYW5kYXRvcnkgPSAkVHJ1ZSwgVmFsdWVGcm9tUGlwZWxpbmVCeVByb3BlcnR5TmFtZSA9ICRUcnVlKV0KCQkJCVtBbGlhcygnRnVsbE5hbWUnKV0KCQkJCVtzdHJpbmddCgkJCQkkUGF0aAoJCQkpCgkJCQoJCQlpZiAoJFBTVmVyc2lvblRhYmxlLlBTVmVyc2lvbi5NYWpvciAtbHQgNikKCQkJewoJCQkJW2J5dGVbXV0kYnl0ZSA9IGdldC1jb250ZW50IC1FbmNvZGluZyBieXRlIC1SZWFkQ291bnQgNCAtVG90YWxDb3VudCA0IC1QYXRoICRQYXRoCgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlbYnl0ZVtdXSRieXRlID0gR2V0LUNvbnRlbnQgLUFzQnl0ZVN0cmVhbSAtUmVhZENvdW50IDQgLVRvdGFsQ291bnQgNCAtUGF0aCAkUGF0aAoJCQl9CgkJCQoJCQlpZiAoJGJ5dGVbMF0gLWVxIDB4ZWYgLWFuZCAkYnl0ZVsxXSAtZXEgMHhiYiAtYW5kICRieXRlWzJdIC1lcSAweGJmKSB7ICdVVEY4IEJPTScgfQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAweGZlIC1hbmQgJGJ5dGVbMV0gLWVxIDB4ZmYpIHsgJ1VuaWNvZGUnIH0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMCAtYW5kICRieXRlWzFdIC1lcSAwIC1hbmQgJGJ5dGVbMl0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVszXSAtZXEgMHhmZikgeyAnVVRGMzInIH0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMHgyYiAtYW5kICRieXRlWzFdIC1lcSAweDJmIC1hbmQgJGJ5dGVbMl0gLWVxIDB4NzYpIHsgJ1VURjcnIH0KCQkJZWxzZSB7ICdVbmtub3duJyB9CgkJfQoJfQoKCUNvbnRleHQgIlZhbGlkYXRpbmcgUFMxIFNjcmlwdCBmaWxlcyIgewoJCSRhbGxGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJG1vZHVsZVJvb3QgLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIgoJCQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykKCQl7CgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpCgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIHdpdGggQnl0ZSBPcmRlciBNYXJrIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsKCQkJCUdldC1GaWxlRW5jb2RpbmcgLVBhdGggJGZpbGUuRnVsbE5hbWUgfCBTaG91bGQgLUJlICdVVEY4IEJPTScKCQkJfQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gewoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMH0pLkxpbmVOdW1iZXIgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQkJfQoJCQkKCQkJJHRva2VucyA9ICRudWxsCgkJCSRwYXJzZUVycm9ycyA9ICRudWxsCgkJCSRhc3QgPSBbU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5MYW5ndWFnZS5QYXJzZXJdOjpQYXJzZUZpbGUoJGZpbGUuRnVsbE5hbWUsIFtyZWZdJHRva2VucywgW3JlZl0kcGFyc2VFcnJvcnMpCgkJCQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyBzeW50YXggZXJyb3JzIiAtVGVzdENhc2VzIEB7IHBhcnNlRXJyb3JzID0gJHBhcnNlRXJyb3JzIH0gewoJCQkJJHBhcnNlRXJyb3JzIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5CgkJCX0KCQkJCgkJCWZvcmVhY2ggKCRjb21tYW5kIGluICRnbG9iYWw6QmFubmVkQ29tbWFuZHMpCgkJCXsKCQkJCWlmICgkZ2xvYmFsOk1heUNvbnRhaW5Db21tYW5kWyIkY29tbWFuZCJdIC1ub3Rjb250YWlucyAkZmlsZS5OYW1lKQoJCQkJewoJCQkJCUl0ICJbJG5hbWVdIFNob3VsZCBub3QgdXNlICRjb21tYW5kIiAtVGVzdENhc2VzIEB7IHRva2VucyA9ICR0b2tlbnM7IGNvbW1hbmQgPSAkY29tbWFuZCB9IHsKCQkJCQkJJHRva2VucyB8IFdoZXJlLU9iamVjdCBUZXh0IC1FUSAkY29tbWFuZCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCQoJQ29udGV4dCAiVmFsaWRhdGluZyBoZWxwLnR4dCBoZWxwIGZpbGVzIiB7CgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLmhlbHAudHh0IiB8IFdoZXJlLU9iamVjdCBGdWxsTmFtZSAtTm90TGlrZSAiJG1vZHVsZVJvb3RcdGVzdHNcKiIKCQkKCQlmb3JlYWNoICgkZmlsZSBpbiAkYWxsRmlsZXMpCgkJewoJCQkkbmFtZSA9ICRmaWxlLkZ1bGxOYW1lLlJlcGxhY2UoIiRtb2R1bGVSb290XCIsICcnKQoJCQkKCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgVVRGOCBlbmNvZGluZyIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7CgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCBCT00nCgkJCX0KCQkJCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHRyYWlsaW5nIHNwYWNlIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsKCQkJCSgkZmlsZSB8IFNlbGVjdC1TdHJpbmcgIlxzJCIgfCBXaGVyZS1PYmplY3QgeyAkXy5MaW5lLlRyaW0oKS5MZW5ndGggLWd0IDAgfSB8IE1lYXN1cmUtT2JqZWN0KS5Db3VudCB8IFNob3VsZCAtQmUgMAoJCQl9CgkJfQoJfQp9AQkLBQAACQwFAAAGDQUAABdGaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQYOBQAAfi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZ2VuZXJhbC9GaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQlbAAAACRAFAAAJEQUAAAGLBAAAcAAAAAYSBQAAgwUjIExpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQKJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucyA9IEAoCiAgICAKKQoKPCMKICBMaXN0IG9mIGFycmF5ZWQgZW51bWVyYXRpb25zLiBUaGVzZSBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuIEFkZCBmdWxsIG5hbWUuCiAgRXhhbXBsZToKCiAgIlNxbGNvbGxhYm9yYXRpdmUuRGJhdG9vbHMuQ29ubmVjdGlvbi5NYW5hZ2VtZW50Q29ubmVjdGlvblR5cGVbXSIKIz4KJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMgPSBAKAoJCikKCjwjCiAgU29tZSB0eXBlcyBvbiBwYXJhbWV0ZXJzIGp1c3QgZmFpbCB0aGVpciB2YWxpZGF0aW9uIG5vIG1hdHRlciB3aGF0LgogIEZvciB0aG9zZSBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIHNraXAgdGhlbSwgYnkgYWRkaW5nIHRoZW0gdG8gdGhpcyBoYXNodGFibGUuCiAgQWRkIGJ5IGZvbGxvd2luZyB0aGlzIGNvbnZlbnRpb246IDxjb21tYW5kIG5hbWU+ID0gQCg8bGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXM+KQogIEV4YW1wbGU6CgogICJHZXQtRGJhQ21PYmplY3QiICAgICAgID0gQCgiRG9Ob3RVc2UiKQojPgokZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUgPSBAewogICAgCn0KAQkTBQAACRQFAAAGFQUAABNIZWxwLkV4Y2VwdGlvbnMucHMxBhYFAAB6L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsL0hlbHAuRXhjZXB0aW9ucy5wczEJWwAAAAkYBQAACRkFAAABjAQAAHAAAAAGGgUAALwzPCMKICAgIC5OT1RFUwogICAgICAgIFRoZSBvcmlnaW5hbCB0ZXN0IHRoaXMgaXMgYmFzZWQgdXBvbiB3YXMgd3JpdHRlbiBieSBKdW5lIEJsZW5kZXIuCgkJQWZ0ZXIgc2V2ZXJhbCByb3VuZHMgb2YgbW9kaWZpY2F0aW9ucyBpdCBzdGFuZHMgbm93IGFzIGl0IGlzLCBidXQgdGhlIGhvbm9yIHJlbWFpbnMgaGVycy4KCgkJVGhhbmsgeW91IEp1bmUsIGZvciBhbGwgeW91IGhhdmUgZG9uZSEKCiAgICAuREVTQ1JJUFRJT04KCQlUaGlzIHRlc3QgZXZhbHVhdGVzIHRoZSBoZWxwIGZvciBhbGwgY29tbWFuZHMgaW4gYSBtb2R1bGUuCgoJLlBBUkFNRVRFUiBTa2lwVGVzdAoJCURpc2FibGVzIHRoaXMgdGVzdC4KCQoJLlBBUkFNRVRFUiBDb21tYW5kUGF0aAoJCUxpc3Qgb2YgcGF0aHMgdW5kZXIgd2hpY2ggdGhlIHNjcmlwdCBmaWxlcyBhcmUgc3RvcmVkLgoJCVRoaXMgdGVzdCBhc3N1bWVzIHRoYXQgYWxsIGZ1bmN0aW9ucyBoYXZlIHRoZWlyIG93biBmaWxlIHRoYXQgaXMgbmFtZWQgYWZ0ZXIgdGhlbXNlbHZlcy4KCQlUaGVzZSBwYXRocyBhcmUgdXNlZCB0byBzZWFyY2ggZm9yIGNvbW1hbmRzIHRoYXQgc2hvdWxkIGV4aXN0IGFuZCBiZSB0ZXN0ZWQuCgkJV2lsbCBzZWFyY2ggcmVjdXJzaXZlbHkgYW5kIGFjY2VwdHMgd2lsZGNhcmRzLCBtYWtlIHN1cmUgb25seSBmdW5jdGlvbnMgYXJlIGZvdW5kCgoJLlBBUkFNRVRFUiBNb2R1bGVOYW1lCgkJTmFtZSBvZiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZC4KCQlUaGUgbW9kdWxlIG11c3QgYWxyZWFkeSBiZSBpbXBvcnRlZAoKCS5QQVJBTUVURVIgRXhjZXB0aW9uc0ZpbGUKCQlGaWxlIGluIHdoaWNoIGV4Y2VwdGlvbnMgYW5kIGFkanVzdG1lbnRzIGFyZSBjb25maWd1cmVkLgoJCUluIGl0IHRoZXJlIHNob3VsZCBiZSB0d28gYXJyYXlzIGFuZCBhIGhhc2h0YWJsZSBkZWZpbmVkOgoJCQkkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zCgkJCSRnbG9iYWw6SGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzCgkJCSRnbG9iYWw6SGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZQoJCVRoZXNlIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHRoZSB0ZXN0cyBzbGlnaHRseSBpbiBjYXNlcyBvZiBuZWVkLgoJCVNlZSB0aGUgZXhhbXBsZSBmaWxlIGZvciBleHBsYW5hdGlvbnMgb24gZWFjaCBvZiB0aGVzZSB1c2FnZSBhbmQgZWZmZWN0LgojPgpbQ21kbGV0QmluZGluZygpXQpQYXJhbSAoCglbc3dpdGNoXQoJJFNraXBUZXN0LAoJCglbc3RyaW5nW11dCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpLAoJCglbc3RyaW5nXQoJJE1vZHVsZU5hbWUgPSAiw75uYW1lw74iLAoJCglbc3RyaW5nXQoJJEV4Y2VwdGlvbnNGaWxlID0gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxIgopCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0KLiAkRXhjZXB0aW9uc0ZpbGUKCiRpbmNsdWRlZE5hbWVzID0gKEdldC1DaGlsZEl0ZW0gJENvbW1hbmRQYXRoIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIikuQmFzZU5hbWUKJGNvbW1hbmRUeXBlcyA9IEAoJ0NtZGxldCcsICdGdW5jdGlvbicpCmlmICgkUFNWZXJzaW9uVGFibGUuUFNFZGl0aW9uIC1lcSAnRGVza3RvcCcgKSB7ICRjb21tYW5kVHlwZXMgKz0gJ1dvcmtmbG93JyB9CiRjb21tYW5kcyA9IEdldC1Db21tYW5kIC1Nb2R1bGUgKEdldC1Nb2R1bGUgJE1vZHVsZU5hbWUpIC1Db21tYW5kVHlwZSAkY29tbWFuZFR5cGVzIHwgV2hlcmUtT2JqZWN0IE5hbWUgLUluICRpbmNsdWRlZE5hbWVzCgojIyBXaGVuIHRlc3RpbmcgaGVscCwgcmVtZW1iZXIgdGhhdCBoZWxwIGlzIGNhY2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc2Vzc2lvbi4KIyMgVG8gdGVzdCwgcmVzdGFydCBzZXNzaW9uLgoKCmZvcmVhY2ggKCRjb21tYW5kIGluICRjb21tYW5kcykgewogICAgJGNvbW1hbmROYW1lID0gJGNvbW1hbmQuTmFtZQogICAgCiAgICAjIFNraXAgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBvbiB0aGUgZXhjbHVzaW9ucyBsaXN0CiAgICBpZiAoJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucyAtY29udGFpbnMgJGNvbW1hbmROYW1lKSB7IGNvbnRpbnVlIH0KICAgIAogICAgIyBUaGUgbW9kdWxlLXF1YWxpZmllZCBjb21tYW5kIGZhaWxzIG9uIE1pY3Jvc29mdC5Qb3dlclNoZWxsLkFyY2hpdmUgY21kbGV0cwogICAgJEhlbHAgPSBHZXQtSGVscCAkY29tbWFuZE5hbWUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUKCQoJRGVzY3JpYmUgIlRlc3QgaGVscCBmb3IgJGNvbW1hbmROYW1lIiB7CiAgICAgICAgCgkJIyBJZiBoZWxwIGlzIG5vdCBmb3VuZCwgc3lub3BzaXMgaW4gYXV0by1nZW5lcmF0ZWQgaGVscCBpcyB0aGUgc3ludGF4IGRpYWdyYW0KCQlJdCAic2hvdWxkIG5vdCBiZSBhdXRvLWdlbmVyYXRlZCIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7CgkJCSRIZWxwLlN5bm9wc2lzIHwgU2hvdWxkIC1Ob3QgLUJlTGlrZSAnKmBbYDxDb21tb25QYXJhbWV0ZXJzYD5gXSonCgkJfQogICAgICAgIAoJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IGZ1bmN0aW9uCgkJSXQgImdldHMgZGVzY3JpcHRpb24gZm9yICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7CgkJCSRIZWxwLkRlc2NyaXB0aW9uIHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkKCQl9CiAgICAgICAgCgkJIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUKCQlJdCAiZ2V0cyBleGFtcGxlIGNvZGUgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gewoJCQkoJEhlbHAuRXhhbXBsZXMuRXhhbXBsZSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLkNvZGUgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCX0KCQoJCSMgU2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBleGFtcGxlIGRlc2NyaXB0aW9uCgkJSXQgImdldHMgZXhhbXBsZSBoZWxwIGZyb20gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsKCQkJKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQoJCX0KICAgICAgICAKICAgICAgICBDb250ZXh0ICJUZXN0IHBhcmFtZXRlciBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsKICAgICAgICAgICAgCiAgICAgICAgICAgICRjb21tb24gPSAnRGVidWcnLCAnRXJyb3JBY3Rpb24nLCAnRXJyb3JWYXJpYWJsZScsICdJbmZvcm1hdGlvbkFjdGlvbicsICdJbmZvcm1hdGlvblZhcmlhYmxlJywgJ091dEJ1ZmZlcicsICdPdXRWYXJpYWJsZScsICdQaXBlbGluZVZhcmlhYmxlJywgJ1ZlcmJvc2UnLCAnV2FybmluZ0FjdGlvbicsICdXYXJuaW5nVmFyaWFibGUnCiAgICAgICAgICAgIAogICAgICAgICAgICAkcGFyYW1ldGVycyA9ICRjb21tYW5kLlBhcmFtZXRlclNldHMuUGFyYW1ldGVycyB8IFNvcnQtT2JqZWN0IC1Qcm9wZXJ0eSBOYW1lIC1VbmlxdWUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbm90aW4gJGNvbW1vbgogICAgICAgICAgICAkcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVycy5OYW1lCiAgICAgICAgICAgICRIZWxwUGFyYW1ldGVyTmFtZXMgPSAkSGVscC5QYXJhbWV0ZXJzLlBhcmFtZXRlci5OYW1lIHwgU29ydC1PYmplY3QgLVVuaXF1ZQogICAgICAgICAgICBmb3JlYWNoICgkcGFyYW1ldGVyIGluICRwYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyTmFtZSA9ICRwYXJhbWV0ZXIuTmFtZQogICAgICAgICAgICAgICAgJHBhcmFtZXRlckhlbHAgPSAkSGVscC5wYXJhbWV0ZXJzLnBhcmFtZXRlciB8IFdoZXJlLU9iamVjdCBOYW1lIC1FUSAkcGFyYW1ldGVyTmFtZQoJCQkKCQkJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IHBhcmFtZXRlcgoJCQkJSXQgImdldHMgaGVscCBmb3IgcGFyYW1ldGVyOiAkcGFyYW1ldGVyTmFtZSA6IGluICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHAgfSB7CgkJCQkJJHBhcmFtZXRlckhlbHAuRGVzY3JpcHRpb24uVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJCQl9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRjb2RlTWFuZGF0b3J5ID0gJHBhcmFtZXRlci5Jc01hbmRhdG9yeS50b1N0cmluZygpCgkJCQlJdCAiaGVscCBmb3IgJHBhcmFtZXRlck5hbWUgcGFyYW1ldGVyIGluICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBNYW5kYXRvcnkgdmFsdWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwOyBjb2RlTWFuZGF0b3J5ID0gJGNvZGVNYW5kYXRvcnkgfSB7CgkJCQkJJHBhcmFtZXRlckhlbHAuUmVxdWlyZWQgfCBTaG91bGQgLUJlICRjb2RlTWFuZGF0b3J5CgkJCQl9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICgkSGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZVskY29tbWFuZE5hbWVdIC1jb250YWlucyAkcGFyYW1ldGVyTmFtZSkgeyBjb250aW51ZSB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRjb2RlVHlwZSA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5OYW1lCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuSXNFbnVtKSB7CiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlKQoJCQkJCQkjIFBhcmFtZXRlciB0eXBlIGluIEhlbHAgc2hvdWxkIG1hdGNoIGNvZGUKCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gewoJCQkJCQkkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMKCQkJCQl9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5GdWxsTmFtZSAtaW4gJEhlbHBUZXN0RW51bWVyYXRlZEFycmF5cykgewogICAgICAgICAgICAgICAgICAgICMgRW51bWVyYXRpb25zIG9mdGVuIGhhdmUgaXNzdWVzIHdpdGggdGhlIHR5cGVuYW1lIG5vdCBiZWluZyByZWxpYWJseSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSBbRW51bV06OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5EZWNsYXJlZE1lbWJlcnNbMF0uUmV0dXJuVHlwZSkKCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gewoJCQkJCQkkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMKCQkJCQl9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIFRvIGF2b2lkIGNhbGxpbmcgVHJpbSBtZXRob2Qgb24gYSBudWxsIG9iamVjdC4KICAgICAgICAgICAgICAgICAgICAkaGVscFR5cGUgPSBpZiAoJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUpIHsgJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUuVHJpbSgpIH0KCQkJCQkjIFBhcmFtZXRlciB0eXBlIGluIEhlbHAgc2hvdWxkIG1hdGNoIGNvZGUKCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBoZWxwVHlwZSA9ICRoZWxwVHlwZTsgY29kZVR5cGUgPSAkY29kZVR5cGUgfSB7CgkJCQkJCSRoZWxwVHlwZSB8IFNob3VsZCAtYmUgJGNvZGVUeXBlCgkJCQkJfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcmVhY2ggKCRoZWxwUGFybSBpbiAkSGVscFBhcmFtZXRlck5hbWVzKSB7CgkJCQkjIFNob3VsZG4ndCBmaW5kIGV4dHJhIHBhcmFtZXRlcnMgaW4gaGVscC4KCQkJCUl0ICJmaW5kcyBoZWxwIHBhcmFtZXRlciBpbiBjb2RlOiAkaGVscFBhcm0iIC1UZXN0Q2FzZXMgQHsgaGVscFBhcm0gPSAkaGVscFBhcm07IHBhcmFtZXRlck5hbWVzID0gJHBhcmFtZXRlck5hbWVzIH0gewoJCQkJCSRoZWxwUGFybSAtaW4gJHBhcmFtZXRlck5hbWVzIHwgU2hvdWxkIC1CZSAkdHJ1ZQoJCQkJfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9AQkbBQAACRwFAAAGHQUAAA5IZWxwLlRlc3RzLnBzMQYeBQAAdS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZ2VuZXJhbC9IZWxwLlRlc3RzLnBzMQlbAAAACSAFAAAJIQUAAAGNBAAAcAAAAAYiBQAAkRVEZXNjcmliZSAiVmFsaWRhdGluZyB0aGUgbW9kdWxlIG1hbmlmZXN0IiB7CgkkbW9kdWxlUm9vdCA9IChSZXNvbHZlLVBhdGggIiRnbG9iYWw6dGVzdHJvb3RcLi4iKS5QYXRoCgkkbWFuaWZlc3QgPSAoKEdldC1Db250ZW50ICIkbW9kdWxlUm9vdFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEiKSAtam9pbiAiYG4iKSB8IEludm9rZS1FeHByZXNzaW9uCglDb250ZXh0ICJCYXNpYyByZXNvdXJjZXMgdmFsaWRhdGlvbiIgewoJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiCgkJSXQgIkV4cG9ydHMgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgcHVibGljIGZvbGRlciIgLVRlc3RDYXNlcyBAeyBmaWxlcyA9ICRmaWxlczsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7CgoJCQkkZnVuY3Rpb25zID0gKENvbXBhcmUtT2JqZWN0IC1SZWZlcmVuY2VPYmplY3QgJGZpbGVzLkJhc2VOYW1lIC1EaWZmZXJlbmNlT2JqZWN0ICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFdoZXJlLU9iamVjdCBTaWRlSW5kaWNhdG9yIC1MaWtlICc8PScpLklucHV0T2JqZWN0CgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQl9CgkJSXQgIkV4cG9ydHMgbm8gZnVuY3Rpb24gdGhhdCBpc24ndCBhbHNvIHByZXNlbnQgaW4gdGhlIHB1YmxpYyBmb2xkZXIiIC1UZXN0Q2FzZXMgQHsgZmlsZXMgPSAkZmlsZXM7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gewoJCQkkZnVuY3Rpb25zID0gKENvbXBhcmUtT2JqZWN0IC1SZWZlcmVuY2VPYmplY3QgJGZpbGVzLkJhc2VOYW1lIC1EaWZmZXJlbmNlT2JqZWN0ICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFdoZXJlLU9iamVjdCBTaWRlSW5kaWNhdG9yIC1MaWtlICc9PicpLklucHV0T2JqZWN0CgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkKCQl9CgoJCUl0ICJFeHBvcnRzIG5vbmUgb2YgaXRzIGludGVybmFsIGZ1bmN0aW9ucyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gewoJCQkkZmlsZXMgPSBHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIioucHMxIgoJCQkkZmlsZXMgfCBXaGVyZS1PYmplY3QgQmFzZU5hbWUgLUluICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQoJCX0KCX0KCglDb250ZXh0ICJJbmRpdmlkdWFsIGZpbGUgdmFsaWRhdGlvbiIgewoJCUl0ICJUaGUgcm9vdCBtb2R1bGUgZmlsZSBleGlzdHMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsKCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkKCRtYW5pZmVzdC5Sb290TW9kdWxlKSIgfCBTaG91bGQgLUJlICR0cnVlCgkJfQoKCQlmb3JlYWNoICgkZm9ybWF0IGluICRtYW5pZmVzdC5Gb3JtYXRzVG9Qcm9jZXNzKQoJCXsKCQkJSXQgIlRoZSBmaWxlICRmb3JtYXQgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgZm9ybWF0ID0gJGZvcm1hdCB9IHsKCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGZvcm1hdCIgfCBTaG91bGQgLUJlICR0cnVlCgkJCX0KCQl9CgoJCWZvcmVhY2ggKCR0eXBlIGluICRtYW5pZmVzdC5UeXBlc1RvUHJvY2VzcykKCQl7CgkJCUl0ICJUaGUgZmlsZSAkdHlwZSBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyB0eXBlID0gJHR5cGUgfSB7CgkJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCR0eXBlIiB8IFNob3VsZCAtQmUgJHRydWUKCQkJfQoJCX0KCgkJZm9yZWFjaCAoJGFzc2VtYmx5IGluICRtYW5pZmVzdC5SZXF1aXJlZEFzc2VtYmxpZXMpCgkJewogICAgICAgICAgICBpZiAoJGFzc2VtYmx5IC1saWtlICIqLmRsbCIpIHsKICAgICAgICAgICAgICAgIEl0ICJUaGUgZmlsZSAkYXNzZW1ibHkgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgYXNzZW1ibHkgPSAkYXNzZW1ibHkgfSB7CiAgICAgICAgICAgICAgICAgICAgVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkYXNzZW1ibHkiIHwgU2hvdWxkIC1CZSAkdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgSXQgIlRoZSBmaWxlICRhc3NlbWJseSBzaG91bGQgbG9hZCBmcm9tIHRoZSBHQUMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBhc3NlbWJseSA9ICRhc3NlbWJseSB9IHsKICAgICAgICAgICAgICAgICAgICB7IEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgJGFzc2VtYmx5IH0gfCBTaG91bGQgLU5vdCAtVGhyb3cKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgkJZm9yZWFjaCAoJHRhZyBpbiAkbWFuaWZlc3QuUHJpdmF0ZURhdGEuUFNEYXRhLlRhZ3MpCgkJewoJCQlJdCAiVGFncyBzaG91bGQgaGF2ZSBubyBzcGFjZXMgaW4gbmFtZSIgLVRlc3RDYXNlcyBAeyB0YWcgPSAkdGFnIH0gewoJCQkJJHRhZyAtbWF0Y2ggIiAiIHwgU2hvdWxkIC1CZSAkZmFsc2UKCQkJfQoJCX0KCX0KfQEJIwUAAAkkBQAABiUFAAASTWFuaWZlc3QuVGVzdHMucHMxBiYFAAB5L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsL01hbmlmZXN0LlRlc3RzLnBzMQlbAAAACSgFAAAJKQUAAAGOBAAAcAAAAAYqBQAA7QhbQ21kbGV0QmluZGluZygpXQpQYXJhbSAoCglbc3dpdGNoXQoJJFNraXBUZXN0LAoJCglbc3RyaW5nW11dCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpCikKCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0KCiRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplciA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdAoKRGVzY3JpYmUgJ0ludm9raW5nIFBTU2NyaXB0QW5hbHl6ZXIgYWdhaW5zdCBjb21tYW5kYmFzZScgewoJJGNvbW1hbmRGaWxlcyA9IGZvcmVhY2ggKCRwYXRoIGluICRDb21tYW5kUGF0aCkgewogICAgICAgIEdldC1DaGlsZEl0ZW0gLVBhdGggJHBhdGggLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiCiAgICB9Cgkkc2NyaXB0QW5hbHl6ZXJSdWxlcyA9IEdldC1TY3JpcHRBbmFseXplclJ1bGUKCQoJZm9yZWFjaCAoJGZpbGUgaW4gJGNvbW1hbmRGaWxlcykKCXsKCQlDb250ZXh0ICJBbmFseXppbmcgJCgkZmlsZS5CYXNlTmFtZSkiIHsKCQkJJGFuYWx5c2lzID0gSW52b2tlLVNjcmlwdEFuYWx5emVyIC1QYXRoICRmaWxlLkZ1bGxOYW1lIC1FeGNsdWRlUnVsZSBQU0F2b2lkVHJhaWxpbmdXaGl0ZXNwYWNlLCBQU1Nob3VsZFByb2Nlc3MKCQkJCgkJCWZvckVhY2ggKCRydWxlIGluICRzY3JpcHRBbmFseXplclJ1bGVzKQoJCQl7CgkJCQlJdCAiU2hvdWxkIHBhc3MgJHJ1bGUiIC1UZXN0Q2FzZXMgQHsgYW5hbHlzaXMgPSAkYW5hbHlzaXM7IHJ1bGUgPSAkcnVsZSB9IHsKCQkJCQlJZiAoJGFuYWx5c2lzLlJ1bGVOYW1lIC1jb250YWlucyAkcnVsZSkKCQkJCQl7CgkJCQkJCSRhbmFseXNpcyB8IFdoZXJlLU9iamVjdCBSdWxlTmFtZSAtRVEgJHJ1bGUgLW91dHZhcmlhYmxlIGZhaWx1cmVzIHwgRm9yRWFjaC1PYmplY3QgeyAkbnVsbCA9ICRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplci5BZGQoJF8pIH0KCQkJCQkJCgkJCQkJCTEgfCBTaG91bGQgLUJlIDAKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJMCB8IFNob3VsZCAtQmUgMAoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KfQEJKwUAAAksBQAABi0FAAAaUFNTY3JpcHRBbmFseXplci5UZXN0cy5wczEGLgUAAIEBL1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFsL1BTU2NyaXB0QW5hbHl6ZXIuVGVzdHMucHMxCVsAAAAJMAUAAAkxBQAAAY8EAABwAAAABjIFAADDByRleGNlcHRpb25zID0gQHsgfQoKPCMKQSBsaXN0IG9mIGVudHJpZXMgdGhhdCBNQVkgYmUgaW4gdGhlIGxhbmd1YWdlIGZpbGVzLCB3aXRob3V0IGNhdXNpbmcgdGhlIHRlc3RzIHRvIGZhaWwuClRoaXMgaXMgY29tbW9ubHkgdXNlZCBpbiBtb2R1bGVzIHRoYXQgZ2VuZXJhdGUgbG9jYWxpemVkIG1lc3NhZ2VzIHN0cmFpZ2h0IGZyb20gQyMuClNwZWNpZnkgdGhlIGZ1bGwga2V5IGFzIGl0IGlzIHdyaXR0ZW4gaW4gdGhlIGxhbmd1YWdlIGZpbGVzLCBkbyBub3QgcHJlcGVuZCB0aGUgbW9kdWxlbmFtZSwKYXMgeW91IHdvdWxkIGhhdmUgdG8gaW4gQyMgY29kZS4KCkV4YW1wbGU6CiRleGNlcHRpb25zWydMZWdhbFN1cnBsdXMnXSA9IEAoCiAgICAnRXhjZXB0aW9uLlN0cmVhbXMuRmFpbGVkQ3JlYXRlJwogICAgJ0V4Y2VwdGlvbi5TdHJlYW1zLkZhaWxlZERpc3Bvc2UnCikKIz4KJGV4Y2VwdGlvbnNbJ0xlZ2FsU3VycGx1cyddID0gQCgKCikKPCMKQSBsaXN0IG9mIGVudHJpZXMgdGhhdCBNQVkgYmUgdXNlZCB3aXRob3V0IG5lZWRpbmcgdG8gaGF2ZSB0ZXh0IGRlZmluZWQuClRoaXMgaXMgaW50ZW5kZWQgZm9yIG1vZHVsZXMgKHJlLSl1c2luZyBzdHJpbmdzIHByb3ZpZGVkIGJ5IGFub3RoZXIgbW9kdWxlCiM+CiRleGNlcHRpb25zWydOb1RleHROZWVkZWQnXSA9IEAoCgknVmFsaWRhdGUuRlNQYXRoJwoJJ1ZhbGlkYXRlLkZTUGF0aC5GaWxlJwoJJ1ZhbGlkYXRlLkZTUGF0aC5GaWxlT3JQYXJlbnQnCgknVmFsaWRhdGUuRlNQYXRoLkZvbGRlcicKCSdWYWxpZGF0ZS5QYXRoJwoJJ1ZhbGlkYXRlLlBhdGguQ29udGFpbmVyJwoJJ1ZhbGlkYXRlLlBhdGguTGVhZicKCSdWYWxpZGF0ZS5UaW1lU3Bhbi5Qb3NpdGl2ZScKCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUnCgknVmFsaWRhdGUuVXJpLkFic29sdXRlLkZpbGUnCgknVmFsaWRhdGUuVXJpLkFic29sdXRlLkh0dHBzJwopCgokZXhjZXB0aW9ucwEJMwUAAAk0BQAABjUFAAAWc3RyaW5ncy5FeGNlcHRpb25zLnBzMQY2BQAAfS9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24vdGVzdHMvZ2VuZXJhbC9zdHJpbmdzLkV4Y2VwdGlvbnMucHMxCVsAAAAJOAUAAAk5BQAAAZAEAABwAAAABjoFAAD9BzwjCi5ERVNDUklQVElPTgogICAgVGhpcyB0ZXN0IHZlcmlmaWVzLCB0aGF0IGFsbCBzdHJpbmdzIHRoYXQgaGF2ZSBiZWVuIHVzZWQsCiAgICBhcmUgbGlzdGVkIGluIHRoZSBsYW5ndWFnZSBmaWxlcyBhbmQgdGh1cyBoYXZlIGEgbWVzc2FnZSBiZWluZyBkaXNwbGF5ZWQuCgogICAgSXQgYWxzbyBjaGVja3MsIHdoZXRoZXIgdGhlIGxhbmd1YWdlIGZpbGVzIGhhdmUgb3JwaGFuZWQgZW50cmllcyB0aGF0IG5lZWQgY2xlYW5pbmcgdXAuCiM+CgoKCkRlc2NyaWJlICJUZXN0aW5nIGxvY2FsaXphdGlvbiBzdHJpbmdzIiB7CgkkbW9kdWxlUm9vdCA9IChHZXQtTW9kdWxlIMO+bmFtZcO+KS5Nb2R1bGVCYXNlCgkkc3RyaW5nc1Jlc3VsdHMgPSBFeHBvcnQtUFNNRFN0cmluZyAtTW9kdWxlUm9vdCAkbW9kdWxlUm9vdAoJJGV4Y2VwdGlvbnMgPSAmICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcc3RyaW5ncy5FeGNlcHRpb25zLnBzMSIKCQoJZm9yZWFjaCAoJHN0cmluZ0VudHJ5IGluICRzdHJpbmdzUmVzdWx0cykgewogICAgICAgIGlmICgkc3RyaW5nRW50cnkuU3RyaW5nIC1lcSAia2V5IikgeyBjb250aW51ZSB9ICMgU2tpcHBpbmcgdGhlIHRlbXBsYXRlIGRlZmF1bHQgZW50cnkKCQlJdCAiU2hvdWxkIGJlIHVzZWQgJiBoYXZlIHRleHQ6ICQoJHN0cmluZ0VudHJ5LlN0cmluZykiIC1UZXN0Q2FzZXMgQHsgc3RyaW5nRW50cnkgPSAkc3RyaW5nRW50cnk7IGV4Y2VwdGlvbnMgPSAkZXhjZXB0aW9ucyB9IHsKICAgICAgICAgICAgaWYgKCRleGNlcHRpb25zLkxlZ2FsU3VycGx1cyAtbm90Y29udGFpbnMgJHN0cmluZ0VudHJ5LlN0cmluZykgewogICAgICAgICAgICAgICAgJHN0cmluZ0VudHJ5LlN1cnBsdXMgfCBTaG91bGQgLUJlRmFsc2UKCQkJfQoJCQlpZiAoJGV4Y2VwdGlvbnMuTm9UZXh0TmVlZGVkIC1ub3Rjb250YWlucyAkc3RyaW5nRW50cnkuU3RyaW5nKSB7CgkJCQkkc3RyaW5nRW50cnkuVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5CgkJCX0KICAgICAgICB9CiAgICB9Cn0BCTsFAAAJPAUAAAY9BQAAEXN0cmluZ3MuVGVzdHMucHMxBj4FAAB4L1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74vU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi90ZXN0cy9nZW5lcmFs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</BA>
    </MS>
  </Obj>
</Objs>