Cdn.Autorest/custom/Move-AzCdnProfileToAFD.ps1
# ---------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Code generated by Microsoft (R) AutoRest Code Generator.Changes may cause incorrect behavior and will be lost if the code # is regenerated. # ---------------------------------------------------------------------------------- <# .Synopsis Migrate the CDN profile to Azure Frontdoor(Standard/Premium) profile. This step prepares the profile for migration and will be followed by Commit to finalize the migration. .Description Migrate the CDN profile to Azure Frontdoor(Standard/Premium) profile. This step prepares the profile for migration and will be followed by Commit to finalize the migration. .Example {{ Add code here }} .Example {{ Add code here }} .Inputs Microsoft.Azure.PowerShell.Cmdlets.Cdn.Models.Api20240501Preview.ICdnMigrationToAfdParameters .Inputs Microsoft.Azure.PowerShell.Cmdlets.Cdn.Models.ICdnIdentity .Outputs Microsoft.Azure.PowerShell.Cmdlets.Cdn.Models.Api20240501Preview.IMigrateResult .Notes COMPLEX PARAMETER PROPERTIES To create the parameters described below, construct a hash table containing the appropriate properties. For information on hash tables, run Get-Help about_Hash_Tables. INPUTOBJECT <ICdnIdentity>: Identity Parameter [CustomDomainName <String>]: Name of the domain under the profile which is unique globally. [EndpointName <String>]: Name of the endpoint under the profile which is unique globally. [Id <String>]: Resource identity path [KeyGroupName <String>]: Name of the KeyGroup under the profile. [OriginGroupName <String>]: Name of the origin group which is unique within the endpoint. [OriginName <String>]: Name of the origin which is unique within the profile. [ProfileName <String>]: Name of the Azure Front Door Standard or Azure Front Door Premium which is unique within the resource group. [ResourceGroupName <String>]: Name of the Resource group within the Azure subscription. [RouteName <String>]: Name of the routing rule. [RuleName <String>]: Name of the delivery rule which is unique within the endpoint. [RuleSetName <String>]: Name of the rule set under the profile which is unique globally. [SecretName <String>]: Name of the Secret under the profile. [SecurityPolicyName <String>]: Name of the security policy under the profile. [SubscriptionId <String>]: Azure Subscription ID. MIGRATIONENDPOINTMAPPING <IMigrationEndpointMapping[]>: A name map between classic CDN endpoints and AFD Premium/Standard endpoints. [MigratedFrom <String>]: The name of the old endpoint. [MigratedTo <String>]: The name for the new endpoint. MIGRATIONPARAMETER <ICdnMigrationToAfdParameters>: Request body for Migrate operation. [MigrationEndpointMapping <IMigrationEndpointMapping[]>]: A name map between classic CDN endpoints and AFD Premium/Standard endpoints. [MigratedFrom <String>]: The name of the old endpoint. [MigratedTo <String>]: The name for the new endpoint. [SkuName <SkuName?>]: Name of the pricing tier. .Link https://learn.microsoft.com/powershell/module/az.cdn/move-azcdnprofiletoafd #> function Move-AzCdnProfileToAFD { [OutputType([Microsoft.Azure.PowerShell.Cmdlets.Cdn.Models.Api20240501Preview.IMigrateResult])] [CmdletBinding(DefaultParameterSetName='MigrateExpanded', PositionalBinding=$false, SupportsShouldProcess, ConfirmImpact='Medium')] param( [Parameter(ParameterSetName='Migrate', Mandatory)] [Parameter(ParameterSetName='MigrateExpanded', Mandatory)] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Path')] [System.String] # Name of the Azure Front Door Standard or Azure Front Door Premium which is unique within the resource group. ${ProfileName}, [Parameter(ParameterSetName='Migrate', Mandatory)] [Parameter(ParameterSetName='MigrateExpanded', Mandatory)] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Path')] [System.String] # The name of the resource group. # The name is case insensitive. ${ResourceGroupName}, [Parameter(ParameterSetName='Migrate')] [Parameter(ParameterSetName='MigrateExpanded')] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Path')] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Runtime.DefaultInfo(Script='(Get-AzContext).Subscription.Id')] [System.String] # Azure Subscription ID. ${SubscriptionId}, [Parameter(ParameterSetName='MigrateViaIdentity', Mandatory, ValueFromPipeline)] [Parameter(ParameterSetName='MigrateViaIdentityExpanded', Mandatory, ValueFromPipeline)] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Path')] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Models.ICdnIdentity] # Identity Parameter # To construct, see NOTES section for INPUTOBJECT properties and create a hash table. ${InputObject}, [Parameter(ParameterSetName='Migrate', Mandatory, ValueFromPipeline)] [Parameter(ParameterSetName='MigrateViaIdentity', Mandatory, ValueFromPipeline)] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Body')] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Models.Api20240501Preview.ICdnMigrationToAfdParameters] # Request body for Migrate operation. # To construct, see NOTES section for MIGRATIONPARAMETER properties and create a hash table. ${MigrationParameter}, [Parameter(ParameterSetName='MigrateExpanded')] [Parameter(ParameterSetName='MigrateViaIdentityExpanded')] [AllowEmptyCollection()] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Body')] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Models.Api20240501Preview.IMigrationEndpointMapping[]] # A name map between classic CDN endpoints and AFD Premium/Standard endpoints. # To construct, see NOTES section for MIGRATIONENDPOINTMAPPING properties and create a hash table. ${MigrationEndpointMapping}, [Parameter(ParameterSetName='MigrateExpanded')] [Parameter(ParameterSetName='MigrateViaIdentityExpanded')] [ArgumentCompleter([Microsoft.Azure.PowerShell.Cmdlets.Cdn.Support.SkuName])] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Body')] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Support.SkuName] # Name of the pricing tier. ${SkuName}, [Parameter()] [ArgumentCompleter([Microsoft.Azure.PowerShell.Cmdlets.Cdn.Support.ManagedServiceIdentityType])] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Body')] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Support.ManagedServiceIdentityType] # Type of managed service identity (where both SystemAssigned and UserAssigned types are allowed). ${IdentityType}, [Parameter()] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Body')] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Runtime.Info(PossibleTypes=([Microsoft.Azure.PowerShell.Cmdlets.Cdn.Models.Api40.IUserAssignedIdentities]))] [System.Collections.Hashtable] # The set of user assigned identities associated with the resource. # The userAssignedIdentities dictionary keys will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}. # The dictionary values can be empty objects ({}) in requests. ${IdentityUserAssignedIdentity}, [Parameter()] [Alias('AzureRMContext', 'AzureCredential')] [ValidateNotNull()] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Azure')] [System.Management.Automation.PSObject] # The DefaultProfile parameter is not functional. # Use the SubscriptionId parameter when available if executing the cmdlet against a different subscription. ${DefaultProfile}, [Parameter()] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Runtime')] [System.Management.Automation.SwitchParameter] # Run the command as a job ${AsJob}, [Parameter(DontShow)] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Runtime')] [System.Management.Automation.SwitchParameter] # Wait for .NET debugger to attach ${Break}, [Parameter(DontShow)] [ValidateNotNull()] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Runtime')] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Runtime.SendAsyncStep[]] # SendAsync Pipeline Steps to be appended to the front of the pipeline ${HttpPipelineAppend}, [Parameter(DontShow)] [ValidateNotNull()] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Runtime')] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Runtime.SendAsyncStep[]] # SendAsync Pipeline Steps to be prepended to the front of the pipeline ${HttpPipelinePrepend}, [Parameter()] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Runtime')] [System.Management.Automation.SwitchParameter] # Run the command asynchronously ${NoWait}, [Parameter(DontShow)] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Runtime')] [System.Uri] # The URI for the proxy server to use ${Proxy}, [Parameter(DontShow)] [ValidateNotNull()] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Runtime')] [System.Management.Automation.PSCredential] # Credentials for a proxy server to use for the remote call ${ProxyCredential}, [Parameter(DontShow)] [Microsoft.Azure.PowerShell.Cmdlets.Cdn.Category('Runtime')] [System.Management.Automation.SwitchParameter] # Use the default credentials for the proxy ${ProxyUseDefaultCredentials} ) process { ValidateIdentityType Write-Host("Start the initial progress of migration of CDN profile to Azure Front Door.") [void]$PSBoundParameters.Remove("IdentityType") [void]$PSBoundParameters.Remove("IdentityUserAssignedIdentity") Az.Cdn.internal\Move-AzFrontDoorCdnCdnProfileToAFD @PSBoundParameters Write-Host("Migration of endpoint completed.") if (${IdentityType}) { Write-Host("Now enabling managed identity.") [void]$PSBoundParameters.Remove("MigrationParameter") [void]$PSBoundParameters.Remove("MigrationEndpointMapping") [void]$PSBoundParameters.Remove("SkuName") [void]$PSBoundParameters.Add("IdentityType", ${IdentityType}) [void]$PSBoundParameters.Add("IdentityUserAssignedIdentity", ${IdentityUserAssignedIdentity}) try { Az.Cdn.internal\Update-AzCdnProfile @PSBoundParameters } catch { Write-Host("Enabling managed identity failed, please check the error message.") Write-Error $_.Exception.Message } } Write-Host("Now you can commit the migration to finalize the migration process.") } } function ValidateIdentityType { if (${IdentityType}) { $identityTypeArray = ${IdentityType}.ToString().split(",") if (($identityTypeArray.Count -gt 2)) { throw "The IdentityType is invalid. The supported types are 'SystemAssigned,UserAssigned' when the CDN has Customer Certificates during migration." } foreach($identity in $identityTypeArray) { $id = $identity.Trim().ToLower() if (($id -ne "userassigned") -and ($id -ne "systemassigned")) { throw "The IdentityType is invalid. The supported types are 'SystemAssigned,UserAssigned' when the CDN has Customer Certificates during migration." } if ($id -eq "userassigned") { if (${IdentityUserAssignedIdentity}.count -eq 0) { throw "Identities should not be empty or null to be assigned when using User Assigned type." } } } } } # SIG # Begin signature block # MIInzQYJKoZIhvcNAQcCoIInvjCCJ7oCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAKmB6Eg64+EHo6 # 7fsX7DqtE2tGwmdTs0hv1kMJnTKRcaCCDYUwggYDMIID66ADAgECAhMzAAADri01 # UchTj1UdAAAAAAOuMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p # bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwODU5WhcNMjQxMTE0MTkwODU5WjB0MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB # AQD0IPymNjfDEKg+YyE6SjDvJwKW1+pieqTjAY0CnOHZ1Nj5irGjNZPMlQ4HfxXG # yAVCZcEWE4x2sZgam872R1s0+TAelOtbqFmoW4suJHAYoTHhkznNVKpscm5fZ899 # QnReZv5WtWwbD8HAFXbPPStW2JKCqPcZ54Y6wbuWV9bKtKPImqbkMcTejTgEAj82 # 6GQc6/Th66Koka8cUIvz59e/IP04DGrh9wkq2jIFvQ8EDegw1B4KyJTIs76+hmpV # M5SwBZjRs3liOQrierkNVo11WuujB3kBf2CbPoP9MlOyyezqkMIbTRj4OHeKlamd # WaSFhwHLJRIQpfc8sLwOSIBBAgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEE # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhx/vdKmXhwc4WiWXbsf0I53h8T8w # VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh # dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwMDEyKzUwMTgzNjAfBgNVHSMEGDAW # gBRIbmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v # d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIw # MTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDEx # XzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB # AGrJYDUS7s8o0yNprGXRXuAnRcHKxSjFmW4wclcUTYsQZkhnbMwthWM6cAYb/h2W # 5GNKtlmj/y/CThe3y/o0EH2h+jwfU/9eJ0fK1ZO/2WD0xi777qU+a7l8KjMPdwjY # 0tk9bYEGEZfYPRHy1AGPQVuZlG4i5ymJDsMrcIcqV8pxzsw/yk/O4y/nlOjHz4oV # APU0br5t9tgD8E08GSDi3I6H57Ftod9w26h0MlQiOr10Xqhr5iPLS7SlQwj8HW37 # ybqsmjQpKhmWul6xiXSNGGm36GarHy4Q1egYlxhlUnk3ZKSr3QtWIo1GGL03hT57 # xzjL25fKiZQX/q+II8nuG5M0Qmjvl6Egltr4hZ3e3FQRzRHfLoNPq3ELpxbWdH8t # Nuj0j/x9Crnfwbki8n57mJKI5JVWRWTSLmbTcDDLkTZlJLg9V1BIJwXGY3i2kR9i # 5HsADL8YlW0gMWVSlKB1eiSlK6LmFi0rVH16dde+j5T/EaQtFz6qngN7d1lvO7uk # 6rtX+MLKG4LDRsQgBTi6sIYiKntMjoYFHMPvI/OMUip5ljtLitVbkFGfagSqmbxK # 7rJMhC8wiTzHanBg1Rrbff1niBbnFbbV4UDmYumjs1FIpFCazk6AADXxoKCo5TsO # zSHqr9gHgGYQC2hMyX9MGLIpowYCURx3L7kUiGbOiMwaMIIHejCCBWKgAwIBAgIK # 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/Xmfwb1tbWrJUnMTDXpQzTGCGZ4wghmaAgEBMIGVMH4x # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p # Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAAOuLTVRyFOPVR0AAAAA # A64wDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw # HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIPim # V57Zudv8Ym6luvNn6TRpQZgq2uUC7bEzou/sPP4dMEIGCisGAQQBgjcCAQwxNDAy # oBSAEgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5j # b20wDQYJKoZIhvcNAQEBBQAEggEAlbmnMQCHRJTs7F8SBpwriM+66PGedM2z1Riz # 8EsoS5xrDB5gs2044g9J0izZV+d+dVmQ6ON4dhKppMhFOCFvM9Ke+PDhS5s6liel # aRZHoC5BbIwDKiuLhOhHhm1A+rXZn5BzRkgxy1E47wtqeCD+7zt+m2w/Bi6iM0dg # Cmc0xPOj088lIc1RqjMOreW5qdDJPq+IkYBcmasW3TTmmH9H9qGPk5zRzdnP9RUy # aa7PwTKFMCtCFjj/xKoeuQwtUqgPPcTK+ff3LluDAOoCyhDueeDUTtGgPsdNCxcg # VZqv5iePhR2c6PsOd+huOeeREqLRkj2VvD2U1hq+LYFpJonvjaGCFygwghckBgor # BgEEAYI3AwMBMYIXFDCCFxAGCSqGSIb3DQEHAqCCFwEwghb9AgEDMQ8wDQYJYIZI # AWUDBAIBBQAwggFYBgsqhkiG9w0BCRABBKCCAUcEggFDMIIBPwIBAQYKKwYBBAGE # WQoDATAxMA0GCWCGSAFlAwQCAQUABCA5nACqyYWsxJdsu8kKOF33eemHi7/W1qiC # YFkAFWutLgIGZpe+yX0/GBIyMDI0MDgwMjA4NTUxMC4wM1owBIACAfSggdikgdUw # gdIxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsT # JE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMd # VGhhbGVzIFRTUyBFU046OEQ0MS00QkY3LUIzQjcxJTAjBgNVBAMTHE1pY3Jvc29m # dCBUaW1lLVN0YW1wIFNlcnZpY2WgghF4MIIHJzCCBQ+gAwIBAgITMwAAAePfvZua # HGiDIgABAAAB4zANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEGA1UE # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ # Q0EgMjAxMDAeFw0yMzEwMTIxOTA3MjlaFw0yNTAxMTAxOTA3MjlaMIHSMQswCQYD # VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe # MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3Nv # ZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBU # U1MgRVNOOjhENDEtNEJGNy1CM0I3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1T # dGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvqQN # aB5Gn5/FIFQPo3/K4QmleCDMF40bkoHwz0BshZ4SiQmA6CGUyDwmaqQ2wHhaXU0R # dHtwvq+U8KxYYsyHKqaxxC7fr/yHZvHpNTgzx1VkR3pXhT6X2Cm175UX3WQ4jfl8 # 6onp5AMzBIFDlz0SU8VSKNMDvNXtjk9FitLgUv2nj3hOJ0KkEQfk3oA7m7zA0D+M # o73hmR+OC7uwsXxJR2tzUZE0STYX3UvenFH7fYWy5BNmLyGq2sWkQ5HFvJKCJAE/ # dwft8+V43U3KeExF/pPtcLUvQ9HIrL0xnpMFau7Yd5aK+TEi57WctBv87+fSPZBV # 3jZl/QCtcH9WrniBDwki9QfRxu/JYzw+iaEWLqrYXuF7jeOGvHK+fVeLWnAc5Wxs # fbpjEMpNbGXbSF9At3PPhFVOjxwVEx1ALGUqRKehw9ap9X/gfkA9I9eTSvwJz9wy # a9reDgS+6kXgSttI7RQ2cJG/tQPGVIaLCIaSafLneaq0Bns0t4+EW3B/GnoBMiiO # XwleOvf5udBZQIMJ3k5qnnh8Z4ZhTwrE6iGbPrTgGBPXh7exFYAGlb6hdhILIVDd # JlDf8s1NVvL0Q2y4SHZQhApZTuW/tyGsGscIPDSMz5bA6NhRLtjEwCFpLI5qGlu5 # 0Au9FRelCEQsWg7q07H/rqHOqCNJM4Rjem7joEUCAwEAAaOCAUkwggFFMB0GA1Ud # DgQWBBSxrg1mvjUVt6Fnxj56nabZiJipAzAfBgNVHSMEGDAWgBSfpxVdAF5iXYP0 # 5dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29m # dC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIw # MjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8v # d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRpbWUt # U3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB # /wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOC # AgEAt76bLqnU08wRbW3vRrxjaEbGPqyINK6UYCzhTGaR/PEwCJziPT4ZM9sfGTX3 # eZDQVE9r121tFtp7NXQYuQSxRZMYXa0/pawN2Xn+UPjBRDvoCsU56dwKkrmy8TSw # 7QXKGskdnEwsI5yW93q8Ag86RkBiKEEf9FdzHNuKWI4Kv//fDtESewu46n/u+Vck # CwbOYl6wE//QRGrGMq509a4EbP+p1GUm06Xme/01mTIuKDgPmHL2nYRzXNqi2IuI # ecn2aWwkRxQOFiPw+dicmOOwLG/7InNqjZpQeIhDMxsWr4zTxzy4ER/6zfthtlDt # cAXHB7YRUkBTClaOa0ndvfNJZMyYVa6cWvZouTq9V5LS7UzIR8S/7RsOT43eOawL # BsuQz0VoOLurYe1SffPqTsCcRNzbx0C8t/+KipStVhPAGttEfhdUUS9ohD6Lt6wN # CJxZbV0IMD8nfE6gIQJXrzrXWOuJqN91WDyjRan4UKDkIBS2yWA4W6JhQuBzGerO # SY/aLnxkRrSubgtnKYcHOwgxTTIya5WYCRjFt0QOLleqVki6k+mqYPr98uMPi5vR # IQS206mDSenStr8w0J+/+1WEm3PnCCIQgpf6zhqRrAt9j7XrEMHrg2bQegaz8bLz # be6UibgbKtRyk1nGde8To5kyMj9XUCBICDxT+F4xa5lNZVQwggdxMIIFWaADAgEC # AhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQG # EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG # A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQg # Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAxODIyMjVa # Fw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n # dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y # YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIC # IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7V # gtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa4n5KWv64NmeF # RiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhuje3X # D9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36MEBydUv626GIl3GoP # z130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+ # tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJiss254o2I5Jas # AUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/b # fV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afomXw/TNuv # XsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFzymeiXtcodgLiMxhy16cg # 8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y1BzF # a/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3xwgVGD94q0W29R6HXtqP # nhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEw # IwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0GA1UdDgQWBBSf # pxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30BATBB # MD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0Rv # Y3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGC # NxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8w # HwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmg # R4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWlj # Um9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEF # BQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29D # ZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQELBQADggIBAJ1VffwqreEs # H2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27DzHk # wo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AFvonoaeC6Ce5732pvvinL # btg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9AkvUCg # vxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKBGUIZUnWKNsId # w2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2 # zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQEcb9k+SS+c23K # jgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beu # yOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L+DvktxW/ # tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjm # jJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/2XBj # U02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIC1DCCAj0CAQEwggEAoYHYpIHVMIHS # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRN # aWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRo # YWxlcyBUU1MgRVNOOjhENDEtNEJGNy1CM0I3MSUwIwYDVQQDExxNaWNyb3NvZnQg # VGltZS1TdGFtcCBTZXJ2aWNloiMKAQEwBwYFKw4DAhoDFQA9iJe7w5FDiG8py4Ts # YrQI6DFaeqCBgzCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n # dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y # YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0G # CSqGSIb3DQEBBQUAAgUA6laqjTAiGA8yMDI0MDgwMjA4NDUwMVoYDzIwMjQwODAz # MDg0NTAxWjB0MDoGCisGAQQBhFkKBAExLDAqMAoCBQDqVqqNAgEAMAcCAQACAhBv # MAcCAQACAh9tMAoCBQDqV/wNAgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQB # hFkKAwKgCjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJKoZIhvcNAQEFBQADgYEA # XneIAlId4V0CTqJ/bIGJofw7CnkMiEFlufE7fSWiQB5nDPa1xUHPAP6PhN+7zzVK # TE0QIx4f5O+FHFG0lB05QCNtI4C8GLp5/oo9VmzqTZooU41ySWv05knqllZQ3Zai # elADiEO3rrH6gZNOdE7kz9fdlxYNThty2I95+sVt/vwxggQNMIIECQIBATCBkzB8 # MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk # bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N # aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAePfvZuaHGiDIgABAAAB # 4zANBglghkgBZQMEAgEFAKCCAUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEE # MC8GCSqGSIb3DQEJBDEiBCBOpGuz5SIemV7ho1gnBn23syJhd1y9/acqLprsa2FD # KTCB+gYLKoZIhvcNAQkQAi8xgeowgecwgeQwgb0EIDPUI6vlsP5k90SBCNa9wha4 # MlxBt2Crw12PTHIy5iYqMIGYMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT # Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m # dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB # IDIwMTACEzMAAAHj372bmhxogyIAAQAAAeMwIgQg9N05jHrumS9SDoAmQmVCt2AY # HkQjzunbeSzEpX4PJ4YwDQYJKoZIhvcNAQELBQAEggIAXc+AEGSA0MmpzGDp5P6h # NeHuZbuXnyLGcxx+929rE4xgIDdZB0u3GMu8ly5Tkk4CYlRtVUvnC/GYY3m7o75G # IeN2gQ0XdGik5up2Glrrw3ooeYkh56dV95v2nfLZXJ9vsXUT864pIFp0iQAOvHxH # igoDwdCNlzv34hQfZd0TZ/2g7jXw47WNfQc72G10otNRonVRHncX48gk1I5IDdQT # 1nR2hJSK5iYhxghTHFZEQoGUnPineQ1YgKKCEba5T+6OKDuAkaLn4eXSwEWKuUST # ViFvfSM72JNhLfB5ldH4DVGPZQMrMLPxDaiEFEVavbuhQvQOYXJayAYTz4e8bdP2 # uLdOIc1uUBigBK/xgihodsE9wQOUOdAobr8aT0rWemscvAN64DIHV+WBY+U0c+Gz # GQMi3qrLwYzzMx/uCeZj3qwetOl/HodP55VnVzRZET8zABIcJsknh9De7pwi6br/ # E6xgmeRRShz+xdZUhRM8Tix67fY2TMJc9it61zP94hmNDTVG8J3490Slx46TAxJ9 # KoQeIqL9JZeBFCvPlUnMWuTTCPYgyiST/jim2x3cnU2VNWm8SWAnhUCTTfN8vVGT # sxJERLwNFxAYWZW6WQ/S+kgFCXzwQPQY32f9u95/vIl3XY09wVtjjKnv3tmw294u # tr2nSkqKn2YzZ/6GwxZbDHY= # SIG # End signature block |