diff --git a/AppPackages/KiwixWebApp_0.9.997.0_AnyCPU_bundle.appxupload b/AppPackages/KiwixWebApp_0.9.997.0_AnyCPU_bundle.appxupload deleted file mode 100644 index 1dc77645..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_AnyCPU_bundle.appxupload and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.ps1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.ps1 deleted file mode 100644 index 7ad52540..00000000 --- a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.ps1 +++ /dev/null @@ -1,771 +0,0 @@ -# -# Add-AppxDevPackage.ps1 is a PowerShell script designed to install app -# packages created by Visual Studio for developers. To run this script from -# Explorer, right-click on its icon and choose "Run with PowerShell". -# -# Visual Studio supplies this script in the folder generated with its -# "Prepare Package" command. The same folder will also contain the app -# package (a .appx file), the signing certificate (a .cer file), and a -# "Dependencies" subfolder containing all the framework packages used by the -# app. -# -# This script simplifies installing these packages by automating the -# following functions: -# 1. Find the app package and signing certificate in the script directory -# 2. Prompt the user to acquire a developer license and to install the -# certificate if necessary -# 3. Find dependency packages that are applicable to the operating system's -# CPU architecture -# 4. Install the package along with all applicable dependencies -# -# All command line parameters are reserved for use internally by the script. -# Users should launch this script from Explorer. -# - -# .Link -# http://go.microsoft.com/fwlink/?LinkId=243053 - -param( - [switch]$Force = $false, - [switch]$GetDeveloperLicense = $false, - [string]$CertificatePath = $null -) - -$ErrorActionPreference = "Stop" - -# The language resources for this script are placed in the -# "Add-AppDevPackage.resources" subfolder alongside the script. Since the -# current working directory might not be the directory that contains the -# script, we need to create the full path of the resources directory to -# pass into Import-LocalizedData -$ScriptPath = $null -try -{ - $ScriptPath = (Get-Variable MyInvocation).Value.MyCommand.Path - $ScriptDir = Split-Path -Parent $ScriptPath -} -catch {} - -if (!$ScriptPath) -{ - PrintMessageAndExit $UiStrings.ErrorNoScriptPath $ErrorCodes.NoScriptPath -} - -$LocalizedResourcePath = Join-Path $ScriptDir "Add-AppDevPackage.resources" -Import-LocalizedData -BindingVariable UiStrings -BaseDirectory $LocalizedResourcePath - -$ErrorCodes = Data { - ConvertFrom-StringData @' - Success = 0 - NoScriptPath = 1 - NoPackageFound = 2 - ManyPackagesFound = 3 - NoCertificateFound = 4 - ManyCertificatesFound = 5 - BadCertificate = 6 - PackageUnsigned = 7 - CertificateMismatch = 8 - ForceElevate = 9 - LaunchAdminFailed = 10 - GetDeveloperLicenseFailed = 11 - InstallCertificateFailed = 12 - AddPackageFailed = 13 - ForceDeveloperLicense = 14 - CertUtilInstallFailed = 17 - CertIsCA = 18 - BannedEKU = 19 - NoBasicConstraints = 20 - NoCodeSigningEku = 21 - InstallCertificateCancelled = 22 - BannedKeyUsage = 23 - ExpiredCertificate = 24 -'@ -} - -function PrintMessageAndExit($ErrorMessage, $ReturnCode) -{ - Write-Host $ErrorMessage - if (!$Force) - { - Pause - } - exit $ReturnCode -} - -# -# Warns the user about installing certificates, and presents a Yes/No prompt -# to confirm the action. The default is set to No. -# -function ConfirmCertificateInstall -{ - $Answer = $host.UI.PromptForChoice( - "", - $UiStrings.WarningInstallCert, - [System.Management.Automation.Host.ChoiceDescription[]]@($UiStrings.PromptYesString, $UiStrings.PromptNoString), - 1) - - return $Answer -eq 0 -} - -# -# Validates whether a file is a valid certificate using CertUtil. -# This needs to be done before calling Get-PfxCertificate on the file, otherwise -# the user will get a cryptic "Password: " prompt for invalid certs. -# -function ValidateCertificateFormat($FilePath) -{ - # certutil -verify prints a lot of text that we don't need, so it's redirected to $null here - certutil.exe -verify $FilePath > $null - if ($LastExitCode -lt 0) - { - PrintMessageAndExit ($UiStrings.ErrorBadCertificate -f $FilePath, $LastExitCode) $ErrorCodes.BadCertificate - } - - # Check if certificate is expired - $cert = Get-PfxCertificate $FilePath - if (($cert.NotBefore -gt (Get-Date)) -or ($cert.NotAfter -lt (Get-Date))) - { - PrintMessageAndExit ($UiStrings.ErrorExpiredCertificate -f $FilePath) $ErrorCodes.ExpiredCertificate - } -} - -# -# Verify that the developer certificate meets the following restrictions: -# - The certificate must contain a Basic Constraints extension, and its -# Certificate Authority (CA) property must be false. -# - The certificate's Key Usage extension must be either absent, or set to -# only DigitalSignature. -# - The certificate must contain an Extended Key Usage (EKU) extension with -# Code Signing usage. -# - The certificate must NOT contain any other EKU except Code Signing and -# Lifetime Signing. -# -# These restrictions are enforced to decrease security risks that arise from -# trusting digital certificates. -# -function CheckCertificateRestrictions -{ - Set-Variable -Name BasicConstraintsExtensionOid -Value "2.5.29.19" -Option Constant - Set-Variable -Name KeyUsageExtensionOid -Value "2.5.29.15" -Option Constant - Set-Variable -Name EkuExtensionOid -Value "2.5.29.37" -Option Constant - Set-Variable -Name CodeSigningEkuOid -Value "1.3.6.1.5.5.7.3.3" -Option Constant - Set-Variable -Name LifetimeSigningEkuOid -Value "1.3.6.1.4.1.311.10.3.13" -Option Constant - - $CertificateExtensions = (Get-PfxCertificate $CertificatePath).Extensions - $HasBasicConstraints = $false - $HasCodeSigningEku = $false - - foreach ($Extension in $CertificateExtensions) - { - # Certificate must contain the Basic Constraints extension - if ($Extension.oid.value -eq $BasicConstraintsExtensionOid) - { - # CA property must be false - if ($Extension.CertificateAuthority) - { - PrintMessageAndExit $UiStrings.ErrorCertIsCA $ErrorCodes.CertIsCA - } - $HasBasicConstraints = $true - } - - # If key usage is present, it must be set to digital signature - elseif ($Extension.oid.value -eq $KeyUsageExtensionOid) - { - if ($Extension.KeyUsages -ne "DigitalSignature") - { - PrintMessageAndExit ($UiStrings.ErrorBannedKeyUsage -f $Extension.KeyUsages) $ErrorCodes.BannedKeyUsage - } - } - - elseif ($Extension.oid.value -eq $EkuExtensionOid) - { - # Certificate must contain the Code Signing EKU - $EKUs = $Extension.EnhancedKeyUsages.Value - if ($EKUs -contains $CodeSigningEkuOid) - { - $HasCodeSigningEKU = $True - } - - # EKUs other than code signing and lifetime signing are not allowed - foreach ($EKU in $EKUs) - { - if ($EKU -ne $CodeSigningEkuOid -and $EKU -ne $LifetimeSigningEkuOid) - { - PrintMessageAndExit ($UiStrings.ErrorBannedEKU -f $EKU) $ErrorCodes.BannedEKU - } - } - } - } - - if (!$HasBasicConstraints) - { - PrintMessageAndExit $UiStrings.ErrorNoBasicConstraints $ErrorCodes.NoBasicConstraints - } - if (!$HasCodeSigningEKU) - { - PrintMessageAndExit $UiStrings.ErrorNoCodeSigningEku $ErrorCodes.NoCodeSigningEku - } -} - -# -# Performs operations that require administrative privileges: -# - Prompt the user to obtain a developer license -# - Install the developer certificate (if -Force is not specified, also prompts the user to confirm) -# -function DoElevatedOperations -{ - if ($GetDeveloperLicense) - { - Write-Host $UiStrings.GettingDeveloperLicense - - if ($Force) - { - PrintMessageAndExit $UiStrings.ErrorForceDeveloperLicense $ErrorCodes.ForceDeveloperLicense - } - try - { - Show-WindowsDeveloperLicenseRegistration - } - catch - { - $Error[0] # Dump details about the last error - PrintMessageAndExit $UiStrings.ErrorGetDeveloperLicenseFailed $ErrorCodes.GetDeveloperLicenseFailed - } - } - - if ($CertificatePath) - { - Write-Host $UiStrings.InstallingCertificate - - # Make sure certificate format is valid and usage constraints are followed - ValidateCertificateFormat $CertificatePath - CheckCertificateRestrictions - - # If -Force is not specified, warn the user and get consent - if ($Force -or (ConfirmCertificateInstall)) - { - # Add cert to store - certutil.exe -addstore TrustedPeople $CertificatePath - if ($LastExitCode -lt 0) - { - PrintMessageAndExit ($UiStrings.ErrorCertUtilInstallFailed -f $LastExitCode) $ErrorCodes.CertUtilInstallFailed - } - } - else - { - PrintMessageAndExit $UiStrings.ErrorInstallCertificateCancelled $ErrorCodes.InstallCertificateCancelled - } - } -} - -# -# Checks whether the machine is missing a valid developer license. -# -function CheckIfNeedDeveloperLicense -{ - $Result = $true - try - { - $Result = (Get-WindowsDeveloperLicense | Where-Object { $_.IsValid } | Measure-Object).Count -eq 0 - } - catch {} - - return $Result -} - -# -# Launches an elevated process running the current script to perform tasks -# that require administrative privileges. This function waits until the -# elevated process terminates, and checks whether those tasks were successful. -# -function LaunchElevated -{ - # Set up command line arguments to the elevated process - $RelaunchArgs = '-ExecutionPolicy Unrestricted -file "' + $ScriptPath + '"' - - if ($Force) - { - $RelaunchArgs += ' -Force' - } - if ($NeedDeveloperLicense) - { - $RelaunchArgs += ' -GetDeveloperLicense' - } - if ($NeedInstallCertificate) - { - $RelaunchArgs += ' -CertificatePath "' + $DeveloperCertificatePath.FullName + '"' - } - - # Launch the process and wait for it to finish - try - { - $AdminProcess = Start-Process "$PsHome\PowerShell.exe" -Verb RunAs -ArgumentList $RelaunchArgs -PassThru - } - catch - { - $Error[0] # Dump details about the last error - PrintMessageAndExit $UiStrings.ErrorLaunchAdminFailed $ErrorCodes.LaunchAdminFailed - } - - while (!($AdminProcess.HasExited)) - { - Start-Sleep -Seconds 2 - } - - # Check if all elevated operations were successful - if ($NeedDeveloperLicense) - { - if (CheckIfNeedDeveloperLicense) - { - PrintMessageAndExit $UiStrings.ErrorGetDeveloperLicenseFailed $ErrorCodes.GetDeveloperLicenseFailed - } - else - { - Write-Host $UiStrings.AcquireLicenseSuccessful - } - } - if ($NeedInstallCertificate) - { - $Signature = Get-AuthenticodeSignature $DeveloperPackagePath -Verbose - if ($Signature.Status -ne "Valid") - { - PrintMessageAndExit ($UiStrings.ErrorInstallCertificateFailed -f $Signature.Status) $ErrorCodes.InstallCertificateFailed - } - else - { - Write-Host $UiStrings.InstallCertificateSuccessful - } - } -} - -# -# Finds all applicable dependency packages according to OS architecture, and -# installs the developer package with its dependencies. The expected layout -# of dependencies is: -# -# -# \Dependencies -# .appx\.msix -# \x86 -# .appx\.msix -# \x64 -# .appx\.msix -# \arm -# .appx\.msix -# -function InstallPackageWithDependencies -{ - $DependencyPackagesDir = (Join-Path $ScriptDir "Dependencies") - $DependencyPackages = @() - if (Test-Path $DependencyPackagesDir) - { - # Get architecture-neutral dependencies - $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "*.appx") | Where-Object { $_.Mode -NotMatch "d" } - $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "*.msix") | Where-Object { $_.Mode -NotMatch "d" } - - # Get architecture-specific dependencies - if (($Env:Processor_Architecture -eq "x86" -or $Env:Processor_Architecture -eq "amd64") -and (Test-Path (Join-Path $DependencyPackagesDir "x86"))) - { - $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "x86\*.appx") | Where-Object { $_.Mode -NotMatch "d" } - $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "x86\*.msix") | Where-Object { $_.Mode -NotMatch "d" } - } - if (($Env:Processor_Architecture -eq "amd64") -and (Test-Path (Join-Path $DependencyPackagesDir "x64"))) - { - $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "x64\*.appx") | Where-Object { $_.Mode -NotMatch "d" } - $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "x64\*.msix") | Where-Object { $_.Mode -NotMatch "d" } - } - if (($Env:Processor_Architecture -eq "arm") -and (Test-Path (Join-Path $DependencyPackagesDir "arm"))) - { - $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "arm\*.appx") | Where-Object { $_.Mode -NotMatch "d" } - $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "arm\*.msix") | Where-Object { $_.Mode -NotMatch "d" } - } - } - Write-Host $UiStrings.InstallingPackage - - $AddPackageSucceeded = $False - try - { - if ($DependencyPackages.FullName.Count -gt 0) - { - Write-Host $UiStrings.DependenciesFound - $DependencyPackages.FullName - Add-AppxPackage -Path $DeveloperPackagePath.FullName -DependencyPath $DependencyPackages.FullName -ForceApplicationShutdown - } - else - { - Add-AppxPackage -Path $DeveloperPackagePath.FullName -ForceApplicationShutdown - } - $AddPackageSucceeded = $? - } - catch - { - $Error[0] # Dump details about the last error - } - - if (!$AddPackageSucceeded) - { - if ($NeedInstallCertificate) - { - PrintMessageAndExit $UiStrings.ErrorAddPackageFailedWithCert $ErrorCodes.AddPackageFailed - } - else - { - PrintMessageAndExit $UiStrings.ErrorAddPackageFailed $ErrorCodes.AddPackageFailed - } - } -} - -# -# Main script logic when the user launches the script without parameters. -# -function DoStandardOperations -{ - # Check for an .appx or .msix file in the script directory - $PackagePath = Get-ChildItem (Join-Path $ScriptDir "*.appx") | Where-Object { $_.Mode -NotMatch "d" } - if ($PackagePath -eq $null) - { - $PackagePath = Get-ChildItem (Join-Path $ScriptDir "*.msix") | Where-Object { $_.Mode -NotMatch "d" } - } - $PackageCount = ($PackagePath | Measure-Object).Count - - # Check for an .appxbundle or .msixbundle file in the script directory - $BundlePath = Get-ChildItem (Join-Path $ScriptDir "*.appxbundle") | Where-Object { $_.Mode -NotMatch "d" } - if ($BundlePath -eq $null) - { - $BundlePath = Get-ChildItem (Join-Path $ScriptDir "*.msixbundle") | Where-Object { $_.Mode -NotMatch "d" } - } - $BundleCount = ($BundlePath | Measure-Object).Count - - # Check for an .eappx or .emsix file in the script directory - $EncryptedPackagePath = Get-ChildItem (Join-Path $ScriptDir "*.eappx") | Where-Object { $_.Mode -NotMatch "d" } - if ($EncryptedPackagePath -eq $null) - { - $EncryptedPackagePath = Get-ChildItem (Join-Path $ScriptDir "*.emsix") | Where-Object { $_.Mode -NotMatch "d" } - } - $EncryptedPackageCount = ($EncryptedPackagePath | Measure-Object).Count - - # Check for an .eappxbundle or .emsixbundle file in the script directory - $EncryptedBundlePath = Get-ChildItem (Join-Path $ScriptDir "*.eappxbundle") | Where-Object { $_.Mode -NotMatch "d" } - if ($EncryptedBundlePath -eq $null) - { - $EncryptedBundlePath = Get-ChildItem (Join-Path $ScriptDir "*.emsixbundle") | Where-Object { $_.Mode -NotMatch "d" } - } - $EncryptedBundleCount = ($EncryptedBundlePath | Measure-Object).Count - - $NumberOfPackages = $PackageCount + $EncryptedPackageCount - $NumberOfBundles = $BundleCount + $EncryptedBundleCount - - # There must be at least one package or bundle - if ($NumberOfPackages + $NumberOfBundles -lt 1) - { - PrintMessageAndExit $UiStrings.ErrorNoPackageFound $ErrorCodes.NoPackageFound - } - # We must have exactly one bundle OR no bundle and exactly one package - elseif ($NumberOfBundles -gt 1 -or - ($NumberOfBundles -eq 0 -and $NumberOfpackages -gt 1)) - { - PrintMessageAndExit $UiStrings.ErrorManyPackagesFound $ErrorCodes.ManyPackagesFound - } - - # First attempt to install a bundle or encrypted bundle. If neither exists, fall back to packages and then encrypted packages - if ($BundleCount -eq 1) - { - $DeveloperPackagePath = $BundlePath - Write-Host ($UiStrings.BundleFound -f $DeveloperPackagePath.FullName) - } - elseif ($EncryptedBundleCount -eq 1) - { - $DeveloperPackagePath = $EncryptedBundlePath - Write-Host ($UiStrings.EncryptedBundleFound -f $DeveloperPackagePath.FullName) - } - elseif ($PackageCount -eq 1) - { - $DeveloperPackagePath = $PackagePath - Write-Host ($UiStrings.PackageFound -f $DeveloperPackagePath.FullName) - } - elseif ($EncryptedPackageCount -eq 1) - { - $DeveloperPackagePath = $EncryptedPackagePath - Write-Host ($UiStrings.EncryptedPackageFound -f $DeveloperPackagePath.FullName) - } - - # The package must be signed - $PackageSignature = Get-AuthenticodeSignature $DeveloperPackagePath - $PackageCertificate = $PackageSignature.SignerCertificate - if (!$PackageCertificate) - { - PrintMessageAndExit $UiStrings.ErrorPackageUnsigned $ErrorCodes.PackageUnsigned - } - - # Test if the package signature is trusted. If not, the corresponding certificate - # needs to be present in the current directory and needs to be installed. - $NeedInstallCertificate = ($PackageSignature.Status -ne "Valid") - - if ($NeedInstallCertificate) - { - # List all .cer files in the script directory - $DeveloperCertificatePath = Get-ChildItem (Join-Path $ScriptDir "*.cer") | Where-Object { $_.Mode -NotMatch "d" } - $DeveloperCertificateCount = ($DeveloperCertificatePath | Measure-Object).Count - - # There must be exactly 1 certificate - if ($DeveloperCertificateCount -lt 1) - { - PrintMessageAndExit $UiStrings.ErrorNoCertificateFound $ErrorCodes.NoCertificateFound - } - elseif ($DeveloperCertificateCount -gt 1) - { - PrintMessageAndExit $UiStrings.ErrorManyCertificatesFound $ErrorCodes.ManyCertificatesFound - } - - Write-Host ($UiStrings.CertificateFound -f $DeveloperCertificatePath.FullName) - - # The .cer file must have the format of a valid certificate - ValidateCertificateFormat $DeveloperCertificatePath - - # The package signature must match the certificate file - if ($PackageCertificate -ne (Get-PfxCertificate $DeveloperCertificatePath)) - { - PrintMessageAndExit $UiStrings.ErrorCertificateMismatch $ErrorCodes.CertificateMismatch - } - } - - $NeedDeveloperLicense = CheckIfNeedDeveloperLicense - - # Relaunch the script elevated with the necessary parameters if needed - if ($NeedDeveloperLicense -or $NeedInstallCertificate) - { - Write-Host $UiStrings.ElevateActions - if ($NeedDeveloperLicense) - { - Write-Host $UiStrings.ElevateActionDevLicense - } - if ($NeedInstallCertificate) - { - Write-Host $UiStrings.ElevateActionCertificate - } - - $IsAlreadyElevated = ([Security.Principal.WindowsIdentity]::GetCurrent().Groups.Value -contains "S-1-5-32-544") - if ($IsAlreadyElevated) - { - if ($Force -and $NeedDeveloperLicense) - { - PrintMessageAndExit $UiStrings.ErrorForceDeveloperLicense $ErrorCodes.ForceDeveloperLicense - } - if ($Force -and $NeedInstallCertificate) - { - Write-Warning $UiStrings.WarningInstallCert - } - } - else - { - if ($Force) - { - PrintMessageAndExit $UiStrings.ErrorForceElevate $ErrorCodes.ForceElevate - } - else - { - Write-Host $UiStrings.ElevateActionsContinue - Pause - } - } - - LaunchElevated - } - - InstallPackageWithDependencies -} - -# -# Main script entry point -# -if ($GetDeveloperLicense -or $CertificatePath) -{ - DoElevatedOperations -} -else -{ - DoStandardOperations - PrintMessageAndExit $UiStrings.Success $ErrorCodes.Success -} - -# SIG # Begin signature block -# MIIhdwYJKoZIhvcNAQcCoIIhaDCCIWQCAQExDzANBglghkgBZQMEAgEFADB5Bgor -# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG -# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD5BdpRggDM/3NT -# wBDQFaER9aOD9SdM3CUzPDQe6F3dFqCCC3IwggT6MIID4qADAgECAhMzAAACznya -# zn2QXtK3AAAAAALOMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD -# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy -# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p -# bmcgUENBIDIwMTAwHhcNMTkwNTAyMjEyNTQyWhcNMjAwNTAyMjEyNTQyWjB0MQsw -# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u -# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy -# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -# AQCjCFujRq0kQv+CIenBLay0fR5jqHa+CGpiQvBr0tPkbmSrlC8p6lNhE9Xm0fR/ -# nFNFMVO5mika5tL6YO9SSbkIXcLTDiG5wrcyvxp3uXbJ4SZntOKSCujqvNQClo1f -# ekSYqa3Zw9oAnleczgOALpDlVXqBfcL8076HuyznXEpFvrrYeOnLizWnXB6imf6D -# JZWlDAY2AbBMBxKC4s3tekVSXV6xUAIbO9LgwhvyqyXX5pda+A1QybNIDCUgcNGe -# Z3od6NLkcQybhh7ZtiZEpvoFzsjiGyLekibfTgsri9IB0sfYcSVLtViah9O6JTYx -# lQ1ZrP7XiS/lHjJGf6iNI1BRAgMBAAGjggF5MIIBdTAfBgNVHSUEGDAWBgorBgEE -# AYI3PQYBBggrBgEFBQcDAzAdBgNVHQ4EFgQUcz8M7szQ1eRKZIUkjATmgq2AyA8w -# UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1 -# ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzA4NjUrNDU0MjQzMB8GA1UdIwQYMBaAFOb8 -# X3u7IgBY5HJOtfQhdCMy5u+sMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwu -# bWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvZFNpZ1BDQV8yMDEw -# LTA3LTA2LmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93 -# d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29kU2lnUENBXzIwMTAtMDct -# MDYuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggEBABw+6i+NrXj8 -# hRtQ8rVGMaV+qjBsLjkqmmciAvHO18z6BsbyfPrZSExHwyOs8zaDKX53DGpKbmSY -# CpDTN5T+VMDPfAfp29pryBbBHmAJFgK7TP+zWxHumNeVCkQgt/pA/e09OD4ISFhs -# hjFQf4evxJCKxrFlYIL+tPLB0FqcwcgxDsstlthoSOaReaNLMirjAaNpFG+gnVxB -# Rct7QEeBrJw4KCRO0kw43k5SpkHcLiupyOVCanz9MfAd5IbBmBU9hAkI1mKPdXbg -# XWcQoPCJrNeV5WQnqyYGlrjAFhs8UZH9XNNbj2iCvnVMfd7ggQ1troOxkiGeuTZg -# /uz/G+xsp0YwggZwMIIEWKADAgECAgphDFJMAAAAAAADMA0GCSqGSIb3DQEBCwUA -# MIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH -# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQD -# EylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0x -# MDA3MDYyMDQwMTdaFw0yNTA3MDYyMDUwMTdaMH4xCzAJBgNVBAYTAlVTMRMwEQYD -# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy -# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p -# bmcgUENBIDIwMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDpDmRQ -# eWe1xOP9CQBMnpSs91Zo6kTYz8VYT6mldnxtRbrTOZK0pB75+WWC5BfSj/1EnAjo -# ZZPOLFWEv30I4y4rqEErGLeiS25JTGsVB97R0sKJHnGUzbV/S7SvCNjMiNZrF5Q6 -# k84mP+zm/jSYV9UdXUn2siou1YW7WT/4kLQrg3TKK7M7RuPwRknBF2ZUyRy9HcRV -# Yldy+Ge5JSA03l2mpZVeqyiAzdWynuUDtWPTshTIwciKJgpZfwfs/w7tgBI1TBKm -# vlJb9aba4IsLSHfWhUfVELnG6Krui2otBVxgxrQqW5wjHF9F4xoUHm83yxkzgGqJ -# TaNqZmN4k9Uwz5UfAgMBAAGjggHjMIIB3zAQBgkrBgEEAYI3FQEEAwIBADAdBgNV -# HQ4EFgQU5vxfe7siAFjkck619CF0IzLm76wwGQYJKwYBBAGCNxQCBAweCgBTAHUA -# YgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU -# 1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2Ny -# bC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIw -# MTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDov -# L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0w -# Ni0yMy5jcnQwgZ0GA1UdIASBlTCBkjCBjwYJKwYBBAGCNy4DMIGBMD0GCCsGAQUF -# BwIBFjFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vUEtJL2RvY3MvQ1BTL2RlZmF1 -# bHQuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAFAAbwBsAGkAYwB5 -# AF8AUwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQAadO9X -# Tyl7xBaFeLhQ0yL8CZ2sgpf4NP8qLJeVEuXkv8+/k8jjNKnbgbjcHgC+0jVvr+V/ -# eZV35QLU8evYzU4eG2GiwlojGvCMqGJRRWcI4z88HpP4MIUXyDlAptcOsyEp5aWh -# aYwik8x0mOehR0PyU6zADzBpf/7SJSBtb2HT3wfV2XIALGmGdj1R26Y5SMk3YW0H -# 3VMZy6fWYcK/4oOrD+Brm5XWfShRsIlKUaSabMi3H0oaDmmp19zBftFJcKq2rbty -# R2MX+qbWoqaG7KgQRJtjtrJpiQbHRoZ6GD/oxR0h1Xv5AiMtxUHLvx1MyBbvsZx/ -# /CJLSYpuFeOmf3Zb0VN5kYWd1dLbPXM18zyuVLJSR2rAqhOV0o4R2plnXjKM+zeF -# 0dx1hZyHxlpXhcK/3Q2PjJst67TuzyfTtV5p+qQWBAGnJGdzz01Ptt4FVpd69+lS -# TfR3BU+FxtgL8Y7tQgnRDXbjI1Z4IiY2vsqxjG6qHeSF2kczYo+kyZEzX3EeQK+Y -# Zcki6EIhJYocLWDZN4lBiSoWD9dhPJRoYFLv1keZoIBA7hWBdz6c4FMYGlAdOJWb -# HmYzEyc5F3iHNs5Ow1+y9T1HU7bg5dsLYT0q15IszjdaPkBCMaQfEAjCVpy/JF1R -# Ap1qedIX09rBlI4HeyVxRKsGaubUxt8jmpZ1xTGCFVswghVXAgEBMIGVMH4xCzAJ -# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k -# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jv -# c29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTACEzMAAALOfJrOfZBe0rcAAAAAAs4w -# DQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK -# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIEMB6sh3 -# 0od0djZhSjYmDFfgME5hmf84vbeilDhjyyYCMEIGCisGAQQBgjcCAQwxNDAyoBSA -# EgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w -# DQYJKoZIhvcNAQEBBQAEggEAbSCTojfLf2UMTG8UGj0qjfzGhtyZR4cDedJIRNfh -# q7FhMsZMi64qJ9p5WWyci9bkSWFLAHmmsU1XfSqUdV0gi6+AdWo/G/JDWAqBnVbM -# SOE0bJQeMeCOCbMjxKFh+SzcO/NNrCs3mnWwYu61kYzhkWoOXxg4b3SrCdCYHYdV -# p0qrhyRxH5aNjGUmFiUF8+9AIIXRwDl0RO8IbWB8yMNXLFyQAtf0q6GkCmqh9NvG -# qmc7fwCzlVtzxck4jICzakFlSFuOULKKsMYWTxzu1ymrL3E/MTwdBGBaWRBFdtGY -# S1vuA8PhpC5wsJIm42GS9Y3tr0cErZqMQtQ28ykgMsZXVKGCEuUwghLhBgorBgEE -# AYI3AwMBMYIS0TCCEs0GCSqGSIb3DQEHAqCCEr4wghK6AgEDMQ8wDQYJYIZIAWUD -# BAIBBQAwggFRBgsqhkiG9w0BCRABBKCCAUAEggE8MIIBOAIBAQYKKwYBBAGEWQoD -# ATAxMA0GCWCGSAFlAwQCAQUABCAcQuQh0Q5JbgwhQVXvLRn9O5Dpp6yl6sMI8gEQ -# 26jx6wIGXMnex8O1GBMyMDE5MDcwOTIyMzA0NC41MjNaMASAAgH0oIHQpIHNMIHK -# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk -# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxN -# aWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMSYwJAYDVQQLEx1UaGFsZXMgVFNT -# IEVTTjo3QkYxLUUzRUEtQjgwODElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3Rh -# bXAgU2VydmljZaCCDjwwggTxMIID2aADAgECAhMzAAAA9qzPdipzdJraAAAAAAD2 -# MA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n -# dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y -# YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4X -# DTE4MTAyNDIxMTQyN1oXDTIwMDExMDIxMTQyN1owgcoxCzAJBgNVBAYTAlVTMRMw -# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN -# aWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNh -# IE9wZXJhdGlvbnMxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNOOjdCRjEtRTNFQS1C -# ODA4MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjAN -# BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlJq1QMAx7cd67Faablg8wvE1xAF7 -# ZgFA+ut/Tn9FegGGqB7i6VCkhPelTSfJR3yFekF9E3Sw+ZP2IcezKvbr5PXt0Svt -# n5BqBGrYK2+XFkjsjINzXzsE1+SeYJkT04hkMwmF8XRphesxCMMUTblm+LVEJFrY -# q5IIJCmo1kn9bODS2WqtfM/T+T+rVKAReYHV3YQjQpVW5rx/6O+s3sxQFKN77O8k -# +u/I/pWOnVwL4AJB4WonLiVlRSFsD8S4mTbtnq1vMUi+xlpZ5/49phizy7vr5cEc -# lrygDbDrrfC0S1PyooDh9tml1DUYbao/Jn2eCJFHoN0NBHzgEefpbG0HVQIDAQAB -# o4IBGzCCARcwHQYDVR0OBBYEFB2HYoOUH2iCSUjTbO6ZZIPsJvNKMB8GA1UdIwQY -# MBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6 -# Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBD -# QV8yMDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0 -# dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIw -# MTAtMDctMDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwgw -# DQYJKoZIhvcNAQELBQADggEBADAV9s7iHFcW0JiR1fIe2d277chvA/GYqPn4LwAT -# m5mpK06QMBqnSDdQZ6MNCQM+HMcoi455atShcSchMgiIHbjhphXj/0BtUuaPQiWb -# k07J/sHi7O+8jQe3V3vDHsPT39J5LkBmp/jWdrOQNNhQstUN8CtyiEGekFyI7BS6 -# C9kYSedtrGTYFCPW5OJcnzCXowzIJ8olmOK8WR41pMRjaD/Cnrifzic1aR/YHwfO -# me9ysGeIy3acxd/8Jdp7v4iFN9TVW6Gnz7XJ4A4VNKiiOjw/lRD/h3JmroX+Ak79 -# LA5NJEAaqkLIniGCqdUI38oI7uO4qaTt2BL2VZ759tvCDtYwggZxMIIEWaADAgEC -# AgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEG -# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj -# cm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0 -# aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEy -# MTQ2NTVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD -# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk -# BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjANBgkqhkiG -# 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcRijog7PwTl/X6f2mUa3RUENWlCgCC -# hfvtfGhLLF/Fw+Vhwna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/FgiIRU -# QwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRgMlhgRvJYR4YyhB50YWeRX4FU -# sc+TTJLBxKZd0WETbijGGvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBX -# day9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajyeioKMfDaTgaRtogINeh4 -# HLDpmc085y9Euqf03GS9pAHBIAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCC -# AeIwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyKMZDzQ3t8RhvFM2ha -# hW1VMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNV -# HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG -# A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3Js -# L3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcB -# AQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kv -# Y2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8EgZUw -# gZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcCARYxaHR0cDovL3d3dy5taWNy -# b3NvZnQuY29tL1BLSS9kb2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0 -# HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMAdABhAHQAZQBtAGUAbgB0 -# AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1 -# Mb7PBeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcIK1GCRBL7uVOMzPRg -# Eop2zEBAQZvcXBf/XPleFzWYJFZLdO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X -# 9S95gWXZqbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8ySif9Va8v/rbl -# jjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoLkSbiOewZSnFjnXshbcOco6I8+n99lmqQ -# eKZt0uGc+R38ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+Y1klD3ou -# OVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ732D8OE7cQnfXXSYIghh2rBQHm+9 -# 8eEA3+cxB6STOvdlR3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30uIUB -# HoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp9cAvVCch98isTtoouLGp25ay -# p0Kiyc8ZQU3ghvkqmqMRZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXj -# ad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA12u8JJxzVs341Hgi62jbb -# 01+P3nSISRKhggLOMIICNwIBATCB+KGB0KSBzTCByjELMAkGA1UEBhMCVVMxEzAR -# BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p -# Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2Eg -# T3BlcmF0aW9uczEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046N0JGMS1FM0VBLUI4 -# MDgxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH -# BgUrDgMCGgMVAA8XR8J71gM3wlrTm/PIW5v1VpqRoIGDMIGApH4wfDELMAkGA1UE -# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc -# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0 -# IFRpbWUtU3RhbXAgUENBIDIwMTAwDQYJKoZIhvcNAQEFBQACBQDgz1OkMCIYDzIw -# MTkwNzEwMDE1NTQ4WhgPMjAxOTA3MTEwMTU1NDhaMHcwPQYKKwYBBAGEWQoEATEv -# MC0wCgIFAODPU6QCAQAwCgIBAAICAscCAf8wBwIBAAICExAwCgIFAODQpSQCAQAw -# NgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgC -# AQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQAtA+foiLfvVwWXWQRH/eCRs8sS2hx3 -# KXGON39/P89BANVPzXtnCgIYCmx48SBeWHzjnMenuENBoFdzhiK9Cov2DFu8Mkkc -# 1pM1IiKstq8RLHDmRWWDZZ6HOcy1PzCkO7x4kK6266U/2YXrRBcNKR9Zgdzlorm4 -# ecZH6aJ/Ghp98jGCAw0wggMJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI -# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv -# ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD -# QSAyMDEwAhMzAAAA9qzPdipzdJraAAAAAAD2MA0GCWCGSAFlAwQCAQUAoIIBSjAa -# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEINHE98Vr -# C2V3rRFUE6l77BeuAtkeoF7+wOppTIFk+DBVMIH6BgsqhkiG9w0BCRACLzGB6jCB -# 5zCB5DCBvQQg94dBd2q07RcJ2dMl4z3mgBFSVptilRYPqZBOcS+TtOowgZgwgYCk -# fjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH -# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD -# Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAPasz3Yqc3Sa2gAA -# AAAA9jAiBCCLuzueAI0cRo8BgwxYt4GbiGDWbBKlqdRAXOdm/1PhYzANBgkqhkiG -# 9w0BAQsFAASCAQCJSAuJCRYB2ipL0CSqk6STO7fAIYAtbZJBIo62uuU8dqzaKenB -# 0TTFlkq3Ilx9+wAs+AuLDKEBi4VdZNF31BxrwA4yT8xhN6oh3JMakNHH+XkdsXGi -# 6tC/qtC+lz+Qrmk1YvftUkfaB6v1wpOwIaLpCcELHIrqQosLpeCm9W+ByKwxN4ju -# Ul1+MASKQQYK8pSi1DVru8zVuqC75TKf+X/CXgHnQADIN1gylF38vAHUcfIOXqR6 -# srC74CpfRM3ym7TpAreOvv0z31rz2TBv3X6WwjpGI8zhHJKT3MaG6TyTQbv4rbaJ -# 4K9MrLbynC4laN8VqDCPCdQeB4CO+hGZuDg1 -# SIG # End signature block diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/Add-AppDevPackage.psd1 deleted file mode 100644 index 89c0d417..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/cs-CZ/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/cs-CZ/Add-AppDevPackage.psd1 deleted file mode 100644 index 5bf45b01..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/cs-CZ/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/de-DE/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/de-DE/Add-AppDevPackage.psd1 deleted file mode 100644 index c2cad29f..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/de-DE/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/en-US/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/en-US/Add-AppDevPackage.psd1 deleted file mode 100644 index 89c0d417..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/en-US/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/es-ES/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/es-ES/Add-AppDevPackage.psd1 deleted file mode 100644 index a8793ff6..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/es-ES/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/fr-FR/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/fr-FR/Add-AppDevPackage.psd1 deleted file mode 100644 index 0516268b..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/fr-FR/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/it-IT/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/it-IT/Add-AppDevPackage.psd1 deleted file mode 100644 index 2f0d3b62..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/it-IT/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/ja-JP/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/ja-JP/Add-AppDevPackage.psd1 deleted file mode 100644 index 04bf5d69..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/ja-JP/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/ko-KR/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/ko-KR/Add-AppDevPackage.psd1 deleted file mode 100644 index 6dcd09ea..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/ko-KR/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/pl-PL/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/pl-PL/Add-AppDevPackage.psd1 deleted file mode 100644 index 9cecf8c3..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/pl-PL/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/pt-BR/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/pt-BR/Add-AppDevPackage.psd1 deleted file mode 100644 index 792aed3d..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/pt-BR/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/ru-RU/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/ru-RU/Add-AppDevPackage.psd1 deleted file mode 100644 index d1e8dd61..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/ru-RU/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/tr-TR/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/tr-TR/Add-AppDevPackage.psd1 deleted file mode 100644 index d7dcbde7..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/tr-TR/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/zh-CN/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/zh-CN/Add-AppDevPackage.psd1 deleted file mode 100644 index d9eae7db..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/zh-CN/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/zh-TW/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/zh-TW/Add-AppDevPackage.psd1 deleted file mode 100644 index 249e54ec..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/Add-AppDevPackage.resources/zh-TW/Add-AppDevPackage.psd1 and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/KiwixWebApp_0.9.997.0_AnyCPU.appxbundle b/AppPackages/KiwixWebApp_0.9.997.0_Test/KiwixWebApp_0.9.997.0_AnyCPU.appxbundle deleted file mode 100644 index 73b03d50..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/KiwixWebApp_0.9.997.0_AnyCPU.appxbundle and /dev/null differ diff --git a/AppPackages/KiwixWebApp_0.9.997.0_Test/KiwixWebApp_0.9.997.0_AnyCPU.cer b/AppPackages/KiwixWebApp_0.9.997.0_Test/KiwixWebApp_0.9.997.0_AnyCPU.cer deleted file mode 100644 index bc7e3827..00000000 Binary files a/AppPackages/KiwixWebApp_0.9.997.0_Test/KiwixWebApp_0.9.997.0_AnyCPU.cer and /dev/null differ