# Copyright (C) 2015-present Lenovo. All right reserved.
# Confidential and Restricted

trap {"An error trapped..."}

# ::***********************************************************************************************
# :: Definition-1: Check bitness of OS, process, package, guid of old version
# ::***********************************************************************************************
$OS_BITNESS=32
if([Environment]::Is64BitOperatingSystem -eq $True) {
$OS_BITNESS=64
}

$PS_BITNESS=32
if([Environment]::Is64BitProcess -eq $True) {
$PS_BITNESS=64
}

$arch="x86"
if ($OS_BITNESS -eq 64) {
$arch="x64"
}

# ::***********************************************************************************************
# :: Definition-2: common variables and functions
# ::***********************************************************************************************
$PackageName = "LenovoBatteryGaugeAddin"
$PathPackageDirDest = "$PSScriptRoot"
$PathPackageDirSource = "$PSScriptRoot"
$PathShortCutDir = "$env:ProgramData\Lenovo\Vantage\AddinData\$PackageName"



# ::***********************************************************************************************
# :: Definition: Write-Log
$LogFileName = ("$PackageName" + ".Uninstall." + (Get-Date -Format "-yyyy_MM_dd-HH-mm-ss") + ".txt")
$PathLogFile = "$env:ProgramData\Lenovo\Vantage\Logs\$PackageName\$LogFileName"

[bool]$EnableLogging = $false
try { $EnableLogging = ((Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\WOW6432Node\Lenovo\Vantageservice\FileLogger" -Name "LenovoVantageService").ToLower() -eq "trace" ) } catch{}

if($EnableLogging -and ( -not(Test-Path $PathLogFile))) {
	New-Item -Path (Split-Path $PathLogFile) -Name (Split-Path $PathLogFile -leaf) -ItemType File -force
}

$PSDefaultParameterValues["Write-Log:pathToLogFile"]=$PathLogFile
$PSDefaultParameterValues["Write-Log:enableLogging"]=$EnableLogging

Function Write-Log
{
    [CmdletBinding()]
    param(
		[Parameter(
			Mandatory=$false,
			Position=1,
			ValueFromPipeline=$true
		)]
		[PSObject[]]$inputObject,
        [string]$pathToLogFile=".\" + [System.IO.Path]::GetFileName($MyInvocation.ScriptName) + ".log",
		[bool]$enableLogging=$true
    )

    $obj=$null
    if($input -ne $null)
    {
        $obj=$input
    }
    else
    {
        $obj=$inputObject
    }

    Out-Host -InputObject $obj
    if($enableLogging)
    {
		$timeStamp = $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss  ')
		$objTS = $timeStamp + $obj

	  	Out-File -InputObject $objTS -FilePath $pathToLogFile -Encoding unicode -Append -Width 200
    }
}

function Get-CurrentActiveUser
{
	$activeUser = Get-WmiObject Win32_ComputerSystem -ComputerName $env:computername -EA stop | Select UserName -Unique|%{"{0}" -f $_.UserName.ToString().Split('\')[1]}
	$objUser = New-Object System.Security.Principal.NTAccount("$activeUser")
	$objUser.Value
}

Function CheckCVLibrarySignature($moduleFullPathName)
{
	$ASValid = $False
	$ASCheck  =Get-AuthenticodeSignature $moduleFullPathName
	if($ASCheck -ne $null)
	{
		if ( ($ASCheck.Status.ToString()).ToLower() -eq "valid" )
		{
			$ASValid = $True
		}
	}

	if($ASValid -eq $False)
	{
		Exit
	}
}



# ::***********************************************************************************************
# :: Definition: BatteryGaugeIconControl
$applicationName = "$env:SystemRoot\system32\rundll32.exe"
$HideBg="HideBatteryGauge"
$UnloadBg="UnloadBatteryGaugeFromExplorer"

# Check file signature validation
CheckCVLibrarySignature("$PSScriptRoot\Lenovo.CertificateValidation.dll")

Import-Module "$PSScriptRoot\Lenovo.CertificateValidation.dll"

Function IsTrustedAssemblyFile($fullFileName)
{
	 $validRet = [Lenovo.CertificateValidation.FileValidator]::GetTrustStatus($fullFileName)
	 Write-Log "Check file signature result: [$validRet], file = [$fullFileName]"
	 if( ($validRet -eq 0) -or ($validRet -eq "FileTrusted") -or ($validRet -eq [Lenovo.CertificateValidation.TrustStatus]::FileTrusted))
	 {
	 	 return 1
	 }
	 return 0
}


# Note: ImpersonnateLoggedOnUser in exe
Function BatteryGaugeCtrlByApp($commandName)
{
	# Execute from dest dir
	$pathAppFile = "$PathPackageDirDest\$arch\BGHelper.exe"
	$pathDllFile = "$PathPackageDirDest\$arch\LenovoBatteryGaugePackage.dll"

	if((Test-Path -Path "$pathDllFile" -PathType Leaf) -and (Test-Path -Path "$pathAppFile" -PathType Leaf))
	{
		if(IsTrustedAssemblyFile($pathAppFile) -eq 1)
		{
			powershell $pathAppFile $commandName
			if ($? -eq $true)
			{
				Write-Log "BatteryGaugeCtrlByApp OK: ReturnCode=$LastExitCode, CmdName=$commandName"
				return 1
			}
		}
	}
	else
	{
		Write-Log "BatteryGaugeCtrlByApp file not found: CmdName=$commandName, AppPath=$pathAppFile, DllPath=$pathDllFile"
	}

	Write-Log "BatteryGaugeCtrlByApp($commandName) failed! ReturnCode=$LastExitCode"
	return 0
}

# Note: ImpersonnateLoggedOnUser in dll
Function BatteryGaugeCtrlByRundll32($commandName)
{
	#Param(
	#	[string]$commandName,
	#	[bool]$impersonnateLoggedOnUser = $True
	#)

	# Execute from dest dir
	$pathCmdFile = "$PathShortCutDir\$arch\$commandName.lnk"
	$pathDllFile = "$PathPackageDirDest\$arch\LenovoBatteryGaugePackage.dll"

	if((Test-Path -Path "$pathDllFile" -PathType Leaf) -and (Test-Path -Path "$pathCmdFile" -PathType Leaf))
	{
		if(IsTrustedAssemblyFile($pathDllFile) -eq 1)
		{
			# IMPORT: the 'blank space' MUST reserve!!!
			$commandParam = " $pathDllFile, " + $commandName
			powershell $applicationName $commandParam
			if ($? -eq $true)
			{
				Write-Log "BatteryGaugeCtrlByRundll32 OK: ReturnCode=$LastExitCode, CmdName=$commandName"
				return 1
			}
		}
	}
	else
	{
		Write-Log "BatteryGaugeCtrlByRundll32 file not found: CmdName=$commandName, CmdFile=$pathCmdFile, DllPath=$pathDllFile"
	}

	Write-Log "BatteryGaugeCtrlByRundll32($commandName) failed! ReturnCode=$LastExitCode"
	return 0
}

Function BatteryGaugeIconControlEx($commandName)
{
	$BGCtrlRet = BatteryGaugeCtrlByRundll32($commandName)
	if ($BGCtrlRet -eq 0)
	{
		$BGCtrlRet = BatteryGaugeCtrlByApp($commandName)	
	}

	return $BGCtrlRet
}


# Kill BG processes directly. Only call when necessary.
Function StopBGProcessDirectly
{
	$PathExeRunFromPackageDirDest = "$PathPackageDirDest\.."
	Write-Log "Kill BG related processes, which run from: `"$PathExeRunFromPackageDirDest`" "
	
	(Get-Process | Select-Object Path,Id,Name | Where-Object {$_.Path -Ilike "$PathExeRunFromPackageDirDest*"}) | Stop-Process -Force

	$PathExeRunFromPackageShortCutDir = "$env:ProgramData\Lenovo\Vantage\AddinData\$PackageName"
	(Get-Process | Select-Object Path,Id,Name | Where-Object {$_.Path -Ilike "$PathExeRunFromPackageShortCutDir*"}) | Stop-Process -Force
}


# Kill BG processes by taskkill
$TaskkillPath = "$env:SystemRoot\System32\taskkill.exe"

Function StopProcessByTaskkill
{
	Write-Log "Kill BG special processes if running"

	Start-Process -NoNewWindow -Wait -FilePath $TaskkillPath -ArgumentList "/F /T /IM HeartbeatMetrics.exe"
	Start-Process -NoNewWindow -Wait -FilePath $TaskkillPath -ArgumentList "/F /T /IM IdeaIntelligentCoolingMetrics.exe"
	Start-Process -NoNewWindow -Wait -FilePath $TaskkillPath -ArgumentList "/F /T /IM QuickSetting.exe"
	Start-Process -NoNewWindow -Wait -FilePath $TaskkillPath -ArgumentList "/F /T /IM QuickSettingEx.exe"
	Start-Process -NoNewWindow -Wait -FilePath $TaskkillPath -ArgumentList "/F /T /IM QSHelper.exe"
}

# Check if dll file is still used by explorer
Function IsFileUsedByExplorer
{
	param([string]$dllFileName)

	$IsInUsed = $false
	$TaskListRet = tasklist /M "$dllFileName"
	$IsExplorerLike = $TaskListRet -like "explorer*"
	if($IsExplorerLike -ne $false)
	{  
		$IsInUsed = (($IsExplorerLike).ToLower()).Contains("explorer")
	}

	return $IsInUsed
}

# Force to remove BG specific folder
Function RemoveBGFolder
{
	param([string]$folderFullPath)

	if(Test-Path -Path "$folderFullPath" -PathType Any)
	{
		Write-Log "Remove-Item -Recurse -Force `"$folderFullPath`""
		Remove-Item -Recurse -Force "$folderFullPath" *>&1 | Write-Log
	}
	else
	{
		Write-Log "Failed to remove the folder: [$folderFullPath], because it doesnt exist"
	}
}


trap 
{
	"An error trapped"
	$TrapError = $_.Exception
	$TrapErrorMsg = $TrapError.Message 
	$TrapLine = $_.InvocationInfo.ScriptLineNumber	
	Write-Log "Caught exception( trapped error ) at line[$TrapLine]: Msg= $TrapErrorMsg"
}

Write-Log "Below logs come from: $PSCommandPath"
Write-Log "OperatingSystem=[$OS_BITNESS bit], Process=[$PS_BITNESS bit]"

if ($PS_BITNESS -eq 32)
{
	if ($OS_BITNESS -eq 64)
	{
		Write-Log "Package bitness is 64 but process is 32.  Relaunching as 64"
		$PS64BITPATH="$env:SystemRoot\SysNative\WindowsPowerShell\v1.0\PowerShell.exe"
		Write-Log "Start-Process -NoNewWindow -Wait -FilePath $PS64BITPATH -ArgumentList `"$PSCommandPath`""
		Start-Process -NoNewWindow -Wait -FilePath $PS64BITPATH -ArgumentList "$PSCommandPath" *>&1 | Write-Log
		Write-Log "Completed re-running as 64 bit"
		Exit
	}
}
elseif ($PS_BITNESS -ne 64)
{
	Write-Log "Package bitness unknown, will exit."
}



# ::***********************************************************************************************
# :: [Remove LenovoBatteryGaugePackage.dll from taskbar]
# ::***********************************************************************************************
Write-Log "Remove LenovoBatteryGaugePackage.dll from taskbar"

$RetryCount = 0
$completed = $false
while(($completed -eq $false) -and ($RetryCount -le 2))
{
	if(BatteryGaugeIconControlEx($UnloadBg) -ne 0 )
	{
		# Wait BGdll to unload from explorer. 1.2 seconds might be enough
		Start-Sleep -Milliseconds 1200
		$completed = $true
		Write-Log "Unload battery gauge from explorer tray sucessful"
	}
	else
	{
		Start-Sleep -Milliseconds 400
		Write-Log "Unload battery gauge from explorer tray failure"
	}
		
	if ($RetryCount -ge 2)
    {
		Write-Log "Error : failed to unload BatteryGauge icon from explorer.."
		#Exit
	}
	$RetryCount++
}


# ::***********************************************************************************************
# :: [Kill active BG processes]:
# ::  QuickSetting.exe,QuickSettingEx.exe,HeartbeatMetrics.exe,SetThinkTouchPad.exe....]
# ::***********************************************************************************************
Start-Process -NoNewWindow -Wait -FilePath $TaskkillPath -ArgumentList "/T /IM QSHelper.exe"

StopBGProcessDirectly
#StopProcessByTaskkill

# ::***********************************************************************************************
# :: [Unregister LenovoBatteryGaugePackage.dll ]
# ::***********************************************************************************************
$RegSvr32Path = "$env:SystemRoot\System32\regsvr32.exe"
Write-Log "Start-Process -NoNewWindow -Wait -FilePath $RegSvr32Path -ArgumentList `"/s -u $PathPackageDirDest\$arch\LenovoBatteryGaugePackage.dll`""
Start-Process -NoNewWindow -Wait -FilePath $RegSvr32Path -ArgumentList "/s -u $PathPackageDirDest\$arch\LenovoBatteryGaugePackage.dll" *>&1 | Write-Log
if($? -ne $true)
{
	Write-Log "Unregistry battery gauge from system return code $LastExitCode"
}

# ::***********************************************************************************************
# :: [Unregister PluginsContract.dll ]
# ::***********************************************************************************************
Write-Log "Start-Process -NoNewWindow -Wait -FilePath $PathPackageDirDest\RegAsm.exe -ArgumentList `"/silent /u $PathPackageDirDest\PluginsContract.dll`""
Start-Process -NoNewWindow -Wait -FilePath $PathPackageDirDest\RegAsm.exe -ArgumentList "/silent /u $PathPackageDirDest\PluginsContract.dll" *>&1 | Write-Log
if($? -ne $true)
{
	Write-Log "Unregistry PluginsContract.dll from system return code $LastExitCode"
}

# ::***********************************************************************************************
# :: [Check if LenovoBatteryGaugePackage.dll still running. If running, force to restart explorer]
# ::***********************************************************************************************
Write-Log "Check if BG has been removed from taskbar"

$RetryCount = 0
$completed = $false
while(($completed -eq $false) -and ($RetryCount -le 1))
{
	$BGInUse = IsFileUsedByExplorer "LenovoBatteryGaugePackage.dll"
	$AVInUse = IsFileUsedByExplorer "Lenovo.AssemblyValidation.Native.dll"
	$CVInUse = IsFileUsedByExplorer "Lenovo.CertificateValidation.dll"

	if( ($BGInUse -eq $true) -or ($AVInUse -eq $true) -or ($CVInUse -eq $true) )
	{
		# Force to unload: rename dll, then restart explorer
		Remove-Item -Path "$PathPackageDirDest\$arch\LenovoBatteryGaugePackage_bk.dll"  *>&1 | Write-Log
		Rename-Item -Path "$PathPackageDirDest\$arch\LenovoBatteryGaugePackage.dll" -NewName "LenovoBatteryGaugePackage_bk.dll"  *>&1 | Write-Log

		Remove-Item -Path "$PathPackageDirDest\$arch\Lenovo.AssemblyValidation.Native_bk.dll"  *>&1 | Write-Log
		Rename-Item -Path "$PathPackageDirDest\$arch\Lenovo.AssemblyValidation.Native.dll" -NewName "Lenovo.AssemblyValidation.Native_bk.dll"  *>&1 | Write-Log

		Remove-Item -Path "$PathPackageDirDest\Lenovo.CertificateValidation_bk.dll"  *>&1 | Write-Log
		Rename-Item -Path "$PathPackageDirDest\Lenovo.CertificateValidation.dll" -NewName "Lenovo.CertificateValidation_bk.dll"  *>&1 | Write-Log

		Remove-Item -Path "$PathPackageDirDest\Newtonsoft.Json_bk.dll"  *>&1 | Write-Log
		Rename-Item -Path "$PathPackageDirDest\Newtonsoft.Json.dll" -NewName "Newtonsoft.Json_bk.dll"  *>&1 | Write-Log

		# BG can't load anymore after restart explorer, because file can't be found.
		Stop-Process -ProcessName "explorer"
		Start-Sleep -Milliseconds 400		

		# Rename dll back
		Rename-Item -Path "$PathPackageDirDest\$arch\LenovoBatteryGaugePackage_bk.dll" -NewName "LenovoBatteryGaugePackage.dll"  *>&1 | Write-Log
		Rename-Item -Path "$PathPackageDirDest\$arch\Lenovo.AssemblyValidation.Native_bk.dll" -NewName "Lenovo.AssemblyValidation.Native.dll"  *>&1 | Write-Log
		Rename-Item -Path "$PathPackageDirDest\Lenovo.CertificateValidation_bk.dll" -NewName "Lenovo.CertificateValidation.dll"  *>&1 | Write-Log
		Rename-Item -Path "$PathPackageDirDest\Newtonsoft.Json_bk.dll" -NewName "Newtonsoft.Json.dll"  *>&1 | Write-Log
	}
    else
    {
		$completed = $true
    }
		
	if ($RetryCount -ge 1)
    {
		Write-Log "Error : LenovoBatteryGaugePackage.dll is still in use but failed to restart explorer....."
		#Exit
	}
	$RetryCount++
}

Function GetCurrentActiveUserSID
{
	$activeUser = Get-WmiObject Win32_ComputerSystem -ComputerName $env:computername -EA stop | Select UserName -Unique|%{"{0}" -f $_.UserName.ToString().Split('\')[1]}
	$objUser = New-Object System.Security.Principal.NTAccount("$activeUser")
	$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
	$strSID.Value
}

# try to remove temporary files, folders?
if($($args[0]) -eq "ForUpdate")
{
	Write-Log "No need to removing Lenovo Battery Gauge temporary folders and user data for upgradation"
}
else
{
	# ::***********************************************************************************************
	# :: Delete BG MaintenanceTask
	# ::***********************************************************************************************
	$SchTasksPath = "$env:SystemRoot\System32\schtasks.exe"
	Write-Log "$SchTasksPath /Delete /TN `"\Lenovo\BatteryGauge\BatteryGaugeMaintenance`" /F"
	powershell $SchTasksPath /Delete /TN "\Lenovo\BatteryGauge\BatteryGaugeMaintenance" /F  *>&1 | Write-Log

	# Rename QSHelper
	Rename-Item -Path "$PathPackageDirDest\$arch\QSHelper.exe" -NewName "QSHelper_bk.exe"  *>&1 | Write-Log
	Rename-Item -Path "$PathPackageDirDest\..\..\..\AddinData\LenovoBatteryGaugeAddin\$arch\QSHelper.exe" -NewName "QSHelper_bk.exe"  *>&1 | Write-Log

	# ::***********************************************************************************************
	# :: [Remove Lenovo Battery Gauge Registry Entries ]
	# ::***********************************************************************************************
	$RegPath = "$env:SystemRoot\System32\reg.exe"
	Write-Log "Start-Process -NoNewWindow -Wait -FilePath $RegPath -ArgumentList `"delete HKLM\Software\Lenovo\QuickSetting /f`""
	Start-Process -NoNewWindow -Wait -FilePath $RegPath -ArgumentList "delete HKLM\Software\Lenovo\QuickSetting /f" *>&1 | Write-Log
	if($? -ne $true)
	{
		Write-Log "Delete registry key `"HKLM\Software\Lenovo\QuickSetting`" return code $LastExitCode"
	}


	# ::***********************************************************************************************
	# :: [Remove Lenovo Battery Gauge temporary folders ]
	# ::***********************************************************************************************
    $pathReg = 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*'
    Get-ItemProperty -Path $pathReg | ForEach-Object { $SidStr = $_ | Select-Object -Property PSChildName -Unique|%{"{0}" -f $_.PSChildName.ToString()} 
    REG DELETE HKU\$SidStr\Software\Lenovo\BatteryGauge  /f}

	Write-Log "Remove Lenovo Battery Gauge temporary folders"
	$ACTIVEUSER=Get-CurrentActiveUser

	RemoveBGFolder "$env:ProgramData\Lenovo\BatteryGauge"
	RemoveBGFolder "$env:SystemDrive\Users\$ACTIVEUSER\AppData\Local\Lenovo\BatteryGauge"
	RemoveBGFolder "$env:SystemDrive\Users\$ACTIVEUSER\AppData\LocalLow\Lenovo\batterygauge"
	RemoveBGFolder "$env:ProgramData\Lenovo\settings_batterygaugeplugin"
	#RemoveBGFolder "$env:ProgramData\Lenovo\Vantage\AddinData\LenovoBatteryGaugeAddin"
	
	$au = GetCurrentActiveUserSID
	Write-Log "Remove-ItemProperty -Path HKCU:\SOFTWARE\Lenovo\BatteryGaugeToast\ResetEyeCareMode"
	Write-Log "user = $au"
	New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS *>&1 | Write-Log
	Remove-ItemProperty -Path "HKU:$au\SOFTWARE\Lenovo\BatteryGaugeToast" -Name "ResetEyeCareMode" -ErrorAction SilentlyContinue *>&1 | Write-Log
	Remove-ItemProperty -Path "HKU:$au\Software\Microsoft\Windows\CurrentVersion\Run" -Name "LenovoVantageToolbar" -ErrorAction SilentlyContinue *>&1 | Write-Log
	Remove-PSDrive -Name HKU *>&1 | Write-Log

	# remove PS file when run finished.
	Write-Log "Uninstall finished! So delete ps1 file because no use anymore."
	Remove-Item $MyInvocation.MyCommand.Path -Force
}

Write-Log "Uninstall successful!"
Exit
# SIG # Begin signature block
# MIItqAYJKoZIhvcNAQcCoIItmTCCLZUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCd2+e3NKa6kb0H
# kQtXxuywkPNonvVrm2Y0jQ43/4azcqCCJqswggWNMIIEdaADAgECAhAOmxiO+dAt
# 5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV
# BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBa
# Fw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
# dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD
# ZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3E
# MB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKy
# unWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsF
# xl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU1
# 5zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJB
# MtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObUR
# WBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6
# nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxB
# YKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5S
# UUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+x
# q4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjggE6MIIB
# NjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwP
# TzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNVHQ8BAf8EBAMC
# AYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
# Y2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv
# bS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4wPDA6oDigNoY0
# aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENB
# LmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQADggEBAHCgv0Nc
# Vec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3bb0aFPQTSnov
# Lbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP0UNEm0Mh65Zy
# oUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZNUZqaVSwuKFW
# juyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPLILCsWKAOQGPF
# mCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9W9FcrBjDTZ9z
# twGpn1eqXijiuZQwggWQMIIDeKADAgECAhAFmxtXno4hMuI5B72nd3VcMA0GCSqG
# SIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx
# GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRy
# dXN0ZWQgUm9vdCBHNDAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGIx
# CzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
# dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBH
# NDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIw
# aTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLK
# EdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4Tm
# dDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembu
# d8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnD
# eMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1
# XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVld
# QnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTS
# YW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSm
# M9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzT
# QRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6Kx
# fgommfXkaS+YHS312amyHeUbAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
# VR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwPTzANBgkq
# hkiG9w0BAQwFAAOCAgEAu2HZfalsvhfEkRvDoaIAjeNkaA9Wz3eucPn9mkqZucl4
# XAwMX+TmFClWCzZJXURj4K2clhhmGyMNPXnpbWvWVPjSPMFDQK4dUPVS/JA7u5iZ
# aWvHwaeoaKQn3J35J64whbn2Z006Po9ZOSJTROvIXQPK7VB6fWIhCoDIc2bRoAVg
# X+iltKevqPdtNZx8WorWojiZ83iL9E3SIAveBO6Mm0eBcg3AFDLvMFkuruBx8lbk
# apdvklBtlo1oepqyNhR6BvIkuQkRUNcIsbiJeoQjYUIp5aPNoiBB19GcZNnqJqGL
# FNdMGbJQQXE9P01wI4YMStyB0swylIQNCAmXHE/A7msgdDDS4Dk0EIUhFQEI6FUy
# 3nFJ2SgXUE3mvk3RdazQyvtBuEOlqtPDBURPLDab4vriRbgjU2wGb2dVf0a1TD9u
# KFp5JtKkqGKX0h7i7UqLvBv9R0oN32dmfrJbQdA75PQ79ARj6e/CVABRoIoqyc54
# zNXqhwQYs86vSYiv85KZtrPmYQ/ShQDnUBrkG5WdGaG5nLGbsQAe79APT0JsyQq8
# 7kP6OnGlyE0mpTX9iV28hWIdMtKgK1TtmlfB2/oQzxm3i0objwG2J5VT6LaJbVu8
# aNQj6ItRolb58KaAoNYes7wPD1N1KarqE3fk3oyBIa0HEEcRrYc9B9F1vM/zZn4w
# ggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEBCwUAMGIx
# CzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
# dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBH
# NDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNVBAYTAlVT
# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1
# c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIiMA0GCSqG
# SIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3qZdRodbS
# g9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOWbfhXqAJ9
# /UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt69OxtXXn
# HwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3YYMZ3V+0
# VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECnwHLFuk4f
# sbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6AaRyBD40Nj
# gHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTyUpURK1h0
# QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8UNM/STKvv
# mz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCONWPfcYd6T
# /jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBASA31fI7tk
# 42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp6103a50g5r
# mQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4E
# FgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5n
# P+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcG
# CCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQu
# Y29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGln
# aUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8v
# Y3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAgBgNV
# HSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIB
# AH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CKDaopafxp
# wc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbPFXONASIl
# zpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaHbJK9nXzQ
# cAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxurJB4mwbfe
# Kuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/Nh4cku0+j
# Sbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNBzU+2QJsh
# IUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77QpfMzmHQXh6
# OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1ObyF5lZynDw
# N7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B2RP+v6TR
# 81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqkhQ/8mJb2
# VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIGsDCCBJigAwIBAgIQ
# CK1AsmDSnEyfXs2pvZOu2TANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQGEwJVUzEV
# MBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29t
# MSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMjEwNDI5MDAw
# MDAwWhcNMzYwNDI4MjM1OTU5WjBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGln
# aUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBT
# aWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExMIICIjANBgkqhkiG9w0BAQEF
# AAOCAg8AMIICCgKCAgEA1bQvQtAorXi3XdU5WRuxiEL1M4zrPYGXcMW7xIUmMJ+k
# jmjYXPXrNCQH4UtP03hD9BfXHtr50tVnGlJPDqFX/IiZwZHMgQM+TXAkZLON4gh9
# NH1MgFcSa0OamfLFOx/y78tHWhOmTLMBICXzENOLsvsI8IrgnQnAZaf6mIBJNYc9
# URnokCF4RS6hnyzhGMIazMXuk0lwQjKP+8bqHPNlaJGiTUyCEUhSaN4QvRRXXegY
# E2XFf7JPhSxIpFaENdb5LpyqABXRN/4aBpTCfMjqGzLmysL0p6MDDnSlrzm2q2AS
# 4+jWufcx4dyt5Big2MEjR0ezoQ9uo6ttmAaDG7dqZy3SvUQakhCBj7A7CdfHmzJa
# wv9qYFSLScGT7eG0XOBv6yb5jNWy+TgQ5urOkfW+0/tvk2E0XLyTRSiDNipmKF+w
# c86LJiUGsoPUXPYVGUztYuBeM/Lo6OwKp7ADK5GyNnm+960IHnWmZcy740hQ83eR
# Gv7bUKJGyGFYmPV8AhY8gyitOYbs1LcNU9D4R+Z1MI3sMJN2FKZbS110YU0/EpF2
# 3r9Yy3IQKUHw1cVtJnZoEUETWJrcJisB9IlNWdt4z4FKPkBHX8mBUHOFECMhWWCK
# ZFTBzCEa6DgZfGYczXg4RTCZT/9jT0y7qg0IU0F8WD1Hs/q27IwyCQLMbDwMVhEC
# AwEAAaOCAVkwggFVMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGg34Ou2
# O/hfEYb7/mF7CIhl9E5CMB8GA1UdIwQYMBaAFOzX44LScV1kTN8uZz/nupiuHA9P
# MA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcDAzB3BggrBgEFBQcB
# AQRrMGkwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBBBggr
# BgEFBQcwAoY1aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1
# c3RlZFJvb3RHNC5jcnQwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybDMuZGln
# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcmwwHAYDVR0gBBUwEzAH
# BgVngQwBAzAIBgZngQwBBAEwDQYJKoZIhvcNAQEMBQADggIBADojRD2NCHbuj7w6
# mdNW4AIapfhINPMstuZ0ZveUcrEAyq9sMCcTEp6QRJ9L/Z6jfCbVN7w6XUhtldU/
# SfQnuxaBRVD9nL22heB2fjdxyyL3WqqQz/WTauPrINHVUHmImoqKwba9oUgYftzY
# gBoRGRjNYZmBVvbJ43bnxOQbX0P4PpT/djk9ntSZz0rdKOtfJqGVWEjVGv7XJz/9
# kNF2ht0csGBc8w2o7uCJob054ThO2m67Np375SFTWsPK6Wrxoj7bQ7gzyE84FJKZ
# 9d3OVG3ZXQIUH0AzfAPilbLCIXVzUstG2MQ0HKKlS43Nb3Y3LIU/Gs4m6Ri+kAew
# Q3+ViCCCcPDMyu/9KTVcH4k4Vfc3iosJocsL6TEa/y4ZXDlx4b6cpwoG1iZnt5Lm
# Tl/eeqxJzy6kdJKt2zyknIYf48FWGysj/4+16oh7cGvmoLr9Oj9FpsToFpFSi0HA
# SIRLlk2rREDjjfAVKM7t8RhWByovEMQMCGQ8M4+uKIw8y4+ICw2/O/TOHnuO77Xr
# y7fwdxPm5yg/rBKupS8ibEH5glwVZsxsDsrFhsP2JjMMB0ug0wcCampAMEhLNKhR
# ILutG4UI4lkNbcoFUCvqShyepf2gpx8GdOfy1lKQ/a+FSCH5Vzu0nAPthkX0tGFu
# v2jiJmCG6sivqf6UHedjGzqGVnhOMIIGwjCCBKqgAwIBAgIQBUSv85SdCDmmv9s/
# X+VhFjANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGln
# aUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5
# NiBTSEEyNTYgVGltZVN0YW1waW5nIENBMB4XDTIzMDcxNDAwMDAwMFoXDTM0MTAx
# MzIzNTk1OVowSDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMu
# MSAwHgYDVQQDExdEaWdpQ2VydCBUaW1lc3RhbXAgMjAyMzCCAiIwDQYJKoZIhvcN
# AQEBBQADggIPADCCAgoCggIBAKNTRYcdg45brD5UsyPgz5/X5dLnXaEOCdwvSKOX
# ejsqnGfcYhVYwamTEafNqrJq3RApih5iY2nTWJw1cb86l+uUUI8cIOrHmjsvlmbj
# aedp/lvD1isgHMGXlLSlUIHyz8sHpjBoyoNC2vx/CSSUpIIa2mq62DvKXd4ZGIX7
# ReoNYWyd/nFexAaaPPDFLnkPG2ZS48jWPl/aQ9OE9dDH9kgtXkV1lnX+3RChG4PB
# uOZSlbVH13gpOWvgeFmX40QrStWVzu8IF+qCZE3/I+PKhu60pCFkcOvV5aDaY7Mu
# 6QXuqvYk9R28mxyyt1/f8O52fTGZZUdVnUokL6wrl76f5P17cz4y7lI0+9S769Sg
# LDSb495uZBkHNwGRDxy1Uc2qTGaDiGhiu7xBG3gZbeTZD+BYQfvYsSzhUa+0rRUG
# FOpiCBPTaR58ZE2dD9/O0V6MqqtQFcmzyrzXxDtoRKOlO0L9c33u3Qr/eTQQfqZc
# ClhMAD6FaXXHg2TWdc2PEnZWpST618RrIbroHzSYLzrqawGw9/sqhux7UjipmAmh
# cbJsca8+uG+W1eEQE/5hRwqM/vC2x9XH3mwk8L9CgsqgcT2ckpMEtGlwJw1Pt7U2
# 0clfCKRwo+wK8REuZODLIivK8SgTIUlRfgZm0zu++uuRONhRB8qUt+JQofM604qD
# y0B7AgMBAAGjggGLMIIBhzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADAW
# BgNVHSUBAf8EDDAKBggrBgEFBQcDCDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglg
# hkgBhv1sBwEwHwYDVR0jBBgwFoAUuhbZbU2FL3MpdpovdYxqII+eyG8wHQYDVR0O
# BBYEFKW27xPn783QZKHVVqllMaPe1eNJMFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6
# Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFJTQTQwOTZTSEEy
# NTZUaW1lU3RhbXBpbmdDQS5jcmwwgZAGCCsGAQUFBwEBBIGDMIGAMCQGCCsGAQUF
# BzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wWAYIKwYBBQUHMAKGTGh0dHA6
# Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFJTQTQwOTZT
# SEEyNTZUaW1lU3RhbXBpbmdDQS5jcnQwDQYJKoZIhvcNAQELBQADggIBAIEa1t6g
# qbWYF7xwjU+KPGic2CX/yyzkzepdIpLsjCICqbjPgKjZ5+PF7SaCinEvGN1Ott5s
# 1+FgnCvt7T1IjrhrunxdvcJhN2hJd6PrkKoS1yeF844ektrCQDifXcigLiV4JZ0q
# BXqEKZi2V3mP2yZWK7Dzp703DNiYdk9WuVLCtp04qYHnbUFcjGnRuSvExnvPnPp4
# 4pMadqJpddNQ5EQSviANnqlE0PjlSXcIWiHFtM+YlRpUurm8wWkZus8W8oM3NG6w
# QSbd3lqXTzON1I13fXVFoaVYJmoDRd7ZULVQjK9WvUzF4UbFKNOt50MAcN7MmJ4Z
# iQPq1JE3701S88lgIcRWR+3aEUuMMsOI5ljitts++V+wQtaP4xeR0arAVeOGv6wn
# LEHQmjNKqDbUuXKWfpd5OEhfysLcPTLfddY2Z1qJ+Panx+VPNTwAvb6cKmx5Adza
# ROY63jg7B145WPR8czFVoIARyxQMfq68/qTreWWqaNYiyjvrmoI1VygWy2nyMpqy
# 0tg6uLFGhmu6F/3Ed2wVbK6rr3M66ElGt9V/zLY4wNjsHPW2obhDLN9OTH0eaHDA
# dwrUAuBcYLso/zjlUlrWrBciI0707NMX+1Br/wd3H3GXREHJuEbTbDJ8WC9nR2Xl
# G3O2mflrLAZG70Ee8PBf4NvZrZCARK+AEEGKMIIHVjCCBT6gAwIBAgIQDDoJVxfW
# FyISC6r4ZQDp8TANBgkqhkiG9w0BAQsFADBpMQswCQYDVQQGEwJVUzEXMBUGA1UE
# ChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQg
# Q29kZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExMB4XDTI0MDIwNzAw
# MDAwMFoXDTI1MDIwNjIzNTk1OVowXjELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5v
# cnRoIENhcm9saW5hMRQwEgYDVQQHEwtNb3JyaXN2aWxsZTEPMA0GA1UEChMGTGVu
# b3ZvMQ8wDQYDVQQDEwZMZW5vdm8wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
# AoICAQCJ/2wEEjI2Fith3vWY9xlzKNcMQm2Rhc+o8R/n4aYVN4esXj1Fq+n+HX6Y
# HPuD8N8cDNxwgCqWYSplQji41PYoYLypV+AtahYvzyD33Z6Qv4cRXDIwZKbzbOgl
# kE4CT0PolwzEvvuOsubro9oPKZVBZny46CVdq9wyplH0KDvbhBHqfT4OPqDo7cCd
# uBoSHHfe1fInaETldz8KF3fN4yt97OS1lm+2b7sIDEOxSwNpBvARtUY2B/Hw0v7u
# YTm32psDPhT/ViLnyDz+//ltD/5TMBk5hG93r/tA4fN7WxmjXozLge37OcEkIQVe
# cSUFU74Ds+zx7MySAXOzS2cScfVsjI6dsEXr3Y2TsrbU6MNJ73bEnnTnrlC80zm4
# f28ztOaB+utZcUkP1WW85eXwDPosH5McIGJ/PFS646UxjM736p8CxQ2ugxwqlJTs
# DOFnoww2gOEsGCqghaiZwhcjbmS1kP36ezL4buYPtySdViBjrkhcHgeuQimSb27g
# Af8Po/syqzZHhk2Yu8433CxH8syVXasB3g5XYUrzgVfoMwXs8TU27hjZTSlW5qLh
# ycNQ2bIzGZOGSXdJtx9waqJOShlRQdAnnjpUo3c/VQYHAMgtDGZws39S3w9WpaRr
# t7aKeAnb3lToRBOPDJgaE9IwsDoKt7u8zMB5lulJIymWhoECBwIDAQABo4ICAzCC
# Af8wHwYDVR0jBBgwFoAUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHQYDVR0OBBYEFNXN
# bjmeamzHeoCP13Pmbf7yfwReMD4GA1UdIAQ3MDUwMwYGZ4EMAQQBMCkwJwYIKwYB
# BQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAOBgNVHQ8BAf8EBAMC
# B4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwgbUGA1UdHwSBrTCBqjBToFGgT4ZNaHR0
# cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25p
# bmdSU0E0MDk2U0hBMzg0MjAyMUNBMS5jcmwwU6BRoE+GTWh0dHA6Ly9jcmw0LmRp
# Z2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNI
# QTM4NDIwMjFDQTEuY3JsMIGUBggrBgEFBQcBAQSBhzCBhDAkBggrBgEFBQcwAYYY
# aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMFwGCCsGAQUFBzAChlBodHRwOi8vY2Fj
# ZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JT
# QTQwOTZTSEEzODQyMDIxQ0ExLmNydDAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUA
# A4ICAQCl35iBbcmzr6+4HRgJBHAZMDkpxHjLnKdcosGX6culcNp+4Oq8sOHIydS2
# ZOCwJ0pxRffgaaGpKmlc3v2myw+7pj0ztiUGfsvS3zS0fFeIk6D9izlwFKaCb5/E
# kWlgvp4Thvt85GiRZDI1zcY7hXN+Gz0h+T0tRz3vLJ2lMf4L+I07W+QjoeyMmbKk
# bCoLdPvUjEk5871V+spp0AQH4LNQuSfAxAwXwYhq5B9eA+iUOk1qdvwcwaRMUG1i
# C/ivPN/XaWjfMYUn9MXivkUJnwGfThb8tU6BxvfHJnesigYT5LsZTYTLgsbN9bfk
# 3x8ccSCzxJAZberP9hTRm7PW0+dBzEv3KWxUwuhmuIdRsiXjDy2KLCksAi06ARRk
# cul7phrRaU1GuYg75xMLP+CQ7AfyIJN6kOj5aSEQblBPmQVR6W04WxQPjJRDd7pe
# yVKe3QLVYVeTPR9D8C8herfj2KX19q5xTG9GrzUyoMVEpiisr8q6O/Gp+rTHJ60O
# kenwjrkKDlnudfP4MlZsTTSe8JFxdQlWCbotp25OdJP4Dy7sLKGrGZvkhAbWDsjr
# u6KHWCLncbNc7mWdFHC1cLh7jXqaYEgppOsf11E0wQtVkO/G/7JWn2fyEGfN6u0q
# jFZRkNz4YJm/H/UmnjEKn9xj/iPiJW4Ou+F2q7ISN60HbYB6qTGCBlMwggZPAgEB
# MH0waTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYD
# VQQDEzhEaWdpQ2VydCBUcnVzdGVkIEc0IENvZGUgU2lnbmluZyBSU0E0MDk2IFNI
# QTM4NCAyMDIxIENBMQIQDDoJVxfWFyISC6r4ZQDp8TANBglghkgBZQMEAgEFAKCB
# hDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEE
# AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJ
# BDEiBCB6c8sB8yqYmcuoMFI4a+e9pnfSM1TOTdQG6pfT6xWYczANBgkqhkiG9w0B
# AQEFAASCAgCFctMaXYzUfC66/Y6hrsKxTrUUPnH2SfOTo09EsIV1OrdoCE6+hrOt
# YE2yqXggYT/3mxb0rUqBId2xDpPenAGf7UDkC/T35i+3ophh6tQSaz+ap76FsZwa
# HLdHqQSSxjyRAB0/5w0d5ZbvtVnYZVXAW2F2Zn5fAwXX3VueMG2weV83mKWU+N8y
# JoV6kydL+oAeOhtOROfsK1JSqXYh0rkrhxRDfKtr4c6bsahSkF2Ts8zX8mQfSPG9
# Z3PAV2SD46jutVbodX84azNX6GlpetuTTFfhggWmOxBsct7N7yTKvragWtvQ51hL
# yv2JbXPV2Nili7P5+O5i3aQQ5jiQo4ALzCZySGb5AaOYsSbW468fPIYXUdjhx7VI
# gNgMPS41r7y2WLvNdxmr3CYg/ocL5JXrzBZgsKB8Rgf4UNsdZCIh4CWnpz/PhcJG
# XLLSyGd9grG3ZgXMitu3aBvckv/OVMXXZNARLv7Y/uM1k1XbZM7EKmLimADrjSv5
# 5vYwOU82G2Ny8l+x7eW7RVm2xn8iapbh/orJ0Rzh7vRByugral/DWwgaXrzFn+Ip
# XVD0UggDbI52rqgoPwQdjXj4NVrUKXvlCiGKSzkHhEnnwMPvJjK6VwlnEXwTQCJq
# 729J6ZKyYQ/NYyyDAFXCOEyxO1IHWYeYmclV6J9H2bkGUDUuFQVBTqGCAyAwggMc
# BgkqhkiG9w0BCQYxggMNMIIDCQIBATB3MGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQK
# Ew5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBS
# U0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OUnQg5pr/bP1/lYRYw
# DQYJYIZIAWUDBAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqG
# SIb3DQEJBTEPFw0yNDA2MTIwOTUwNTdaMC8GCSqGSIb3DQEJBDEiBCC5dsoLVj4Y
# xgIg8HCn0reR4LbrVOoyRo/FQDVPhqykSzANBgkqhkiG9w0BAQEFAASCAgBmx4+j
# xTJ/4EM4f7GfARJLMpimrNO2J6unWQo5yZ0C+vM7HWBcpIeYUz1gzm3K5NPUhy++
# G2+Mioyt24zzlWjj+1gN+hrRfmVABHRuNXW6/udb204/vouZiAWyFySw3VTdAHBX
# Ja+G2wBuRCY+UhNKLFRUzz24jNPObDbfL16At99Ya+9Re5YcT2gquGL0Qxa3hoe+
# grLWllcD5cVeexLYIJtWmajoO0K+fNrVv08/XeqmgptV9KsOGOvCiIiKPDPYznX4
# 1TtS1N7mShNvzGNaQJBvDeQWDA9472gEKdyyEoWQOfAj7m0S9FbmMqIm7jkOYY5P
# XrlqRYwKtLgeLeXJj3VaZvOehnbGQSWfCE6ZuvhVnyk+LLRcM7b4uSfaIhynBnDn
# 4L7eomCTdwxm+dUEJPBkdaRln2iirZ8CJwIPQclsQ2aed20Boqh5AL01Cxw8hTCH
# Pftc4ULy5oGKLcqOQhj5MRviz+2MNOvTE7mcrW0PDFdkbyVN3zUEBZZ99YCQ9Y32
# S5LeyTGyUgHp8tBecvmS1y262fNhDilQOD3rQol920WHiUmByejR1FdImfClx70R
# sb9LI/PDG+rOJNv+9tU+ot/qKTh5vTTOAJeuPr0CQeHv1oJsXn448rJ3cb+X9W20
# BwsGPUTDVTSg/HSLGUJbFeWtDWoX9s7nFHMebw==
# SIG # End signature block
