SetupBase.Env.ps1
enum Scope { AsProcess CurrentUser LocalMachine } function Private-Add-EnvVarPath { [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")] param( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$Path, [Scope]$Scope = [Scope]::AsProcess ) $IsAdmin = (New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) if ($Scope -eq [Scope]::AsProcess) { if ($IsAdmin -eq $true) { $Scope = [Scope]::LocalMachine } else { $Scope = [Scope]::CurrentUser } } if ($Scope -eq [Scope]::CurrentUser) { $USERPATHS = [System.Environment]::GetEnvironmentVariable("PATH",[System.EnvironmentVariableTarget]::User) $NEW = "$USERPATHS;$Path" [System.Environment]::SetEnvironmentVariable("PATH",$NEW,[System.EnvironmentVariableTarget]::User) } elseif ($Scope -eq [Scope]::LocalMachine) { if($IsAdmin) { $MACHINEPATHS = [System.Environment]::GetEnvironmentVariable("PATH",[System.EnvironmentVariableTarget]::Machine) $NEW = "$MACHINEPATHS;$Path" [System.Environment]::SetEnvironmentVariable("PATH",$NEW,[System.EnvironmentVariableTarget]::Machine) } else { Write-Warning "Can not set Machine environment variable $Name with value $Value. Admin rights are required for this operation." } } } function Private-Remove-EnvVarPath { [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")] param( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$Path, [Scope]$Scope = [Scope]::AsProcess ) $IsAdmin = (New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) if ($Scope -eq [Scope]::AsProcess) { if ($IsAdmin -eq $true) { $Scope = [Scope]::LocalMachine } else { $Scope = [Scope]::CurrentUser } } if ($Scope -eq [Scope]::CurrentUser) { $UserPathArrayNew = @() $UserPathArray = [System.Environment]::GetEnvironmentVariable("PATH",[System.EnvironmentVariableTarget]::User) -split ';' foreach ($item in $UserPathArray) { if ($Path -notlike $item) { $UserPathArrayNew += $item } } $UserPathArrayNewString = $UserPathArrayNew -join ';' [System.Environment]::SetEnvironmentVariable("PATH",$UserPathArrayNewString,[System.EnvironmentVariableTarget]::User) } elseif ($Scope -eq [Scope]::LocalMachine) { if($IsAdmin) { $MachinePathArrayNew = @() $MachinePathArray = [System.Environment]::GetEnvironmentVariable("PATH",[System.EnvironmentVariableTarget]::Machine) -split ';' foreach ($item in $MachinePathArray) { if ($Path -notlike $item) { $MachinePathArrayNew += $item } } $MachinePathArrayNewString = $MachinePathArrayNew -join ';' [System.Environment]::SetEnvironmentVariable("PATH",$MachinePathArrayNewString,[System.EnvironmentVariableTarget]::Machine) } else { Write-Warning "Can not group machine path environment variable. Admin rights are required for this operation." } } } function Private-Group-EnvVarPath { [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")] param( [Scope]$Scope = [Scope]::AsProcess ) $IsAdmin = (New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) if ($Scope -eq [Scope]::AsProcess) { if ($IsAdmin -eq $true) { $Scope = [Scope]::LocalMachine } else { $Scope = [Scope]::CurrentUser } } if ($Scope -eq [Scope]::CurrentUser) { $USERPATHSARRAY = @() $USERPATHSARRAY = [System.Environment]::GetEnvironmentVariable("PATH",[System.EnvironmentVariableTarget]::User) -split ';' $USERPATHSARRAY = $USERPATHSARRAY | Group-Object | Select-object -Property Name | Sort-Object -Property Name $USERPATHSARRAYSTRING = $USERPATHSARRAY.Name -join ';' [System.Environment]::SetEnvironmentVariable("PATH",$USERPATHSARRAYSTRING,[System.EnvironmentVariableTarget]::User) } elseif ($Scope -eq [Scope]::LocalMachine) { if($IsAdmin) { $MachinePATHSARRAY = @() $MachinePATHSARRAY = [System.Environment]::GetEnvironmentVariable("PATH",[System.EnvironmentVariableTarget]::Machine) -split ';' $MachinePATHSARRAY = $MachinePATHSARRAY | Group-Object | Select-object -Property Name | Sort-Object -Property Name $MachinePATHSARRAYSTRING = $MachinePATHSARRAY.Name -join ';' [System.Environment]::SetEnvironmentVariable("PATH",$MachinePATHSARRAYSTRING,[System.EnvironmentVariableTarget]::Machine) } else { Write-Warning "Can not group machine path environment variable. Admin rights are required for this operation." } } } function Private-Show-EnvVarPath { [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")] param( [Scope]$Scope ) $data = @() if ((-not $PSBoundParameters.ContainsKey('Scope'))) { $vars = [System.Environment]::GetEnvironmentVariable("PATH",[System.EnvironmentVariableTarget]::User) -Split ";" foreach ($item in $vars) { $data += [PSCustomObject]@{ Path = $item ; Scope = "CurrentUser"} } $vars= [System.Environment]::GetEnvironmentVariable("PATH",[System.EnvironmentVariableTarget]::Machine) -Split ";" foreach ($item in $vars) { $data += [PSCustomObject]@{ Path = $item ; Scope = "LocalMachine"} } } else { if ($Scope -eq [Scope]::AsProcess) { if ($IsAdmin -eq $true) { $Scope = [Scope]::LocalMachine } else { $Scope = [Scope]::CurrentUser } } if ($Scope -eq [Scope]::CurrentUser) { $vars = [System.Environment]::GetEnvironmentVariable("PATH",[System.EnvironmentVariableTarget]::User) -Split ";" foreach ($item in $vars) { $data += [PSCustomObject]@{ Path = $item ; Scope = "CurrentUser"} } } elseif ($Scope -eq [Scope]::LocalMachine) { $vars= [System.Environment]::GetEnvironmentVariable("PATH",[System.EnvironmentVariableTarget]::Machine) -Split ";" foreach ($item in $vars) { $data += [PSCustomObject]@{ Path = $item ; Scope = "LocalMachine"} } } } Write-Output $data | Format-Table -Property Scope, Path } function Private-Add-EnvVar { [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")] param( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$Name, [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$Value, [Scope]$Scope = [Scope]::AsProcess ) $IsAdmin = (New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) if ($Scope -eq [Scope]::AsProcess) { if ($IsAdmin -eq $true) { $Scope = [Scope]::LocalMachine } else { $Scope = [Scope]::CurrentUser } } if ($Scope -eq [Scope]::CurrentUser) { [System.Environment]::SetEnvironmentVariable($Name, $Value, [System.EnvironmentVariableTarget]::User) } elseif ($Scope -eq [Scope]::LocalMachine) { if($IsAdmin) { [System.Environment]::SetEnvironmentVariable($Name, $Value, [System.EnvironmentVariableTarget]::Machine) } else { Write-Warning "Can not set Machine environment variable $Name with value $Value. Admin rights are required for this operation." } } } function Private-Remove-EnvVar { [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")] param( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$Name, [Scope]$Scope = [Scope]::AsProcess ) $IsAdmin = (New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) if ($Scope -eq [Scope]::AsProcess) { if ($IsAdmin -eq $true) { $Scope = [Scope]::LocalMachine } else { $Scope = [Scope]::CurrentUser } } if ($Scope -eq [Scope]::CurrentUser) { [System.Environment]::SetEnvironmentVariable($Name, $null, [System.EnvironmentVariableTarget]::User) } elseif ($Scope -eq [Scope]::LocalMachine) { if($IsAdmin) { [System.Environment]::SetEnvironmentVariable($Name, $null, [System.EnvironmentVariableTarget]::Machine) } else { Write-Warning "Can not remove Machine environment variable $Name. Admin rights are required for this operation." } } } function Private-Show-EnvVar { [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")] param( [Scope]$Scope ) $data = @() if ((-not $PSBoundParameters.ContainsKey('Scope'))) { $vars = [System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User) foreach ($item in $vars.GetEnumerator()) { $data += [PSCustomObject]@{ Name = $item.Key ; Value = $item.Value ; Scope = "CurrentUser"} } $vars= [System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::Machine) foreach ($item in $vars.GetEnumerator()) { $data += [PSCustomObject]@{ Name = $item.Key ; Value = $item.Value ; Scope = "LocalMachine"} } } else { if ($Scope -eq [Scope]::AsProcess) { if ($IsAdmin -eq $true) { $Scope = [Scope]::LocalMachine } else { $Scope = [Scope]::CurrentUser } } if ($Scope -eq [Scope]::CurrentUser) { $vars = [System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User) foreach ($item in $vars.GetEnumerator()) { $data += [PSCustomObject]@{ Name = $item.Key ; Value = $item.Value ; Scope = "CurrentUser"} } } elseif ($Scope -eq [Scope]::LocalMachine) { $vars = [System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::Machine) foreach ($item in $vars.GetEnumerator()) { $data += [PSCustomObject]@{ Name = $item.Key ; Value = $item.Value ; Scope = "LocalMachine"} } } } Write-Output $data | Format-Table -Property Scope, Name , Value } # SIG # Begin signature block # MIIb1wYJKoZIhvcNAQcCoIIbyDCCG8QCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUjcpSqUuQmaJ48pj5VTrzrI40 # MjygghY7MIIDKjCCAhKgAwIBAgIQL6HHqwoFIaBK+v4IX7cvUDANBgkqhkiG9w0B # AQsFADAtMSswKQYDVQQDDCJTZXR1cEJhc2UgQ29kZSBTaWduaW5nIENlcnRpZmlj # YXRlMB4XDTIyMDgyNDE3MjEzOFoXDTI0MDgyNDE3MzEzOFowLTErMCkGA1UEAwwi # U2V0dXBCYXNlIENvZGUgU2lnbmluZyBDZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcN # AQEBBQADggEPADCCAQoCggEBAK+riPnD6ghFJKZrD9Pr8ExR1Q8GhMfR6yccf1dA # ucHMs9E3RydQpQPIhIWBFej9GJPWSoZSz7bja22Y1D3j+yHArYmjd62JaZH2dw0A # WBixvXBmcdzrzA5+CR03P3Ey2gSJNxZL5XfQB+oJ4Wq1vr68N+5oqdS0kDaxfY9x # J6EOiLv85bF487zNOOMzewH9lpHvb23jqjpiauWF7K3JhlO0aNl201/nrYuoaabX # sMce+agFt7YkTbouSkAwkDAl1fvcxxJ4aid6Tpcs3lm2HwL91LMCncTp6RCQTQ7S # pfcelI0nazSfsCuMPs3LcMho0k13gE4uWDhgh4NGbsYYNtECAwEAAaNGMEQwDgYD # VR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBTjh0nl # V516/ZVRhSQi+cKSfVsIuDANBgkqhkiG9w0BAQsFAAOCAQEAhzpMoTObmPQUu1lz # qiArE4v62EsayGYfCQbc/gNucMjpjoj4oqtSPtYLuTb62RlteuWzYh1nFmTt2K+P # PbM3HkYMJ0tX6jSRzDyZSa2ENVGL81vWOFpBANFRf4JD7Fnzler0Xi2OUoulRJAw # DoQ3HKrdYgAOI8PcGZq+HT5CkZNNgWtMFDS2iPI3MHTM4aGEMvKQNMr6WXpdA/uk # A8mA/UdOgyA4C+BEZwn0UPZR/mNtCSG/XIwE/thEqlZpskt8eCVyQ+AG/tdIIXpG # jZRATGJ2gx0+ZXvAZH8qHHYh0RG9ESwfdmYoILoaeuvh0fRGP9ed+yz9DEknNGjB # X6J3BzCCBY0wggR1oAMCAQICEA6bGI750C3n79tQ4ghAGFowDQYJKoZIhvcNAQEM # BQAwZTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE # CxMQd3d3LmRpZ2ljZXJ0LmNvbTEkMCIGA1UEAxMbRGlnaUNlcnQgQXNzdXJlZCBJ # RCBSb290IENBMB4XDTIyMDgwMTAwMDAwMFoXDTMxMTEwOTIzNTk1OVowYjELMAkG # A1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRp # Z2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MIIC # IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAv+aQc2jeu+RdSjwwIjBpM+zC # pyUuySE98orYWcLhKac9WKt2ms2uexuEDcQwH/MbpDgW61bGl20dq7J58soR0uRf # 1gU8Ug9SH8aeFaV+vp+pVxZZVXKvaJNwwrK6dZlqczKU0RBEEC7fgvMHhOZ0O21x # 4i0MG+4g1ckgHWMpLc7sXk7Ik/ghYZs06wXGXuxbGrzryc/NrDRAX7F6Zu53yEio # ZldXn1RYjgwrt0+nMNlW7sp7XeOtyU9e5TXnMcvak17cjo+A2raRmECQecN4x7ax # xLVqGDgDEI3Y1DekLgV9iPWCPhCRcKtVgkEy19sEcypukQF8IUzUvK4bA3VdeGbZ # OjFEmjNAvwjXWkmkwuapoGfdpCe8oU85tRFYF/ckXEaPZPfBaYh2mHY9WV1CdoeJ # l2l6SPDgohIbZpp0yt5LHucOY67m1O+SkjqePdwA5EUlibaaRBkrfsCUtNJhbesz # 2cXfSwQAzH0clcOP9yGyshG3u3/y1YxwLEFgqrFjGESVGnZifvaAsPvoZKYz0YkH # 4b235kOkGLimdwHhD5QMIR2yVCkliWzlDlJRR3S+Jqy2QXXeeqxfjT/JvNNBERJb # 5RBQ6zHFynIWIgnffEx1P2PsIV/EIFFrb7GrhotPwtZFX50g/KEexcCPorF+CiaZ # 9eRpL5gdLfXZqbId5RsCAwEAAaOCATowggE2MA8GA1UdEwEB/wQFMAMBAf8wHQYD # VR0OBBYEFOzX44LScV1kTN8uZz/nupiuHA9PMB8GA1UdIwQYMBaAFEXroq/0ksuC # MS1Ri6enIZ3zbcgPMA4GA1UdDwEB/wQEAwIBhjB5BggrBgEFBQcBAQRtMGswJAYI # KwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBDBggrBgEFBQcwAoY3 # aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9v # dENBLmNydDBFBgNVHR8EPjA8MDqgOKA2hjRodHRwOi8vY3JsMy5kaWdpY2VydC5j # b20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMBEGA1UdIAQKMAgwBgYEVR0g # ADANBgkqhkiG9w0BAQwFAAOCAQEAcKC/Q1xV5zhfoKN0Gz22Ftf3v1cHvZqsoYcs # 7IVeqRq7IviHGmlUIu2kiHdtvRoU9BNKei8ttzjv9P+Aufih9/Jy3iS8UgPITtAq # 3votVs/59PesMHqai7Je1M/RQ0SbQyHrlnKhSLSZy51PpwYDE3cnRNTnf+hZqPC/ # Lwum6fI0POz3A8eHqNJMQBk1RmppVLC4oVaO7KTVPeix3P0c2PR3WlxUjG/voVA9 # /HYJaISfb8rbII01YBwCA8sgsKxYoA5AY8WYIsGyWfVVa88nq2x2zm8jLfR+cWoj # ayL/ErhULSd+2DrZ8LaHlv1b0VysGMNNn3O3AamfV6peKOK5lDCCBq4wggSWoAMC # AQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMC # VVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0 # LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MB4XDTIyMDMy # MzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoT # DkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBUcnVzdGVkIEc0IFJT # QTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD # ggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTepl1Gh1tKD0Z5Mom2gsMyD # +Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt+FeoAn39Q7SE2hHxc7Gz # 7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r07G1decfBmWNlCnT2exp # 39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dhgxndX7RUCyFobjchu0Cs # X7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfAcsW6Th+xtVhNef7Xj3OT # rCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpHIEPjQ2OAe3VuJyWQmDo4 # EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJSlRErWHRAKKtzQ87fSqEc # azjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0z9JMq++bPf4OuGQq+nUo # JEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y99xh3pP+OcD5sjClTNfp # mEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBIDfV8ju2TjY+Cm4T72wnSy # Px4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXTdrnSDmuZDNIztM2xAgMB # AAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS6FtltTYUv # cyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFdZEzfLmc/57qYrhwPTzAO # BgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwgwdwYIKwYBBQUHAQEE # azBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQQYIKwYB # BQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0 # ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwzLmRpZ2lj # ZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3JsMCAGA1UdIAQZMBcwCAYG # Z4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsFAAOCAgEAfVmOwJO2b5ip # RCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoNqilp/GnBzx0H6T5gyNgL # 5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8Vc40BIiXOlWk/R3f7cnQU # 1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJodskr2dfNBwCnzvqLx1T7pa # 96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6skHibBt94q6/aesXmZgaNW # hqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82HhyS7T6NJuXdmkfFynOlL # AlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HNT7ZAmyEhQNC3EyTN3B14 # OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8zOYdBeHo46Zzh3SP9HSjT # x/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIXmVnKcPA3v5gA3yAWTyf7 # YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZE/6/pNHzV9m8BPqC3jLf # BInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSFD/yYlvZVVCsfgPrA8g4r # 5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggbGMIIErqADAgECAhAKekqInsmZQpAG # YzhNhpedMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5E # aWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0 # MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwHhcNMjIwMzI5MDAwMDAwWhcNMzMw # MzE0MjM1OTU5WjBMMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIElu # Yy4xJDAiBgNVBAMTG0RpZ2lDZXJ0IFRpbWVzdGFtcCAyMDIyIC0gMjCCAiIwDQYJ # KoZIhvcNAQEBBQADggIPADCCAgoCggIBALkqliOmXLxf1knwFYIY9DPuzFxs4+Al # LtIx5DxArvurxON4XX5cNur1JY1Do4HrOGP5PIhp3jzSMFENMQe6Rm7po0tI6IlB # fw2y1vmE8Zg+C78KhBJxbKFiJgHTzsNs/aw7ftwqHKm9MMYW2Nq867Lxg9GfzQnF # uUFqRUIjQVr4YNNlLD5+Xr2Wp/D8sfT0KM9CeR87x5MHaGjlRDRSXw9Q3tRZLER0 # wDJHGVvimC6P0Mo//8ZnzzyTlU6E6XYYmJkRFMUrDKAz200kheiClOEvA+5/hQLJ # huHVGBS3BEXz4Di9or16cZjsFef9LuzSmwCKrB2NO4Bo/tBZmCbO4O2ufyguwp7g # C0vICNEyu4P6IzzZ/9KMu/dDI9/nw1oFYn5wLOUrsj1j6siugSBrQ4nIfl+wGt0Z # vZ90QQqvuY4J03ShL7BUdsGQT5TshmH/2xEvkgMwzjC3iw9dRLNDHSNQzZHXL537 # /M2xwafEDsTvQD4ZOgLUMalpoEn5deGb6GjkagyP6+SxIXuGZ1h+fx/oK+QUshbW # gaHK2jCQa+5vdcCwNiayCDv/vb5/bBMY38ZtpHlJrYt/YYcFaPfUcONCleieu5tL # suK2QT3nr6caKMmtYbCgQRgZTu1Hm2GV7T4LYVrqPnqYklHNP8lE54CLKUJy93my # 3YTqJ+7+fXprAgMBAAGjggGLMIIBhzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/ # BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAgBgNVHSAEGTAXMAgGBmeBDAEE # AjALBglghkgBhv1sBwEwHwYDVR0jBBgwFoAUuhbZbU2FL3MpdpovdYxqII+eyG8w # HQYDVR0OBBYEFI1kt4kh/lZYRIRhp+pvHDaP3a8NMFoGA1UdHwRTMFEwT6BNoEuG # SWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFJTQTQw # OTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcmwwgZAGCCsGAQUFBwEBBIGDMIGAMCQG # CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wWAYIKwYBBQUHMAKG # TGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFJT # QTQwOTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcnQwDQYJKoZIhvcNAQELBQADggIB # AA0tI3Sm0fX46kuZPwHk9gzkrxad2bOMl4IpnENvAS2rOLVwEb+EGYs/XeWGT76T # Ot4qOVo5TtiEWaW8G5iq6Gzv0UhpGThbz4k5HXBw2U7fIyJs1d/2WcuhwupMdsqh # 3KErlribVakaa33R9QIJT4LWpXOIxJiA3+5JlbezzMWn7g7h7x44ip/vEckxSli2 # 3zh8y/pc9+RTv24KfH7X3pjVKWWJD6KcwGX0ASJlx+pedKZbNZJQfPQXpodkTz5G # iRZjIGvL8nvQNeNKcEiptucdYL0EIhUlcAZyqUQ7aUcR0+7px6A+TxC5MDbk86pp # CaiLfmSiZZQR+24y8fW7OK3NwJMR1TJ4Sks3KkzzXNy2hcC7cDBVeNaY/lRtf3Gp # SBp43UZ3Lht6wDOK+EoojBKoc88t+dMj8p4Z4A2UKKDr2xpRoJWCjihrpM6ddt6p # c6pIallDrl/q+A8GQp3fBmiW/iqgdFtjZt5rLLh4qk1wbfAs8QcVfjW05rUMopml # 1xVrNQ6F1uAszOAMJLh8UgsemXzvyMjFjFhpr6s94c/MfRWuFL+Kcd/Kl7HYR+oc # heBFThIcFClYzG/Tf8u+wQ5KbyCcrtlzMlkI5y2SoRoR/jKYpl0rl+CL05zMbbUN # rkdjOEcXW28T2moQbh9Jt0RbtAgKh1pZBHYRoad3AhMcMYIFBjCCBQICAQEwQTAt # MSswKQYDVQQDDCJTZXR1cEJhc2UgQ29kZSBTaWduaW5nIENlcnRpZmljYXRlAhAv # ocerCgUhoEr6/ghfty9QMAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3AgEMMQowCKAC # gAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsx # DjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBSndlb4BF0Jah3PUh65x1wE # RTDJPzANBgkqhkiG9w0BAQEFAASCAQBD8JgS7OJe8J8j9AQvxcjqAWcG4HYYoU1G # k1Ia6hPcP1TA13R36okw5+L7hoiT7uD73KMzOPzWfzKiUx7isVpY7KhuwAfuJIqW # vgPJBy2pRsfemePE6BN8HlIqjNH8JN2sa57VGPTVVklaQWYTsXA/ZQvCONV5D9WI # 3nI/oSdv1mx6GAEtStnBEfF7494KUieibNDuFa2h7/BlWluev4XpblATCk+i2Mjx # nQfl54bhB89UokEuZOtu4dFEOAO4F7t9t40ahJZGtIbqJcEvzptMOk5ITvx5pxQ1 # +MyHOAazx0z4vnDWur7cjh1XVimJxLwETKZxgyIogOjy1o3Eya5SoYIDIDCCAxwG # CSqGSIb3DQEJBjGCAw0wggMJAgEBMHcwYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoT # DkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBUcnVzdGVkIEc0IFJT # QTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQQIQCnpKiJ7JmUKQBmM4TYaXnTAN # BglghkgBZQMEAgEFAKBpMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI # hvcNAQkFMQ8XDTIyMDgyNDE5MjYyOVowLwYJKoZIhvcNAQkEMSIEILNcv1LE6odv # LtdDdOp+/6ITBWLdcUXd1iYHvNb9p9HJMA0GCSqGSIb3DQEBAQUABIICADFi/Mvm # cQ4Z2hnigrq2WHdxN1oJDgCbAinan4ky6EQm3pARpAi6SYgfWCMrV8DXE06OnF3S # oly5+s2p+o0j4aiRrArsqGTeHMnYQvjXHL7DnewALKgXhS4BcisQZuVhd8Fnvcku # phntbSeUfD0kb4zvqj9IkRmyn6dxpjDiFShtEdmApa7gG+v240vExfki0Po/idWD # WtnEGcnXydVkWv63VKG70CewLrh9+Jb7wmB9XEnW/ThL/ucCewP5ooAQZDUmqZlQ # 295n3CbmARN+lq+U/XLSveh4tDno7D3cObCQZuObmBTjTn3r09OhWSmdv7Ie8QkB # IT8Ivw9bZxIbsdwMecEXDBLSo7LcNQeCtmy4GGuGbQ9n5TxSwLd0rUbtfS+uh4FI # QfxlJmCYZAMRpmJIuoDoCZhzTnBYEf2rkmpBFw2oTXd3aTlnUhMlnoHuBtGhYyL5 # 7thFSpuwewjzd2e0+VzOFYqmi9TqC9gFB9uvZksMouCBzaSey+5eTUvRQac1rczL # jLzsgXCdd/8RaPxImW0PV33r/YSIZNs6fhBCr7fYyhRWOuenfJJxOvZYXXyN0Ktf # yuxEOKYXytnbeKQFdxFem7wQCpehTZAWRz2BIu48lh3IER1At1PNCk5UbHAB376Q # 1I4t/gphaGhUuEs3b+yIOvXniTFGUO52D3UR # SIG # End signature block |