internal/templates/PSFModule-1.1.2.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">PSFModule</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.1.2.0</Version> <S N="Description">PowerShell Framework based module scaffold</S> <S N="Author">Friedrich Weinmann</S> <DT N="CreatedOn">2023-05-31T00:00:00+00:00</DT> <Obj N="Tags" RefId="2"> <TN RefId="2"> <T>System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]</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>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, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[PSModuleDevelopment.Template.ParameterScript, PSModuleDevelopment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null]]</T> <T>System.Object</T> </TN> <DCT> <En> <S N="Key">pesterconfig</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">_x000D__x000A__x000D__x000A__x0009__x0009_</S> <S N="Name">pesterconfig</S> <SBK N="ScriptBlock">_x000D__x000A__x000D__x000A__x0009__x0009_</SBK> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAMcGVzdGVyY29uZmlnCQUAAAAFBQAAADtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgEAAAAKU2NyaXB0VGV4dAEDAAAABgYAAAAGDQoNCgkJCw==</BA> </MS> </Obj> </En> <En> <S N="Key">psframework</S> <Obj N="Value" RefId="6"> <TNRef RefId="4" /> <ToString>PSModuleDevelopment.Template.ParameterScript</ToString> <Props> <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000D__x000A__x0009__x0009_</S> <S N="Name">psframework</S> <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000D__x000A__x0009__x0009_</SBK> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAALcHNmcmFtZXdvcmsJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAADQNCgkJCShHZXQtTW9kdWxlIFBTRnJhbWV3b3JrKS5WZXJzaW9uLlRvU3RyaW5nKCkNCgkJCw==</BA> </MS> </Obj> </En> <En> <S N="Key">year</S> <Obj N="Value" RefId="7"> <TNRef RefId="4" /> <ToString>PSModuleDevelopment.Template.ParameterScript</ToString> <Props> <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy"_x000D__x000A__x0009__x0009_</S> <S N="Name">year</S> <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy"_x000D__x000A__x0009__x0009_</SBK> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEeWVhcgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAIA0KCQkJR2V0LURhdGUgLUZvcm1hdCAieXl5eSINCgkJCw==</BA> </MS> </Obj> </En> <En> <S N="Key">date</S> <Obj N="Value" RefId="8"> <TNRef RefId="4" /> <ToString>PSModuleDevelopment.Template.ParameterScript</ToString> <Props> <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy-MM-dd"_x000D__x000A__x0009__x0009_</S> <S N="Name">date</S> <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy-MM-dd"_x000D__x000A__x0009__x0009_</SBK> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEZGF0ZQkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAJg0KCQkJR2V0LURhdGUgLUZvcm1hdCAieXl5eS1NTS1kZCINCgkJCw==</BA> </MS> </Obj> </En> <En> <S N="Key">testfolder</S> <Obj N="Value" RefId="9"> <TNRef RefId="4" /> <ToString>PSModuleDevelopment.Template.ParameterScript</ToString> <Props> <S N="StringScript">_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009_</S> <S N="Name">testfolder</S> <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009_</SBK> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAKdGVzdGZvbGRlcgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAACQ0KCQkJDQoJCQs=</BA> </MS> </Obj> </En> <En> <S N="Key">guid</S> <Obj N="Value" RefId="10"> <TNRef RefId="4" /> <ToString>PSModuleDevelopment.Template.ParameterScript</ToString> <Props> <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000D__x000A__x0009__x0009_</S> <S N="Name">guid</S> <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000D__x000A__x0009__x0009_</SBK> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEZ3VpZAkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAALA0KCQkJW1N5c3RlbS5HdWlkXTo6TmV3R3VpZCgpLlRvU3RyaW5nKCkNCgkJCw==</BA> </MS> </Obj> </En> <En> <S N="Key">dynamicscript_603806</S> <Obj N="Value" RefId="11"> <TNRef RefId="4" /> <ToString>PSModuleDevelopment.Template.ParameterScript</ToString> <Props> <S N="StringScript"> Get-Date -Format 'yyyy-MM-dd' </S> <S N="Name">dynamicscript_603806</S> <SBK N="ScriptBlock"> Get-Date -Format 'yyyy-MM-dd' </SBK> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAUZHluYW1pY3NjcmlwdF82MDM4MDYJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAAB8gR2V0LURhdGUgLUZvcm1hdCAneXl5eS1NTS1kZCcgCw==</BA> </MS> </Obj> </En> </DCT> </Obj> <Obj N="Parameters2" RefId="12"> <TN RefId="5"> <T>System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[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="13"> <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="14"> <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="15"> <TNRef RefId="6" /> <LST> <S>PSModuleDevelopment.Template.TemplateItemFile</S> </LST> </Obj> <S N="Name">bin</S> <S N="RelativePath">bin</S> <S N="Identifier">þ</S> <Obj N="FileSystemParameterFlat" RefId="16"> <TNRef RefId="2" /> <LST /> </Obj> <Obj N="FileSystemParameterScript" RefId="17"> <TNRef RefId="2" /> <LST /> </Obj> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAAA2JpbgYFAAAAA2JpbgYGAAAAAsO+CQcAAAAJCAAAAAQDAAAAngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZVtdAgAAAAgICQkAAAABAAAAAQAAAAQHAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQoAAAAAAAAAAAAAAAEIAAAABwAAAAkKAAAAAAAAAAAAAAAHCQAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkLAAAADQMRCgAAAAAAAAAFCwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGDAAAAO4CIyBiaW4gZm9sZGVyDQoNClRoZSBiaW4gZm9sZGVyIGV4aXN0cyB0byBzdG9yZSBiaW5hcnkgZGF0YS4gQW5kIHNjcmlwdHMgcmVsYXRlZCB0byB0aGUgdHlwZSBzeXN0ZW0uDQoNClRoaXMgbWF5IGluY2x1ZGUgeW91ciBvd24gQyMtYmFzZWQgbGlicmFyeSwgdGhpcmQgcGFydHkgbGlicmFyaWVzIHlvdSB3YW50IHRvIGluY2x1ZGUgKHdhdGNoIHRoZSBsaWNlbnNlISksIG9yIGEgc2NyaXB0IGRlY2xhcmluZyB0eXBlIGFjY2VsZXJhdG9ycyAoZWZmZWN0aXZlbHkgYWxpYXNlcyBmb3IgLk5FVCB0eXBlcykNCg0KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVHlwZSBBY2NlbGVyYXRvcnMsIHNlZSB0aGUgaGVscCBvbiBTZXQtUFNGVHlwZUFsaWFzAQkNAAAACQ4AAAAGDwAAAAlyZWFkbWUubWQGEAAAAA1iaW5ccmVhZG1lLm1kCQYAAAAJEgAAAAkTAAAAAQ0AAAAHAAAACQoAAAAAAAAAAAAAAAEOAAAABwAAAAkKAAAAAAAAAAAAAAABEgAAAAcAAAAJCgAAAAAAAAAAAAAAARMAAAAHAAAACQoAAAAAAAAAAAAAAAs=</BA> </MS> </Obj> <Obj RefId="18"> <TNRef RefId="7" /> <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString> <Props> <Obj N="Children" RefId="19"> <TNRef RefId="6" /> <LST> <S>PSModuleDevelopment.Template.TemplateItemFile</S> <S>PSModuleDevelopment.Template.TemplateItemFile</S> </LST> </Obj> <S N="Name">en-us</S> <S N="RelativePath">en-us</S> <S N="Identifier">þ</S> <Obj N="FileSystemParameterFlat" RefId="20"> <TNRef RefId="2" /> <LST /> </Obj> <Obj N="FileSystemParameterScript" RefId="21"> <TNRef RefId="2" /> <LST /> </Obj> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAABWVuLXVzBgUAAAAFZW4tdXMGBgAAAALDvgkHAAAACQgAAAAEAwAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkJAAAAAgAAAAIAAAAEBwAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkKAAAAAAAAAAAAAAABCAAAAAcAAAAJCgAAAAAAAAAAAAAABwkAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJCwAAAAkMAAAADQIRCgAAAAAAAAAFCwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGDQAAAKUBVE9QSUMNCglhYm91dF/Dvm5hbWXDvg0KCQ0KU0hPUlQgREVTQ1JJUFRJT04NCglFeHBsYWlucyBob3cgdG8gdXNlIHRoZSDDvm5hbWXDviBwb3dlcnNoZWxsIG1vZHVsZQ0KCQ0KTE9ORyBERVNDUklQVElPTg0KCTxJbnNlcnQgQ29udGVudCBoZXJlPg0KDQpLRVlXT1JEUw0KCcO+bmFtZcO+AQkOAAAACQ8AAAAGEAAAABdhYm91dF/Dvm5hbWXDvi5oZWxwLnR4dAYRAAAAHWVuLXVzXGFib3V0X8O+bmFtZcO+LmhlbHAudHh0CQYAAAAJEwAAAAkUAAAAAQwAAAALAAAABhUAAACdASMgVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBnbywgdGhhdCBhcmUgd3JpdHRlbiBieQ0KIyBXcml0ZS1QU0ZNZXNzYWdlLCBTdG9wLVBTRkZ1bmN0aW9uIG9yIHRoZSBQU0ZyYW1ld29yayB2YWxpZGF0aW9uIHNjcmlwdGJsb2Nrcw0KQHsNCgkna2V5JyA9ICdWYWx1ZScNCn0BCRYAAAAJFwAAAAYYAAAADHN0cmluZ3MucHNkMQYZAAAAEmVuLXVzXHN0cmluZ3MucHNkMQkGAAAACRsAAAAJHAAAAAEOAAAABwAAAAkdAAAAAQAAAAEAAAABDwAAAAcAAAAJCgAAAAAAAAAAAAAAARMAAAAHAAAACR8AAAABAAAAAQAAAAEUAAAABwAAAAkKAAAAAAAAAAAAAAABFgAAAAcAAAAJCgAAAAAAAAAAAAAAARcAAAAHAAAACQoAAAAAAAAAAAAAAAEbAAAABwAAAAkKAAAAAAAAAAAAAAABHAAAAAcAAAAJCgAAAAAAAAAAAAAAER0AAAAEAAAABiEAAAAEbmFtZQ0DER8AAAAEAAAABiIAAAAEbmFtZQ0DCw==</BA> </MS> </Obj> <Obj RefId="22"> <TNRef RefId="7" /> <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString> <Props> <Obj N="Children" RefId="23"> <TNRef RefId="6" /> <LST> <S>PSModuleDevelopment.Template.TemplateItemFile</S> </LST> </Obj> <S N="Name">functions</S> <S N="RelativePath">functions</S> <S N="Identifier">þ</S> <Obj N="FileSystemParameterFlat" RefId="24"> <TNRef RefId="2" /> <LST /> </Obj> <Obj N="FileSystemParameterScript" RefId="25"> <TNRef RefId="2" /> <LST /> </Obj> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAACWZ1bmN0aW9ucwYFAAAACWZ1bmN0aW9ucwYGAAAAAsO+CQcAAAAJCAAAAAQDAAAAngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZVtdAgAAAAgICQkAAAABAAAAAQAAAAQHAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQoAAAAAAAAAAAAAAAEIAAAABwAAAAkKAAAAAAAAAAAAAAAHCQAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkLAAAADQMRCgAAAAAAAAAFCwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGDAAAANIBIyBGdW5jdGlvbnMNCg0KVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBmdW5jdGlvbnMgZ28uDQoNCkRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbW9kdWxlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdWJkaXZpZGUgdGhlbSBpbnRvIHN1YmZvbGRlcnMuDQoNClRoZSBtb2R1bGUgd2lsbCBwaWNrIHVwIGFsbCAucHMxIGZpbGVzIHJlY3Vyc2l2ZWx5AQkNAAAACQ4AAAAGDwAAAAlyZWFkbWUubWQGEAAAABNmdW5jdGlvbnNccmVhZG1lLm1kCQYAAAAJEgAAAAkTAAAAAQ0AAAAHAAAACQoAAAAAAAAAAAAAAAEOAAAABwAAAAkKAAAAAAAAAAAAAAABEgAAAAcAAAAJCgAAAAAAAAAAAAAAARMAAAAHAAAACQoAAAAAAAAAAAAAAAs=</BA> </MS> </Obj> <Obj RefId="26"> <TNRef RefId="7" /> <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString> <Props> <Obj N="Children" RefId="27"> <TNRef RefId="6" /> <LST> <S>PSModuleDevelopment.Template.TemplateItemFolder</S> <S>PSModuleDevelopment.Template.TemplateItemFolder</S> <S>PSModuleDevelopment.Template.TemplateItemFolder</S> <S>PSModuleDevelopment.Template.TemplateItemFolder</S> <S>PSModuleDevelopment.Template.TemplateItemFolder</S> </LST> </Obj> <S N="Name">internal</S> <S N="RelativePath">internal</S> <S N="Identifier">þ</S> <Obj N="FileSystemParameterFlat" RefId="28"> <TNRef RefId="2" /> <LST /> </Obj> <Obj N="FileSystemParameterScript" RefId="29"> <TNRef RefId="2" /> <LST /> </Obj> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAACGludGVybmFsBgUAAAAIaW50ZXJuYWwGBgAAAALDvgkHAAAACQgAAAAEAwAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkJAAAABQAAAAUAAAAEBwAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkKAAAAAAAAAAAAAAABCAAAAAcAAAAJCgAAAAAAAAAAAAAABwkAAAAAAQAAAAgAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJCwAAAAkMAAAACQ0AAAAJDgAAAAkPAAAADQMRCgAAAAAAAAABCwAAAAEAAAAJEAAAAAYRAAAADmNvbmZpZ3VyYXRpb25zBhIAAAAXaW50ZXJuYWxcY29uZmlndXJhdGlvbnMJBgAAAAkUAAAACRUAAAABDAAAAAEAAAAJFgAAAAYXAAAACWZ1bmN0aW9ucwYYAAAAEmludGVybmFsXGZ1bmN0aW9ucwkGAAAACRoAAAAJGwAAAAENAAAAAQAAAAkcAAAABh0AAAAMc2NyaXB0YmxvY2tzBh4AAAAVaW50ZXJuYWxcc2NyaXB0YmxvY2tzCQYAAAAJIAAAAAkhAAAAAQ4AAAABAAAACSIAAAAGIwAAAAdzY3JpcHRzBiQAAAAQaW50ZXJuYWxcc2NyaXB0cwkGAAAACSYAAAAJJwAAAAEPAAAAAQAAAAkoAAAABikAAAAEdGVwcAYqAAAADWludGVybmFsXHRlcHAJBgAAAAksAAAACS0AAAABEAAAAAMAAAAJLgAAAAIAAAACAAAAARQAAAAHAAAACQoAAAAAAAAAAAAAAAEVAAAABwAAAAkKAAAAAAAAAAAAAAABFgAAAAMAAAAJMAAAAAEAAAABAAAAARoAAAAHAAAACQoAAAAAAAAAAAAAAAEbAAAABwAAAAkKAAAAAAAAAAAAAAABHAAAAAMAAAAJMgAAAAEAAAABAAAAASAAAAAHAAAACQoAAAAAAAAAAAAAAAEhAAAABwAAAAkKAAAAAAAAAAAAAAABIgAAAAMAAAAJNAAAAAQAAAAEAAAAASYAAAAHAAAACQoAAAAAAAAAAAAAAAEnAAAABwAAAAkKAAAAAAAAAAAAAAABKAAAAAMAAAAJNgAAAAMAAAADAAAAASwAAAAHAAAACQoAAAAAAAAAAAAAAAEtAAAABwAAAAkKAAAAAAAAAAAAAAAHLgAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAk4AAAACTkAAAANAgcwAAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACToAAAANAwcyAAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTsAAAANAwc0AAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTwAAAAJPQAAAAk+AAAACT8AAAAHNgAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAlAAAAACUEAAAAJQgAAAAoFOAAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGQwAAAMAJPCMNClRoaXMgaXMgYW4gZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUNCg0KQnkgZGVmYXVsdCwgaXQgaXMgZW5vdWdoIHRvIGhhdmUgYSBzaW5nbGUgb25lIG9mIHRoZW0sDQpob3dldmVyIGlmIHlvdSBoYXZlIGVub3VnaCBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIGp1c3RpZnkgaGF2aW5nIG11bHRpcGxlIGNvcGllcyBvZiBpdCwNCmZlZWwgdG90YWxseSBmcmVlIHRvIHNwbGl0IHRoZW0gaW50byBtdWx0aXBsZSBmaWxlcy4NCiM+DQoNCjwjDQojIEV4YW1wbGUgQ29uZmlndXJhdGlvbg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICfDvm5hbWXDvicgLU5hbWUgJ0V4YW1wbGUuU2V0dGluZycgLVZhbHVlIDEwIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdpbnRlZ2VyJyAtSGFuZGxlciB7IH0gLURlc2NyaXB0aW9uICJFeGFtcGxlIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gWW91ciBtb2R1bGUgY2FuIHRoZW4gdXNlIHRoZSBzZXR0aW5nIHVzaW5nICdHZXQtUFNGQ29uZmlnVmFsdWUnIg0KIz4NCg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICfDvm5hbWXDvicgLU5hbWUgJ0ltcG9ydC5Eb0RvdFNvdXJjZScgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGRvdHNvdXJjZWQgb24gaW1wb3J0LiBCeSBkZWZhdWx0LCB0aGUgZmlsZXMgb2YgdGhpcyBtb2R1bGUgYXJlIHJlYWQgYXMgc3RyaW5nIHZhbHVlIGFuZCBpbnZva2VkLCB3aGljaCBpcyBmYXN0ZXIgYnV0IHdvcnNlIG9uIGRlYnVnZ2luZy4iDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ8O+bmFtZcO+JyAtTmFtZSAnSW1wb3J0LkluZGl2aWR1YWxGaWxlcycgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGltcG9ydGVkIGluZGl2aWR1YWxseS4gRHVyaW5nIHRoZSBtb2R1bGUgYnVpbGQsIGFsbCBtb2R1bGUgY29kZSBpcyBjb21waWxlZCBpbnRvIGZldyBmaWxlcywgd2hpY2ggYXJlIGltcG9ydGVkIGluc3RlYWQgYnkgZGVmYXVsdC4gTG9hZGluZyB0aGUgY29tcGlsZWQgdmVyc2lvbnMgaXMgZmFzdGVyLCB1c2luZyB0aGUgaW5kaXZpZHVhbCBmaWxlcyBpcyBlYXNpZXIgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvdXQgYWRqdXN0bWVudHMuIgEJRAAAAAlFAAAABkYAAAARY29uZmlndXJhdGlvbi5wczEGRwAAAClpbnRlcm5hbFxjb25maWd1cmF0aW9uc1xjb25maWd1cmF0aW9uLnBzMQkGAAAACUkAAAAJSgAAAAE5AAAAOAAAAAZLAAAA/gMjIENvbmZpZ3VyYXRpb25zDQoNClRocm91Z2ggdGhlIGBQU0ZyYW1ld29ya2AgeW91IGhhdmUgYSBzaW1wbGUgbWV0aG9kIHRoYXQgYWxsb3dzIHlvdSB0byAuLi4NCg0KIC0gUHVibGlzaCBzZXR0aW5ncw0KIC0gV2l0aCBvbmJvYXJkIGRvY3VtZW50YXRpb24NCiAtIElucHV0IHZhbGlkYXRpb24NCiAtIFNjcmlwdHMgdGhhdCBydW4gb24gY2hhbmdlIG9mIHNldHRpbmdzDQogLSBUaGF0IGNhbiBiZSBkaXNjb3ZlcmVkIGFuZCB1cGRhdGVkIGJ5IHRoZSB1c2VyDQogLSBUaGF0IGNhbiBiZSBhZG1pbmlzdHJhdGVkIGJ5IHBvbGljeSAmIERTQw0KDQpUaGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgYSBiaXQgdG9vIGNvbXBsZXggdG8gZGVzY3JpYmUgaW4gYSBoZWxwIGZpbGUsIHlvdSBjYW4gaG93ZXZlciB2aXNpdCB1cyBhdCBodHRwOi8vcHNmcmFtZXdvcmsub3JnIGZvciBkZXRhaWxlZCBndWlkYW5jZS4NCg0KQW4gZXhhbXBsZSBjYW4gYmUgc2VlbiBpbiB0aGUgYXR0YWNoZWQgcHMxIGZpbGUBCUwAAAAJTQAAAAZOAAAACXJlYWRtZS5tZAZPAAAAIWludGVybmFsXGNvbmZpZ3VyYXRpb25zXHJlYWRtZS5tZAkGAAAACVEAAAAJUgAAAAE6AAAAOAAAAAZTAAAA2wEjIEZ1bmN0aW9ucw0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGludGVybmFsIGZ1bmN0aW9ucyBnby4NCg0KRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4NCg0KVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCVQAAAAJVQAAAAZWAAAACXJlYWRtZS5tZAZXAAAAHGludGVybmFsXGZ1bmN0aW9uc1xyZWFkbWUubWQJBgAAAAlZAAAACVoAAAABOwAAADgAAAAGWwAAAIQDPCMNClN0b3JlZCBzY3JpcHRibG9ja3MgYXJlIGF2YWlsYWJsZSBpbiBbUHNmVmFsaWRhdGVTY3JpcHQoKV0gYXR0cmlidXRlcy4NClRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNlbnRyYWxseSBwcm92aWRlIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLA0Kd2l0aG91dCBoYXZpbmcgdG8gbWFpbnRhaW4gaXQgaW4gc2VwYXJhdGUgbG9jYXRpb25zLg0KDQpJdCBhbHNvIHByZXZlbnRzIGxlbmd0aHkgdmFsaWRhdGlvbiBzY3JpcHRibG9ja3MgZnJvbSBtYWtpbmcgeW91ciBwYXJhbWV0ZXIgYmxvY2sNCmhhcmQgdG8gcmVhZC4NCg0KU2V0LVBTRlNjcmlwdGJsb2NrIC1OYW1lICfDvm5hbWXDvi5TY3JpcHRCbG9ja05hbWUnIC1TY3JpcHRibG9jayB7DQoJDQp9DQojPgEJXAAAAAldAAAABl4AAAAQc2NyaXB0YmxvY2tzLnBzMQZfAAAAJmludGVybmFsXHNjcmlwdGJsb2Nrc1xzY3JpcHRibG9ja3MucHMxCQYAAAAJYQAAAAliAAAAATwAAAA4AAAABmMAAAD2CU5ldy1QU0ZMaWNlbnNlIC1Qcm9kdWN0ICfDvm5hbWXDvicgLU1hbnVmYWN0dXJlciAnw75hdXRob3LDvicgLVByb2R1Y3RWZXJzaW9uICRzY3JpcHQ6TW9kdWxlVmVyc2lvbiAtUHJvZHVjdFR5cGUgTW9kdWxlIC1OYW1lIE1JVCAtVmVyc2lvbiAiMS4wLjAuMCIgLURhdGUgKEdldC1EYXRlICLDviFkYXRlIcO+IikgLVRleHQgQCINCkNvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+DQoNClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkNCm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsDQppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzDQp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQpjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQoNClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbA0KY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCg0KVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFDQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLA0KT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUNClNPRlRXQVJFLg0KIkABCWQAAAAJZQAAAAZmAAAAC2xpY2Vuc2UucHMxBmcAAAAcaW50ZXJuYWxcc2NyaXB0c1xsaWNlbnNlLnBzMQkGAAAACWkAAAAJagAAAAE9AAAAOAAAAAZrAAAAtwY8Iw0KQWRkIGFsbCB0aGluZ3MgeW91IHdhbnQgdG8gcnVuIGFmdGVyIGltcG9ydGluZyB0aGUgbWFpbiBmdW5jdGlvbiBjb2RlDQoNCldBUk5JTkc6IE9OTFkgcHJvdmlkZSBwYXRocyB0byBmaWxlcyENCg0KQWZ0ZXIgYnVpbGRpbmcgdGhlIG1vZHVsZSwgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkLCBhZGRpbmcgYW55dGhpbmcgYnV0IHBhdGhzIHRvIGZpbGVzIC4uLg0KLSBXaWxsIG5vdCB3b3JrIGFmdGVyIHB1Ymxpc2hpbmcNCi0gQ291bGQgYnJlYWsgdGhlIGJ1aWxkIHByb2Nlc3MNCiM+DQoNCiRtb2R1bGVSb290ID0gU3BsaXQtUGF0aCAoU3BsaXQtUGF0aCAkUFNTY3JpcHRSb290KQ0KDQojIExvYWQgQ29uZmlndXJhdGlvbnMNCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxjb25maWd1cmF0aW9uc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUNCg0KIyBMb2FkIFNjcmlwdGJsb2Nrcw0KKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdGJsb2Nrc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUNCg0KIyBMb2FkIFRhYiBFeHBhbnNpb24NCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFx0ZXBwXCoudGVwcC5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lDQoNCiMgTG9hZCBUYWIgRXhwYW5zaW9uIEFzc2lnbm1lbnQNCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFx0ZXBwXGFzc2lnbm1lbnQucHMxIg0KDQojIExvYWQgTGljZW5zZQ0KIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNcbGljZW5zZS5wczEiAQlsAAAACW0AAAAGbgAAAA5wb3N0aW1wb3J0LnBzMQZvAAAAH2ludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEJBgAAAAlxAAAACXIAAAABPgAAADgAAAAGcwAAALADPCMNCkFkZCBhbGwgdGhpbmdzIHlvdSB3YW50IHRvIHJ1biBiZWZvcmUgaW1wb3J0aW5nIHRoZSBtYWluIGZ1bmN0aW9uIGNvZGUuDQoNCldBUk5JTkc6IE9OTFkgcHJvdmlkZSBwYXRocyB0byBmaWxlcyENCg0KQWZ0ZXIgYnVpbGRpbmcgdGhlIG1vZHVsZSwgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkLCBhZGRpbmcgYW55dGhpbmcgYnV0IHBhdGhzIHRvIGZpbGVzIC4uLg0KLSBXaWxsIG5vdCB3b3JrIGFmdGVyIHB1Ymxpc2hpbmcNCi0gQ291bGQgYnJlYWsgdGhlIGJ1aWxkIHByb2Nlc3MNCiM+DQoNCiRtb2R1bGVSb290ID0gU3BsaXQtUGF0aCAoU3BsaXQtUGF0aCAkUFNTY3JpcHRSb290KQ0KDQojIExvYWQgdGhlIHN0cmluZ3MgdXNlZCBpbiBtZXNzYWdlcw0KIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNcc3RyaW5ncy5wczEiAQl0AAAACXUAAAAGdgAAAA1wcmVpbXBvcnQucHMxBncAAAAeaW50ZXJuYWxcc2NyaXB0c1xwcmVpbXBvcnQucHMxCQYAAAAJeQAAAAl6AAAAAT8AAAA4AAAABnsAAAC4AzwjDQpUaGlzIGZpbGUgbG9hZHMgdGhlIHN0cmluZ3MgZG9jdW1lbnRzIGZyb20gdGhlIHJlc3BlY3RpdmUgbGFuZ3VhZ2UgZm9sZGVycy4NClRoaXMgYWxsb3dzIGxvY2FsaXppbmcgbWVzc2FnZXMgYW5kIGVycm9ycy4NCkxvYWQgcHNkMSBsYW5ndWFnZSBmaWxlcyBmb3IgZWFjaCBsYW5ndWFnZSB5b3Ugd2lzaCB0byBzdXBwb3J0Lg0KUGFydGlhbCB0cmFuc2xhdGlvbnMgYXJlIGFjY2VwdGFibGUgLSB3aGVuIG1pc3NpbmcgYSBjdXJyZW50IGxhbmd1YWdlIG1lc3NhZ2UsDQppdCB3aWxsIGZhbGxiYWNrIHRvIEVuZ2xpc2ggb3IgYW5vdGhlciBhdmFpbGFibGUgbGFuZ3VhZ2UuDQojPg0KSW1wb3J0LVBTRkxvY2FsaXplZFN0cmluZyAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGVuLXVzXCoucHNkMSIgLU1vZHVsZSAnw75uYW1lw74nIC1MYW5ndWFnZSAnZW4tVVMnAQl8AAAACX0AAAAGfgAAAAtzdHJpbmdzLnBzMQZ/AAAAHGludGVybmFsXHNjcmlwdHNcc3RyaW5ncy5wczEJBgAAAAmBAAAACYIAAAABQAAAADgAAAAGgwAAAHE8Iw0KIyBFeGFtcGxlOg0KUmVnaXN0ZXItUFNGVGVwcEFyZ3VtZW50Q29tcGxldGVyIC1Db21tYW5kIEdldC1BbGNvaG9sIC1QYXJhbWV0ZXIgVHlwZSAtTmFtZSDDvm5hbWXDvi5hbGNvaG9sDQojPgEJhAAAAAmFAAAABoYAAAAOYXNzaWdubWVudC5wczEGhwAAABxpbnRlcm5hbFx0ZXBwXGFzc2lnbm1lbnQucHMxCQYAAAAJiQAAAAmKAAAAAUEAAAA4AAAABosAAACjATwjDQojIEV4YW1wbGU6DQpSZWdpc3Rlci1QU0ZUZXBwU2NyaXB0YmxvY2sgLU5hbWUgIsO+bmFtZcO+LmFsY29ob2wiIC1TY3JpcHRCbG9jayB7ICdCZWVyJywnTWVhZCcsJ1doaXNrZXknLCdXaW5lJywnVm9ka2EnLCdSdW0gKDN5KScsICdSdW0gKDV5KScsICdSdW0gKDd5KScgfQ0KIz4BCYwAAAAJjQAAAAaOAAAAEGV4YW1wbGUudGVwcC5wczEGjwAAAB5pbnRlcm5hbFx0ZXBwXGV4YW1wbGUudGVwcC5wczEJBgAAAAmRAAAACZIAAAABQgAAADgAAAAGkwAAAL4HIyBUYWIgRXhwYW5zaW9uDQoNCiMjIERlc2NyaXB0aW9uDQoNCk1vZGVybiBUYWIgRXhwYW5zaW9uIHdhcyBvcGVuZWQgdG8gdXNlcnMgd2l0aCB0aGUgbW9kdWxlIGBUYWIgRXhwYW5zaW9uIFBsdXMgUGx1c2AgKFRFUFApLg0KDQpJdCBhbGxvd3MgeW91IHRvIGRlZmluZSwgd2hhdCBvcHRpb25zIGEgdXNlciBpcyBvZmZlcmVkIHdoZW4gdGFiYmluZyB0aHJvdWdoIGlucHV0IG9wdGlvbnMuIFRoaXMgY2FuIHNhdmUgYSBsb3Qgb2YgdGltZSBmb3IgdGhlIHVzZXIgYW5kIGlzIGNvbnNpZGVyZWQgYSBrZXkgZWxlbWVudCBpbiB1c2VyIGV4cGVyaWVuY2UuDQoNClRoZSBgUFNGcmFtZXdvcmtgIG9mZmVycyBhIHNpbXBsaWZpZWQgd2F5IG9mIG9mZmVyaW5nIGp1c3QgdGhpcywgYXMgdGhlIHR3byBleGFtcGxlIGZpbGVzIHNob3cuDQoNCiMjIENvbmNlcHQNCg0KQ3VzdG9tIHRhYiBjb21wbGV0aW9uIGlzIGRlZmluZWQgaW4gdHdvIHN0ZXBzOg0KDQogLSBEZWZpbmUgYSBzY3JpcHRibG9jayB0aGF0IGlzIHJ1biB3aGVuIHRoZSB1c2VyIGhpdHMgYFRBQmAgYW5kIHByb3ZpZGVzIHRoZSBzdHJpbmdzIHRoYXQgYXJlIGhpcyBvcHRpb25zLg0KIC0gQXNzaWduIHRoYXQgc2NyaXB0YmxvY2sgdG8gdGhlIHBhcmFtZXRlciBvZiBhIGNvbW1hbmQuIFlvdSBjYW4gYXNzaWduIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLg0KDQojIyBTdHJ1Y3R1cmUNCg0KSW1wb3J0IG9yZGVyIG1hdHRlcnMuIEluIG9yZGVyIHRvIG1ha2UgdGhpbmdzIHdvcmsgd2l0aCB0aGUgZGVmYXVsdCBzY2FmZm9sZCwgZm9sbG93IHRob3NlIHJ1bGVzOg0KDQogLSBBbGwgc2NyaXB0ZmlsZXMgX2RlZmluaW5nXyBjb21wbGV0aW9uIHNjcmlwdGJsb2NrcyBsaWtlIHRoaXM6IGAqLnRlcHAucHMxYA0KIC0gUHV0IGFsbCB5b3VyIGNvbXBsZXRpb24gYXNzaWdubWVudHMgaW4gYGFzc2lnbm1lbnQucHMxYAEJlAAAAAmVAAAABpYAAAAJcmVhZG1lLm1kBpcAAAAXaW50ZXJuYWxcdGVwcFxyZWFkbWUubWQJBgAAAAmZAAAACZoAAAABRAAAAAcAAAAJmwAAAAEAAAABAAAAAUUAAAAHAAAACQoAAAAAAAAAAAAAAAFJAAAABwAAAAkKAAAAAAAAAAAAAAABSgAAAAcAAAAJCgAAAAAAAAAAAAAAAUwAAAAHAAAACQoAAAAAAAAAAAAAAAFNAAAABwAAAAkKAAAAAAAAAAAAAAABUQAAAAcAAAAJCgAAAAAAAAAAAAAAAVIAAAAHAAAACQoAAAAAAAAAAAAAAAFUAAAABwAAAAkKAAAAAAAAAAAAAAABVQAAAAcAAAAJCgAAAAAAAAAAAAAAAVkAAAAHAAAACQoAAAAAAAAAAAAAAAFaAAAABwAAAAkKAAAAAAAAAAAAAAABXAAAAAcAAAAJnQAAAAEAAAABAAAAAV0AAAAHAAAACQoAAAAAAAAAAAAAAAFhAAAABwAAAAkKAAAAAAAAAAAAAAABYgAAAAcAAAAJCgAAAAAAAAAAAAAAAWQAAAAHAAAACZ8AAAACAAAAAgAAAAFlAAAABwAAAAmgAAAAAgAAAAIAAAABaQAAAAcAAAAJCgAAAAAAAAAAAAAAAWoAAAAHAAAACQoAAAAAAAAAAAAAAAFsAAAABwAAAAkKAAAAAAAAAAAAAAABbQAAAAcAAAAJCgAAAAAAAAAAAAAAAXEAAAAHAAAACQoAAAAAAAAAAAAAAAFyAAAABwAAAAkKAAAAAAAAAAAAAAABdAAAAAcAAAAJCgAAAAAAAAAAAAAAAXUAAAAHAAAACQoAAAAAAAAAAAAAAAF5AAAABwAAAAkKAAAAAAAAAAAAAAABegAAAAcAAAAJCgAAAAAAAAAAAAAAAXwAAAAHAAAACaIAAAABAAAAAQAAAAF9AAAABwAAAAkKAAAAAAAAAAAAAAABgQAAAAcAAAAJCgAAAAAAAAAAAAAAAYIAAAAHAAAACQoAAAAAAAAAAAAAAAGEAAAABwAAAAmkAAAAAQAAAAEAAAABhQAAAAcAAAAJCgAAAAAAAAAAAAAAAYkAAAAHAAAACQoAAAAAAAAAAAAAAAGKAAAABwAAAAkKAAAAAAAAAAAAAAABjAAAAAcAAAAJpgAAAAEAAAABAAAAAY0AAAAHAAAACQoAAAAAAAAAAAAAAAGRAAAABwAAAAkKAAAAAAAAAAAAAAABkgAAAAcAAAAJCgAAAAAAAAAAAAAAAZQAAAAHAAAACQoAAAAAAAAAAAAAAAGVAAAABwAAAAkKAAAAAAAAAAAAAAABmQAAAAcAAAAJCgAAAAAAAAAAAAAAAZoAAAAHAAAACQoAAAAAAAAAAAAAABGbAAAABAAAAAaoAAAABG5hbWUNAxGdAAAABAAAAAapAAAABG5hbWUNAxGfAAAABAAAAAaqAAAABG5hbWUGqwAAAAZhdXRob3INAhGgAAAABAAAAAasAAAABGRhdGUGrQAAAAR5ZWFyDQIRogAAAAQAAAAGrgAAAARuYW1lDQMRpAAAAAQAAAAGrwAAAARuYW1lDQMRpgAAAAQAAAAGsAAAAARuYW1lDQML</BA> </MS> </Obj> <Obj RefId="30"> <TNRef RefId="7" /> <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString> <Props> <Obj N="Children" RefId="31"> <TNRef RefId="6" /> <LST> <S>PSModuleDevelopment.Template.TemplateItemFolder</S> <S>PSModuleDevelopment.Template.TemplateItemFolder</S> <S>PSModuleDevelopment.Template.TemplateItemFile</S> <S>PSModuleDevelopment.Template.TemplateItemFile</S> </LST> </Obj> <S N="Name">tests</S> <S N="RelativePath">tests</S> <S N="Identifier">þ</S> <Obj N="FileSystemParameterFlat" RefId="32"> <TNRef RefId="2" /> <LST /> </Obj> <Obj N="FileSystemParameterScript" RefId="33"> <TNRef RefId="2" /> <LST /> </Obj> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAABXRlc3RzBgUAAAAFdGVzdHMGBgAAAALDvgkHAAAACQgAAAAEAwAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkJAAAABAAAAAQAAAAEBwAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkKAAAAAAAAAAAAAAABCAAAAAcAAAAJCgAAAAAAAAAAAAAABwkAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJCwAAAAkMAAAACQ0AAAAJDgAAABEKAAAAAAAAAAELAAAAAQAAAAkPAAAABhAAAAAJZnVuY3Rpb25zBhEAAAAPdGVzdHNcZnVuY3Rpb25zCQYAAAAJEwAAAAkUAAAAAQwAAAABAAAACRUAAAAGFgAAAAdnZW5lcmFsBhcAAAANdGVzdHNcZ2VuZXJhbAkGAAAACRkAAAAJGgAAAAUNAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYbAAAAqRtwYXJhbSAoDQoJJFRlc3RHZW5lcmFsID0gJHRydWUsDQoJDQoJJFRlc3RGdW5jdGlvbnMgPSAkdHJ1ZSwNCgkNCglbVmFsaWRhdGVTZXQoJ05vbmUnLCAnTm9ybWFsJywgJ0RldGFpbGVkJywgJ0RpYWdub3N0aWMnKV0NCglbQWxpYXMoJ1Nob3cnKV0NCgkkT3V0cHV0ID0gIk5vbmUiLA0KCQ0KCSRJbmNsdWRlID0gIioiLA0KCQ0KCSRFeGNsdWRlID0gIiINCikNCg0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJTdGFydGluZyBUZXN0cyINCg0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJJbXBvcnRpbmcgTW9kdWxlIg0KDQokZ2xvYmFsOnRlc3Ryb290ID0gJFBTU2NyaXB0Um9vdA0KJGdsb2JhbDpfX3Blc3Rlcl9kYXRhID0gQHsgfQ0KDQpSZW1vdmUtTW9kdWxlIMO+bmFtZcO+IC1FcnJvckFjdGlvbiBJZ25vcmUNCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw74ucHNkMSINCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw74ucHNtMSIgLUZvcmNlDQoNCiMgTmVlZCB0byBpbXBvcnQgZXhwbGljaXRseSBzbyB3ZSBjYW4gdXNlIHRoZSBjb25maWd1cmF0aW9uIGNsYXNzDQpJbXBvcnQtTW9kdWxlIFBlc3Rlcg0KDQrDviF0ZXN0Zm9sZGVyIcO+DQoNCiR0b3RhbEZhaWxlZCA9IDANCiR0b3RhbFJ1biA9IDANCg0KJHRlc3RyZXN1bHRzID0gQCgpDQokY29uZmlnID0gW1Blc3RlckNvbmZpZ3VyYXRpb25dOjpEZWZhdWx0DQrDviFwZXN0ZXJjb25maWchw74NCg0KI3JlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cw0KaWYgKCRUZXN0R2VuZXJhbCkNCnsNCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIk1vZHVsZXMgaW1wb3J0ZWQsIHByb2NlZWRpbmcgd2l0aCBnZW5lcmFsIHRlc3RzIg0KCWZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkUFNTY3JpcHRSb290XGdlbmVyYWwiIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIiouVGVzdHMucHMxIikpDQoJew0KCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9DQoJCWlmICgkZmlsZS5OYW1lIC1saWtlICRFeGNsdWRlKSB7IGNvbnRpbnVlIH0NCg0KCQlXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBTaWduaWZpY2FudCAtTWVzc2FnZSAiICBFeGVjdXRpbmcgPGM9J2VtJz4kKCRmaWxlLk5hbWUpPC9jPiINCgkJJGNvbmZpZy5UZXN0UmVzdWx0Lk91dHB1dFBhdGggPSBKb2luLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi5cVGVzdFJlc3VsdHMiICJURVNULSQoJGZpbGUuQmFzZU5hbWUpLnhtbCINCgkJJGNvbmZpZy5SdW4uUGF0aCA9ICRmaWxlLkZ1bGxOYW1lDQoJCSRjb25maWcuUnVuLlBhc3NUaHJ1ID0gJHRydWUNCgkJJGNvbmZpZy5PdXRwdXQuVmVyYm9zaXR5ID0gJE91dHB1dA0KICAgIAkkcmVzdWx0cyA9IEludm9rZS1QZXN0ZXIgLUNvbmZpZ3VyYXRpb24gJGNvbmZpZw0KCQlmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQ0KCQl7DQoJCQkkdG90YWxSdW4gKz0gJHJlc3VsdC5Ub3RhbENvdW50DQoJCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudA0KCQkJJHJlc3VsdC5UZXN0cyB8IFdoZXJlLU9iamVjdCBSZXN1bHQgLW5lICdQYXNzZWQnIHwgRm9yRWFjaC1PYmplY3Qgew0KCQkJCSR0ZXN0cmVzdWx0cyArPSBbcHNjdXN0b21vYmplY3RdQHsNCgkJCQkJQmxvY2sgICAgPSAkXy5CbG9jaw0KCQkJCQlOYW1lCSA9ICJJdCAkKCRfLk5hbWUpIg0KCQkJCQlSZXN1bHQgICA9ICRfLlJlc3VsdA0KCQkJCQlNZXNzYWdlICA9ICRfLkVycm9yUmVjb3JkLkRpc3BsYXlFcnJvck1lc3NhZ2UNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQojZW5kcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzDQoNCiRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplciB8IE91dC1Ib3N0DQoNCiNyZWdpb24gVGVzdCBDb21tYW5kcw0KaWYgKCRUZXN0RnVuY3Rpb25zKQ0Kew0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHJvY2VlZGluZyB3aXRoIGluZGl2aWR1YWwgdGVzdHMiDQoJZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRQU1NjcmlwdFJvb3RcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqVGVzdHMucHMxIikpDQoJew0KCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9DQoJCWlmICgkZmlsZS5OYW1lIC1saWtlICRFeGNsdWRlKSB7IGNvbnRpbnVlIH0NCgkJDQoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyAkKCRmaWxlLk5hbWUpIg0KCQkkY29uZmlnLlRlc3RSZXN1bHQuT3V0cHV0UGF0aCA9IEpvaW4tUGF0aCAiJFBTU2NyaXB0Um9vdFwuLlwuLlxUZXN0UmVzdWx0cyIgIlRFU1QtJCgkZmlsZS5CYXNlTmFtZSkueG1sIg0KCQkkY29uZmlnLlJ1bi5QYXRoID0gJGZpbGUuRnVsbE5hbWUNCgkJJGNvbmZpZy5SdW4uUGFzc1RocnUgPSAkdHJ1ZQ0KCQkkY29uZmlnLk91dHB1dC5WZXJib3NpdHkgPSAkT3V0cHV0DQogICAgCSRyZXN1bHRzID0gSW52b2tlLVBlc3RlciAtQ29uZmlndXJhdGlvbiAkY29uZmlnDQoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpDQoJCXsNCgkJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQNCgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50DQoJCQkkcmVzdWx0LlRlc3RzIHwgV2hlcmUtT2JqZWN0IFJlc3VsdCAtbmUgJ1Bhc3NlZCcgfCBGb3JFYWNoLU9iamVjdCB7DQoJCQkJJHRlc3RyZXN1bHRzICs9IFtwc2N1c3RvbW9iamVjdF1Aew0KCQkJCQlCbG9jayAgICA9ICRfLkJsb2NrDQoJCQkJCU5hbWUJID0gIkl0ICQoJF8uTmFtZSkiDQoJCQkJCVJlc3VsdCAgID0gJF8uUmVzdWx0DQoJCQkJCU1lc3NhZ2UgID0gJF8uRXJyb3JSZWNvcmQuRGlzcGxheUVycm9yTWVzc2FnZQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCn0NCiNlbmRyZWdpb24gVGVzdCBDb21tYW5kcw0KDQokdGVzdHJlc3VsdHMgfCBTb3J0LU9iamVjdCBEZXNjcmliZSwgQ29udGV4dCwgTmFtZSwgUmVzdWx0LCBNZXNzYWdlIHwgRm9ybWF0LUxpc3QNCg0KaWYgKCR0b3RhbEZhaWxlZCAtZXEgMCkgeyBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBDcml0aWNhbCAtTWVzc2FnZSAiQWxsIDxjPSdlbSc+JHRvdGFsUnVuPC9jPiB0ZXN0cyBleGVjdXRlZCB3aXRob3V0IGEgc2luZ2xlIGZhaWx1cmUhIiB9DQplbHNlIHsgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgQ3JpdGljYWwgLU1lc3NhZ2UgIjxjPSdlbSc+JHRvdGFsRmFpbGVkIHRlc3RzPC9jPiBvdXQgb2YgPGM9J3N1Yic+JHRvdGFsUnVuPC9jPiB0ZXN0cyBmYWlsZWQhIiB9DQoNCmlmICgkdG90YWxGYWlsZWQgLWd0IDApDQp7DQoJdGhyb3cgIiR0b3RhbEZhaWxlZCAvICR0b3RhbFJ1biB0ZXN0cyBmYWlsZWQhIg0KfQEJHAAAAAkdAAAABh4AAAAKcGVzdGVyLnBzMQYfAAAAEHRlc3RzXHBlc3Rlci5wczEJBgAAAAkhAAAACSIAAAABDgAAAA0AAAAGIwAAAKIHIyBEZXNjcmlwdGlvbg0KDQpUaGlzIGlzIHRoZSBmb2xkZXIsIHdoZXJlIGFsbCB0aGUgdGVzdHMgZ28uDQoNClRob3NlIGFyZSBzdWJkaXZpZGVkIGluIHR3byBjYXRlZ29yaWVzOg0KDQogLSBHZW5lcmFsDQogLSBGdW5jdGlvbg0KDQojIyBHZW5lcmFsIFRlc3RzDQoNCkdlbmVyYWwgdGVzdHMgYXJlIGZ1bmN0aW9uIGdlbmVyaWMgYW5kIHRlc3QgZm9yIGdlbmVyYWwgcG9saWNpZXMuDQoNClRoZXNlIHRlc3Qgc2NhbiBhbnN3ZXIgcXVlc3Rpb25zIHN1Y2ggYXM6DQoNCiAtIElzIG15IG1vZHVsZSBmb2xsb3dpbmcgbXkgc3R5bGUgZ3VpZGVzPw0KIC0gRG9lcyBhbnkgb2YgbXkgc2NyaXB0cyBoYXZlIGEgc3ludGF4IGVycm9yPw0KIC0gRG8gbXkgc2NyaXB0cyB1c2UgY29tbWFuZHMgSSBkbyBub3Qgd2FudCB0aGVtIHRvIHVzZT8NCiAtIERvIG15IGNvbW1hbmRzIGZvbGxvdyBiZXN0IHByYWN0aWNlcz8NCiAtIERvIG15IGNvbW1hbmRzIGhhdmUgcHJvcGVyIGhlbHA/DQoNCkJhc2ljYWxseSwgdGhlc2UgYWxsb3cgYSBnZW5lcmFsIG1vZHVsZSBoZWFsdGggY2hlY2suDQoNClRoZXNlIHRlc3RzIGFyZSBhbHJlYWR5IHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhlIHRlbXBsYXRlLg0KDQojIyBGdW5jdGlvbiBUZXN0cw0KDQpBIGhlYWx0aHkgbW9kdWxlIHNob3VsZCBwcm92aWRlIHVuaXQgYW5kIGludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgY29tbWFuZHMgJiBjb21wb25lbnRzIGl0IHNoaXBzLg0KT25seSB0aGVuIGNhbiBiZSBndWFyYW50ZWVkLCB0aGF0IHRoZXkgd2lsbCBhY3R1YWxseSBwZXJmb3JtIGFzIHByb21pc2VkLg0KDQpIb3dldmVyLCBhcyBlYWNoIHN1Y2ggdGVzdCBtdXN0IGJlIHNwZWNpZmljIHRvIHRoZSBmdW5jdGlvbiBpdCB0ZXN0cywgdGhlcmUgY2Fubm90IGJlIG11Y2ggaW4gdGhlIHdheSBvZiB0ZW1wbGF0ZXMuAQkkAAAACSUAAAAGJgAAAAlyZWFkbWUubWQGJwAAAA90ZXN0c1xyZWFkbWUubWQJBgAAAAkpAAAACSoAAAABDwAAAAMAAAAJKwAAAAEAAAABAAAAARMAAAAHAAAACQoAAAAAAAAAAAAAAAEUAAAABwAAAAkKAAAAAAAAAAAAAAABFQAAAAMAAAAJLQAAAAgAAAAIAAAAARkAAAAHAAAACQoAAAAAAAAAAAAAAAEaAAAABwAAAAkKAAAAAAAAAAAAAAABHAAAAAcAAAAJLwAAAAEAAAABAAAAAR0AAAAHAAAACTAAAAACAAAAAgAAAAEhAAAABwAAAAkKAAAAAAAAAAAAAAABIgAAAAcAAAAJCgAAAAAAAAAAAAAAASQAAAAHAAAACQoAAAAAAAAAAAAAAAElAAAABwAAAAkKAAAAAAAAAAAAAAABKQAAAAcAAAAJCgAAAAAAAAAAAAAAASoAAAAHAAAACQoAAAAAAAAAAAAAAAcrAAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTIAAAANAwctAAAAAAEAAAAIAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTMAAAAJNAAAAAk1AAAACTYAAAAJNwAAAAk4AAAACTkAAAAJOgAAABEvAAAABAAAAAY7AAAABG5hbWUNAxEwAAAABAAAAAY8AAAACnRlc3Rmb2xkZXIGPQAAAAxwZXN0ZXJjb25maWcNAgEyAAAADQAAAAY+AAAA1QEjIERlc2NyaXB0aW9uDQoNClRoaXMgaXMgd2hlcmUgdGhlIGZ1bmN0aW9uIHRlc3RzIGdvLg0KDQpNYWtlIHN1cmUgdG8gcHV0IHRoZW0gaW4gZm9sZGVycyByZWZsZWN0aW5nIHRoZSBhY3R1YWwgbW9kdWxlIHN0cnVjdHVyZS4NCg0KSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgYW5kIHB1YmxpYyBmdW5jdGlvbnMgaGVyZS4BCT8AAAAJQAAAAAZBAAAACXJlYWRtZS5tZAZCAAAAGXRlc3RzXGZ1bmN0aW9uc1xyZWFkbWUubWQJBgAAAAlEAAAACUUAAAABMwAAAA0AAAAGRgAAAIIGIyBMaXN0IG9mIGZvcmJpZGRlbiBjb21tYW5kcw0KJGdsb2JhbDpCYW5uZWRDb21tYW5kcyA9IEAoDQoJJ1dyaXRlLUhvc3QnDQoJJ1dyaXRlLVZlcmJvc2UnDQoJJ1dyaXRlLVdhcm5pbmcnDQoJJ1dyaXRlLUVycm9yJw0KCSdXcml0ZS1PdXRwdXQnDQoJJ1dyaXRlLUluZm9ybWF0aW9uJw0KCSdXcml0ZS1EZWJ1ZycNCgkNCgkjIFVzZSBDSU0gaW5zdGVhZCB3aGVyZSBwb3NzaWJsZQ0KCSdHZXQtV21pT2JqZWN0Jw0KCSdJbnZva2UtV21pTWV0aG9kJw0KCSdSZWdpc3Rlci1XbWlFdmVudCcNCgknUmVtb3ZlLVdtaU9iamVjdCcNCgknU2V0LVdtaUluc3RhbmNlJw0KDQoJIyBVc2UgR2V0LVdpbkV2ZW50IGluc3RlYWQNCgknR2V0LUV2ZW50TG9nJw0KKQ0KDQo8Iw0KCUNvbnRhaW5zIGxpc3Qgb2YgZXhjZXB0aW9ucyBmb3IgYmFubmVkIGNtZGxldHMuDQoJSW5zZXJ0IHRoZSBmaWxlIG5hbWVzIG9mIGZpbGVzIHRoYXQgbWF5IGNvbnRhaW4gdGhlbS4NCgkNCglFeGFtcGxlOg0KCSJXcml0ZS1Ib3N0IiAgPSBAKCdXcml0ZS1QU0ZIb3N0Q29sb3IucHMxJywnV3JpdGUtUFNGTWVzc2FnZS5wczEnKQ0KIz4NCiRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmQgPSBAew0KCSJXcml0ZS1Ib3N0IiAgPSBAKCkNCgkiV3JpdGUtVmVyYm9zZSIgPSBAKCkNCgkiV3JpdGUtV2FybmluZyIgPSBAKCkNCgkiV3JpdGUtRXJyb3IiICA9IEAoKQ0KCSJXcml0ZS1PdXRwdXQiID0gQCgpDQoJIldyaXRlLUluZm9ybWF0aW9uIiA9IEAoKQ0KCSJXcml0ZS1EZWJ1ZyIgPSBAKCkNCn0BCUcAAAAJSAAAAAZJAAAAHEZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEGSgAAACp0ZXN0c1xnZW5lcmFsXEZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEJBgAAAAlMAAAACU0AAAABNAAAAA0AAAAGTgAAAOAYJG1vZHVsZVJvb3QgPSAoUmVzb2x2ZS1QYXRoICIkZ2xvYmFsOnRlc3Ryb290XC4uIikuUGF0aA0KDQouICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMSINCg0KRGVzY3JpYmUgIlZlcmlmeWluZyBpbnRlZ3JpdHkgb2YgbW9kdWxlIGZpbGVzIiB7DQoJQmVmb3JlQWxsIHsNCgkJZnVuY3Rpb24gR2V0LUZpbGVFbmNvZGluZw0KCQl7DQoJCTwjDQoJCQkuU1lOT1BTSVMNCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLg0KCQkJDQoJCQkuREVTQ1JJUFRJT04NCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLg0KCQkJDQoJCQkuUEFSQU1FVEVSIFBhdGgNCgkJCQlUaGUgZmlsZSB0byB0ZXN0DQoJCSM+DQoJCQlbQ21kbGV0QmluZGluZygpXQ0KCQkJUGFyYW0gKA0KCQkJCVtQYXJhbWV0ZXIoTWFuZGF0b3J5ID0gJFRydWUsIFZhbHVlRnJvbVBpcGVsaW5lQnlQcm9wZXJ0eU5hbWUgPSAkVHJ1ZSldDQoJCQkJW0FsaWFzKCdGdWxsTmFtZScpXQ0KCQkJCVtzdHJpbmddDQoJCQkJJFBhdGgNCgkJCSkNCgkJCQ0KCQkJaWYgKCRQU1ZlcnNpb25UYWJsZS5QU1ZlcnNpb24uTWFqb3IgLWx0IDYpDQoJCQl7DQoJCQkJW2J5dGVbXV0kYnl0ZSA9IGdldC1jb250ZW50IC1FbmNvZGluZyBieXRlIC1SZWFkQ291bnQgNCAtVG90YWxDb3VudCA0IC1QYXRoICRQYXRoDQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJW2J5dGVbXV0kYnl0ZSA9IEdldC1Db250ZW50IC1Bc0J5dGVTdHJlYW0gLVJlYWRDb3VudCA0IC1Ub3RhbENvdW50IDQgLVBhdGggJFBhdGgNCgkJCX0NCgkJCQ0KCQkJaWYgKCRieXRlWzBdIC1lcSAweGVmIC1hbmQgJGJ5dGVbMV0gLWVxIDB4YmIgLWFuZCAkYnl0ZVsyXSAtZXEgMHhiZikgeyAnVVRGOCBCT00nIH0NCgkJCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVsxXSAtZXEgMHhmZikgeyAnVW5pY29kZScgfQ0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMCAtYW5kICRieXRlWzFdIC1lcSAwIC1hbmQgJGJ5dGVbMl0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVszXSAtZXEgMHhmZikgeyAnVVRGMzInIH0NCgkJCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDB4MmIgLWFuZCAkYnl0ZVsxXSAtZXEgMHgyZiAtYW5kICRieXRlWzJdIC1lcSAweDc2KSB7ICdVVEY3JyB9DQoJCQllbHNlIHsgJ1Vua25vd24nIH0NCgkJfQ0KCX0NCg0KCUNvbnRleHQgIlZhbGlkYXRpbmcgUFMxIFNjcmlwdCBmaWxlcyIgew0KCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIiB8IFdoZXJlLU9iamVjdCBGdWxsTmFtZSAtTm90TGlrZSAiJG1vZHVsZVJvb3RcdGVzdHNcKiINCgkJDQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykNCgkJew0KCQkJJG5hbWUgPSAkZmlsZS5GdWxsTmFtZS5SZXBsYWNlKCIkbW9kdWxlUm9vdFwiLCAnJykNCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgVVRGOCBlbmNvZGluZyB3aXRoIEJ5dGUgT3JkZXIgTWFyayIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7DQoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjggQk9NJw0KCQkJfQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyB0cmFpbGluZyBzcGFjZSIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7DQoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMH0pLkxpbmVOdW1iZXIgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJCX0NCgkJCQ0KCQkJJHRva2VucyA9ICRudWxsDQoJCQkkcGFyc2VFcnJvcnMgPSAkbnVsbA0KCQkJJGFzdCA9IFtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLkxhbmd1YWdlLlBhcnNlcl06OlBhcnNlRmlsZSgkZmlsZS5GdWxsTmFtZSwgW3JlZl0kdG9rZW5zLCBbcmVmXSRwYXJzZUVycm9ycykNCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gc3ludGF4IGVycm9ycyIgLVRlc3RDYXNlcyBAeyBwYXJzZUVycm9ycyA9ICRwYXJzZUVycm9ycyB9IHsNCgkJCQkkcGFyc2VFcnJvcnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJCX0NCgkJCQ0KCQkJZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGdsb2JhbDpCYW5uZWRDb21tYW5kcykNCgkJCXsNCgkJCQlpZiAoJGdsb2JhbDpNYXlDb250YWluQ29tbWFuZFsiJGNvbW1hbmQiXSAtbm90Y29udGFpbnMgJGZpbGUuTmFtZSkNCgkJCQl7DQoJCQkJCUl0ICJbJG5hbWVdIFNob3VsZCBub3QgdXNlICRjb21tYW5kIiAtVGVzdENhc2VzIEB7IHRva2VucyA9ICR0b2tlbnM7IGNvbW1hbmQgPSAkY29tbWFuZCB9IHsNCgkJCQkJCSR0b2tlbnMgfCBXaGVyZS1PYmplY3QgVGV4dCAtRVEgJGNvbW1hbmQgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCgkNCglDb250ZXh0ICJWYWxpZGF0aW5nIGhlbHAudHh0IGhlbHAgZmlsZXMiIHsNCgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLmhlbHAudHh0IiB8IFdoZXJlLU9iamVjdCBGdWxsTmFtZSAtTm90TGlrZSAiJG1vZHVsZVJvb3RcdGVzdHNcKiINCgkJDQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykNCgkJew0KCQkJJG5hbWUgPSAkZmlsZS5GdWxsTmFtZS5SZXBsYWNlKCIkbW9kdWxlUm9vdFwiLCAnJykNCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgVVRGOCBlbmNvZGluZyIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7DQoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjggQk9NJw0KCQkJfQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyB0cmFpbGluZyBzcGFjZSIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7DQoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMCB9IHwgTWVhc3VyZS1PYmplY3QpLkNvdW50IHwgU2hvdWxkIC1CZSAwDQoJCQl9DQoJCX0NCgl9DQp9AQlPAAAACVAAAAAGUQAAABdGaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQZSAAAAJXRlc3RzXGdlbmVyYWxcRmlsZUludGVncml0eS5UZXN0cy5wczEJBgAAAAlUAAAACVUAAAABNQAAAA0AAAAGVgAAAJ0FIyBMaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkDQokZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zID0gQCgNCiAgICANCikNCg0KPCMNCiAgTGlzdCBvZiBhcnJheWVkIGVudW1lcmF0aW9ucy4gVGhlc2UgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LiBBZGQgZnVsbCBuYW1lLg0KICBFeGFtcGxlOg0KDQogICJTcWxjb2xsYWJvcmF0aXZlLkRiYXRvb2xzLkNvbm5lY3Rpb24uTWFuYWdlbWVudENvbm5lY3Rpb25UeXBlW10iDQojPg0KJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMgPSBAKA0KCQ0KKQ0KDQo8Iw0KICBTb21lIHR5cGVzIG9uIHBhcmFtZXRlcnMganVzdCBmYWlsIHRoZWlyIHZhbGlkYXRpb24gbm8gbWF0dGVyIHdoYXQuDQogIEZvciB0aG9zZSBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIHNraXAgdGhlbSwgYnkgYWRkaW5nIHRoZW0gdG8gdGhpcyBoYXNodGFibGUuDQogIEFkZCBieSBmb2xsb3dpbmcgdGhpcyBjb252ZW50aW9uOiA8Y29tbWFuZCBuYW1lPiA9IEAoPGxpc3Qgb2YgcGFyYW1ldGVyIG5hbWVzPikNCiAgRXhhbXBsZToNCg0KICAiR2V0LURiYUNtT2JqZWN0IiAgICAgICA9IEAoIkRvTm90VXNlIikNCiM+DQokZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUgPSBAew0KICAgIA0KfQ0KAQlXAAAACVgAAAAGWQAAABNIZWxwLkV4Y2VwdGlvbnMucHMxBloAAAAhdGVzdHNcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxCQYAAAAJXAAAAAldAAAAATYAAAANAAAABl4AAADONDwjDQogICAgLk5PVEVTDQogICAgICAgIFRoZSBvcmlnaW5hbCB0ZXN0IHRoaXMgaXMgYmFzZWQgdXBvbiB3YXMgd3JpdHRlbiBieSBKdW5lIEJsZW5kZXIuDQoJCUFmdGVyIHNldmVyYWwgcm91bmRzIG9mIG1vZGlmaWNhdGlvbnMgaXQgc3RhbmRzIG5vdyBhcyBpdCBpcywgYnV0IHRoZSBob25vciByZW1haW5zIGhlcnMuDQoNCgkJVGhhbmsgeW91IEp1bmUsIGZvciBhbGwgeW91IGhhdmUgZG9uZSENCg0KICAgIC5ERVNDUklQVElPTg0KCQlUaGlzIHRlc3QgZXZhbHVhdGVzIHRoZSBoZWxwIGZvciBhbGwgY29tbWFuZHMgaW4gYSBtb2R1bGUuDQoNCgkuUEFSQU1FVEVSIFNraXBUZXN0DQoJCURpc2FibGVzIHRoaXMgdGVzdC4NCgkNCgkuUEFSQU1FVEVSIENvbW1hbmRQYXRoDQoJCUxpc3Qgb2YgcGF0aHMgdW5kZXIgd2hpY2ggdGhlIHNjcmlwdCBmaWxlcyBhcmUgc3RvcmVkLg0KCQlUaGlzIHRlc3QgYXNzdW1lcyB0aGF0IGFsbCBmdW5jdGlvbnMgaGF2ZSB0aGVpciBvd24gZmlsZSB0aGF0IGlzIG5hbWVkIGFmdGVyIHRoZW1zZWx2ZXMuDQoJCVRoZXNlIHBhdGhzIGFyZSB1c2VkIHRvIHNlYXJjaCBmb3IgY29tbWFuZHMgdGhhdCBzaG91bGQgZXhpc3QgYW5kIGJlIHRlc3RlZC4NCgkJV2lsbCBzZWFyY2ggcmVjdXJzaXZlbHkgYW5kIGFjY2VwdHMgd2lsZGNhcmRzLCBtYWtlIHN1cmUgb25seSBmdW5jdGlvbnMgYXJlIGZvdW5kDQoNCgkuUEFSQU1FVEVSIE1vZHVsZU5hbWUNCgkJTmFtZSBvZiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZC4NCgkJVGhlIG1vZHVsZSBtdXN0IGFscmVhZHkgYmUgaW1wb3J0ZWQNCg0KCS5QQVJBTUVURVIgRXhjZXB0aW9uc0ZpbGUNCgkJRmlsZSBpbiB3aGljaCBleGNlcHRpb25zIGFuZCBhZGp1c3RtZW50cyBhcmUgY29uZmlndXJlZC4NCgkJSW4gaXQgdGhlcmUgc2hvdWxkIGJlIHR3byBhcnJheXMgYW5kIGEgaGFzaHRhYmxlIGRlZmluZWQ6DQoJCQkkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zDQoJCQkkZ2xvYmFsOkhlbHBUZXN0RW51bWVyYXRlZEFycmF5cw0KCQkJJGdsb2JhbDpIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlDQoJCVRoZXNlIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHRoZSB0ZXN0cyBzbGlnaHRseSBpbiBjYXNlcyBvZiBuZWVkLg0KCQlTZWUgdGhlIGV4YW1wbGUgZmlsZSBmb3IgZXhwbGFuYXRpb25zIG9uIGVhY2ggb2YgdGhlc2UgdXNhZ2UgYW5kIGVmZmVjdC4NCiM+DQpbQ21kbGV0QmluZGluZygpXQ0KUGFyYW0gKA0KCVtzd2l0Y2hdDQoJJFNraXBUZXN0LA0KCQ0KCVtzdHJpbmdbXV0NCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpLA0KCQ0KCVtzdHJpbmddDQoJJE1vZHVsZU5hbWUgPSAiw75uYW1lw74iLA0KCQ0KCVtzdHJpbmddDQoJJEV4Y2VwdGlvbnNGaWxlID0gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxIg0KKQ0KaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQ0KLiAkRXhjZXB0aW9uc0ZpbGUNCg0KJGluY2x1ZGVkTmFtZXMgPSAoR2V0LUNoaWxkSXRlbSAkQ29tbWFuZFBhdGggLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiKS5CYXNlTmFtZQ0KJGNvbW1hbmRUeXBlcyA9IEAoJ0NtZGxldCcsICdGdW5jdGlvbicpDQppZiAoJFBTVmVyc2lvblRhYmxlLlBTRWRpdGlvbiAtZXEgJ0Rlc2t0b3AnICkgeyAkY29tbWFuZFR5cGVzICs9ICdXb3JrZmxvdycgfQ0KJGNvbW1hbmRzID0gR2V0LUNvbW1hbmQgLU1vZHVsZSAoR2V0LU1vZHVsZSAkTW9kdWxlTmFtZSkgLUNvbW1hbmRUeXBlICRjb21tYW5kVHlwZXMgfCBXaGVyZS1PYmplY3QgTmFtZSAtSW4gJGluY2x1ZGVkTmFtZXMNCg0KIyMgV2hlbiB0ZXN0aW5nIGhlbHAsIHJlbWVtYmVyIHRoYXQgaGVscCBpcyBjYWNoZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHNlc3Npb24uDQojIyBUbyB0ZXN0LCByZXN0YXJ0IHNlc3Npb24uDQoNCg0KZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGNvbW1hbmRzKSB7DQogICAgJGNvbW1hbmROYW1lID0gJGNvbW1hbmQuTmFtZQ0KICAgIA0KICAgICMgU2tpcCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG9uIHRoZSBleGNsdXNpb25zIGxpc3QNCiAgICBpZiAoJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucyAtY29udGFpbnMgJGNvbW1hbmROYW1lKSB7IGNvbnRpbnVlIH0NCiAgICANCiAgICAjIFRoZSBtb2R1bGUtcXVhbGlmaWVkIGNvbW1hbmQgZmFpbHMgb24gTWljcm9zb2Z0LlBvd2VyU2hlbGwuQXJjaGl2ZSBjbWRsZXRzDQogICAgJEhlbHAgPSBHZXQtSGVscCAkY29tbWFuZE5hbWUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUNCgkNCglEZXNjcmliZSAiVGVzdCBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgDQoJCSMgSWYgaGVscCBpcyBub3QgZm91bmQsIHN5bm9wc2lzIGluIGF1dG8tZ2VuZXJhdGVkIGhlbHAgaXMgdGhlIHN5bnRheCBkaWFncmFtDQoJCUl0ICJzaG91bGQgbm90IGJlIGF1dG8tZ2VuZXJhdGVkIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsNCgkJCSRIZWxwLlN5bm9wc2lzIHwgU2hvdWxkIC1Ob3QgLUJlTGlrZSAnKmBbYDxDb21tb25QYXJhbWV0ZXJzYD5gXSonDQoJCX0NCiAgICAgICAgDQoJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IGZ1bmN0aW9uDQoJCUl0ICJnZXRzIGRlc2NyaXB0aW9uIGZvciAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gew0KCQkJJEhlbHAuRGVzY3JpcHRpb24gfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQogICAgICAgIA0KCQkjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZQ0KCQlJdCAiZ2V0cyBleGFtcGxlIGNvZGUgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gew0KCQkJKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5Db2RlIHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KCQ0KCQkjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZSBkZXNjcmlwdGlvbg0KCQlJdCAiZ2V0cyBleGFtcGxlIGhlbHAgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gew0KCQkJKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQogICAgICAgIA0KICAgICAgICBDb250ZXh0ICJUZXN0IHBhcmFtZXRlciBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGNvbW1vbiA9ICdEZWJ1ZycsICdFcnJvckFjdGlvbicsICdFcnJvclZhcmlhYmxlJywgJ0luZm9ybWF0aW9uQWN0aW9uJywgJ0luZm9ybWF0aW9uVmFyaWFibGUnLCAnT3V0QnVmZmVyJywgJ091dFZhcmlhYmxlJywgJ1BpcGVsaW5lVmFyaWFibGUnLCAnVmVyYm9zZScsICdXYXJuaW5nQWN0aW9uJywgJ1dhcm5pbmdWYXJpYWJsZScNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHBhcmFtZXRlcnMgPSAkY29tbWFuZC5QYXJhbWV0ZXJTZXRzLlBhcmFtZXRlcnMgfCBTb3J0LU9iamVjdCAtUHJvcGVydHkgTmFtZSAtVW5pcXVlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLW5vdGluICRjb21tb24NCiAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lcyA9ICRwYXJhbWV0ZXJzLk5hbWUNCiAgICAgICAgICAgICRIZWxwUGFyYW1ldGVyTmFtZXMgPSAkSGVscC5QYXJhbWV0ZXJzLlBhcmFtZXRlci5OYW1lIHwgU29ydC1PYmplY3QgLVVuaXF1ZQ0KICAgICAgICAgICAgZm9yZWFjaCAoJHBhcmFtZXRlciBpbiAkcGFyYW1ldGVycykgew0KICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lID0gJHBhcmFtZXRlci5OYW1lDQogICAgICAgICAgICAgICAgJHBhcmFtZXRlckhlbHAgPSAkSGVscC5wYXJhbWV0ZXJzLnBhcmFtZXRlciB8IFdoZXJlLU9iamVjdCBOYW1lIC1FUSAkcGFyYW1ldGVyTmFtZQ0KCQkJDQoJCQkJIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgcGFyYW1ldGVyDQoJCQkJSXQgImdldHMgaGVscCBmb3IgcGFyYW1ldGVyOiAkcGFyYW1ldGVyTmFtZSA6IGluICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHAgfSB7DQoJCQkJCSRwYXJhbWV0ZXJIZWxwLkRlc2NyaXB0aW9uLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KCQkJCX0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkY29kZU1hbmRhdG9yeSA9ICRwYXJhbWV0ZXIuSXNNYW5kYXRvcnkudG9TdHJpbmcoKQ0KCQkJCUl0ICJoZWxwIGZvciAkcGFyYW1ldGVyTmFtZSBwYXJhbWV0ZXIgaW4gJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IE1hbmRhdG9yeSB2YWx1ZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IGNvZGVNYW5kYXRvcnkgPSAkY29kZU1hbmRhdG9yeSB9IHsNCgkJCQkJJHBhcmFtZXRlckhlbHAuUmVxdWlyZWQgfCBTaG91bGQgLUJlICRjb2RlTWFuZGF0b3J5DQoJCQkJfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICgkSGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZVskY29tbWFuZE5hbWVdIC1jb250YWlucyAkcGFyYW1ldGVyTmFtZSkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGNvZGVUeXBlID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLk5hbWUNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLklzRW51bSkgew0KICAgICAgICAgICAgICAgICAgICAjIEVudW1lcmF0aW9ucyBvZnRlbiBoYXZlIGlzc3VlcyB3aXRoIHRoZSB0eXBlbmFtZSBub3QgYmVpbmcgcmVsaWFibHkgYXZhaWxhYmxlDQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlKQ0KCQkJCQkJIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlDQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscDsgbmFtZXMgPSAkbmFtZXMgfSB7DQoJCQkJCQkkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMNCgkJCQkJfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5GdWxsTmFtZSAtaW4gJEhlbHBUZXN0RW51bWVyYXRlZEFycmF5cykgew0KICAgICAgICAgICAgICAgICAgICAjIEVudW1lcmF0aW9ucyBvZnRlbiBoYXZlIGlzc3VlcyB3aXRoIHRoZSB0eXBlbmFtZSBub3QgYmVpbmcgcmVsaWFibHkgYXZhaWxhYmxlDQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9IFtFbnVtXTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkRlY2xhcmVkTWVtYmVyc1swXS5SZXR1cm5UeXBlKQ0KCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gew0KCQkJCQkJJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWVHcm91cC5wYXJhbWV0ZXJWYWx1ZSB8IFNob3VsZCAtYmUgJG5hbWVzDQoJCQkJCX0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICMgVG8gYXZvaWQgY2FsbGluZyBUcmltIG1ldGhvZCBvbiBhIG51bGwgb2JqZWN0Lg0KICAgICAgICAgICAgICAgICAgICAkaGVscFR5cGUgPSBpZiAoJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUpIHsgJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUuVHJpbSgpIH0NCgkJCQkJIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlDQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IGhlbHBUeXBlID0gJGhlbHBUeXBlOyBjb2RlVHlwZSA9ICRjb2RlVHlwZSB9IHsNCgkJCQkJCSRoZWxwVHlwZSB8IFNob3VsZCAtYmUgJGNvZGVUeXBlDQoJCQkJCX0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3JlYWNoICgkaGVscFBhcm0gaW4gJEhlbHBQYXJhbWV0ZXJOYW1lcykgew0KCQkJCSMgU2hvdWxkbid0IGZpbmQgZXh0cmEgcGFyYW1ldGVycyBpbiBoZWxwLg0KCQkJCUl0ICJmaW5kcyBoZWxwIHBhcmFtZXRlciBpbiBjb2RlOiAkaGVscFBhcm0iIC1UZXN0Q2FzZXMgQHsgaGVscFBhcm0gPSAkaGVscFBhcm07IHBhcmFtZXRlck5hbWVzID0gJHBhcmFtZXRlck5hbWVzIH0gew0KCQkJCQkkaGVscFBhcm0gLWluICRwYXJhbWV0ZXJOYW1lcyB8IFNob3VsZCAtQmUgJHRydWUNCgkJCQl9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9AQlfAAAACWAAAAAGYQAAAA5IZWxwLlRlc3RzLnBzMQZiAAAAHHRlc3RzXGdlbmVyYWxcSGVscC5UZXN0cy5wczEJBgAAAAlkAAAACWUAAAABNwAAAA0AAAAGZgAAAMsVRGVzY3JpYmUgIlZhbGlkYXRpbmcgdGhlIG1vZHVsZSBtYW5pZmVzdCIgew0KCSRtb2R1bGVSb290ID0gKFJlc29sdmUtUGF0aCAiJGdsb2JhbDp0ZXN0cm9vdFwuLiIpLlBhdGgNCgkkbWFuaWZlc3QgPSAoKEdldC1Db250ZW50ICIkbW9kdWxlUm9vdFzDvm5hbWXDvi5wc2QxIikgLWpvaW4gImBuIikgfCBJbnZva2UtRXhwcmVzc2lvbg0KCUNvbnRleHQgIkJhc2ljIHJlc291cmNlcyB2YWxpZGF0aW9uIiB7DQoJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiDQoJCUl0ICJFeHBvcnRzIGFsbCBmdW5jdGlvbnMgaW4gdGhlIHB1YmxpYyBmb2xkZXIiIC1UZXN0Q2FzZXMgQHsgZmlsZXMgPSAkZmlsZXM7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gew0KCQkJDQoJCQkkZnVuY3Rpb25zID0gKENvbXBhcmUtT2JqZWN0IC1SZWZlcmVuY2VPYmplY3QgJGZpbGVzLkJhc2VOYW1lIC1EaWZmZXJlbmNlT2JqZWN0ICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFdoZXJlLU9iamVjdCBTaWRlSW5kaWNhdG9yIC1MaWtlICc8PScpLklucHV0T2JqZWN0DQoJCQkkZnVuY3Rpb25zIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCX0NCgkJSXQgIkV4cG9ydHMgbm8gZnVuY3Rpb24gdGhhdCBpc24ndCBhbHNvIHByZXNlbnQgaW4gdGhlIHB1YmxpYyBmb2xkZXIiIC1UZXN0Q2FzZXMgQHsgZmlsZXMgPSAkZmlsZXM7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gew0KCQkJJGZ1bmN0aW9ucyA9IChDb21wYXJlLU9iamVjdCAtUmVmZXJlbmNlT2JqZWN0ICRmaWxlcy5CYXNlTmFtZSAtRGlmZmVyZW5jZU9iamVjdCAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBXaGVyZS1PYmplY3QgU2lkZUluZGljYXRvciAtTGlrZSAnPT4nKS5JbnB1dE9iamVjdA0KCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJCQ0KCQlJdCAiRXhwb3J0cyBub25lIG9mIGl0cyBpbnRlcm5hbCBmdW5jdGlvbnMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsNCgkJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiDQoJCQkkZmlsZXMgfCBXaGVyZS1PYmplY3QgQmFzZU5hbWUgLUluICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJfQ0KCQ0KCUNvbnRleHQgIkluZGl2aWR1YWwgZmlsZSB2YWxpZGF0aW9uIiB7DQoJCUl0ICJUaGUgcm9vdCBtb2R1bGUgZmlsZSBleGlzdHMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsNCgkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJCgkbWFuaWZlc3QuUm9vdE1vZHVsZSkiIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KCQl9DQoJCQ0KCQlmb3JlYWNoICgkZm9ybWF0IGluICRtYW5pZmVzdC5Gb3JtYXRzVG9Qcm9jZXNzKQ0KCQl7DQoJCQlJdCAiVGhlIGZpbGUgJGZvcm1hdCBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBmb3JtYXQgPSAkZm9ybWF0IH0gew0KCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGZvcm1hdCIgfCBTaG91bGQgLUJlICR0cnVlDQoJCQl9DQoJCX0NCgkJDQoJCWZvcmVhY2ggKCR0eXBlIGluICRtYW5pZmVzdC5UeXBlc1RvUHJvY2VzcykNCgkJew0KCQkJSXQgIlRoZSBmaWxlICR0eXBlIHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IHR5cGUgPSAkdHlwZSB9IHsNCgkJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCR0eXBlIiB8IFNob3VsZCAtQmUgJHRydWUNCgkJCX0NCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJGFzc2VtYmx5IGluICRtYW5pZmVzdC5SZXF1aXJlZEFzc2VtYmxpZXMpDQoJCXsNCiAgICAgICAgICAgIGlmICgkYXNzZW1ibHkgLWxpa2UgIiouZGxsIikgew0KICAgICAgICAgICAgICAgIEl0ICJUaGUgZmlsZSAkYXNzZW1ibHkgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgYXNzZW1ibHkgPSAkYXNzZW1ibHkgfSB7DQogICAgICAgICAgICAgICAgICAgIFRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGFzc2VtYmx5IiB8IFNob3VsZCAtQmUgJHRydWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBJdCAiVGhlIGZpbGUgJGFzc2VtYmx5IHNob3VsZCBsb2FkIGZyb20gdGhlIEdBQyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IGFzc2VtYmx5ID0gJGFzc2VtYmx5IH0gew0KICAgICAgICAgICAgICAgICAgICB7IEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgJGFzc2VtYmx5IH0gfCBTaG91bGQgLU5vdCAtVGhyb3cNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCgkJDQoJCWZvcmVhY2ggKCR0YWcgaW4gJG1hbmlmZXN0LlByaXZhdGVEYXRhLlBTRGF0YS5UYWdzKQ0KCQl7DQoJCQlJdCAiVGFncyBzaG91bGQgaGF2ZSBubyBzcGFjZXMgaW4gbmFtZSIgLVRlc3RDYXNlcyBAeyB0YWcgPSAkdGFnIH0gew0KCQkJCSR0YWcgLW1hdGNoICIgIiB8IFNob3VsZCAtQmUgJGZhbHNlDQoJCQl9DQoJCX0NCgl9DQp9AQlnAAAACWgAAAAGaQAAABJNYW5pZmVzdC5UZXN0cy5wczEGagAAACB0ZXN0c1xnZW5lcmFsXE1hbmlmZXN0LlRlc3RzLnBzMQkGAAAACWwAAAAJbQAAAAE4AAAADQAAAAZuAAAAlglbQ21kbGV0QmluZGluZygpXQ0KUGFyYW0gKA0KCVtzd2l0Y2hdDQoJJFNraXBUZXN0LA0KCQ0KCVtzdHJpbmdbXV0NCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpDQopDQoNCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0NCg0KJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQoNCkRlc2NyaWJlICdJbnZva2luZyBQU1NjcmlwdEFuYWx5emVyIGFnYWluc3QgY29tbWFuZGJhc2UnIHsNCgkkY29tbWFuZEZpbGVzID0gZm9yZWFjaCAoJHBhdGggaW4gJENvbW1hbmRQYXRoKSB7DQogICAgICAgIEdldC1DaGlsZEl0ZW0gLVBhdGggJHBhdGggLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiDQogICAgfQ0KCSRzY3JpcHRBbmFseXplclJ1bGVzID0gR2V0LVNjcmlwdEFuYWx5emVyUnVsZQ0KCQ0KCWZvcmVhY2ggKCRmaWxlIGluICRjb21tYW5kRmlsZXMpDQoJew0KCQlDb250ZXh0ICJBbmFseXppbmcgJCgkZmlsZS5CYXNlTmFtZSkiIHsNCgkJCSRhbmFseXNpcyA9IEludm9rZS1TY3JpcHRBbmFseXplciAtUGF0aCAkZmlsZS5GdWxsTmFtZSAtRXhjbHVkZVJ1bGUgUFNBdm9pZFRyYWlsaW5nV2hpdGVzcGFjZSwgUFNTaG91bGRQcm9jZXNzDQoJCQkNCgkJCWZvckVhY2ggKCRydWxlIGluICRzY3JpcHRBbmFseXplclJ1bGVzKQ0KCQkJew0KCQkJCUl0ICJTaG91bGQgcGFzcyAkcnVsZSIgLVRlc3RDYXNlcyBAeyBhbmFseXNpcyA9ICRhbmFseXNpczsgcnVsZSA9ICRydWxlIH0gew0KCQkJCQlJZiAoJGFuYWx5c2lzLlJ1bGVOYW1lIC1jb250YWlucyAkcnVsZSkNCgkJCQkJew0KCQkJCQkJJGFuYWx5c2lzIHwgV2hlcmUtT2JqZWN0IFJ1bGVOYW1lIC1FUSAkcnVsZSAtb3V0dmFyaWFibGUgZmFpbHVyZXMgfCBGb3JFYWNoLU9iamVjdCB7ICRudWxsID0gJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyLkFkZCgkXykgfQ0KCQkJCQkJDQoJCQkJCQkxIHwgU2hvdWxkIC1CZSAwDQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkwIHwgU2hvdWxkIC1CZSAwDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9AQlvAAAACXAAAAAGcQAAABpQU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQZyAAAAKHRlc3RzXGdlbmVyYWxcUFNTY3JpcHRBbmFseXplci5UZXN0cy5wczEJBgAAAAl0AAAACXUAAAABOQAAAA0AAAAGdgAAAOYHJGV4Y2VwdGlvbnMgPSBAeyB9DQoNCjwjDQpBIGxpc3Qgb2YgZW50cmllcyB0aGF0IE1BWSBiZSBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMsIHdpdGhvdXQgY2F1c2luZyB0aGUgdGVzdHMgdG8gZmFpbC4NClRoaXMgaXMgY29tbW9ubHkgdXNlZCBpbiBtb2R1bGVzIHRoYXQgZ2VuZXJhdGUgbG9jYWxpemVkIG1lc3NhZ2VzIHN0cmFpZ2h0IGZyb20gQyMuDQpTcGVjaWZ5IHRoZSBmdWxsIGtleSBhcyBpdCBpcyB3cml0dGVuIGluIHRoZSBsYW5ndWFnZSBmaWxlcywgZG8gbm90IHByZXBlbmQgdGhlIG1vZHVsZW5hbWUsDQphcyB5b3Ugd291bGQgaGF2ZSB0byBpbiBDIyBjb2RlLg0KDQpFeGFtcGxlOg0KJGV4Y2VwdGlvbnNbJ0xlZ2FsU3VycGx1cyddID0gQCgNCiAgICAnRXhjZXB0aW9uLlN0cmVhbXMuRmFpbGVkQ3JlYXRlJw0KICAgICdFeGNlcHRpb24uU3RyZWFtcy5GYWlsZWREaXNwb3NlJw0KKQ0KIz4NCiRleGNlcHRpb25zWydMZWdhbFN1cnBsdXMnXSA9IEAoDQoNCikNCjwjDQpBIGxpc3Qgb2YgZW50cmllcyB0aGF0IE1BWSBiZSB1c2VkIHdpdGhvdXQgbmVlZGluZyB0byBoYXZlIHRleHQgZGVmaW5lZC4NClRoaXMgaXMgaW50ZW5kZWQgZm9yIG1vZHVsZXMgKHJlLSl1c2luZyBzdHJpbmdzIHByb3ZpZGVkIGJ5IGFub3RoZXIgbW9kdWxlDQojPg0KJGV4Y2VwdGlvbnNbJ05vVGV4dE5lZWRlZCddID0gQCgNCgknVmFsaWRhdGUuRlNQYXRoJw0KCSdWYWxpZGF0ZS5GU1BhdGguRmlsZScNCgknVmFsaWRhdGUuRlNQYXRoLkZpbGVPclBhcmVudCcNCgknVmFsaWRhdGUuRlNQYXRoLkZvbGRlcicNCgknVmFsaWRhdGUuUGF0aCcNCgknVmFsaWRhdGUuUGF0aC5Db250YWluZXInDQoJJ1ZhbGlkYXRlLlBhdGguTGVhZicNCgknVmFsaWRhdGUuVGltZVNwYW4uUG9zaXRpdmUnDQoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZScNCgknVmFsaWRhdGUuVXJpLkFic29sdXRlLkZpbGUnDQoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZS5IdHRwcycNCikNCg0KJGV4Y2VwdGlvbnMBCXcAAAAJeAAAAAZ5AAAAFnN0cmluZ3MuRXhjZXB0aW9ucy5wczEGegAAACR0ZXN0c1xnZW5lcmFsXHN0cmluZ3MuRXhjZXB0aW9ucy5wczEJBgAAAAl8AAAACX0AAAABOgAAAA0AAAAGfgAAAJcIPCMNCi5ERVNDUklQVElPTg0KICAgIFRoaXMgdGVzdCB2ZXJpZmllcywgdGhhdCBhbGwgc3RyaW5ncyB0aGF0IGhhdmUgYmVlbiB1c2VkLA0KICAgIGFyZSBsaXN0ZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGVzIGFuZCB0aHVzIGhhdmUgYSBtZXNzYWdlIGJlaW5nIGRpc3BsYXllZC4NCg0KICAgIEl0IGFsc28gY2hlY2tzLCB3aGV0aGVyIHRoZSBsYW5ndWFnZSBmaWxlcyBoYXZlIG9ycGhhbmVkIGVudHJpZXMgdGhhdCBuZWVkIGNsZWFuaW5nIHVwLg0KIz4NCg0KDQoNCkRlc2NyaWJlICJUZXN0aW5nIGxvY2FsaXphdGlvbiBzdHJpbmdzIiB7DQoJJG1vZHVsZVJvb3QgPSAoR2V0LU1vZHVsZSDDvm5hbWXDvikuTW9kdWxlQmFzZQ0KCSRzdHJpbmdzUmVzdWx0cyA9IEV4cG9ydC1QU01EU3RyaW5nIC1Nb2R1bGVSb290ICRtb2R1bGVSb290DQoJJGV4Y2VwdGlvbnMgPSAmICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcc3RyaW5ncy5FeGNlcHRpb25zLnBzMSINCgkNCglmb3JlYWNoICgkc3RyaW5nRW50cnkgaW4gJHN0cmluZ3NSZXN1bHRzKSB7DQogICAgICAgIGlmICgkc3RyaW5nRW50cnkuU3RyaW5nIC1lcSAia2V5IikgeyBjb250aW51ZSB9ICMgU2tpcHBpbmcgdGhlIHRlbXBsYXRlIGRlZmF1bHQgZW50cnkNCgkJSXQgIlNob3VsZCBiZSB1c2VkICYgaGF2ZSB0ZXh0OiAkKCRzdHJpbmdFbnRyeS5TdHJpbmcpIiAtVGVzdENhc2VzIEB7IHN0cmluZ0VudHJ5ID0gJHN0cmluZ0VudHJ5OyBleGNlcHRpb25zID0gJGV4Y2VwdGlvbnMgfSB7DQogICAgICAgICAgICBpZiAoJGV4Y2VwdGlvbnMuTGVnYWxTdXJwbHVzIC1ub3Rjb250YWlucyAkc3RyaW5nRW50cnkuU3RyaW5nKSB7DQogICAgICAgICAgICAgICAgJHN0cmluZ0VudHJ5LlN1cnBsdXMgfCBTaG91bGQgLUJlRmFsc2UNCgkJCX0NCgkJCWlmICgkZXhjZXB0aW9ucy5Ob1RleHROZWVkZWQgLW5vdGNvbnRhaW5zICRzdHJpbmdFbnRyeS5TdHJpbmcpIHsNCgkJCQkkc3RyaW5nRW50cnkuVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQoJCQl9DQogICAgICAgIH0NCiAgICB9DQp9AQl/AAAACYAAAAAGgQAAABFzdHJpbmdzLlRlc3RzLnBzMQaCAAAAH3Rlc3RzXGdlbmVyYWxcc3RyaW5ncy5UZXN0cy5wczEJBgAAAAmEAAAACYUAAAABPwAAAAcAAAAJCgAAAAAAAAAAAAAAAUAAAAAHAAAACQoAAAAAAAAAAAAAAAFEAAAABwAAAAkKAAAAAAAAAAAAAAABRQAAAAcAAAAJCgAAAAAAAAAAAAAAAUcAAAAHAAAACQoAAAAAAAAAAAAAAAFIAAAABwAAAAkKAAAAAAAAAAAAAAABTAAAAAcAAAAJCgAAAAAAAAAAAAAAAU0AAAAHAAAACQoAAAAAAAAAAAAAAAFPAAAABwAAAAkKAAAAAAAAAAAAAAABUAAAAAcAAAAJCgAAAAAAAAAAAAAAAVQAAAAHAAAACQoAAAAAAAAAAAAAAAFVAAAABwAAAAkKAAAAAAAAAAAAAAABVwAAAAcAAAAJCgAAAAAAAAAAAAAAAVgAAAAHAAAACQoAAAAAAAAAAAAAAAFcAAAABwAAAAkKAAAAAAAAAAAAAAABXQAAAAcAAAAJCgAAAAAAAAAAAAAAAV8AAAAHAAAACYcAAAABAAAAAQAAAAFgAAAABwAAAAkKAAAAAAAAAAAAAAABZAAAAAcAAAAJCgAAAAAAAAAAAAAAAWUAAAAHAAAACQoAAAAAAAAAAAAAAAFnAAAABwAAAAmJAAAAAQAAAAEAAAABaAAAAAcAAAAJCgAAAAAAAAAAAAAAAWwAAAAHAAAACQoAAAAAAAAAAAAAAAFtAAAABwAAAAkKAAAAAAAAAAAAAAABbwAAAAcAAAAJCgAAAAAAAAAAAAAAAXAAAAAHAAAACQoAAAAAAAAAAAAAAAF0AAAABwAAAAkKAAAAAAAAAAAAAAABdQAAAAcAAAAJCgAAAAAAAAAAAAAAAXcAAAAHAAAACQoAAAAAAAAAAAAAAAF4AAAABwAAAAkKAAAAAAAAAAAAAAABfAAAAAcAAAAJCgAAAAAAAAAAAAAAAX0AAAAHAAAACQoAAAAAAAAAAAAAAAF/AAAABwAAAAmLAAAAAQAAAAEAAAABgAAAAAcAAAAJCgAAAAAAAAAAAAAAAYQAAAAHAAAACQoAAAAAAAAAAAAAAAGFAAAABwAAAAkKAAAAAAAAAAAAAAARhwAAAAQAAAAGjQAAAARuYW1lDQMRiQAAAAQAAAAGjgAAAARuYW1lDQMRiwAAAAQAAAAGjwAAAARuYW1lDQML</BA> </MS> </Obj> <Obj RefId="34"> <TNRef RefId="7" /> <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString> <Props> <Obj N="Children" RefId="35"> <TNRef RefId="6" /> <LST> <S>PSModuleDevelopment.Template.TemplateItemFile</S> <S>PSModuleDevelopment.Template.TemplateItemFile</S> <S>PSModuleDevelopment.Template.TemplateItemFile</S> </LST> </Obj> <S N="Name">xml</S> <S N="RelativePath">xml</S> <S N="Identifier">þ</S> <Obj N="FileSystemParameterFlat" RefId="36"> <TNRef RefId="2" /> <LST /> </Obj> <Obj N="FileSystemParameterScript" RefId="37"> <TNRef RefId="2" /> <LST /> </Obj> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAAA3htbAYFAAAAA3htbAYGAAAAAsO+CQcAAAAJCAAAAAQDAAAAngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZVtdAgAAAAgICQkAAAADAAAAAwAAAAQHAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQoAAAAAAAAAAAAAAAEIAAAABwAAAAkKAAAAAAAAAAAAAAAHCQAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkLAAAACQwAAAAJDQAAAAoRCgAAAAAAAAAFCwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGDgAAAKwLIyBYTUwNCg0KVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHByb2plY3QgWE1MIGZpbGVzIGdvLCBub3RhYmx5Og0KDQogLSBGb3JtYXQgWE1MDQogLSBUeXBlIEV4dGVuc2lvbiBYTUwNCg0KRXh0ZXJuYWwgaGVscCBmaWxlcyBzaG91bGQgX25vdF8gYmUgcGxhY2VkIGluIHRoaXMgZm9sZGVyIQ0KDQojIyBOb3RlcyBvbiBGaWxlcyBhbmQgTmFtaW5nDQoNClRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBmb3JtYXQgZmlsZSBhbmQgb25lIHR5cGUgZXh0ZW5zaW9uIGZpbGUgcGVyIHByb2plY3QsIGFzIGltcG9ydGluZyB0aGVtIGhhcyBhIG5vdGFibGUgaW1wYWN0IG9uIGltcG9ydCB0aW1lcy4NCg0KIC0gVGhlIEZvcm1hdCBYTUwgc2hvdWxkIGJlIG5hbWVkIGDDvm5hbWXDvi5Gb3JtYXQucHMxeG1sYA0KIC0gVGhlIFR5cGUgRXh0ZW5zaW9uIFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LlR5cGVzLnBzMXhtbGANCg0KIyMgVG9vbHMNCg0KIyMjIE5ldy1QU01ERm9ybWF0VGFibGVEZWZpbml0aW9uDQoNClRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGFuIGlucHV0IG9iamVjdCBhbmQgZ2VuZXJhdGUgZm9ybWF0IHhtbCBmb3IgYW4gYXV0by1zaXplZCB0YWJsZS4NCg0KSXQgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IHRvIGdldCBzdGFydGVkIHdpdGggZm9ybWF0cy4NCg0KIyMjIEdldC1QU0ZUeXBlU2VyaWFsaXphdGlvbkRhdGENCg0KYGBgDQpDIyBXYXJuaW5nIQ0KVGhpcyBzZWN0aW9uIGlzIG9ubHkgaW50ZXJlc3QgaWYgeW91J3JlIHVzaW5nIEMjIHRvZ2V0aGVyIHdpdGggUG93ZXJTaGVsbC4NCmBgYA0KDQpUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyB0eXBlIGV4dGVuc2lvbiBYTUwgdGhhdCBhbGxvd3MgUG93ZXJTaGVsbCB0byBjb252ZXJ0IHR5cGVzIHdyaXR0ZW4gaW4gQyMgdG8gYmUgd3JpdHRlbiB0byBmaWxlIGFuZCByZXN0b3JlZCBmcm9tIGl0IHdpdGhvdXQgYmVpbmcgJ0Rlc2VyaWFsaXplZCcuIEFsc28gd29ya3MgZm9yIGpvYnMgb3IgcmVtb3RpbmcsIGlmIGJvdGggc2lkZXMgaGF2ZSB0aGUgYFBTRnJhbWV3b3JrYCBtb2R1bGUgYW5kIHR5cGUgZXh0ZW5zaW9uIGxvYWRlZC4NCg0KSW4gb3JkZXIgZm9yIGEgY2xhc3MgdG8gYmUgZWxpZ2libGUgZm9yIHRoaXMsIGl0IG5lZWRzIHRvIGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBydWxlczoNCg0KIC0gSGF2ZSB0aGUgYFtTZXJpYWxpemFibGVdYCBhdHRyaWJ1dGUNCiAtIEJlIHB1YmxpYw0KIC0gSGF2ZSBhbiBlbXB0eSBjb25zdHJ1Y3Rvcg0KIC0gQWxsb3cgYWxsIHB1YmxpYyBwcm9wZXJ0aWVzL2ZpZWxkcyB0byBiZSBzZXQgKGV2ZW4gaWYgc2V0dGluZyBpdCBkb2Vzbid0IGRvIGFueXRoaW5nKSB3aXRob3V0IHRocm93aW5nIGFuIGV4Y2VwdGlvbi4NCg0KYGBgDQpub24tcHVibGljIHByb3BlcnRpZXMgYW5kIGZpZWxkcyB3aWxsIGJlIGxvc3QgaW4gdGhpcyBwcm9jZXNzIQ0KYGBgAQkPAAAACRAAAAAGEQAAAAlyZWFkbWUubWQGEgAAAA14bWxccmVhZG1lLm1kCQYAAAAJFAAAAAkVAAAAAQwAAAALAAAABhYAAADoBTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi0xNiI/Pg0KPENvbmZpZ3VyYXRpb24+DQoJPFZpZXdEZWZpbml0aW9ucz4NCgkJPCEtLSBGb28uQmFyIC0tPg0KCQk8Vmlldz4NCgkJCTxOYW1lPkZvby5CYXI8L05hbWU+DQoJCQk8Vmlld1NlbGVjdGVkQnk+DQoJCQkJPFR5cGVOYW1lPkZvby5CYXI8L1R5cGVOYW1lPg0KCQkJPC9WaWV3U2VsZWN0ZWRCeT4NCgkJCTxUYWJsZUNvbnRyb2w+DQoJCQkJPEF1dG9TaXplLz4NCgkJCQk8VGFibGVIZWFkZXJzPg0KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPg0KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPg0KCQkJCTwvVGFibGVIZWFkZXJzPg0KCQkJCTxUYWJsZVJvd0VudHJpZXM+DQoJCQkJCTxUYWJsZVJvd0VudHJ5Pg0KCQkJCQkJPFRhYmxlQ29sdW1uSXRlbXM+DQoJCQkJCQkJPFRhYmxlQ29sdW1uSXRlbT4NCgkJCQkJCQkJPFByb3BlcnR5TmFtZT5Gb288L1Byb3BlcnR5TmFtZT4NCgkJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbT4NCgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJCQk8UHJvcGVydHlOYW1lPkJhcjwvUHJvcGVydHlOYW1lPg0KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW1zPg0KCQkJCQk8L1RhYmxlUm93RW50cnk+DQoJCQkJPC9UYWJsZVJvd0VudHJpZXM+DQoJCQk8L1RhYmxlQ29udHJvbD4NCgkJPC9WaWV3Pg0KCTwvVmlld0RlZmluaXRpb25zPg0KPC9Db25maWd1cmF0aW9uPgEJFwAAAAkYAAAABhkAAAAWw75uYW1lw74uRm9ybWF0LnBzMXhtbAYaAAAAGnhtbFzDvm5hbWXDvi5Gb3JtYXQucHMxeG1sCQYAAAAJHAAAAAkdAAAAAQ0AAAALAAAABh4AAADgBzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQo8VHlwZXM+DQogIDwhLS0gRm9vLkJhciAtLT4NCiAgPFR5cGU+DQogICAgPE5hbWU+RGVzZXJpYWxpemVkLkZvby5CYXI8L05hbWU+DQogICAgPE1lbWJlcnM+DQogICAgICA8TWVtYmVyU2V0Pg0KICAgICAgICA8TmFtZT5QU1N0YW5kYXJkTWVtYmVyczwvTmFtZT4NCiAgICAgICAgPE1lbWJlcnM+DQogICAgICAgICAgPE5vdGVQcm9wZXJ0eT4NCiAgICAgICAgICAgIDxOYW1lPg0KICAgICAgICAgICAgICBUYXJnZXRUeXBlRm9yRGVzZXJpYWxpemF0aW9uDQogICAgICAgICAgICA8L05hbWU+DQogICAgICAgICAgICA8VmFsdWU+DQogICAgICAgICAgICAgIEZvby5CYXINCiAgICAgICAgICAgIDwvVmFsdWU+DQogICAgICAgICAgPC9Ob3RlUHJvcGVydHk+DQogICAgICAgIDwvTWVtYmVycz4NCiAgICAgIDwvTWVtYmVyU2V0Pg0KICAgIDwvTWVtYmVycz4NCiAgPC9UeXBlPg0KICA8VHlwZT4NCiAgICA8TmFtZT5Gb28uQmFyPC9OYW1lPg0KICAgIDxNZW1iZXJzPg0KICAgICAgPENvZGVQcm9wZXJ0eSBJc0hpZGRlbj0idHJ1ZSI+DQogICAgICAgIDxOYW1lPlNlcmlhbGl6YXRpb25EYXRhPC9OYW1lPg0KICAgICAgICA8R2V0Q29kZVJlZmVyZW5jZT4NCiAgICAgICAgICA8VHlwZU5hbWU+UFNGcmFtZXdvcmsuU2VyaWFsaXphdGlvbi5TZXJpYWxpemF0aW9uVHlwZUNvbnZlcnRlcjwvVHlwZU5hbWU+DQogICAgICAgICAgPE1ldGhvZE5hbWU+R2V0U2VyaWFsaXphdGlvbkRhdGE8L01ldGhvZE5hbWU+DQogICAgICAgIDwvR2V0Q29kZVJlZmVyZW5jZT4NCiAgICAgIDwvQ29kZVByb3BlcnR5Pg0KICAgIDwvTWVtYmVycz4NCiAgICA8VHlwZUNvbnZlcnRlcj4NCiAgICAgIDxUeXBlTmFtZT5QU0ZyYW1ld29yay5TZXJpYWxpemF0aW9uLlNlcmlhbGl6YXRpb25UeXBlQ29udmVydGVyPC9UeXBlTmFtZT4NCiAgICA8L1R5cGVDb252ZXJ0ZXI+DQogIDwvVHlwZT4NCjwvVHlwZXM+AQkfAAAACSAAAAAGIQAAABXDvm5hbWXDvi5UeXBlcy5wczF4bWwGIgAAABl4bWxcw75uYW1lw74uVHlwZXMucHMxeG1sCQYAAAAJJAAAAAklAAAAAQ8AAAAHAAAACSYAAAABAAAAAQAAAAEQAAAABwAAAAkKAAAAAAAAAAAAAAABFAAAAAcAAAAJCgAAAAAAAAAAAAAAARUAAAAHAAAACQoAAAAAAAAAAAAAAAEXAAAABwAAAAkKAAAAAAAAAAAAAAABGAAAAAcAAAAJCgAAAAAAAAAAAAAAARwAAAAHAAAACSgAAAABAAAAAQAAAAEdAAAABwAAAAkKAAAAAAAAAAAAAAABHwAAAAcAAAAJCgAAAAAAAAAAAAAAASAAAAAHAAAACQoAAAAAAAAAAAAAAAEkAAAABwAAAAkqAAAAAQAAAAEAAAABJQAAAAcAAAAJCgAAAAAAAAAAAAAAESYAAAAEAAAABiwAAAAEbmFtZQ0DESgAAAAEAAAABi0AAAAEbmFtZQ0DESoAAAAEAAAABi4AAAAEbmFtZQ0DCw==</BA> </MS> </Obj> <Obj RefId="38"> <TN RefId="8"> <T>PSModuleDevelopment.Template.TemplateItemFile</T> <T>PSModuleDevelopment.Template.TemplateItemBase</T> <T>System.Object</T> </TN> <ToString>PSModuleDevelopment.Template.TemplateItemFile</ToString> <Props> <S N="Value"># Changelog_x000D__x000A_## 1.0.0 (þ!dynamicscript_603806!þ)_x000D__x000A_ - New: Some Stuff_x000D__x000A_ - Upd: Moar Stuff_x000D__x000A_ - Fix: Much Stuff</S> <B N="PlainText">true</B> <Obj N="ContentParameterFlat" RefId="39"> <TNRef RefId="2" /> <LST /> </Obj> <Obj N="ContentParameterScript" RefId="40"> <TNRef RefId="2" /> <LST> <S>dynamicscript_603806</S> </LST> </Obj> <S N="Name">changelog.md</S> <S N="RelativePath">changelog.md</S> <S N="Identifier">þ</S> <Obj N="FileSystemParameterFlat" RefId="41"> <TNRef RefId="2" /> <LST /> </Obj> <Obj N="FileSystemParameterScript" RefId="42"> <TNRef RefId="2" /> <LST /> </Obj> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYDAAAAbiMgQ2hhbmdlbG9nDQojIyAxLjAuMCAow74hZHluYW1pY3NjcmlwdF82MDM4MDYhw74pDQogLSBOZXc6IFNvbWUgU3R1ZmYNCiAtIFVwZDogTW9hciBTdHVmZg0KIC0gRml4OiBNdWNoIFN0dWZmAQkEAAAACQUAAAAGBgAAAAxjaGFuZ2Vsb2cubWQGBwAAAAxjaGFuZ2Vsb2cubWQGCAAAAALDvgkJAAAACQoAAAAEBAAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkLAAAAAAAAAAAAAAABBQAAAAQAAAAJDAAAAAEAAAABAAAAAQkAAAAEAAAACQsAAAAAAAAAAAAAAAEKAAAABAAAAAkLAAAAAAAAAAAAAAARCwAAAAAAAAARDAAAAAQAAAAGDgAAABRkeW5hbWljc2NyaXB0XzYwMzgwNg0DCw==</BA> </MS> </Obj> <Obj RefId="43"> <TNRef RefId="8" /> <ToString>PSModuleDevelopment.Template.TemplateItemFile</ToString> <Props> <S N="Value"># PSFModule guidance_x000D__x000A__x000D__x000A_This is a finished module layout optimized for implementing the PSFramework._x000D__x000A__x000D__x000A_If you don't care to deal with the details, this is what you need to do to get started seeing results:_x000D__x000A__x000D__x000A_ - Add the functions you want to publish to `/functions/`_x000D__x000A_ - Update the `FunctionsToExport` node in the module manifest (þnameþ.psd1). All functions you want to publish should be in a list._x000D__x000A_ - Add internal helper functions the user should not see to `/internal/functions/`_x000D__x000A_ _x000D__x000A_ ## Path Warning_x000D__x000A_ _x000D__x000A_ > If you want your module to be compatible with Linux and MacOS, keep in mind that those OS are case sensitive for paths and files._x000D__x000A_ _x000D__x000A_ `Import-ModuleFile` is preconfigured to resolve the path of the files specified, so it will reliably convert weird path notations the system can't handle._x000D__x000A_ Content imported through that command thus need not mind the path separator._x000D__x000A_ If you want to make sure your code too will survive OS-specific path notations, get used to using `Resolve-path` or the more powerful `Resolve-PSFPath`.</S> <B N="PlainText">true</B> <Obj N="ContentParameterFlat" RefId="44"> <TNRef RefId="2" /> <LST> <S>name</S> </LST> </Obj> <Obj N="ContentParameterScript" RefId="45"> <TNRef RefId="2" /> <LST /> </Obj> <S N="Name">readme.md</S> <S N="RelativePath">readme.md</S> <S N="Identifier">þ</S> <Obj N="FileSystemParameterFlat" RefId="46"> <TNRef RefId="2" /> <LST /> </Obj> <Obj N="FileSystemParameterScript" RefId="47"> <TNRef RefId="2" /> <LST /> </Obj> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYDAAAAjggjIFBTRk1vZHVsZSBndWlkYW5jZQ0KDQpUaGlzIGlzIGEgZmluaXNoZWQgbW9kdWxlIGxheW91dCBvcHRpbWl6ZWQgZm9yIGltcGxlbWVudGluZyB0aGUgUFNGcmFtZXdvcmsuDQoNCklmIHlvdSBkb24ndCBjYXJlIHRvIGRlYWwgd2l0aCB0aGUgZGV0YWlscywgdGhpcyBpcyB3aGF0IHlvdSBuZWVkIHRvIGRvIHRvIGdldCBzdGFydGVkIHNlZWluZyByZXN1bHRzOg0KDQogLSBBZGQgdGhlIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHRvIGAvZnVuY3Rpb25zL2ANCiAtIFVwZGF0ZSB0aGUgYEZ1bmN0aW9uc1RvRXhwb3J0YCBub2RlIGluIHRoZSBtb2R1bGUgbWFuaWZlc3QgKMO+bmFtZcO+LnBzZDEpLiBBbGwgZnVuY3Rpb25zIHlvdSB3YW50IHRvIHB1Ymxpc2ggc2hvdWxkIGJlIGluIGEgbGlzdC4NCiAtIEFkZCBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRoZSB1c2VyIHNob3VsZCBub3Qgc2VlIHRvIGAvaW50ZXJuYWwvZnVuY3Rpb25zL2ANCiANCiAjIyBQYXRoIFdhcm5pbmcNCiANCiA+IElmIHlvdSB3YW50IHlvdXIgbW9kdWxlIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBMaW51eCBhbmQgTWFjT1MsIGtlZXAgaW4gbWluZCB0aGF0IHRob3NlIE9TIGFyZSBjYXNlIHNlbnNpdGl2ZSBmb3IgcGF0aHMgYW5kIGZpbGVzLg0KIA0KIGBJbXBvcnQtTW9kdWxlRmlsZWAgaXMgcHJlY29uZmlndXJlZCB0byByZXNvbHZlIHRoZSBwYXRoIG9mIHRoZSBmaWxlcyBzcGVjaWZpZWQsIHNvIGl0IHdpbGwgcmVsaWFibHkgY29udmVydCB3ZWlyZCBwYXRoIG5vdGF0aW9ucyB0aGUgc3lzdGVtIGNhbid0IGhhbmRsZS4NCiBDb250ZW50IGltcG9ydGVkIHRocm91Z2ggdGhhdCBjb21tYW5kIHRodXMgbmVlZCBub3QgbWluZCB0aGUgcGF0aCBzZXBhcmF0b3IuDQogSWYgeW91IHdhbnQgdG8gbWFrZSBzdXJlIHlvdXIgY29kZSB0b28gd2lsbCBzdXJ2aXZlIE9TLXNwZWNpZmljIHBhdGggbm90YXRpb25zLCBnZXQgdXNlZCB0byB1c2luZyBgUmVzb2x2ZS1wYXRoYCBvciB0aGUgbW9yZSBwb3dlcmZ1bCBgUmVzb2x2ZS1QU0ZQYXRoYC4BCQQAAAAJBQAAAAYGAAAACXJlYWRtZS5tZAYHAAAACXJlYWRtZS5tZAYIAAAAAsO+CQkAAAAJCgAAAAQEAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQsAAAABAAAAAQAAAAEFAAAABAAAAAkMAAAAAAAAAAAAAAABCQAAAAQAAAAJDAAAAAAAAAAAAAAAAQoAAAAEAAAACQwAAAAAAAAAAAAAABELAAAABAAAAAYNAAAABG5hbWUNAxEMAAAAAAAAAAs=</BA> </MS> </Obj> <Obj RefId="48"> <TNRef RefId="8" /> <ToString>PSModuleDevelopment.Template.TemplateItemFile</ToString> <Props> <S N="Value">@{_x000D__x000A__x0009_# Script module or binary module file associated with this manifest_x000D__x000A__x0009_RootModule = 'þnameþ.psm1'_x000D__x000A__x0009__x000D__x000A__x0009_# Version number of this module._x000D__x000A__x0009_ModuleVersion = '1.0.0'_x000D__x000A__x0009__x000D__x000A__x0009_# ID used to uniquely identify this module_x000D__x000A__x0009_GUID = 'þ!guid!þ'_x000D__x000A__x0009__x000D__x000A__x0009_# Author of this module_x000D__x000A__x0009_Author = 'þauthorþ'_x000D__x000A__x0009__x000D__x000A__x0009_# Company or vendor of this module_x000D__x000A__x0009_CompanyName = 'þcompanyþ'_x000D__x000A__x0009__x000D__x000A__x0009_# Copyright statement for this module_x000D__x000A__x0009_Copyright = 'Copyright (c) þ!year!þ þauthorþ'_x000D__x000A__x0009__x000D__x000A__x0009_# Description of the functionality provided by this module_x000D__x000A__x0009_Description = 'þdescriptionþ'_x000D__x000A__x0009__x000D__x000A__x0009_# Minimum version of the Windows PowerShell engine required by this module_x000D__x000A__x0009_PowerShellVersion = '5.0'_x000D__x000A__x0009__x000D__x000A__x0009_# Modules that must be imported into the global environment prior to importing_x000D__x000A__x0009_# this module_x000D__x000A__x0009_RequiredModules = @(_x000D__x000A__x0009__x0009_@{ ModuleName='PSFramework'; ModuleVersion='þ!psframework!þ' }_x000D__x000A__x0009_)_x000D__x000A__x0009__x000D__x000A__x0009_# Assemblies that must be loaded prior to importing this module_x000D__x000A__x0009_# RequiredAssemblies = @('bin\þnameþ.dll')_x000D__x000A__x0009__x000D__x000A__x0009_# Type files (.ps1xml) to be loaded when importing this module_x000D__x000A__x0009_# TypesToProcess = @('xml\þnameþ.Types.ps1xml')_x000D__x000A__x0009__x000D__x000A__x0009_# Format files (.ps1xml) to be loaded when importing this module_x000D__x000A__x0009_# FormatsToProcess = @('xml\þnameþ.Format.ps1xml')_x000D__x000A__x0009__x000D__x000A__x0009_# Functions to export from this module_x000D__x000A__x0009_FunctionsToExport = ''_x000D__x000A__x0009__x000D__x000A__x0009_# Cmdlets to export from this module_x000D__x000A__x0009_CmdletsToExport = ''_x000D__x000A__x0009__x000D__x000A__x0009_# Variables to export from this module_x000D__x000A__x0009_VariablesToExport = ''_x000D__x000A__x0009__x000D__x000A__x0009_# Aliases to export from this module_x000D__x000A__x0009_AliasesToExport = ''_x000D__x000A__x0009__x000D__x000A__x0009_# List of all modules packaged with this module_x000D__x000A__x0009_ModuleList = @()_x000D__x000A__x0009__x000D__x000A__x0009_# List of all files packaged with this module_x000D__x000A__x0009_FileList = @()_x000D__x000A__x0009__x000D__x000A__x0009_# Private data to pass to the module specified in ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell._x000D__x000A__x0009_PrivateData = @{_x000D__x000A__x0009__x0009__x000D__x000A__x0009__x0009_#Support for PowerShellGet galleries._x000D__x000A__x0009__x0009_PSData = @{_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# Tags applied to this module. These help with module discovery in online galleries._x000D__x000A__x0009__x0009__x0009_# Tags = @()_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# A URL to the license for this module._x000D__x000A__x0009__x0009__x0009_# LicenseUri = ''_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# A URL to the main website for this project._x000D__x000A__x0009__x0009__x0009_# ProjectUri = ''_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# A URL to an icon representing this module._x000D__x000A__x0009__x0009__x0009_# IconUri = ''_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# ReleaseNotes of this module_x000D__x000A__x0009__x0009__x0009_# ReleaseNotes = ''_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009_} # End of PSData hashtable_x000D__x000A__x0009__x0009__x000D__x000A__x0009_} # End of PrivateData hashtable_x000D__x000A_}</S> <B N="PlainText">true</B> <Obj N="ContentParameterFlat" RefId="49"> <TNRef RefId="2" /> <LST> <S>name</S> <S>author</S> <S>company</S> <S>description</S> </LST> </Obj> <Obj N="ContentParameterScript" RefId="50"> <TNRef RefId="2" /> <LST> <S>guid</S> <S>year</S> <S>psframework</S> </LST> </Obj> <S N="Name">þnameþ.psd1</S> <S N="RelativePath">þnameþ.psd1</S> <S N="Identifier">þ</S> <Obj N="FileSystemParameterFlat" RefId="51"> <TNRef RefId="2" /> <LST> <S>name</S> </LST> </Obj> <Obj N="FileSystemParameterScript" RefId="52"> <TNRef RefId="2" /> <LST /> </Obj> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYDAAAAphJAew0KCSMgU2NyaXB0IG1vZHVsZSBvciBiaW5hcnkgbW9kdWxlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFuaWZlc3QNCglSb290TW9kdWxlID0gJ8O+bmFtZcO+LnBzbTEnDQoJDQoJIyBWZXJzaW9uIG51bWJlciBvZiB0aGlzIG1vZHVsZS4NCglNb2R1bGVWZXJzaW9uID0gJzEuMC4wJw0KCQ0KCSMgSUQgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIG1vZHVsZQ0KCUdVSUQgPSAnw74hZ3VpZCHDvicNCgkNCgkjIEF1dGhvciBvZiB0aGlzIG1vZHVsZQ0KCUF1dGhvciA9ICfDvmF1dGhvcsO+Jw0KCQ0KCSMgQ29tcGFueSBvciB2ZW5kb3Igb2YgdGhpcyBtb2R1bGUNCglDb21wYW55TmFtZSA9ICfDvmNvbXBhbnnDvicNCgkNCgkjIENvcHlyaWdodCBzdGF0ZW1lbnQgZm9yIHRoaXMgbW9kdWxlDQoJQ29weXJpZ2h0ID0gJ0NvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+Jw0KCQ0KCSMgRGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUNCglEZXNjcmlwdGlvbiA9ICfDvmRlc2NyaXB0aW9uw74nDQoJDQoJIyBNaW5pbXVtIHZlcnNpb24gb2YgdGhlIFdpbmRvd3MgUG93ZXJTaGVsbCBlbmdpbmUgcmVxdWlyZWQgYnkgdGhpcyBtb2R1bGUNCglQb3dlclNoZWxsVmVyc2lvbiA9ICc1LjAnDQoJDQoJIyBNb2R1bGVzIHRoYXQgbXVzdCBiZSBpbXBvcnRlZCBpbnRvIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgcHJpb3IgdG8gaW1wb3J0aW5nDQoJIyB0aGlzIG1vZHVsZQ0KCVJlcXVpcmVkTW9kdWxlcyA9IEAoDQoJCUB7IE1vZHVsZU5hbWU9J1BTRnJhbWV3b3JrJzsgTW9kdWxlVmVyc2lvbj0nw74hcHNmcmFtZXdvcmshw74nIH0NCgkpDQoJDQoJIyBBc3NlbWJsaWVzIHRoYXQgbXVzdCBiZSBsb2FkZWQgcHJpb3IgdG8gaW1wb3J0aW5nIHRoaXMgbW9kdWxlDQoJIyBSZXF1aXJlZEFzc2VtYmxpZXMgPSBAKCdiaW5cw75uYW1lw74uZGxsJykNCgkNCgkjIFR5cGUgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQ0KCSMgVHlwZXNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uVHlwZXMucHMxeG1sJykNCgkNCgkjIEZvcm1hdCBmaWxlcyAoLnBzMXhtbCkgdG8gYmUgbG9hZGVkIHdoZW4gaW1wb3J0aW5nIHRoaXMgbW9kdWxlDQoJIyBGb3JtYXRzVG9Qcm9jZXNzID0gQCgneG1sXMO+bmFtZcO+LkZvcm1hdC5wczF4bWwnKQ0KCQ0KCSMgRnVuY3Rpb25zIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlDQoJRnVuY3Rpb25zVG9FeHBvcnQgPSAnJw0KCQ0KCSMgQ21kbGV0cyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCUNtZGxldHNUb0V4cG9ydCA9ICcnDQoJDQoJIyBWYXJpYWJsZXMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglWYXJpYWJsZXNUb0V4cG9ydCA9ICcnDQoJDQoJIyBBbGlhc2VzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlDQoJQWxpYXNlc1RvRXhwb3J0ID0gJycNCgkNCgkjIExpc3Qgb2YgYWxsIG1vZHVsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQ0KCU1vZHVsZUxpc3QgPSBAKCkNCgkNCgkjIExpc3Qgb2YgYWxsIGZpbGVzIHBhY2thZ2VkIHdpdGggdGhpcyBtb2R1bGUNCglGaWxlTGlzdCA9IEAoKQ0KCQ0KCSMgUHJpdmF0ZSBkYXRhIHRvIHBhc3MgdG8gdGhlIG1vZHVsZSBzcGVjaWZpZWQgaW4gTW9kdWxlVG9Qcm9jZXNzLiBUaGlzIG1heSBhbHNvIGNvbnRhaW4gYSBQU0RhdGEgaGFzaHRhYmxlIHdpdGggYWRkaXRpb25hbCBtb2R1bGUgbWV0YWRhdGEgdXNlZCBieSBQb3dlclNoZWxsLg0KCVByaXZhdGVEYXRhID0gQHsNCgkJDQoJCSNTdXBwb3J0IGZvciBQb3dlclNoZWxsR2V0IGdhbGxlcmllcy4NCgkJUFNEYXRhID0gQHsNCgkJCQ0KCQkJIyBUYWdzIGFwcGxpZWQgdG8gdGhpcyBtb2R1bGUuIFRoZXNlIGhlbHAgd2l0aCBtb2R1bGUgZGlzY292ZXJ5IGluIG9ubGluZSBnYWxsZXJpZXMuDQoJCQkjIFRhZ3MgPSBAKCkNCgkJCQ0KCQkJIyBBIFVSTCB0byB0aGUgbGljZW5zZSBmb3IgdGhpcyBtb2R1bGUuDQoJCQkjIExpY2Vuc2VVcmkgPSAnJw0KCQkJDQoJCQkjIEEgVVJMIHRvIHRoZSBtYWluIHdlYnNpdGUgZm9yIHRoaXMgcHJvamVjdC4NCgkJCSMgUHJvamVjdFVyaSA9ICcnDQoJCQkNCgkJCSMgQSBVUkwgdG8gYW4gaWNvbiByZXByZXNlbnRpbmcgdGhpcyBtb2R1bGUuDQoJCQkjIEljb25VcmkgPSAnJw0KCQkJDQoJCQkjIFJlbGVhc2VOb3RlcyBvZiB0aGlzIG1vZHVsZQ0KCQkJIyBSZWxlYXNlTm90ZXMgPSAnJw0KCQkJDQoJCX0gIyBFbmQgb2YgUFNEYXRhIGhhc2h0YWJsZQ0KCQkNCgl9ICMgRW5kIG9mIFByaXZhdGVEYXRhIGhhc2h0YWJsZQ0KfQEJBAAAAAkFAAAABgYAAAANw75uYW1lw74ucHNkMQYHAAAADcO+bmFtZcO+LnBzZDEGCAAAAALDvgkJAAAACQoAAAAEBAAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkLAAAABAAAAAQAAAABBQAAAAQAAAAJDAAAAAMAAAADAAAAAQkAAAAEAAAACQ0AAAABAAAAAQAAAAEKAAAABAAAAAkOAAAAAAAAAAAAAAARCwAAAAQAAAAGDwAAAARuYW1lBhAAAAAGYXV0aG9yBhEAAAAHY29tcGFueQYSAAAAC2Rlc2NyaXB0aW9uEQwAAAAEAAAABhMAAAAEZ3VpZAYUAAAABHllYXIGFQAAAAtwc2ZyYW1ld29yawoRDQAAAAQAAAAGFgAAAARuYW1lDQMRDgAAAAAAAAAL</BA> </MS> </Obj> <Obj RefId="53"> <TNRef RefId="8" /> <ToString>PSModuleDevelopment.Template.TemplateItemFile</ToString> <Props> <S N="Value">$script:ModuleRoot = $PSScriptRoot_x000D__x000A_$script:ModuleVersion = (Import-PowerShellDataFile -Path "$($script:ModuleRoot)\þnameþ.psd1").ModuleVersion_x000D__x000A__x000D__x000A_# Detect whether at some level dotsourcing was enforced_x000D__x000A_$script:doDotSource = Get-PSFConfigValue -FullName þnameþ.Import.DoDotSource -Fallback $false_x000D__x000A_if ($þnameþ_dotsourcemodule) { $script:doDotSource = $true }_x000D__x000A__x000D__x000A_<#_x000D__x000A_Note on Resolve-Path:_x000D__x000A_All paths are sent through Resolve-Path/Resolve-PSFPath in order to convert them to the correct path separator._x000D__x000A_This allows ignoring path separators throughout the import sequence, which could otherwise cause trouble depending on OS._x000D__x000A_Resolve-Path can only be used for paths that already exist, Resolve-PSFPath can accept that the last leaf my not exist._x000D__x000A_This is important when testing for paths._x000D__x000A_#>_x000D__x000A__x000D__x000A_# Detect whether at some level loading individual module files, rather than the compiled module was enforced_x000D__x000A_$importIndividualFiles = Get-PSFConfigValue -FullName þnameþ.Import.IndividualFiles -Fallback $false_x000D__x000A_if ($þnameþ_importIndividualFiles) { $importIndividualFiles = $true }_x000D__x000A_if (Test-Path (Resolve-PSFPath -Path "$($script:ModuleRoot)\..\.git" -SingleItem -NewChild)) { $importIndividualFiles = $true }_x000D__x000A_if ("<was not compiled>" -eq '<was not compiled>') { $importIndividualFiles = $true }_x000D__x000A__x0009__x000D__x000A_function Import-ModuleFile_x000D__x000A_{_x000D__x000A__x0009_<#_x000D__x000A__x0009__x0009_.SYNOPSIS_x000D__x000A__x0009__x0009__x0009_Loads files into the module on module import._x000D__x000A__x0009__x0009__x000D__x000A__x0009__x0009_.DESCRIPTION_x000D__x000A__x0009__x0009__x0009_This helper function is used during module initialization._x000D__x000A__x0009__x0009__x0009_It should always be dotsourced itself, in order to proper function._x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_This provides a central location to react to files being imported, if later desired_x000D__x000A__x0009__x0009__x000D__x000A__x0009__x0009_.PARAMETER Path_x000D__x000A__x0009__x0009__x0009_The path to the file to load_x000D__x000A__x0009__x0009__x000D__x000A__x0009__x0009_.EXAMPLE_x000D__x000A__x0009__x0009__x0009_PS C:\> . Import-ModuleFile -File $function.FullName_x000D__x000A__x0009__x000D__x000A__x0009__x0009__x0009_Imports the file stored in $function according to import policy_x000D__x000A__x0009_#>_x000D__x000A__x0009_[CmdletBinding()]_x000D__x000A__x0009_Param (_x000D__x000A__x0009__x0009_[string]_x000D__x000A__x0009__x0009_$Path_x000D__x000A__x0009_)_x000D__x000A__x0009__x000D__x000A__x0009_$resolvedPath = $ExecutionContext.SessionState.Path.GetResolvedPSPathFromPSPath($Path).ProviderPath_x000D__x000A__x0009_if ($doDotSource) { . $resolvedPath }_x000D__x000A__x0009_else { $ExecutionContext.InvokeCommand.InvokeScript($false, ([scriptblock]::Create([io.file]::ReadAllText($resolvedPath))), $null, $null) }_x000D__x000A_}_x000D__x000A__x000D__x000A_#region Load individual files_x000D__x000A_if ($importIndividualFiles)_x000D__x000A_{_x000D__x000A__x0009_# Execute Preimport actions_x000D__x000A__x0009_foreach ($path in (& "$ModuleRoot\internal\scripts\preimport.ps1")) {_x000D__x000A__x0009__x0009_. Import-ModuleFile -Path $path_x000D__x000A__x0009_}_x000D__x000A__x0009__x000D__x000A__x0009_# Import all internal functions_x000D__x000A__x0009_foreach ($function in (Get-ChildItem "$ModuleRoot\internal\functions" -Filter "*.ps1" -Recurse -ErrorAction Ignore))_x000D__x000A__x0009_{_x000D__x000A__x0009__x0009_. Import-ModuleFile -Path $function.FullName_x000D__x000A__x0009_}_x000D__x000A__x0009__x000D__x000A__x0009_# Import all public functions_x000D__x000A__x0009_foreach ($function in (Get-ChildItem "$ModuleRoot\functions" -Filter "*.ps1" -Recurse -ErrorAction Ignore))_x000D__x000A__x0009_{_x000D__x000A__x0009__x0009_. Import-ModuleFile -Path $function.FullName_x000D__x000A__x0009_}_x000D__x000A__x0009__x000D__x000A__x0009_# Execute Postimport actions_x000D__x000A__x0009_foreach ($path in (& "$ModuleRoot\internal\scripts\postimport.ps1")) {_x000D__x000A__x0009__x0009_. Import-ModuleFile -Path $path_x000D__x000A__x0009_}_x000D__x000A__x0009__x000D__x000A__x0009_# End it here, do not load compiled code below_x000D__x000A__x0009_return_x000D__x000A_}_x000D__x000A_#endregion Load individual files_x000D__x000A__x000D__x000A_#region Load compiled code_x000D__x000A_"<compile code into here>"_x000D__x000A_#endregion Load compiled code</S> <B N="PlainText">true</B> <Obj N="ContentParameterFlat" RefId="54"> <TNRef RefId="2" /> <LST> <S>name</S> </LST> </Obj> <Obj N="ContentParameterScript" RefId="55"> <TNRef RefId="2" /> <LST /> </Obj> <S N="Name">þnameþ.psm1</S> <S N="RelativePath">þnameþ.psm1</S> <S N="Identifier">þ</S> <Obj N="FileSystemParameterFlat" RefId="56"> <TNRef RefId="2" /> <LST> <S>name</S> </LST> </Obj> <Obj N="FileSystemParameterScript" RefId="57"> <TNRef RefId="2" /> <LST /> </Obj> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYDAAAA0xgkc2NyaXB0Ok1vZHVsZVJvb3QgPSAkUFNTY3JpcHRSb290DQokc2NyaXB0Ok1vZHVsZVZlcnNpb24gPSAoSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXMO+bmFtZcO+LnBzZDEiKS5Nb2R1bGVWZXJzaW9uDQoNCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBkb3Rzb3VyY2luZyB3YXMgZW5mb3JjZWQNCiRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5Eb0RvdFNvdXJjZSAtRmFsbGJhY2sgJGZhbHNlDQppZiAoJMO+bmFtZcO+X2RvdHNvdXJjZW1vZHVsZSkgeyAkc2NyaXB0OmRvRG90U291cmNlID0gJHRydWUgfQ0KDQo8Iw0KTm90ZSBvbiBSZXNvbHZlLVBhdGg6DQpBbGwgcGF0aHMgYXJlIHNlbnQgdGhyb3VnaCBSZXNvbHZlLVBhdGgvUmVzb2x2ZS1QU0ZQYXRoIGluIG9yZGVyIHRvIGNvbnZlcnQgdGhlbSB0byB0aGUgY29ycmVjdCBwYXRoIHNlcGFyYXRvci4NClRoaXMgYWxsb3dzIGlnbm9yaW5nIHBhdGggc2VwYXJhdG9ycyB0aHJvdWdob3V0IHRoZSBpbXBvcnQgc2VxdWVuY2UsIHdoaWNoIGNvdWxkIG90aGVyd2lzZSBjYXVzZSB0cm91YmxlIGRlcGVuZGluZyBvbiBPUy4NClJlc29sdmUtUGF0aCBjYW4gb25seSBiZSB1c2VkIGZvciBwYXRocyB0aGF0IGFscmVhZHkgZXhpc3QsIFJlc29sdmUtUFNGUGF0aCBjYW4gYWNjZXB0IHRoYXQgdGhlIGxhc3QgbGVhZiBteSBub3QgZXhpc3QuDQpUaGlzIGlzIGltcG9ydGFudCB3aGVuIHRlc3RpbmcgZm9yIHBhdGhzLg0KIz4NCg0KIyBEZXRlY3Qgd2hldGhlciBhdCBzb21lIGxldmVsIGxvYWRpbmcgaW5kaXZpZHVhbCBtb2R1bGUgZmlsZXMsIHJhdGhlciB0aGFuIHRoZSBjb21waWxlZCBtb2R1bGUgd2FzIGVuZm9yY2VkDQokaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuSW5kaXZpZHVhbEZpbGVzIC1GYWxsYmFjayAkZmFsc2UNCmlmICgkw75uYW1lw75faW1wb3J0SW5kaXZpZHVhbEZpbGVzKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQppZiAoVGVzdC1QYXRoIChSZXNvbHZlLVBTRlBhdGggLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVwuLlwuZ2l0IiAtU2luZ2xlSXRlbSAtTmV3Q2hpbGQpKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQppZiAoIjx3YXMgbm90IGNvbXBpbGVkPiIgLWVxICc8d2FzIG5vdCBjb21waWxlZD4nKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQoJDQpmdW5jdGlvbiBJbXBvcnQtTW9kdWxlRmlsZQ0Kew0KCTwjDQoJCS5TWU5PUFNJUw0KCQkJTG9hZHMgZmlsZXMgaW50byB0aGUgbW9kdWxlIG9uIG1vZHVsZSBpbXBvcnQuDQoJCQ0KCQkuREVTQ1JJUFRJT04NCgkJCVRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4NCgkJCUl0IHNob3VsZCBhbHdheXMgYmUgZG90c291cmNlZCBpdHNlbGYsIGluIG9yZGVyIHRvIHByb3BlciBmdW5jdGlvbi4NCgkJCQ0KCQkJVGhpcyBwcm92aWRlcyBhIGNlbnRyYWwgbG9jYXRpb24gdG8gcmVhY3QgdG8gZmlsZXMgYmVpbmcgaW1wb3J0ZWQsIGlmIGxhdGVyIGRlc2lyZWQNCgkJDQoJCS5QQVJBTUVURVIgUGF0aA0KCQkJVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gbG9hZA0KCQkNCgkJLkVYQU1QTEUNCgkJCVBTIEM6XD4gLiBJbXBvcnQtTW9kdWxlRmlsZSAtRmlsZSAkZnVuY3Rpb24uRnVsbE5hbWUNCgkNCgkJCUltcG9ydHMgdGhlIGZpbGUgc3RvcmVkIGluICRmdW5jdGlvbiBhY2NvcmRpbmcgdG8gaW1wb3J0IHBvbGljeQ0KCSM+DQoJW0NtZGxldEJpbmRpbmcoKV0NCglQYXJhbSAoDQoJCVtzdHJpbmddDQoJCSRQYXRoDQoJKQ0KCQ0KCSRyZXNvbHZlZFBhdGggPSAkRXhlY3V0aW9uQ29udGV4dC5TZXNzaW9uU3RhdGUuUGF0aC5HZXRSZXNvbHZlZFBTUGF0aEZyb21QU1BhdGgoJFBhdGgpLlByb3ZpZGVyUGF0aA0KCWlmICgkZG9Eb3RTb3VyY2UpIHsgLiAkcmVzb2x2ZWRQYXRoIH0NCgllbHNlIHsgJEV4ZWN1dGlvbkNvbnRleHQuSW52b2tlQ29tbWFuZC5JbnZva2VTY3JpcHQoJGZhbHNlLCAoW3NjcmlwdGJsb2NrXTo6Q3JlYXRlKFtpby5maWxlXTo6UmVhZEFsbFRleHQoJHJlc29sdmVkUGF0aCkpKSwgJG51bGwsICRudWxsKSB9DQp9DQoNCiNyZWdpb24gTG9hZCBpbmRpdmlkdWFsIGZpbGVzDQppZiAoJGltcG9ydEluZGl2aWR1YWxGaWxlcykNCnsNCgkjIEV4ZWN1dGUgUHJlaW1wb3J0IGFjdGlvbnMNCglmb3JlYWNoICgkcGF0aCBpbiAoJiAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xwcmVpbXBvcnQucHMxIikpIHsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkcGF0aA0KCX0NCgkNCgkjIEltcG9ydCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zDQoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxmdW5jdGlvbnMiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkNCgl7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lDQoJfQ0KCQ0KCSMgSW1wb3J0IGFsbCBwdWJsaWMgZnVuY3Rpb25zDQoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkNCgl7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lDQoJfQ0KCQ0KCSMgRXhlY3V0ZSBQb3N0aW1wb3J0IGFjdGlvbnMNCglmb3JlYWNoICgkcGF0aCBpbiAoJiAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xwb3N0aW1wb3J0LnBzMSIpKSB7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJHBhdGgNCgl9DQoJDQoJIyBFbmQgaXQgaGVyZSwgZG8gbm90IGxvYWQgY29tcGlsZWQgY29kZSBiZWxvdw0KCXJldHVybg0KfQ0KI2VuZHJlZ2lvbiBMb2FkIGluZGl2aWR1YWwgZmlsZXMNCg0KI3JlZ2lvbiBMb2FkIGNvbXBpbGVkIGNvZGUNCiI8Y29tcGlsZSBjb2RlIGludG8gaGVyZT4iDQojZW5kcmVnaW9uIExvYWQgY29tcGlsZWQgY29kZQEJBAAAAAkFAAAABgYAAAANw75uYW1lw74ucHNtMQYHAAAADcO+bmFtZcO+LnBzbTEGCAAAAALDvgkJAAAACQoAAAAEBAAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkLAAAAAQAAAAEAAAABBQAAAAQAAAAJDAAAAAAAAAAAAAAAAQkAAAAEAAAACQ0AAAABAAAAAQAAAAEKAAAABAAAAAkMAAAAAAAAAAAAAAARCwAAAAQAAAAGDwAAAARuYW1lDQMRDAAAAAAAAAARDQAAAAQAAAAGEAAAAARuYW1lDQML</BA> </MS> </Obj> </LST> </Obj> <I32 N="Generation">1</I32> </Props> <MS> <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGUMAAAABE5hbWUEVHlwZQdWZXJzaW9uC0Rlc2NyaXB0aW9uBkF1dGhvcglDcmVhdGVkT24EVGFncwpQYXJhbWV0ZXJzB1NjcmlwdHMLUGFyYW1ldGVyczIIQ2hpbGRyZW4KR2VuZXJhdGlvbgEEAwEBAAMDAwMDAClQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlVHlwZQIAAAAOU3lzdGVtLlZlcnNpb24Nf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXYACU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdCwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXYgCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlci5QYXJhbWV0ZXJCYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQgCAAAABgMAAAAJUFNGTW9kdWxlBfz///8pUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZVR5cGUBAAAAB3ZhbHVlX18ACAIAAAABAAAACQUAAAAGBgAAACpQb3dlclNoZWxsIEZyYW1ld29yayBiYXNlZCBtb2R1bGUgc2NhZmZvbGQGBwAAABJGcmllZHJpY2ggV2Vpbm1hbm4AgDD6aWHbiAkIAAAACQkAAAAJCgAAAAkLAAAACQwAAAABAAAABAUAAAAOU3lzdGVtLlZlcnNpb24EAAAABl9NYWpvcgZfTWlub3IGX0J1aWxkCV9SZXZpc2lvbgAAAAAICAgIAQAAAAEAAAACAAAAAAAAAAQIAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQ0AAAACAAAAAAAAAAEJAAAACAAAAAkOAAAABAAAAAQAAAAECgAAAIACU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdCwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQQAAAAHVmVyc2lvbghDb21wYXJlcghIYXNoU2l6ZQ1LZXlWYWx1ZVBhaXJzAAMAAwgWU3lzdGVtLk9yZGluYWxDb21wYXJlcgiEAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdCwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXVtdBwAAAAkPAAAABwAAAAkQAAAABAsAAACIAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkRpY3Rpb25hcnlgMltbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXIuUGFyYW1ldGVyQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAHVmVyc2lvbghDb21wYXJlcghIYXNoU2l6ZQADAAgWU3lzdGVtLk9yZGluYWxDb21wYXJlcggAAAAACQ8AAAAAAAAABAwAAACeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24EAAAvUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlW10CAAAACAgJEgAAAAoAAAAKAAAAEQ0AAAACAAAABhMAAAAGbW9kdWxlBhQAAAALcHNmcmFtZXdvcmsRDgAAAAQAAAAGFQAAAARuYW1lBhYAAAAGYXV0aG9yBhcAAAAHY29tcGFueQYYAAAAC2Rlc2NyaXB0aW9uBA8AAAAWU3lzdGVtLk9yZGluYWxDb21wYXJlcgEAAAALX2lnbm9yZUNhc2UAAQEHEAAAAAABAAAABwAAAAOCAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdCwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQTn////ggJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0CAAAAA2tleQV2YWx1ZQEELFBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0AgAAAAYaAAAADHBlc3RlcmNvbmZpZwkbAAAAAeT////n////Bh0AAAALcHNmcmFtZXdvcmsJHgAAAAHh////5////wYgAAAABHllYXIJIQAAAAHe////5////wYjAAAABGRhdGUJJAAAAAHb////5////wYmAAAACnRlc3Rmb2xkZXIJJwAAAAHY////5////wYpAAAABGd1aWQJKgAAAAHV////5////wYsAAAAFGR5bmFtaWNzY3JpcHRfNjAzODA2CS0AAAAHEgAAAAABAAAAEAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkuAAAACS8AAAAJMAAAAAkxAAAACTIAAAAJMwAAAAk0AAAACTUAAAAJNgAAAAk3AAAADQYMOAAAAF9TeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLCBWZXJzaW9uPTMuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQUbAAAALFBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0AgAAAAROYW1lC1NjcmlwdEJsb2NrAQQ7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXI4AAAAAgAAAAkaAAAACToAAAABHgAAABsAAAAJHQAAAAk8AAAAASEAAAAbAAAACSAAAAAJPgAAAAEkAAAAGwAAAAkjAAAACUAAAAABJwAAABsAAAAJJgAAAAlCAAAAASoAAAAbAAAACSkAAAAJRAAAAAEtAAAAGwAAAAksAAAACUYAAAAFLgAAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZvbGRlcgYAAAAIQ2hpbGRyZW4ETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AwEBAQMDngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0CAAAACUcAAAAGSAAAAANiaW4GSQAAAANiaW4GSgAAAALDvglLAAAACUwAAAABLwAAAC4AAAAJTQAAAAZOAAAABWVuLXVzBk8AAAAFZW4tdXMJSgAAAAlRAAAACVIAAAABMAAAAC4AAAAJUwAAAAZUAAAACWZ1bmN0aW9ucwZVAAAACWZ1bmN0aW9ucwlKAAAACVcAAAAJWAAAAAExAAAALgAAAAlZAAAABloAAAAIaW50ZXJuYWwGWwAAAAhpbnRlcm5hbAlKAAAACV0AAAAJXgAAAAEyAAAALgAAAAlfAAAABmAAAAAFdGVzdHMGYQAAAAV0ZXN0cwlKAAAACWMAAAAJZAAAAAEzAAAALgAAAAllAAAABmYAAAADeG1sBmcAAAADeG1sCUoAAAAJaQAAAAlqAAAABTQAAAAtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1GaWxlCQAAAAVWYWx1ZQlQbGFpblRleHQUQ29udGVudFBhcmFtZXRlckZsYXQWQ29udGVudFBhcmFtZXRlclNjcmlwdAROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQBAAMDAQEBAwMBf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0CAAAABmsAAABuIyBDaGFuZ2Vsb2cNCiMjIDEuMC4wICjDviFkeW5hbWljc2NyaXB0XzYwMzgwNiHDvikNCiAtIE5ldzogU29tZSBTdHVmZg0KIC0gVXBkOiBNb2FyIFN0dWZmDQogLSBGaXg6IE11Y2ggU3R1ZmYBCWwAAAAJbQAAAAZuAAAADGNoYW5nZWxvZy5tZAZvAAAADGNoYW5nZWxvZy5tZAlKAAAACXEAAAAJcgAAAAE1AAAANAAAAAZzAAAAjggjIFBTRk1vZHVsZSBndWlkYW5jZQ0KDQpUaGlzIGlzIGEgZmluaXNoZWQgbW9kdWxlIGxheW91dCBvcHRpbWl6ZWQgZm9yIGltcGxlbWVudGluZyB0aGUgUFNGcmFtZXdvcmsuDQoNCklmIHlvdSBkb24ndCBjYXJlIHRvIGRlYWwgd2l0aCB0aGUgZGV0YWlscywgdGhpcyBpcyB3aGF0IHlvdSBuZWVkIHRvIGRvIHRvIGdldCBzdGFydGVkIHNlZWluZyByZXN1bHRzOg0KDQogLSBBZGQgdGhlIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHRvIGAvZnVuY3Rpb25zL2ANCiAtIFVwZGF0ZSB0aGUgYEZ1bmN0aW9uc1RvRXhwb3J0YCBub2RlIGluIHRoZSBtb2R1bGUgbWFuaWZlc3QgKMO+bmFtZcO+LnBzZDEpLiBBbGwgZnVuY3Rpb25zIHlvdSB3YW50IHRvIHB1Ymxpc2ggc2hvdWxkIGJlIGluIGEgbGlzdC4NCiAtIEFkZCBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRoZSB1c2VyIHNob3VsZCBub3Qgc2VlIHRvIGAvaW50ZXJuYWwvZnVuY3Rpb25zL2ANCiANCiAjIyBQYXRoIFdhcm5pbmcNCiANCiA+IElmIHlvdSB3YW50IHlvdXIgbW9kdWxlIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBMaW51eCBhbmQgTWFjT1MsIGtlZXAgaW4gbWluZCB0aGF0IHRob3NlIE9TIGFyZSBjYXNlIHNlbnNpdGl2ZSBmb3IgcGF0aHMgYW5kIGZpbGVzLg0KIA0KIGBJbXBvcnQtTW9kdWxlRmlsZWAgaXMgcHJlY29uZmlndXJlZCB0byByZXNvbHZlIHRoZSBwYXRoIG9mIHRoZSBmaWxlcyBzcGVjaWZpZWQsIHNvIGl0IHdpbGwgcmVsaWFibHkgY29udmVydCB3ZWlyZCBwYXRoIG5vdGF0aW9ucyB0aGUgc3lzdGVtIGNhbid0IGhhbmRsZS4NCiBDb250ZW50IGltcG9ydGVkIHRocm91Z2ggdGhhdCBjb21tYW5kIHRodXMgbmVlZCBub3QgbWluZCB0aGUgcGF0aCBzZXBhcmF0b3IuDQogSWYgeW91IHdhbnQgdG8gbWFrZSBzdXJlIHlvdXIgY29kZSB0b28gd2lsbCBzdXJ2aXZlIE9TLXNwZWNpZmljIHBhdGggbm90YXRpb25zLCBnZXQgdXNlZCB0byB1c2luZyBgUmVzb2x2ZS1wYXRoYCBvciB0aGUgbW9yZSBwb3dlcmZ1bCBgUmVzb2x2ZS1QU0ZQYXRoYC4BCXQAAAAJdQAAAAZ2AAAACXJlYWRtZS5tZAZ3AAAACXJlYWRtZS5tZAlKAAAACXkAAAAJegAAAAE2AAAANAAAAAZ7AAAAphJAew0KCSMgU2NyaXB0IG1vZHVsZSBvciBiaW5hcnkgbW9kdWxlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFuaWZlc3QNCglSb290TW9kdWxlID0gJ8O+bmFtZcO+LnBzbTEnDQoJDQoJIyBWZXJzaW9uIG51bWJlciBvZiB0aGlzIG1vZHVsZS4NCglNb2R1bGVWZXJzaW9uID0gJzEuMC4wJw0KCQ0KCSMgSUQgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIG1vZHVsZQ0KCUdVSUQgPSAnw74hZ3VpZCHDvicNCgkNCgkjIEF1dGhvciBvZiB0aGlzIG1vZHVsZQ0KCUF1dGhvciA9ICfDvmF1dGhvcsO+Jw0KCQ0KCSMgQ29tcGFueSBvciB2ZW5kb3Igb2YgdGhpcyBtb2R1bGUNCglDb21wYW55TmFtZSA9ICfDvmNvbXBhbnnDvicNCgkNCgkjIENvcHlyaWdodCBzdGF0ZW1lbnQgZm9yIHRoaXMgbW9kdWxlDQoJQ29weXJpZ2h0ID0gJ0NvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+Jw0KCQ0KCSMgRGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUNCglEZXNjcmlwdGlvbiA9ICfDvmRlc2NyaXB0aW9uw74nDQoJDQoJIyBNaW5pbXVtIHZlcnNpb24gb2YgdGhlIFdpbmRvd3MgUG93ZXJTaGVsbCBlbmdpbmUgcmVxdWlyZWQgYnkgdGhpcyBtb2R1bGUNCglQb3dlclNoZWxsVmVyc2lvbiA9ICc1LjAnDQoJDQoJIyBNb2R1bGVzIHRoYXQgbXVzdCBiZSBpbXBvcnRlZCBpbnRvIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgcHJpb3IgdG8gaW1wb3J0aW5nDQoJIyB0aGlzIG1vZHVsZQ0KCVJlcXVpcmVkTW9kdWxlcyA9IEAoDQoJCUB7IE1vZHVsZU5hbWU9J1BTRnJhbWV3b3JrJzsgTW9kdWxlVmVyc2lvbj0nw74hcHNmcmFtZXdvcmshw74nIH0NCgkpDQoJDQoJIyBBc3NlbWJsaWVzIHRoYXQgbXVzdCBiZSBsb2FkZWQgcHJpb3IgdG8gaW1wb3J0aW5nIHRoaXMgbW9kdWxlDQoJIyBSZXF1aXJlZEFzc2VtYmxpZXMgPSBAKCdiaW5cw75uYW1lw74uZGxsJykNCgkNCgkjIFR5cGUgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQ0KCSMgVHlwZXNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uVHlwZXMucHMxeG1sJykNCgkNCgkjIEZvcm1hdCBmaWxlcyAoLnBzMXhtbCkgdG8gYmUgbG9hZGVkIHdoZW4gaW1wb3J0aW5nIHRoaXMgbW9kdWxlDQoJIyBGb3JtYXRzVG9Qcm9jZXNzID0gQCgneG1sXMO+bmFtZcO+LkZvcm1hdC5wczF4bWwnKQ0KCQ0KCSMgRnVuY3Rpb25zIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlDQoJRnVuY3Rpb25zVG9FeHBvcnQgPSAnJw0KCQ0KCSMgQ21kbGV0cyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCUNtZGxldHNUb0V4cG9ydCA9ICcnDQoJDQoJIyBWYXJpYWJsZXMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglWYXJpYWJsZXNUb0V4cG9ydCA9ICcnDQoJDQoJIyBBbGlhc2VzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlDQoJQWxpYXNlc1RvRXhwb3J0ID0gJycNCgkNCgkjIExpc3Qgb2YgYWxsIG1vZHVsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQ0KCU1vZHVsZUxpc3QgPSBAKCkNCgkNCgkjIExpc3Qgb2YgYWxsIGZpbGVzIHBhY2thZ2VkIHdpdGggdGhpcyBtb2R1bGUNCglGaWxlTGlzdCA9IEAoKQ0KCQ0KCSMgUHJpdmF0ZSBkYXRhIHRvIHBhc3MgdG8gdGhlIG1vZHVsZSBzcGVjaWZpZWQgaW4gTW9kdWxlVG9Qcm9jZXNzLiBUaGlzIG1heSBhbHNvIGNvbnRhaW4gYSBQU0RhdGEgaGFzaHRhYmxlIHdpdGggYWRkaXRpb25hbCBtb2R1bGUgbWV0YWRhdGEgdXNlZCBieSBQb3dlclNoZWxsLg0KCVByaXZhdGVEYXRhID0gQHsNCgkJDQoJCSNTdXBwb3J0IGZvciBQb3dlclNoZWxsR2V0IGdhbGxlcmllcy4NCgkJUFNEYXRhID0gQHsNCgkJCQ0KCQkJIyBUYWdzIGFwcGxpZWQgdG8gdGhpcyBtb2R1bGUuIFRoZXNlIGhlbHAgd2l0aCBtb2R1bGUgZGlzY292ZXJ5IGluIG9ubGluZSBnYWxsZXJpZXMuDQoJCQkjIFRhZ3MgPSBAKCkNCgkJCQ0KCQkJIyBBIFVSTCB0byB0aGUgbGljZW5zZSBmb3IgdGhpcyBtb2R1bGUuDQoJCQkjIExpY2Vuc2VVcmkgPSAnJw0KCQkJDQoJCQkjIEEgVVJMIHRvIHRoZSBtYWluIHdlYnNpdGUgZm9yIHRoaXMgcHJvamVjdC4NCgkJCSMgUHJvamVjdFVyaSA9ICcnDQoJCQkNCgkJCSMgQSBVUkwgdG8gYW4gaWNvbiByZXByZXNlbnRpbmcgdGhpcyBtb2R1bGUuDQoJCQkjIEljb25VcmkgPSAnJw0KCQkJDQoJCQkjIFJlbGVhc2VOb3RlcyBvZiB0aGlzIG1vZHVsZQ0KCQkJIyBSZWxlYXNlTm90ZXMgPSAnJw0KCQkJDQoJCX0gIyBFbmQgb2YgUFNEYXRhIGhhc2h0YWJsZQ0KCQkNCgl9ICMgRW5kIG9mIFByaXZhdGVEYXRhIGhhc2h0YWJsZQ0KfQEJfAAAAAl9AAAABn4AAAANw75uYW1lw74ucHNkMQZ/AAAADcO+bmFtZcO+LnBzZDEJSgAAAAmBAAAACYIAAAABNwAAADQAAAAGgwAAANMYJHNjcmlwdDpNb2R1bGVSb290ID0gJFBTU2NyaXB0Um9vdA0KJHNjcmlwdDpNb2R1bGVWZXJzaW9uID0gKEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVzDvm5hbWXDvi5wc2QxIikuTW9kdWxlVmVyc2lvbg0KDQojIERldGVjdCB3aGV0aGVyIGF0IHNvbWUgbGV2ZWwgZG90c291cmNpbmcgd2FzIGVuZm9yY2VkDQokc2NyaXB0OmRvRG90U291cmNlID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuRG9Eb3RTb3VyY2UgLUZhbGxiYWNrICRmYWxzZQ0KaWYgKCTDvm5hbWXDvl9kb3Rzb3VyY2Vtb2R1bGUpIHsgJHNjcmlwdDpkb0RvdFNvdXJjZSA9ICR0cnVlIH0NCg0KPCMNCk5vdGUgb24gUmVzb2x2ZS1QYXRoOg0KQWxsIHBhdGhzIGFyZSBzZW50IHRocm91Z2ggUmVzb2x2ZS1QYXRoL1Jlc29sdmUtUFNGUGF0aCBpbiBvcmRlciB0byBjb252ZXJ0IHRoZW0gdG8gdGhlIGNvcnJlY3QgcGF0aCBzZXBhcmF0b3IuDQpUaGlzIGFsbG93cyBpZ25vcmluZyBwYXRoIHNlcGFyYXRvcnMgdGhyb3VnaG91dCB0aGUgaW1wb3J0IHNlcXVlbmNlLCB3aGljaCBjb3VsZCBvdGhlcndpc2UgY2F1c2UgdHJvdWJsZSBkZXBlbmRpbmcgb24gT1MuDQpSZXNvbHZlLVBhdGggY2FuIG9ubHkgYmUgdXNlZCBmb3IgcGF0aHMgdGhhdCBhbHJlYWR5IGV4aXN0LCBSZXNvbHZlLVBTRlBhdGggY2FuIGFjY2VwdCB0aGF0IHRoZSBsYXN0IGxlYWYgbXkgbm90IGV4aXN0Lg0KVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiB0ZXN0aW5nIGZvciBwYXRocy4NCiM+DQoNCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBsb2FkaW5nIGluZGl2aWR1YWwgbW9kdWxlIGZpbGVzLCByYXRoZXIgdGhhbiB0aGUgY29tcGlsZWQgbW9kdWxlIHdhcyBlbmZvcmNlZA0KJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9IEdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgw75uYW1lw74uSW1wb3J0LkluZGl2aWR1YWxGaWxlcyAtRmFsbGJhY2sgJGZhbHNlDQppZiAoJMO+bmFtZcO+X2ltcG9ydEluZGl2aWR1YWxGaWxlcykgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQ0KaWYgKFRlc3QtUGF0aCAoUmVzb2x2ZS1QU0ZQYXRoIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcLi5cLmdpdCIgLVNpbmdsZUl0ZW0gLU5ld0NoaWxkKSkgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQ0KaWYgKCI8d2FzIG5vdCBjb21waWxlZD4iIC1lcSAnPHdhcyBub3QgY29tcGlsZWQ+JykgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQ0KCQ0KZnVuY3Rpb24gSW1wb3J0LU1vZHVsZUZpbGUNCnsNCgk8Iw0KCQkuU1lOT1BTSVMNCgkJCUxvYWRzIGZpbGVzIGludG8gdGhlIG1vZHVsZSBvbiBtb2R1bGUgaW1wb3J0Lg0KCQkNCgkJLkRFU0NSSVBUSU9ODQoJCQlUaGlzIGhlbHBlciBmdW5jdGlvbiBpcyB1c2VkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24uDQoJCQlJdCBzaG91bGQgYWx3YXlzIGJlIGRvdHNvdXJjZWQgaXRzZWxmLCBpbiBvcmRlciB0byBwcm9wZXIgZnVuY3Rpb24uDQoJCQkNCgkJCVRoaXMgcHJvdmlkZXMgYSBjZW50cmFsIGxvY2F0aW9uIHRvIHJlYWN0IHRvIGZpbGVzIGJlaW5nIGltcG9ydGVkLCBpZiBsYXRlciBkZXNpcmVkDQoJCQ0KCQkuUEFSQU1FVEVSIFBhdGgNCgkJCVRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGxvYWQNCgkJDQoJCS5FWEFNUExFDQoJCQlQUyBDOlw+IC4gSW1wb3J0LU1vZHVsZUZpbGUgLUZpbGUgJGZ1bmN0aW9uLkZ1bGxOYW1lDQoJDQoJCQlJbXBvcnRzIHRoZSBmaWxlIHN0b3JlZCBpbiAkZnVuY3Rpb24gYWNjb3JkaW5nIHRvIGltcG9ydCBwb2xpY3kNCgkjPg0KCVtDbWRsZXRCaW5kaW5nKCldDQoJUGFyYW0gKA0KCQlbc3RyaW5nXQ0KCQkkUGF0aA0KCSkNCgkNCgkkcmVzb2x2ZWRQYXRoID0gJEV4ZWN1dGlvbkNvbnRleHQuU2Vzc2lvblN0YXRlLlBhdGguR2V0UmVzb2x2ZWRQU1BhdGhGcm9tUFNQYXRoKCRQYXRoKS5Qcm92aWRlclBhdGgNCglpZiAoJGRvRG90U291cmNlKSB7IC4gJHJlc29sdmVkUGF0aCB9DQoJZWxzZSB7ICRFeGVjdXRpb25Db250ZXh0Lkludm9rZUNvbW1hbmQuSW52b2tlU2NyaXB0KCRmYWxzZSwgKFtzY3JpcHRibG9ja106OkNyZWF0ZShbaW8uZmlsZV06OlJlYWRBbGxUZXh0KCRyZXNvbHZlZFBhdGgpKSksICRudWxsLCAkbnVsbCkgfQ0KfQ0KDQojcmVnaW9uIExvYWQgaW5kaXZpZHVhbCBmaWxlcw0KaWYgKCRpbXBvcnRJbmRpdmlkdWFsRmlsZXMpDQp7DQoJIyBFeGVjdXRlIFByZWltcG9ydCBhY3Rpb25zDQoJZm9yZWFjaCAoJHBhdGggaW4gKCYgIiRNb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNccHJlaW1wb3J0LnBzMSIpKSB7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJHBhdGgNCgl9DQoJDQoJIyBJbXBvcnQgYWxsIGludGVybmFsIGZ1bmN0aW9ucw0KCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcZnVuY3Rpb25zIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpDQoJew0KCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQ0KCX0NCgkNCgkjIEltcG9ydCBhbGwgcHVibGljIGZ1bmN0aW9ucw0KCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcZnVuY3Rpb25zIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpDQoJew0KCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQ0KCX0NCgkNCgkjIEV4ZWN1dGUgUG9zdGltcG9ydCBhY3Rpb25zDQoJZm9yZWFjaCAoJHBhdGggaW4gKCYgIiRNb2R1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vm5hbWXDviBwb3dlcnNoZWxsIG1vZHVsZQ0KCQ0KTE9ORyBERVNDUklQVElPTg0KCTxJbnNlcnQgQ29udGVudCBoZXJlPg0KDQpLRVlXT1JEUw0KCcO+bmFtZcO+AQnPAAAACdAAAAAG0QAAABdhYm91dF/Dvm5hbWXDvi5oZWxwLnR4dAbSAAAAHWVuLXVzXGFib3V0X8O+bmFtZcO+LmhlbHAudHh0CUoAAAAJ1AAAAAnVAAAAAawAAAA0AAAABtYAAACdASMgVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBnbywgdGhhdCBhcmUgd3JpdHRlbiBieQ0KIyBXcml0ZS1QU0ZNZXNzYWdlLCBTdG9wLVBTRkZ1bmN0aW9uIG9yIHRoZSBQU0ZyYW1ld29yayB2YWxpZGF0aW9uIHNjcmlwdGJsb2Nrcw0KQHsNCgkna2V5JyA9ICdWYWx1ZScNCn0BCdcAAAAJ2AAAAAbZAAAADHN0cmluZ3MucHNkMQbaAAAAEmVuLXVzXHN0cmluZ3MucHNkMQlKAAAACdwAAAAJ3QAAAAGtAAAANAAAAAbeAAAA0gEjIEZ1bmN0aW9ucw0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGZ1bmN0aW9ucyBnby4NCg0KRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4NCg0KVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCd8AAAAJ4AAAAAbhAAAACXJlYWRtZS5tZAbiAAAAE2Z1bmN0aW9uc1xyZWFkbWUubWQJSgAAAAnkAAAACeUAAAABrgAAAC4AAAAJ5gAAAAbnAAAADmNvbmZpZ3VyYXRpb25zBugAAAAXaW50ZXJuYWxcY29uZmlndXJhdGlvbnMJSgAAAAnqAAAACesAAAABrwAAAC4AAAAJ7AAAAAbtAAAACWZ1bmN0aW9ucwbuAAAAEmludGVybmFsXGZ1bmN0aW9ucwlKAAAACfAAAAAJ8QAAAAGwAAAALgAAAAnyAAAABvMAAAAMc2NyaXB0YmxvY2tzBvQAAAAVaW50ZXJuYWxcc2NyaXB0YmxvY2tzCUoAAAAJ9gAAAAn3AAAAAbEAAAAuAAAACfgAAAAG+QAAAAdzY3JpcHRzBvoAAAAQaW50ZXJuYWxcc2NyaXB0cwlKAAAACfwAAAAJ/QAAAAGyAAAALgAAAAn+AAAABv8AAAAEdGVwcAYAAQAADWludGVybmFsXHRlcHAJSgAAAAkCAQAACQMBAAABswAAAC4AAAAJBAEAAAYFAQAACWZ1bmN0aW9ucwYGAQAAD3Rlc3RzXGZ1bmN0aW9ucwlKAAAACQgBAAAJCQEAAAG0AAAALgAAAAkKAQAABgsBAAAHZ2VuZXJhbAYMAQAADXRlc3RzXGdlbmVyYWwJSgAAAAkOAQAACQ8BAAABtQAAADQAAAAGEAEAAKkbcGFyYW0gKA0KCSRUZXN0R2VuZXJhbCA9ICR0cnVlLA0KCQ0KCSRUZXN0RnVuY3Rpb25zID0gJHRydWUsDQoJDQoJW1ZhbGlkYXRlU2V0KCdOb25lJywgJ05vcm1hbCcsICdEZXRhaWxlZCcsICdEaWFnbm9zdGljJyldDQoJW0FsaWFzKCdTaG93JyldDQoJJE91dHB1dCA9ICJOb25lIiwNCgkNCgkkSW5jbHVkZSA9ICIqIiwNCgkNCgkkRXhjbHVkZSA9ICIiDQopDQoNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiU3RhcnRpbmcgVGVzdHMiDQoNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiSW1wb3J0aW5nIE1vZHVsZSINCg0KJGdsb2JhbDp0ZXN0cm9vdCA9ICRQU1NjcmlwdFJvb3QNCiRnbG9iYWw6X19wZXN0ZXJfZGF0YSA9IEB7IH0NCg0KUmVtb3ZlLU1vZHVsZSDDvm5hbWXDviAtRXJyb3JBY3Rpb24gSWdub3JlDQpJbXBvcnQtTW9kdWxlICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+LnBzZDEiDQpJbXBvcnQtTW9kdWxlICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+LnBzbTEiIC1Gb3JjZQ0KDQojIE5lZWQgdG8gaW1wb3J0IGV4cGxpY2l0bHkgc28gd2UgY2FuIHVzZSB0aGUgY29uZmlndXJhdGlvbiBjbGFzcw0KSW1wb3J0LU1vZHVsZSBQZXN0ZXINCg0Kw74hdGVzdGZvbGRlciHDvg0KDQokdG90YWxGYWlsZWQgPSAwDQokdG90YWxSdW4gPSAwDQoNCiR0ZXN0cmVzdWx0cyA9IEAoKQ0KJGNvbmZpZyA9IFtQZXN0ZXJDb25maWd1cmF0aW9uXTo6RGVmYXVsdA0Kw74hcGVzdGVyY29uZmlnIcO+DQoNCiNyZWdpb24gUnVuIEdlbmVyYWwgVGVzdHMNCmlmICgkVGVzdEdlbmVyYWwpDQp7DQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJNb2R1bGVzIGltcG9ydGVkLCBwcm9jZWVkaW5nIHdpdGggZ2VuZXJhbCB0ZXN0cyINCglmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJFBTU2NyaXB0Um9vdFxnZW5lcmFsIiB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLlRlc3RzLnBzMSIpKQ0KCXsNCgkJaWYgKCRmaWxlLk5hbWUgLW5vdGxpa2UgJEluY2x1ZGUpIHsgY29udGludWUgfQ0KCQlpZiAoJGZpbGUuTmFtZSAtbGlrZSAkRXhjbHVkZSkgeyBjb250aW51ZSB9DQoNCgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgU2lnbmlmaWNhbnQgLU1lc3NhZ2UgIiAgRXhlY3V0aW5nIDxjPSdlbSc+JCgkZmlsZS5OYW1lKTwvYz4iDQoJCSRjb25maWcuVGVzdFJlc3VsdC5PdXRwdXRQYXRoID0gSm9pbi1QYXRoICIkUFNTY3JpcHRSb290XC4uXC4uXFRlc3RSZXN1bHRzIiAiVEVTVC0kKCRmaWxlLkJhc2VOYW1lKS54bWwiDQoJCSRjb25maWcuUnVuLlBhdGggPSAkZmlsZS5GdWxsTmFtZQ0KCQkkY29uZmlnLlJ1bi5QYXNzVGhydSA9ICR0cnVlDQoJCSRjb25maWcuT3V0cHV0LlZlcmJvc2l0eSA9ICRPdXRwdXQNCiAgICAJJHJlc3VsdHMgPSBJbnZva2UtUGVzdGVyIC1Db25maWd1cmF0aW9uICRjb25maWcNCgkJZm9yZWFjaCAoJHJlc3VsdCBpbiAkcmVzdWx0cykNCgkJew0KCQkJJHRvdGFsUnVuICs9ICRyZXN1bHQuVG90YWxDb3VudA0KCQkJJHRvdGFsRmFpbGVkICs9ICRyZXN1bHQuRmFpbGVkQ291bnQNCgkJCSRyZXN1bHQuVGVzdHMgfCBXaGVyZS1PYmplY3QgUmVzdWx0IC1uZSAnUGFzc2VkJyB8IEZvckVhY2gtT2JqZWN0IHsNCgkJCQkkdGVzdHJlc3VsdHMgKz0gW3BzY3VzdG9tb2JqZWN0XUB7DQoJCQkJCUJsb2NrICAgID0gJF8uQmxvY2sNCgkJCQkJTmFtZQkgPSAiSXQgJCgkXy5OYW1lKSINCgkJCQkJUmVzdWx0ICAgPSAkXy5SZXN1bHQNCgkJCQkJTWVzc2FnZSAgPSAkXy5FcnJvclJlY29yZC5EaXNwbGF5RXJyb3JNZXNzYWdlDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KI2VuZHJlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cw0KDQokZ2xvYmFsOl9fcGVzdGVyX2RhdGEuU2NyaXB0QW5hbHl6ZXIgfCBPdXQtSG9zdA0KDQojcmVnaW9uIFRlc3QgQ29tbWFuZHMNCmlmICgkVGVzdEZ1bmN0aW9ucykNCnsNCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlByb2NlZWRpbmcgd2l0aCBpbmRpdmlkdWFsIHRlc3RzIg0KCWZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkUFNTY3JpcHRSb290XGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKlRlc3RzLnBzMSIpKQ0KCXsNCgkJaWYgKCRmaWxlLk5hbWUgLW5vdGxpa2UgJEluY2x1ZGUpIHsgY29udGludWUgfQ0KCQlpZiAoJGZpbGUuTmFtZSAtbGlrZSAkRXhjbHVkZSkgeyBjb250aW51ZSB9DQoJCQ0KCQlXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBTaWduaWZpY2FudCAtTWVzc2FnZSAiICBFeGVjdXRpbmcgJCgkZmlsZS5OYW1lKSINCgkJJGNvbmZpZy5UZXN0UmVzdWx0Lk91dHB1dFBhdGggPSBKb2luLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi5cVGVzdFJlc3VsdHMiICJURVNULSQoJGZpbGUuQmFzZU5hbWUpLnhtbCINCgkJJGNvbmZpZy5SdW4uUGF0aCA9ICRmaWxlLkZ1bGxOYW1lDQoJCSRjb25maWcuUnVuLlBhc3NUaHJ1ID0gJHRydWUNCgkJJGNvbmZpZy5PdXRwdXQuVmVyYm9zaXR5ID0gJE91dHB1dA0KICAgIAkkcmVzdWx0cyA9IEludm9rZS1QZXN0ZXIgLUNvbmZpZ3VyYXRpb24gJGNvbmZpZw0KCQlmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQ0KCQl7DQoJCQkkdG90YWxSdW4gKz0gJHJlc3VsdC5Ub3RhbENvdW50DQoJCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudA0KCQkJJHJlc3VsdC5UZXN0cyB8IFdoZXJlLU9iamVjdCBSZXN1bHQgLW5lICdQYXNzZWQnIHwgRm9yRWFjaC1PYmplY3Qgew0KCQkJCSR0ZXN0cmVzdWx0cyArPSBbcHNjdXN0b21vYmplY3RdQHsNCgkJCQkJQmxvY2sgICAgPSAkXy5CbG9jaw0KCQkJCQlOYW1lCSA9ICJJdCAkKCRfLk5hbWUpIg0KCQkJCQlSZXN1bHQgICA9ICRfLlJlc3VsdA0KCQkJCQlNZXNzYWdlICA9ICRfLkVycm9yUmVjb3JkLkRpc3BsYXlFcnJvck1lc3NhZ2UNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQojZW5kcmVnaW9uIFRlc3QgQ29tbWFuZHMNCg0KJHRlc3RyZXN1bHRzIHwgU29ydC1PYmplY3QgRGVzY3JpYmUsIENvbnRleHQsIE5hbWUsIFJlc3VsdCwgTWVzc2FnZSB8IEZvcm1hdC1MaXN0DQoNCmlmICgkdG90YWxGYWlsZWQgLWVxIDApIHsgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgQ3JpdGljYWwgLU1lc3NhZ2UgIkFsbCA8Yz0nZW0nPiR0b3RhbFJ1bjwvYz4gdGVzdHMgZXhlY3V0ZWQgd2l0aG91dCBhIHNpbmdsZSBmYWlsdXJlISIgfQ0KZWxzZSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICI8Yz0nZW0nPiR0b3RhbEZhaWxlZCB0ZXN0czwvYz4gb3V0IG9mIDxjPSdzdWInPiR0b3RhbFJ1bjwvYz4gdGVzdHMgZmFpbGVkISIgfQ0KDQppZiAoJHRvdGFsRmFpbGVkIC1ndCAwKQ0Kew0KCXRocm93ICIkdG90YWxGYWlsZWQgLyAkdG90YWxSdW4gdGVzdHMgZmFpbGVkISINCn0BCREBAAAJEgEAAAYTAQAACnBlc3Rlci5wczEGFAEAABB0ZXN0c1xwZXN0ZXIucHMxCUoAAAAJFgEAAAkXAQAAAbYAAAA0AAAABhgBAACiByMgRGVzY3JpcHRpb24NCg0KVGhpcyBpcyB0aGUgZm9sZGVyLCB3aGVyZSBhbGwgdGhlIHRlc3RzIGdvLg0KDQpUaG9zZSBhcmUgc3ViZGl2aWRlZCBpbiB0d28gY2F0ZWdvcmllczoNCg0KIC0gR2VuZXJhbA0KIC0gRnVuY3Rpb24NCg0KIyMgR2VuZXJhbCBUZXN0cw0KDQpHZW5lcmFsIHRlc3RzIGFyZSBmdW5jdGlvbiBnZW5lcmljIGFuZCB0ZXN0IGZvciBnZW5lcmFsIHBvbGljaWVzLg0KDQpUaGVzZSB0ZXN0IHNjYW4gYW5zd2VyIHF1ZXN0aW9ucyBzdWNoIGFzOg0KDQogLSBJcyBteSBtb2R1bGUgZm9sbG93aW5nIG15IHN0eWxlIGd1aWRlcz8NCiAtIERvZXMgYW55IG9mIG15IHNjcmlwdHMgaGF2ZSBhIHN5bnRheCBlcnJvcj8NCiAtIERvIG15IHNjcmlwdHMgdXNlIGNvbW1hbmRzIEkgZG8gbm90IHdhbnQgdGhlbSB0byB1c2U/DQogLSBEbyBteSBjb21tYW5kcyBmb2xsb3cgYmVzdCBwcmFjdGljZXM/DQogLSBEbyBteSBjb21tYW5kcyBoYXZlIHByb3BlciBoZWxwPw0KDQpCYXNpY2FsbHksIHRoZXNlIGFsbG93IGEgZ2VuZXJhbCBtb2R1bGUgaGVhbHRoIGNoZWNrLg0KDQpUaGVzZSB0ZXN0cyBhcmUgYWxyZWFkeSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZSB0ZW1wbGF0ZS4NCg0KIyMgRnVuY3Rpb24gVGVzdHMNCg0KQSBoZWFsdGh5IG1vZHVsZSBzaG91bGQgcHJvdmlkZSB1bml0IGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgdGhlIGNvbW1hbmRzICYgY29tcG9uZW50cyBpdCBzaGlwcy4NCk9ubHkgdGhlbiBjYW4gYmUgZ3VhcmFudGVlZCwgdGhhdCB0aGV5IHdpbGwgYWN0dWFsbHkgcGVyZm9ybSBhcyBwcm9taXNlZC4NCg0KSG93ZXZlciwgYXMgZWFjaCBzdWNoIHRlc3QgbXVzdCBiZSBzcGVjaWZpYyB0byB0aGUgZnVuY3Rpb24gaXQgdGVzdHMsIHRoZXJlIGNhbm5vdCBiZSBtdWNoIGluIHRoZSB3YXkgb2YgdGVtcGxhdGVzLgEJGQEAAAkaAQAABhsBAAAJcmVhZG1lLm1kBhwBAAAPdGVzdHNccmVhZG1lLm1kCUoAAAAJHgEAAAkfAQAAAbcAAAA0AAAABiABAACsCyMgWE1MDQoNClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSBwcm9qZWN0IFhNTCBmaWxlcyBnbywgbm90YWJseToNCg0KIC0gRm9ybWF0IFhNTA0KIC0gVHlwZSBFeHRlbnNpb24gWE1MDQoNCkV4dGVybmFsIGhlbHAgZmlsZXMgc2hvdWxkIF9ub3RfIGJlIHBsYWNlZCBpbiB0aGlzIGZvbGRlciENCg0KIyMgTm90ZXMgb24gRmlsZXMgYW5kIE5hbWluZw0KDQpUaGVyZSBzaG91bGQgYmUgb25seSBvbmUgZm9ybWF0IGZpbGUgYW5kIG9uZSB0eXBlIGV4dGVuc2lvbiBmaWxlIHBlciBwcm9qZWN0LCBhcyBpbXBvcnRpbmcgdGhlbSBoYXMgYSBub3RhYmxlIGltcGFjdCBvbiBpbXBvcnQgdGltZXMuDQoNCiAtIFRoZSBGb3JtYXQgWE1MIHNob3VsZCBiZSBuYW1lZCBgw75uYW1lw74uRm9ybWF0LnBzMXhtbGANCiAtIFRoZSBUeXBlIEV4dGVuc2lvbiBYTUwgc2hvdWxkIGJlIG5hbWVkIGDDvm5hbWXDvi5UeXBlcy5wczF4bWxgDQoNCiMjIFRvb2xzDQoNCiMjIyBOZXctUFNNREZvcm1hdFRhYmxlRGVmaW5pdGlvbg0KDQpUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhbiBpbnB1dCBvYmplY3QgYW5kIGdlbmVyYXRlIGZvcm1hdCB4bWwgZm9yIGFuIGF1dG8tc2l6ZWQgdGFibGUuDQoNCkl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSB0byBnZXQgc3RhcnRlZCB3aXRoIGZvcm1hdHMuDQoNCiMjIyBHZXQtUFNGVHlwZVNlcmlhbGl6YXRpb25EYXRhDQoNCmBgYA0KQyMgV2FybmluZyENClRoaXMgc2VjdGlvbiBpcyBvbmx5IGludGVyZXN0IGlmIHlvdSdyZSB1c2luZyBDIyB0b2dldGhlciB3aXRoIFBvd2VyU2hlbGwuDQpgYGANCg0KVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdHlwZSBleHRlbnNpb24gWE1MIHRoYXQgYWxsb3dzIFBvd2VyU2hlbGwgdG8gY29udmVydCB0eXBlcyB3cml0dGVuIGluIEMjIHRvIGJlIHdyaXR0ZW4gdG8gZmlsZSBhbmQgcmVzdG9yZWQgZnJvbSBpdCB3aXRob3V0IGJlaW5nICdEZXNlcmlhbGl6ZWQnLiBBbHNvIHdvcmtzIGZvciBqb2JzIG9yIHJlbW90aW5nLCBpZiBib3RoIHNpZGVzIGhhdmUgdGhlIGBQU0ZyYW1ld29ya2AgbW9kdWxlIGFuZCB0eXBlIGV4dGVuc2lvbiBsb2FkZWQuDQoNCkluIG9yZGVyIGZvciBhIGNsYXNzIHRvIGJlIGVsaWdpYmxlIGZvciB0aGlzLCBpdCBuZWVkcyB0byBjb25mb3JtIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXM6DQoNCiAtIEhhdmUgdGhlIGBbU2VyaWFsaXphYmxlXWAgYXR0cmlidXRlDQogLSBCZSBwdWJsaWMNCiAtIEhhdmUgYW4gZW1wdHkgY29uc3RydWN0b3INCiAtIEFsbG93IGFsbCBwdWJsaWMgcHJvcGVydGllcy9maWVsZHMgdG8gYmUgc2V0IChldmVuIGlmIHNldHRpbmcgaXQgZG9lc24ndCBkbyBhbnl0aGluZykgd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24uDQoNCmBgYA0Kbm9uLXB1YmxpYyBwcm9wZXJ0aWVzIGFuZCBmaWVsZHMgd2lsbCBiZSBsb3N0IGluIHRoaXMgcHJvY2VzcyENCmBgYAEJIQEAAAkiAQAABiMBAAAJcmVhZG1lLm1kBiQBAAANeG1sXHJlYWRtZS5tZAlKAAAACSYBAAAJJwEAAAG4AAAANAAAAAYoAQAA6AU8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtMTYiPz4NCjxDb25maWd1cmF0aW9uPg0KCTxWaWV3RGVmaW5pdGlvbnM+DQoJCTwhLS0gRm9vLkJhciAtLT4NCgkJPFZpZXc+DQoJCQk8TmFtZT5Gb28uQmFyPC9OYW1lPg0KCQkJPFZpZXdTZWxlY3RlZEJ5Pg0KCQkJCTxUeXBlTmFtZT5Gb28uQmFyPC9UeXBlTmFtZT4NCgkJCTwvVmlld1NlbGVjdGVkQnk+DQoJCQk8VGFibGVDb250cm9sPg0KCQkJCTxBdXRvU2l6ZS8+DQoJCQkJPFRhYmxlSGVhZGVycz4NCgkJCQkJPFRhYmxlQ29sdW1uSGVhZGVyLz4NCgkJCQkJPFRhYmxlQ29sdW1uSGVhZGVyLz4NCgkJCQk8L1RhYmxlSGVhZGVycz4NCgkJCQk8VGFibGVSb3dFbnRyaWVzPg0KCQkJCQk8VGFibGVSb3dFbnRyeT4NCgkJCQkJCTxUYWJsZUNvbHVtbkl0ZW1zPg0KCQkJCQkJCTxUYWJsZUNvbHVtbkl0ZW0+DQoJCQkJCQkJCTxQcm9wZXJ0eU5hbWU+Rm9vPC9Qcm9wZXJ0eU5hbWU+DQoJCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW0+DQoJCQkJCQkJPFRhYmxlQ29sdW1uSXRlbT4NCgkJCQkJCQkJPFByb3BlcnR5TmFtZT5CYXI8L1Byb3BlcnR5TmFtZT4NCgkJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbT4NCgkJCQkJCTwvVGFibGVDb2x1bW5JdGVtcz4NCgkJCQkJPC9UYWJsZVJvd0VudHJ5Pg0KCQkJCTwvVGFibGVSb3dFbnRyaWVzPg0KCQkJPC9UYWJsZUNvbnRyb2w+DQoJCTwvVmlldz4NCgk8L1ZpZXdEZWZpbml0aW9ucz4NCjwvQ29uZmlndXJhdGlvbj4BCSkBAAAJKgEAAAYrAQAAFsO+bmFtZcO+LkZvcm1hdC5wczF4bWwGLAEAABp4bWxcw75uYW1lw74uRm9ybWF0LnBzMXhtbAlKAAAACS4BAAAJLwEAAAG5AAAANAAAAAYwAQAA4Ac8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KPFR5cGVzPg0KICA8IS0tIEZvby5CYXIgLS0+DQogIDxUeXBlPg0KICAgIDxOYW1lPkRlc2VyaWFsaXplZC5Gb28uQmFyPC9OYW1lPg0KICAgIDxNZW1iZXJzPg0KICAgICAgPE1lbWJlclNldD4NCiAgICAgICAgPE5hbWU+UFNTdGFuZGFyZE1lbWJlcnM8L05hbWU+DQogICAgICAgIDxNZW1iZXJzPg0KICAgICAgICAgIDxOb3RlUHJvcGVydHk+DQogICAgICAgICAgICA8TmFtZT4NCiAgICAgICAgICAgICAgVGFyZ2V0VHlwZUZvckRlc2VyaWFsaXphdGlvbg0KICAgICAgICAgICAgPC9OYW1lPg0KICAgICAgICAgICAgPFZhbHVlPg0KICAgICAgICAgICAgICBGb28uQmFyDQogICAgICAgICAgICA8L1ZhbHVlPg0KICAgICAgICAgIDwvTm90ZVByb3BlcnR5Pg0KICAgICAgICA8L01lbWJlcnM+DQogICAgICA8L01lbWJlclNldD4NCiAgICA8L01lbWJlcnM+DQogIDwvVHlwZT4NCiAgPFR5cGU+DQogICAgPE5hbWU+Rm9vLkJhcjwvTmFtZT4NCiAgICA8TWVtYmVycz4NCiAgICAgIDxDb2RlUHJvcGVydHkgSXNIaWRkZW49InRydWUiPg0KICAgICAgICA8TmFtZT5TZXJpYWxpemF0aW9uRGF0YTwvTmFtZT4NCiAgICAgICAgPEdldENvZGVSZWZlcmVuY2U+DQogICAgICAgICAgPFR5cGVOYW1lPlBTRnJhbWV3b3JrLlNlcmlhbGl6YXRpb24uU2VyaWFsaXphdGlvblR5cGVDb252ZXJ0ZXI8L1R5cGVOYW1lPg0KICAgICAgICAgIDxNZXRob2ROYW1lPkdldFNlcmlhbGl6YXRpb25EYXRhPC9NZXRob2ROYW1lPg0KICAgICAgICA8L0dldENvZGVSZWZlcmVuY2U+DQogICAgICA8L0NvZGVQcm9wZXJ0eT4NCiAgICA8L01l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cGxhdGVJdGVtQmFzZQIAAAAJWgEAAAlbAQAACVwBAAAJXQEAAAdFAQAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACV4BAAAJXwEAAAlgAQAACgdHAQAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACWEBAAANAwdJAQAAAAEAAAAIAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACWIBAAAJYwEAAAlkAQAACWUBAAAJZgEAAAlnAQAACWgBAAAJaQEAABFLAQAABAAAAAZqAQAABG5hbWUNAxFMAQAABAAAAAZrAQAACnRlc3Rmb2xkZXIGbAEAAAxwZXN0ZXJjb25maWcNAhFOAQAABAAAAAZtAQAABG5hbWUNAxFQAQAABAAAAAZuAQAABG5hbWUNAxFSAQAABAAAAAZvAQAABG5hbWUNAwFWAQAANAAAAAZwAQAAwAk8Iw0KVGhpcyBpcyBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZQ0KDQpCeSBkZWZhdWx0LCBpdCBpcyBlbm91Z2ggdG8gaGF2ZSBhIHNpbmdsZSBvbmUgb2YgdGhlbSwNCmhvd2V2ZXIgaWYgeW91IGhhdmUgZW5vdWdoIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8ganVzdGlmeSBoYXZpbmcgbXVsdGlwbGUgY29waWVzIG9mIGl0LA0KZmVlbCB0b3RhbGx5IGZyZWUgdG8gc3BsaXQgdGhlbSBpbnRvIG11bHRpcGxlIGZpbGVzLg0KIz4NCg0KPCMNCiMgRXhhbXBsZSBDb25maWd1cmF0aW9uDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ8O+bmFtZcO+JyAtTmFtZSAnRXhhbXBsZS5TZXR0aW5nJyAtVmFsdWUgMTAgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2ludGVnZXInIC1IYW5kbGVyIHsgfSAtRGVzY3JpcHRpb24gIkV4YW1wbGUgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBZb3VyIG1vZHVsZSBjYW4gdGhlbiB1c2UgdGhlIHNldHRpbmcgdXNpbmcgJ0dldC1QU0ZDb25maWdWYWx1ZSciDQojPg0KDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ8O+bmFtZcO+JyAtTmFtZSAnSW1wb3J0LkRvRG90U291cmNlJyAtVmFsdWUgJGZhbHNlIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdib29sJyAtRGVzY3JpcHRpb24gIldoZXRoZXIgdGhlIG1vZHVsZSBmaWxlcyBzaG91bGQgYmUgZG90c291cmNlZCBvbiBpbXBvcnQuIEJ5IGRlZmF1bHQsIHRoZSBmaWxlcyBvZiB0aGlzIG1vZHVsZSBhcmUgcmVhZCBhcyBzdHJpbmcgdmFsdWUgYW5kIGludm9rZWQsIHdoaWNoIGlzIGZhc3RlciBidXQgd29yc2Ugb24gZGVidWdnaW5nLiINClNldC1QU0ZDb25maWcgLU1vZHVsZSAnw75uYW1lw74nIC1OYW1lICdJbXBvcnQuSW5kaXZpZHVhbEZpbGVzJyAtVmFsdWUgJGZhbHNlIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdib29sJyAtRGVzY3JpcHRpb24gIldoZXRoZXIgdGhlIG1vZHVsZSBmaWxlcyBzaG91bGQgYmUgaW1wb3J0ZWQgaW5kaXZpZHVhbGx5LiBEdXJpbmcgdGhlIG1vZHVsZSBidWlsZCwgYWxsIG1vZHVsZSBjb2RlIGlzIGNvbXBpbGVkIGludG8gZmV3IGZpbGVzLCB3aGljaCBhcmUgaW1wb3J0ZWQgaW5zdGVhZCBieSBkZWZhdWx0LiBMb2FkaW5nIHRoZSBjb21waWxlZCB2ZXJzaW9ucyBpcyBmYXN0ZXIsIHVzaW5nIHRoZSBpbmRpdmlkdWFsIGZpbGVzIGlzIGVhc2llciBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIG91dCBhZGp1c3RtZW50cy4iAQlxAQAACXIBAAAGcwEAABFjb25maWd1cmF0aW9uLnBzMQZ0AQAAKWludGVybmFsXGNvbmZpZ3VyYXRpb25zXGNvbmZpZ3VyYXRpb24ucHMxCUoAAAAJdgEAAAl3AQAAAVcBAAA0AAAABngBAAD+AyMgQ29uZmlndXJhdGlvbnMNCg0KVGhyb3VnaCB0aGUgYFBTRnJhbWV3b3JrYCB5b3UgaGF2ZSBhIHNpbXBsZSBtZXRob2QgdGhhdCBhbGxvd3MgeW91IHRvIC4uLg0KDQogLSBQdWJsaXNoIHNldHRpbmdzDQogLSBXaXRoIG9uYm9hcmQgZG9jdW1lbnRhdGlvbg0KIC0gSW5wdXQgdmFsaWRhdGlvbg0KIC0gU2NyaXB0cyB0aGF0IHJ1biBvbiBjaGFuZ2Ugb2Ygc2V0dGluZ3MNCiAtIFRoYXQgY2FuIGJlIGRpc2NvdmVyZWQgYW5kIHVwZGF0ZWQgYnkgdGhlIHVzZXINCiAtIFRoYXQgY2FuIGJlIGFkbWluaXN0cmF0ZWQgYnkgcG9saWN5ICYgRFNDDQoNClRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBhIGJpdCB0b28gY29tcGxleCB0byBkZXNjcmliZSBpbiBhIGhlbHAgZmlsZSwgeW91IGNhbiBob3dldmVyIHZpc2l0IHVzIGF0IGh0dHA6Ly9wc2ZyYW1ld29yay5vcmcgZm9yIGRldGFpbGVkIGd1aWRhbmNlLg0KDQpBbiBleGFtcGxlIGNhbiBiZSBzZWVuIGluIHRoZSBhdHRhY2hlZCBwczEgZmlsZQEJeQEAAAl6AQAABnsBAAAJcmVhZG1lLm1kBnwBAAAhaW50ZXJuYWxcY29uZmlndXJhdGlvbnNccmVhZG1lLm1kCUoAAAAJfgEAAAl/AQAAAVgBAAA0AAAABoABAADbASMgRnVuY3Rpb25zDQoNClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIGdvLg0KDQpEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG1vZHVsZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViZGl2aWRlIHRoZW0gaW50byBzdWJmb2xkZXJzLg0KDQpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseQEJgQEAAAmCAQAABoMBAAAJcmVhZG1lLm1kBoQBAAAcaW50ZXJuYWxcZnVuY3Rpb25zXHJlYWRtZS5tZAlKAAAACYYBAAAJhwEAAAFZAQAANAAAAAaIAQAAhAM8Iw0KU3RvcmVkIHNjcmlwdGJsb2NrcyBhcmUgYXZhaWxhYmxlIGluIFtQc2ZWYWxpZGF0ZVNjcmlwdCgpXSBhdHRyaWJ1dGVzLg0KVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gY2VudHJhbGx5IHByb3ZpZGUgdGhlIHNhbWUgc2NyaXB0YmxvY2sgbXVsdGlwbGUgdGltZXMsDQp3aXRob3V0IGhhdmluZyB0byBtYWludGFpbiBpdCBpbiBzZXBhcmF0ZSBsb2NhdGlvbnMuDQoNCkl0IGFsc28gcHJldmVudHMgbGVuZ3RoeSB2YWxpZGF0aW9uIHNjcmlwdGJsb2NrcyBmcm9tIG1ha2luZyB5b3VyIHBhcmFtZXRlciBibG9jaw0KaGFyZCB0byByZWFkLg0KDQpTZXQtUFNGU2NyaXB0YmxvY2sgLU5hbWUgJ8O+bmFtZcO+LlNjcmlwdEJsb2NrTmFtZScgLVNjcmlwdGJsb2NrIHsNCgkNCn0NCiM+AQmJAQAACYoBAAAGiwEAABBzY3JpcHRibG9ja3MucHMxBowBAAAmaW50ZXJuYWxcc2NyaXB0YmxvY2tzXHNjcmlwdGJsb2Nrcy5wczEJSgAAAAmOAQAACY8BAAABWgEAADQAAAAGkAEAAPYJTmV3LVBTRkxpY2Vuc2UgLVByb2R1Y3QgJ8O+bmFtZcO+JyAtTWFudWZhY3R1cmVyICfDvmF1dGhvcsO+JyAtUHJvZHVjdFZlcnNpb24gJHNjcmlwdDpNb2R1bGVWZXJzaW9uIC1Qcm9kdWN0VHlwZSBNb2R1bGUgLU5hbWUgTUlUIC1WZXJzaW9uICIxLjAuMC4wIiAtRGF0ZSAoR2V0LURhdGUgIsO+IWRhdGUhw74iKSAtVGV4dCBAIg0KQ29weXJpZ2h0IChjKSDDviF5ZWFyIcO+IMO+YXV0aG9yw74NCg0KUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQ0Kb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwNCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMNCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwNCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCg0KVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsDQpjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KDQpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQpGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVINCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sDQpPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQ0KU09GVFdBUkUuDQoiQAEJkQEAAAmSAQAABpMBAAALbGljZW5zZS5wczEGlAEAABxpbnRlcm5hbFxzY3JpcHRzXGxpY2Vuc2UucHMxCUoAAAAJlgEAAAmXAQAAAVsBAAA0AAAABpgBAAC3BjwjDQpBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYWZ0ZXIgaW1wb3J0aW5nIHRoZSBtYWluIGZ1bmN0aW9uIGNvZGUNCg0KV0FSTklORzogT05MWSBwcm92aWRlIHBhdGhzIHRvIGZpbGVzIQ0KDQpBZnRlciBidWlsZGluZyB0aGUgbW9kdWxlLCB0aGlzIGZpbGUgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQsIGFkZGluZyBhbnl0aGluZyBidXQgcGF0aHMgdG8gZmlsZXMgLi4uDQotIFdpbGwgbm90IHdvcmsgYWZ0ZXIgcHVibGlzaGluZw0KLSBDb3VsZCBicmVhayB0aGUgYnVpbGQgcHJvY2Vzcw0KIz4NCg0KJG1vZHVsZVJvb3QgPSBTcGxpdC1QYXRoIChTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QpDQoNCiMgTG9hZCBDb25maWd1cmF0aW9ucw0KKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGNvbmZpZ3VyYXRpb25zXCoucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKS5GdWxsTmFtZQ0KDQojIExvYWQgU2NyaXB0YmxvY2tzDQooR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0YmxvY2tzXCoucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKS5GdWxsTmFtZQ0KDQojIExvYWQgVGFiIEV4cGFuc2lvbg0KKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXHRlcHBcKi50ZXBwLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUNCg0KIyBMb2FkIFRhYiBFeHBhbnNpb24gQXNzaWdubWVudA0KIiRtb2R1bGVSb290XGludGVybmFsXHRlcHBcYXNzaWdubWVudC5wczEiDQoNCiMgTG9hZCBMaWNlbnNlDQoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xsaWNlbnNlLnBzMSIBCZkBAAAJmgEAAAabAQAADnBvc3RpbXBvcnQucHMxBpwBAAAfaW50ZXJuYWxcc2NyaXB0c1xwb3N0aW1wb3J0LnBzMQlKAAAACZ4BAAAJnwEAAAFcAQAANAAAAAagAQAAsAM8Iw0KQWRkIGFsbCB0aGluZ3MgeW91IHdhbnQgdG8gcnVuIGJlZm9yZSBpbXBvcnRpbmcgdGhlIG1haW4gZnVuY3Rpb24gY29kZS4NCg0KV0FSTklORzogT05MWSBwcm92aWRlIHBhdGhzIHRvIGZpbGVzIQ0KDQpBZnRlciBidWlsZGluZyB0aGUgbW9kdWxlLCB0aGlzIGZpbGUgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQsIGFkZGluZyBhbnl0aGluZyBidXQgcGF0aHMgdG8gZmlsZXMgLi4uDQotIFdpbGwgbm90IHdvcmsgYWZ0ZXIgcHVibGlzaGluZw0KLSBDb3VsZCBicmVhayB0aGUgYnVpbGQgcHJvY2Vzcw0KIz4NCg0KJG1vZHVsZVJvb3QgPSBTcGxpdC1QYXRoIChTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QpDQoNCiMgTG9hZCB0aGUgc3RyaW5ncyB1c2VkIGluIG1lc3NhZ2VzDQoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xzdHJpbmdzLnBzMSIBCaEBAAAJogEAAAajAQAADXByZWltcG9ydC5wczEGpAEAAB5pbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEJSgAAAAmmAQAACacBAAABXQEAADQAAAAGqAEAALgDPCMNClRoaXMgZmlsZSBsb2FkcyB0aGUgc3RyaW5ncyBkb2N1bWVudHMgZnJvbSB0aGUgcmVzcGVjdGl2ZSBsYW5ndWFnZSBmb2xkZXJzLg0KVGhpcyBhbGxvd3MgbG9jYWxpemluZyBtZXNzYWdlcyBhbmQgZXJyb3JzLg0KTG9hZCBwc2QxIGxhbmd1YWdlIGZpbGVzIGZvciBlYWNoIGxhbmd1YWdlIHlvdSB3aXNoIHRvIHN1cHBvcnQuDQpQYXJ0aWFsIHRyYW5zbGF0aW9ucyBhcmUgYWNjZXB0YWJsZSAtIHdoZW4gbWlzc2luZyBhIGN1cnJlbnQgbGFuZ3VhZ2UgbWVzc2FnZSwNCml0IHdpbGwgZmFsbGJhY2sgdG8gRW5nbGlzaCBvciBhbm90aGVyIGF2YWlsYWJsZSBsYW5ndWFnZS4NCiM+DQpJbXBvcnQtUFNGTG9jYWxpemVkU3RyaW5nIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcZW4tdXNcKi5wc2QxIiAtTW9kdWxlICfDvm5hbWXDvicgLUxhbmd1YWdlICdlbi1VUycBCakBAAAJqgEAAAarAQAAC3N0cmluZ3MucHMxBqwBAAAcaW50ZXJuYWxcc2NyaXB0c1xzdHJpbmdzLnBzMQlKAAAACa4BAAAJrwEAAAFeAQAANAAAAAawAQAAcTwjDQojIEV4YW1wbGU6DQpSZWdpc3Rlci1QU0ZUZXBwQXJndW1lbnRDb21wbGV0ZXIgLUNvbW1hbmQgR2V0LUFsY29ob2wgLVBhcmFtZXRlciBUeXBlIC1OYW1lIMO+bmFtZcO+LmFsY29ob2wNCiM+AQmxAQAACbIBAAAGswEAAA5hc3NpZ25tZW50LnBzMQa0AQAAHGludGVybmFsXHRlcHBcYXNzaWdubWVudC5wczEJSgAAAAm2AQAACbcBAAABXwEAADQAAAAGuAEAAKMBPCMNCiMgRXhhbXBsZToNClJlZ2lzdGVyLVBTRlRlcHBTY3JpcHRibG9jayAtTmFtZSAiw75uYW1lw74uYWxjb2hvbCIgLVNjcmlwdEJsb2NrIHsgJ0JlZXInLCdNZWFkJywnV2hpc2tleScsJ1dpbmUnLCdWb2RrYScsJ1J1bSAoM3kpJywgJ1J1bSAoNXkpJywgJ1J1bSAoN3kpJyB9DQojPgEJuQEAAAm6AQAABrsBAAAQZXhhbXBsZS50ZXBwLnBzMQa8AQAAHmludGVybmFsXHRlcHBcZXhhbXBsZS50ZXBwLnBzMQlKAAAACb4BAAAJvwEAAAFgAQAANAAAAAbAAQAAvgcjIFRhYiBFeHBhbnNpb24NCg0KIyMgRGVzY3JpcHRpb24NCg0KTW9kZXJuIFRhYiBFeHBhbnNpb24gd2FzIG9wZW5lZCB0byB1c2VycyB3aXRoIHRoZSBtb2R1bGUgYFRhYiBFeHBhbnNpb24gUGx1cyBQbHVzYCAoVEVQUCkuDQoNCkl0IGFsbG93cyB5b3UgdG8gZGVmaW5lLCB3aGF0IG9wdGlvbnMgYSB1c2VyIGlzIG9mZmVyZWQgd2hlbiB0YWJiaW5nIHRocm91Z2ggaW5wdXQgb3B0aW9ucy4gVGhpcyBjYW4gc2F2ZSBhIGxvdCBvZiB0aW1lIGZvciB0aGUgdXNlciBhbmQgaXMgY29uc2lkZXJlZCBhIGtleSBlbGVtZW50IGluIHVzZXIgZXhwZXJpZW5jZS4NCg0KVGhlIGBQU0ZyYW1ld29ya2Agb2ZmZXJzIGEgc2ltcGxpZmllZCB3YXkgb2Ygb2ZmZXJpbmcganVzdCB0aGlzLCBhcyB0aGUgdHdvIGV4YW1wbGUgZmlsZXMgc2hvdy4NCg0KIyMgQ29uY2VwdA0KDQpDdXN0b20gdGFiIGNvbXBsZXRpb24gaXMgZGVmaW5lZCBpbiB0d28gc3RlcHM6DQoNCiAtIERlZmluZSBhIHNjcmlwdGJsb2NrIHRoYXQgaXMgcnVuIHdoZW4gdGhlIHVzZXIgaGl0cyBgVEFCYCBhbmQgcHJvdmlkZXMgdGhlIHN0cmluZ3MgdGhhdCBhcmUgaGlzIG9wdGlvbnMuDQogLSBBc3NpZ24gdGhhdCBzY3JpcHRibG9jayB0byB0aGUgcGFyYW1ldGVyIG9mIGEgY29tbWFuZC4gWW91IGNhbiBhc3NpZ24gdGhlIHNhbWUgc2NyaXB0YmxvY2sgbXVsdGlwbGUgdGltZXMuDQoNCiMjIFN0cnVjdHVyZQ0KDQpJbXBvcnQgb3JkZXIgbWF0dGVycy4gSW4gb3JkZXIgdG8gbWFrZSB0aGluZ3Mgd29yayB3aXRoIHRoZSBkZWZhdWx0IHNjYWZmb2xkLCBmb2xsb3cgdGhvc2UgcnVsZXM6DQoNCiAtIEFsbCBzY3JpcHRmaWxlcyBfZGVmaW5pbmdfIGNvbXBsZXRpb24gc2NyaXB0YmxvY2tzIGxpa2UgdGhpczogYCoudGVwcC5wczFgDQogLSBQdXQgYWxsIHlvdXIgY29tcGxldGlvbiBhc3NpZ25tZW50cyBpbiBgYXNzaWdubWVudC5wczFgAQnBAQAACcIBAAAGwwEAAAlyZWFkbWUubWQGxAEAABdpbnRlcm5hbFx0ZXBwXHJlYWRtZS5tZAlKAAAACcYBAAAJxwEAAAFhAQAANAAAAAbIAQAA1QEjIERlc2NyaXB0aW9uDQoNClRoaXMgaXMgd2hlcmUgdGhlIGZ1bmN0aW9uIHRlc3RzIGdvLg0KDQpNYWtlIHN1cmUgdG8gcHV0IHRoZW0gaW4gZm9sZGVycyByZWZsZWN0aW5nIHRoZSBhY3R1YWwgbW9kdWxlIHN0cnVjdHVyZS4NCg0KSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgYW5kIHB1YmxpYyBmdW5jdGlvbnMgaGVyZS4BCckBAAAJygEAAAbLAQAACXJlYWRtZS5tZAbMAQAAGXRlc3RzXGZ1bmN0aW9uc1xyZWFkbWUubWQJSgAAAAnOAQAACc8BAAABYgEAADQAAAAG0AEAAIIGIyBMaXN0IG9mIGZvcmJpZGRlbiBjb21tYW5kcw0KJGdsb2JhbDpCYW5uZWRDb21tYW5kcyA9IEAoDQoJJ1dyaXRlLUhvc3QnDQoJJ1dyaXRlLVZlcmJvc2UnDQoJJ1dyaXRlLVdhcm5pbmcnDQoJJ1dyaXRlLUVycm9yJw0KCSdXcml0ZS1PdXRwdXQnDQoJJ1dyaXRlLUluZm9ybWF0aW9uJw0KCSdXcml0ZS1EZWJ1ZycNCgkNCgkjIFVzZSBDSU0gaW5zdGVhZCB3aGVyZSBwb3NzaWJsZQ0KCSdHZXQtV21pT2JqZWN0Jw0KCSdJbnZva2UtV21pTWV0aG9kJw0KCSdSZWdpc3Rlci1XbWlFdmVudCcNCgknUmVtb3ZlLVdtaU9iamVjdCcNCgknU2V0LVdtaUluc3RhbmNlJw0KDQoJIyBVc2UgR2V0LVdpbkV2ZW50IGluc3RlYWQNCgknR2V0LUV2ZW50TG9nJw0KKQ0KDQo8Iw0KCUNvbnRhaW5zIGxpc3Qgb2YgZXhjZXB0aW9ucyBmb3IgYmFubmVkIGNtZGxldHMuDQoJSW5zZXJ0IHRoZSBmaWxlIG5hbWVzIG9mIGZpbGVzIHRoYXQgbWF5IGNvbnRhaW4gdGhlbS4NCgkNCglFeGFtcGxlOg0KCSJXcml0ZS1Ib3N0IiAgPSBAKCdXcml0ZS1QU0ZIb3N0Q29sb3IucHMxJywnV3JpdGUtUFNGTWVzc2FnZS5wczEnKQ0KIz4NCiRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmQgPSBAew0KCSJXcml0ZS1Ib3N0IiAgPSBAKCkNCgkiV3JpdGUtVmVyYm9zZSIgPSBAKCkNCgkiV3JpdGUtV2FybmluZyIgPSBAKCkNCgkiV3JpdGUtRXJyb3IiICA9IEAoKQ0KCSJXcml0ZS1PdXRwdXQiID0gQCgpDQoJIldyaXRlLUluZm9ybWF0aW9uIiA9IEAoKQ0KCSJXcml0ZS1EZWJ1ZyIgPSBAKCkNCn0BCdEBAAAJ0gEAAAbTAQAAHEZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEG1AEAACp0ZXN0c1xnZW5lcmFsXEZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEJSgAAAAnWAQAACdcBAAABYwEAADQAAAAG2AEAAOAYJG1vZHVsZVJvb3QgPSAoUmVzb2x2ZS1QYXRoICIkZ2xvYmFsOnRlc3Ryb290XC4uIikuUGF0aA0KDQouICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMSINCg0KRGVzY3JpYmUgIlZlcmlmeWluZyBpbnRlZ3JpdHkgb2YgbW9kdWxlIGZpbGVzIiB7DQoJQmVmb3JlQWxsIHsNCgkJZnVuY3Rpb24gR2V0LUZpbGVFbmNvZGluZw0KCQl7DQoJCTwjDQoJCQkuU1lOT1BTSVMNCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLg0KCQkJDQoJCQkuREVTQ1JJUFRJT04NCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLg0KCQkJDQoJCQkuUEFSQU1FVEVSIFBhdGgNCgkJCQlUaGUgZmlsZSB0byB0ZXN0DQoJCSM+DQoJCQlbQ21kbGV0QmluZGluZygpXQ0KCQkJUGFyYW0gKA0KCQkJCVtQYXJhbWV0ZXIoTWFuZGF0b3J5ID0gJFRydWUsIFZhbHVlRnJvbVBpcGVsaW5lQnlQcm9wZXJ0eU5hbWUgPSAkVHJ1ZSldDQoJCQkJW0FsaWFzKCdGdWxsTmFtZScpXQ0KCQkJCVtzdHJpbmddDQoJCQkJJFBhdGgNCgkJCSkNCgkJCQ0KCQkJaWYgKCRQU1ZlcnNpb25UYWJsZS5QU1ZlcnNpb24uTWFqb3IgLWx0IDYpDQoJCQl7DQoJCQkJW2J5dGVbXV0kYnl0ZSA9IGdldC1jb250ZW50IC1FbmNvZGluZyBieXRlIC1SZWFkQ291bnQgNCAtVG90YWxDb3VudCA0IC1QYXRoICRQYXRoDQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJW2J5dGVbXV0kYnl0ZSA9IEdldC1Db250ZW50IC1Bc0J5dGVTdHJlYW0gLVJlYWRDb3VudCA0IC1Ub3RhbENvdW50IDQgLVBhdGggJFBhdGgNCgkJCX0NCgkJCQ0KCQkJaWYgKCRieXRlWzBdIC1lcSAweGVmIC1hbmQgJGJ5dGVbMV0gLWVxIDB4YmIgLWFuZCAkYnl0ZVsyXSAtZXEgMHhiZikgeyAnVVRGOCBCT00nIH0NCgkJCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVsxXSAtZXEgMHhmZikgeyAnVW5pY29kZScgfQ0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMCAtYW5kICRieXRlWzFdIC1lcSAwIC1hbmQgJGJ5dGVbMl0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVszXSAtZXEgMHhmZikgeyAnVVRGMzInIH0NCgkJCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDB4MmIgLWFuZCAkYnl0ZVsxXSAtZXEgMHgyZiAtYW5kICRieXRlWzJdIC1lcSAweDc2KSB7ICdVVEY3JyB9DQoJCQllbHNlIHsgJ1Vua25vd24nIH0NCgkJfQ0KCX0NCg0KCUNvbnRleHQgIlZhbGlkYXRpbmcgUFMxIFNjcmlwdCBmaWxlcyIgew0KCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIiB8IFdoZXJlLU9iamVjdCBGdWxsTmFtZSAtTm90TGlrZSAiJG1vZHVsZVJvb3RcdGVzdHNcKiINCgkJDQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykNCgkJew0KCQkJJG5hbWUgPSAkZmlsZS5GdWxsTmFtZS5SZXBsYWNlKCIkbW9kdWxlUm9vdFwiLCAnJykNCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgVVRGOCBlbmNvZGluZyB3aXRoIEJ5dGUgT3JkZXIgTWFyayIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7DQoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjggQk9NJw0KCQkJfQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyB0cmFpbGluZyBzcGFjZSIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7DQoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMH0pLkxpbmVOdW1iZXIgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJCX0NCgkJCQ0KCQkJJHRva2VucyA9ICRudWxsDQoJCQkkcGFyc2VFcnJvcnMgPSAkbnVsbA0KCQkJJGFzdCA9IFtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLkxhbmd1YWdlLlBhcnNlcl06OlBhcnNlRmlsZSgkZmlsZS5GdWxsTmFtZSwgW3JlZl0kdG9rZW5zLCBbcmVmXSRwYXJzZUVycm9ycykNCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gc3ludGF4IGVycm9ycyIgLVRlc3RDYXNlcyBAeyBwYXJzZUVycm9ycyA9ICRwYXJzZUVycm9ycyB9IHsNCgkJCQkkcGFyc2VFcnJvcnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJCX0NCgkJCQ0KCQkJZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGdsb2JhbDpCYW5uZWRDb21tYW5kcykNCgkJCXsNCgkJCQlpZiAoJGdsb2JhbDpNYXlDb250YWluQ29tbWFuZFsiJGNvbW1hbmQiXSAtbm90Y29udGFpbnMgJGZpbGUuTmFtZSkNCgkJCQl7DQoJCQkJCUl0ICJbJG5hbWVdIFNob3VsZCBub3QgdXNlICRjb21tYW5kIiAtVGVzdENhc2VzIEB7IHRva2VucyA9ICR0b2tlbnM7IGNvbW1hbmQgPSAkY29tbWFuZCB9IHsNCgkJCQkJCSR0b2tlbnMgfCBXaGVyZS1PYmplY3QgVGV4dCAtRVEgJGNvbW1hbmQgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCgkNCglDb250ZXh0ICJWYWxpZGF0aW5nIGhlbHAudHh0IGhlbHAgZmlsZXMiIHsNCgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLmhlbHAudHh0IiB8IFdoZXJlLU9iamVjdCBGdWxsTmFtZSAtTm90TGlrZSAiJG1vZHVsZVJvb3RcdGVzdHNcKiINCgkJDQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykNCgkJew0KCQkJJG5hbWUgPSAkZmlsZS5GdWxsTmFtZS5SZXBsYWNlKCIkbW9kdWxlUm9vdFwiLCAnJykNCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgVVRGOCBlbmNvZGluZyIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7DQoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjggQk9NJw0KCQkJfQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyB0cmFpbGluZyBzcGFjZSIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7DQoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMCB9IHwgTWVhc3VyZS1PYmplY3QpLkNvdW50IHwgU2hvdWxkIC1CZSAwDQoJCQl9DQoJCX0NCgl9DQp9AQnZAQAACdoBAAAG2wEAABdGaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQbcAQAAJXRlc3RzXGdlbmVyYWxcRmlsZUludGVncml0eS5UZXN0cy5wczEJSgAAAAneAQAACd8BAAABZAEAADQAAAAG4AEAAJ0FIyBMaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkDQokZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zID0gQCgNCiAgICANCikNCg0KPCMNCiAgTGlzdCBvZiBhcnJheWVkIGVudW1lcmF0aW9ucy4gVGhlc2UgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LiBBZGQgZnVsbCBuYW1lLg0KICBFeGFtcGxlOg0KDQogICJTcWxjb2xsYWJvcmF0aXZlLkRiYXRvb2xzLkNvbm5lY3Rpb24uTWFuYWdlbWVudENvbm5lY3Rpb25UeXBlW10iDQojPg0KJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMgPSBAKA0KCQ0KKQ0KDQo8Iw0KICBTb21lIHR5cGVzIG9uIHBhcmFtZXRlcnMganVzdCBmYWlsIHRoZWlyIHZhbGlkYXRpb24gbm8gbWF0dGVyIHdoYXQuDQogIEZvciB0aG9zZSBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIHNraXAgdGhlbSwgYnkgYWRkaW5nIHRoZW0gdG8gdGhpcyBoYXNodGFibGUuDQogIEFkZCBieSBmb2xsb3dpbmcgdGhpcyBjb252ZW50aW9uOiA8Y29tbWFuZCBuYW1lPiA9IEAoPGxpc3Qgb2YgcGFyYW1ldGVyIG5hbWVzPikNCiAgRXhhbXBsZToNCg0KICAiR2V0LURiYUNtT2JqZWN0IiAgICAgICA9IEAoIkRvTm90VXNlIikNCiM+DQokZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUgPSBAew0KICAgIA0KfQ0KAQnhAQAACeIBAAAG4wEAABNIZWxwLkV4Y2VwdGlvbnMucHMxBuQBAAAhdGVzdHNcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxCUoAAAAJ5gEAAAnnAQAAAWUBAAA0AAAABugBAADONDwjDQogICAgLk5PVEVTDQogICAgICAgIFRoZSBvcmlnaW5hbCB0ZXN0IHRoaXMgaXMgYmFzZWQgdXBvbiB3YXMgd3JpdHRlbiBieSBKdW5lIEJsZW5kZXIuDQoJCUFmdGVyIHNldmVyYWwgcm91bmRzIG9mIG1vZGlmaWNhdGlvbnMgaXQgc3RhbmRzIG5vdyBhcyBpdCBpcywgYnV0IHRoZSBob25vciByZW1haW5zIGhlcnMuDQoNCgkJVGhhbmsgeW91IEp1bmUsIGZvciBhbGwgeW91IGhhdmUgZG9uZSENCg0KICAgIC5ERVNDUklQVElPTg0KCQlUaGlzIHRlc3QgZXZhbHVhdGVzIHRoZSBoZWxwIGZvciBhbGwgY29tbWFuZHMgaW4gYSBtb2R1bGUuDQoNCgkuUEFSQU1FVEVSIFNraXBUZXN0DQoJCURpc2FibGVzIHRoaXMgdGVzdC4NCgkNCgkuUEFSQU1FVEVSIENvbW1hbmRQYXRoDQoJCUxpc3Qgb2YgcGF0aHMgdW5kZXIgd2hpY2ggdGhlIHNjcmlwdCBmaWxlcyBhcmUgc3RvcmVkLg0KCQlUaGlzIHRlc3QgYXNzdW1lcyB0aGF0IGFsbCBmdW5jdGlvbnMgaGF2ZSB0aGVpciBvd24gZmlsZSB0aGF0IGlzIG5hbWVkIGFmdGVyIHRoZW1zZWx2ZXMuDQoJCVRoZXNlIHBhdGhzIGFyZSB1c2VkIHRvIHNlYXJjaCBmb3IgY29tbWFuZHMgdGhhdCBzaG91bGQgZXhpc3QgYW5kIGJlIHRlc3RlZC4NCgkJV2lsbCBzZWFyY2ggcmVjdXJzaXZlbHkgYW5kIGFjY2VwdHMgd2lsZGNhcmRzLCBtYWtlIHN1cmUgb25seSBmdW5jdGlvbnMgYXJlIGZvdW5kDQoNCgkuUEFSQU1FVEVSIE1vZHVsZU5hbWUNCgkJTmFtZSBvZiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZC4NCgkJVGhlIG1vZHVsZSBtdXN0IGFscmVhZHkgYmUgaW1wb3J0ZWQNCg0KCS5QQVJBTUVURVIgRXhjZXB0aW9uc0ZpbGUNCgkJRmlsZSBpbiB3aGljaCBleGNlcHRpb25zIGFuZCBhZGp1c3RtZW50cyBhcmUgY29uZmlndXJlZC4NCgkJSW4gaXQgdGhlcmUgc2hvdWxkIGJlIHR3byBhcnJheXMgYW5kIGEgaGFzaHRhYmxlIGRlZmluZWQ6DQoJCQkkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zDQoJCQkkZ2xvYmFsOkhlbHBUZXN0RW51bWVyYXRlZEFycmF5cw0KCQkJJGdsb2JhbDpIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlDQoJCVRoZXNlIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHRoZSB0ZXN0cyBzbGlnaHRseSBpbiBjYXNlcyBvZiBuZWVkLg0KCQlTZWUgdGhlIGV4YW1wbGUgZmlsZSBmb3IgZXhwbGFuYXRpb25zIG9uIGVhY2ggb2YgdGhlc2UgdXNhZ2UgYW5kIGVmZmVjdC4NCiM+DQpbQ21kbGV0QmluZGluZygpXQ0KUGFyYW0gKA0KCVtzd2l0Y2hdDQoJJFNraXBUZXN0LA0KCQ0KCVtzdHJpbmdbXV0NCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpLA0KCQ0KCVtzdHJpbmddDQoJJE1vZHVsZU5hbWUgPSAiw75uYW1lw74iLA0KCQ0KCVtzdHJpbmddDQoJJEV4Y2VwdGlvbnNGaWxlID0gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxIg0KKQ0KaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQ0KLiAkRXhjZXB0aW9uc0ZpbGUNCg0KJGluY2x1ZGVkTmFtZXMgPSAoR2V0LUNoaWxkSXRlbSAkQ29tbWFuZFBhdGggLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiKS5CYXNlTmFtZQ0KJGNvbW1hbmRUeXBlcyA9IEAoJ0NtZGxldCcsICdGdW5jdGlvbicpDQppZiAoJFBTVmVyc2lvblRhYmxlLlBTRWRpdGlvbiAtZXEgJ0Rlc2t0b3AnICkgeyAkY29tbWFuZFR5cGVzICs9ICdXb3JrZmxvdycgfQ0KJGNvbW1hbmRzID0gR2V0LUNvbW1hbmQgLU1vZHVsZSAoR2V0LU1vZHVsZSAkTW9kdWxlTmFtZSkgLUNvbW1hbmRUeXBlICRjb21tYW5kVHlwZXMgfCBXaGVyZS1PYmplY3QgTmFtZSAtSW4gJGluY2x1ZGVkTmFtZXMNCg0KIyMgV2hlbiB0ZXN0aW5nIGhlbHAsIHJlbWVtYmVyIHRoYXQgaGVscCBpcyBjYWNoZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHNlc3Npb24uDQojIyBUbyB0ZXN0LCByZXN0YXJ0IHNlc3Npb24uDQoNCg0KZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGNvbW1hbmRzKSB7DQogICAgJGNvbW1hbmROYW1lID0gJGNvbW1hbmQuTmFtZQ0KICAgIA0KICAgICMgU2tpcCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG9uIHRoZSBleGNsdXNpb25zIGxpc3QNCiAgICBpZiAoJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucyAtY29udGFpbnMgJGNvbW1hbmROYW1lKSB7IGNvbnRpbnVlIH0NCiAgICANCiAgICAjIFRoZSBtb2R1bGUtcXVhbGlmaWVkIGNvbW1hbmQgZmFpbHMgb24gTWljcm9zb2Z0LlBvd2VyU2hlbGwuQXJjaGl2ZSBjbWRsZXRzDQogICAgJEhlbHAgPSBHZXQtSGVscCAkY29tbWFuZE5hbWUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUNCgkNCglEZXNjcmliZSAiVGVzdCBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgDQoJCSMgSWYgaGVscCBpcyBub3QgZm91bmQsIHN5bm9wc2lzIGluIGF1dG8tZ2VuZXJhdGVkIGhlbHAgaXMgdGhlIHN5bnRheCBkaWFncmFtDQoJCUl0ICJzaG91bGQgbm90IGJlIGF1dG8tZ2VuZXJhdGVkIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsNCgkJCSRIZWxwLlN5bm9wc2lzIHwgU2hvdWxkIC1Ob3QgLUJlTGlrZSAnKmBbYDxDb21tb25QYXJhbWV0ZXJzYD5gXSonDQoJCX0NCiAgICAgICAgDQoJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IGZ1bmN0aW9uDQoJCUl0ICJnZXRzIGRlc2NyaXB0aW9uIGZvciAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gew0KCQkJJEhlbHAuRGVzY3JpcHRpb24gfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQogICAgICAgIA0KCQkjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZQ0KCQlJdCAiZ2V0cyBleGFtcGxlIGNvZGUgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gew0KCQkJKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5Db2RlIHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KCQ0KCQkjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZSBkZXNjcmlwdGlvbg0KCQlJdCAiZ2V0cyBleGFtcGxlIGhlbHAgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gew0KCQkJKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQogICAgICAgIA0KICAgICAgICBDb250ZXh0ICJUZXN0IHBhcmFtZXRlciBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGNvbW1vbiA9ICdEZWJ1ZycsICdFcnJvckFjdGlvbicsICdFcnJvclZhcmlhYmxlJywgJ0luZm9ybWF0aW9uQWN0aW9uJywgJ0luZm9ybWF0aW9uVmFyaWFibGUnLCAnT3V0QnVmZmVyJywgJ091dFZhcmlhYmxlJywgJ1BpcGVsaW5lVmFyaWFibGUnLCAnVmVyYm9zZScsICdXYXJuaW5nQWN0aW9uJywgJ1dhcm5pbmdWYXJpYWJsZScNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHBhcmFtZXRlcnMgPSAkY29tbWFuZC5QYXJhbWV0ZXJTZXRzLlBhcmFtZXRlcnMgfCBTb3J0LU9iamVjdCAtUHJvcGVydHkgTmFtZSAtVW5pcXVlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLW5vdGluICRjb21tb24NCiAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lcyA9ICRwYXJhbWV0ZXJzLk5hbWUNCiAgICAgICAgICAgICRIZWxwUGFyYW1ldGVyTmFtZXMgPSAkSGVscC5QYXJhbWV0ZXJzLlBhcmFtZXRlci5OYW1lIHwgU29ydC1PYmplY3QgLVVuaXF1ZQ0KICAgICAgICAgICAgZm9yZWFjaCAoJHBhcmFtZXRlciBpbiAkcGFyYW1ldGVycykgew0KICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lID0gJHBhcmFtZXRlci5OYW1lDQogICAgICAgICAgICAgICAgJHBhcmFtZXRlckhlbHAgPSAkSGVscC5wYXJhbWV0ZXJzLnBhcmFtZXRlciB8IFdoZXJlLU9iamVjdCBOYW1lIC1FUSAkcGFyYW1ldGVyTmFtZQ0KCQkJDQoJCQkJIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgcGFyYW1ldGVyDQoJCQkJSXQgImdldHMgaGVscCBmb3IgcGFyYW1ldGVyOiAkcGFyYW1ldGVyTmFtZSA6IGluICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHAgfSB7DQoJCQkJCSRwYXJhbWV0ZXJIZWxwLkRlc2NyaXB0aW9uLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KCQkJCX0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkY29kZU1hbmRhdG9yeSA9ICRwYXJhbWV0ZXIuSXNNYW5kYXRvcnkudG9TdHJpbmcoKQ0KCQkJCUl0ICJoZWxwIGZvciAkcGFyYW1ldGVyTmFtZSBwYXJhbWV0ZXIgaW4gJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IE1hbmRhdG9yeSB2YWx1ZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IGNvZGVNYW5kYXRvcnkgPSAkY29kZU1hbmRhdG9yeSB9IHsNCgkJCQkJJHBhcmFtZXRlckhlbHAuUmVxdWlyZWQgfCBTaG91bGQgLUJlICRjb2RlTWFuZGF0b3J5DQoJCQkJfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICgkSGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZVskY29tbWFuZE5hbWVdIC1jb250YWlucyAkcGFyYW1ldGVyTmFtZSkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGNvZGVUeXBlID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLk5hbWUNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLklzRW51bSkgew0KICAgICAgICAgICAgICAgICAgICAjIEVudW1lcmF0aW9ucyBvZnRlbiBoYXZlIGlzc3VlcyB3aXRoIHRoZSB0eXBlbmFtZSBub3QgYmVpbmcgcmVsaWFibHkgYXZhaWxhYmxlDQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlKQ0KCQkJCQkJIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlDQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscDsgbmFtZXMgPSAkbmFtZXMgfSB7DQoJCQkJCQkkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMNCgkJCQkJfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5GdWxsTmFtZSAtaW4gJEhlbHBUZXN0RW51bWVyYXRlZEFycmF5cykgew0KICAgICAgICAgICAgICAgICAgICAjIEVudW1lcmF0aW9ucyBvZnRlbiBoYXZlIGlzc3VlcyB3aXRoIHRoZSB0eXBlbmFtZSBub3QgYmVpbmcgcmVsaWFibHkgYXZhaWxhYmxlDQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9IFtFbnVtXTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkRlY2xhcmVkTWVtYmVyc1swXS5SZXR1cm5UeXBlKQ0KCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gew0KCQkJCQkJJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWVHcm91cC5wYXJhbWV0ZXJWYWx1ZSB8IFNob3VsZCAtYmUgJG5hbWVzDQoJCQkJCX0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICMgVG8gYXZvaWQgY2FsbGluZyBUcmltIG1ldGhvZCBvbiBhIG51bGwgb2JqZWN0Lg0KICAgICAgICAgICAgICAgICAgICAkaGVscFR5cGUgPSBpZiAoJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUpIHsgJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUuVHJpbSgpIH0NCgkJCQkJIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlDQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IGhlbHBUeXBlID0gJGhlbHBUeXBlOyBjb2RlVHlwZSA9ICRjb2RlVHlwZSB9IHsNCgkJCQkJCSRoZWxwVHlwZSB8IFNob3VsZCAtYmUgJGNvZGVUeXBlDQoJCQkJCX0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3JlYWNoICgkaGVscFBhcm0gaW4gJEhlbHBQYXJhbWV0ZXJOYW1lcykgew0KCQkJCSMgU2hvdWxkbid0IGZpbmQgZXh0cmEgcGFyYW1ldGVycyBpbiBoZWxwLg0KCQkJCUl0ICJmaW5kcyBoZWxwIHBhcmFtZXRlciBpbiBjb2RlOiAkaGVscFBhcm0iIC1UZXN0Q2FzZXMgQHsgaGVscFBhcm0gPSAkaGVscFBhcm07IHBhcmFtZXRlck5hbWVzID0gJHBhcmFtZXRlck5hbWVzIH0gew0KCQkJCQkkaGVscFBhcm0gLWluICRwYXJhbWV0ZXJOYW1lcyB8IFNob3VsZCAtQmUgJHRydWUNCgkJCQl9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9AQnpAQAACeoBAAAG6wEAAA5IZWxwLlRlc3RzLnBzMQbsAQAAHHRlc3RzXGdlbmVyYWxcSGVscC5UZXN0cy5wczEJSgAAAAnuAQAACe8BAAABZgEAADQAAAAG8AEAAMsVRGVzY3JpYmUgIlZhbGlkYXRpbmcgdGhlIG1vZHVsZSBtYW5pZmVzdCIgew0KCSRtb2R1bGVSb290ID0gKFJlc29sdmUtUGF0aCAiJGdsb2JhbDp0ZXN0cm9vdFwuLiIpLlBhdGgNCgkkbWFuaWZlc3QgPSAoKEdldC1Db250ZW50ICIkbW9kdWxlUm9vdFzDvm5hbWXDvi5wc2QxIikgLWpvaW4gImBuIikgfCBJbnZva2UtRXhwcmVzc2lvbg0KCUNvbnRleHQgIkJhc2ljIHJlc291cmNlcyB2YWxpZGF0aW9uIiB7DQoJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiDQoJCUl0ICJFeHBvcnRzIGFsbCBmdW5jdGlvbnMgaW4gdGhlIHB1YmxpYyBmb2xkZXIiIC1UZXN0Q2FzZXMgQHsgZmlsZXMgPSAkZmlsZXM7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gew0KCQkJDQoJCQkkZnVuY3Rpb25zID0gKENvbXBhcmUtT2JqZWN0IC1SZWZlcmVuY2VPYmplY3QgJGZpbGVzLkJhc2VOYW1lIC1EaWZmZXJlbmNlT2JqZWN0ICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFdoZXJlLU9iamVjdCBTaWRlSW5kaWNhdG9yIC1MaWtlICc8PScpLklucHV0T2JqZWN0DQoJCQkkZnVuY3Rpb25zIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCX0NCgkJSXQgIkV4cG9ydHMgbm8gZnVuY3Rpb24gdGhhdCBpc24ndCBhbHNvIHByZXNlbnQgaW4gdGhlIHB1YmxpYyBmb2xkZXIiIC1UZXN0Q2FzZXMgQHsgZmlsZXMgPSAkZmlsZXM7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gew0KCQkJJGZ1bmN0aW9ucyA9IChDb21wYXJlLU9iamVjdCAtUmVmZXJlbmNlT2JqZWN0ICRmaWxlcy5CYXNlTmFtZSAtRGlmZmVyZW5jZU9iamVjdCAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBXaGVyZS1PYmplY3QgU2lkZUluZGljYXRvciAtTGlrZSAnPT4nKS5JbnB1dE9iamVjdA0KCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJCQ0KCQlJdCAiRXhwb3J0cyBub25lIG9mIGl0cyBpbnRlcm5hbCBmdW5jdGlvbnMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsNCgkJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiDQoJCQkkZmlsZXMgfCBXaGVyZS1PYmplY3QgQmFzZU5hbWUgLUluICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJfQ0KCQ0KCUNvbnRleHQgIkluZGl2aWR1YWwgZmlsZSB2YWxpZGF0aW9uIiB7DQoJCUl0ICJUaGUgcm9vdCBtb2R1bGUgZmlsZSBleGlzdHMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsNCgkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJCgkbWFuaWZlc3QuUm9vdE1vZHVsZSkiIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KCQl9DQoJCQ0KCQlmb3JlYWNoICgkZm9ybWF0IGluICRtYW5pZmVzdC5Gb3JtYXRzVG9Qcm9jZXNzKQ0KCQl7DQoJCQlJdCAiVGhlIGZpbGUgJGZvcm1hdCBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBmb3JtYXQgPSAkZm9ybWF0IH0gew0KCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGZvcm1hdCIgfCBTaG91bGQgLUJlICR0cnVlDQoJCQl9DQoJCX0NCgkJDQoJCWZvcmVhY2ggKCR0eXBlIGluICRtYW5pZmVzdC5UeXBlc1RvUHJvY2VzcykNCgkJew0KCQkJSXQgIlRoZSBmaWxlICR0eXBlIHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IHR5cGUgPSAkdHlwZSB9IHsNCgkJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCR0eXBlIiB8IFNob3VsZCAtQmUgJHRydWUNCgkJCX0NCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJGFzc2VtYmx5IGluICRtYW5pZmVzdC5SZXF1aXJlZEFzc2VtYmxpZXMpDQoJCXsNCiAgICAgICAgICAgIGlmICgkYXNzZW1ibHkgLWxpa2UgIiouZGxsIikgew0KICAgICAgICAgICAgICAgIEl0ICJUaGUgZmlsZSAkYXNzZW1ibHkgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgYXNzZW1ibHkgPSAkYXNzZW1ibHkgfSB7DQogICAgICAgICAgICAgICAgICAgIFRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGFzc2VtYmx5IiB8IFNob3VsZCAtQmUgJHRydWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBJdCAiVGhlIGZpbGUgJGFzc2VtYmx5IHNob3VsZCBsb2FkIGZyb20gdGhlIEdBQyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IGFzc2VtYmx5ID0gJGFzc2VtYmx5IH0gew0KICAgICAgICAgICAgICAgICAgICB7IEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgJGFzc2VtYmx5IH0gfCBTaG91bGQgLU5vdCAtVGhyb3cNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCgkJDQoJCWZvcmVhY2ggKCR0YWcgaW4gJG1hbmlmZXN0LlByaXZhdGVEYXRhLlBTRGF0YS5UYWdzKQ0KCQl7DQoJCQlJdCAiVGFncyBzaG91bGQgaGF2ZSBubyBzcGFjZXMgaW4gbmFtZSIgLVRlc3RDYXNlcyBAeyB0YWcgPSAkdGFnIH0gew0KCQkJCSR0YWcgLW1hdGNoICIgIiB8IFNob3VsZCAtQmUgJGZhbHNlDQoJCQl9DQoJCX0NCgl9DQp9AQnxAQAACfIBAAAG8wEAABJNYW5pZmVzdC5UZXN0cy5wczEG9AEAACB0ZXN0c1xnZW5lcmFsXE1hbmlmZXN0LlRlc3RzLnBzMQlKAAAACfYBAAAJ9wEAAAFnAQAANAAAAAb4AQAAlglbQ21kbGV0QmluZGluZygpXQ0KUGFyYW0gKA0KCVtzd2l0Y2hdDQoJJFNraXBUZXN0LA0KCQ0KCVtzdHJpbmdbXV0NCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpDQopDQoNCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0NCg0KJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQoNCkRlc2NyaWJlICdJbnZva2luZyBQU1NjcmlwdEFuYWx5emVyIGFnYWluc3QgY29tbWFuZGJhc2UnIHsNCgkkY29tbWFuZEZpbGVzID0gZm9yZWFjaCAoJHBhdGggaW4gJENvbW1hbmRQYXRoKSB7DQogICAgICAgIEdldC1DaGlsZEl0ZW0gLVBhdGggJHBhdGggLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiDQogICAgfQ0KCSRzY3JpcHRBbmFseXplclJ1bGVzID0gR2V0LVNjcmlwdEFuYWx5emVyUnVsZQ0KCQ0KCWZvcmVhY2ggKCRmaWxlIGluICRjb21tYW5kRmlsZXMpDQoJew0KCQlDb250ZXh0ICJBbmFseXppbmcgJCgkZmlsZS5CYXNlTmFtZSkiIHsNCgkJCSRhbmFseXNpcyA9IEludm9rZS1TY3JpcHRBbmFseXplciAtUGF0aCAkZmlsZS5GdWxsTmFtZSAtRXhjbHVkZVJ1bGUgUFNBdm9pZFRyYWlsaW5nV2hpdGVzcGFjZSwgUFNTaG91bGRQcm9jZXNzDQoJCQkNCgkJCWZvckVhY2ggKCRydWxlIGluICRzY3JpcHRBbmFseXplclJ1bGVzKQ0KCQkJew0KCQkJCUl0ICJTaG91bGQgcGFzcyAkcnVsZSIgLVRlc3RDYXNlcyBAeyBhbmFseXNpcyA9ICRhbmFseXNpczsgcnVsZSA9ICRydWxlIH0gew0KCQkJCQlJZiAoJGFuYWx5c2lzLlJ1bGVOYW1lIC1jb250YWlucyAkcnVsZSkNCgkJCQkJew0KCQkJCQkJJGFuYWx5c2lzIHwgV2hlcmUtT2JqZWN0IFJ1bGVOYW1lIC1FUSAkcnVsZSAtb3V0dmFyaWFibGUgZmFpbHVyZXMgfCBGb3JFYWNoLU9iamVjdCB7ICRudWxsID0gJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyLkFkZCgkXykgfQ0KCQkJCQkJDQoJCQkJCQkxIHwgU2hvdWxkIC1CZSAwDQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkwIHwgU2hvdWxkIC1CZSAwDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9AQn5AQAACfoBAAAG+wEAABpQU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQb8AQAAKHRlc3RzXGdlbmVyYWxcUFNTY3JpcHRBbmFseXplci5UZXN0cy5wczEJSgAAAAn+AQAACf8BAAABaAEAADQAAAAGAAIAAOYHJGV4Y2VwdGlvbnMgPSBAeyB9DQoNCjwjDQpBIGxpc3Qgb2YgZW50cmllcyB0aGF0IE1BWSBiZSBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMsIHdpdGhvdXQgY2F1c2luZyB0aGUgdGVzdHMgdG8gZmFpbC4NClRoaXMgaXMgY29tbW9ubHkgdXNlZCBpbiBtb2R1bGVzIHRoYXQgZ2VuZXJhdGUgbG9jYWxpemVkIG1lc3NhZ2VzIHN0cmFpZ2h0IGZyb20gQyMuDQpTcGVjaWZ5IHRoZSBmdWxsIGtleSBhcyBpdCBpcyB3cml0dGVuIGluIHRoZSBsYW5ndWFnZSBmaWxlcywgZG8gbm90IHByZXBlbmQgdGhlIG1vZHVsZW5hbWUsDQphcyB5b3Ugd291bGQgaGF2ZSB0byBpbiBDIyBjb2RlLg0KDQpFeGFtcGxlOg0KJGV4Y2VwdGlvbnNbJ0xlZ2FsU3VycGx1cyddID0gQCgNCiAgICAnRXhjZXB0aW9uLlN0cmVhbXMuRmFpbGVkQ3JlYXRlJw0KICAgICdFeGNlcHRpb24uU3RyZWFtcy5GYWlsZWREaXNwb3NlJw0KKQ0KIz4NCiRleGNlcHRpb25zWydMZWdhbFN1cnBsdXMnXSA9IEAoDQoNCikNCjwjDQpBIGxpc3Qgb2YgZW50cmllcyB0aGF0IE1BWSBiZSB1c2VkIHdpdGhvdXQgbmVlZGluZyB0byBoYXZlIHRleHQgZGVmaW5lZC4NClRoaXMgaXMgaW50ZW5kZWQgZm9yIG1vZHVsZXMgKHJlLSl1c2luZyBzdHJpbmdzIHByb3ZpZGVkIGJ5IGFub3RoZXIgbW9kdWxlDQojPg0KJGV4Y2VwdGlvbnNbJ05vVGV4dE5lZWRlZCddID0gQCgNCgknVmFsaWRhdGUuRlNQYXRoJw0KCSdWYWxpZGF0ZS5GU1BhdGguRmlsZScNCgknVmFsaWRhdGUuRlNQYXRoLkZpbGVPclBhcmVudCcNCgknVmFsaWRhdGUuRlNQYXRoLkZvbGRlcicNCgknVmFsaWRhdGUuUGF0aCcNCgknVmFsaWRhdGUuUGF0aC5Db250YWluZXInDQoJJ1ZhbGlkYXRlLlBhdGguTGVhZicNCgknVmFsaWRhdGUuVGltZVNwYW4uUG9zaXRpdmUnDQoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZScNCgknVmFsaWRhdGUuVXJpLkFic29sdXRlLkZpbGUnDQoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZS5IdHRwcycNCikNCg0KJGV4Y2VwdGlvbnMBCQECAAAJAgIAAAYDAgAAFnN0cmluZ3MuRXhjZXB0aW9ucy5wczEGBAIAACR0ZXN0c1xnZW5lcmFsXHN0cmluZ3MuRXhjZXB0aW9ucy5wczEJSgAAAAkGAgAACQcCAAABaQEAADQAAAAGCAIAAJcIPCMNCi5ERVNDUklQVElPTg0KICAgIFRoaXMgdGVzdCB2ZXJpZmllcywgdGhhdCBhbGwgc3RyaW5ncyB0aGF0IGhhdmUgYmVlbiB1c2VkLA0KICAgIGFyZSBsaXN0ZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGVzIGFuZCB0aHVzIGhhdmUgYSBtZXNzYWdlIGJlaW5nIGRpc3BsYXllZC4NCg0KICAgIEl0IGFsc28gY2hlY2tzLCB3aGV0aGVyIHRoZSBsYW5ndWFnZSBmaWxlcyBoYXZlIG9ycGhhbmVkIGVudHJpZXMgdGhhdCBuZWVkIGNsZWFuaW5nIHVwLg0KIz4NCg0KDQoNCkRlc2NyaWJlICJUZXN0aW5nIGxvY2FsaXphdGlvbiBzdHJpbmdzIiB7DQoJJG1vZHVsZVJvb3QgPSAoR2V0LU1vZHVsZSDDvm5hbWXDvikuTW9kdWxlQmFzZQ0KCSRzdHJpbmdzUmVzdWx0cyA9IEV4cG9ydC1QU01EU3RyaW5nIC1Nb2R1bGVSb290ICRtb2R1bGVSb290DQoJJGV4Y2VwdGlvbnMgPSAmICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcc3RyaW5ncy5FeGNlcHRpb25zLnBzMSINCgkNCglmb3JlYWNoICgkc3RyaW5nRW50cnkgaW4gJHN0cmluZ3NSZXN1bHRzKSB7DQogICAgICAgIGlmICgkc3RyaW5nRW50cnkuU3RyaW5nIC1lcSAia2V5IikgeyBjb250aW51ZSB9ICMgU2tpcHBpbmcgdGhlIHRlbXBsYXRlIGRlZmF1bHQgZW50cnkNCgkJSXQgIlNob3VsZCBiZSB1c2VkICYgaGF2ZSB0ZXh0OiAkKCRzdHJpbmdFbnRyeS5TdHJpbmcpIiAtVGVzdENhc2VzIEB7IHN0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</BA> </MS> </Obj> </Objs> |