24224
"Assassin's Creed Valhalla"
6260EC
1
87494
"Version: Ubisoft Connect | Standard | 1.0.2"
90B5D0
1
24225
"-----------------------------------------------------------"
554E4B
1
24226
"Compact Mode"
7C7570
Auto Assembler Script
{$lua}
if syntaxcheck then return end
[ENABLE]
function cycleFullCompact( sender, force )
local state = not( compactmenuitem.Caption == 'Compact View Mode' )
if force ~= nil then
state = not force
end
compactmenuitem.Caption = state and 'Compact View Mode' or 'Full View Mode'
getMainForm().Splitter1.Visible = state
getMainForm().Panel4.Visible = state
getMainForm().Panel5.Visible = state
end
function addCompactMenu()
if compactmenualreadyexists then return end
local parent = getMainForm().Menu.Items
compactmenuitem = createMenuItem( parent )
parent.add( compactmenuitem )
compactmenuitem.Caption = 'Compact View Mode'
compactmenuitem.OnClick = cycleFullCompact
compactmenualreadyexists = 'yes'
end
addCompactMenu()
cycleFullCompact( nil, true )
return "assert (true)"
[DISABLE]
cycleFullCompact( nil, false )
87496
"[ Initialize ]"
A96974
Auto Assembler Script
{$STRICT}
{$lua}
if syntaxcheck then return end
function stopExec( s )
error( print( string.format( "\r\n>> %s <<", s ) ) )
end
function aobScanEx( aob )
-- thanks panraven for this function!
-- https://forum.cheatengine.org/viewtopic.php?t=577536
-- simplified for my needs
local p, a, n, s, e = nil or '*X*W', nil or fsmNotAligned, nil or '0', getAddress( process ) or 0x0, ( getAddress( process ) + getModuleSize( process ) ) or 0xffffffffffffffff
local ms = pb and createMemScan( pb ) or createMemScan()
local fl = createFoundList( ms )
ms.firstScan( soExactValue, vtByteArray, nil, aob, nil, s, e, p, a, n, true, false, false, false )
ms.waitTillDone()
fl.initialize()
local result = nil
if fl ~= nil and fl.getCount() > 0 then
result = createStringlist()
for i = 1, fl.getCount() do result.add( fl.getAddress( i - 1 ) ) end
end
fl.destroy()
ms.destroy()
return result
end
function string.fromhex( s )
return ( s:gsub( '..', function ( cc )
return string.char( tonumber( cc, 16 ) )
end ) )
end
function aobScanSmall( aob, s, e )
local i = byteTableToString( readBytes( s, e, true ) ):find( string.fromhex( aob ), 1, true )
if i == nil then i = 1 end
return ( s + i - 1 )
end
function GetHelpers()
local sl, u, t, v, z = 0, 0, 0, 0, 0
-- GetBhvAssassin
local aob_GetBhvAssassin = "8505????????0F97C0488B5C24??488B7424??4883C4??5FC3488B5C24??32C0488B7424??4883C4??5FC3"
sl = aobScanEx( aob_GetBhvAssassin )
if not sl or sl.Count < 1 then stopExec( "'aob_GetBhvAssassin' not found." ) end
t = tonumber( sl[0], 16 )
t = t - 0xE
if readBytes( t, 1 ) == 0xE8 then
t = t + readInteger( t + 0x1, true ) + 0x5
end
unregisterSymbol( "GetBhvAssassin" )
registerSymbol( "GetBhvAssassin", t, true )
-- GetCharacterAI
local aob_GetCharacterAI = "40534883EC??0FB6DAE8????????0FB6D348894424??488D4C24??E8????????4883C4??5BC3"
sl = aobScanEx( aob_GetCharacterAI )
if not sl or sl.Count < 1 then stopExec( "'aob_GetCharacterAI' not found." ) end
t = tonumber( sl[0], 16 )
t = t + 0x9
if readBytes( t, 1 ) == 0xE8 then
t = t + readInteger( t + 0x1, true ) + 0x5
end
unregisterSymbol( "GetCharacterAI" )
registerSymbol( "GetCharacterAI", t, true )
-- GetTogglePlayerGodMode
local aob_GetTogglePlayerGodMode = "B20148??????48????????????E8????????48??????BA01"
sl = aobScanEx( aob_GetTogglePlayerGodMode )
if not sl or sl.Count < 1 then stopExec( "'aob_GetTogglePlayerGodMode' not found." ) end
t = tonumber( sl[0], 16 )
t = t + 0xD
if readBytes( t, 1 ) == 0xE8 then
t = t + readInteger( t + 0x1, true ) + 0x5
end
unregisterSymbol( "TogglePlayerGodMode" )
registerSymbol( "TogglePlayerGodMode", t, true )
-- GetInvisibility
local aob_GetInvisibility = "8078??0074??32C0488B5C24??4883C4??5FC3488B5C"
sl = aobScanEx( aob_GetInvisibility )
if not sl or sl.Count < 1 then stopExec( "'aob_GetInvisibility' not found." ) end
t = tonumber( sl[0], 16 )
unregisterSymbol( "Invisible" )
registerSymbol( "Invisible", t, true )
t = readBytes( t + 0x2, 1 )
v = getAddress( "OffsetsCave" ) + z
writeInteger( v, t )
unregisterSymbol( "dwInvisible" )
registerSymbol( "dwInvisible", v, true )
z = z + 0x8
-- GetOxygen
local aob_GetOxygen = "488D58??488BCB488D15????????E8????????3C01"
sl = aobScanEx( aob_GetOxygen )
if not sl or sl.Count < 1 then stopExec( "'aob_GetOxygen' not found." ) end
t = tonumber( sl[0], 16 ) + 0x15
unregisterSymbol( "InfiniteOxygen" )
registerSymbol( "InfiniteOxygen", t, true )
-- GetImmunityDataItem
local aob_GetImmunityDataItem = "488B89????????E8????????33F64885C00F84????????48"
sl = aobScanEx( aob_GetImmunityDataItem )
if not sl or sl.Count < 1 then stopExec( "'aob_GetImmunityDataItem' not found." ) end
t = tonumber( sl[0], 16 )
t = t + 0x7
if readBytes( t, 1 ) == 0xE8 then
t = t + readInteger( t + 0x1, true ) + 0x5
end
unregisterSymbol( "GetImmunityDataItem" )
registerSymbol( "GetImmunityDataItem", t, true )
-- GetCharacterAITable
local aob_GetCharacterAITable = "488D05????????488BCB488983????????488D05????????488983????????E8????????488BC3488B5C24??4883C4??5FC3"
sl = aobScanEx( aob_GetCharacterAITable )
if not sl or sl.Count < 1 then stopExec( "'aob_GetCharacterAITable' not found." ) end
t = tonumber( sl[0], 16 ) + 0x11
t = t + readInteger( t + 0x3, true ) + 0x7
t = readQword( t + 0x48 )
unregisterSymbol( "PlayerGodMode" )
registerSymbol( "PlayerGodMode", t, true )
v = getAddress( "OffsetsCave" ) + z
t = ( ~readInteger( t + 0x3 ) & 0xFFFFFFFF ) + 0x1
writeInteger( v, t )
unregisterSymbol( "dwPlayerGodMode" )
registerSymbol( "dwPlayerGodMode", v, true )
z = z + 0x8
-- GetCharacterAIConst
local aob_GetCharacterAIConst = "40534883EC??0FB6DAE8????????0FB6D348894424??488D4C24??E8????????4883C4??5BC3"
sl = aobScanEx( aob_GetCharacterAIConst )
if not sl or sl.Count < 1 then stopExec( "'aob_GetCharacterAIConst' not found." ) end
t = tonumber( sl[0], 16 )
t = t + 0x1B
if readBytes( t, 1 ) == 0xE8 then
t = t + readInteger( t + 0x1, true ) + 0x5
if readBytes( t, 1 ) == 0xE9 then
t = t + readInteger( t + 0x1, true ) + 0x5
end
t = aobScanSmall( "488B1D", t, 0x100 )
t = t + readInteger( t + 0x3, true ) + 0x7
end
unregisterSymbol( "p_CharacterAIConst" )
registerSymbol( "p_CharacterAIConst", t, true )
-- GetInventoryConsts
local aob_GetInventoryConst = "8B81????????24073C0275??B80100000048"
sl = aobScanEx( aob_GetInventoryConst )
if not sl or sl.Count < 1 then stopExec( "'aob_GetInventoryConst' not found." ) end
u = tonumber( sl[0], 16 ) + 0x36
if readBytes( u, 1 ) == 0xE8 then
t = u + readInteger( u + 0x1, true ) + 0x5
if readBytes( t, 1 ) == 0xE9 then
t = t + readInteger( t + 0x1, true ) + 0x5
end
u = aobScanSmall( "488B3D", t, 0x100 )
t = u + readInteger( u + 0x3, true ) + 0x7
unregisterSymbol( "p_InventoryConst" )
registerSymbol( "p_InventoryConst", t, true )
t = u + 0x10
t = readInteger( t )
v = getAddress( "OffsetsCave" ) + z
writeInteger( v, t )
unregisterSymbol( "dwInventoryCallConst" )
registerSymbol( "dwInventoryCallConst", v, true )
z = z + 0x8
t = u + 0x17
t = readBytes( t, 1 )
v = getAddress( "OffsetsCave" ) + z
writeBytes( v, t )
unregisterSymbol( "bInventoryOffsetByte" )
registerSymbol( "bInventoryOffsetByte", v, true )
z = z + 0x8
end
-- GetBipedComponent_getName
local aob_GetBipedComponent_getName = "F30F5EF00F28DEE8????????E8"
sl = aobScanEx( aob_GetBipedComponent_getName )
if not sl or sl.Count < 1 then stopExec( "'aob_GetBipedComponent_getName' not found." ) end
t = tonumber( sl[0], 16 )
t = t + 0xC
if readBytes( t, 1 ) == 0xE8 then
t = t + readInteger( t + 0x1, true ) + 0x5
end
unregisterSymbol( "BipedComponent_GetName" )
registerSymbol( "BipedComponent_GetName", t, true )
-- GetBipedComponent
local aob_GetBipedComponent = "488B15????????E8????????4885C074??C640??004883C4??C3"
sl = aobScanEx( aob_GetBipedComponent )
if not sl or sl.Count < 1 then stopExec( "'aob_GetBipedComponent' not found." ) end
t = tonumber( sl[0], 16 )
t = t + 0x7
if readBytes( t, 1 ) == 0xE8 then
t = t + readInteger( t + 0x1, true ) + 0x5
end
unregisterSymbol( "GetBipedComponent" )
registerSymbol( "GetBipedComponent", t, true )
-- GetProgressionPlayerData
local aob_GetProgressionPlayerData = "48895C24??48897424??48897C24??41564883EC??418B70??4D"
sl = aobScanEx( aob_GetProgressionPlayerData )
if not sl or sl.Count < 1 then stopExec( "'aob_GetProgressionPlayerData' not found." ) end
t = tonumber( sl[0], 16 )
unregisterSymbol( "GetProgressionPlayerData" )
registerSymbol( "GetProgressionPlayerData", t, true )
-- GetAltTabBool
local aob_GetAltTabBool = "3A1D????????0F84????????881D????????4883FF010F"
sl = aobScanEx( aob_GetAltTabBool )
if not sl or sl.Count < 1 then stopExec( "'aob_GetAltTabBool' not found." ) end
t = tonumber( sl[0], 16 )
t = t + readInteger( t + 0x2, true ) + 0x6
unregisterSymbol( "p_AltTabBool" )
registerSymbol( "p_AltTabBool", t, true )
-- GetCameraManager
local aob_GetCameraManager = "488B0D????????E8????????488D5424??488BC84C8B0041FF90????????EB"
sl = aobScanEx( aob_GetCameraManager )
if not sl or sl.Count < 1 then stopExec( "'aob_GetCameraManager' not found." ) end
t = tonumber( sl[0], 16 )
t = t + readInteger( t + 0x3, true ) + 0x7
unregisterSymbol( "p_CameraManager" )
registerSymbol( "p_CameraManager", t, true )
-- GetACUPlayerCameraComponent
local aob_GetACUPlayerCameraComponent = "480387????????483BD875??488BCFE8????????4885C0"
sl = aobScanEx( aob_GetACUPlayerCameraComponent )
if not sl or sl.Count < 1 then stopExec( "'aob_GetACUPlayerCameraComponent' not found." ) end
t = tonumber( sl[0], 16 )
t = t + 0xF
t = t + readInteger( t + 0x1, true ) + 0x5
unregisterSymbol( "GetACUPlayerCameraComponent" )
registerSymbol( "GetACUPlayerCameraComponent", t, true )
-- GetEagleVisionManager
local aob_GetEagleVisionManager = "FF90????????E8????????488BD84885C074??488BC8E8"
sl = aobScanEx( aob_GetEagleVisionManager )
if not sl or sl.Count < 1 then stopExec( "'aob_GetEagleVisionManager' not found." ) end
t = tonumber( sl[0], 16 )
t = t + 0x16
t = t + readInteger( t + 0x1, true ) + 0x5
unregisterSymbol( "GetEagleVisionManager" )
registerSymbol( "GetEagleVisionManager", t, true )
-- GetCameraPatchingSpots
local aob_InputController = "488BCFE8????????83F8010F84????????488BD648"
sl = aobScanEx( aob_InputController )
if not sl or sl.Count < 1 then stopExec( "'aob_InputController' not found." ) end
t = tonumber( sl[0], 16 )
t = t + 0xB
unregisterSymbol( "InputController" )
registerSymbol( "InputController", t, true )
local aob_DetachCamera = "F3410F7F5E??0F5ED1410F11"
sl = aobScanEx( aob_DetachCamera )
if not sl or sl.Count < 1 then stopExec( "'aob_DetachCamera' not found." ) end
t = tonumber( sl[0], 16 )
unregisterSymbol( "DetachCamera" )
registerSymbol( "DetachCamera", t, true )
local aob_RenderToCamera = "48????8B48??3B8B????????0F"
sl = aobScanEx( aob_RenderToCamera )
if not sl or sl.Count < 1 then stopExec( "'aob_RenderToCamera' not found." ) end
t = tonumber( sl[0], 16 )
t = aobScanSmall( "F30F7F83", t, 0x100 )
unregisterSymbol( "RenderToCameraA" )
registerSymbol( "RenderToCameraA", t, true )
t = aobScanSmall( "F30F7F83", t + 0x1, 0x100 )
unregisterSymbol( "RenderToCameraB" )
registerSymbol( "RenderToCameraB", t, true )
sl = aobScanEx( "0F1047??488D47??F30F7F83", t + 0x1 )
t = tonumber( sl[0], 16 )
t = t + 0x8
unregisterSymbol( "RenderToCameraC" )
registerSymbol( "RenderToCameraC", t, true )
-- GetInstantAbilityCooldown
local aob_InstantAbilityCooldown = "0FB65A??80E301E8????????3AD80F84"
sl = aobScanEx( aob_InstantAbilityCooldown )
if not sl or sl.Count < 1 then stopExec( "'aob_InstantAbilityCooldown' not found." ) end
t = tonumber( sl[0], 16 )
unregisterSymbol( "InstantAbilityCooldown" )
registerSymbol( "InstantAbilityCooldown", t, true )
t = readBytes( t + 0x3, 1 )
v = getAddress( "OffsetsCave" ) + z
writeBytes( v, t )
unregisterSymbol( "bCooldown" )
registerSymbol( "bCooldown", v, true )
z = z + 0x8
-- GetSkillSystem
local aob_GetSkillSystem = "C783????????8B31690A4889"
sl = aobScanEx( aob_GetSkillSystem )
if not sl or sl.Count < 1 then stopExec( "'aob_GetSkillSystem' not found." ) end
t = tonumber( sl[0], 16 )
t = t - 0x2F
if readBytes( t, 1 ) == 0x48 then
t = t + readInteger( t + 0x3, true ) + 0x7
t = t + 0x9
if readBytes( t, 1 ) == 0x48 then
t = t + readInteger( t + 0x3, true ) + 0x7
end
end
unregisterSymbol( "p_SkillSystem" )
registerSymbol( "p_SkillSystem", t, true )
-- UnlimitedAmmo
local aob_UnlimitedAmmo = "488BC4448848??8950??488948??55534154488D??D14881EC????????448B15"
sl = aobScanEx( aob_UnlimitedAmmo )
if not sl or sl.Count < 1 then stopExec( "'aob_UnlimitedAmmo' not found." ) end
t = tonumber( sl[0], 16 )
unregisterSymbol( "UnlimitedAmmo" )
registerSymbol( "UnlimitedAmmo", t, true )
-- HijackXP
local aob_HijackXP = "8B91????????4C8BC9488B0D????????E8"
sl = aobScanEx( aob_HijackXP )
if not sl or sl.Count < 1 then stopExec( "'aob_HijackXP' not found." ) end
t = tonumber( sl[0], 16 )
unregisterSymbol( "HijackXP" )
registerSymbol( "HijackXP", t, true )
-- InventoryRead
local aob_InventoryRead = "8B02488BF18901488BFA488D0D????????33C0B201"
sl = aobScanEx( aob_InventoryRead )
if not sl or sl.Count < 1 then stopExec( "'aob_InventoryRead' not found." ) end
t = tonumber( sl[0], 16 )
unregisterSymbol( "InventoryRead" )
registerSymbol( "InventoryRead", t, true )
end
[ENABLE]
local t = 0
local u = 0
-- read the version from the game
local aob_to_VersionString = "41B9C102F0D94C8BC0498D"
sl = aobScanEx( aob_to_VersionString )
if not sl or sl.Count < 1 then stopExec( "'aob_to_VersionString' not found." ) end
t = tonumber( sl[0], 16 )
-- get to the next CALL, calculate the CALL destination and read the pointer address
t = t + 0x49
t = t + readInteger( t + 0x1, true ) + 0x5
if readBytes( t, 1 ) == 0xE9 then
t = t + readInteger( t + 0x1, true ) + 0x5
if readBytes( t, 1 ) == 0xE9 then
t = t + readInteger( t + 0x1, true ) + 0x5
end
end
t = t + readInteger( t + 0x3, true ) + 0x7
local GameVersion = readString( t )
-- read the version from the table
local TableVersion = addresslist_getMemoryRecord( getAddressList(), 1 )
TableVersion = memoryrecord_getDescription( TableVersion )
TableVersion = string.match( TableVersion, 'Version: Ubisoft Connect | Standard | (.*)' )
-- check the two and warn the user
if TableVersion ~= GameVersion then
showMessage( "This table is designed for Version: \r\n>> " .. TableVersion .. "\r\n\r\nYours is: \r\n>> " .. GameVersion .. "\r\n\r\nThe script will now enable, though I can't guarantee everything will work properly." )
end
-- continue && find the requisites
local aob_GetWorld = "488B05????????4885C074??488B80????????C3C3"
sl = aobScanEx( aob_GetWorld )
if not sl or sl.Count < 1 then stopExec( "'GetWorld' not found. Aborting. Check your game version?" ) end
t = tonumber( sl[0], 16 )
unregisterSymbol( "GetWorld" )
registerSymbol( "GetWorld", t, true )
local gameModule = getAddress( process )
t = gameModule + 0x550
fullAccess( t, 0x1000 ) -- as long as size for fullAccess is > than required size, should be fine
unregisterSymbol( "Trampolines" )
registerSymbol( "Trampolines", t, true )
local aob_OffsetsCave = "636F6D7061746962696C6974793E3C2F617373656D626C793E"
sl = aobScanEx( aob_OffsetsCave )
if not sl or sl.Count < 1 then stopExec( "'aob_OffsetsCave' not found." ) end
t = tonumber( sl[0], 16 ) + 0x30
u = t
repeat
u = t & 0xF
--print( string.format( "0x%X", u ) )
t = t + 0x1
until u == 0x0
t = t - 0x1
fullAccess( t, 0x28 )
unregisterSymbol( "OffsetsCave" )
registerSymbol( "OffsetsCave", t, true )
GetHelpers()
[DISABLE]
-- unregister remnants
autoAssemble([[
unregistersymbol( OffsetsCave )
unregistersymbol( Trampolines )
]])
87497
"[ Player ]"
FF4040
1
87498
"God Mode"
Auto Assembler Script
[ENABLE]
label( PlayerGodMode_o )
registersymbol( PlayerGodMode_o )
alloc( PlayerGodModeHook, 0x1000 )
registersymbol( PlayerGodModeHook )
label( pGod )
registersymbol( pGod )
PlayerGodModeHook:
mov [pGod],rcx
db C6
readmem( PlayerGodMode+2, 5 )
db 01
PlayerGodMode_o:
readmem( PlayerGodMode, 7 )
jmp [jumpaddressback]
jumpaddressback:
dq PlayerGodMode+7
align 10 CC
pGod:
dq 0
align 10 CC
Trampolines+00:
jmp [jumptrampolineaddress]
jumptrampolineaddress:
dq PlayerGodModeHook
align 10 CC
PlayerGodMode:
jmp Trampolines+00
nop 2
[DISABLE]
{$lua}
if not syntaxcheck then
local t = readQword( getAddress( "pGod" ) )
if t ~= nil then
writeBytes( t - readInteger( getAddress( "dwPlayerGodMode" ) ), 0 )
end
end
{$asm}
PlayerGodMode:
readmem( PlayerGodMode_o, 7 )
unregistersymbol( pGod )
unregistersymbol( PlayerGodMode_o )
dealloc( PlayerGodModeHook )
unregistersymbol( PlayerGodModeHook )
87508
"Unlimited Ammo"
Auto Assembler Script
[ENABLE]
label( UnlimitedAmmo_o )
registersymbol( UnlimitedAmmo_o )
alloc( UnlimitedAmmoHook, 0x1000 )
registersymbol( UnlimitedAmmoHook )
label( idxTable )
label( UnlimitedAmmoHook_loop )
label( UnlimitedAmmoHook_exit )
UnlimitedAmmoHook:
push rax
push rbx
push rdx
push rcx // store current __this
call GetWorld
mov rcx,[rax+15F0] // Entity
call GetBhvAssassin
mov rcx,[rax+60] // CharacterAI
mov rcx,[rcx+70]
//mov rbx,p_InventoryConst
//mov rbx,[rbx]
mov rbx,p_InventoryConst
mov rbx,[rbx]
//mov rdx,dwInventoryCallConst
//movsxd rdx,dword ptr [rdx] // 0xA0
mov rdx,dwInventoryCallConst
movsxd rdx,dword ptr [rdx]
mov rax,[rcx]
call qword ptr [rax+rdx] // lea rax,[rcx+1E1]
//mov rdx,bInventoryOffsetByte
//movsx rdx,byte ptr [rdx] // 0x49
mov rdx,bInventoryOffsetByte
movsx rdx,byte ptr [rdx]
movzx ecx,byte ptr [rbx+rdx]
mov rax,[rax]
mov rcx,[rax+rcx*8]
add rcx,-320
// mov rcx,[rcx+40]
// mov rax,[rcx]
// add rcx,-198 --> CSrvPlayerInventory
mov rax,rcx
pop rcx // restore __this
cmp rcx,rax
pop rdx
pop rbx
pop rax
jne short UnlimitedAmmo_o
// if our Inventory, then exclude ammo and tools
push rax
push rbx
push rcx
push rdi
mov rax,[r8]
mov rbx,idxTable
xor rcx,rcx
UnlimitedAmmoHook_loop:
mov rdi,[rbx+rcx*8]
test rdi,rdi
je short UnlimitedAmmoHook_exit
cmp [rax+10],rdi
jne short @f
xor edx,edx // make it so update is done with 0
jmp short UnlimitedAmmoHook_exit
@@:
inc ecx
jmp short UnlimitedAmmoHook_loop
UnlimitedAmmoHook_exit:
pop rdi
pop rcx
pop rbx
pop rax
UnlimitedAmmo_o:
readmem( UnlimitedAmmo, 7 )
jmp [jumpaddressback]
jumpaddressback:
dq UnlimitedAmmo+7
align 10 CC
idxTable:
dq 00000043E344147B // Normal Arrows
dq 0000015A4CA332CB // Paralyzing Arrows
dq 0000015A4CA332CA // Poison Arrows
dq 0000015A4CA332C8 // Fire Arrows
dq 0000015A4CA332CC // Explosive Arrows
dq 000001648A17CDFF // Death Arrows
dq 000001CAC79270DF // Light Arrows
dq 000001CAC79270D8 // Predator Arrows
dq 0
align 10 CC
Trampolines+10:
jmp [jumptrampolineaddress]
jumptrampolineaddress:
dq UnlimitedAmmoHook
align 10 CC
UnlimitedAmmo:
jmp Trampolines+10
nop 2
[DISABLE]
UnlimitedAmmo:
readmem( UnlimitedAmmo_o, 7 )
unregistersymbol( UnlimitedAmmo_o )
dealloc( UnlimitedAmmoHook )
unregistersymbol( UnlimitedAmmoHook )
87500
"Invisibility"
Auto Assembler Script
[ENABLE]
label( Invisible_o )
registersymbol( Invisible_o )
label( Invisible_o_je )
alloc( InvisibleHook, 0x1000 )
registersymbol( InvisibleHook )
label( pBhvAssassin )
registersymbol( pBhvAssassin )
InvisibleHook:
push rcx
push rax
call GetWorld
mov rcx,[rax+15F0]
pop rax
cmp [rax+18],rcx // if our Entity
pop rcx
jne short Invisible_o
mov [pBhvAssassin],rax
push rdx
mov rdx,dwInvisible
movsxd rdx,dword ptr [rdx]
mov byte ptr [rax+rdx],1
pop rdx
Invisible_o:
readmem( Invisible, 4 )
je short Invisible_o_je
jmp [jumpaddressback]
jumpaddressback:
dq Invisible+6
align 10 CC
Invisible_o_je:
jmp [jumpaddressje]
jumpaddressje:
dq Invisible+13
align 10 CC
pBhvAssassin:
dq 0
align 10 CC
Trampolines+20:
jmp [jumptrampolineaddress]
jumptrampolineaddress:
dq InvisibleHook
align 10 CC
Invisible:
jmp Trampolines+20
nop 1
[DISABLE]
{$lua}
if not syntaxcheck then
local t = readQword( getAddress( "pBhvAssassin" ) )
if t ~= nil then
writeBytes( t + readInteger( getAddress( "dwInvisible" ) ), 0 )
end
end
{$asm}
Invisible:
readmem( Invisible_o, 4 )
db 74 0D
unregistersymbol( pBhvAssassin )
unregistersymbol( Invisible_o )
dealloc( InvisibleHook )
unregistersymbol( InvisibleHook )
87501
"Infinite Oxygen"
Auto Assembler Script
[ENABLE]
InfiniteOxygen+0x1:
db 00
[DISABLE]
InfiniteOxygen+0x1:
db 51
87503
"Disable Ability Cooldown"
Auto Assembler Script
[ENABLE]
label( InstantAbilityCooldown_o )
registersymbol( InstantAbilityCooldown_o )
alloc( InstantAbilityCooldownHook, 0x1000 )
registersymbol( InstantAbilityCooldownHook )
InstantAbilityCooldownHook:
push rax
push rbx
call GetWorld
test rax,rax
je short @f
mov rax,[rax+15F0]
cmp [rdx+80],rax
jne short @f
mov rbx,bCooldown
movsx rbx,byte ptr [rbx]
mov byte ptr [rdx+rbx],1
@@:
pop rbx
pop rax
InstantAbilityCooldown_o:
readmem( InstantAbilityCooldown, 7 )
mov r14d,8
jmp [jumpaddressback]
jumpaddressback:
dq InstantAbilityCooldown+7
align 10 CC
Trampolines+30:
jmp [jumptrampolineaddress]
jumptrampolineaddress:
dq InstantAbilityCooldownHook
align 10 CC
InstantAbilityCooldown:
jmp Trampolines+30
nop 2
[DISABLE]
InstantAbilityCooldown:
readmem( InstantAbilityCooldown_o, 7 )
unregistersymbol( InstantAbilityCooldown_o )
dealloc( InstantAbilityCooldownHook )
unregistersymbol( InstantAbilityCooldownHook )
87504
"Set XP Multiplier"
Auto Assembler Script
[ENABLE]
label( HijackXP_o )
registersymbol( HijackXP_o )
alloc( HijackXPHook, 0x1000 )
registersymbol( HijackXPHook )
label( dwXPMultiplier )
registersymbol( dwXPMultiplier )
HijackXPHook:
push rax
mov rax,dwXPMultiplier
mov eax,[rax]
mov edx,[rcx+1B4]
imul edx,eax
mov [rcx+1B4],edx
mov edx,[rcx+1B8]
imul edx,eax
mov [rcx+1B8],edx
pop rax
HijackXP_o:
readmem( HijackXP, 6 )
jmp [jumpaddressback]
jumpaddressback:
dq HijackXP+6
align 10 CC
dwXPMultiplier:
dd 1
align 10 CC
Trampolines+40:
jmp [jumptrampolineaddress]
jumptrampolineaddress:
dq HijackXPHook
align 10 CC
HijackXP:
jmp Trampolines+40
nop 1
[DISABLE]
HijackXP:
readmem( HijackXP_o, 6 )
unregistersymbol( dwXPMultiplier )
unregistersymbol( HijackXP_o )
dealloc( HijackXPHook )
unregistersymbol( HijackXPHook )
87505
"XP Multiplier"
4 Bytes
dwXPMultiplier
87509
"[ Inventory ]"
FF4040
1
25041
"Inventory Reader (Resources, Crafting Materials, Consumables, Trade Goods, etc.)"
Auto Assembler Script
[ENABLE]
label( InventoryRead_o )
registersymbol( InventoryRead_o )
alloc( InventoryReadHook, 0x1000 )
registersymbol( InventoryReadHook )
label( ResourcesTable )
registersymbol( ResourcesTable )
InventoryReadHook:
push rax
push rbx
mov rax,[rdx+8]
mov rbx,0000001BFDB9F655 // Silver
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+00],rdx
@@:
mov rbx,000001AF7031F403 // Leather
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+08],rdx
@@:
mov rbx,000001AF7031F3F9 // Iron Ore
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+10],rdx
@@:
mov rbx,00000043E344147B // Hunter Arrows
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+18],rdx
@@:
mov rbx,000001CAC79270DF // Light Arrows
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+20],rdx
@@:
mov rbx,000001CAC79270D8 // Predator Arrows
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+28],rdx
@@:
mov rbx,000001C4A7630121 // Bucket
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+30],rdx
@@:
mov rbx,000001C4A7630167 // Ball of Yarn
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+38],rdx
@@:
mov rbx,000001C4A763010D // Broken Bow
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+40],rdx
@@:
mov rbx,0000017E0E6B5DF1 // Yellow Feather
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+48],rdx
@@:
mov rbx,000001C4A763011C // Doll
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+50],rdx
@@:
mov rbx,000001C4A7641435 // Wolf Fang
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+58],rdx
@@:
mov rbx,000001C4A7630126 // Shell
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+60],rdx
@@:
mov rbx,000001C4A7630158 // Compass
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+68],rdx
@@:
mov rbx,000001C4A7641449 // Wolf Claw
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+70],rdx
@@:
mov rbx,0000017E0E6B5DDF // Dry Bread
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+78],rdx
@@:
mov rbx,000001C4A7630135 // Tooth
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+80],rdx
@@:
mov rbx,000001C4A7630162 // Sacred Orb
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+88],rdx
@@:
mov rbx,000001C4A763014E // Leather Ball
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+90],rdx
@@:
mov rbx,000001C4A763013A // Rope
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+98],rdx
@@:
mov rbx,000001C4A763013F // Flower
cmp [rax+10],rbx
jne short @f
mov [ResourcesTable+A0],rdx
@@:
pop rbx
pop rax
InventoryRead_o:
readmem( InventoryRead, 5 )
jmp [jumpaddressback]
jumpaddressback:
dq InventoryRead+5
align 10 CC
ResourcesTable:
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
dq 0
align 10 CC
Trampolines+50:
jmp [jumptrampolineaddress]
jumptrampolineaddress:
dq InventoryReadHook
align 10 CC
InventoryRead:
jmp Trampolines+50
[DISABLE]
InventoryRead:
readmem( InventoryRead_o, 5 )
unregistersymbol( ResourcesTable )
unregistersymbol( InventoryReadHook )
unregistersymbol( InventoryRead_o )
25050
"-- Resources --"
1
25047
"Silver"
4 Bytes
ResourcesTable
0
87510
"-- Crafting Materials --"
1
87511
"Leather"
4 Bytes
ResourcesTable+8
0
87512
"Iron Ore"
4 Bytes
ResourcesTable+10
0
25051
"-- Consumables --"
1
25054
"Hunter Arrows"
4 Bytes
ResourcesTable+18
0
25057
"Light Arrows"
4 Bytes
ResourcesTable+20
0
25055
"Predator Arrows"
4 Bytes
ResourcesTable+28
0
25052
"-- Trade Goods --"
1
25058
"Wolf Fang"
4 Bytes
ResourcesTable+58
0
25063
"Dry Bread"
4 Bytes
ResourcesTable+78
0
25062
"Yellow Feather"
4 Bytes
ResourcesTable+48
0
25061
"Broken Bow"
4 Bytes
ResourcesTable+40
0
25060
"Doll"
4 Bytes
ResourcesTable+50
0
25059
"Bucket"
4 Bytes
ResourcesTable+30
0
87513
"Shell"
4 Bytes
ResourcesTable+60
0
87514
"Tooth"
4 Bytes
ResourcesTable+80
0
87515
"Rope"
4 Bytes
ResourcesTable+98
0
87516
"Flower"
4 Bytes
ResourcesTable+A0
0
87517
"Leather Ball"
4 Bytes
ResourcesTable+90
0
87518
"Compass"
4 Bytes
ResourcesTable+68
0
87519
"Sacred Orb"
4 Bytes
ResourcesTable+88
0
87520
"Ball of Yarn"
4 Bytes
ResourcesTable+38
0
87521
"Wolf Claw"
4 Bytes
ResourcesTable+70
0
25181
"[ Teleport ]"
FF4040
1
25207
"Teleport To Waypoint"
Auto Assembler Script
[ENABLE]
{$lua}
if not syntaxcheck then
if getAddressSafe( "MapWPHook" ) == nil then
local t = GetAssemblySpot()
registerSymbol( "MapWPHook", t, true )
end
autoAssemble([[
aobscanmodule( MapWP, ACOdyssey.exe, 488B4608488B480848C1E12048C1F93F482308488B4130488B480848C1E12048C1F93F482308 )
registersymbol( MapWP )
label( MapWP_o )
registersymbol( MapWP_o )
label( TeleportToWaypoint )
registersymbol( TeleportToWaypoint )
label( pStorage )
registersymbol( pStorage )
label( teleport_me )
registersymbol( teleport_me )
MapWPHook:
cmp [teleport_me],0
je short MapWP_o
call short TeleportToWaypoint
mov [teleport_me],0
MapWP_o:
readmem( MapWP, 8 )
jmp MapWP+8
db CC CC CC CC
TeleportToWaypoint:
sub rsp,28
push rdi
mov rdi,pStorage
mov [rdi],rax
mov [rdi+8],rbx
mov [rdi+10],rcx
mov [rdi+18],rdx
pop rdi
movups xmm0,[rsi+60] // load waypoint's XYZT in xmm0
call GetWorld
mov rbx,[rax+90] // Entity
mov rcx,rbx
call BipedComponent_GetName
mov rdx,rax
call GetBipedComponent
mov rcx,rax
movups [rbx+50],xmm0 // set player coordinates to waypoint's XYZT
movups [rcx+260],xmm2 // set BipedComponent XYZ to camera's
mov rcx,[rcx+9B0]
movups [rcx+60],xmm2
push rdi
mov rdi,pStorage
mov rdx,[rdi+18]
mov rcx,[rdi+10]
mov rbx,[rdi+8]
mov rax,[rdi]
pop rdi
add rsp,28
ret
db CC CC CC CC
pStorage:
dq 0
dq 0
dq 0
dq 0
db CC CC CC CC
teleport_me:
dd 0
db DE AD C0 DE
MapWP:
jmp MapWPHook
db 90 90 90
]])
end
{$asm}
[DISABLE]
MapWP:
readmem( MapWP_o, 8 )
unregistersymbol( teleport_me )
unregistersymbol( pStorage )
unregistersymbol( TeleportToWaypoint )
unregistersymbol( MapWP_o )
unregistersymbol( MapWP )
25208
"DoIt"
4 Bytes
teleport_me
25171
"Free Cam + Teleport"
Auto Assembler Script
[ENABLE]
CreateThread( CameraKeyHandlerThread )
label( CameraKeyHandlerThread_loop )
label( moveForward )
label( moveLeft )
label( moveRight )
label( moveBackward )
label( incZ )
label( decZ )
label( checkShift )
label( TeleportToCamera )
label( get_Camera )
label( get_SineCosine )
label( pStore )
label( fSpeed )
label( bShiftPressed )
label( incSpeed )
label( resetSpeed )
label( fSpeedMult )
label( fSpeedBase )
label( freecam )
registersymbol( freecam )
CameraKeyHandlerThread:
sub rsp,28
CameraKeyHandlerThread_loop:
mov rcx,5
call Sleep
cmp [freecam],1
je short @f
jmp short CameraKeyHandlerThread_loop
@@:
// if Alt-Tab-ed out..
mov rax,p_AltTabBool
cmp byte ptr [rax],0
je short CameraKeyHandlerThread_loop
// ..or opened-up any game menu (map, inventory, etc.)
call GetWorld
test rax,rax
je CameraKeyHandlerThread_loop
mov rcx,rax
call GetEagleVisionManager
test rax,rax
je CameraKeyHandlerThread_loop
cmp byte ptr [rax+D0],0
je CameraKeyHandlerThread_loop
// bail
// ;
// else
mov rcx,57 // W
call GetAsyncKeyState
shr ax,#15
cmp ax,1
jne short @f
call short moveForward
@@:
mov rcx,41 // A
call GetAsyncKeyState
shr ax,#15
cmp ax,1
jne short @f
call short moveLeft
@@:
mov rcx,44 // D
call GetAsyncKeyState
shr ax,#15
cmp ax,1
jne short @f
call short moveRight
@@:
mov rcx,53 // S
call GetAsyncKeyState
shr ax,#15
cmp ax,1
jne short @f
call short moveBackward
@@:
mov rcx,20 // VK_SPACE
call GetAsyncKeyState
shr ax,#15
cmp ax,1
jne short @f
call short incZ
@@:
mov rcx,46 // F
call GetAsyncKeyState
shr ax,#15
cmp ax,1
jne short @f
call short decZ
@@:
call short checkShift
mov rcx,51 // Q
call GetAsyncKeyState
shr ax,#15
cmp ax,1
jne short @f
call short TeleportToCamera
@@:
// clear registers
xorps xmm0,xmm0
xorps xmm1,xmm1
xorps xmm2,xmm2
xorps xmm3,xmm3
xorps xmm4,xmm4
xorps xmm5,xmm5
jmp CameraKeyHandlerThread_loop
db CC CC CC CC
get_Camera:
mov rax,p_CameraManager
mov rcx,[rax]
call GetACUPlayerCameraComponent
mov rdi,rax
ret
db CC CC CC CC
get_SineCosine:
call short get_Camera
fld [rax+570] // camera rot_H
fsin
fstp [pStore]
fld [rax+570] // camera rot_H
fcos
fstp [pStore+4]
lea rax,[pStore]
ret
db CC CC CC CC
moveForward:
call short get_SineCosine
movss xmm0,[rax+4] // cosine
movss xmm1,[rax] // sine
mulss xmm0,[fSpeed] // multiply cosine by speed
mulss xmm1,[fSpeed] // multiply sine by speed
//load XYZ
movss xmm2,[rdi+60]
movss xmm3,[rdi+64]
movss xmm4,[rdi+68]
subss xmm3,xmm0
subss xmm2,xmm1
call short get_Camera
movss xmm5,[rax+578] // load Z pitch (camera rot_V)
mulss xmm5,[fSpeed] // multiply pitch by modifier
subss xmm4,xmm5 // add result to Z
//store XYZ
movss [rdi+60],xmm2
movss [rdi+64],xmm3
movss [rdi+68],xmm4
ret
db CC CC CC CC
moveLeft:
call short get_SineCosine
movss xmm0,[rax+4] // cosine
movss xmm1,[rax] // sine
mulss xmm0,[fSpeed] // multiply cosine by speed
mulss xmm1,[fSpeed] // multiply sine by speed
//load XY
movss xmm2,[rdi+60]
movss xmm3,[rdi+64]
addss xmm2,xmm0
subss xmm3,xmm1
//store XY
movss [rdi+60],xmm2
movss [rdi+64],xmm3
ret
db CC CC CC CC
moveRight:
call short get_SineCosine
movss xmm0,[rax+4] // cosine
movss xmm1,[rax] // sine
mulss xmm0,[fSpeed] // multiply cosine by speed
mulss xmm1,[fSpeed] // multiply sine by speed
//load XY
movss xmm2,[rdi+60]
movss xmm3,[rdi+64]
subss xmm2,xmm0
addss xmm3,xmm1
//store XY
movss [rdi+60],xmm2
movss [rdi+64],xmm3
ret
db CC CC CC CC
moveBackward:
call short get_SineCosine
movss xmm0,[rax+4] // cosine
movss xmm1,[rax] // sine
mulss xmm0,[fSpeed] // multiply cosine by speed
mulss xmm1,[fSpeed] // multiply sine by speed
//load XYZ
movss xmm2,[rdi+60]
movss xmm3,[rdi+64]
movss xmm4,[rdi+68]
addss xmm3,xmm0
addss xmm2,xmm1
call short get_Camera
movss xmm5,[rax+578] // load Z pitch (camera rot_V)
mulss xmm5,[fSpeed] // multiply pitch by modifier
addss xmm4,xmm5 // add result to Z
//store XYZ
movss [rdi+60],xmm2
movss [rdi+64],xmm3
movss [rdi+68],xmm4
ret
db CC CC CC CC
incZ:
call short get_Camera
fld dword ptr [rdi+68] // load Z
fadd dword ptr [fSpeed] // add modifier
fstp dword ptr [rdi+68] // store Z
ret
db CC CC CC CC
decZ:
call short get_Camera
fld dword ptr [rdi+68] // load Z
fsub dword ptr [fSpeed] // subtract modifier
fstp dword ptr [rdi+68] // store Z
ret
db CC CC CC CC
checkShift:
sub rsp,28
mov rcx,10 // VK_SHIFT
call GetAsyncKeyState
shr ax,#15
cmp ax,1
jne short @f
call short incSpeed
mov [bShiftPressed],1
add rsp,28
ret
@@:
cmp [bShiftPressed],1
jne short @f
call short resetSpeed
mov [bShiftPressed],0
@@:
add rsp,28
ret
db CC CC CC CC
incSpeed:
fld [fSpeed]
fadd [fSpeedMult]
fstp [fSpeed]
ret
db CC CC CC CC
resetSpeed:
fld [fSpeedBase]
fstp [fSpeed]
ret
db CC CC CC CC
TeleportToCamera:
sub rsp,28
call short get_Camera
xorps xmm0,xmm0
xorps xmm1,xmm1
xorps xmm2,xmm2
movss xmm0,[rax+60] // X
movss xmm1,[rax+64] // Y
movss xmm2,[rax+68] // Z
subss xmm2,[fDouble] // Z - 2.0
call short get_SineCosine
movss xmm3,[rax] // sin
mulss xmm3,[fDouble] // sin * 2.0
movss xmm4,[rax+4] // cos
mulss xmm4,[fDouble] // cos * 2.0
subss xmm0,xmm3 // X + sinh * 2.0
subss xmm1,xmm4 // Y + cosh * 2.0
shufps xmm1,xmm5,1 // puts Y as 2nd DWORD of xmm1
shufpd xmm2,xmm2,1 // puts Z as 3rd DWORD of xmm2
paddb xmm2,xmm0
paddb xmm2,xmm1
call GetWorld
mov rbx,[rax+90] // Entity
mov rcx,rbx
call BipedComponent_GetName
mov rdx,rax
call GetBipedComponent
mov rcx,rax
movups [rbx+50],xmm2 // set Entity XYZ to camera's
movups [rcx+260],xmm2 // set BipedComponent XYZ to camera's
mov rcx,[rcx+9B0]
movups [rcx+60],xmm2 // set Entity components sync to camera's XYZ
add rsp,28
ret
db CC CC CC CC
pStore:
dd (float)0.0
dd (float)0.0
fSpeed:
dd (float)0.1
fSpeedMult:
dd (float)0.01
fSpeedBase:
dd (float)0.1
bShiftPressed:
dd 0
fDouble:
dd (float)2.0
freecam:
dd 0
db CC CC CC CC
label( RenderToCamera_A )
label( RenderToCamera_B )
label( RenderToCamera_C )
label( back_A )
label( back_B )
label( back_C )
RenderPointsHook:
RenderToCamera_A:
push rax
push rcx
mov rax,p_CameraManager
mov rcx,[rax]
call GetACUPlayerCameraComponent
movups xmm0,[rax+90] // get XYZ in xmm0
pop rcx
pop rax
movdqa [rbx+220],xmm0
jmp back_A
db CC CC CC CC
RenderToCamera_B:
push rax
push rcx
mov rax,p_CameraManager
mov rcx,[rax]
call GetACUPlayerCameraComponent
movups xmm0,[rax+90] // get XYZ in xmm0
pop rcx
pop rax
movdqa [rbx+210],xmm0
jmp back_B
db CC CC CC CC
RenderToCamera_C:
push rax
push rcx
mov rax,p_CameraManager
mov rcx,[rax]
call GetACUPlayerCameraComponent
movups xmm0,[rax+90] // get XYZ in xmm0
pop rcx
pop rax
movdqa [rbx+230],xmm0
jmp back_C
db CC CC CC CC
InputController: // patch player input controller
db 90 E9
DetachCamera: // detach camera
db 90 90 90 90 90
RenderToCameraA: // render to camera A
jmp RenderToCamera_A
db 90 90 90
back_A:
RenderToCameraB: // render to camera B
jmp RenderToCamera_B
db 90 90 90
back_B:
RenderToCameraC: // render to camera C
jmp RenderToCamera_C
db 90 90 90
back_C:
[DISABLE]
unregistersymbol( freecam )
InputController: // restore
db 0F 84
DetachCamera: // restore
db 66 0F 7F 4B 60
RenderToCameraA: // restore
db 66 0F 7F 83 20 02 00 00
RenderToCameraB: // restore
db 66 0F 7F 83 10 02 00 00
RenderToCameraC: // restore
db 66 0F 7F 83 30 02 00 00
25209
"freecam"
Byte
freecam
18
"[ Debug ]"
BAA5F3
1
25160
"pGod"
1
808000
8 Bytes
pGod
25162
"bGod"
1
808000
Byte
pGod
-164
25161
"pBhvAssassin"
1
808000
8 Bytes
pBhvAssassin
25163
"bInvisible"
1
808000
Byte
pBhvAssassin
7E
25185
"Skill Points [Actual]"
808000
4 Bytes
p_SkillSystem
8
A20
25184
"Skill Points [Cumulated]"
808000
4 Bytes
p_SkillSystem
C
A20
24227
"-----------------------------------------------------------"
554E4B
1
51
"Think I deserve a cookie? ツ"
7C7570
1
87495
"https://www.paypal.me/sadjuk"
7C7570
1
24228
"https://www.patreon.com/join/sunbeam906"
7C7570
1
080DYK{uAn[OLGX+KM?Nl-U0F3GzcPe*;{CKYwyIPt#V*NJHw5!P9$2H(!)7$Y(?}5bF.n!b8u5Aqz+!):]CmwCs-.wVzb[XfF/Uv}K=e;+$E})7IFiqj#]}5Pod;s%VNCcD?$3^2s4K5yOj-vRpx36oh@YDTC3i18B{!
5dZ*HQ*y;zWn;@=c[34DZbD@YZHxc]07XMnH9]OY004,YdAcuzstQ.NhpCaQg6AIpKI?^QXluZR?y1@F5,b8P_8TaZPM}UYAu^tzILzkaeRya)Q_$+F-OiKgDNRcNHE^..L2(s2e#y#x)It_%SOsCw-_,ww=o.JqtVdFTsjG#Rp;qE#U{+d2.i5@Lc/Fbs[q5_W1MTu/vLRr=.^{-t004/lPDc$28VUda01Zh/L^b0%03ZMW03Zkk0001UdV2H#000JJOGiWi^^a60_De66lK:n!32.bRa^vGf6951U69E94oEQKA00)qQO,@Rc1R4/[FZfxb0000ACP[p:R9M5UmwR.8*s?FT:l9ON$t93WAYiZrfnY+NpcsS(7Ing-5+RJ(xFod-K1NnsA213!OtGTXL07HdgX!;S3)i:qhL:Ev89^KSMKlsh7C^9Z0)sw=]}3ax?0_JL?)[j9S,hKA^nl@oz0ZEEy{xVkv+E8CZ[DkMm8s9]ZT}.,4PC@GeR*B5$Gv/j$KP;BAArPfYVbc/d7huzG[NH3^NVBDXm_UAL_,.s0NnZ=6!UGJ[-kWIBQI25e}wPCpC_x2o}fAKx?5!xfb^B0aZcX-^HVI+s;%WX7u)u5Qoi+L/nj0LKl/f*UhuvHN8HZX#=-${=E^dBrECDzqyCPx]VoLNZmI#0+zo/Z,Z_t#Gw/V5@Uvz^RDienHsP*+$J.UYB7fo:;E80ULjV3BRPwh_F!CJCnePD5?mS@djEdLT^R$?NW,u/:N!GY0^D)0VW=!+Nw}Z#Ne_Tg3P_H!xG8?Co4pjnp?758mUndGyqS9}QZrZcn?V?HL[$rZHT]iOy(P{Ylu^]I[=fU[uFO4!oKmNp1PO8xTvkg_.2QsaJp}!TY3QY)=-aIen/Ho-HXSX2-dt71_Kx,MsdFIr0J%Ea;sJh;t@}S62TQh{q@E;LY835;hwse^o:b]XjQ{3YU#h$jsLqC+*%H.btRzQ)IM(Y+?#2S21kXvD)5Af+xFAb?IH8za}o(A/I7sOUyJ34W,eXCPkTpoI0SNqp{eItO[s*@+z,e6!.tN$Ro/SYtYq-$X22+fUv^ikEBYU$:@I*!6tC=M%dN@OUE^qwoDC;J?:$MZ92rb3.v)2M:meSg,.cYNIpf[0lN4j{X1-)%dc5@v3L%*6S-3+0RehP1!c-t0E)/P24]9{wJf[!y-DhbM^)8D]mhmUIz7Nx/UMWQwOwx6(L;vuSJz]NJX6pb[_/huz/p*[cL;cLCD%b:bA+vOYFWxpWDXnqYS/=b[wJ;G7Gp4h[c;%sF_I1LZ@cv?@x;o){kKg3?6,08LFk*/.1Wgu*E!Wl.6$QQjPMC6#3Xv^7kv-H7ykYGYp@%Dk,7rF)DQ5VCIF*g:Jb-Uq_6gL}]TE,y$5[+[P!H,hltTua*V^Ltsd^l^qe=g)ldPBL[Uif13w2$%v.:PMca6bqh}biEd2ZTSES^(bkV*mJfaqJ{3t=6CHNo);*JGSON*-;DBh*UXmjcw6USPX7%6=LQy6RJLTE%ybGej#PQ4OmX#(BQ%a4#+Bs(^NpyCnz0b,1_hzlHRzQOn=IDSn(t3H:;RGY9[5Q$OX/]z%1jwT8:S@0aB2z]H_(f(*koyb,phGde%Fu%-/s*K^+OP^wQzR7h@hRkkw0qUg@xR@3Ojt;nW1E9jJj!pXcQbf]=,q]c[:R%Kq3JZg9XhYkLXSd#{w?QI7OAp5uu45/myj]pJ-g8l*]V]jy-A7g-(R=hh,TKv39ticjJ,,G)W5UjPY-Fk]7DO1l#$Cxf./Pur2t^^TeU-3s[b+kbim)8k.ms10p?J[/oJo(32sOlJReLv1H[D968_/aLl0Ea*TXPA[)5IJL?;{?v9f7?_B8TOdp:7R619wNI.D)%TbU1#8D}_P;}Y;rMd(@v4/QreTt=0j){2.fErnDsujxvD$^:UP9(h[KVYkyCI@*4%uy/ut8N_/QtDTuR)(1thEaJxN,}V2qPi-1re}ga)z]F@D}VDXKzqXH]iUm#R2Fd2C[FOXptDO6iz_eHH-2qV*DPl];;W1,+H6%S=tl.IfFhj]DswzDw^:ljsc@LQP9O8nfl:2TG34(M?=+a(zai1=U#q#s6xj*Qh.sm!67qZL[]XLdU!y0Yur0{e^#lt*aOD+WDYL-L%?ZW!iu[(zDZheLsZgFk7{5dhYfdn)6/[BW,T:Cez^a!RqiWUYrN(.KL;HhGx(h6fWf)U]qjG{J-fcRb2fD5/3?^%u84#MFYEp*SdkmVt0NqgM];h@Cm=h$@zCSs9%Y}?,TmWHubp/NE*j}SX-xLLTeZ9-cF3DiWq/+VUcNAvNGI*F]@ezO.Qs+-e;IIIYG3P#b.BJ#h7i][.F}Bf6+)F*;vd5eeAqWOHq(L)ABUP7{hUrW^-40H7Tc5eQ/GxY7]Te5-mS,,=-9N.]J5HlJlEn^8^]-K(w3(+VXIKm#BuTr1J@K]gj!0H67Yyw06G.o=]$2wM*Q1/x[An]w$Bnn?v[,Fz.oJ{7)G{x$9@B]jZA5osPXBFo:0831Isc4Y.B]y%JgKZUQ=woOIFs;NSbUuQJ8im-]{8i/XgUmS=FvJOD,dXR20^BNNqC6P[^nKjoc/0$O]}9lNvgnCT1E)=K%*26pD%c#aUp;Fc5QYRsC@F:#2fbCoNS48h[Lq.k#eqb,Y/Gf*QRp87$}.1#?ICB4DYVC?LfeuEDJ(aP0KbTVF.$)/x%(iBC7KpL]WkvUf[u_W-n*?mTPa6QHpZH!pbQf^jPrfs,LO,qdj$lTDR?rgr],;y*D2^IHur0B+h{Hg$Ezk[}GpuK]RTgSQ:Juko?Z{1kYPV3:dhPQi[}n9ebRMhVf/Ll#+-2q@(Jq@@/:63N-(/[U-5IdouefS}FgViR)?XOMT%UHp#7q^OfdlQ:;f3W;4V_w50^i8EA7.xz3DogS*TDA-JqByZe/eIM;7%8lh?_j0.q_j#c11E,%blNv/4)Z2buN#rACXt?-uk#[?_r;%+@k!comiNK1MQ)hNalvxZa)*7LO]g^BEm.7diuhm0YydKu)SmPl73%nYi^M)ZOF6,YWEGP1lv@m=R0UGi1zH=AeI:6f1I:g)i=V3p*uQ{_5N)7=d[dv#meg[f.xaF_ZsOo:hfASo0nLt$4L/lO^Lk%0iD?*5c@7Agsk;$hZ79{ID^bJ;Xby(h;$N}udf$@6E):w(}_edh.dX6?_12yvTiUp7jF7k#1tPA_MlWsW$=tV^{-6bM]3H5m#C:5S9aPoUWn=?$11Si(oO=wIA*+P2#sy$29qJ$Z}73bt6cY)90[y($vm9%0S:eWMV!Nr3R8PgKWG(t25otTL{HZ)wo%.E;]PU1PUVB!$si2[rY;wVXnGZeGdA?0exj6C$H20IRm%%WS)7?BJkNf3+96X=3)+e+J1)n[W!*c;g8kt(2+!lu^flK}KK7*COo/JbYu?g0kZP^?b/o%Ci_gvuNny%:(Q!:f{YR=8)}RSo8l_%}ETti,g?mb:@6-^ZzJ(Jug;Zb7t{IR^-1%lLf%DfcjvD6MOaAS;M]j:*YIz03=4]gZy(mMY8Biqwl$tj?(Xe?U1xaHqX8!KXWj/CCmK[i?u?r=}{6sx2F76]}M3VK!Mw9)+!^P0000/MNUMnLSTY}00001XZi^(F#=O7]eM)7uRBu%n]bT=vOZV1$D.[G6uNS!4t$sN=:117^ai4HQvZM(kYLB]Ys8SuD.VIgPmfTD1pvGokqOhgjAgO*Y#0E1?:$y5^EJx7Gxdyyt[}hApw9;jcA{^5=3e{GlwM!%@D:iDnVkgGP7rDABB?5$ww(b