Akamai.IVM.psm1
|
function Get-BodyObject { [CmdletBinding()] Param( [Parameter(Mandatory)] $Source ) if ($Source -is 'String') { # Trim whitespace $Source = $Source.Trim() # Handle JSON array if ($Source.StartsWith('[')) { $BodyObject = ConvertFrom-Json -InputObject $Source -AsArray -NoEnumerate } # Handle standard JSON object elseif ($Source.StartsWith('{') -and $Source.EndsWith('}')) { $BodyObject = ConvertFrom-Json -InputObject $Source } # If none of the above, just use string as-is else { $BodyObject = $Source } } elseif ($Source -is 'Hashtable') { $BodyObject = [PScustomObject] $Source } elseif ($Source -is 'PSCustomObject' -or $Source -is 'Object' -or $Source -is 'Object[]') { $BodyObject = $Source } else { throw "Source param is of an unhandled type '$($Source.GetType().Name)'" } return $BodyObject } function Get-IVMErrorDetails { [CmdletBinding()] Param( [Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)] [Alias('id')] [string] $PolicySetID, [Parameter()] [string] $PolicyID, [Parameter()] [int] $Limit, [Parameter()] [string] $Url, [Parameter()] [int] $Size, [Parameter()] [ValidateSet('REALTIME', 'OFFLINE')] [string] $TransformationType, [Parameter()] [ValidateSet('Staging', 'Production')] [string] $Network = 'Production', [Parameter()] [string] $ContractID, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Process { $Network = $Network.ToLower() if ($TransformationType -ne '') { $TransformationType = $TransformationType.ToUpper() } $Path = "/imaging/v2/network/$Network/details/errors" $AdditionalHeaders = @{ 'Policy-Set' = $PolicySetID } if ($ContractID -ne '') { $AdditionalHeaders['Contract'] = $ContractID } $QueryParameters = @{ 'limit' = $PSBoundParameters.Limit 'url' = $PSBoundParameters.Url 'size' = $PSBoundParameters.Size 'transformationtype' = $PSBoundParameters.TransformationType 'policyid' = $PSBoundParameters.policyId } $RequestParams = @{ 'Path' = $Path 'Method' = 'GET' 'AdditionalHeaders' = $AdditionalHeaders 'QueryParameters' = $QueryParameters 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams return $Response.Body.items } } function Get-IVMImage { [CmdletBinding(DefaultParameterSetName = 'Get all')] Param( [Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)] [Alias('id')] [string] $PolicySetID, [Parameter()] [ValidateSet('Staging', 'Production')] [string] $Network = 'Production', [Parameter(ParameterSetName = 'Get one')] [string] $ImageID, [Parameter(ParameterSetName = 'Get all')] [string] $PolicyID, [Parameter(ParameterSetName = 'Get all')] [int] $Limit, [Parameter(ParameterSetName = 'Get all')] [string] $URL, [Parameter()] [string] $ContractID, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Process { $Network = $Network.ToLower() if ($ImageID) { $Path = "/imaging/v2/network/$Network/images$ImageId" } else { $Path = "/imaging/v2/network/$Network/images" } $AdditionalHeaders = @{ 'Policy-Set' = $PolicySetID } if ($ContractID -ne '') { $AdditionalHeaders['Contract'] = $ContractID } $QueryParameters = @{ 'limit' = $PSBoundParameters.Limit 'url' = $URL 'policyId' = $PolicyID } $RequestParams = @{ 'Path' = $Path 'Method' = 'GET' 'AdditionalHeaders' = $AdditionalHeaders 'QueryParameters' = $QueryParameters 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams if ($ImageID) { return $Response.Body } else { return $Response.Body.items } } } function Get-IVMLogDetails { [CmdletBinding()] Param( [Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)] [Alias('id')] [string] $PolicySetID, [Parameter()] [string] $PolicyID, [Parameter()] [int] $Limit, [Parameter()] [string] $Url, [Parameter()] [int] $Size, [Parameter()] [ValidateSet('REALTIME', 'OFFLINE')] [string] $TransformationType, [Parameter()] [ValidateSet('Staging', 'Production')] [string] $Network = 'Production', [Parameter()] [string] $ContractID, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Process { $Network = $Network.ToLower() if ($TransformationType -ne '') { $TransformationType = $TransformationType.ToUpper() } $Path = "/imaging/v2/network/$Network/details/logs" $AdditionalHeaders = @{ 'Policy-Set' = $PolicySetID } if ($ContractID -ne '') { $AdditionalHeaders['Contract'] = $ContractID } $QueryParameters = @{ 'limit' = $PSBoundParameters.Limit 'url' = $PSBoundParameters.Url 'size' = $PSBoundParameters.Size 'transformationtype' = $PSBoundParameters.TransformationType 'policyid' = $PSBoundParameters.policyId } $RequestParams = @{ 'Path' = $Path 'Method' = 'GET' 'AdditionalHeaders' = $AdditionalHeaders 'QueryParameters' = $QueryParameters 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams return $Response.Body.items } } function Get-IVMPolicy { [CmdletBinding()] Param( [Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)] [Alias('id')] [string] $PolicySetID, [Parameter()] [string] $PolicyID, [Parameter()] [ValidateSet('Staging', 'Production')] [string] $Network = 'Production', [Parameter()] [string] $ContractID, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Process { $Network = $Network.ToLower() if ($PolicyID) { $Path = "/imaging/v2/network/$Network/policies/$PolicyID" } else { $Path = "/imaging/v2/network/$Network/policies" } $AdditionalHeaders = @{ 'Policy-Set' = $PolicySetID } if ($ContractID -ne '') { $AdditionalHeaders['Contract'] = $ContractID } $RequestParams = @{ 'Path' = $Path 'Method' = 'GET' 'AdditionalHeaders' = $AdditionalHeaders 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams if ($PolicyID) { return $Response.Body } else { return $Response.Body.items } } } function Get-IVMPolicyHistory { [CmdletBinding()] Param( [Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)] [Alias('id')] [string] $PolicySetID, [Parameter(Mandatory)] [string] $PolicyID, [Parameter()] [ValidateSet('Staging', 'Production')] [string] $Network = 'Production', [Parameter()] [string] $ContractID, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Process { $Network = $Network.ToLower() $Path = "/imaging/v2/network/$Network/policies/history/$PolicyID" $AdditionalHeaders = @{ 'Policy-Set' = $PolicySetID } if ($ContractID -ne '') { $AdditionalHeaders['Contract'] = $ContractID } $RequestParams = @{ 'Path' = $Path 'Method' = 'GET' 'AdditionalHeaders' = $AdditionalHeaders 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams return $Response.Body.items } } function Get-IVMPolicySet { [CmdletBinding()] Param( [Parameter(ValueFromPipeline)] [string] $PolicySetID, [Parameter()] [string] $ContractID, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Process { if ($PolicySetID) { $Path = "/imaging/v2/policysets/$PolicySetID" } else { $Path = "/imaging/v2/policysets" } if ($ContractID -ne '') { $AdditionalHeaders = @{'Contract' = $ContractID } } $RequestParams = @{ 'Path' = $Path 'Method' = 'GET' 'AdditionalHeaders' = $AdditionalHeaders 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams return $Response.Body } } function New-IVMPolicy { [CmdletBinding()] Param( [Parameter(Mandatory)] [string] $PolicySetID, [Parameter(Mandatory)] [string] $PolicyID, [Parameter(Mandatory)] [ValidateSet('Staging', 'Production')] [string] $Network, [Parameter()] [string] $ContractID, [Parameter(Mandatory, ValueFromPipeline)] $Body, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Begin { try { $ExistingPolicy = Get-IVMPolicy -PolicySetID $PolicySetID -PolicyID $PolicyID -Network $Network -EdgeRCFile $EdgeRCFile -Section $Section -AccountSwitchKey $AccountSwitchKey } catch {} if ($ExistingPolicy) { throw "Policy $PolicyID already exists in Policy Set $PolicySetID" } } Process { $Network = $Network.ToLower() $Path = "/imaging/v2/network/$Network/policies/$PolicyID" $AdditionalHeaders = @{ 'Policy-Set' = $PolicySetID } if ($ContractID -ne '') { $AdditionalHeaders['Contract'] = $ContractID } $RequestParams = @{ 'Path' = $Path 'Method' = 'PUT' 'AdditionalHeaders' = $AdditionalHeaders 'Body' = $Body 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams return $Response.Body } End {} } function New-IVMPolicySet { [CmdletBinding(DefaultParameterSetName = 'Attributes')] Param( [Parameter(Mandatory, ParameterSetName = 'Attributes')] [string] $Name, [Parameter(Mandatory, ParameterSetName = 'Attributes')] [ValidateSet('US', 'EMEA', 'ASIA', 'AUSTRALIA', 'JAPAN', 'CHINA')] [string] $Region, [Parameter(Mandatory, ParameterSetName = 'Attributes')] [ValidateSet('IMAGE', 'VIDEO')] [string] $Type, [Parameter(ParameterSetName = 'Attributes')] [Object] $DefaultPolicy, [Parameter(Mandatory, ParameterSetName = 'Body', ValueFromPipeline)] $Body, [Parameter()] [string] $ContractID, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Process { $AdditionalHeaders = @{} $Path = "/imaging/v2/policysets" if ($ContractID -ne '') { $AdditionalHeaders['Contract'] = $ContractID } if ($PSCmdlet.ParameterSetName -eq 'Attributes') { $Body = @{ 'name' = $Name 'region' = $Region 'type' = $Type } if ($DefaultPolicy) { $Body.defaultPolicy = $DefaultPolicy } } $RequestParams = @{ 'Path' = $Path 'Method' = 'POST' 'AdditionalHeaders' = $AdditionalHeaders 'Body' = $Body 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams return $Response.Body } } function Remove-IVMPolicy { [CmdletBinding()] Param( [Parameter(Mandatory)] [string] $PolicySetID, [Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)] [Alias('id')] [string] $PolicyID, [Parameter(Mandatory)] [ValidateSet('Staging', 'Production')] [string] $Network, [Parameter()] [string] $ContractID, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Process { $Network = $Network.ToLower() $Path = "/imaging/v2/network/$Network/policies/$PolicyID" $AdditionalHeaders = @{ 'Policy-Set' = $PolicySetID } if ($ContractID -ne '') { $AdditionalHeaders['Contract'] = $ContractID } $RequestParams = @{ 'Path' = $Path 'Method' = 'DELETE' 'AdditionalHeaders' = $AdditionalHeaders 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams return $Response.Body } } function Remove-IVMPolicySet { [CmdletBinding()] Param( [Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)] [Alias('id')] [string] $PolicySetID, [Parameter()] [string] $ContractID, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Process { $Path = "/imaging/v2/policysets/$PolicySetID" $AdditionalHeaders = @{} if ($ContractID -ne '') { $AdditionalHeaders['Contract'] = $ContractID } $RequestParams = @{ 'Path' = $Path 'Method' = 'DELETE' 'AdditionalHeaders' = $AdditionalHeaders 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams return $Response.Body } } function Restore-IVMPolicy { [CmdletBinding()] Param( [Parameter(Mandatory)] [string] $PolicySetID, [Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)] [Alias('id')] [string] $PolicyID, [Parameter(Mandatory)] [ValidateSet('Staging', 'Production')] [string] $Network, [Parameter()] [string] $ContractID, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Process { $Network = $Network.ToLower() $Path = "/imaging/v2/network/$Network/policies/rollback/$PolicyID" $AdditionalHeaders = @{ 'Policy-Set' = $PolicySetID } if ($ContractID -ne '') { $AdditionalHeaders['Contract'] = $ContractID } $RequestParams = @{ 'Path' = $Path 'Method' = 'PUT' 'AdditionalHeaders' = $AdditionalHeaders 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams return $Response.Body } } function Set-IVMPolicy { [CmdletBinding()] Param( [Parameter(Mandatory)] [string] $PolicySetID, [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [Alias('id')] [string] $PolicyID, [Parameter(Mandatory)] [ValidateSet('Staging', 'Production')] [string] $Network, [Parameter()] [string] $ContractID, [Parameter(Mandatory, ValueFromPipeline)] $Body, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Process { $Network = $Network.ToLower() $Path = "/imaging/v2/network/$Network/policies/$PolicyID" $AdditionalHeaders = @{ 'Policy-Set' = $PolicySetID } if ($ContractID -ne '') { $AdditionalHeaders['Contract'] = $ContractID } $RequestParams = @{ 'Path' = $Path 'Method' = 'PUT' 'AdditionalHeaders' = $AdditionalHeaders 'Body' = $Body 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams return $Response.Body } } function Set-IVMPolicySet { [CmdletBinding()] Param( [Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)] [Alias('id')] [string] $PolicySetID, [Parameter()] [string] $Name, [Parameter()] [ValidateSet('US', 'EMEA', 'ASIA', 'AUSTRALIA', 'JAPAN', 'CHINA')] [string] $Region, [Parameter()] [string] $ContractID, [Parameter()] [string] $EdgeRCFile, [Parameter()] [string] $Section, [Parameter()] [string] $AccountSwitchKey ) Process { $Path = "/imaging/v2/policysets/$PolicySetID" if ($ContractID -ne '') { $AdditionalHeaders = @{ 'Contract' = $ContractID } } $Body = @{} if ($Name) { $Body.name = $Name } if ($Region) { $Body.region = $Region } $RequestParams = @{ 'Path' = $Path 'Method' = 'PUT' 'AdditionalHeaders' = $AdditionalHeaders 'Body' = $Body 'EdgeRCFile' = $EdgeRCFile 'Section' = $Section 'AccountSwitchKey' = $AccountSwitchKey 'Debug' = ($PSBoundParameters.Debug -eq $true) } # Make Request $Response = Invoke-AkamaiRequest @RequestParams return $Response.Body } } # SIG # Begin signature block # MIIKmAYJKoZIhvcNAQcCoIIKiTCCCoUCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDDfaQQuL16utyo # HD2XclaX4l23KG/OWR3SBEuRJD9c/6CCB1owggdWMIIFPqADAgECAhAGRzH371Sh # X6hjGl1wSSyYMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQK # Ew5EaWdpQ2VydCwgSW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBD # b2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjYwMjI1MDAw # MDAwWhcNMjcwMzEwMjM1OTU5WjCB3jETMBEGCysGAQQBgjc8AgEDEwJVUzEZMBcG # CysGAQQBgjc8AgECEwhEZWxhd2FyZTEdMBsGA1UEDwwUUHJpdmF0ZSBPcmdhbml6 # YXRpb24xEDAOBgNVBAUTBzI5MzM2MzcxCzAJBgNVBAYTAlVTMRYwFAYDVQQIEw1N # YXNzYWNodXNldHRzMRIwEAYDVQQHEwlDYW1icmlkZ2UxIDAeBgNVBAoTF0FrYW1h # aSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgVGVjaG5vbG9naWVz # IEluYzCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAJeMKuhiUI5WSRdG # IPhNWLpaVPlXbSazhGuvzZxTi623Ht46hiPejDtWB8F8dT2pd+nOWsx5NVgkv7x/ # Tz35cZcWVMDxq/K7wYe9R2GndGgfEL02/j5rslwHr8e6qFzy1axuL/xaGXuBTVrS # Qw25019l1KalUHwInKLIP7Hw1HLPTacyJNNTsYmOpZNqKIiQe9ivzBd7SuPU0cGi # 1YHUk4ZQh6Ig5tBx8XZYjTmzbiQr2WWwk/CufaoIPME5zAvmW99S05rAtOqvoUr7 # eoLUQ/TcMMA6eOliAbO5m0w/pv5YDgzhzt9hQez189zZNOkMO6AcHNitJzzsEvCg # 7fhPHxoXvasRJ0EaCEze0nuVakLPf+mGCLoZYGRctayOn4HP6LEEOGmAnQBZkwFR # 6zxk0hzAMOkK/p7MV9V6QwOuk9q7WKnIdzS/4RjRtXNxXb2fMNyBEwrwJhdmEhWF # 0eS0Wd6Uz3IbSr0+XH8FHLflQXFCkPcZKiGPgSCp8rTP3KHr6wIDAQABo4ICAjCC # Af4wHwYDVR0jBBgwFoAUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHQYDVR0OBBYEFKT3 # RICOlmcsnPu7KwUf9HL4YegLMD0GA1UdIAQ2MDQwMgYFZ4EMAQMwKTAnBggrBgEF # BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH # gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw # Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu # Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln # aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB # Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho # dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl # cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB # NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD # ggIBAGSBrSnUReHUzGTy9VC6hy2oDSpu2QNu5j3o/uoaaAy2CgI0hVJRL/OfYinL # R4hJofuNNKORp2MWXpy52L5PCGtD6/Hf92bMkDl1AP6nXuplt5HvkFPh5kVDbQ7o # HfI1Pup2IOpKxb00UNwjtKy+38ZCX0dgkASP2vQFamBCG0eTaGUh/9ZH9rz11Nkr # 9p83Snz/3eW3vOeKAFL3S5RDEMkTvv09540mnzA4J5lKGES2eje/FhwCCQUQBvqC # voNFNZHyXvW9v8KqX/3CcN1LAtGCy4XnkFjQRPyn+o/OJv5M5yX2Rm5kq9dYpWnD # U2xgxMR1BZaDf+uDoqGsLo4OqbPV4Dftp2FDs8DHMD8xP6i/k4htaWShkdyjdijr # 9TBOi+pS9vNlcCKjwLq6aibcbkUk7ef3wxR5imhajsX22vy8Zd9ByAk07BJrccgg # JGczCtiKcD6LZtP3VjnqhYPSQ4jk6wCruqcTCTwwO7FrIROVrWb2Ro+ph+/a5Llj # 5ryLyp+6NAgtNwyrkp2WxZviLbh5AXnmg9Pnwrz64UE93LEjI23AWBJsLFdJTbis # Z/tTgozdVdPZf2Dy2k8xfYZoIq6V1oWiAoQCzb5B9nETV5NGjiMPskJ4GwnlzOvz # +4IgLQjl0V5I08Qw+3uvPQ8rHHMLbKgncTqSxqtZ73kItOztMYIClDCCApACAQEw # fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV # BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB # Mzg0IDIwMjEgQ0ExAhAGRzH371ShX6hjGl1wSSyYMA0GCWCGSAFlAwQCAQUAoGow # GQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisG # AQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIBUyNFIPDgOxvypYRZqPFELgNCLAyK+R # RngCxQumLidfMA0GCSqGSIb3DQEBAQUABIIBgEXBwSCj2sO4rfmrAUph82UoEcer # NnCSktQIbuycp84tXIgDPmj7ymSC+G/4zGrqihYckgVL0CbDEJ4bePUHp+033yNx # JbaOqJjC42gJ0fcHZlKUmJ+2xmaNfrwKM26bjFW38MhdnnDDaU5gdEyudqRJ90D7 # BRw9bge9G2QvJ0w7CWqpnk8JuSuLC0DjMdhQoT9eBAraQXKQ1G5m/Uf3EJ0TgtFL # 2MEq72U6LHiLLZ8nQkrCfPWxYYCnpDDXG3CaWzHq38t6tP2EllNHjvOSllYUUooE # x1qt7WUtD+/1PeFVD41I2niDFm898BpVYuXybapCCpO0YVLOQTqYC8luLllOYeQz # xSacSc8Nv4ixlpSr5b1uZnSj4Etpn526p4EvGostGfoD3Iyenv68TgPdRMxfFf72 # wAiTzwKo+OlcbGpcZdB7+QCZh2oPOs5eiZzKAzQggbh1+vK9ifHMNPC100G+MsZO # st3++mwnwentM8eTji+j8zv2xyDEasw4Wx4YTQ== # SIG # End signature block |