UserHandling/New-NavContainerNavUser.ps1
|
<#
.Synopsis Creates a new User in a NAV/BC Container .Description Creates a new user in a NAV/BC container. If the Container is multitenant, the user will be added to a specified tenant .Parameter containerName Name of the container in which you want to create the user .Parameter tenant Name of tenant in which you want to create a user .Parameter Credential Credentials of the new user (if using NavUserPassword authentication) .Parameter WindowsAccount WindowsAccount of the new user (if using Windows authentication) .Parameter AuthenticationEmail AuthenticationEmail of the new user .Parameter ChangePasswordAtNextLogOn Switch to indicate that the user needs to change password at next login (if using NavUserPassword authentication) .Parameter PermissionSetId Name of the permissionSetId to assign to the user (default is SUPER) .Parameter AssignPremiumPlan For sandbox containers only, assign Premium plan to user if this switch is included .Parameter databaseCredential Database Credential if using AssignPremiumPlan with foreign database connection .Example New-BcContainerBcUser -containerName test -tenantId mytenant -credential $credential .Example New-BcContainerBcUser -containerName test -tenantId mytenant -WindowsAccount myuser -PermissionSetId SUPER #> function New-BcContainerBcUser { Param ( [Parameter(Mandatory=$false)] [string] $containerName = $bcContainerHelperConfig.defaultContainerName, [Parameter(Mandatory=$false)] [string] $tenant = "default", [parameter(Mandatory=$true, ParameterSetName="NavUserPassword")] [PSCredential] $Credential, [parameter(Mandatory=$true, ParameterSetName="Windows")] [string] $WindowsAccount, [parameter(Mandatory=$false, ParameterSetName="NavUserPassword")] [string] $AuthenticationEmail, [parameter(Mandatory=$false, ParameterSetName="NavUserPassword")] [bool] $ChangePasswordAtNextLogOn = $true, [parameter(Mandatory=$false)] [string] $PermissionSetId = "SUPER", [parameter(Mandatory=$false)] [string] $AppName = "Base Application", [parameter(Mandatory=$false)] [string] $AppPublisher = "Microsoft", [switch] $assignPremiumPlan, [PSCredential] $databaseCredential, [parameter(Mandatory=$false)] [string] $fullName ) $telemetryScope = InitTelemetryScope -name $MyInvocation.InvocationName -parameterValues $PSBoundParameters -includeParameters @() try { $navversion = Get-BcContainerNavversion -containerOrImageName $containerName $version = [System.Version]($navversion.split('-')[0]) Invoke-ScriptInBcContainer -containerName $containerName -ScriptBlock { param([PSCredential]$Credential, [string]$Tenant, [string]$WindowsAccount, [string]$AuthenticationEMail, [bool]$ChangePasswordAtNextLogOn, [string]$PermissionSetId, [string]$AppName, [string]$AppPublisher, $assignPremiumPlan, [PSCredential]$databaseCredential, [string]$fullName, [System.Version]$version) $TenantParam = @{} if ($Tenant) { $TenantParam.Add('Tenant', $Tenant) } $Parameters = @{} if ($AuthenticationEMail) { $Parameters.Add('AuthenticationEmail',$AuthenticationEmail) } if ($fullName) { $Parameters.Add('FullName',$fullName) } $appParameters = @{} $appStr = "" if ($version.Major -ge 20 -and $permissionSetId -ne "SUPER") { $appParameters.Add('AppName', $AppName) $appParameters.Add('AppPublisher', $AppPublisher) $appStr = " defined in $appName from $appPublisher" } if ($assignPremiumPlan) { $customConfigFile = Join-Path (Get-Item "C:\Program Files\Microsoft Dynamics NAV\*\Service").FullName "CustomSettings.config" [xml]$customConfig = [System.IO.File]::ReadAllText($customConfigFile) $multitenant = ($customConfig.SelectSingleNode("//appSettings/add[@key='Multitenant']").Value -eq "true") $databaseName = $customConfig.SelectSingleNode("//appSettings/add[@key='DatabaseName']").Value $databaseServer = $customConfig.SelectSingleNode("//appSettings/add[@key='DatabaseServer']").Value $databaseInstance = $customConfig.SelectSingleNode("//appSettings/add[@key='DatabaseInstance']").Value $databaseServerInstance = $databaseServer if ($databaseInstance) { $databaseServerInstance += "\$databaseInstance" } $sqlparams = @{ "ErrorAction" = "Ignore" } if ($databaseServerInstance -ne "localhost\SQLEXPRESS") { if (!($databaseCredential)) { throw "When using a foreign SQL Server, you need to specify databaseCredential in order to assign Premium Plan" } $sqlparams += @{ "ServerInstance" = $databaseServerInstance "Username" = $databaseCredential.Username "Password" = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($databaseCredential.Password)) } } } if($WindowsAccount) { Write-Host "Creating User for WindowsAccount $WindowsAccount" New-NAVServerUser -ServerInstance $ServerInstance @TenantParam -WindowsAccount $WindowsAccount @Parameters Write-Host "Assigning Permission Set $PermissionSetId$appStr to $WindowsAccount" New-NavServerUserPermissionSet -ServerInstance $ServerInstance @tenantParam -WindowsAccount $WindowsAccount -PermissionSetId $PermissionSetId @appParameters $user = Get-NAVServerUser -ServerInstance $ServerInstance @tenantParam | Where-Object { $_.UserName.EndsWith("\$WindowsAccount", [System.StringComparison]::InvariantCultureIgnoreCase) -or $_.UserName -eq $WindowsAccount } } else { Write-Host "Creating User $($Credential.UserName)" if ($ChangePasswordAtNextLogOn) { New-NAVServerUser -ServerInstance $ServerInstance @TenantParam -Username $Credential.UserName -Password $Credential.Password -ChangePasswordAtNextLogon @Parameters } else { New-NAVServerUser -ServerInstance $ServerInstance @TenantParam -Username $Credential.UserName -Password $Credential.Password @Parameters } Write-Host "Assigning Permission Set $PermissionSetId$appStr to $($Credential.Username)" New-NavServerUserPermissionSet -ServerInstance $ServerInstance @tenantParam -username $Credential.username -PermissionSetId $PermissionSetId @appParameters $user = Get-NAVServerUser -ServerInstance $ServerInstance @tenantParam | Where-Object { $_.UserName -eq $Credential.UserName } } if ($assignPremiumPlan -and ($user)) { $UserId = $user.UserSecurityId Write-Host "Assigning Premium plan for $($user.Username)" $dbName = $DatabaseName if ($multitenant) { $dbName = (Get-NavTenant -ServerInstance $ServerInstance -tenant $tenant).DatabaseName } 'User Plan$63ca2fa4-4f03-4f2b-a480-172fef340d3f','User Plan' | % { Invoke-Sqlcmd @sqlParams -Query "USE [$DbName] INSERT INTO [dbo].[$_] ([Plan ID],[User Security ID]) VALUES ('{8e9002c0-a1d8-4465-b952-817d2948e6e2}','$userId')" } } } -argumentList $Credential, $Tenant, $WindowsAccount, $AuthenticationEMail, $ChangePasswordAtNextLogOn, $PermissionSetId, $AppName, $AppPublisher, $assignPremiumPlan, $databaseCredential, $fullName, $version } catch { TrackException -telemetryScope $telemetryScope -errorRecord $_ throw } finally { TrackTrace -telemetryScope $telemetryScope } } Set-Alias -Name New-NavContainerNavUser -Value New-BcContainerBcUser Export-ModuleMember -Function New-BcContainerBcUser -Alias New-NavContainerNavUser # SIG # Begin signature block # MIInbQYJKoZIhvcNAQcCoIInXjCCJ1oCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAzK4Sr6feSg3/G # H+BWiCnqGBTFLT8AlhJh1BI43xtzKKCCDMkwggYEMIID7KADAgECAhMzAAACHPrN # xZvoL37EAAAAAAIcMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNVBAYTAlVTMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBD # b2RlIFNpZ25pbmcgUENBIDIwMjQwHhcNMjYwNDE2MTg1OTQxWhcNMjcwNDE1MTg1 # OTQxWjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYD # VQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IB # DwAwggEKAoIBAQDVsZfgOKmM31HPfoWOoNEiw0SlCiIxUMC0I9NMWbucKOw/e9lP # oAoehQVu6SG65V4EPzrYsnBnFPNoi4/HoOdjhz1qkrEt4I6tEcxXU6oOeY9zGveC # /3iBeuhLYxM3M/PkcUoebF+Nednm8OkdSPoDu8imViHPQq/8CQUu0WRR4rE+dMRf # rpVqfmNi2qWCX94T4MsepijGVkwE//tJg0ryAiYdHT34LSnlG/RSBZmQRGWZ5g8j # qnKjRParSqMft1gvjuUTVgtWNZfgcLFSK5Wa0myrq8OPcgTGGsRgun+tnSS+IxDT # xVsAPH1OzvPjwomguByhUe/OcvUN0D5Wmp7xAgMBAAGjggGqMIIBpjAOBgNVHQ8B # Af8EBAMCB4AwHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0O # BBYEFNoH7a2YDjOSwpkp6DHcmUS7J+0yMFQGA1UdEQRNMEukSTBHMS0wKwYDVQQL # EyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxFjAUBgNVBAUT # DTIzMDAxMis1MDc1NjkwHwYDVR0jBBgwFoAUf1k/VCHarU/vBeXmo9ctBpQSCDEw # YAYDVR0fBFkwVzBVoFOgUYZPaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w # cy9jcmwvTWljcm9zb2Z0JTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNy # bDBtBggrBgEFBQcBAQRhMF8wXQYIKwYBBQUHMAKGUWh0dHA6Ly93d3cubWljcm9z # b2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwQ29kZSUyMFNpZ25pbmcl # MjBQQ0ElMjAyMDI0LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IC # AQAUnEqhaRXe0T3hIJjvdQErEkrA/7bByjn6t5IArODkkRjzkYwtKMc2yYj2quaN # rLutWw2YZcngKPy1b71YyDJQTy4NDRwaSh9Tw5thrk3NmcPrAHia5vtcBJ1CgtKK # 7mQbIcQ22d/N3813ayCDDFewu1+jsZmX+r/aTEqaOM4TVxVtRSkuCy8nAXKuChOK # Li/zA4XuH8iEYqIsj2YoNaeSxVmeGiERXpKdo3dDmYi0kO5w2D8VS4c3+9h6gElY # BaAAg/dYErBg27qT3vv0zRDJhJufvCNylA8S7/+8H5E/PV5cng6na9VV/w9OV3qu # uND6zdGa2EX38Glp50F9AIQk3p2xXmcvorDeM4XJ7UlWYBi6g80J1SSOQnInCYFE # msfUNn3+1AaTJKSJL83quKArTac2pKhu0Yzzzrzo6HrsRiQKzpnRBb1/dMa6P3hz # 75XbMRBctNsFhZC07WCmjExdLg2eHW5uV0TY8D5+6wozJf7vF3+WHkYPO85Z+BC6 # U4FkNbYNycZ9cE4j1tXRdyDCfml6c0HWPHjNVDObrv9lKt3qUqFpX38VCqVCyNOO # 1UcXfQiVjJw32U2WUKZjt/neJKHEBsm9kFsLuWzkQ53+qcaSaytmsCnk2gOglrlD # 5d3kKyvvAw+rzm0lT8K38P6PLxfZQHhu4W8dV7Av8N2ZmDCCBr0wggSloAMCAQIC # EzMAAAA5O7Y3Gb8GHWcAAAAAADkwDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYT # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBS # b290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDExMB4XDTI0MDgwODIwNTQxOFoX # DTM2MDMyMjIyMTMwNFowVzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m # dCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQ # Q0EgMjAyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANgBnB7jOMeq # lRYHNa265v4IY9fH8TKhemHfPINe1gpLaV3dhg324WwH06LcHbpnsBukCDNitryo # 0dtS/EW6I/yEL/bLSY8hKpbfQuWusBPr9qazYcDxCW/qnjb5JsI1s8bNOg3bVATv # QVL4tcf03aTycsz8QeCdM0l/yHRObJ9QqazM1r6VPEOJ7LL+uEEb73w6QCuhs89a # 1uv1zerOYMnsneRRwCbpyW11IcggU0cRKDDq1pjVJzIbIF6+oiXXbReOsgeI8zu1 # FyQfK0fVkaya8SmVHQ/tOf23mZ4W9k0Ri22QW9p3UgSC5OUDktKxxcCmGL6tXLfO # GSWHIIV4YrTJTT6PNty5REojHJuZHArkF9VnHTERWoTjAzfI3kP+5b4alUdhgAZ7 # ttOu1bVnXfHaqPYl2rPs20ji03LOVWsh/radgE17es5hL+t6lV0eVHrVhsssROWJ # uz2MXMCt7iw7lFPG9LXKGjsmonn2gotGdHIuEg5JnJMJVmixd5LRlkmgYRZKzhxS # CwyoGIq0PhaA7Y+VPct5pCHkijcIIDm0nlkK+0KyepolcqGm0T/GYQRMhHJlGOOm # VQop36wUVUYklUy++vDWeEgEo4s7hxN6mIbf2MSIQ/iIfMZgJxC69oukMUXCrOC3 # SkE/xIkgpfl22MM1itkZ35nNXkMolU1lAgMBAAGjggFOMIIBSjAOBgNVHQ8BAf8E # BAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFH9ZP1Qh2q1P7wXl5qPX # LQaUEggxMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMB # Af8wHwYDVR0jBBgwFoAUci06AjGQQ7kUBU7h6qfHMdEjiTQwWgYDVR0fBFMwUTBP # oE2gS4ZJaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMv # TWljUm9vQ2VyQXV0MjAxMV8yMDExXzAzXzIyLmNybDBeBggrBgEFBQcBAQRSMFAw # TgYIKwYBBQUHMAKGQmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMv # TWljUm9vQ2VyQXV0MjAxMV8yMDExXzAzXzIyLmNydDANBgkqhkiG9w0BAQwFAAOC # AgEAFJQfOChP7onn6fLIMKrSlN1WYKwDFgAddymOUO3FrM8d7B/W/iQ6DxXsDn7D # 5W4wMwYeLystcEqfkjz4NURRgazyMu5yRzQh4LqjA4tStTcJh1opExo7nn5PuPBY # nbu0+THSuVHTe0VTTPVhily/piFrDo3axQ9P4C+Ol5yet+2gTfekICS5xS+cYfSI # vgn0JksVBVMYVI5QFu/qhnLhsEFEUzG8fvv0hjgkO+lkpV9ty6GkN4vdnd7ya6Q6 # aR9y34aiM1qmxaxBi6OUnyNl6fkuun/diTFnYDLTppOkr/mg5WSfCiDVMNCxtj4w # PKC5OmHm1DQIt/MNokbbH3UGsFP1QbzsLocuSqLCvH09Io3fDPTmscR9Y75G4qX7 # RTX8AdBPo0I6OEojf39zuFZt0qOHm65YWQE69cZM2ueE1MB05dNNgHK9gTE7zKvK # /fg8B2qjW88MT/WF5V5uvZGtqa9FSL2RazArA+rDPuf6JGYz4HpgMZHB4S6szWSK # YBv0VisCzfxgeU+dquXW9bd0auYlOB58DPcOYKdc3Se94g+xL4pcEhbB54JOgAkw # YTu/9dLeH2pDqeJZAABVDWRQCaXfO5LgyKwKCLYXpigrZYCjUSBcr+Ve8PFWMhVT # Ql0v4q8J/AUmQN5W4n101cY2L4A7GTQG1h32HHAvfQESWP0xghn6MIIZ9gIBATBu # MFcxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x # KDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMjQCEzMAAAIc # +s3Fm+gvfsQAAAAAAhwwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwG # CisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZI # hvcNAQkEMSIEIBVXVuLwV8Z2dcZ2YS6BYVi9VisqDWXzIUBkUvt5L9QsMEIGCisG # AQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8vd3d3 # Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAEggEAkaKXnmw708J6W8Skx1Jb # 9Oo9AWQ7GkqfRJ4xd2Ol86QloRDDCDmqeVKXvFLkKNubxsb25LmhMCTFYjbaYxo4 # emBorYjOwU6WAkmiTnSbUaROTZ7nbAHnLHbH/UCQbmlliGptTro9qm/i0Nfvw/zG # /GGAxN9HjIvbhWaF7CP9UfPQlDj5TZCiCuveGfAVzi1KjlJFa8Yp4MFtc3aiTs+q # dYz7fdcEChLtBbyNSov+IZ9UcHvPQ4CLgCtLyOqekB4BDYJ+cva5IAQQ4wCnbbmp # Q6gWsBraWBe//bFiEoZ2d9a68VRuE8oWzYp9/F9PIaHQaqP6QO1HDbbkkIfXRbpA # iqGCF6wwgheoBgorBgEEAYI3AwMBMYIXmDCCF5QGCSqGSIb3DQEHAqCCF4UwgheB # AgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFaBgsqhkiG9w0BCRABBKCCAUkEggFFMIIB # QQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCAgj6FtEI75Guy5Vr5C # iWBbwOOFeem5Q7gPuv8dxly39AIGauvdOqAAGBMyMDI2MTEwNTEwMjE1Mi40MjFa # MASAAgH0oIHZpIHWMIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0 # ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo0MzFBLTA1RTAtRDk0NzElMCMG # A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCEfowggcoMIIFEKAD # AgECAhMzAAACNZsWed5GYdQrAAEAAAI1MA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNV # BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w # HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m # dCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI2MTAxNTE4Mzc0M1oXDTI4MDExMTE4 # Mzc0M1owgdMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD # VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTAr # BgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUG # A1UECxMeblNoaWVsZCBUU1MgRVNOOjQzMUEtMDVFMC1EOTQ3MSUwIwYDVQQDExxN # aWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOC # Ag8AMIICCgKCAgEAvA2sNh2bPpbdonwoPppQdy7rBQU2AYvZmVhKyXoLox21Owvo # cY4P+BvqLOAtL67cWoekZxO9MMZ66lvqROg6EI8fsWbHn+OT/RYZps9h4drAIPhi # E3fUzjwVM3XdZ90VvxutuVbCaj0z2xAbfGJnC1emXUNnZ/1BR85NvWen44bCrJYt # ghstvh4So+UpUZg2ZdVDpR1n7spqnkG5hJBwK1pSom46V/SwisMIhfcY7Ie89Na9 # TJ5S47U1Nwf9JWEdrFLsCwrnh+65fAdfOzGy9oBdjSn/HEBE4H/7mgHIO+vkx2/q # 2TRWjNdSIi2Sj+THCRPZe+c+LBM925/pncGt42JE/gH1QcAKtF6x0sLIh9yyUfJZ # om5ZiD5s4aq/QDxEQZLA1UcWHIqFc5z+Aartxjre04B3bvwiVC6C5Yt7yxgzZHsQ # lLsOoVKPwS2fO2yA5XWNEKpuomBjICT9owmvSW/dpVGSwbypHDZt5kWO3PrNiOTj # pQXijznyE5bXFi9JlQF5Bm/BaF2Sxg7sLHstgxpP5SYoRoBjOPLqVWqtQfGEG7G1 # qxJL0YfaFnhWM8U0M90oQvV5jeGwAYq+ArsvGsYAV8r2po/xCK8R7eaNTzL5cjPz # t23S0AO224NZnGmqm5G/QXVQOX3YI/NvqSoH6kYUmqmx6n22W9B7vq9jGYUCAwEA # AaOCAUkwggFFMB0GA1UdDgQWBBQwSUMAYtxdCS9tvQtArQCayL3kLDAfBgNVHSME # GDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1l # LVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsG # AQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01p # Y3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAMBgNVHRMB # Af8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDAN # BgkqhkiG9w0BAQsFAAOCAgEApX6cT9hL8p3gSnGdvnoPm07DiccGrmj2SFZYaPRy # raviUBiKmjVy3jLXKQT0Mfbzkf8zfm5l2kr0YFQ9JW/LB/zt4p4cIVCAe+EdoxIJ # VzTGeLDkHDcvmZqhIFeh33uPrbtX9HQc5QU5TpOWute7AfohT6tqTblNLlz5OLKV # KFEJBQGFh/Mnw2t9ZLeCm4Gf1DeZ1sWNft/rHbzkwudXBh280BFKVG3AoyHbOMo3 # W5GwAyVq7IAAI39QcThuYKxNHPoVrL36WHcyfjk9eIDz6GMQhOoWI7MdgQHr0jOf # 9UQHWhN0jG6pBMKnfgPWFXUL6XlHCGYROaETJVxpzmmKQblHmWmnCTYNWb0QPWiQ # b5ZNNYD+zWI6KcpsGcRC6cYITgwYw+OfjejWV4wQW6V5mvN7e87RSMMjcMtRFoy8 # FULlM8l/B6hlnFiBbrCO24X57A0SO1TTFPn3dSx/37bjhI9ABaHuiGZlDe9IjsEV # LTzfOdE59i9ZhooyUsO/ceSZp4x0Icw3PJzq1r4/1AOlG8mQDbCsddauUM6n8VSf # q8rBJCdqdrcWpRqUerFnyAp0S+97C0YfBsaVpXUGVBPfqF+KwKlGGjxP32s3qcUi # TM8Mqt1OwRbp66d6k4/8XXLPrfqx1StgUwDjd/N8vzMPFj1pDYt1GiVXwjKNNvnR # ei8wggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3DQEB # CwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYD # VQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAe # Fw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0 # YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGm # TOe0ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/H # ZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1hlDc # wUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62A # W36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3KNi1w # jjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCG # MFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF803RKJ # 1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP # 8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFz # ymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHz # NgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3 # xwgVGD94q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIGCSsG # AQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/ # LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEG # DCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29m # dC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYIKwYB # BQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8G # A1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQw # VgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9j # cmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUF # BwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br # aS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQEL # BQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfC # cTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AF # vonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l # 9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn # 8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3mSj5m # O0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyx # TkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4 # S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9 # y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM # +Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhw # RNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIDVTCCAj0C # AQEwggEBoYHZpIHWMIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0 # ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo0MzFBLTA1RTAtRDk0NzElMCMG # A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIa # AxUAWss3eoS1rlla0gVyedUYK2xMzzCggYMwgYCkfjB8MQswCQYDVQQGEwJVUzET # MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV # TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T # dGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIFAO6WW7AwIhgPMjAyNjExMDUw # MTM0NDBaGA8yMDI2MTEwNjAxMzQ0MFowczA5BgorBgEEAYRZCgQBMSswKTAKAgUA # 7pZbsAIBADAGAgEAAgEaMAcCAQACAhN4MAoCBQDul60wAgEAMDYGCisGAQQBhFkK # BAIxKDAmMAwGCisGAQQBhFkKAwKgCjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJ # KoZIhvcNAQELBQADggEBAHsT3bwgj1ram32y6inzfTi4xOjTKXlzccWe0oU/l6PZ # VLHBX5iWoHy9FG3rqnJ+qjGvbv0gHaRkwbm+y2AkF07ME1f43mhGTXAy2L8iHRWM # fNX3cC29C0KYZrkEKJUNSa+qcaZu06WvBi/F0/C6oiH4Bh/2BtAEpD2yZTI6XDOA # y1OObC46U7xtFVeymYHhw7PF6ra66hOLgresjn8gSF/Eo3ePNzQ6ulkqkmxd71Lq # is2smqxHlq8s4hCAnjU5hqz7BL0uhN16P6Sq9r4rQcwv0mukE9xuCbbDxc4o+opy # NiW6W4Wb6zYwC/WIz0/Cb6mOi8Jk+r7otYsW7STFLroxggQNMIIECQIBATCBkzB8 # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N # aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAjWbFnneRmHUKwABAAAC # NTANBglghkgBZQMEAgEFAKCCAUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEE # MC8GCSqGSIb3DQEJBDEiBCAunS1WJZ8zdz7M6zP3nH9gMPy4mv2YfGv7vPUWgOgf # 7DCB+gYLKoZIhvcNAQkQAi8xgeowgecwgeQwgb0EILSmuCosvR8n9AW8ugAmM+Qp # goFN9j6qphrP9k5KcxDKMIGYMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT # Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m # dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB # IDIwMTACEzMAAAI1mxZ53kZh1CsAAQAAAjUwIgQgnr4WpJZ2y8rn0Loyi1tsFMIU # I3f+07enAvmQ8s2akckwDQYJKoZIhvcNAQELBQAEggIAsNiExSWApEZF75B4W3pj # Z0fOcW+ToANdub2RW4tbzpB6n4TmnR0Y5ZxJKe297KCUucDmB7tAnMJEnIkkUj5Q # dwy1e31DIrnvXfnve5S4ZG22tIBqqqTFNHpOzz2ZHmLFLiLULEUG+jGZLD71Bvoo # VFT/4EMI8gi+8Q7VWfvaUX4+hwjER1+dgmtUGqKk+cewZVDDbZ+RsYGp0PUFi2Wn # Qwki67vHxu6GjLMN312T+adSea25LXb6EE5cx5RfDBg2HmXsNrbMyDdrCkOiwzfA # FzpXTI2PXRE9g+y8DMR/Puq06vpLy7VDr1OBqHMEs22a+hTJL8qMj3njedaMW5pE # 7fAeK/qeNN1XKGsShCFa5+IYPPeS3+QQ+/v+gB/yoyQs7nKNnWkuWsDJt7/cVZyB # jAm6jzmYDMfmmHcbgRLgqTYB+5UE7r4WhfuTS/ha9YQfaVNHNl3yZD00n5qNd8r3 # L2lE3mnKCTQuZpySQP5hiLrBLLPGt9u8FioJH6zAlFrIOyzhG4exAODBc3EtZHhr # RE2103mhUpyQiVw9LzVgmbasEMUeIiNVUwu8BBbMfCeXexFOkPz1yfoe2RW1oaFm # IKAzv5WKs/+1WgqwTQox5ZMtViXat5aJbWGkmov1qDOlYabnEzsUUM+d+s4bkEqJ # QylrW2WPm2vcbfPZpTV0AbU= # SIG # End signature block |