custom/New-AzFunctionApp.ps1
function New-AzFunctionApp { [OutputType([Microsoft.Azure.PowerShell.Cmdlets.Functions.Models.Api20190801.ISite])] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Description('Creates a function app.')] [CmdletBinding(SupportsShouldProcess=$true, DefaultParametersetname="Consumption")] param( [Parameter(ParameterSetName="Consumption", HelpMessage='The Azure subscription ID.')] [Parameter(ParameterSetName="ByAppServicePlan")] [Parameter(ParameterSetName="CustomDockerImage")] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Runtime.DefaultInfo(Script='(Get-AzContext).Subscription.Id')] [ValidateNotNullOrEmpty()] [System.String] ${SubscriptionId}, [Parameter(Mandatory=$true, ParameterSetName="Consumption", HelpMessage='The name of the resource group.')] [Parameter(Mandatory=$true, ParameterSetName="ByAppServicePlan")] [Parameter(Mandatory=$true, ParameterSetName="CustomDockerImage")] [ValidateNotNullOrEmpty()] [System.String] ${ResourceGroupName}, [Parameter(Mandatory=$true, ParameterSetName="Consumption", HelpMessage='The name of the function app.')] [Parameter(Mandatory=$true, ParameterSetName="ByAppServicePlan")] [Parameter(Mandatory=$true, ParameterSetName="CustomDockerImage")] [ValidateNotNullOrEmpty()] [System.String] ${Name}, [Parameter(Mandatory=$true, ParameterSetName="Consumption", HelpMessage='The name of the storage account.')] [Parameter(Mandatory=$true, ParameterSetName="ByAppServicePlan")] [Parameter(Mandatory=$true, ParameterSetName="CustomDockerImage")] [ValidateNotNullOrEmpty()] [System.String] ${StorageAccountName}, [Parameter(ParameterSetName="Consumption", HelpMessage='Name of the existing App Insights project to be added to the function app.')] [Parameter(ParameterSetName="ByAppServicePlan")] [Parameter(ParameterSetName="CustomDockerImage")] [ValidateNotNullOrEmpty()] [System.String] [Alias("AppInsightsName")] ${ApplicationInsightsName}, [Parameter(ParameterSetName="Consumption", HelpMessage='Instrumentation key of App Insights to be added.')] [Parameter(ParameterSetName="ByAppServicePlan")] [Parameter(ParameterSetName="CustomDockerImage")] [ValidateNotNullOrEmpty()] [System.String] [System.String] [Alias("AppInsightsKey")] ${ApplicationInsightsKey}, [Parameter(Mandatory=$true, ParameterSetName="Consumption", HelpMessage='The location for the consumption plan.')] [ValidateNotNullOrEmpty()] [System.String] ${Location}, [Parameter(Mandatory=$true, ParameterSetName="ByAppServicePlan", HelpMessage='The name of the service plan.')] [Parameter(Mandatory=$true, ParameterSetName="CustomDockerImage")] [ValidateNotNullOrEmpty()] [System.String] ${PlanName}, [Parameter(ParameterSetName="ByAppServicePlan", HelpMessage='The OS to host the function app.')] [Parameter(ParameterSetName="Consumption")] [ArgumentCompleter([Microsoft.Azure.PowerShell.Cmdlets.Functions.Support.WorkerType])] [ValidateSet("Linux", "Windows")] [ValidateNotNullOrEmpty()] [System.String] # OS type (Linux or Windows) ${OSType}, [Parameter(Mandatory=$true, ParameterSetName="ByAppServicePlan", HelpMessage='The function runtime.')] [Parameter(Mandatory=$true, ParameterSetName="Consumption")] [ValidateNotNullOrEmpty()] [System.String] # Runtime types are defined in HelperFunctions.ps1 ${Runtime}, [Parameter(ParameterSetName="ByAppServicePlan", HelpMessage='The function runtime.')] [Parameter(ParameterSetName="Consumption")] [ValidateNotNullOrEmpty()] [System.String] # RuntimeVersion types are defined in HelperFunctions.ps1 ${RuntimeVersion}, [Parameter(ParameterSetName="ByAppServicePlan", HelpMessage='The Functions version.')] [Parameter(ParameterSetName="Consumption")] [ValidateNotNullOrEmpty()] [System.String] # FunctionsVersion types are defined in HelperFunctions.ps1 ${FunctionsVersion}, [Parameter(ParameterSetName="ByAppServicePlan", HelpMessage='Disable creating application insights resource during the function app creation. No logs will be available.')] [Parameter(ParameterSetName="Consumption")] [Parameter(ParameterSetName="CustomDockerImage")] [System.Management.Automation.SwitchParameter] [Alias("DisableAppInsights")] ${DisableApplicationInsights}, [Parameter(Mandatory=$true, ParameterSetName="CustomDockerImage", HelpMessage='Linux only. Container image name from Docker Registry, e.g. publisher/image-name:tag.')] [ValidateNotNullOrEmpty()] [System.String] ${DockerImageName}, [Parameter(ParameterSetName="CustomDockerImage", HelpMessage='The container registry user name and password. Required for private registries.')] [ValidateNotNullOrEmpty()] [PSCredential] ${DockerRegistryCredential}, [Parameter(HelpMessage='Returns true when the command succeeds.')] [System.Management.Automation.SwitchParameter] ${PassThru}, [Parameter(ParameterSetName="ByAppServicePlan", HelpMessage='Starts the operation and returns immediately, before the operation is completed. In order to determine if the operation has successfully been completed, use some other mechanism.')] [Parameter(ParameterSetName="Consumption")] [Parameter(ParameterSetName="CustomDockerImage")] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Category('Runtime')] [System.Management.Automation.SwitchParameter] ${NoWait}, [Parameter(ParameterSetName="ByAppServicePlan", HelpMessage='Runs the cmdlet as a background job.')] [Parameter(ParameterSetName="Consumption")] [Parameter(ParameterSetName="CustomDockerImage")] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Category('Runtime')] [System.Management.Automation.SwitchParameter] ${AsJob}, [Parameter(ParameterSetName="ByAppServicePlan", HelpMessage='Resource tags.')] [Parameter(ParameterSetName="Consumption")] [Parameter(ParameterSetName="CustomDockerImage")] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Category('Body')] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Runtime.Info(PossibleTypes=([Microsoft.Azure.PowerShell.Cmdlets.Functions.Models.Api20190801.IResourceTags]))] [System.Collections.Hashtable] [ValidateNotNull()] ${Tag}, [Parameter(ParameterSetName="ByAppServicePlan", HelpMessage='Function app settings.')] [Parameter(ParameterSetName="Consumption")] [Parameter(ParameterSetName="CustomDockerImage")] [ValidateNotNullOrEmpty()] [Hashtable] ${AppSetting}, [Parameter(ParameterSetName="ByAppServicePlan", HelpMessage="Specifies the type of identity used for the function app. The acceptable values for this parameter are: - SystemAssigned - UserAssigned ")] [Parameter(ParameterSetName="Consumption")] [Parameter(ParameterSetName="CustomDockerImage")] [ArgumentCompleter([Microsoft.Azure.PowerShell.Cmdlets.Functions.Support.FunctionAppManagedServiceIdentityCreateType])] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Category('Body')] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Support.ManagedServiceIdentityType] ${IdentityType}, [Parameter(ParameterSetName="ByAppServicePlan", HelpMessage="Specifies the list of user identities associated with the function app. The user identity references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'")] [Parameter(ParameterSetName="Consumption")] [Parameter(ParameterSetName="CustomDockerImage")] [ValidateNotNull()] [System.String[]] ${IdentityID}, [Alias('AzureRMContext', 'AzureCredential')] [ValidateNotNull()] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Category('Azure')] [System.Management.Automation.PSObject] ${DefaultProfile}, [Parameter(DontShow)] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Category('Runtime')] [System.Management.Automation.SwitchParameter] # Wait for .NET debugger to attach ${Break}, [Parameter(DontShow)] [ValidateNotNull()] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Category('Runtime')] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Runtime.SendAsyncStep[]] # SendAsync Pipeline Steps to be appended to the front of the pipeline ${HttpPipelineAppend}, [Parameter(DontShow)] [ValidateNotNull()] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Category('Runtime')] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Runtime.SendAsyncStep[]] # SendAsync Pipeline Steps to be prepended to the front of the pipeline ${HttpPipelinePrepend}, [Parameter(DontShow)] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Category('Runtime')] [System.Uri] # The URI for the proxy server to use ${Proxy}, [Parameter(DontShow)] [ValidateNotNull()] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Category('Runtime')] [System.Management.Automation.PSCredential] # Credentials for a proxy server to use for the remote call ${ProxyCredential}, [Parameter(DontShow)] [Microsoft.Azure.PowerShell.Cmdlets.Functions.Category('Runtime')] [System.Management.Automation.SwitchParameter] # Use the default credentials for the proxy ${ProxyUseDefaultCredentials} ) process { # Remove bound parameters from the dictionary that cannot be process by the intenal cmdlets. $paramsToRemove = @( "StorageAccountName", "ApplicationInsightsName", "ApplicationInsightsKey", "Location", "PlanName", "OSType", "Runtime", "DisableApplicationInsights", "DockerImageName", "DockerRegistryCredential", "FunctionsVersion", "RuntimeVersion", "AppSetting", "IdentityType", "IdentityID", "Tag" ) foreach ($paramName in $paramsToRemove) { if ($PSBoundParameters.ContainsKey($paramName)) { $PSBoundParameters.Remove($paramName) | Out-Null } } $functionAppIsCustomDockerImage = $PsCmdlet.ParameterSetName -eq "CustomDockerImage" $appSettings = New-Object -TypeName System.Collections.Generic.List[System.Object] $siteCofig = New-Object -TypeName Microsoft.Azure.PowerShell.Cmdlets.Functions.Models.Api20190801.SiteConfig $functionAppDef = New-Object -TypeName Microsoft.Azure.PowerShell.Cmdlets.Functions.Models.Api20190801.Site $params = GetParameterKeyValues -PSBoundParametersDictionary $PSBoundParameters ` -ParameterList @("SubscriptionId", "HttpPipelineAppend", "HttpPipelinePrepend") $runtimeJsonDefinition = $null ValidateFunctionName -Name $Name @params if (-not $functionAppIsCustomDockerImage) { if (-not $FunctionsVersion) { $FunctionsVersion = $DefaultFunctionsVersion Write-Warning "FunctionsVersion not specified. Setting default value to '$FunctionsVersion'. $SetDefaultValueParameterWarningMessage" } ValidateFunctionsVersion -FunctionsVersion $FunctionsVersion if (-not $OSType) { $OSType = GetDefaultOSType -Runtime $Runtime Write-Warning "OSType not specified. Setting default value to '$OSType'. $SetDefaultValueParameterWarningMessage" } $runtimeJsonDefinition = GetStackDefinitionForRuntime -FunctionsVersion $FunctionsVersion -Runtime $Runtime -RuntimeVersion $RuntimeVersion -OSType $OSType if (-not $runtimeJsonDefinition) { $errorId = "FailedToGetRuntimeDefinition" $message += "Failed to get runtime definition for '$Runtime' version '$RuntimeVersion' in Functions version '$FunctionsVersion' on '$OSType'." $exception = [System.InvalidOperationException]::New($message) ThrowTerminatingError -ErrorId $errorId ` -ErrorMessage $message ` -ErrorCategory ([System.Management.Automation.ErrorCategory]::InvalidOperation) ` -Exception $exception } # Add app settings if ($runtimeJsonDefinition.AppSettingsDictionary.Count -gt 0) { foreach ($keyName in $runtimeJsonDefinition.AppSettingsDictionary.Keys) { $value = $runtimeJsonDefinition.AppSettingsDictionary[$keyName] $appSettings.Add((NewAppSetting -Name $keyName -Value $value)) } } # Add site config properties if ($runtimeJsonDefinition.SiteConfigPropertiesDictionary.Count -gt 0) { foreach ($PropertyName in $runtimeJsonDefinition.SiteConfigPropertiesDictionary.Keys) { $value = $runtimeJsonDefinition.SiteConfigPropertiesDictionary[$PropertyName] $siteCofig.$PropertyName = $value } } } $servicePlan = $null $consumptionPlan = $PsCmdlet.ParameterSetName -eq "Consumption" $OSIsLinux = $OSType -eq "Linux" if ($consumptionPlan) { ValidateConsumptionPlanLocation -Location $Location -OSIsLinux:$OSIsLinux @params $functionAppDef.Location = $Location } else { # Host function app in Elastic Premium or app service plan $servicePlan = GetServicePlan $PlanName @params if ($null -ne $servicePlan.Location) { $Location = $servicePlan.Location } if ($null -ne $servicePlan.Reserved) { $OSIsLinux = $servicePlan.Reserved } $functionAppDef.ServerFarmId = $servicePlan.Id $functionAppDef.Location = $Location } if ($OSIsLinux) { # These are the scenarios we currently support when creating a Docker container: # 1) In Consumption, we only support images created by Functions with a predefine runtime name and version, e.g., Python 3.7 # 2) For App Service and Premium plans, a customer can specify a customer container image # Linux function app $functionAppDef.Kind = 'functionapp,linux' $functionAppDef.Reserved = $true # Bring your own container is only supported on App Service and Premium plans if ($DockerImageName) { $functionAppDef.Kind = 'functionapp,linux,container' $imageName = $DockerImageName.Trim().ToLower() $appSettings.Add((NewAppSetting -Name 'DOCKER_CUSTOM_IMAGE_NAME' -Value $imageName)) $appSettings.Add((NewAppSetting -Name 'FUNCTION_APP_EDIT_MODE' -Value 'readOnly')) $appSettings.Add((NewAppSetting -Name 'WEBSITES_ENABLE_APP_SERVICE_STORAGE' -Value 'false')) $siteCofig.LinuxFxVersion = "DOCKER|$imageName" # Parse the docker registry url, user name and password $dockerRegistryServerUrl = ParseDockerImage -DockerImageName $DockerImageName if ($dockerRegistryServerUrl) { $appSettings.Add((NewAppSetting -Name 'DOCKER_REGISTRY_SERVER_URL' -Value $dockerRegistryServerUrl)) if ($DockerRegistryCredential) { $appSettings.Add((NewAppSetting -Name 'DOCKER_REGISTRY_SERVER_USERNAME' -Value $DockerRegistryCredential.GetNetworkCredential().UserName)) $appSettings.Add((NewAppSetting -Name 'DOCKER_REGISTRY_SERVER_PASSWORD' -Value $DockerRegistryCredential.GetNetworkCredential().Password)) } } } else { $appSettings.Add((NewAppSetting -Name 'WEBSITES_ENABLE_APP_SERVICE_STORAGE' -Value 'true')) } } else { # Windows function app $functionAppDef.Kind = 'functionapp' } # Validate storage account and get connection string $connectionString = GetConnectionString -StorageAccountName $StorageAccountName @params $appSettings.Add((NewAppSetting -Name 'AzureWebJobsStorage' -Value $connectionString)) $appSettings.Add((NewAppSetting -Name 'AzureWebJobsDashboard' -Value $connectionString)) if (-not $functionAppIsCustomDockerImage) { $appSettings.Add((NewAppSetting -Name 'FUNCTIONS_EXTENSION_VERSION' -Value "~$FunctionsVersion")) } # If plan is not consumption or elastic premium, set always on $planIsElasticPremium = $servicePlan.SkuTier -eq 'ElasticPremium' if ((-not $consumptionPlan) -and (-not $planIsElasticPremium)) { $siteCofig.AlwaysOn = $true } # If plan is Elastic Premium or Consumption (Windows or Linux), we need these app settings if ($planIsElasticPremium -or $consumptionPlan) { $appSettings.Add((NewAppSetting -Name 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING' -Value $connectionString)) $shareName = GetShareName -FunctionAppName $Name $appSettings.Add((NewAppSetting -Name 'WEBSITE_CONTENTSHARE' -Value $shareName)) } if (-not $DisableApplicationInsights) { if ($ApplicationInsightsKey) { $appSettings.Add((NewAppSetting -Name 'APPINSIGHTS_INSTRUMENTATIONKEY' -Value $ApplicationInsightsKey)) } elseif ($ApplicationInsightsName) { $appInsightsProject = GetApplicationInsightsProject -Name $ApplicationInsightsName @params if (-not $appInsightsProject) { $errorMessage = "Failed to get application insights key for project name '$ApplicationInsightsName'. Please make sure the project exist." $exception = [System.InvalidOperationException]::New($errorMessage) ThrowTerminatingError -ErrorId "ApplicationInsightsProjectNotFound" ` -ErrorMessage $errorMessage ` -ErrorCategory ([System.Management.Automation.ErrorCategory]::InvalidOperation) ` -Exception $exception } $appSettings.Add((NewAppSetting -Name 'APPINSIGHTS_INSTRUMENTATIONKEY' -Value $appInsightsProject.InstrumentationKey)) } else { $newAppInsightsProject = CreateApplicationInsightsProject -ResourceGroupName $resourceGroupName ` -ResourceName $Name ` -Location $functionAppDef.Location ` @params if ($newAppInsightsProject) { $appSettings.Add((NewAppSetting -Name 'APPINSIGHTS_INSTRUMENTATIONKEY' -Value $newAppInsightsProject.InstrumentationKey)) } else { $warningMessage = "Unable to create the Application Insights for the function app. Creation of Application Insights will help you monitor and diagnose your function apps in the Azure Portal. `r`n" $warningMessage += "Use the 'New-AzApplicationInsights' cmdlet or the Azure Portal to create a new Application Insights project. After that, use the 'Update-AzFunctionApp' cmdlet to update Application Insights for your function app." Write-Warning $warningMessage } } } if ($Tag.Count -gt 0) { $resourceTag = NewResourceTag -Tag $Tag $functionAppDef.Tag = $resourceTag } # Add user app settings if ($appSetting.Count -gt 0) { foreach ($keyName in $appSetting.Keys) { $appSettings.Add((NewAppSetting -Name $keyName -Value $appSetting[$keyName])) } } # Set function app managed identity if ($IdentityType) { $functionAppDef.IdentityType = $IdentityType if ($IdentityType -eq "UserAssigned") { # Set UserAssigned managed identiy if (-not $IdentityID) { $errorMessage = "IdentityID is required for UserAssigned identity" $exception = [System.InvalidOperationException]::New($errorMessage) ThrowTerminatingError -ErrorId "IdentityIDIsRequiredForUserAssignedIdentity" ` -ErrorMessage $errorMessage ` -ErrorCategory ([System.Management.Automation.ErrorCategory]::InvalidOperation) ` -Exception $exception } $identityUserAssignedIdentity = NewIdentityUserAssignedIdentity -IdentityID $IdentityID $functionAppDef.IdentityUserAssignedIdentity = $identityUserAssignedIdentity } } # Set app settings and site configuration $siteCofig.AppSetting = $appSettings $functionAppDef.Config = $siteCofig $PSBoundParameters.Add("SiteEnvelope", $functionAppDef) | Out-Null if ($PsCmdlet.ShouldProcess($Name, "Creating function app")) { # Save the ErrorActionPreference $currentErrorActionPreference = $ErrorActionPreference $ErrorActionPreference = 'Stop' $exceptionThrown = $false try { Az.Functions.internal\New-AzFunctionApp @PSBoundParameters } catch { $exceptionThrown = $true $errorMessage = GetErrorMessage -Response $_ if ($errorMessage) { $exception = [System.InvalidOperationException]::New($errorMessage) ThrowTerminatingError -ErrorId "FailedToCreateFunctionApp" ` -ErrorMessage $errorMessage ` -ErrorCategory ([System.Management.Automation.ErrorCategory]::InvalidOperation) ` -Exception $exception } throw $_ } finally { # Reset the ErrorActionPreference $ErrorActionPreference = $currentErrorActionPreference } if (-not $exceptionThrown) { if ($consumptionPlan -and $OSIsLinux) { $message = "Your Linux function app '$Name', that uses a consumption plan has been successfully created but is not active until content is published using Azure Portal or the Functions Core Tools." Write-Verbose $message -Verbose } } } } } # SIG # Begin signature block # MIIoPAYJKoZIhvcNAQcCoIIoLTCCKCkCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCOntEe0F/J0xIe # 0taDqZuNIe4psxMgquHnNWJV1B+uaKCCDYUwggYDMIID66ADAgECAhMzAAADTU6R # phoosHiPAAAAAANNMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMjMwMzE2MTg0MzI4WhcNMjQwMzE0MTg0MzI4WjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQDUKPcKGVa6cboGQU03ONbUKyl4WpH6Q2Xo9cP3RhXTOa6C6THltd2RfnjlUQG+ # Mwoy93iGmGKEMF/jyO2XdiwMP427j90C/PMY/d5vY31sx+udtbif7GCJ7jJ1vLzd # j28zV4r0FGG6yEv+tUNelTIsFmmSb0FUiJtU4r5sfCThvg8dI/F9Hh6xMZoVti+k # bVla+hlG8bf4s00VTw4uAZhjGTFCYFRytKJ3/mteg2qnwvHDOgV7QSdV5dWdd0+x # zcuG0qgd3oCCAjH8ZmjmowkHUe4dUmbcZfXsgWlOfc6DG7JS+DeJak1DvabamYqH # g1AUeZ0+skpkwrKwXTFwBRltAgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUId2Img2Sp05U6XI04jli2KohL+8w # VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh # dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwMDEyKzUwMDUxNzAfBgNVHSMEGDAW # gBRIbmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v # d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIw # MTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDEx # XzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB # ACMET8WuzLrDwexuTUZe9v2xrW8WGUPRQVmyJ1b/BzKYBZ5aU4Qvh5LzZe9jOExD # YUlKb/Y73lqIIfUcEO/6W3b+7t1P9m9M1xPrZv5cfnSCguooPDq4rQe/iCdNDwHT # 6XYW6yetxTJMOo4tUDbSS0YiZr7Mab2wkjgNFa0jRFheS9daTS1oJ/z5bNlGinxq # 2v8azSP/GcH/t8eTrHQfcax3WbPELoGHIbryrSUaOCphsnCNUqUN5FbEMlat5MuY # 94rGMJnq1IEd6S8ngK6C8E9SWpGEO3NDa0NlAViorpGfI0NYIbdynyOB846aWAjN # fgThIcdzdWFvAl/6ktWXLETn8u/lYQyWGmul3yz+w06puIPD9p4KPiWBkCesKDHv # XLrT3BbLZ8dKqSOV8DtzLFAfc9qAsNiG8EoathluJBsbyFbpebadKlErFidAX8KE # usk8htHqiSkNxydamL/tKfx3V/vDAoQE59ysv4r3pE+zdyfMairvkFNNw7cPn1kH # Gcww9dFSY2QwAxhMzmoM0G+M+YvBnBu5wjfxNrMRilRbxM6Cj9hKFh0YTwba6M7z # ntHHpX3d+nabjFm/TnMRROOgIXJzYbzKKaO2g1kWeyG2QtvIR147zlrbQD4X10Ab # rRg9CpwW7xYxywezj+iNAc+QmFzR94dzJkEPUSCJPsTFMIIHejCCBWKgAwIBAgIK # 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/Xmfwb1tbWrJUnMTDXpQzTGCGg0wghoJAgEBMIGVMH4x # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p # Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAANNTpGmGiiweI8AAAAA # A00wDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw # HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIBn7 # SNFc6ztNQ32To4qGX4vC5uz1s/af5DdOCDcC1ZQ8MEIGCisGAQQBgjcCAQwxNDAy # oBSAEgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5j # b20wDQYJKoZIhvcNAQEBBQAEggEAeKR5coxi+iq8YBLivrDWKb99yRejtQKMxjrp # bTNko7i74W+2CePyCYAhHWnLP0ZHHAmjcq2m5trjSuEzIHY9b0DnSePdwPbJnfGz # +0Svw+sRTd5DC4/vZKwRilJIUMF3VkiXnVwNDzpQaOhuo7seP25FCJcsuYuPbIhA # YkmVimH2AQOAoGx3Z7CcoFM4Tw0hO8acllxbpPfvypnN6DAjK2uNdraynW0ipRBk # VFbYbCcLWU9o3h0EyiBhh+acN1vqlOILeNPuq0trRsctu6JGdF47ugw/oIJIZwDP # kC3kvddLJH92ONS/YpGt5MxMvpHCgCmK4QHnaDHr0n0s66LcH6GCF5cwgheTBgor # BgEEAYI3AwMBMYIXgzCCF38GCSqGSIb3DQEHAqCCF3AwghdsAgEDMQ8wDQYJYIZI # AWUDBAIBBQAwggFSBgsqhkiG9w0BCRABBKCCAUEEggE9MIIBOQIBAQYKKwYBBAGE # WQoDATAxMA0GCWCGSAFlAwQCAQUABCCniEoB89YDWciMYvpfPJkUxxxhbBFt5ghF # L9TBi+qyQAIGZSivkvYCGBMyMDIzMTExMDA0MjUzMC4zNzlaMASAAgH0oIHRpIHO # MIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH # UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQL # ExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hpZWxk # IFRTUyBFU046RTAwMi0wNUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1l # LVN0YW1wIFNlcnZpY2WgghHtMIIHIDCCBQigAwIBAgITMwAAAdmcXAWSsINrPgAB # AAAB2TANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz # aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv # cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx # MDAeFw0yMzA2MDExODMyNThaFw0yNDAyMDExODMyNThaMIHLMQswCQYDVQQGEwJV # UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE # ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1l # cmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046RTAwMi0w # NUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Uw # ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDV6SDN1rgY2305yLdCdUNv # HCEE4Z0ucD6CKvL5lA7HM81SMkW36RU77UaBL9PScviqfVzE2r2pRbRMtDBMwEx1 # iaizV2EZsNGGuzeR3XNYObQvJVLaCiBktAZdq75BNFIil+SfdpXgKzVQZiDBJDN5 # 0WCADNrrb48Z4Z7/KvyzaD4Gb+aZeCioB2Gg1m53d+6pUTBc3WO5xHZi/rrI/Xdn # hiE6/bspjpU5aufClIDx0QDq1QRw04adrKhcDWyGL3SaBp/hjN+4JJU7KzvsKWZV # dTuXPojnaTwWcHdEGfzxiaF30zd8SY4YRUcMGPOQORH1IPwkwwlqQkc0HBkJCQzi # aXY/IpgMRw/XP4Uv+JBJ8RZGKZN1zRPWT9d5vHGUSmX3m77RKoCfkgSJifIiQi6F # c0OYKS6gZOA7nd4t+liArr9niqeC/UcNOuVrcVC4CbkwfJ2eHkaWh18sUt3UD8QH # YLQwn95P+Hm8PZJigr1SRLcsm8pOPee7PBbndI/VeKJsmQdjek2aFO9VGnUtzDDB # owlhXshswZMMkLJ/4jUzQmUBfm+JAH1516E+G02wS7NgzMwmpHWCmAaFdd7DyJIq # Ga6bcZrR7QALdkwIhVQDgzZAuNxqwvh4Ia4ZI5Voyj4b7zWAhmurpwpMpijz+iee # Wwf6ZdmysRjR/yZ6UXmGawIDAQABo4IBSTCCAUUwHQYDVR0OBBYEFBw6wSlTZ6gF # Xl05w/s3Ga1f51wnMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8G # A1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv # Y3JsL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBs # BggrBgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cubWljcm9zb2Z0 # LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUy # MDIwMTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUH # AwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4ICAQAqNtVYLO61TMuI # anC7clt0i+XRRbHwnwNo05Q3s4ppFtd4nCmB/TJPDJ6uvEryxs0vw5Y+jQwUiKnh # l2VGGwIq0pWDIuaW4ppMV1pYQfJ6dtBGkRiTP1eKVvARYZMRaITe9ZhwJJnYP83p # MxHCxaEsZC4ilY3/55dqd4ZXTCz/cpG5anmDartnWmgysygNstTwbWJJRj85gYRk # jxi/nxKAiEFxl6GfkcnXVy8DRFQj1d3AiqsePoeIzxu1iuAJRwDrfe4NnKHqoTgW # sv7eCWJnWjWWRt7RRGrpvzLQo/BxUb8i49UwRg9G5bxpd5Su1b224Gv6G1HRU+qJ # HB1zoe41D2r/ic2BPousV9neYK5qI5PHLshAn6YTQllbV9pCbOUvZO0dtdwp5HH2 # fw6ofJNwKcPElaqkEcxvrhhRWqwNgaEVTyIV4jMc8jPbx2Nh9zAztnb9NfnDFOE+ # /gF8cZqTa/T65TGNP3uMiP3gr8nIXQ2IRwMVUoLmGu2qfmhDoews3dcvk6s1aA6m # XHw+MANEIDKKjw3i2G6JtZkEemu1OXtskg/tGnfywaMgq5CauU9b6enTtA+UE+GK # nmiQW6YUHPhBI0L2QG76TRBre5PpNVHiyc/01bjUEMpeaB+InAH4nDxYXx18wbJE # +e/IbMv0147EFL792dELF0XwqqcU0TCCB3EwggVZoAMCAQICEzMAAAAVxedrngKb # SZkAAAAAABUwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQI # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv # ZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmlj # YXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4MjIyNVoXDTMwMDkzMDE4MzIy # NVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT # B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE # AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEB # AQUAA4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC0/3unAcH0qlsTnXI # yjVX9gF/bErg4r25PhdgM/9cT8dm95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjo # YH1qUoNEt6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZTfDlhAnrEqv1y # aa8dq6z2Nr41JmTamDu6GnszrYBbfowQHJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v # 3byNpOORj7I5LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVVmG1oO5pG # ve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKyzbnijYjklqwBSru+cakXW2dg3viS # kR4dPf0gz3N9QZpGdc3EXzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2TPYr # bqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M269ewvPV2HM9Q07BMzlM # jgK8QmguEOqEUUbi0b1qGFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSL # W6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLUHMVr9lxSUV0S2yW6r1AF # emzFER1y7435UsSFF5PAPBXbGjfHCBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIu # rQIDAQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3FQIE # FgQUKqdS/mTEmr6CkTxGNSnPEP8vBO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWn # G1M1GelyMFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYBBQUHAgEW # M2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5 # Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi # AEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV # 9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3Js # Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAx # MC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8v # d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2 # LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv # 6lwUtj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTCj/ts0aGUGCLu6WZn # OlNN3Zi6th542DYunKmCVgADsAW+iehp4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1 # bSNU5HhTdSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYSEhFdPSfgQJY4 # rPf5KYnDvBewVIVCs/wMnosZiefwC2qBwoEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU # 6ZGyqVvfSaN0DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxybxCrdTDF # NLB62FD+CljdQDzHVG2dY3RILLFORy3BFARxv2T5JL5zbcqOCb2zAVdJVGTZc9d/ # HltEAY5aGZFrDZ+kKNxnGSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2tVdU # CbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3Fb+0zj6lMVGEvL8CwYKi # excdFYmNcP7ntdAoGokLjzbaukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTm # dHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNTTY3ugm2lBRDBcQZq # ELQdVTNYs6FwZvKhggNQMIICOAIBATCB+aGB0aSBzjCByzELMAkGA1UEBhMCVVMx # EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT # FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJp # Y2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkUwMDItMDVF # MC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloiMK # AQEwBwYFKw4DAhoDFQDiHEW6Ca3n5BgZV/tQ/fCR09Tf96CBgzCBgKR+MHwxCzAJ # BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv # c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0GCSqGSIb3DQEBCwUAAgUA6PgVBzAi # GA8yMDIzMTExMDAyMzM0M1oYDzIwMjMxMTExMDIzMzQzWjB3MD0GCisGAQQBhFkK # BAExLzAtMAoCBQDo+BUHAgEAMAoCAQACAi5fAgH/MAcCAQACAhRoMAoCBQDo+WaH # AgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQBhFkKAwKgCjAIAgEAAgMHoSCh # CjAIAgEAAgMBhqAwDQYJKoZIhvcNAQELBQADggEBAHjnpiUhsMDpMV2CnET9NEVK # fX57gJaGpYPdq+VR5ZFZNwxNjmJbkMkNRJiuYuLmds1uNUD1fowJGDa6+NgCkvOY # 5bmShLfGLDwP9wk2ITSFjFailT7NyajWpFSkd59D6ZwBwpskamsQ0bcZcedpfLip # nK9iMIDrBRc7kCU/jGLSySbq2kuhFDCEUQiJwTnGtMBbU/XsT2JF4Wv61saIF4D6 # TixdJHJJ9gmejorLwd/TF5+xg15EQ/q9JsaZYbFF+udDWLQaSw9+bOV+Nq8+wzXK # dS6mvvBHz7XV7O5K4ybi1XapnxbNI1Ef4tC2ILpf/PwZYGEQO//fRlH7F1g7QQ0x # ggQNMIIECQIBATCBkzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv # bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAA # AdmcXAWSsINrPgABAAAB2TANBglghkgBZQMEAgEFAKCCAUowGgYJKoZIhvcNAQkD # MQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCCGFDDWaD5Qof/LTI5wt4bF # dIujyA2UGUmkC5id/nk+XDCB+gYLKoZIhvcNAQkQAi8xgeowgecwgeQwgb0EIJ+g # FbItOm/UMDAnETzbJe0u0DWd2Mgpgb0ScbQgB3nzMIGYMIGApH4wfDELMAkGA1UE # BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0 # IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAHZnFwFkrCDaz4AAQAAAdkwIgQg40tG # 4hY9//EO0J52qbgnMed+EUwK7+0+B1Rn38opSiYwDQYJKoZIhvcNAQELBQAEggIA # EpEAmO01IYjVgKbOKwkvwoQxHmi6V5KkQb2ezojLFrdoSp4IIO/cR/47sABqnDY5 # ZhaAvEPgGufeASNDaXhB5sx76Ym8IWvr2xAs1+w8qapdUBEvmpT60CpN5BmnutTX # rn0OpDiWa8rNnQDXtcrGBLuy72bNUWLG3mOg0AbTNiBHu8wRHb5hcT+veEllqHem # eGWVcpoMboljNaxMu4LyiSZxyINHkcaVZoiD8unF2KZM1qOz8KmwBRTe0DpDVPko # y5MyAPPhZoeGwCfcvobQWBeepr0YgxHHbzYgweSfEcbGsvYvOc4zTOwe0gVsvDRE # Pf22kEXiA2m3Rl4+sjXd8fpRYHqMsS3kzkbhfs0ox4CwD2JnOCrrSPXlIygKB7B8 # P3ZX25pS8S6Mj1xZFcBv7LlCgrtnqeJ8Fsl9wuYlh1CAiyDjCyw/iFp1BBPwjcWB # 5zDepDo+aM37A2xNEdW/xOumIoBTWDy6j/rM1kw3Eh8AvERtkDIybeQgLY5pZXSw # /UDG+TGw/ypLspBpGgrlepLEXfPops/lO60R/vbs087FEB0Xb9L++MPBQn+mKc+W # WwsWybisH+RAm5Fy9IY1eeEfJIgFWaDiBUmCA15jG9jSaO67FvIBCiTbITwtnsO4 # 3klcHreBZPzsY5TKkKF4z/GSOI4dwYb6z0nYPlc9CR4= # SIG # End signature block |