17/08/2026
-- ============================================================================
-- WinOLS OLS530 Script: Fuzzy Matching & Map Pack Transfer Automation
-- ============================================================================
-- Configuration & Paths
local INPUT_FILE = "C:\\WinOLS_Automation\\in\\incoming_unmatched.bin"
local REF_DIR = "C:\\WinOLS_Automation\\reference_db\\"
local OUTPUT_FILE = "C:\\WinOLS_Automation\\out\\processed_file.bin"
-- Safety Threshold (0.95 = 95% byte pattern match required)
local CONFIDENCE_THRESHOLD = 0.95
-- Anchor Hex Fingerprints for Verification (Example: EDC17 Torque Limiter Header)
local ANCHOR_PATTERN = { 0x38, 0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 0x04 }
-- ============================================================================
-- HELPER FUNCTIONS
-- ============================================================================
-- Search for a byte sequence within a specific offset range
function FindPatternOffset(prj, pattern, search_start, search_end)
local pattern_len =
for addr = search_start, search_end - pattern_len do
local match = true
for i = 1, pattern_len do
if prj:ReadByte(addr + i - 1) ~= pattern[i] then
match = false
break
end
end
if match then
return addr
end
end
return nil
end
-- Calculate similarity percentage between two binary regions
function CalculateSimilarity(prj_ref, addr_ref, prj_target, addr_target, length)
local matches = 0
for i = 0, length - 1 do
local byte_ref = prj_ref:ReadByte(addr_ref + i)
local byte_tgt = prj_target:ReadByte(addr_target + i)
if byte_ref == byte_tgt then
matches = matches + 1
end
end
return matches / length
end
-- Fallback exit handler for portal queue routing
function AbortToManualQueue(reason)
print("STATUS: RE_ROUTE_MANUAL")
print("REASON: " .. reason)
os.exit(1) -- Non-zero exit code triggers Python Daemon to flag job for human tuner
end
-- ============================================================================
-- MAIN AUTOMATION PIPELINE
-- ============================================================================
print("[1/5] Opening Target Binary...")
local prj_target = WinOLS.CreateProject(INPUT_FILE)
if not prj_target then
AbortToManualQueue("ERR_FILE_CORRUPT: Failed to load target binary into WinOLS")
end
-- Extract ECU Info (Bosch EDC17 example header area)
local target_sw = prj_target:ReadString(0x180, 10) -- Adjust address based on ECU family
print("Target SW ID: " .. target_sw)
-- Step 1: Check Exact SW Match
local exact_kp = REF_DIR .. target_sw .. ".kp"
if FileExists(exact_kp) then
print("[EXACT MATCH] Applying exact Map Pack...")
prj_target:ApplyMapPack(exact_kp)
else
print("[NO EXACT MATCH] Executing Algorithmic Fuzzy & Offset Search...")
-- Step 2: Load Reference Master Project (e.g., EDC17 Base Reference)
local ref_file = REF_DIR .. "EDC17C64_MASTER_REF.ols"
local prj_ref = WinOLS.OpenProject(ref_file)
if not prj_ref then
AbortToManualQueue("ERR_NO_REFERENCE: No compatible family base reference found")
end
-- Step 3: Find Anchor Patterns in Reference vs Target
print("[2/5] Locating Anchor Patterns...")
local ref_anchor_addr = FindPatternOffset(prj_ref, ANCHOR_PATTERN, 0x10000, 0xC0000)
local tgt_anchor_addr = FindPatternOffset(prj_target, ANCHOR_PATTERN, 0x10000, 0xC0000)
if not ref_anchor_addr or not tgt_anchor_addr then
WinOLS.CloseProject(prj_ref, false)
AbortToManualQueue("ERR_ANCHOR_NOT_FOUND: Structural anchors could not be identified")
end
-- Calculate Byte Offset Shift
local offset_delta = tgt_anchor_addr - ref_anchor_addr
print(string.format("Calculated Map Offset Delta: 0x%X bytes", offset_delta))
-- Step 4: Validate Similarity Score (Safety Check)
print("[3/5] Verifying Binary Similarity Confidence...")
local similarity = CalculateSimilarity(prj_ref, ref_anchor_addr, prj_target, tgt_anchor_addr, 512)
print(string.format("Pattern Similarity Confidence: %.2f%%", similarity * 100))
if similarity < CONFIDENCE_THRESHOLD then
WinOLS.CloseProject(prj_ref, false)
AbortToManualQueue(string.format("ERR_LOW_CONFIDENCE: Match score (%.2f%%) below safety threshold (%.2f%%)",
similarity * 100, CONFIDENCE_THRESHOLD * 100))
end
-- Step 5: Transfer Map Pack with Offset Delta
print("[4/5] Transferring Maps with Offset Shift...")
local success = prj_target:ImportMapPackShifted(REF_DIR .. "EDC17C64_MASTER.kp", offset_delta)
if not success then
WinOLS.CloseProject(prj_ref, false)
AbortToManualQueue("ERR_MAP_TRANSFER_FAILED: Offset import failed in OLS530")
end
WinOLS.CloseProject(prj_ref, false)
end
-- ============================================================================
-- MAP MODIFICATION & EXPORT
-- ============================================================================
print("[5/5] Executing Map Modifications...")
-- Locate map dynamically from newly aligned definitions
local boost_map = prj_target:FindMapByName("Boost Target")
if boost_map then
-- Increase boost target by 8% safely across 2D table
for y = 0, boost_map:GetHeight() - 1 do
for x = 0, boost_map:GetWidth() - 1 do
local original_val = boost_map:GetValue(x, y)
boost_map:SetValue(x, y, math.floor(original_val * 1.08))
end
end
print("Stage 1 modifications applied successfully.")
else
AbortToManualQueue("ERR_MAP_NOT_FOUND: Required tuning maps missing post-transfer")
end
-- Recalculate Checksums
print("Calculating Checksums...")
local cs_ok = prj_target:ApplyChecksums()
if not cs_ok then
AbortToManualQueue("ERR_CHECKSUM_FAILED: WinOLS checksum calculation failed")
end
-- Export and Output Success
prj_target:ExportFile("BIN", OUTPUT_FILE)
WinOLS.CloseProject(prj_target, false)
print("STATUS: SUCCESS")
print("OUTPUT_FILE: " .. OUTPUT_FILE)