"use strict"; /*--------------------------------------------------------------------------------------------- * Licensed to the .NET Foundation under one or more agreements. * The .NET Foundation licenses this file to you under the MIT license. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); exports.settingsInfoContent = void 0; /** * Comprehensive information for the AI agent about the .NET Install Tool extension. * This explains settings, architecture, installation types, and useful tricks. * * Extracted into its own file to keep LanguageModelTools.ts focused on tool logic. */ exports.settingsInfoContent = ` # .NET Install Tool - Guide ## Overview The .NET Install Tool is a VS Code extension that manages .NET installations. It serves two distinct purposes: 1. **For VS Code Extensions**: Automatically installs .NET runtimes that other extensions (C#, C# DevKit, Unity, Bicep, etc.) need to run their internal components 2. **For Users**: Provides commands to find and install .NET SDKs system-wide for development --- ## Installation Types ### LOCAL (Extension-Managed) Runtime Installs - Small, isolated .NET runtime installs stored in VS Code's extension data folder - NOT on the system PATH, NOT visible via \`dotnet --list-runtimes\` - Used solely by VS Code extensions to run their internal components - Auto-managed; users rarely need to interact with these - The extension's uninstall list ONLY shows these local installs for runtimes ### GLOBAL/Admin SDK Installs (system-wide) - System-wide .NET SDK installs (includes runtimes) - Typical Locations: Windows: \`%ProgramFiles%\\dotnet\` (admin required) | macOS: \`/usr/local/share/dotnet\` (.pkg) | Linux: \`/usr/lib/dotnet\` or \`/usr/share/dotnet\` (package manager; officially supported: Ubuntu + RHEL; community distros may work; WSL is not supported) - Requires administrator/sudo privileges; users must accept elevation prompts - IS on the system PATH after installation - Visible via \`dotnet --list-sdks\` and \`dotnet --list-runtimes\` - Use "Install .NET SDK System-Wide" command for this --- ## existingDotnetPath Setting (Commonly Misunderstood) ### What It Does Controls which .NET runtime VS Code **extensions** use to run their internal components. ### What It Does NOT Do - Does NOT change what .NET the user's code runs on - Does NOT affect \`dotnet build\` or \`dotnet run\` commands - Does NOT change a project's target framework ### When Users Need This - Extensions fail to start with "could not find .NET runtime" errors - Corporate/restricted environments where the extension cannot auto-download .NET - Air-gapped machines without internet or PowerShell script execution restrictions - User wants extensions to use a specific pre-installed .NET version **IMPORTANT:** If a user wants to pin which SDK their PROJECT uses (for \`dotnet build\`, \`dotnet run\`, etc.), existingDotnetPath is the WRONG setting. They should use \`global.json\` instead — see the "I want to use a local/repo-specific SDK" scenario below. Setting names and formats: - \`dotnetAcquisitionExtension.existingDotnetPath\` — per-extension: \`\`\`json [{ "extensionId": "ms-dotnettools.csharp", "path": "C:\\\\Program Files\\\\dotnet\\\\dotnet.exe" }] \`\`\` - \`dotnetAcquisitionExtension.sharedExistingDotnetPath\` — all extensions: \`\`\`json "C:\\\\Program Files\\\\dotnet\\\\dotnet.exe" \`\`\` --- ## How to See What's Installed **Extension-Managed Local Installs:** Run the "Uninstall .NET" command — the dropdown shows all extension-managed installs. **System-Wide Global Installs:** Run \`dotnet --list-sdks\` and \`dotnet --list-runtimes\` in terminal, or use the listInstalledVersions tool. **listInstalledVersions Tool:** Calls \`dotnet.availableInstalls\` to scan SDKs/runtimes for a given dotnet executable. If no path provided, it uses PATH (typically global install). Returns version, architecture, and directory for each install. --- ## Uninstall Notes - The uninstall list only shows extension-managed installs, not system-wide ones - **Trick:** To uninstall a global SDK not in the list, first install the SAME version via the extension (this registers it), then it appears in the uninstall list - Global SDK uninstall requires the same admin/elevated privileges as installing --- ## Version Selection Check \`global.json\` first — if present, install \`sdk.version\` (respecting rollForward). Otherwise, latest LTS. SDK and runtime share major.minor but differ in patch: | SDK | Includes Runtime | |---------|-----------------| | 8.0.100 | 8.0.0 | | 8.0.204 | 8.0.4 | Installing an SDK always includes the corresponding runtime. --- ## global.json paths (.NET 10+) For repo-local SDK resolution, use the \`paths\` property in global.json: \`\`\`json { "sdk": { "version": "10.0.100", "paths": [".dotnet", "$host$"] } } \`\`\` - First matching SDK wins - Only works with SDK commands (\`dotnet run\`, \`dotnet build\`), NOT with native apphost - The host \`dotnet\` must be .NET 10+ - Ref: https://learn.microsoft.com/dotnet/core/tools/global-json#paths --- ## Common Scenarios - **"I want to develop .NET applications"** - Install an SDK globally via "Install .NET SDK System-Wide." This provides the \`dotnet\` CLI for build, run, test, and publish. - **"I want a local/repo-specific SDK (not global)"** - Use the \`paths\` property in global.json (.NET 10+ required) — see section above. DO NOT use existingDotnetPath. - **"C# extension won't start / can't find .NET"** → Check \`dotnet --info\` in terminal. If missing, install SDK globally. If a RUNTIME is installed but not detected, set existingDotnetPath or sharedExistingDotnetPath. - **"Extension installed .NET but I can't use it in terminal"** - Extension-managed runtimes are LOCAL and not on PATH. For terminal/CLI usage, install globally. - **"I want to use a different .NET version for my project"** - NOT existingDotnetPath. Create \`global.json\` in the project root or install the desired SDK globally. - **"Which dotnet does the C# extension use?"** - Use the findDotNetPath tool. It searches in order: existingDotnetPath setting - PATH - DOTNET_ROOT - extension-managed local installs. --- ## Additional Settings - **installTimeoutValue**: Seconds to wait for downloads (default: 600). Increase for slow connections. - **proxyUrl**: HTTP proxy URL for corporate firewalls. --- ## .NET Hives Architecture .NET supports multiple installation "hives" (locations). Extension-managed local installs do not conflict with global system installs. - The \`dotnet\` executable typically only sees installs in its own folder - \`dotnet.findPath\` shows which hive extensions like C# DevKit will use - \`dotnet.availableInstalls\` lists installs in a specific hive when given an executable path `; //# sourceMappingURL=SettingsInfoContent.js.map // SIG // Begin signature block // SIG // MIIpZgYJKoZIhvcNAQcCoIIpVzCCKVMCAQExDzANBglg // SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor // SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC // SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg // SIG // 7nMqSGwZslPefCM2xYqey8hN3lZdgIReehAuWjGchRag // SIG // gg3WMIIGvTCCBKWgAwIBAgITMwAAABxIn4HfobC3dwAA // SIG // AAAAHDANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMC // SIG // VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT // SIG // B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw // SIG // b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3Qg // SIG // Q2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjQw // SIG // ODA4MjEzNjIzWhcNMzUwNjIzMjIwNDAxWjBfMQswCQYD // SIG // VQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv // SIG // cmF0aW9uMTAwLgYDVQQDEydNaWNyb3NvZnQgV2luZG93 // SIG // cyBDb2RlIFNpZ25pbmcgUENBIDIwMjQwggIiMA0GCSqG // SIG // SIb3DQEBAQUAA4ICDwAwggIKAoICAQCafWt9J8F2Ki6u // SIG // 49U0/8wrbe78VPggo/uwZIn0vwdoFyhlOzlfUl0SRj9c // SIG // hbOaeo6bGIuHGMxeegFdABJphI1fME9pbz1OQYTd8Fd9 // SIG // B6mDyGBI+T91l39JFw/X741H9RgLVxK4ifMOwCzWlRJv // SIG // UbOHjwNGbGB2gm1OZAVCUA17++oWnznEIHRQgNyN82LX // SIG // 819rzsMfO7gzmgrsijkWYofXN803/kywuUGC8oVTAZw1 // SIG // xBwzq72sPdg0siKqXYEVqbn86gxctXoFY5KF2YW/vaWf // SIG // YXlMzV014TqF83sYemMwC+H5QVpvgXNYUMhEnpxLwSc5 // SIG // 1ftubt4e+444DFGOOPll0OLvanXQ3v1OUngGikb74m5o // SIG // uM+0EaS72bJWtAj4jlBs9NA6ObH5AtBMJbEs3zN/vAPa // SIG // 7MhVToFg1T87ffDiT9hKGhDqvBhPRgqDdou/+AthQsH3 // SIG // 9QUgkyVmTtVnK9jLXiROlMRlfooQPJzedWDyg9nWBqHs // SIG // K170cwv9R6FHkr5WX9Jn/RhxLb75GyVUUaOjwX9Jnebf // SIG // O1W9ZjP3yKdXsqcmsZl5IKXAcLspbDqtpElTiecAT6Gh // SIG // LLCZHjHCpxLrrvvlCnQx5UtA7bGIzdEJzrnL03UrHb4c // SIG // yjkoyRd11aq/X9gveOS10+a8SiB1CBAwXDWFOgSgwx+q // SIG // 36SjjgkopQIDAQABo4IBRjCCAUIwDgYDVR0PAQH/BAQD // SIG // AgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBQe // SIG // gt8O14yz1wI0gw7aq61lua+47DAZBgkrBgEEAYI3FAIE // SIG // DB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8G // SIG // A1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG // SIG // A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z // SIG // b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl // SIG // ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO // SIG // MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z // SIG // b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw // SIG // MTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBD // SIG // X/jfP7vplIw7XPW7aAOdkQXNF1Q0gTEATKsbueoVxwcL // SIG // nLVFrNVwagwzCBQh7vXOmP1BfkzfBCII57owKSmJhz+H // SIG // +BDNwEUppc66ReaMzicdAQORVL9Y5qXX/9mW6qbwsZcb // SIG // /xtUeCo60ppqjx87OooMN2+0U24+wcSEvHziJMGFkIQd // SIG // ny45YPtx0qwxjxSIaSCVlWpjCEe2u9jhqJ43X+Oa7KcK // SIG // iB7sp2VOGr8va7gf0YYW8JvnzG/ATHnCGk5pKIcfxGWe // SIG // RjVnDeqE2FtxtgTNwd2M51pJfbeLIT+tHzLnvtpLHRxl // SIG // khPBFU3UphlHY9I61HOOpRlRSSEhd/zMXMZ5TXj9Socq // SIG // /mc0+BLbPyO5rn6Wi5y2pczEdsyLoRjgFlrMHrG47Rc5 // SIG // FVBYA0dklvdNyNFypWzxAOqvHqRxifa6MYfOZ7BCnATV // SIG // MOEnKevCgqkqRQWiosldbJHfpfFOdFjXjzG/Qc89DnwE // SIG // mpfL+bEBvg1tNZDfiPkSlCGzOSOdMCY4h8pkBTQ7G6Gx // SIG // cfSPeZghBD1O31Gd1U/xzlFW5Jl+5bSAv3kALuRjvH7v // SIG // nHhEzMm726MVDOHWDQvj86KFMX5gtA7ikcAdtW1/fmnL // SIG // iAZMSJuBHdztfcNVS6AO1DTlLie8+jUNlv/qu3J3zj5d // SIG // kFS+KpYAm5VE9r5kKZZVdzCCBxEwggT5oAMCAQICEzMA // SIG // AAEj1Y8CQwYD7i4AAAAAASMwDQYJKoZIhvcNAQEMBQAw // SIG // XzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m // SIG // dCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0 // SIG // IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0MB4X // SIG // DTI2MDMwNTE5NTgyNloXDTI3MDMwMzE5NTgyNlowdDEL // SIG // MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x // SIG // EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv // SIG // c29mdCBDb3Jwb3JhdGlvbjEeMBwGA1UEAxMVTWljcm9z // SIG // b2Z0IENvcnBvcmF0aW9uMIICIjANBgkqhkiG9w0BAQEF // SIG // AAOCAg8AMIICCgKCAgEA0aHw4cqjafYpVNgzOgrXKtRf // SIG // d9bEgMnzBJkd3BP36auAteUkGKDUX8kNWF5nI7X1o2gA // SIG // eA7Kq/qaNEOiF0hERd9f5XgrYkbT60vP9U/RQPQHjlE2 // SIG // hWMqh0c9TODFXk8LvPWR6PcUduklUJjh2xVi4p2c5QVf // SIG // VlCcX89EzTHVsAF88Z2PZ5Z/BZ92NAZwl1PFd8I3gggM // SIG // aKjNL9oDxtuXjZ+uuYL+2bd84d70GIQ5G+PIVyT4uA7w // SIG // q6QVcAndCL9koLeKn7Z+Uk8qoXbuVlqr2vqZPkmu9Q2/ // SIG // TgMumy+uNGxps5VHpNSwD/exMvHsZdHPWs5ixEAfe6uC // SIG // Ub4QknnowTPemvGOnHK634YP4WSRDpGtXiAycQrinWWl // SIG // gnnNL/le6CN0UrSbtQRHBfXeBUGg0mlgwGw8al1JtXx1 // SIG // CfV6pMtcn7aU3yhcN/4KrMl1eODxOxFR8MEwgBhOWfrJ // SIG // F0beBxB7iIXDhsSBWx95wJeSrxcaKUbNsxMb4dloXlvD // SIG // 7u/bK922mppUANr+JPRaiZeJNUX8DuXtP/Qisg2enHJP // SIG // 5VfMxzOzybTbUFB3NRaMme/BkpV+lBYicQ1s1Mz2yBzH // SIG // FeD0gVfPzu27OYf28a9weD8YyKVlM7WYc1wYVPb4VI0I // SIG // Dl+WS1e25kifiK8bWjfucNjbHsLfTfpn1FBcigL9/LkC // SIG // AwEAAaOCAa8wggGrMA4GA1UdDwEB/wQEAwIHgDAfBgNV // SIG // HSUEGDAWBgorBgEEAYI3PQYBBggrBgEFBQcDAzAMBgNV // SIG // HRMBAf8EAjAAMB0GA1UdDgQWBBTZY+x9pGbaYjJs+ecI // SIG // oKI1pFmWUjBFBgNVHREEPjA8pDowODEeMBwGA1UECxMV // SIG // TWljcm9zb2Z0IENvcnBvcmF0aW9uMRYwFAYDVQQFEw0y // SIG // MzA4NjUrNTA2OTU2MB8GA1UdIwQYMBaAFB6C3w7XjLPX // SIG // AjSDDtqrrWW5r7jsMGoGA1UdHwRjMGEwX6BdoFuGWWh0 // SIG // dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js // SIG // L01pY3Jvc29mdCUyMFdpbmRvd3MlMjBDb2RlJTIwU2ln // SIG // bmluZyUyMFBDQSUyMDIwMjQuY3JsMHcGCCsGAQUFBwEB // SIG // BGswaTBnBggrBgEFBQcwAoZbaHR0cDovL3d3dy5taWNy // SIG // b3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQl // SIG // MjBXaW5kb3dzJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0El // SIG // MjAyMDI0LmNydDANBgkqhkiG9w0BAQwFAAOCAgEALuml // SIG // Wq89UW+f/XgA/aBzsEEuIw5J2wWJw8C3IDMv4ffeZJ7j // SIG // y+v+StF0lCAlK41N/2y+elA9bVcF7EXoaxzJEZIDjEJP // SIG // u3h/l76enMsk8cICDO8cuWEn91ZiQ9xiPO5ZBlKjxRTq // SIG // hlo82XN3v1EFO1WzeBJYeMyXijnaJFzbhN2uVNZQK9YZ // SIG // w+lqXyBztp8xlB1UlwyzJLVijDvPaTIC4egVx3cdXALY // SIG // froJfOrHVwvlcQkCdvGtibzauUUHBARLqkiEnt/2EVmE // SIG // U0i6oZ/Hmr+JSuJ/t35wMtm5s++me1Cfdl+SoE2hw/q/ // SIG // HL15rLBR91Gzo+hLRPnOEjzWhXSFFhicmQYS204YZYdU // SIG // JW04NF+OxoSPPamf5cbmHhA2Gzxmg68vyqTKFEMVPpeP // SIG // YkOs3ZFkjxnMweGQ1UUq5A6s9iu9LSLxWs/GHzIc08uY // SIG // YTDRr6JwnILmhU4FLMa/jq7xglmnTlf6WdwXEWnyrwQ1 // SIG // /p3stxxXFAciN1T8yFO7GqFG3Lo6k1QOhnjUsm6PACPu // SIG // 9faJgTm8n9pa4mW/Wtv6FXuUoioR/wQ0FZ/teENulMa1 // SIG // AP/M1TpcyUuXiUGIZBzPYf2NjZ5q9sS7RTdL1v2mne4t // SIG // dOHVUWkyzAc2yiJQgTq7gYzPO360HNjXH2+SpnuLvaOh // SIG // kFWX95FcvqfLr/GIJ0ExghroMIIa5AIBATB2MF8xCzAJ // SIG // BgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y // SIG // cG9yYXRpb24xMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5k // SIG // b3dzIENvZGUgU2lnbmluZyBQQ0EgMjAyNAITMwAAASPV // SIG // jwJDBgPuLgAAAAABIzANBglghkgBZQMEAgEFAKCBrjAZ // SIG // BgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEE // SIG // AYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0B // SIG // CQQxIgQgeCPjuxYbrqhR0TDXv6N2yj7/VOcZppQSSc8j // SIG // cIVxwVgwQgYKKwYBBAGCNwIBDDE0MDKgFIASAE0AaQBj // SIG // AHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9z // SIG // b2Z0LmNvbTANBgkqhkiG9w0BAQEFAASCAgA14wV6BJYf // SIG // pk6GUTbicFiUorT1hUHKfAdBoOLOapn5cSXFF6DWOxE9 // SIG // J4zEuL+osxSd3uyJPAMhdCH018CiddNqDgsmkg1YYU5W // SIG // VTkgbFFrOg/R6+70yrNsMz/fc0FMJlMKayELO8r+1Kvb // SIG // QSKZdvnMzZULFKe6LtbLTGAc4fo/czoCzXsow4/EVv/z // SIG // a6iT7R021k2TUtJed5sF8vA8yOB+4zfmBuntxFXiEBIe // SIG // dh70N4R0ZeS9iYDEmQRm83+X9+4b1htSD/XLJpKMOfZT // SIG // 7iadGVk0ZdFqvqxdReUz2RKYzLFpInV0Tep1JtvPLO5M // SIG // XVivcSG1D7YzU6pRIh+vtP4Uv4/gdm5irW/b1ncspLTj // SIG // UEjVLoYqvDe4IgQ4gPm4QctjjNAYRRTb/Ph/Gy1tSfDQ // SIG // Po9hKIqbpM/BHFJLFP31FQmooa0ZcKtkes7xuX4su+5A // SIG // N8Ht18kftVUdF28W4cL48H99DFtIrgGMmMVoBAEyN5uI // SIG // vEzTjGVsFBcNOX46HXKdJ/6cz/mZh84jOUSlbMx51NPE // SIG // MaogitdsIjELIEB5eIjHJJOMDlQsnycNDX5MP6eXybNx // SIG // ge5vLyDpahxrCDdPz2uOb3/4Wqc6D4kJszmA3VLTY8Pu // SIG // qwGuSBkleOosCrsq8CL3cV19+iQicLNs8XkC/ZcBMdP/ // SIG // TF2erRYiHx2qwaGCF5IwgheOBgorBgEEAYI3AwMBMYIX // SIG // fjCCF3oGCSqGSIb3DQEHAqCCF2swghdnAgEDMQ8wDQYJ // SIG // YIZIAWUDBAIBBQAwggFQBgsqhkiG9w0BCRABBKCCAT8E // SIG // ggE7MIIBNwIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFl // SIG // AwQCAQUABCBQD5OJu3qkng+1GMhQH8vRPU6BqqfIHrGo // SIG // hzhmbMVRWAIGah9Man2PGBEyMDI2MDYxMDAwMDUyMC44 // SIG // WjAEgAIB9KCB0aSBzjCByzELMAkGA1UEBhMCVVMxEzAR // SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v // SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv // SIG // bjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3Bl // SIG // cmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNO // SIG // OkE5MzUtMDNFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3Nv // SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNloIIR6jCCByAwggUI // SIG // oAMCAQICEzMAAAIn1cCDw7EuVy0AAQAAAicwDQYJKoZI // SIG // hvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT // SIG // Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc // SIG // BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG // SIG // A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw // SIG // MTAwHhcNMjYwMjE5MTk0MDA0WhcNMjcwNTE3MTk0MDA0 // SIG // WjCByzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp // SIG // bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT // SIG // FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMc // SIG // TWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUG // SIG // A1UECxMeblNoaWVsZCBUU1MgRVNOOkE5MzUtMDNFMC1E // SIG // OTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt // SIG // cCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A // SIG // MIICCgKCAgEA4sVstXwzki+Ko9wNaWncvnpSAy8Jxd1L // SIG // i8ySDlsBh3BIK8ccLZ8r4lCA5pscpU1JdbvtqwT6ds0+ // SIG // AcMEIbxmiaRMarzy5QxZW35kn5SiPOnhaqH4me4/DU0T // SIG // uJe8BoPTY5vprjWrk3BVtqnXyIyhPedDpK5vTJzDhmMv // SIG // n4mzWHcUz0T6tU+DC2St7N73TMjBDpXXDkJEiqcQ+v9R // SIG // pOoDpgrtioCPH9Hser2MZyg5fVtDi0hGv+svNqCG7Jvt // SIG // UAYnzkOO8VikxtQpr7Rq/OS8wO+fzAHFJkcOf6H/6hE9 // SIG // FBVdVrpTHCayOgwEgLDQjQfuli66LbgWQI/lTJam5+UT // SIG // GekOCGOycGgIiF4e1Y8a58FDmGRvFhBoX6wPfHYvuyxJ // SIG // /QKr7xDshvlEHI1YQgmzBl4oCV0gKXsnlrqQrA9I4EDD // SIG // QsXweQSwQ1sYHWN3SQRD4MX5IEw0CwYILVb9neQmMRyo // SIG // CCLQeGyOXkm+Y5CBtlqLZxXrU9JXoKcPxKM8H9/WqOrR // SIG // DWNtXlViM0cPxrJr8I2EBer1a8Tg9KRlbH6hhfLN1T3m // SIG // O4SNk8RxTKjQNCAf2tjS2OyU8WACgD/9dRCWbe8W6gyz // SIG // IA9WA3RhMxqUIo5t5wDwi9gnmz/45rvdGmydluNucoJR // SIG // h0yP5wga8EqX0QoMM63xXpSWgijOvt+WhX8CAwEAAaOC // SIG // AUkwggFFMB0GA1UdDgQWBBTS1ufDeDBkhurne41qoE/d // SIG // qK30XjAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtT // SIG // NRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3 // SIG // Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3Nv // SIG // ZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5j // SIG // cmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBo // SIG // dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Nl // SIG // cnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0El // SIG // MjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1Ud // SIG // JQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIH // SIG // gDANBgkqhkiG9w0BAQsFAAOCAgEAKp3LneD0gtbXm9h+ // SIG // p0bsu7A4iitdxVyYq1QeE38I3aNjG/kC+I+8Gf5OBvT9 // SIG // AgDR2Raw0HCtFRQ08rK2LvGdAIWteGnA2T7MiKD7wBkU // SIG // YWhxLn+zXJEY5H2v8paNSsiCPI2y/TfbCQKgTy/FeBTQ // SIG // Y5Y7/tRhwzsNdu62c+WUkz6AD29kgNL+cg4HKVDH8YJT // SIG // 8qenJzz6EKU7Q/ThsfA8Jtj/qNUz8QSMuiNE/UWrrpaI // SIG // FQrysH5X3i03CgL50htawo3q0l5lNQzVzrAA/27K0o4G // SIG // 1+ZgGw+100TBf72sAFhEhXJ/wY44s8XlmW9NGmEpZCQN // SIG // q1bRZTDOPNWlVl3QG1zz+Uc1Ilk5YMh3/xu5QsR2FhiG // SIG // bgdd092iOmPJhIJ/6LuNGohSaPK9PotD+RnTZ3lrcYkd // SIG // AjClH5KPubP+93MHtVn6fASl2tu9HInFUGrBX+bEVe6R // SIG // Zvle3zUV8Aru2p0zpoGu+szu/9rfszpYm76YU/kOmXfg // SIG // dqmLEp+MQWmPmMx6Z8nC1uXLycoT8QQnG9aEWH4UcwgA // SIG // 29rrSNhLRgo3Nj9oouC8keEDG/5/HDsHi/SKlUyis81Z // SIG // Ps2ScVd766eC8rkF8NDt9JWugXB3TQAAAfVAvN87NxvX // SIG // fgJSH2SzPe7TFDSlo2waSIqxcei0wxV1bWUHe4asy2Ac // SIG // o24x9LowggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZ // SIG // AAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQG // SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE // SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv // SIG // cnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9v // SIG // dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0y // SIG // MTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJ // SIG // BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw // SIG // DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv // SIG // ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m // SIG // dCBUaW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG // SIG // 9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL // SIG // 1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4X // SIG // YDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY // SIG // 6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhu // SIG // je3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7 // SIG // M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928 // SIG // jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+ // SIG // tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCG // SIG // MFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39 // SIG // IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+A // SIG // utuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDy // SIG // t0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDq // SIG // hFFG4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrX // SIG // Y28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH // SIG // 29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLE // SIG // hReTwDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3 // SIG // PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQF // SIG // AgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8 // SIG // RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJl // SIG // pxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30B // SIG // ATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jv // SIG // c29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5o // SIG // dG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGC // SIG // NxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8G // SIG // A1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/o // SIG // olxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZF // SIG // aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv // SIG // cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMu // SIG // Y3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+ // SIG // aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0 // SIG // cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJ // SIG // KoZIhvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5y // SIG // S/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1 // SIG // OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2Lpyp // SIG // glYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM // SIG // 9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9Ak // SIG // vUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6L // SIG // GYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmR // SIG // sqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2 // SIG // zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyx // SIG // TkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGO // SIG // WhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJ // SIG // Xk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FB // SIG // SX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+ // SIG // 57XQKBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq // SIG // 8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cir // SIG // Ooo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGby // SIG // oYIDTTCCAjUCAQEwgfmhgdGkgc4wgcsxCzAJBgNVBAYT // SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH // SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y // SIG // cG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVy // SIG // aWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQg // SIG // VFNTIEVTTjpBOTM1LTAzRTAtRDk0NzElMCMGA1UEAxMc // SIG // TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEB // SIG // MAcGBSsOAwIaAxUAIx86rYT8DtBg3JAzAOseeJSIjCqg // SIG // gYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK // SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG // SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD // SIG // VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx // SIG // MDANBgkqhkiG9w0BAQsFAAIFAO3TBHIwIhgPMjAyNjA2 // SIG // MDkyMTMwMjZaGA8yMDI2MDYxMDIxMzAyNlowdDA6Bgor // SIG // BgEEAYRZCgQBMSwwKjAKAgUA7dMEcgIBADAHAgEAAgIM // SIG // 6DAHAgEAAgIS+TAKAgUA7dRV8gIBADA2BgorBgEEAYRZ // SIG // CgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6Eg // SIG // oQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQAs // SIG // hox9NOyQV62CLGACQBIznVmHT9pFUf58abB5SgxjwzPM // SIG // z9zZJBCnnAJwSf6XDFagmxIXZ4PkQf24s9VJZGJ7mzkH // SIG // Bv/vhtXKDyOForD4mFe7JlOGSVHpe9BVYAA1CkZ+mEp6 // SIG // QH8FoGLrD1wT/0aWb/Q5PuiM9lWCVFrcuyrYK8r8UNsn // SIG // 95sLWP81/ASruF6ZhznDuIgwJB5baIomEiK0Ab9GYeji // SIG // Q6wpuEAMJ+3Kvxd4H3psCRiYRSXw/G3RX8nESs6tJMkF // SIG // 3PhZXQrIVA29+hGNKaCe7yXhIgSBQ6arTJHVsx4tH2PK // SIG // 2Ez3uC92QQqahEiVgZFlan98mLc9f08IMYIEDTCCBAkC // SIG // AQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh // SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV // SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE // SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAC // SIG // EzMAAAIn1cCDw7EuVy0AAQAAAicwDQYJYIZIAWUDBAIB // SIG // BQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB // SIG // BDAvBgkqhkiG9w0BCQQxIgQgC7jS9b7k8TVJ6U45hNGJ // SIG // XB97BAxeV3rafOht4R8MuvAwgfoGCyqGSIb3DQEJEAIv // SIG // MYHqMIHnMIHkMIG9BCDl5wEaNaFSHDiySg6pRNGnav42 // SIG // fU13ZZ11kXFxk4QRcjCBmDCBgKR+MHwxCzAJBgNVBAYT // SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH // SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y // SIG // cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l // SIG // LVN0YW1wIFBDQSAyMDEwAhMzAAACJ9XAg8OxLlctAAEA // SIG // AAInMCIEINC278M1dshe1nQn0ZLJXG0Zdq7UHIxiOH3v // SIG // epd37noEMA0GCSqGSIb3DQEBCwUABIICANlk1Qpw4KO8 // SIG // DJPKNSHybU6hmwpXXtaMg6gVatvb/UOklH7YhNWAof+x // SIG // vJ4NAWrdKYo6hUzw50HIxyAr5IJfjDg/N504fR7Oa7ee // SIG // IjpuYUTRn+mUvunfRE5MdKwwXnpm5Y1RksCN0dYCJzwh // SIG // BXZUy57igpFj9qbiA//VBYA3BoBBXJKuBy4yaElTYmSI // SIG // NRa2Te2Lxry0CC0mJ6aCa3je2gwM9mZVL3tPoLI3A+8o // SIG // KWLoyJnH57zAIb7YpePSNcj9TKdx53p3NJC4XBrjfdPh // SIG // EgWCLmmDfO5pY5O+TBVsjPM2PDf1gWqpq8lf0Zd5br3K // SIG // DvHlOqjD112gagodPjpDgoWK71ZQpPXMgWz3Bi7xfgSU // SIG // U/Rv5z8ysplRBKDVE2CpubceBSs4hPYByUM6nb7cMBXq // SIG // SXyyGMf5qkMhJ1kFw4l2imaL/WS++1lPexqi1uhHnPCz // SIG // mamWySVTpA1f9I2WKs3fgQ9tu+0aitZkxitoyeVrdaZ5 // SIG // ME7sepl0FWc1xacL46FWRpGDVIIRvfspczDmtOefZL4+ // SIG // tK82G+qV+/Rr08geN22ZBqmnR4nf4sfoSjxziTN55X4Q // SIG // 8m5tOwlHbm6xakV/oj7tu9EsbahjjusYuM2w2VTSSalC // SIG // 80+R2kV+wBY8JFAdEL0/LaPquUsUYKxrn2SisDkgu1aX // SIG // LIGunt0TjG7b // SIG // End signature block