diff --git a/README.md b/README.md index 5f03c8b..de410cd 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ The desired Visual Studio version needs to be present on your build server. ## Release notes +* 2.0.4 - Added support for VS2022. Updated dependencies. Removed support for VS2015 and below versions. * 2.0.3 - Updated Task Library to v0.11.0. Updated VSSetup library to v2.2.5. Added the support for VS2019. Added extra Project filed/parameter. Solution parameter now supports wildcards [#1](https://github.com/mmajcica/DevEnvBuild/issues/1). * 1.0.2 - Minor improvements on the extension. No task changes * 1.0.1 - Initial Release diff --git a/task/ps_modules/VSSetup/.signature.p7s b/task/ps_modules/VSSetup/.signature.p7s new file mode 100644 index 0000000..6604a7f Binary files /dev/null and b/task/ps_modules/VSSetup/.signature.p7s differ diff --git a/task/ps_modules/VSSetup/Microsoft.VisualStudio.Setup.PowerShell.dll b/task/ps_modules/VSSetup/Microsoft.VisualStudio.Setup.PowerShell.dll index c7a85ff..3737657 100644 Binary files a/task/ps_modules/VSSetup/Microsoft.VisualStudio.Setup.PowerShell.dll and b/task/ps_modules/VSSetup/Microsoft.VisualStudio.Setup.PowerShell.dll differ diff --git a/task/ps_modules/VSSetup/VSSetup.psd1 b/task/ps_modules/VSSetup/VSSetup.psd1 index f9dcece..e6297b9 100644 --- a/task/ps_modules/VSSetup/VSSetup.psd1 +++ b/task/ps_modules/VSSetup/VSSetup.psd1 @@ -6,7 +6,7 @@ Author = 'Microsoft Corporation' CompanyName = 'Microsoft Corporation' Copyright = 'Copyright (C) Microsoft Corporation. All rights reserved.' Description = 'Visual Studio Setup PowerShell Module' -ModuleVersion = '2.2.5' +ModuleVersion = '2.2.16' PowerShellVersion = '2.0' CLRVersion = '2.0' ModuleToProcess = 'VSSetup.psm1' @@ -23,203 +23,205 @@ TypesToProcess = 'VSSetup.types.ps1xml' PrivateData = @{ PSData = @{ ProjectUri = 'https://github.com/Microsoft/vssetup.powershell' - LicenseUri = 'https://github.com/Microsoft/vssetup.powershell/raw/4eb2842ded/LICENSE.txt' + LicenseUri = 'https://github.com/Microsoft/vssetup.powershell/raw/d1247fe775/LICENSE.txt' Prerelease = '' } } } # SIG # Begin signature block -# MIIj6QYJKoZIhvcNAQcCoIIj2jCCI9YCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# MIIkWgYJKoZIhvcNAQcCoIIkSzCCJEcCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG -# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCZBAk2fEYnSgGp -# 4WxyqzL4HsUP8h2Db8HS+SgS42zny6CCDYMwggYBMIID6aADAgECAhMzAAAAxOmJ -# +HqBUOn/AAAAAADEMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB5np/BkhFGzmJY +# DvByR2rJoNH2TEHjjLT+z/TFCIlEx6CCDYUwggYDMIID66ADAgECAhMzAAABUptA +# n1BWmXWIAAAAAAFSMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p -# bmcgUENBIDIwMTEwHhcNMTcwODExMjAyMDI0WhcNMTgwODExMjAyMDI0WjB0MQsw +# bmcgUENBIDIwMTEwHhcNMTkwNTAyMjEzNzQ2WhcNMjAwNTAyMjEzNzQ2WjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -# AQCIirgkwwePmoB5FfwmYPxyiCz69KOXiJZGt6PLX4kvOjMuHpF4+nypH4IBtXrL -# GrwDykbrxZn3+wQd8oUK/yJuofJnPcUnGOUoH/UElEFj7OO6FYztE5o13jhwVG87 -# 7K1FCTBJwb6PMJkMy3bJ93OVFnfRi7uUxwiFIO0eqDXxccLgdABLitLckevWeP6N -# +q1giD29uR+uYpe/xYSxkK7WryvTVPs12s1xkuYe/+xxa8t/CHZ04BBRSNTxAMhI -# TKMHNeVZDf18nMjmWuOF9daaDx+OpuSEF8HWyp8dAcf9SKcTkjOXIUgy+MIkogCy -# vlPKg24pW4HvOG6A87vsEwvrAgMBAAGjggGAMIIBfDAfBgNVHSUEGDAWBgorBgEE -# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUy9ZihM9gOer/Z8Jc0si7q7fDE5gw -# UgYDVR0RBEswSaRHMEUxDTALBgNVBAsTBE1PUFIxNDAyBgNVBAUTKzIzMDAxMitj -# ODA0YjVlYS00OWI0LTQyMzgtODM2Mi1kODUxZmEyMjU0ZmMwHwYDVR0jBBgwFoAU -# SG5k5VAF04KqFzc3IrVtqMp1ApUwVAYDVR0fBE0wSzBJoEegRYZDaHR0cDovL3d3 -# dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljQ29kU2lnUENBMjAxMV8yMDEx -# LTA3LTA4LmNybDBhBggrBgEFBQcBAQRVMFMwUQYIKwYBBQUHMAKGRWh0dHA6Ly93 -# d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljQ29kU2lnUENBMjAxMV8y -# MDExLTA3LTA4LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQAG -# Fh/bV8JQyCNPolF41+34/c291cDx+RtW7VPIaUcF1cTL7OL8mVuVXxE4KMAFRRPg -# mnmIvGar27vrAlUjtz0jeEFtrvjxAFqUmYoczAmV0JocRDCppRbHukdb9Ss0i5+P -# WDfDThyvIsoQzdiCEKk18K4iyI8kpoGL3ycc5GYdiT4u/1cDTcFug6Ay67SzL1BW -# XQaxFYzIHWO3cwzj1nomDyqWRacygz6WPldJdyOJ/rEQx4rlCBVRxStaMVs5apao -# pIhrlihv8cSu6r1FF8xiToG1VBpHjpilbcBuJ8b4Jx/I7SCpC7HxzgualOJqnWmD -# oTbXbSD+hdX/w7iXNgn+PRTBmBSpwIbM74LBq1UkQxi1SIV4htD50p0/GdkUieeN -# n2gkiGg7qceATibnCCFMY/2ckxVNM7VWYE/XSrk4jv8u3bFfpENryXjPsbtrj4Ns -# h3Kq6qX7n90a1jn8ZMltPgjlfIOxrbyjunvPllakeljLEkdi0iHv/DzEMQv3Lz5k -# pTdvYFA/t0SQT6ALi75+WPbHZ4dh256YxMiMy29H4cAulO2x9rAwbexqSajplnbI -# vQjE/jv1rnM3BrJWzxnUu/WUyocc8oBqAU+2G4Fzs9NbIj86WBjfiO5nxEmnL9wl -# iz1e0Ow0RJEdvJEMdoI+78TYLaEEAo5I+e/dAs8DojCCB3owggVioAMCAQICCmEO -# kNIAAAAAAAMwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQI -# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv -# ZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmlj -# YXRlIEF1dGhvcml0eSAyMDExMB4XDTExMDcwODIwNTkwOVoXDTI2MDcwODIxMDkw -# OVowfjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT -# B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UE -# AxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMTCCAiIwDQYJKoZIhvcN -# AQEBBQADggIPADCCAgoCggIBAKvw+nIQHC6t2G6qghBNNLrytlghn0IbKmvpWlCq -# uAY4GgRJun/DDB7dN2vGEtgL8DjCmQawyDnVARQxQtOJDXlkh36UYCRsr55JnOlo -# XtLfm1OyCizDr9mpK656Ca/XllnKYBoF6WZ26DJSJhIv56sIUM+zRLdd2MQuA3Wr -# aPPLbfM6XKEW9Ea64DhkrG5kNXimoGMPLdNAk/jj3gcN1Vx5pUkp5w2+oBN3vpQ9 -# 7/vjK1oQH01WKKJ6cuASOrdJXtjt7UORg9l7snuGG9k+sYxd6IlPhBryoS9Z5JA7 -# La4zWMW3Pv4y07MDPbGyr5I4ftKdgCz1TlaRITUlwzluZH9TupwPrRkjhMv0ugOG -# jfdf8NBSv4yUh7zAIXQlXxgotswnKDglmDlKNs98sZKuHCOnqWbsYR9q4ShJnV+I -# 4iVd0yFLPlLEtVc/JAPw0XpbL9Uj43BdD1FGd7P4AOG8rAKCX9vAFbO9G9RVS+c5 -# oQ/pI0m8GLhEfEXkwcNyeuBy5yTfv0aZxe/CHFfbg43sTUkwp6uO3+xbn6/83bBm -# 4sGXgXvt1u1L50kppxMopqd9Z4DmimJ4X7IvhNdXnFy/dygo8e1twyiPLI9AN0/B -# 4YVEicQJTMXUpUMvdJX3bvh4IFgsE11glZo+TzOE2rCIF96eTvSWsLxGoGyY0uDW -# iIwLAgMBAAGjggHtMIIB6TAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUSG5k -# 5VAF04KqFzc3IrVtqMp1ApUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYD -# VR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUci06AjGQQ7kU -# BU7h6qfHMdEjiTQwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybC5taWNyb3Nv -# ZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0MjAxMV8yMDExXzAz -# XzIyLmNybDBeBggrBgEFBQcBAQRSMFAwTgYIKwYBBQUHMAKGQmh0dHA6Ly93d3cu -# bWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0MjAxMV8yMDExXzAz -# XzIyLmNydDCBnwYDVR0gBIGXMIGUMIGRBgkrBgEEAYI3LgMwgYMwPwYIKwYBBQUH -# AgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvZG9jcy9wcmltYXJ5 -# Y3BzLmh0bTBABggrBgEFBQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBwAG8AbABpAGMA -# eQBfAHMAdABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAZ/KG -# pZjgVHkaLtPYdGcimwuWEeFjkplCln3SeQyQwWVfLiw++MNy0W2D/r4/6ArKO79H -# qaPzadtjvyI1pZddZYSQfYtGUFXYDJJ80hpLHPM8QotS0LD9a+M+By4pm+Y9G6XU -# tR13lDni6WTJRD14eiPzE32mkHSDjfTLJgJGKsKKELukqQUMm+1o+mgulaAqPypr -# WEljHwlpblqYluSD9MCP80Yr3vw70L01724lruWvJ+3Q3fMOr5kol5hNDj0L8giJ -# 1h/DMhji8MUtzluetEk5CsYKwsatruWy2dsViFFFWDgycScaf7H0J/jeLDogaZiy -# WYlobm+nt3TDQAUGpgEqKD6CPxNNZgvAs0314Y9/HG8VfUWnduVAKmWjw11SYobD -# HWM2l4bf2vP48hahmifhzaWX0O5dY0HjWwechz4GdwbRBrF1HxS+YWG18NzGGwS+ -# 30HHDiju3mUv7Jf2oVyW2ADWoUa9WfOXpQlLSBCZgB/QACnFsZulP0V3HjXG0qKi -# n3p6IvpIlR+r+0cjgPWe+L9rt0uX4ut1eBrs6jeZeRhL/9azI2h15q/6/IvrC4Dq -# aTuv/DDtBEyO3991bWORPdGdVk5Pv4BXIqF4ETIheu9BCrE/+6jMpF3BoYibV3FW -# TkhFwELJm3ZbCoBIa/15n8G9bW1qyVJzEw16UM0xghW8MIIVuAIBATCBlTB+MQsw -# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u -# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNy -# b3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExAhMzAAAAxOmJ+HqBUOn/AAAAAADE -# MA0GCWCGSAFlAwQCAQUAoIGuMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwG -# CisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCB8sRxs -# xr/HNXRTbDzPmMxgSROF7zNQx1xbHUd2VTLiQjBCBgorBgEEAYI3AgEMMTQwMqAU -# gBIATQBpAGMAcgBvAHMAbwBmAHShGoAYaHR0cDovL3d3dy5taWNyb3NvZnQuY29t -# MA0GCSqGSIb3DQEBAQUABIIBAGUqnRww/WQf5NelfjPM9e3CQEm/alNceu3c8xRW -# cfD/XuNvG91lqbQtNBPOJd7zC6gW9J05SJT/oEb9om+Oz9KjzSP33Mo/AE5BKqi1 -# xisvKoenL+pvfO6hbUKXlvl2EhseCQXws97pKwo2P9AJXVfGVjHsxowatJyzZG3N -# Bt9qKydew9MAzIzPgdkY+F88NE49Q8blKk5FjSV8s5YOGqASsrk3TAzbgXR1g4+Y -# XpQLRN9skHyYcEhmiKXq+8yFsG4oFSGATPn90KjRPRnFQikUPcJL7ZZ+4ElhzJ9C -# hwoHY4a3MEmL41Qb1fkHRV/JM6w0k3TOTGDZT3LSgOC/I3mhghNGMIITQgYKKwYB -# BAGCNwMDATGCEzIwghMuBgkqhkiG9w0BBwKgghMfMIITGwIBAzEPMA0GCWCGSAFl -# AwQCAQUAMIIBOwYLKoZIhvcNAQkQAQSgggEqBIIBJjCCASICAQEGCisGAQQBhFkK -# AwEwMTANBglghkgBZQMEAgEFAAQgNLBkqFVLli30uvkg27Y5dPBD5ab6ZKgfzCGF -# XnjclncCBlspUIOiYxgTMjAxODA3MDUyMTA3NDEuODYzWjAHAgEBgAIB9KCBt6SB -# tDCBsTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT -# B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEMMAoGA1UE -# CxMDQU9DMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpDM0IwLTBGNkEtNDExMTEl -# MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCDsswggZxMIIE -# WaADAgECAgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV -# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE -# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9v -# dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0xMDA3MDEyMTM2NTVaFw0y -# NTA3MDEyMTQ2NTVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u -# MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp -# b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjAN -# BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcRijog7PwTl/X6f2mUa3RU -# ENWlCgCChfvtfGhLLF/Fw+Vhwna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBE -# D/FgiIRUQwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRgMlhgRvJYR4YyhB50 -# YWeRX4FUsc+TTJLBxKZd0WETbijGGvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd -# /XcfPfBXday9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajyeioKMfDaTgaR -# togINeh4HLDpmc085y9Euqf03GS9pAHBIAmTeM38vMDJRF1eFpwBBU8iTQIDAQAB -# o4IB5jCCAeIwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyKMZDzQ3t8 -# RhvFM2hahW1VMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIB -# hjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fO -# mhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9w -# a2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr -# BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv -# bS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSAB -# Af8EgZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcCARYxaHR0cDovL3d3 -# dy5taWNyb3NvZnQuY29tL1BLSS9kb2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEF -# BQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMAdABhAHQAZQBt -# AGUAbgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Eh -# b7Prpsz1Mb7PBeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcIK1GCRBL7 -# uVOMzPRgEop2zEBAQZvcXBf/XPleFzWYJFZLdO9CEMivv3/Gf/I3fVo/HPKZeUqR -# UgCvOA8X9S95gWXZqbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8ySif9 -# Va8v/rbljjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoLkSbiOewZSnFjnXshbcOco6I8 -# +n99lmqQeKZt0uGc+R38ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+ -# Y1klD3ouOVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ732D8OE7cQnfXXSYIghh -# 2rBQHm+98eEA3+cxB6STOvdlR3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRy -# zR30uIUBHoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp9cAvVCch98isTtoo -# uLGp25ayp0Kiyc8ZQU3ghvkqmqMRZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx -# 16HSxVXjad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA12u8JJxzVs341 -# Hgi62jbb01+P3nSISRIwggTYMIIDwKADAgECAhMzAAAArYAjN2XEWiNqAAAAAACt -# MA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n +# AQCxp4nT9qfu9O10iJyewYXHlN+WEh79Noor9nhM6enUNbCbhX9vS+8c/3eIVazS +# YnVBTqLzW7xWN1bCcItDbsEzKEE2BswSun7J9xCaLwcGHKFr+qWUlz7hh9RcmjYS +# kOGNybOfrgj3sm0DStoK8ljwEyUVeRfMHx9E/7Ca/OEq2cXBT3L0fVnlEkfal310 +# EFCLDo2BrE35NGRjG+/nnZiqKqEh5lWNk33JV8/I0fIcUKrLEmUGrv0CgC7w2cjm +# bBhBIJ+0KzSnSWingXol/3iUdBBy4QQNH767kYGunJeY08RjHMIgjJCdAoEM+2mX +# v1phaV7j+M3dNzZ/cdsz3oDfAgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEE +# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQU3f8Aw1sW72WcJ2bo/QSYGzVrRYcw +# VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh +# dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwMDEyKzQ1NDEzNjAfBgNVHSMEGDAW +# gBRIbmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v +# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIw +# MTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDov +# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDEx +# XzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB +# AJTwROaHvogXgixWjyjvLfiRgqI2QK8GoG23eqAgNjX7V/WdUWBbs0aIC3k49cd0 +# zdq+JJImixcX6UOTpz2LZPFSh23l0/Mo35wG7JXUxgO0U+5drbQht5xoMl1n7/TQ +# 4iKcmAYSAPxTq5lFnoV2+fAeljVA7O43szjs7LR09D0wFHwzZco/iE8Hlakl23ZT +# 7FnB5AfU2hwfv87y3q3a5qFiugSykILpK0/vqnlEVB0KAdQVzYULQ/U4eFEjnis3 +# Js9UrAvtIhIs26445Rj3UP6U4GgOjgQonlRA+mDlsh78wFSGbASIvK+fkONUhvj8 +# B8ZHNn4TFfnct+a0ZueY4f6aRPxr8beNSUKn7QW/FQmn422bE7KfnqWncsH7vbNh +# G929prVHPsaa7J22i9wyHj7m0oATXJ+YjfyoEAtd5/NyIYaE4Uu0j1EhuYUo5VaJ +# JnMaTER0qX8+/YZRWrFN/heps41XNVjiAawpbAa0fUa3R9RNBjPiBnM0gvNPorM4 +# dsV2VJ8GluIQOrJlOvuCrOYDGirGnadOmQ21wPBoGFCWpK56PxzliKsy5NNmAXcE +# x7Qb9vUjY1WlYtrdwOXTpxN4slzIht69BaZlLIjLVWwqIfuNrhHKNDM9K+v7vgrI +# bf7l5/665g0gjQCDCN6Q5sxuttTAEKtJeS/pkpI+DbZ/MIIHejCCBWKgAwIBAgIK +# YQ6Q0gAAAAAAAzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV +# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv +# c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm +# aWNhdGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEw +# OTA5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE +# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD +# VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG +# 9w0BAQEFAAOCAg8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+la +# UKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc +# 6Whe0t+bU7IKLMOv2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4D +# dato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+ +# lD3v++MrWhAfTVYoonpy4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk +# kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6 +# A4aN91/w0FK/jJSHvMAhdCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmd +# X4jiJV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL +# 5zmhD+kjSbwYuER8ReTBw3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zd +# sGbiwZeBe+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3 +# T8HhhUSJxAlMxdSlQy90lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS +# 4NaIjAsCAwEAAaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRI +# bmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAL +# BgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBD +# uRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jv +# c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf +# MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3 +# dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf +# MDNfMjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEF +# BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1h +# cnljcHMuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkA +# YwB5AF8AcwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn +# 8oalmOBUeRou09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7 +# v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0b +# pdS1HXeUOeLpZMlEPXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/ +# KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvy +# CInWH8MyGOLwxS3OW560STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp +# mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJi +# hsMdYzaXht/a8/jyFqGaJ+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYb +# BL7fQccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbS +# oqKfenoi+kiVH6v7RyOA9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sL +# gOppO6/8MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtX +# cVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJUnMTDXpQzTGCFiswghYnAgEBMIGVMH4x +# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt +# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p +# Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAAFSm0CfUFaZdYgAAAAA +# AVIwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw +# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIPYu +# NOjFf6Exw7d43ztthp2HMxOg9AdmvI8NuAmGqcoZMEIGCisGAQQBgjcCAQwxNDAy +# oBSAEgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5j +# b20wDQYJKoZIhvcNAQEBBQAEggEAdMvyMvNFBtRghbepmH7jxQ+F8VCXlDNCz2r9 +# Hp+t7PMpGnAWByWqiZMqV3GTjb/R1IOf+n20yPRYP4RNBHU2XouiN8DC/3pEgqZ3 +# ZFDvnQI3XxtM63siHtDd3YTApCXFdVBypYVvNpNi7aEID5otR94ErqzfLGLDwv6Y +# lvxeLeBFMfhqVBRfxeZSYh2Pzht0WMukU0yZECy6DBQ8naxz1wcum9Umytxzi9RF +# xpeZ+SWdkICstTQeEKRh4rLESOtqjFfbF1n4LyIypb4H1kdSOP/Tnh2kEF8BCw0C +# UeVbyMtSfzufaDTnhbsIHbDZZWNOqX9BxyNZy9oMcwsvJxG2kKGCE7UwghOxBgor +# BgEEAYI3AwMBMYIToTCCE50GCSqGSIb3DQEHAqCCE44wghOKAgEDMQ8wDQYJYIZI +# AWUDBAIBBQAwggFWBgsqhkiG9w0BCRABBKCCAUUEggFBMIIBPQIBAQYKKwYBBAGE +# WQoDATAxMA0GCWCGSAFlAwQCAQUABCAlmW4CoRFUsV2MAif8X8qLnpvKGYcnHUl4 +# ScYV6+OhWwIGXYjea9peGBEyMDE5MTAwNDE2MDczNi45WjAHAgEBgAIB9KCB1KSB +# 0TCBzjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT +# B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEpMCcGA1UE +# CxMgTWljcm9zb2Z0IE9wZXJhdGlvbnMgUHVlcnRvIFJpY28xJjAkBgNVBAsTHVRo +# YWxlcyBUU1MgRVNOOkI4RUMtMzBBNC03MTQ0MSUwIwYDVQQDExxNaWNyb3NvZnQg +# VGltZS1TdGFtcCBTZXJ2aWNloIIPHzCCBnEwggRZoAMCAQICCmEJgSoAAAAAAAIw +# DQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n # dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y -# YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4X -# DTE2MDkwNzE3NTY1NVoXDTE4MDkwNzE3NTY1NVowgbExCzAJBgNVBAYTAlVTMRMw -# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN -# aWNyb3NvZnQgQ29ycG9yYXRpb24xDDAKBgNVBAsTA0FPQzEmMCQGA1UECxMdVGhh -# bGVzIFRTUyBFU046QzNCMC0wRjZBLTQxMTExJTAjBgNVBAMTHE1pY3Jvc29mdCBU -# aW1lLVN0YW1wIFNlcnZpY2UwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -# AQDtsw3+ZRrdjbFV70cpvihU4xUCwcs6tloenowDcczbSqznjVS/XqH6NQEUIvxc -# k+9Hmpe46mrv0eqnqiW5R1zmyWvTtAeaBvLnsjTIixh72HW1eGlFDNdSIoyxEBKp -# uyZaPr9GUho5YUgLlFp4om6pKFxxQa0+g1aDJCyh1anwxb5v3PbvElanMuvpy8ep -# JH5Rm3n6B2u3JgoDMKyotjO6RK0aN4OXVyuEkGg0wYB/HlFgydV+Ngqyqfk+tH63 -# 3oT3m/FPqCYI5himKgJZcczBl/gpYnnX1s5Nds//wRUB5pOYYJHTagWJLCABh9wQ -# PTrLdqyDnRAJ/IcNnK5cmf2nAgMBAAGjggEbMIIBFzAdBgNVHQ4EFgQUZCG6wC+s -# +JzHDJTl5x/JCta8/WswHwYDVR0jBBgwFoAU1WM6XIoxkPNDe3xGG8UzaFqFbVUw -# VgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9j -# cmwvcHJvZHVjdHMvTWljVGltU3RhUENBXzIwMTAtMDctMDEuY3JsMFoGCCsGAQUF -# BwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br -# aS9jZXJ0cy9NaWNUaW1TdGFQQ0FfMjAxMC0wNy0wMS5jcnQwDAYDVR0TAQH/BAIw -# ADATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkqhkiG9w0BAQsFAAOCAQEAEoVHudSd -# mMR8ZG61qrhNU4oihtx2lXVdIo83dTxe9qVvOo0Zf7vqlDT+IKZqVDZPNFT/AAOV -# VCbzeWfv8cAY+um3MO13/2l02jOEEQ6Tr4EYxyVauIXWYKG0a1szo/60hhgk2CGV -# W+6QFcbZY+7UpNj55HrdS7JzrBa5oMAEFu81dTtQPPlhdtwB6AsfZlAa3apZT0yD -# 2MWHBEIid6jK902lrhqRxccdIHwhWHVTr08luuLMuHBw41phXVys42v8jNOsOD9i -# PyZgw3mmlXX8j/zmLSyUfQLRG+7Df6TB2aRGIjfXr3+Yul73d5NdqwuvFFBO6WZB -# LznqhOMXeflcVKGCA3YwggJeAgEBMIHhoYG3pIG0MIGxMQswCQYDVQQGEwJVUzET -# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV -# TWljcm9zb2Z0IENvcnBvcmF0aW9uMQwwCgYDVQQLEwNBT0MxJjAkBgNVBAsTHVRo -# YWxlcyBUU1MgRVNOOkMzQjAtMEY2QS00MTExMSUwIwYDVQQDExxNaWNyb3NvZnQg -# VGltZS1TdGFtcCBTZXJ2aWNloiUKAQEwCQYFKw4DAhoFAAMVAJwY5hrfGwOIF10c -# xscsS5qv4TDZoIHBMIG+pIG7MIG4MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz +# YXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhv +# cml0eSAyMDEwMB4XDTEwMDcwMTIxMzY1NVoXDTI1MDcwMTIxNDY1NVowfDELMAkG +# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx +# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z +# b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +# ggEKAoIBAQCpHQ28dxGKOiDs/BOX9fp/aZRrdFQQ1aUKAIKF++18aEssX8XD5WHC +# drc+Zitb8BVTJwQxH0EbGpUdzgkTjnxhMFmxMEQP8WCIhFRDDNdNuDgIs0Ldk6zW +# czBXJoKjRQ3Q6vVHgc2/JGAyWGBG8lhHhjKEHnRhZ5FfgVSxz5NMksHEpl3RYRNu +# KMYa+YaAu99h/EbBJx0kZxJyGiGKr0tkiVBisV39dx898Fd1rL2KQk1AUdEPnAY+ +# Z3/1ZsADlkR+79BL/W7lmsqxqPJ6Kgox8NpOBpG2iAg16HgcsOmZzTznL0S6p/Tc +# ZL2kAcEgCZN4zfy8wMlEXV4WnAEFTyJNAgMBAAGjggHmMIIB4jAQBgkrBgEEAYI3 +# FQEEAwIBADAdBgNVHQ4EFgQU1WM6XIoxkPNDe3xGG8UzaFqFbVUwGQYJKwYBBAGC +# NxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8w +# HwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmg +# R4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWlj +# Um9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEF +# BQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29D +# ZXJBdXRfMjAxMC0wNi0yMy5jcnQwgaAGA1UdIAEB/wSBlTCBkjCBjwYJKwYBBAGC +# Ny4DMIGBMD0GCCsGAQUFBwIBFjFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vUEtJ +# L2RvY3MvQ1BTL2RlZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEA +# bABfAFAAbwBsAGkAYwB5AF8AUwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3 +# DQEBCwUAA4ICAQAH5ohRDeLG4Jg/gXEDPZ2joSFvs+umzPUxvs8F4qn++ldtGTCz +# wsVmyWrf9efweL3HqJ4l4/m87WtUVwgrUYJEEvu5U4zM9GASinbMQEBBm9xcF/9c +# +V4XNZgkVkt070IQyK+/f8Z/8jd9Wj8c8pl5SpFSAK84Dxf1L3mBZdmptWvkx872 +# ynoAb0swRCQiPM/tA6WWj1kpvLb9BOFwnzJKJ/1Vry/+tuWOM7tiX5rbV0Dp8c6Z +# ZpCM/2pif93FSguRJuI57BlKcWOdeyFtw5yjojz6f32WapB4pm3S4Zz5Hfw42JT0 +# xqUKloakvZ4argRCg7i1gJsiOCC1JeVk7Pf0v35jWSUPei45V3aicaoGig+JFrph +# pxHLmtgOR5qAxdDNp9DvfYPw4TtxCd9ddJgiCGHasFAeb73x4QDf5zEHpJM692VH +# eOj4qEir995yfmFrb3epgcunCaw5u+zGy9iCtHLNHfS4hQEegPsbiSpUObJb2sgN +# VZl6h3M7COaYLeqN4DMuEin1wC9UJyH3yKxO2ii4sanblrKnQqLJzxlBTeCG+Sqa +# oxFmMNO7dDJL32N79ZmKLxvHIa9Zta7cRDyXUHHXodLFVeNp3lfB0d4wwP3M5k37 +# Db9dT+mdHhk4L7zPWAUu7w2gUDXa7wknHNWzfjUeCLraNtvTX4/edIhJEjCCBPUw +# ggPdoAMCAQICEzMAAAD9RCyg8TVyBKkAAAAAAP0wDQYJKoZIhvcNAQELBQAwfDEL +# MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v +# bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWlj +# cm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMTkwOTA2MjA0MTA3WhcNMjAx +# MjA0MjA0MTA3WjCBzjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x +# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv +# bjEpMCcGA1UECxMgTWljcm9zb2Z0IE9wZXJhdGlvbnMgUHVlcnRvIFJpY28xJjAk +# BgNVBAsTHVRoYWxlcyBUU1MgRVNOOkI4RUMtMzBBNC03MTQ0MSUwIwYDVQQDExxN +# aWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOC +# AQ8AMIIBCgKCAQEAonQ5uabcOXAiaNm+38k9UsayNbenypD59P5hYcGsfQ+ik1Zc +# 9qmxJt3X5UCEef0dCyUe54/yIRpkUXKtuR7LZSi7V7UcMUj9+M8oLiV771jV9ZHs +# w6xgUHh6ZES8ymliOeE60lVuv+vuiNLCpsPRmPQGXqZM0DCbsFYs4+WN750FbBnR +# Jy76wc1mM/Iow82Y0BHFFy+I9l7NvY47y+1rjRZkrxXTBg1N0LfSMcaqaXL98UTp +# QpmFVUYUW5golW3u3g34FHrZEqqF6tLF9UUQ4uxKLa7kpjXw4mGYK1S16ZtKAtT9 +# s5PD+M0b6qHQ9nogPcWIv4RqH4sVAdiHkHqI0wIDAQABo4IBGzCCARcwHQYDVR0O +# BBYEFHIAOiqUY45JRfwF59PmHm0LTCQCMB8GA1UdIwQYMBaAFNVjOlyKMZDzQ3t8 +# RhvFM2hahW1VMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0 +# LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBDQV8yMDEwLTA3LTAxLmNy +# bDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z +# b2Z0LmNvbS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIwMTAtMDctMDEuY3J0MAwG +# A1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQELBQAD +# ggEBAELRdu3v9SIYELqAHqXDNZrQswgz10OHUtVUq3wbyhq4rSu5wWPx29AOQyY+ +# pSCYLfLNW9IGhqwNqtjB0bl+HB7a2+8vtQDz0Zn9m2XQPBX5aWM1/dksgTIgXo80 +# bE52ZyxrJCEqVzk7zhllXeKAoOjHIuLpEqQ+8ybJOOjpSwVxGGIHMm4sXD83mWvH +# k6Qqlp8hJUiq0L1FichNbsM3fllESIGfdhxWVleTd/WFDOyNDQptiNPLy3/a+Obs +# ozcqA1oetAr/yszB5+Qmg1AutgWEP3tqxS2ps14EJkWWE2vjDPA2vDl6quRYNUKw +# Cx0FpIdtVQQQFC2fR4I6ciGXj6ehggOtMIIClQIBATCB/qGB1KSB0TCBzjELMAkG +# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx +# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEpMCcGA1UECxMgTWljcm9z +# b2Z0IE9wZXJhdGlvbnMgUHVlcnRvIFJpY28xJjAkBgNVBAsTHVRoYWxlcyBUU1Mg +# RVNOOkI4RUMtMzBBNC03MTQ0MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt +# cCBTZXJ2aWNloiUKAQEwCQYFKw4DAhoFAAMVAKKJJJA3E0gZlWPWteRdoiP5oI80 +# oIHeMIHbpIHYMIHVMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ +# MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u +# MSkwJwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVydG8gUmljbzEnMCUG +# A1UECxMebkNpcGhlciBOVFMgRVNOOjRERTktMEM1RS0zRTA5MSswKQYDVQQDEyJN +# aWNyb3NvZnQgVGltZSBTb3VyY2UgTWFzdGVyIENsb2NrMA0GCSqGSIb3DQEBBQUA +# AgUA4UGaRDAiGA8yMDE5MTAwNDEwMTUzMloYDzIwMTkxMDA1MTAxNTMyWjB0MDoG +# CisGAQQBhFkKBAExLDAqMAoCBQDhQZpEAgEAMAcCAQACAh2UMAcCAQACAhsDMAoC +# BQDhQuvEAgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQBhFkKAwGgCjAIAgEA +# AgMW42ChCjAIAgEAAgMHoSAwDQYJKoZIhvcNAQEFBQADggEBAHbvozPA6GajBvC2 +# HV7gQeuUF02Z4yZXDqFmWxHPQ8ObXkXe8+BQWgXwZX2CkRSrtUWme/9XK8S0V4OG +# ckk+wFUokTKSFpmrPULaz+r+c9ROpQX1RgDAbFatEUiVhN58zeFXX0IaI1bi1ft1 +# 6lwyVWS9YO1TRTQLcNxIy90BiWlf+eyxdben16AFyorkzfb3EhF3EDEt4jjoekOh +# 6otteovxmdfrjJY9x1rsZP7jql3jnULjF4tLyWyY89hGAxmPiZRRmRaWCTJ5wVoH +# dSjr/d0Tf08ylj8t9lOTzzgbAMr0jIIj7hLk21zIfE/pt8J2OcHccma1wk35+2pT +# oHUflz0xggL1MIIC8QIBATCBkzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz # aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv -# cnBvcmF0aW9uMQwwCgYDVQQLEwNBT0MxJzAlBgNVBAsTHm5DaXBoZXIgTlRTIEVT -# TjoyNjY1LTRDM0YtQzVERTErMCkGA1UEAxMiTWljcm9zb2Z0IFRpbWUgU291cmNl -# IE1hc3RlciBDbG9jazANBgkqhkiG9w0BAQUFAAIFAN7o7ecwIhgPMjAxODA3MDUx -# OTIwMDdaGA8yMDE4MDcwNjE5MjAwN1owdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA -# 3ujt5wIBADAKAgEAAgJ+7AIB/zAHAgEAAgIVozAKAgUA3uo/ZwIBADA2BgorBgEE -# AYRZCgQCMSgwJjAMBgorBgEEAYRZCgMBoAowCAIBAAIDFuNgoQowCAIBAAIDHoSA -# MA0GCSqGSIb3DQEBBQUAA4IBAQA6AIpyzNCyPKIwSqA9iRplviBGMi7X3+MdL27t -# Gsg/Ic6KGPxYAFFsWWPYqtjhpQl3nHU37nqKhCi093jnrDB77L5zXbtbzJNpHft5 -# k/OXWUB+BhidRzOUYmce8Y8zdtINSALfW9zqFECJ1RPOK83c1rcKMqHYYgdFVHdh -# 4RiLnx42ccNsxBtUAkOGceNAK539Kcq6rRkcfMrl8yAkCjjb1pGFJglBWeHhqvjT -# aZ32r7P9FdlZSJforhZAubun0VpoLp+8QIpv0/TizdLSTfP2fSrxbUy/2vQ2M/sp -# dSMimTbwLoiWvPFc4Kps0ql0exfERLSh+RhBLNrI8ubk0TFWMYIC9TCCAvECAQEw -# gZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT -# B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE -# AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAACtgCM3ZcRaI2oA -# AAAAAK0wDQYJYIZIAWUDBAIBBQCgggEyMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0B -# CRABBDAvBgkqhkiG9w0BCQQxIgQgENOZ5h2kO2/MGq+vOzZYbLA6IKHhpD5TaLMi -# hwglOlEwgeIGCyqGSIb3DQEJEAIMMYHSMIHPMIHMMIGxBBScGOYa3xsDiBddHMbH -# LEuar+Ew2TCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n -# dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y -# YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMz -# AAAArYAjN2XEWiNqAAAAAACtMBYEFIvkMRMrE5MAH2gSBs0izRQ5OkiiMA0GCSqG -# SIb3DQEBCwUABIIBALSLk8fwAT7CMuy4+OFNS67JdbqcD01km1ygNUGWhX/IApku -# wINE0ZXfDEBHTee6mOH9A619WADfSd2Ked1o/+LjLM+emo3Xxbqpw9KZFtmIetil -# 1IIwbzQ92jTcCvRAHhG5ziwylsULj1Y5vCqUQKfwwiGMTWVx/ALfuVQP7QcCqNvz -# HIP3SZ8Yi9zEsA+yy2/R+2Iae9/qhusEqJSaawCxL83bZ+OzP8ujzWXCgNY781WB -# 2CRGCkrS2dh5uy33OD6RJZ76I3Vk6FabYiPGFsPbi1ZGH2tialV0qK7rCX9mcis9 -# ohezELNciNY3RRcQDZWTx7ann/p/e8M8UilVQ7o= +# cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx +# MAITMwAAAP1ELKDxNXIEqQAAAAAA/TANBglghkgBZQMEAgEFAKCCATIwGgYJKoZI +# hvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCC49JZIN/iBQgad +# oOvSx4C1sHZe0DVIbzf0AbG3IOOE7DCB4gYLKoZIhvcNAQkQAgwxgdIwgc8wgcww +# gbEEFKKJJJA3E0gZlWPWteRdoiP5oI80MIGYMIGApH4wfDELMAkGA1UEBhMCVVMx +# EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT +# FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUt +# U3RhbXAgUENBIDIwMTACEzMAAAD9RCyg8TVyBKkAAAAAAP0wFgQUciTmJ0ovtir1 +# B/2HR1C0pQTGTS0wDQYJKoZIhvcNAQELBQAEggEAjPHES6Gza3Gcg6owcHWLpDZ5 +# vzyAFiEHQNY+VbtD1ixeo0wN3rJJk7SSA83ZgzHH5kMzZVLFTS+iWtyRNisCqQ9+ +# /KHeq2q2+R8RiYtH+IFZDRHLEGXwXxgV2EzHVOwuykNTV8HgxW2okvRAHs27J9M/ +# 1QZ17NsXSq/PzEDSWg49xdiQnxa7J1dHIxsuAinmTXKGRIEM/+e0q7HQtUORHcsc +# BgfF9PKZcGtWlDEjoRjUV/dKTyzdveS3Ji4zg+6Cgc3kUViHgRNindiZF+et2Avp +# jdoSVWqDayDbBpMJ7C7qgtm1UVI/qyjpESVfkiUooqGUbvlFxqj4/P4a9p4zNQ== # SIG # End signature block diff --git a/task/ps_modules/VSSetup/VSSetup.psm1 b/task/ps_modules/VSSetup/VSSetup.psm1 index 0be88e6..9335652 100644 --- a/task/ps_modules/VSSetup/VSSetup.psm1 +++ b/task/ps_modules/VSSetup/VSSetup.psm1 @@ -8,196 +8,199 @@ $ExecutionContext.SessionState.PSVariable.Set( Export-ModuleMember -Cmdlet * -Variable VSSetupVersionTable # SIG # Begin signature block -# MIIj7AYJKoZIhvcNAQcCoIIj3TCCI9kCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# MIIkXwYJKoZIhvcNAQcCoIIkUDCCJEwCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBRpWOUSMrGsv71 -# RYVhmjuoascdEN5KPsaasJJu+hyc16CCDYMwggYBMIID6aADAgECAhMzAAAAxOmJ -# +HqBUOn/AAAAAADEMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD +# RYVhmjuoascdEN5KPsaasJJu+hyc16CCDYUwggYDMIID66ADAgECAhMzAAABUptA +# n1BWmXWIAAAAAAFSMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p -# bmcgUENBIDIwMTEwHhcNMTcwODExMjAyMDI0WhcNMTgwODExMjAyMDI0WjB0MQsw +# bmcgUENBIDIwMTEwHhcNMTkwNTAyMjEzNzQ2WhcNMjAwNTAyMjEzNzQ2WjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -# AQCIirgkwwePmoB5FfwmYPxyiCz69KOXiJZGt6PLX4kvOjMuHpF4+nypH4IBtXrL -# GrwDykbrxZn3+wQd8oUK/yJuofJnPcUnGOUoH/UElEFj7OO6FYztE5o13jhwVG87 -# 7K1FCTBJwb6PMJkMy3bJ93OVFnfRi7uUxwiFIO0eqDXxccLgdABLitLckevWeP6N -# +q1giD29uR+uYpe/xYSxkK7WryvTVPs12s1xkuYe/+xxa8t/CHZ04BBRSNTxAMhI -# TKMHNeVZDf18nMjmWuOF9daaDx+OpuSEF8HWyp8dAcf9SKcTkjOXIUgy+MIkogCy -# vlPKg24pW4HvOG6A87vsEwvrAgMBAAGjggGAMIIBfDAfBgNVHSUEGDAWBgorBgEE -# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUy9ZihM9gOer/Z8Jc0si7q7fDE5gw -# UgYDVR0RBEswSaRHMEUxDTALBgNVBAsTBE1PUFIxNDAyBgNVBAUTKzIzMDAxMitj -# ODA0YjVlYS00OWI0LTQyMzgtODM2Mi1kODUxZmEyMjU0ZmMwHwYDVR0jBBgwFoAU -# SG5k5VAF04KqFzc3IrVtqMp1ApUwVAYDVR0fBE0wSzBJoEegRYZDaHR0cDovL3d3 -# dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljQ29kU2lnUENBMjAxMV8yMDEx -# LTA3LTA4LmNybDBhBggrBgEFBQcBAQRVMFMwUQYIKwYBBQUHMAKGRWh0dHA6Ly93 -# d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljQ29kU2lnUENBMjAxMV8y -# MDExLTA3LTA4LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQAG -# Fh/bV8JQyCNPolF41+34/c291cDx+RtW7VPIaUcF1cTL7OL8mVuVXxE4KMAFRRPg -# mnmIvGar27vrAlUjtz0jeEFtrvjxAFqUmYoczAmV0JocRDCppRbHukdb9Ss0i5+P -# WDfDThyvIsoQzdiCEKk18K4iyI8kpoGL3ycc5GYdiT4u/1cDTcFug6Ay67SzL1BW -# XQaxFYzIHWO3cwzj1nomDyqWRacygz6WPldJdyOJ/rEQx4rlCBVRxStaMVs5apao -# pIhrlihv8cSu6r1FF8xiToG1VBpHjpilbcBuJ8b4Jx/I7SCpC7HxzgualOJqnWmD -# oTbXbSD+hdX/w7iXNgn+PRTBmBSpwIbM74LBq1UkQxi1SIV4htD50p0/GdkUieeN -# n2gkiGg7qceATibnCCFMY/2ckxVNM7VWYE/XSrk4jv8u3bFfpENryXjPsbtrj4Ns -# h3Kq6qX7n90a1jn8ZMltPgjlfIOxrbyjunvPllakeljLEkdi0iHv/DzEMQv3Lz5k -# pTdvYFA/t0SQT6ALi75+WPbHZ4dh256YxMiMy29H4cAulO2x9rAwbexqSajplnbI -# vQjE/jv1rnM3BrJWzxnUu/WUyocc8oBqAU+2G4Fzs9NbIj86WBjfiO5nxEmnL9wl -# iz1e0Ow0RJEdvJEMdoI+78TYLaEEAo5I+e/dAs8DojCCB3owggVioAMCAQICCmEO -# kNIAAAAAAAMwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQI -# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv -# ZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmlj -# YXRlIEF1dGhvcml0eSAyMDExMB4XDTExMDcwODIwNTkwOVoXDTI2MDcwODIxMDkw -# OVowfjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT -# B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UE -# AxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMTCCAiIwDQYJKoZIhvcN -# AQEBBQADggIPADCCAgoCggIBAKvw+nIQHC6t2G6qghBNNLrytlghn0IbKmvpWlCq -# uAY4GgRJun/DDB7dN2vGEtgL8DjCmQawyDnVARQxQtOJDXlkh36UYCRsr55JnOlo -# XtLfm1OyCizDr9mpK656Ca/XllnKYBoF6WZ26DJSJhIv56sIUM+zRLdd2MQuA3Wr -# aPPLbfM6XKEW9Ea64DhkrG5kNXimoGMPLdNAk/jj3gcN1Vx5pUkp5w2+oBN3vpQ9 -# 7/vjK1oQH01WKKJ6cuASOrdJXtjt7UORg9l7snuGG9k+sYxd6IlPhBryoS9Z5JA7 -# La4zWMW3Pv4y07MDPbGyr5I4ftKdgCz1TlaRITUlwzluZH9TupwPrRkjhMv0ugOG -# jfdf8NBSv4yUh7zAIXQlXxgotswnKDglmDlKNs98sZKuHCOnqWbsYR9q4ShJnV+I -# 4iVd0yFLPlLEtVc/JAPw0XpbL9Uj43BdD1FGd7P4AOG8rAKCX9vAFbO9G9RVS+c5 -# oQ/pI0m8GLhEfEXkwcNyeuBy5yTfv0aZxe/CHFfbg43sTUkwp6uO3+xbn6/83bBm -# 4sGXgXvt1u1L50kppxMopqd9Z4DmimJ4X7IvhNdXnFy/dygo8e1twyiPLI9AN0/B -# 4YVEicQJTMXUpUMvdJX3bvh4IFgsE11glZo+TzOE2rCIF96eTvSWsLxGoGyY0uDW -# iIwLAgMBAAGjggHtMIIB6TAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUSG5k -# 5VAF04KqFzc3IrVtqMp1ApUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYD -# VR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUci06AjGQQ7kU -# BU7h6qfHMdEjiTQwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybC5taWNyb3Nv -# ZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0MjAxMV8yMDExXzAz -# XzIyLmNybDBeBggrBgEFBQcBAQRSMFAwTgYIKwYBBQUHMAKGQmh0dHA6Ly93d3cu -# bWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0MjAxMV8yMDExXzAz -# XzIyLmNydDCBnwYDVR0gBIGXMIGUMIGRBgkrBgEEAYI3LgMwgYMwPwYIKwYBBQUH -# AgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvZG9jcy9wcmltYXJ5 -# Y3BzLmh0bTBABggrBgEFBQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBwAG8AbABpAGMA -# eQBfAHMAdABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAZ/KG -# pZjgVHkaLtPYdGcimwuWEeFjkplCln3SeQyQwWVfLiw++MNy0W2D/r4/6ArKO79H -# qaPzadtjvyI1pZddZYSQfYtGUFXYDJJ80hpLHPM8QotS0LD9a+M+By4pm+Y9G6XU -# tR13lDni6WTJRD14eiPzE32mkHSDjfTLJgJGKsKKELukqQUMm+1o+mgulaAqPypr -# WEljHwlpblqYluSD9MCP80Yr3vw70L01724lruWvJ+3Q3fMOr5kol5hNDj0L8giJ -# 1h/DMhji8MUtzluetEk5CsYKwsatruWy2dsViFFFWDgycScaf7H0J/jeLDogaZiy -# WYlobm+nt3TDQAUGpgEqKD6CPxNNZgvAs0314Y9/HG8VfUWnduVAKmWjw11SYobD -# HWM2l4bf2vP48hahmifhzaWX0O5dY0HjWwechz4GdwbRBrF1HxS+YWG18NzGGwS+ -# 30HHDiju3mUv7Jf2oVyW2ADWoUa9WfOXpQlLSBCZgB/QACnFsZulP0V3HjXG0qKi -# n3p6IvpIlR+r+0cjgPWe+L9rt0uX4ut1eBrs6jeZeRhL/9azI2h15q/6/IvrC4Dq -# aTuv/DDtBEyO3991bWORPdGdVk5Pv4BXIqF4ETIheu9BCrE/+6jMpF3BoYibV3FW -# TkhFwELJm3ZbCoBIa/15n8G9bW1qyVJzEw16UM0xghW/MIIVuwIBATCBlTB+MQsw +# AQCxp4nT9qfu9O10iJyewYXHlN+WEh79Noor9nhM6enUNbCbhX9vS+8c/3eIVazS +# YnVBTqLzW7xWN1bCcItDbsEzKEE2BswSun7J9xCaLwcGHKFr+qWUlz7hh9RcmjYS +# kOGNybOfrgj3sm0DStoK8ljwEyUVeRfMHx9E/7Ca/OEq2cXBT3L0fVnlEkfal310 +# EFCLDo2BrE35NGRjG+/nnZiqKqEh5lWNk33JV8/I0fIcUKrLEmUGrv0CgC7w2cjm +# bBhBIJ+0KzSnSWingXol/3iUdBBy4QQNH767kYGunJeY08RjHMIgjJCdAoEM+2mX +# v1phaV7j+M3dNzZ/cdsz3oDfAgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEE +# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQU3f8Aw1sW72WcJ2bo/QSYGzVrRYcw +# VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh +# dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwMDEyKzQ1NDEzNjAfBgNVHSMEGDAW +# gBRIbmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v +# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIw +# MTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDov +# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDEx +# XzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB +# AJTwROaHvogXgixWjyjvLfiRgqI2QK8GoG23eqAgNjX7V/WdUWBbs0aIC3k49cd0 +# zdq+JJImixcX6UOTpz2LZPFSh23l0/Mo35wG7JXUxgO0U+5drbQht5xoMl1n7/TQ +# 4iKcmAYSAPxTq5lFnoV2+fAeljVA7O43szjs7LR09D0wFHwzZco/iE8Hlakl23ZT +# 7FnB5AfU2hwfv87y3q3a5qFiugSykILpK0/vqnlEVB0KAdQVzYULQ/U4eFEjnis3 +# Js9UrAvtIhIs26445Rj3UP6U4GgOjgQonlRA+mDlsh78wFSGbASIvK+fkONUhvj8 +# B8ZHNn4TFfnct+a0ZueY4f6aRPxr8beNSUKn7QW/FQmn422bE7KfnqWncsH7vbNh +# G929prVHPsaa7J22i9wyHj7m0oATXJ+YjfyoEAtd5/NyIYaE4Uu0j1EhuYUo5VaJ +# JnMaTER0qX8+/YZRWrFN/heps41XNVjiAawpbAa0fUa3R9RNBjPiBnM0gvNPorM4 +# dsV2VJ8GluIQOrJlOvuCrOYDGirGnadOmQ21wPBoGFCWpK56PxzliKsy5NNmAXcE +# x7Qb9vUjY1WlYtrdwOXTpxN4slzIht69BaZlLIjLVWwqIfuNrhHKNDM9K+v7vgrI +# bf7l5/665g0gjQCDCN6Q5sxuttTAEKtJeS/pkpI+DbZ/MIIHejCCBWKgAwIBAgIK +# YQ6Q0gAAAAAAAzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV +# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv +# c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm +# aWNhdGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEw +# OTA5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE +# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD +# VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG +# 9w0BAQEFAAOCAg8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+la +# UKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc +# 6Whe0t+bU7IKLMOv2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4D +# dato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+ +# lD3v++MrWhAfTVYoonpy4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk +# kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6 +# A4aN91/w0FK/jJSHvMAhdCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmd +# X4jiJV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL +# 5zmhD+kjSbwYuER8ReTBw3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zd +# sGbiwZeBe+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3 +# T8HhhUSJxAlMxdSlQy90lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS +# 4NaIjAsCAwEAAaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRI +# bmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAL +# BgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBD +# uRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jv +# c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf +# MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3 +# dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf +# MDNfMjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEF +# BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1h +# cnljcHMuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkA +# YwB5AF8AcwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn +# 8oalmOBUeRou09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7 +# v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0b +# pdS1HXeUOeLpZMlEPXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/ +# KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvy +# CInWH8MyGOLwxS3OW560STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp +# mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJi +# hsMdYzaXht/a8/jyFqGaJ+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYb +# BL7fQccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbS +# oqKfenoi+kiVH6v7RyOA9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sL +# gOppO6/8MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtX +# cVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJUnMTDXpQzTGCFjAwghYsAgEBMIGVMH4x +# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt +# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p +# Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAAFSm0CfUFaZdYgAAAAA +# AVIwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw +# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIIA6 +# EgVWieVV4+dERTGLKpiqdIPQf23rZAj6IACgtkDRMEIGCisGAQQBgjcCAQwxNDAy +# oBSAEgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5j +# b20wDQYJKoZIhvcNAQEBBQAEggEACxzZYwwOPHpAjIxT5HsN75w5WTJ8FMNfrpNY +# zUOGyTHfNNxGCZS5WK+mc5RrKsUni2GSLlCRy3QDsDiIOvJBa/LAzakpx0+NdAra +# 2dUTKyaK5psC57FNo5usmC5iXpix7Bpb9UDyjvuoxDQKDTHwNVjvriKdJTe0g3z0 +# Pt1bj8rdV9cJRlbks/hfyWzVjW/l5IkGHAV8a0SCGkfMEHKgpPDrfF7kQCCTwo4f +# UKWNMX3/hxfAYzgsnZcOA84Y7JUn6UPvMmh6pv3E0WjnOYuI+4e9FdSOErceE3NV +# icSMpp8MxIMr//bFg15UzHmxYu4iZFDOgoK+lxj5b16r7+saVKGCE7owghO2Bgor +# BgEEAYI3AwMBMYITpjCCE6IGCSqGSIb3DQEHAqCCE5MwghOPAgEDMQ8wDQYJYIZI +# AWUDBAIBBQAwggFYBgsqhkiG9w0BCRABBKCCAUcEggFDMIIBPwIBAQYKKwYBBAGE +# WQoDATAxMA0GCWCGSAFlAwQCAQUABCBzA5JiQiEugdGwQz9zxvh102VEdNJWaebB +# 4hRSJwFaLQIGXYjeKe7yGBMyMDE5MTAwNDE2MDczNi4xNDRaMAcCAQGAAgH0oIHU +# pIHRMIHOMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE +# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSkwJwYD +# VQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVydG8gUmljbzEmMCQGA1UECxMd +# VGhhbGVzIFRTUyBFU046N0QyRS0zNzgyLUIwRjcxJTAjBgNVBAMTHE1pY3Jvc29m +# dCBUaW1lLVN0YW1wIFNlcnZpY2Wggg8iMIIGcTCCBFmgAwIBAgIKYQmBKgAAAAAA +# AjANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp +# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw +# b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0 +# aG9yaXR5IDIwMTAwHhcNMTAwNzAxMjEzNjU1WhcNMjUwNzAxMjE0NjU1WjB8MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u -# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNy -# b3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExAhMzAAAAxOmJ+HqBUOn/AAAAAADE -# MA0GCWCGSAFlAwQCAQUAoIGuMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwG -# CisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCCAOhIF -# VonlVePnREUxiyqYqnSD0H9t62QI+iAAoLZA0TBCBgorBgEEAYI3AgEMMTQwMqAU -# gBIATQBpAGMAcgBvAHMAbwBmAHShGoAYaHR0cDovL3d3dy5taWNyb3NvZnQuY29t -# MA0GCSqGSIb3DQEBAQUABIIBAIFxV49XpPkyqQxP4UVFIAq6wxvbD9N7rx9+R+aC -# ZJ8L33hlOpw1AB4EjB6943rrNFataFV6IL6TDeuAOa0ProUZWcQHXxhsyQBY1+RM -# uxfWV1Hi9ndUreNFRRYsFeG5uxBcZY9CKohVwnhx9djJ87ND7mvxzSeJ6UH4+the -# L/1+Nn2PlhlutQNhT2iYO8yfOJLUGNlihyJ7IYjRzNYEy8C1+6lIgjp/tIc+rMe2 -# FHVjCAoSu6ibH+hEwEf/ZVS/R9UoRmHT6KQqM1a9lvAgUGK730KQf78FhqDas9iT -# DaKuwcI206vB/BPXQ+8V4QXdn1aTTwUfsHVY1H8vXtTHEm6hghNJMIITRQYKKwYB -# BAGCNwMDATGCEzUwghMxBgkqhkiG9w0BBwKgghMiMIITHgIBAzEPMA0GCWCGSAFl -# AwQCAQUAMIIBPAYLKoZIhvcNAQkQAQSgggErBIIBJzCCASMCAQEGCisGAQQBhFkK -# AwEwMTANBglghkgBZQMEAgEFAAQg58M8syfWjnTddockCRBK6IJ8ezYnTH1dBcGu -# amKH+nsCBlspRhOaphgTMjAxODA3MDUyMTA3NDEuODQxWjAHAgEBgAIB9KCBuKSB -# tTCBsjELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT -# B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEMMAoGA1UE -# CxMDQU9DMScwJQYDVQQLEx5uQ2lwaGVyIERTRSBFU046N0FCNS0yREYyLURBM0Yx -# JTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wggg7NMIIGcTCC -# BFmgAwIBAgIKYQmBKgAAAAAAAjANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMC -# VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV -# BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJv -# b3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTAwNzAxMjEzNjU1WhcN -# MjUwNzAxMjE0NjU1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv +# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNy +# b3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCCASIwDQYJKoZIhvcNAQEBBQADggEP +# ADCCAQoCggEBAKkdDbx3EYo6IOz8E5f1+n9plGt0VBDVpQoAgoX77XxoSyxfxcPl +# YcJ2tz5mK1vwFVMnBDEfQRsalR3OCROOfGEwWbEwRA/xYIiEVEMM1024OAizQt2T +# rNZzMFcmgqNFDdDq9UeBzb8kYDJYYEbyWEeGMoQedGFnkV+BVLHPk0ySwcSmXdFh +# E24oxhr5hoC732H8RsEnHSRnEnIaIYqvS2SJUGKxXf13Hz3wV3WsvYpCTUBR0Q+c +# Bj5nf/VmwAOWRH7v0Ev9buWayrGo8noqCjHw2k4GkbaICDXoeByw6ZnNPOcvRLqn +# 9NxkvaQBwSAJk3jN/LzAyURdXhacAQVPIk0CAwEAAaOCAeYwggHiMBAGCSsGAQQB +# gjcVAQQDAgEAMB0GA1UdDgQWBBTVYzpcijGQ80N7fEYbxTNoWoVtVTAZBgkrBgEE +# AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +# /zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEug +# SaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N +# aWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsG +# AQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jv +# b0NlckF1dF8yMDEwLTA2LTIzLmNydDCBoAYDVR0gAQH/BIGVMIGSMIGPBgkrBgEE +# AYI3LgMwgYEwPQYIKwYBBQUHAgEWMWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9Q +# S0kvZG9jcy9DUFMvZGVmYXVsdC5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcA +# YQBsAF8AUABvAGwAaQBjAHkAXwBTAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZI +# hvcNAQELBQADggIBAAfmiFEN4sbgmD+BcQM9naOhIW+z66bM9TG+zwXiqf76V20Z +# MLPCxWbJat/15/B4vceoniXj+bzta1RXCCtRgkQS+7lTjMz0YBKKdsxAQEGb3FwX +# /1z5Xhc1mCRWS3TvQhDIr79/xn/yN31aPxzymXlKkVIArzgPF/UveYFl2am1a+TH +# zvbKegBvSzBEJCI8z+0DpZaPWSm8tv0E4XCfMkon/VWvL/625Y4zu2JfmttXQOnx +# zplmkIz/amJ/3cVKC5Em4jnsGUpxY517IW3DnKOiPPp/fZZqkHimbdLhnPkd/DjY +# lPTGpQqWhqS9nhquBEKDuLWAmyI4ILUl5WTs9/S/fmNZJQ96LjlXdqJxqgaKD4kW +# umGnEcua2A5HmoDF0M2n0O99g/DhO3EJ3110mCIIYdqwUB5vvfHhAN/nMQekkzr3 +# ZUd46PioSKv33nJ+YWtvd6mBy6cJrDm77MbL2IK0cs0d9LiFAR6A+xuJKlQ5slva +# yA1VmXqHczsI5pgt6o3gMy4SKfXAL1QnIffIrE7aKLixqduWsqdCosnPGUFN4Ib5 +# KpqjEWYw07t0MkvfY3v1mYovG8chr1m1rtxEPJdQcdeh0sVV42neV8HR3jDA/czm +# TfsNv11P6Z0eGTgvvM9YBS7vDaBQNdrvCScc1bN+NR4Iuto229Nfj950iEkSMIIE +# 9TCCA92gAwIBAgITMwAAAQAg91yTVtV30AAAAAABADANBgkqhkiG9w0BAQsFADB8 +# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk +# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N +# aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAeFw0xOTA5MDYyMDQxMDlaFw0y +# MDEyMDQyMDQxMDlaMIHOMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 -# aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCCASIw -# DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkdDbx3EYo6IOz8E5f1+n9plGt0 -# VBDVpQoAgoX77XxoSyxfxcPlYcJ2tz5mK1vwFVMnBDEfQRsalR3OCROOfGEwWbEw -# RA/xYIiEVEMM1024OAizQt2TrNZzMFcmgqNFDdDq9UeBzb8kYDJYYEbyWEeGMoQe -# dGFnkV+BVLHPk0ySwcSmXdFhE24oxhr5hoC732H8RsEnHSRnEnIaIYqvS2SJUGKx -# Xf13Hz3wV3WsvYpCTUBR0Q+cBj5nf/VmwAOWRH7v0Ev9buWayrGo8noqCjHw2k4G -# kbaICDXoeByw6ZnNPOcvRLqn9NxkvaQBwSAJk3jN/LzAyURdXhacAQVPIk0CAwEA -# AaOCAeYwggHiMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBTVYzpcijGQ80N7 -# fEYbxTNoWoVtVTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMC -# AYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvX -# zpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20v -# cGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYI -# KwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5j -# b20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNydDCBoAYDVR0g -# AQH/BIGVMIGSMIGPBgkrBgEEAYI3LgMwgYEwPQYIKwYBBQUHAgEWMWh0dHA6Ly93 -# d3cubWljcm9zb2Z0LmNvbS9QS0kvZG9jcy9DUFMvZGVmYXVsdC5odG0wQAYIKwYB -# BQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AUABvAGwAaQBjAHkAXwBTAHQAYQB0AGUA -# bQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAAfmiFEN4sbgmD+BcQM9naOh -# IW+z66bM9TG+zwXiqf76V20ZMLPCxWbJat/15/B4vceoniXj+bzta1RXCCtRgkQS -# +7lTjMz0YBKKdsxAQEGb3FwX/1z5Xhc1mCRWS3TvQhDIr79/xn/yN31aPxzymXlK -# kVIArzgPF/UveYFl2am1a+THzvbKegBvSzBEJCI8z+0DpZaPWSm8tv0E4XCfMkon -# /VWvL/625Y4zu2JfmttXQOnxzplmkIz/amJ/3cVKC5Em4jnsGUpxY517IW3DnKOi -# PPp/fZZqkHimbdLhnPkd/DjYlPTGpQqWhqS9nhquBEKDuLWAmyI4ILUl5WTs9/S/ -# fmNZJQ96LjlXdqJxqgaKD4kWumGnEcua2A5HmoDF0M2n0O99g/DhO3EJ3110mCII -# YdqwUB5vvfHhAN/nMQekkzr3ZUd46PioSKv33nJ+YWtvd6mBy6cJrDm77MbL2IK0 -# cs0d9LiFAR6A+xuJKlQ5slvayA1VmXqHczsI5pgt6o3gMy4SKfXAL1QnIffIrE7a -# KLixqduWsqdCosnPGUFN4Ib5KpqjEWYw07t0MkvfY3v1mYovG8chr1m1rtxEPJdQ -# cdeh0sVV42neV8HR3jDA/czmTfsNv11P6Z0eGTgvvM9YBS7vDaBQNdrvCScc1bN+ -# NR4Iuto229Nfj950iEkSMIIE2TCCA8GgAwIBAgITMwAAAKteQJ3uRt8sbAAAAAAA -# qzANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu -# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv -# cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAe -# Fw0xNjA5MDcxNzU2NTRaFw0xODA5MDcxNzU2NTRaMIGyMQswCQYDVQQGEwJVUzET -# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV -# TWljcm9zb2Z0IENvcnBvcmF0aW9uMQwwCgYDVQQLEwNBT0MxJzAlBgNVBAsTHm5D -# aXBoZXIgRFNFIEVTTjo3QUI1LTJERjItREEzRjElMCMGA1UEAxMcTWljcm9zb2Z0 -# IFRpbWUtU3RhbXAgU2VydmljZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -# ggEBALPmflCYoEYJsGYBJoo00ynJfZg1mgws3TPKA88OAtcL77vhyC5JpNPQ2dxz -# 07tFhZxd5QH1/CumYpvhgAKn8zcoRUs13ri6bvuGkO3hqxDyOPB3wlvPQBPuOUob -# 0ip6HvyLAfipvJqPeQPD43DRrADzpsDLId101NSHhCiBrRpZUmLe7P3MxQOJTE0H -# s6DUHp57AcI6zWNpCZCIE5PDLZShLAQpuDfVSrUxiuS+bpEz23zuzDJ8XMEt4biw -# 1iKJISokeeLko88uGdZVyUgRJKSoyfVIyFLCMZKQ+mY2APmhMBpoD61pZEta8etp -# n3OGerZgH5SRXo4gvdTfDiqQyEsCAwEAAaOCARswggEXMB0GA1UdDgQWBBQNx0fQ -# HGDL6cBrlMxfBg5iuNhqpzAfBgNVHSMEGDAWgBTVYzpcijGQ80N7fEYbxTNoWoVt -# VTBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtp -# L2NybC9wcm9kdWN0cy9NaWNUaW1TdGFQQ0FfMjAxMC0wNy0wMS5jcmwwWgYIKwYB -# BQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v -# cGtpL2NlcnRzL01pY1RpbVN0YVBDQV8yMDEwLTA3LTAxLmNydDAMBgNVHRMBAf8E -# AjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0GCSqGSIb3DQEBCwUAA4IBAQA/n/66 -# LmHxciqtqhVmlaAES32zwkbd0OtbQDz0jHUFraGBbyR7DS7So4m68DYr+cjFdw56 -# uHzeVOL9DyZfPAx2LfoY0aIQqIheSypZlchfd3/+RCS4ApmEkZSvAsemKoaEsYv4 -# kSTH0G6jNr/7+LgHmm8+ae228ZthZ1StNujb8trlYqY7yG3MQ5omIvNEjOstRyZ1 -# 08Lmm9aKnRVPk+iAIM4OLZUDU/NA4BrcaVxMIddKEygvRdWC/aTB3yE7yes/OKU/ -# MvrNBku4H7ybGrORsZNd4v95oRbRuDX24ZHK93Hs/f6Kw+BlNVjLpF4PluanIq9o -# 8z7P3qSNqtjuEqTioYIDdzCCAl8CAQEwgeKhgbikgbUwgbIxCzAJBgNVBAYTAlVT -# MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK -# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDDAKBgNVBAsTA0FPQzEnMCUGA1UECxMe -# bkNpcGhlciBEU0UgRVNOOjdBQjUtMkRGMi1EQTNGMSUwIwYDVQQDExxNaWNyb3Nv -# ZnQgVGltZS1TdGFtcCBTZXJ2aWNloiUKAQEwCQYFKw4DAhoFAAMVAMnsu0gtNdmU -# vraO9yapMW6Kh44yoIHBMIG+pIG7MIG4MQswCQYDVQQGEwJVUzETMBEGA1UECBMK -# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 -# IENvcnBvcmF0aW9uMQwwCgYDVQQLEwNBT0MxJzAlBgNVBAsTHm5DaXBoZXIgTlRT -# IEVTTjoyNjY1LTRDM0YtQzVERTErMCkGA1UEAxMiTWljcm9zb2Z0IFRpbWUgU291 -# cmNlIE1hc3RlciBDbG9jazANBgkqhkiG9w0BAQUFAAIFAN7oY70wIhgPMjAxODA3 -# MDUwOTMwMzdaGA8yMDE4MDcwNjA5MzAzN1owdzA9BgorBgEEAYRZCgQBMS8wLTAK -# AgUA3uhjvQIBADAKAgEAAgIAowIB/zAHAgEAAgIaQjAKAgUA3um1PQIBADA2Bgor -# BgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMBoAowCAIBAAIDFuNgoQowCAIBAAID -# B6EgMA0GCSqGSIb3DQEBBQUAA4IBAQCPaOlLtS8kJeO9cE7bZCCjRevRWvI1BsHq -# f7mc3lajrOTRw3rzHNUs3upsxkDbPrCjmO6QtS8c7h3Wv6bFHnWk2kltCejzm7S6 -# ZvUTzQ5sRwk6YeS+7OdMhmk8AqVMFKSIbPNCPWkNTDqPk/dzGNb/Cf5e2x89dwiw -# X5G948Qyj5D9BQCcZxoxB+9SuGO561ZBUx1HMFpARca8n/Q9LlhoDWBX7NYZTocD -# d/buMtEouixmrzRnl7aROy6FT8ESSabzfApeekYy6NF5XyI3xOr12CHBGccCmNVa -# bvzouDz/Qvlgg3mCpyEJR34V9z3GGZKYpab+nmGKhepaKX6J5i+mMYIC9TCCAvEC -# AQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV -# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG -# A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAACrXkCd7kbf -# LGwAAAAAAKswDQYJYIZIAWUDBAIBBQCgggEyMBoGCSqGSIb3DQEJAzENBgsqhkiG -# 9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQg68XbE6dwPzwklS3ZlyXAU21yNk5VkVKp -# YDiTue7jjzQwgeIGCyqGSIb3DQEJEAIMMYHSMIHPMIHMMIGxBBTJ7LtILTXZlL62 -# jvcmqTFuioeOMjCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo -# aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y -# cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw -# AhMzAAAAq15Ane5G3yxsAAAAAACrMBYEFGelxx9SKQGRnf960l6V+LpHJdL1MA0G -# CSqGSIb3DQEBCwUABIIBAKHzXKdMg7mjtjt7+yYbEPmwTIlL9dhDi+hpTciQRzGX -# 7f/ZFV9Ej8OuCNFoOXmyK7yyXnvspeuEeA2w9tAN9s76LVe54TIxfFRN/omwHUUC -# +olxQ1ujUBEPp43iEhXSXiwzSGaKUWTRuihFrByuLI1tNNJCzSBgSMwB4M2LGUqH -# 1ZTd7qM96KPytyjHBbRg22S8IcaPh8w705g2WJcy/VdKz15cNNcFKd2tSQNaPasB -# 96NdkRho2xkc0MCDogNqSAb2tVprq/7C7wvXObvPoZ3j3BI+DujJI4wb2dnuiT7o -# RF/O9LJKe7vZ8iNVSeFR497mpSJB6BoPyvpD9td5gZI= +# aW9uMSkwJwYDVQQLEyBNaWNyb3NvZnQgT3BlcmF0aW9ucyBQdWVydG8gUmljbzEm +# MCQGA1UECxMdVGhhbGVzIFRTUyBFU046N0QyRS0zNzgyLUIwRjcxJTAjBgNVBAMT +# HE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2UwggEiMA0GCSqGSIb3DQEBAQUA +# A4IBDwAwggEKAoIBAQDJyJHJMQ2Fpdq/Op8t0UTWT4J7vJhT8Hh+wQ0pDoRiwEDu +# fEal959RB/P2er295CMVUH1fXwQr95Jb9R3p1itEA0SI64FnlgNZYgFVmHvjm9bs +# p7TEJ5ttuMadUXr995cG8WVPpw6IWksnm67UiH2uemIANo2MLrWPn7Pxg0hkUSV3 +# juTdcTSnvibFV13NL5udC9qTJWCDpxrJRAy2ZsV6z5dXOxgtg6f1fnq64IK+SPd2 +# nA2U1KGNFWhkV6bdoVJvNuPxMRV2kCC4S/QxZaoJoh72V7pKEkck35JS1aCN71/i +# OmTHE3Ig/SvEXcesGwedVYAEjuXA5xIam9xPninRAgMBAAGjggEbMIIBFzAdBgNV +# HQ4EFgQUaFeTJyyHOonVxnYrUoseGr3VxtcwHwYDVR0jBBgwFoAU1WM6XIoxkPND +# e3xGG8UzaFqFbVUwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3Nv +# ZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljVGltU3RhUENBXzIwMTAtMDctMDEu +# Y3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNy +# b3NvZnQuY29tL3BraS9jZXJ0cy9NaWNUaW1TdGFQQ0FfMjAxMC0wNy0wMS5jcnQw +# DAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkqhkiG9w0BAQsF +# AAOCAQEAon6bQjF8h6SYIQe8zWF5hc5c6cS5ZrRQJIgTnZ/fRJ8awiXWvxGbk7fY +# CUTnpffSMtyFKV98v+QCGU0Bz6hCEpwrPWN9ux1jMJGbVjZ6fzz7+1enmYWIBOYL +# DcMSlnh/AOaCNpvF2t8EgwjjxwhBfSLxB2norBmN7ZVPWZUC54/WniUtiarrB37M +# slGEOnl+WUIjjWk5mAsIgvKHhdkDYQiohIW9vL6qTI+hwg3y+LuebuXETBP3d2L0 +# VIKeJtNoLuyZPe7vZ4oOfnhh+eqZOyfaZDQZVxljAE2sBi1MpdTfldMmPJrlhwaA +# EueS6Ge0c4eGgSaItmB+bJ5s0lhrJKGCA7AwggKYAgEBMIH+oYHUpIHRMIHOMQsw +# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u +# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSkwJwYDVQQLEyBNaWNy +# b3NvZnQgT3BlcmF0aW9ucyBQdWVydG8gUmljbzEmMCQGA1UECxMdVGhhbGVzIFRT +# UyBFU046N0QyRS0zNzgyLUIwRjcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0 +# YW1wIFNlcnZpY2WiJQoBATAJBgUrDgMCGgUAAxUAOAcf8DfV3FR2AX7bjWO8sx6h +# jMWggd4wgdukgdgwgdUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u +# MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp +# b24xKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMScw +# JQYDVQQLEx5uQ2lwaGVyIE5UUyBFU046NERFOS0wQzVFLTNFMDkxKzApBgNVBAMT +# Ik1pY3Jvc29mdCBUaW1lIFNvdXJjZSBNYXN0ZXIgQ2xvY2swDQYJKoZIhvcNAQEF +# BQACBQDhQZoGMCIYDzIwMTkxMDA0MTAxNDMwWhgPMjAxOTEwMDUxMDE0MzBaMHcw +# PQYKKwYBBAGEWQoEATEvMC0wCgIFAOFBmgYCAQAwCgIBAAICEDICAf8wBwIBAAIC +# GuMwCgIFAOFC64YCAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAaAK +# MAgCAQACAxbjYKEKMAgCAQACAwehIDANBgkqhkiG9w0BAQUFAAOCAQEABML1QY37 +# G87/noEr4psLKqzSUsJovIkZgeGEBbK3vwBmd5yWYE3qmD9qTv+wPEqj48uv2ZuG +# VTSXIBk96RYdBEP8AGxy6shlS9VvBVyiNb6wUk/uEiJ53Y6CqydikZtKa3Y43OTA +# 5lH70LDWkm/zlTZCoN/z0zTMnol3LBetddyCdb51dkWqsQxVIQ+kihuMBgMhVK2r +# ehd52x2/8tkBUpd9Ts5tOssq3Jud+SMuAuDlaHWPN9mzvTJfSRLAjlFjCGll0nFO +# QqUoiFDAcwX5fiss0pXJFhKU9LJ4oGE5XRWph3uV/SYLh0VbN2yAl483WIxPDptW +# SGtgLkouEe24xjGCAvUwggLxAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI +# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv +# ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD +# QSAyMDEwAhMzAAABACD3XJNW1XfQAAAAAAEAMA0GCWCGSAFlAwQCAQUAoIIBMjAa +# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEIOm0VFtl +# kAAYl2dNyy+pUGbHkCnP2xMdmiNHPIt1vfZqMIHiBgsqhkiG9w0BCRACDDGB0jCB +# zzCBzDCBsQQUOAcf8DfV3FR2AX7bjWO8sx6hjMUwgZgwgYCkfjB8MQswCQYDVQQG +# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG +# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg +# VGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAQAg91yTVtV30AAAAAABADAWBBT8xx9H +# l3zwaxU1PD+YSQZ0caY7djANBgkqhkiG9w0BAQsFAASCAQDB/wFOmkECyy7O5S6d +# OL85KKtegOzs1gI9awTfrxJz7MPCNrRlCfeYkQpvb1anOhEyUjfhd/0pVXUN9ZtS +# atzuxk3AGzZ3BlzXmlv30MKekAKaC1nVUmZjWbfWU1TDTXuUYQ5nTignOLbehSmu +# eNq6Qe9336mmn3tGaP6vFcnfuaxZM7YAixv+CPBGn5rI0fk5DnkRseRHtSFryH5g +# opK6fP6/4pcrKp+cBVZ0rz7OSQ3lcNV6i9PKLeNI9GsZDut2DIWHy9juQYXLqHFt +# ilPeHg70T6rCzNV1tEPPRYEPMQoKTxLUyfrKIeOcWjYSpqGO6PQ2y40hNgm4+607 +# rMOK # SIG # End signature block diff --git a/task/ps_modules/VSSetup/VSSetup.types.ps1xml b/task/ps_modules/VSSetup/VSSetup.types.ps1xml index dfba79d..9941d18 100644 --- a/task/ps_modules/VSSetup/VSSetup.types.ps1xml +++ b/task/ps_modules/VSSetup/VSSetup.types.ps1xml @@ -66,196 +66,198 @@ - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/task/ps_modules/VSSetup/LICENSE.txt b/task/ps_modules/VSSetup/tools/LICENSE.txt similarity index 100% rename from task/ps_modules/VSSetup/LICENSE.txt rename to task/ps_modules/VSSetup/tools/LICENSE.txt diff --git a/task/ps_modules/VstsTaskSdk/FindFunctions.ps1 b/task/ps_modules/VstsTaskSdk/FindFunctions.ps1 index 8687f1b..c0278ea 100644 --- a/task/ps_modules/VstsTaskSdk/FindFunctions.ps1 +++ b/task/ps_modules/VstsTaskSdk/FindFunctions.ps1 @@ -155,7 +155,7 @@ function Find-Match { $findResults += $findPath } } else { - $findResults = Get-FindResult -Path $findPath -Options $FindOptions + $findResults = @( Get-FindResult -Path $findPath -Options $FindOptions ) } Write-Verbose "Found $($findResults.Count) paths." diff --git a/task/ps_modules/VstsTaskSdk/LegacyFindFunctions.ps1 b/task/ps_modules/VstsTaskSdk/LegacyFindFunctions.ps1 index f6aaa5a..9e9e9ec 100644 --- a/task/ps_modules/VstsTaskSdk/LegacyFindFunctions.ps1 +++ b/task/ps_modules/VstsTaskSdk/LegacyFindFunctions.ps1 @@ -132,7 +132,7 @@ function Find-Files { } # Validate pattern does not end with a \. - if ($pattern[$pattern.Length - 1] -eq [System.IO.Path]::DirectorySeparatorChar) { + if ($pattern.EndsWith([System.IO.Path]::DirectorySeparatorChar)) { throw (Get-LocString -Key PSLIB_InvalidPattern0 -ArgumentList $pattern) } diff --git a/task/ps_modules/VstsTaskSdk/LocalizationFunctions.ps1 b/task/ps_modules/VstsTaskSdk/LocalizationFunctions.ps1 index 6f3b6bb..b554970 100644 --- a/task/ps_modules/VstsTaskSdk/LocalizationFunctions.ps1 +++ b/task/ps_modules/VstsTaskSdk/LocalizationFunctions.ps1 @@ -60,10 +60,10 @@ function Get-LocString { <# .SYNOPSIS -Imports resource strings for use with Get-VstsLocString. +Imports resource strings for use with GetVstsLocString. .DESCRIPTION -Imports resource strings for use with Get-VstsLocString. The imported strings are stored in an internal resource string dictionary. Optionally, if a separate resource file for the current culture exists, then the localized strings from that file then imported (overlaid) into the same internal resource string dictionary. +Imports resource strings for use with GetVstsLocString. The imported strings are stored in an internal resource string dictionary. Optionally, if a separate resource file for the current culture exists, then the localized strings from that file then imported (overlaid) into the same internal resource string dictionary. Resource strings from the SDK are prefixed with "PSLIB_". This prefix should be avoided for custom resource strings. diff --git a/task/ps_modules/VstsTaskSdk/LoggingCommandFunctions.ps1 b/task/ps_modules/VstsTaskSdk/LoggingCommandFunctions.ps1 index a2eeb9d..4e8eb73 100644 --- a/task/ps_modules/VstsTaskSdk/LoggingCommandFunctions.ps1 +++ b/task/ps_modules/VstsTaskSdk/LoggingCommandFunctions.ps1 @@ -436,6 +436,41 @@ function Write-UpdateReleaseName { Write-LoggingCommand -Area 'release' -Event 'updatereleasename' -Data $Name -AsOutput:$AsOutput } +<# +.SYNOPSIS +See https://github.com/Microsoft/vsts-tasks/blob/master/docs/authoring/commands.md + +.PARAMETER AsOutput +Indicates whether to write the logging command directly to the host or to the output pipeline. +#> +function Write-LoggingCommand { + [CmdletBinding(DefaultParameterSetName = 'Parameters')] + param( + [Parameter(Mandatory = $true, ParameterSetName = 'Parameters')] + [string]$Area, + [Parameter(Mandatory = $true, ParameterSetName = 'Parameters')] + [string]$Event, + [Parameter(ParameterSetName = 'Parameters')] + [string]$Data, + [Parameter(ParameterSetName = 'Parameters')] + [hashtable]$Properties, + [Parameter(Mandatory = $true, ParameterSetName = 'Object')] + $Command, + [switch]$AsOutput) + + if ($PSCmdlet.ParameterSetName -eq 'Object') { + Write-LoggingCommand -Area $Command.Area -Event $Command.Event -Data $Command.Data -Properties $Command.Properties -AsOutput:$AsOutput + return + } + + $command = Format-LoggingCommand -Area $Area -Event $Event -Data $Data -Properties $Properties + if ($AsOutput) { + $command + } else { + Write-Host $command + } +} + ######################################## # Private functions. ######################################## @@ -498,34 +533,6 @@ function Format-LoggingCommand { $sb.Append(']').Append($Data).ToString() } -function Write-LoggingCommand { - [CmdletBinding(DefaultParameterSetName = 'Parameters')] - param( - [Parameter(Mandatory = $true, ParameterSetName = 'Parameters')] - [string]$Area, - [Parameter(Mandatory = $true, ParameterSetName = 'Parameters')] - [string]$Event, - [Parameter(ParameterSetName = 'Parameters')] - [string]$Data, - [Parameter(ParameterSetName = 'Parameters')] - [hashtable]$Properties, - [Parameter(Mandatory = $true, ParameterSetName = 'Object')] - $Command, - [switch]$AsOutput) - - if ($PSCmdlet.ParameterSetName -eq 'Object') { - Write-LoggingCommand -Area $Command.Area -Event $Command.Event -Data $Command.Data -Properties $Command.Properties -AsOutput:$AsOutput - return - } - - $command = Format-LoggingCommand -Area $Area -Event $Event -Data $Data -Properties $Properties - if ($AsOutput) { - $command - } else { - Write-Host $command - } -} - function Write-LogIssue { [CmdletBinding()] param( diff --git a/task/ps_modules/VstsTaskSdk/PSGetModuleInfo.xml b/task/ps_modules/VstsTaskSdk/PSGetModuleInfo.xml deleted file mode 100644 index ad125c9..0000000 Binary files a/task/ps_modules/VstsTaskSdk/PSGetModuleInfo.xml and /dev/null differ diff --git a/task/ps_modules/VstsTaskSdk/ServerOMFunctions.ps1 b/task/ps_modules/VstsTaskSdk/ServerOMFunctions.ps1 index 9d43b20..6fd19ea 100644 --- a/task/ps_modules/VstsTaskSdk/ServerOMFunctions.ps1 +++ b/task/ps_modules/VstsTaskSdk/ServerOMFunctions.ps1 @@ -9,7 +9,7 @@ Only a subset of the referenced assemblies may actually be required, depending o Walks an assembly's references to determine all of it's dependencies. Also walks the references of the dependencies, and so on until all nested dependencies have been traversed. Dependencies are searched for in the directory of the specified assembly. NET Framework assemblies are omitted. -See https://github.com/Microsoft/vsts-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the TFS extended client SDK from a task. +See https://github.com/Microsoft/azure-pipelines-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the TFS extended client SDK from a task. .PARAMETER LiteralPath Assembly to walk. @@ -106,14 +106,14 @@ The agent job token is used to construct the credentials object. The identity as Refer to Get-VstsTfsService for a more simple to get a TFS service object. -*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/vsts-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the TFS extended client SDK from a task. +*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/azure-pipelines-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the TFS extended client SDK from a task. .PARAMETER OMDirectory Directory where the extended client object model DLLs are located. If the DLLs for the credential types are not already loaded, an attempt will be made to automatically load the required DLLs from the object model directory. If not specified, defaults to the directory of the entry script for the task. -*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/vsts-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the TFS extended client SDK from a task. +*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/azure-pipelines-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the TFS extended client SDK from a task. .EXAMPLE # @@ -139,6 +139,31 @@ function Get-TfsClientCredentials { # Get the endpoint. $endpoint = Get-Endpoint -Name SystemVssConnection -Require + # Test if the Newtonsoft.Json DLL exists in the OM directory. + $newtonsoftDll = [System.IO.Path]::Combine($OMDirectory, "Newtonsoft.Json.dll") + Write-Verbose "Testing file path: '$newtonsoftDll'" + if (!(Test-Path -LiteralPath $newtonsoftDll -PathType Leaf)) { + Write-Verbose 'Not found. Rethrowing exception.' + throw + } + + # Add a binding redirect and try again. Parts of the Dev15 preview SDK have a + # dependency on the 6.0.0.0 Newtonsoft.Json DLL, while other parts reference + # the 8.0.0.0 Newtonsoft.Json DLL. + Write-Verbose "Adding assembly resolver." + $onAssemblyResolve = [System.ResolveEventHandler] { + param($sender, $e) + + if ($e.Name -like 'Newtonsoft.Json, *') { + Write-Verbose "Resolving '$($e.Name)' to '$newtonsoftDll'." + + return [System.Reflection.Assembly]::LoadFrom($newtonsoftDll) + } + + return $null + } + [System.AppDomain]::CurrentDomain.add_AssemblyResolve($onAssemblyResolve) + # Validate the type can be found. $null = Get-OMType -TypeName 'Microsoft.TeamFoundation.Client.TfsClientCredentials' -OMKind 'ExtendedClient' -OMDirectory $OMDirectory -Require @@ -162,7 +187,7 @@ Gets a TFS extended client service. .DESCRIPTION Gets an instance of an ITfsTeamProjectCollectionObject. -*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/vsts-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the TFS extended client SDK from a task. +*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/azure-pipelines-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the TFS extended client SDK from a task. .PARAMETER TypeName Namespace-qualified type name of the service to get. @@ -172,7 +197,7 @@ Directory where the extended client object model DLLs are located. If the DLLs f If not specified, defaults to the directory of the entry script for the task. -*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/vsts-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the TFS extended client SDK from a task. +*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/azure-pipelines-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the TFS extended client SDK from a task. .PARAMETER Uri URI to use when initializing the service. If not specified, defaults to System.TeamFoundationCollectionUri. @@ -239,14 +264,14 @@ The agent job token is used to construct the credentials object. The identity as Refer to Get-VstsVssHttpClient for a more simple to get a VSS HTTP client. -*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/vsts-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the VSTS REST SDK from a task. +*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/azure-pipelines-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the VSTS REST SDK from a task. .PARAMETER OMDirectory Directory where the REST client object model DLLs are located. If the DLLs for the credential types are not already loaded, an attempt will be made to automatically load the required DLLs from the object model directory. If not specified, defaults to the directory of the entry script for the task. -*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/vsts-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the VSTS REST SDK from a task. +*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/azure-pipelines-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the VSTS REST SDK from a task. .EXAMPLE # @@ -306,7 +331,7 @@ Gets a VSS HTTP client. .DESCRIPTION Gets an instance of an VSS HTTP client. -*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/vsts-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the VSTS REST SDK from a task. +*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/azure-pipelines-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the VSTS REST SDK from a task. .PARAMETER TypeName Namespace-qualified type name of the HTTP client to get. @@ -316,7 +341,7 @@ Directory where the REST client object model DLLs are located. If the DLLs for t If not specified, defaults to the directory of the entry script for the task. -*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/vsts-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the VSTS REST SDK from a task. +*** DO NOT USE Agent.ServerOMDirectory *** See https://github.com/Microsoft/azure-pipelines-task-lib/tree/master/powershell/Docs/UsingOM.md for reliable usage when working with the VSTS REST SDK from a task. # .PARAMETER Uri # URI to use when initializing the HTTP client. If not specified, defaults to System.TeamFoundationCollectionUri. @@ -475,7 +500,7 @@ VstsTaskSdk.VstsWebProxy implement System.Net.IWebProxy interface. .EXAMPLE $webProxy = Get-VstsWebProxy -$webProxy.GetProxy(New-Object System.Uri("https://github.com/Microsoft/vsts-task-lib")) +$webProxy.GetProxy(New-Object System.Uri("https://github.com/Microsoft/azure-pipelines-task-lib")) #> function Get-WebProxy { [CmdletBinding()] diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/de-de/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/de-de/resources.resjson index 248b674..90e1f15 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/de-de/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/de-de/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "Fehler beim Aufzählen von Unterverzeichnissen für den folgenden Pfad: \"{0}\"", "loc.messages.PSLIB_FileNotFound0": "Die Datei wurde nicht gefunden: \"{0}\".", "loc.messages.PSLIB_Input0": "\"{0}\"-Eingabe", - "loc.messages.PSLIB_InvalidPattern0": "Ungültiges Muster: \"{0}\"", + "loc.messages.PSLIB_InvalidPattern0": "Der Pfad darf nicht mit einem Verzeichnistrennzeichen enden: „{0}“", "loc.messages.PSLIB_LeafPathNotFound0": "Der Blattpfad wurde nicht gefunden: \"{0}\".", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "Fehler bei der Normalisierung bzw. Erweiterung des Pfads. Die Pfadlänge wurde vom Kernel32-Subsystem nicht zurückgegeben für: \"{0}\"", "loc.messages.PSLIB_PathNotFound0": "Der Pfad wurde nicht gefunden: \"{0}\".", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/es-es/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/es-es/resources.resjson index b79ac21..e17ac0c 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/es-es/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/es-es/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "No se pudieron enumerar los subdirectorios de la ruta de acceso: '{0}'", "loc.messages.PSLIB_FileNotFound0": "Archivo no encontrado: '{0}'", "loc.messages.PSLIB_Input0": "Entrada '{0}'", - "loc.messages.PSLIB_InvalidPattern0": "Patrón no válido: '{0}'", + "loc.messages.PSLIB_InvalidPattern0": "La ruta de acceso no puede terminar con un carácter separador de directorios: '{0}'", "loc.messages.PSLIB_LeafPathNotFound0": "No se encuentra la ruta de acceso de la hoja: '{0}'", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "No se pudo normalizar o expandir la ruta de acceso. El subsistema Kernel32 no devolvió la longitud de la ruta de acceso para: '{0}'", "loc.messages.PSLIB_PathNotFound0": "No se encuentra la ruta de acceso: '{0}'", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/fr-fr/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/fr-fr/resources.resjson index dc2da05..bf964d5 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/fr-fr/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/fr-fr/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "Échec de l'énumération des sous-répertoires pour le chemin : '{0}'", "loc.messages.PSLIB_FileNotFound0": "Fichier introuvable : {0}.", "loc.messages.PSLIB_Input0": "Entrée '{0}'", - "loc.messages.PSLIB_InvalidPattern0": "Modèle non valide : '{0}'", + "loc.messages.PSLIB_InvalidPattern0": "Le chemin d’accès ne peut pas se terminer par un caractère de séparateur de répertoire : « {0} »", "loc.messages.PSLIB_LeafPathNotFound0": "Le chemin feuille est introuvable : '{0}'", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "Échec de la normalisation/l'expansion du chemin. La longueur du chemin n'a pas été retournée par le sous-système Kernel32 pour : '{0}'", "loc.messages.PSLIB_PathNotFound0": "Chemin introuvable : '{0}'", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/it-IT/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/it-IT/resources.resjson index 77bea53..6d2b0a7 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/it-IT/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/it-IT/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "L'enumerazione delle sottodirectory per il percorso '{0}' non è riuscita", "loc.messages.PSLIB_FileNotFound0": "File non trovato: '{0}'", "loc.messages.PSLIB_Input0": "Input di '{0}'", - "loc.messages.PSLIB_InvalidPattern0": "Criterio non valido: '{0}'", + "loc.messages.PSLIB_InvalidPattern0": "Il percorso non può terminare con un carattere separatore di directory: '{0}'", "loc.messages.PSLIB_LeafPathNotFound0": "Percorso foglia non trovato: '{0}'", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "La normalizzazione o l'espansione del percorso non è riuscita. Il sottosistema Kernel32 non ha restituito la lunghezza del percorso per '{0}'", "loc.messages.PSLIB_PathNotFound0": "Percorso non trovato: '{0}'", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ja-jp/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ja-jp/resources.resjson index 9f2f9fe..9c5102b 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ja-jp/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ja-jp/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "パス '{0}' のサブディレクトリを列挙できませんでした", "loc.messages.PSLIB_FileNotFound0": "ファイルが見つかりません: '{0}'", "loc.messages.PSLIB_Input0": "'{0}' 入力", - "loc.messages.PSLIB_InvalidPattern0": "使用できないパターンです: '{0}'", + "loc.messages.PSLIB_InvalidPattern0": "パスの末尾をディレクトリ区切り文字にすることはできません: '{0}'", "loc.messages.PSLIB_LeafPathNotFound0": "リーフ パスが見つかりません: '{0}'", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "パスの正規化/展開に失敗しました。Kernel32 サブシステムからパス '{0}' の長さが返されませんでした", "loc.messages.PSLIB_PathNotFound0": "パスが見つかりません: '{0}'", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ko-KR/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ko-KR/resources.resjson index 17e0d28..382f024 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ko-KR/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ko-KR/resources.resjson @@ -1,12 +1,12 @@ { "loc.messages.PSLIB_AgentVersion0Required": "에이전트 버전 {0} 이상이 필요합니다.", "loc.messages.PSLIB_ContainerPathNotFound0": "컨테이너 경로를 찾을 수 없음: '{0}'", - "loc.messages.PSLIB_EndpointAuth0": "'{0}' 서비스 끝점 자격 증명", - "loc.messages.PSLIB_EndpointUrl0": "'{0}' 서비스 끝점 URL", + "loc.messages.PSLIB_EndpointAuth0": "'{0}' 서비스 엔드포인트 자격 증명", + "loc.messages.PSLIB_EndpointUrl0": "'{0}' 서비스 엔드포인트 URL", "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "경로에 대해 하위 디렉터리를 열거하지 못함: '{0}'", "loc.messages.PSLIB_FileNotFound0": "{0} 파일을 찾을 수 없습니다.", "loc.messages.PSLIB_Input0": "'{0}' 입력", - "loc.messages.PSLIB_InvalidPattern0": "잘못된 패턴: '{0}'", + "loc.messages.PSLIB_InvalidPattern0": "경로는 디렉터리 구분 문자로 끝날 수 없습니다. '{0}'", "loc.messages.PSLIB_LeafPathNotFound0": "Leaf 경로를 찾을 수 없음: '{0}'", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "경로 정규화/확장에 실패했습니다. 다음에 대해 Kernel32 subsystem에서 경로 길이를 반환하지 않음: '{0}'", "loc.messages.PSLIB_PathNotFound0": "경로를 찾을 수 없음: '{0}'", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ru-RU/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ru-RU/resources.resjson index b9c5a27..6402831 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ru-RU/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/ru-RU/resources.resjson @@ -4,9 +4,9 @@ "loc.messages.PSLIB_EndpointAuth0": "Учетные данные конечной точки службы \"{0}\"", "loc.messages.PSLIB_EndpointUrl0": "URL-адрес конечной точки службы \"{0}\"", "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "Сбой перечисления подкаталогов для пути: \"{0}\".", - "loc.messages.PSLIB_FileNotFound0": "Файл не найден: \"{0}\".", + "loc.messages.PSLIB_FileNotFound0": "Файл не найден: \"{0}\"", "loc.messages.PSLIB_Input0": "Входные данные \"{0}\".", - "loc.messages.PSLIB_InvalidPattern0": "Недопустимый шаблон: \"{0}\".", + "loc.messages.PSLIB_InvalidPattern0": "Путь не может заканчиваться символом разделителя каталогов: \"{0}\"", "loc.messages.PSLIB_LeafPathNotFound0": "Путь к конечному объекту не найден: \"{0}\".", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "Сбой нормализации и расширения пути. Длина пути не была возвращена подсистемой Kernel32 для: \"{0}\".", "loc.messages.PSLIB_PathNotFound0": "Путь не найден: \"{0}\".", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-CN/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-CN/resources.resjson index 49d824b..a06dd5f 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-CN/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-CN/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "枚举路径的子目录失败:“{0}”", "loc.messages.PSLIB_FileNotFound0": "找不到文件: {0}。", "loc.messages.PSLIB_Input0": "“{0}”输入", - "loc.messages.PSLIB_InvalidPattern0": "无效的模式:“{0}”", + "loc.messages.PSLIB_InvalidPattern0": "路径不能以目录分隔符结尾:“{0}”", "loc.messages.PSLIB_LeafPathNotFound0": "找不到叶路径:“{0}”", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "路径规范化/扩展失败。路径长度不是由“{0}”的 Kernel32 子系统返回的", "loc.messages.PSLIB_PathNotFound0": "找不到路径:“{0}”", diff --git a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-TW/resources.resjson b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-TW/resources.resjson index 7cbf22e..4b30477 100644 --- a/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-TW/resources.resjson +++ b/task/ps_modules/VstsTaskSdk/Strings/resources.resjson/zh-TW/resources.resjson @@ -6,7 +6,7 @@ "loc.messages.PSLIB_EnumeratingSubdirectoriesFailedForPath0": "為路徑列舉子目錄失敗: '{0}'", "loc.messages.PSLIB_FileNotFound0": "找不到檔案: '{0}'", "loc.messages.PSLIB_Input0": "'{0}' 輸入", - "loc.messages.PSLIB_InvalidPattern0": "模式無效: '{0}'", + "loc.messages.PSLIB_InvalidPattern0": "路徑不能以目錄分隔符號結尾: '{0}'", "loc.messages.PSLIB_LeafPathNotFound0": "找不到分葉路徑: '{0}'", "loc.messages.PSLIB_PathLengthNotReturnedFor0": "路徑正規化/展開失敗。Kernel32 子系統未傳回 '{0}' 的路徑長度", "loc.messages.PSLIB_PathNotFound0": "找不到路徑: '{0}'", diff --git a/task/ps_modules/VstsTaskSdk/ToolFunctions.ps1 b/task/ps_modules/VstsTaskSdk/ToolFunctions.ps1 index 7e62ebd..bb6f8d6 100644 --- a/task/ps_modules/VstsTaskSdk/ToolFunctions.ps1 +++ b/task/ps_modules/VstsTaskSdk/ToolFunctions.ps1 @@ -39,7 +39,8 @@ function Assert-Path { if ($PathType -eq [Microsoft.PowerShell.Commands.TestPathType]::Any) { Write-Verbose "Asserting path exists: '$LiteralPath'" - } else { + } + else { Write-Verbose "Asserting $("$PathType".ToLowerInvariant()) path exists: '$LiteralPath'" } @@ -75,7 +76,7 @@ This parameter not required for most scenarios. Indicates how to interpret the e .PARAMETER RequireExitCodeZero Indicates whether to write an error to the error pipeline if the exit code is not zero. #> -function Invoke-Tool { # TODO: RENAME TO INVOKE-PROCESS? +function Invoke-Tool { [CmdletBinding()] param( [ValidatePattern('^[^\r\n]*$')] @@ -86,7 +87,8 @@ function Invoke-Tool { # TODO: RENAME TO INVOKE-PROCESS? [string]$Arguments, [string]$WorkingDirectory, [System.Text.Encoding]$Encoding, - [switch]$RequireExitCodeZero) + [switch]$RequireExitCodeZero, + [bool]$IgnoreHostException) Trace-EnteringInvocation $MyInvocation $isPushed = $false @@ -104,12 +106,22 @@ function Invoke-Tool { # TODO: RENAME TO INVOKE-PROCESS? $FileName = $FileName.Replace('"', '').Replace("'", "''") Write-Host "##[command]""$FileName"" $Arguments" - Invoke-Expression "& '$FileName' --% $Arguments" + try { + Invoke-Expression "& '$FileName' --% $Arguments" + } + catch [System.Management.Automation.Host.HostException] { + if ($IgnoreHostException -eq $False) { + throw + } + + Write-Host "##[warning]Host Exception was thrown by Invoke-Expression, suppress it due IgnoreHostException setting" + } Write-Verbose "Exit code: $LASTEXITCODE" if ($RequireExitCodeZero -and $LASTEXITCODE -ne 0) { Write-Error (Get-LocString -Key PSLIB_Process0ExitedWithCode1 -ArgumentList ([System.IO.Path]::GetFileName($FileName)), $LASTEXITCODE) } - } finally { + } + finally { if ($originalEncoding) { [System.Console]::OutputEncoding = $originalEncoding } @@ -121,3 +133,95 @@ function Invoke-Tool { # TODO: RENAME TO INVOKE-PROCESS? Trace-LeavingInvocation $MyInvocation } } + +<# +.SYNOPSIS +Executes an external program as a child process. + +.DESCRIPTION +Executes an external program and waits for the process to exit. + +After calling this command, the exit code of the process can be retrieved from the variable $LASTEXITCODE or from the pipe. + +.PARAMETER FileName +File name (path) of the program to execute. + +.PARAMETER Arguments +Arguments to pass to the program. + +.PARAMETER StdOutPath +Path to a file to write the stdout of the process to. + +.PARAMETER StdErrPath +Path to a file to write the stderr of the process to. + +.PARAMETER RequireExitCodeZero +Indicates whether to write an error to the error pipeline if the exit code is not zero. + +.OUTPUTS +Exit code of the invoked process. Also available through the $LASTEXITCODE. + +.NOTES +To change output encoding, redirect stdout to file and then read the file with the desired encoding. +#> +function Invoke-Process { + [CmdletBinding()] + param( + [ValidatePattern('^[^\r\n]*$')] + [Parameter(Mandatory = $true)] + [string]$FileName, + [ValidatePattern('^[^\r\n]*$')] + [Parameter()] + [string]$Arguments, + [string]$WorkingDirectory, + [string]$StdOutPath, + [string]$StdErrPath, + [switch]$RequireExitCodeZero + ) + + Trace-EnteringInvocation $MyInvocation + try { + $FileName = $FileName.Replace('"', '').Replace("'", "''") + Write-Host "##[command]""$FileName"" $Arguments" + + $processOptions = @{ + FilePath = $FileName + NoNewWindow = $true + PassThru = $true + } + if ($Arguments) { + $processOptions.Add("ArgumentList", $Arguments) + } + if ($WorkingDirectory) { + $processOptions.Add("WorkingDirectory", $WorkingDirectory) + } + if ($StdOutPath) { + $processOptions.Add("RedirectStandardOutput", $StdOutPath) + } + if ($StdErrPath) { + $processOptions.Add("RedirectStandardError", $StdErrPath) + } + + # TODO: For some reason, -Wait is not working on agent. + # Agent starts executing the System usage metrics and hangs the step forever. + $proc = Start-Process @processOptions + + # https://stackoverflow.com/a/23797762 + $null = $($proc.Handle) + $proc.WaitForExit() + + $procExitCode = $proc.ExitCode + Write-Verbose "Exit code: $procExitCode" + + if ($RequireExitCodeZero -and $procExitCode -ne 0) { + Write-Error (Get-LocString -Key PSLIB_Process0ExitedWithCode1 -ArgumentList ([System.IO.Path]::GetFileName($FileName)), $procExitCode) + } + + $global:LASTEXITCODE = $procExitCode + + return $procExitCode + } + finally { + Trace-LeavingInvocation $MyInvocation + } +} diff --git a/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psd1 b/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psd1 index 483585d..1cd0394 100644 Binary files a/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psd1 and b/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psd1 differ diff --git a/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psm1 b/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psm1 index 43b9561..62323bf 100644 --- a/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psm1 +++ b/task/ps_modules/VstsTaskSdk/VstsTaskSdk.psm1 @@ -54,6 +54,7 @@ Export-ModuleMember -Function @( 'Write-AddBuildTag' 'Write-AssociateArtifact' 'Write-LogDetail' + 'Write-LoggingCommand' 'Write-PrependPath' 'Write-SetEndpoint' 'Write-SetProgress' @@ -82,6 +83,7 @@ Export-ModuleMember -Function @( 'Assert-Agent' 'Assert-Path' 'Invoke-Tool' + 'Invoke-Process' # Trace functions. 'Trace-EnteringInvocation' 'Trace-LeavingInvocation' diff --git a/task/ps_modules/utils.psm1 b/task/ps_modules/utils.psm1 index 79cb234..0db58c7 100644 --- a/task/ps_modules/utils.psm1 +++ b/task/ps_modules/utils.psm1 @@ -7,6 +7,11 @@ function Get-VSPath { PROCESS { Trace-VstsEnteringInvocation $MyInvocation try { + if ($Version -eq "17.0" -and + ($instance = Get-VSSetupInstance | Select-VSSetupInstance -Version '[17.0,)') -and + $instance.installationPath) { + return $instance.installationPath + } if ($Version -eq "16.0" -and ($instance = Get-VSSetupInstance | Select-VSSetupInstance -Version '[16.0,)') -and $instance.installationPath) { @@ -18,11 +23,6 @@ function Get-VSPath { $instance.installationPath) { return $instance.installationPath } - - # Fallback to searching for an older install. - if ($path = (Get-ItemProperty -LiteralPath "HKLM:\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\$Version" -Name 'ShellFolder' -ErrorAction Ignore).ShellFolder) { - return $path - } } finally { Trace-VstsLeavingInvocation $MyInvocation @@ -38,7 +38,7 @@ function Select-VSVersion { Trace-VstsEnteringInvocation $MyInvocation try { $specificVersion = $PreferredVersion -and $PreferredVersion -ne 'latest' - $versions = '16.0', '15.0', '14.0', '12.0', '11.0', '10.0' | Where-Object { $_ -ne $PreferredVersion } + $versions = '17.0', '16.0', '15.0' | Where-Object { $_ -ne $PreferredVersion } # Look for a specific version of Visual Studio. if ($specificVersion) { diff --git a/task/task.json b/task/task.json index ee5b7e9..4882725 100644 --- a/task/task.json +++ b/task/task.json @@ -60,11 +60,9 @@ "defaultValue": "latest", "options": { "latest": "Latest", + "17.0": "Visual Studio 2022", "16.0": "Visual Studio 2019", - "15.0": "Visual Studio 2017", - "14.0": "Visual Studio 2015", - "12.0": "Visual Studio 2013", - "11.0": "Visual Studio 2012" + "15.0": "Visual Studio 2017" } }, {