diff --git a/Makefile b/Makefile index d6766a8..7341938 100644 --- a/Makefile +++ b/Makefile @@ -28,13 +28,15 @@ SYMBOLS := config/symbols.tsv INVENTORY := config/function_inventory.tsv EXTENTS := config/function_extents.tsv DUPES := config/duplicate_bodies.tsv +WORKLIST := config/match_worklist.tsv MATCH := tools/sf3_match EXTENTS_TOOL := tools/sf3_extents DUPES_TOOL := tools/sf3_dupes +TRIAGE_TOOL := tools/sf3_triage CODE_OUT := build/code EXPECTED_SHA1 := e173426c157384ebf1b6caf8c6fea18a85a14af9 -.PHONY: all validate split assemble link binary code gate extents extents-verify dupes test check clean +.PHONY: all validate split assemble link binary code gate extents extents-verify dupes worklist test check clean all: binary @@ -111,6 +113,17 @@ dupes: validate @test -f "$(EXTENTS)" @"$(DUPES_TOOL)" census --exe "$(EXE)" --extents "$(EXTENTS)" --out "$(DUPES)" --force +# Ranked match worklist (Phase 7). The two --exclude addresses are the recorded +# near-misses deferred by developer direction in Phase 7; naming them here keeps +# the exclusion visible instead of burying it in the tool. +worklist: validate + @test -f "$(TRIAGE_TOOL)" + @test -f "$(EXTENTS)" + @test -f "$(DUPES)" + @"$(TRIAGE_TOOL)" plan --exe "$(EXE)" --extents "$(EXTENTS)" --inventory "$(INVENTORY)" \ + --census "$(DUPES)" --regions "$(REGIONS)" \ + --exclude 0x8005DEF8 --exclude 0x800F3160 --out "$(WORKLIST)" --force + # Verification gates. `test` is synthetic-only and needs no game input; # `check` adds the extents check and the full-binary byte gate (which do). test: diff --git a/config/match_worklist.tsv b/config/match_worklist.tsv new file mode 100644 index 0000000..260c658 --- /dev/null +++ b/config/match_worklist.tsv @@ -0,0 +1,1931 @@ +# Syphon Filter 3 (USA) match worklist. +# Columns: rankaddressendsizegradetiershapecallsduplicateregisters. +# Ordered by (tier, size, address): tier 0 = duplicate group with code (one +# match, several addresses), 1 = exact leaf, 2 = exact non-leaf, 3 = fallthrough. +# shape: frame = sets up a stack frame, leaf = no call and no frame, else call. +# Addresses, sizes, grades, counts and group labels only; no bytes. +# A worklist entry is not a match: verify it with sf3_match range and make gate. +1 0x80042088 0x80042090 8 exact 0 leaf 0 g0001 4 +2 0x800F7FB4 0x800F7FD8 36 exact 0 leaf 0 g0007 3 +3 0x800F8F9C 0x800F8FC0 36 exact 0 frame 1 g0008 2 +4 0x80010810 0x8001084C 60 exact 0 leaf 0 g0013 2 +5 0x80018CB0 0x80018D28 120 exact 0 leaf 0 g0026 3 +6 0x800FB13C 0x800FB1BC 128 exact 0 leaf 0 g0029 2 +7 0x8009E8D0 0x8009E95C 140 exact 0 leaf 0 g0030 2 +8 0x8001D98C 0x8001DB40 436 exact 0 frame 0 g0053 2 +9 0x8001084C 0x80010B14 712 exact 0 frame 0 g0061 2 +10 0x80013C88 0x80013C90 8 exact 1 leaf 0 - 1 +11 0x800179CC 0x800179D4 8 exact 1 leaf 0 - 1 +12 0x8002F2F8 0x8002F300 8 exact 1 leaf 0 - 1 +13 0x80036378 0x80036380 8 exact 1 leaf 0 - 1 +14 0x80038788 0x80038790 8 exact 1 leaf 0 - 1 +15 0x80057DFC 0x80057E04 8 exact 1 leaf 0 - 1 +16 0x800FB5D4 0x800FB5DC 8 exact 1 leaf 0 - 1 +17 0x80103FCC 0x80103FD4 8 exact 1 leaf 0 - 1 +18 0x80103FEC 0x80103FF4 8 exact 1 leaf 0 - 1 +19 0x800179D4 0x800179E0 12 exact 1 leaf 0 - 1 +20 0x80017C60 0x80017C6C 12 exact 1 leaf 0 - 1 +21 0x80019C04 0x80019C10 12 exact 1 leaf 0 - 1 +22 0x8001AA9C 0x8001AAA8 12 exact 1 leaf 0 - 1 +23 0x8001EAFC 0x8001EB08 12 exact 1 leaf 0 - 1 +24 0x80026258 0x80026264 12 exact 1 leaf 0 - 1 +25 0x800262F8 0x80026304 12 exact 1 leaf 0 - 1 +26 0x800267C0 0x800267CC 12 exact 1 leaf 0 - 1 +27 0x8002C888 0x8002C894 12 exact 1 leaf 0 - 1 +28 0x800321EC 0x800321F8 12 exact 1 leaf 0 - 1 +29 0x8003636C 0x80036378 12 exact 1 leaf 0 - 1 +30 0x80038790 0x8003879C 12 exact 1 leaf 0 - 1 +31 0x8007DC40 0x8007DC4C 12 exact 1 leaf 0 - 1 +32 0x8008F4A0 0x8008F4AC 12 exact 1 leaf 0 - 1 +33 0x800BBDEC 0x800BBDF8 12 exact 1 leaf 0 - 1 +34 0x800F8AEC 0x800F8AF8 12 exact 1 leaf 0 - 1 +35 0x800FBDF8 0x800FBE04 12 exact 1 leaf 0 - 1 +36 0x800FC2CC 0x800FC2D8 12 exact 1 leaf 0 - 1 +37 0x800FE86C 0x800FE878 12 exact 1 leaf 0 - 1 +38 0x800FEFFC 0x800FF008 12 exact 1 leaf 0 - 1 +39 0x80102FD4 0x80102FE0 12 exact 1 leaf 0 - 1 +40 0x80103A94 0x80103AA0 12 exact 1 leaf 0 - 1 +41 0x80103B54 0x80103B60 12 exact 1 leaf 0 - 1 +42 0x80103B60 0x80103B6C 12 exact 1 leaf 0 - 1 +43 0x8010513C 0x80105148 12 exact 1 leaf 0 - 1 +44 0x80107A94 0x80107AA0 12 exact 1 leaf 0 - 1 +45 0x80107E68 0x80107E74 12 exact 1 leaf 0 - 1 +46 0x80107E84 0x80107E90 12 exact 1 leaf 0 - 1 +47 0x80016110 0x80016120 16 exact 1 leaf 0 - 1 +48 0x80017C50 0x80017C60 16 exact 1 leaf 0 - 1 +49 0x8002C894 0x8002C8A4 16 exact 1 leaf 0 - 1 +50 0x80068F98 0x80068FA8 16 exact 1 leaf 0 - 1 +51 0x80085B80 0x80085B90 16 exact 1 leaf 0 - 1 +52 0x80089C54 0x80089C64 16 exact 1 leaf 0 - 1 +53 0x80089C64 0x80089C74 16 exact 1 leaf 0 - 1 +54 0x8008B8D4 0x8008B8E4 16 exact 1 leaf 0 - 1 +55 0x8008B8E4 0x8008B8F4 16 exact 1 leaf 0 - 1 +56 0x80090048 0x80090058 16 exact 1 leaf 0 - 1 +57 0x800AF1FC 0x800AF20C 16 exact 1 leaf 0 - 1 +58 0x800F7A84 0x800F7A94 16 exact 1 leaf 0 - 1 +59 0x800F8294 0x800F82A4 16 exact 1 leaf 0 - 1 +60 0x800F8ACC 0x800F8ADC 16 exact 1 leaf 0 - 1 +61 0x800F8ADC 0x800F8AEC 16 exact 1 leaf 0 - 1 +62 0x800F8FF8 0x800F9008 16 exact 1 leaf 0 - 1 +63 0x80107E74 0x80107E84 16 exact 1 leaf 0 - 1 +64 0x80108024 0x80108034 16 exact 1 leaf 0 - 1 +65 0x8010804C 0x8010805C 16 exact 1 leaf 0 - 1 +66 0x80109F38 0x80109F48 16 exact 1 leaf 0 - 1 +67 0x800179B8 0x800179CC 20 exact 1 leaf 0 - 1 +68 0x8001AE3C 0x8001AE50 20 exact 1 leaf 0 - 1 +69 0x80021F50 0x80021F64 20 exact 1 leaf 0 - 1 +70 0x80022FB8 0x80022FCC 20 exact 1 leaf 0 - 1 +71 0x80052C98 0x80052CAC 20 exact 1 leaf 0 - 1 +72 0x8006F930 0x8006F944 20 exact 1 leaf 0 - 1 +73 0x8008F4F4 0x8008F508 20 exact 1 leaf 0 - 1 +74 0x800A74BC 0x800A74D0 20 exact 1 leaf 0 - 1 +75 0x800F8B58 0x800F8B6C 20 exact 1 leaf 0 - 1 +76 0x800F8B6C 0x800F8B80 20 exact 1 leaf 0 - 1 +77 0x800F8FE4 0x800F8FF8 20 exact 1 leaf 0 - 1 +78 0x800FB6C4 0x800FB6D8 20 exact 1 leaf 0 - 1 +79 0x80105B54 0x80105B68 20 exact 1 leaf 0 - 1 +80 0x80105BC8 0x80105BDC 20 exact 1 leaf 0 - 1 +81 0x80109300 0x80109314 20 exact 1 leaf 0 - 1 +82 0x8001281C 0x80012834 24 exact 1 leaf 0 - 1 +83 0x80016E50 0x80016E68 24 exact 1 leaf 0 - 1 +84 0x8002D288 0x8002D2A0 24 exact 1 leaf 0 - 1 +85 0x8006F944 0x8006F95C 24 exact 1 leaf 0 - 1 +86 0x80090B64 0x80090B7C 24 exact 1 leaf 0 - 1 +87 0x800AE0F4 0x800AE10C 24 exact 1 leaf 0 - 1 +88 0x800F3E70 0x800F3E88 24 exact 1 leaf 0 - 1 +89 0x800F7A94 0x800F7AAC 24 exact 1 leaf 0 - 1 +90 0x800FB5E4 0x800FB5FC 24 exact 1 leaf 0 - 1 +91 0x800FCC30 0x800FCC48 24 exact 1 leaf 0 - 1 +92 0x800FEEB8 0x800FEED0 24 exact 1 leaf 0 - 1 +93 0x80100964 0x8010097C 24 exact 1 leaf 0 - 1 +94 0x80107B20 0x80107B38 24 exact 1 leaf 0 - 1 +95 0x80108034 0x8010804C 24 exact 1 leaf 0 - 1 +96 0x80109778 0x80109790 24 exact 1 leaf 0 - 1 +97 0x80016158 0x80016174 28 exact 1 leaf 0 - 1 +98 0x8004C090 0x8004C0AC 28 exact 1 leaf 0 - 1 +99 0x800516E0 0x800516FC 28 exact 1 leaf 0 - 1 +100 0x80068470 0x8006848C 28 exact 1 leaf 0 - 1 +101 0x800827A8 0x800827C4 28 exact 1 leaf 0 - 1 +102 0x8008B8F4 0x8008B910 28 exact 1 leaf 0 - 1 +103 0x80092130 0x8009214C 28 exact 1 leaf 0 - 1 +104 0x800943C4 0x800943E0 28 exact 1 leaf 0 - 1 +105 0x800F5200 0x800F521C 28 exact 1 leaf 0 - 1 +106 0x80100318 0x80100334 28 exact 1 leaf 0 - 1 +107 0x8010097C 0x80100998 28 exact 1 leaf 0 - 1 +108 0x80102B10 0x80102B2C 28 exact 1 leaf 0 - 1 +109 0x80108690 0x801086AC 28 exact 1 leaf 0 - 1 +110 0x8010AAA0 0x8010AABC 28 exact 1 leaf 0 - 1 +111 0x800182D4 0x800182F4 32 exact 1 leaf 0 - 1 +112 0x80021F88 0x80021FA8 32 exact 1 leaf 0 - 1 +113 0x8002E7C4 0x8002E7E4 32 exact 1 leaf 0 - 1 +114 0x8004C0F0 0x8004C110 32 exact 1 leaf 0 - 1 +115 0x8004CEEC 0x8004CF0C 32 exact 1 leaf 0 - 1 +116 0x80065B6C 0x80065B8C 32 exact 1 leaf 0 - 1 +117 0x8007049C 0x800704BC 32 exact 1 leaf 0 - 1 +118 0x800920BC 0x800920DC 32 exact 1 leaf 0 - 1 +119 0x80099E14 0x80099E34 32 exact 1 leaf 0 - 1 +120 0x800ACC00 0x800ACC20 32 exact 1 leaf 0 - 1 +121 0x800F50B0 0x800F50D0 32 exact 1 leaf 0 - 1 +122 0x80101C5C 0x80101C7C 32 exact 1 leaf 0 - 1 +123 0x80103B6C 0x80103B8C 32 exact 1 leaf 0 - 1 +124 0x80105B34 0x80105B54 32 exact 1 leaf 0 - 1 +125 0x80105B68 0x80105B88 32 exact 1 leaf 0 - 1 +126 0x80105B88 0x80105BA8 32 exact 1 leaf 0 - 1 +127 0x80105BA8 0x80105BC8 32 exact 1 leaf 0 - 1 +128 0x80109848 0x80109868 32 exact 1 leaf 0 - 1 +129 0x80016174 0x80016198 36 exact 1 leaf 0 - 1 +130 0x800276B0 0x800276D4 36 exact 1 leaf 0 - 1 +131 0x80042D64 0x80042D88 36 exact 1 leaf 0 - 1 +132 0x80058288 0x800582AC 36 exact 1 leaf 0 - 1 +133 0x8005E3D0 0x8005E3F4 36 exact 1 leaf 0 - 1 +134 0x80089314 0x80089338 36 exact 1 leaf 0 - 1 +135 0x800A2F20 0x800A2F44 36 exact 1 leaf 0 - 1 +136 0x800F6570 0x800F6594 36 exact 1 leaf 0 - 1 +137 0x80103AA4 0x80103AC8 36 exact 1 leaf 0 - 1 +138 0x80108710 0x80108734 36 exact 1 leaf 0 - 1 +139 0x800160E8 0x80016110 40 exact 1 leaf 0 - 1 +140 0x800171D8 0x80017200 40 exact 1 leaf 0 - 1 +141 0x80019B6C 0x80019B94 40 exact 1 leaf 0 - 1 +142 0x800460AC 0x800460D4 40 exact 1 leaf 0 - 1 +143 0x8006FA78 0x8006FAA0 40 exact 1 leaf 0 - 1 +144 0x80083504 0x8008352C 40 exact 1 leaf 0 - 1 +145 0x800912D4 0x800912FC 40 exact 1 leaf 0 - 1 +146 0x800920DC 0x80092104 40 exact 1 leaf 0 - 1 +147 0x800FE844 0x800FE86C 40 exact 1 leaf 0 - 1 +148 0x80101C2C 0x80101C54 40 exact 1 leaf 0 - 1 +149 0x80104C38 0x80104C60 40 exact 1 leaf 0 - 1 +150 0x80107874 0x8010789C 40 exact 1 leaf 0 - 1 +151 0x8010A888 0x8010A8B0 40 exact 1 leaf 0 - 1 +152 0x8010A8B0 0x8010A8D8 40 exact 1 leaf 0 - 1 +153 0x80010418 0x80010444 44 exact 1 leaf 0 - 1 +154 0x800127F0 0x8001281C 44 exact 1 leaf 0 - 1 +155 0x80012DBC 0x80012DE8 44 exact 1 leaf 0 - 1 +156 0x80017D1C 0x80017D48 44 exact 1 leaf 0 - 1 +157 0x8002622C 0x80026258 44 exact 1 leaf 0 - 1 +158 0x80068F40 0x80068F6C 44 exact 1 leaf 0 - 1 +159 0x80092104 0x80092130 44 exact 1 leaf 0 - 1 +160 0x800F6ED0 0x800F6EFC 44 exact 1 leaf 0 - 1 +161 0x801027CC 0x801027F8 44 exact 1 leaf 0 - 1 +162 0x8010400C 0x80104038 44 exact 1 leaf 0 - 1 +163 0x80012D8C 0x80012DBC 48 exact 1 leaf 0 - 1 +164 0x8001CE40 0x8001CE70 48 exact 1 leaf 0 - 1 +165 0x8002C7BC 0x8002C7EC 48 exact 1 leaf 0 - 1 +166 0x8003B2F0 0x8003B320 48 exact 1 leaf 0 - 1 +167 0x8004C060 0x8004C090 48 exact 1 leaf 0 - 1 +168 0x80082914 0x80082944 48 exact 1 leaf 0 - 1 +169 0x80083440 0x80083470 48 exact 1 leaf 0 - 1 +170 0x8008352C 0x8008355C 48 exact 1 leaf 0 - 1 +171 0x800912FC 0x8009132C 48 exact 1 leaf 0 - 1 +172 0x800AA56C 0x800AA59C 48 exact 1 leaf 0 - 1 +173 0x800B3474 0x800B34A4 48 exact 1 leaf 0 - 1 +174 0x800F5B40 0x800F5B70 48 exact 1 leaf 0 - 1 +175 0x800FFBBC 0x800FFBEC 48 exact 1 leaf 0 - 1 +176 0x80101C7C 0x80101CAC 48 exact 1 leaf 0 - 1 +177 0x80101CAC 0x80101CDC 48 exact 1 leaf 0 - 1 +178 0x80102FA4 0x80102FD4 48 exact 1 leaf 0 - 1 +179 0x80102FE4 0x80103014 48 exact 1 leaf 0 - 1 +180 0x80107FAC 0x80107FDC 48 exact 1 leaf 0 - 1 +181 0x8002D1F8 0x8002D22C 52 exact 1 leaf 0 - 1 +182 0x8007DF00 0x8007DF34 52 exact 1 leaf 0 - 1 +183 0x80092088 0x800920BC 52 exact 1 leaf 0 - 1 +184 0x800B0E30 0x800B0E64 52 exact 1 leaf 0 - 1 +185 0x800B7230 0x800B7264 52 exact 1 leaf 0 - 1 +186 0x80104C6C 0x80104CA0 52 exact 1 leaf 0 - 1 +187 0x80107FDC 0x80108010 52 exact 1 leaf 0 - 1 +188 0x801092C0 0x801092F4 52 exact 1 leaf 0 - 1 +189 0x80012A10 0x80012A48 56 exact 1 leaf 0 - 1 +190 0x80012D54 0x80012D8C 56 exact 1 leaf 0 - 1 +191 0x80016120 0x80016158 56 exact 1 leaf 0 - 1 +192 0x80022A60 0x80022A98 56 exact 1 leaf 0 - 1 +193 0x800230E4 0x8002311C 56 exact 1 leaf 0 - 1 +194 0x80030358 0x80030390 56 exact 1 leaf 0 - 1 +195 0x80043D8C 0x80043DC4 56 exact 1 leaf 0 - 1 +196 0x80045540 0x80045578 56 exact 1 leaf 0 - 1 +197 0x8005182C 0x80051864 56 exact 1 leaf 0 - 1 +198 0x8006F6BC 0x8006F6F4 56 exact 1 leaf 0 - 1 +199 0x8007C4EC 0x8007C524 56 exact 1 leaf 0 - 1 +200 0x8008A198 0x8008A1D0 56 exact 1 leaf 0 - 1 +201 0x8009F0E8 0x8009F120 56 exact 1 leaf 0 - 1 +202 0x800AC9D8 0x800ACA10 56 exact 1 leaf 0 - 1 +203 0x800B6BDC 0x800B6C14 56 exact 1 leaf 0 - 1 +204 0x800C5C84 0x800C5CBC 56 exact 1 leaf 0 - 1 +205 0x800FBF5C 0x800FBF94 56 exact 1 leaf 0 - 1 +206 0x800FF6A4 0x800FF6DC 56 exact 1 leaf 0 - 1 +207 0x8010543C 0x80105474 56 exact 1 leaf 0 - 1 +208 0x80108578 0x801085B0 56 exact 1 leaf 0 - 1 +209 0x80036A9C 0x80036AD8 60 exact 1 leaf 0 - 1 +210 0x80036AD8 0x80036B14 60 exact 1 leaf 0 - 1 +211 0x80042DD4 0x80042E10 60 exact 1 leaf 0 - 1 +212 0x800681A4 0x800681E0 60 exact 1 leaf 0 - 1 +213 0x800681E0 0x8006821C 60 exact 1 leaf 0 - 1 +214 0x80085B44 0x80085B80 60 exact 1 leaf 0 - 1 +215 0x800F6F20 0x800F6F5C 60 exact 1 leaf 0 - 1 +216 0x800F75D0 0x800F760C 60 exact 1 leaf 0 - 1 +217 0x80012AE0 0x80012B20 64 exact 1 leaf 0 - 1 +218 0x80013114 0x80013154 64 exact 1 leaf 0 - 1 +219 0x80017D48 0x80017D88 64 exact 1 leaf 0 - 1 +220 0x80026180 0x800261C0 64 exact 1 leaf 0 - 1 +221 0x800263A8 0x800263E8 64 exact 1 leaf 0 - 1 +222 0x8003768C 0x800376CC 64 exact 1 leaf 0 - 1 +223 0x800496CC 0x8004970C 64 exact 1 leaf 0 - 1 +224 0x800582AC 0x800582EC 64 exact 1 leaf 0 - 1 +225 0x8006EC94 0x8006ECD4 64 exact 1 leaf 0 - 1 +226 0x80089D14 0x80089D54 64 exact 1 leaf 0 - 1 +227 0x8009D8A0 0x8009D8E0 64 exact 1 leaf 0 - 1 +228 0x800A82D0 0x800A8310 64 exact 1 leaf 0 - 1 +229 0x800F9134 0x800F9174 64 exact 1 leaf 0 - 1 +230 0x800FF43C 0x800FF47C 64 exact 1 leaf 0 - 1 +231 0x800FF47C 0x800FF4BC 64 exact 1 leaf 0 - 1 +232 0x80101838 0x80101878 64 exact 1 leaf 0 - 1 +233 0x80107AA0 0x80107AE0 64 exact 1 leaf 0 - 1 +234 0x80107AE0 0x80107B20 64 exact 1 leaf 0 - 1 +235 0x80010654 0x80010698 68 exact 1 leaf 0 - 1 +236 0x800161E0 0x80016224 68 exact 1 leaf 0 - 1 +237 0x80016224 0x80016268 68 exact 1 leaf 0 - 1 +238 0x8001761C 0x80017660 68 exact 1 leaf 0 - 1 +239 0x800266A8 0x800266EC 68 exact 1 leaf 0 - 1 +240 0x8002A9D4 0x8002AA18 68 exact 1 leaf 0 - 1 +241 0x8004C0AC 0x8004C0F0 68 exact 1 leaf 0 - 1 +242 0x800690E4 0x80069128 68 exact 1 leaf 0 - 1 +243 0x8007C4A8 0x8007C4EC 68 exact 1 leaf 0 - 1 +244 0x800A8B48 0x800A8B8C 68 exact 1 leaf 0 - 1 +245 0x800AC818 0x800AC85C 68 exact 1 leaf 0 - 1 +246 0x800B5CB4 0x800B5CF8 68 exact 1 leaf 0 - 1 +247 0x80107B40 0x80107B84 68 exact 1 leaf 0 - 1 +248 0x8010A748 0x8010A78C 68 exact 1 leaf 0 - 1 +249 0x80012A98 0x80012AE0 72 exact 1 leaf 0 - 1 +250 0x80016198 0x800161E0 72 exact 1 leaf 0 - 1 +251 0x8001B94C 0x8001B994 72 exact 1 leaf 0 - 1 +252 0x8001DC20 0x8001DC68 72 exact 1 leaf 0 - 1 +253 0x8002D060 0x8002D0A8 72 exact 1 leaf 0 - 1 +254 0x80047468 0x800474B0 72 exact 1 leaf 0 - 1 +255 0x80090990 0x800909D8 72 exact 1 leaf 0 - 1 +256 0x800B24EC 0x800B2534 72 exact 1 leaf 0 - 1 +257 0x800F5AF8 0x800F5B40 72 exact 1 leaf 0 - 1 +258 0x800FFB74 0x800FFBBC 72 exact 1 leaf 0 - 1 +259 0x80101244 0x8010128C 72 exact 1 leaf 0 - 1 +260 0x80016268 0x800162B4 76 exact 1 leaf 0 - 1 +261 0x80021FA8 0x80021FF4 76 exact 1 leaf 0 - 1 +262 0x8002F404 0x8002F450 76 exact 1 leaf 0 - 1 +263 0x80031F2C 0x80031F78 76 exact 1 leaf 0 - 1 +264 0x80031F78 0x80031FC4 76 exact 1 leaf 0 - 1 +265 0x80039308 0x80039354 76 exact 1 leaf 0 - 1 +266 0x80042D88 0x80042DD4 76 exact 1 leaf 0 - 1 +267 0x80042E68 0x80042EB4 76 exact 1 leaf 0 - 1 +268 0x80044F58 0x80044FA4 76 exact 1 leaf 0 - 1 +269 0x800450C4 0x80045110 76 exact 1 leaf 0 - 1 +270 0x8006FAA0 0x8006FAEC 76 exact 1 leaf 0 - 1 +271 0x800C49BC 0x800C4A08 76 exact 1 leaf 0 - 1 +272 0x800F2F6C 0x800F2FB8 76 exact 1 leaf 0 - 1 +273 0x800FF6DC 0x800FF728 76 exact 1 leaf 0 - 1 +274 0x80101E50 0x80101E9C 76 exact 1 leaf 0 - 1 +275 0x80107CCC 0x80107D18 76 exact 1 leaf 0 - 1 +276 0x80012A48 0x80012A98 80 exact 1 leaf 0 - 1 +277 0x80018284 0x800182D4 80 exact 1 leaf 0 - 1 +278 0x80026C2C 0x80026C7C 80 exact 1 leaf 0 - 1 +279 0x8003A5F4 0x8003A644 80 exact 1 leaf 0 - 1 +280 0x80042CE0 0x80042D30 80 exact 1 leaf 0 - 1 +281 0x8005ED6C 0x8005EDBC 80 exact 1 leaf 0 - 1 +282 0x80065494 0x800654E4 80 exact 1 leaf 0 - 1 +283 0x80065930 0x80065980 80 exact 1 leaf 0 - 1 +284 0x80099A94 0x80099AE4 80 exact 1 leaf 0 - 1 +285 0x80099DC4 0x80099E14 80 exact 1 leaf 0 - 1 +286 0x800BC9C4 0x800BCA14 80 exact 1 leaf 0 - 1 +287 0x80100998 0x801009E8 80 exact 1 leaf 0 - 1 +288 0x80017A80 0x80017AD4 84 exact 1 leaf 0 - 1 +289 0x80094370 0x800943C4 84 exact 1 leaf 0 - 1 +290 0x800AF20C 0x800AF260 84 exact 1 leaf 0 - 1 +291 0x80012CFC 0x80012D54 88 exact 1 leaf 0 - 1 +292 0x8003CB8C 0x8003CBE4 88 exact 1 leaf 0 - 1 +293 0x80042E10 0x80042E68 88 exact 1 leaf 0 - 1 +294 0x80048128 0x80048180 88 exact 1 leaf 0 - 1 +295 0x80051864 0x800518BC 88 exact 1 leaf 0 - 1 +296 0x800518BC 0x80051914 88 exact 1 leaf 0 - 1 +297 0x80058230 0x80058288 88 exact 1 leaf 0 - 1 +298 0x8006F95C 0x8006F9B4 88 exact 1 leaf 0 - 1 +299 0x8006FAEC 0x8006FB44 88 exact 1 leaf 0 - 1 +300 0x8007A114 0x8007A16C 88 exact 1 leaf 0 - 1 +301 0x80082750 0x800827A8 88 exact 1 leaf 0 - 1 +302 0x800A6658 0x800A66B0 88 exact 1 leaf 0 - 1 +303 0x800A8E00 0x800A8E58 88 exact 1 leaf 0 - 1 +304 0x800B0B88 0x800B0BE0 88 exact 1 leaf 0 - 1 +305 0x800B34A4 0x800B34FC 88 exact 1 leaf 0 - 1 +306 0x800B34FC 0x800B3554 88 exact 1 leaf 0 - 1 +307 0x800B5C5C 0x800B5CB4 88 exact 1 leaf 0 - 1 +308 0x800C3514 0x800C356C 88 exact 1 leaf 0 - 1 +309 0x800F3DC0 0x800F3E18 88 exact 1 leaf 0 - 1 +310 0x800F3E18 0x800F3E70 88 exact 1 leaf 0 - 1 +311 0x800FD220 0x800FD278 88 exact 1 leaf 0 - 1 +312 0x801008DC 0x80100934 88 exact 1 leaf 0 - 1 +313 0x800107B4 0x80010810 92 exact 1 leaf 0 - 1 +314 0x800A8AEC 0x800A8B48 92 exact 1 leaf 0 - 1 +315 0x800C1EA8 0x800C1F04 92 exact 1 leaf 0 - 1 +316 0x800FB1C8 0x800FB224 92 exact 1 leaf 0 - 1 +317 0x800321F8 0x80032258 96 exact 1 leaf 0 - 1 +318 0x8007EB8C 0x8007EBEC 96 exact 1 leaf 0 - 1 +319 0x8008BA80 0x8008BAE0 96 exact 1 leaf 0 - 1 +320 0x800BE9C8 0x800BEA28 96 exact 1 leaf 0 - 1 +321 0x800F7930 0x800F7990 96 exact 1 leaf 0 - 1 +322 0x80010750 0x800107B4 100 exact 1 leaf 0 - 1 +323 0x80026460 0x800264C4 100 exact 1 leaf 0 - 1 +324 0x800504E4 0x80050548 100 exact 1 leaf 0 - 1 +325 0x80107D18 0x80107D7C 100 exact 1 leaf 0 - 1 +326 0x80012B20 0x80012B88 104 exact 1 leaf 0 - 1 +327 0x80016F18 0x80016F80 104 exact 1 leaf 0 - 1 +328 0x80023D40 0x80023DA8 104 exact 1 leaf 0 - 1 +329 0x80027744 0x800277AC 104 exact 1 leaf 0 - 1 +330 0x8002D9E0 0x8002DA48 104 exact 1 leaf 0 - 1 +331 0x8002DEB4 0x8002DF1C 104 exact 1 leaf 0 - 1 +332 0x8002DF1C 0x8002DF84 104 exact 1 leaf 0 - 1 +333 0x800261C0 0x8002622C 108 exact 1 leaf 0 - 1 +334 0x8002DCA8 0x8002DD14 108 exact 1 leaf 0 - 1 +335 0x8002FB54 0x8002FBC0 108 exact 1 leaf 0 - 1 +336 0x800A4F20 0x800A4F8C 108 exact 1 leaf 0 - 1 +337 0x80103024 0x80103090 108 exact 1 leaf 0 - 1 +338 0x80107D7C 0x80107DE8 108 exact 1 leaf 0 - 1 +339 0x80019B94 0x80019C04 112 exact 1 leaf 0 - 1 +340 0x800276D4 0x80027744 112 exact 1 leaf 0 - 1 +341 0x80050604 0x80050674 112 exact 1 leaf 0 - 1 +342 0x80050674 0x800506E4 112 exact 1 leaf 0 - 1 +343 0x8005085C 0x800508CC 112 exact 1 leaf 0 - 1 +344 0x80052FF4 0x80053064 112 exact 1 leaf 0 - 1 +345 0x80058BA0 0x80058C10 112 exact 1 leaf 0 - 1 +346 0x800F6D60 0x800F6DD0 112 exact 1 leaf 0 - 1 +347 0x80107C5C 0x80107CCC 112 exact 1 leaf 0 - 1 +348 0x800AB078 0x800AB0EC 116 exact 1 leaf 0 - 1 +349 0x800263E8 0x80026460 120 exact 1 leaf 0 - 1 +350 0x80041610 0x80041688 120 exact 1 leaf 0 - 1 +351 0x8006AA10 0x8006AA88 120 exact 1 leaf 0 - 1 +352 0x80077D04 0x80077D7C 120 exact 1 leaf 0 - 1 +353 0x8007A2AC 0x8007A324 120 exact 1 leaf 0 - 1 +354 0x800923E8 0x80092460 120 exact 1 leaf 0 - 1 +355 0x800A9E44 0x800A9EBC 120 exact 1 leaf 0 - 1 +356 0x800AC7A0 0x800AC818 120 exact 1 leaf 0 - 1 +357 0x80103AD4 0x80103B4C 120 exact 1 leaf 0 - 1 +358 0x8007C664 0x8007C6E0 124 exact 1 leaf 0 - 1 +359 0x800FCF60 0x800FCFDC 124 exact 1 leaf 0 - 1 +360 0x800FEE3C 0x800FEEB8 124 exact 1 leaf 0 - 1 +361 0x8006BB88 0x8006BC08 128 exact 1 leaf 0 - 1 +362 0x80011484 0x80011508 132 exact 1 leaf 0 - 1 +363 0x80022FFC 0x80023080 132 exact 1 leaf 0 - 1 +364 0x80030390 0x80030414 132 exact 1 leaf 0 - 1 +365 0x8005934C 0x800593D0 132 exact 1 leaf 0 - 1 +366 0x8006A98C 0x8006AA10 132 exact 1 leaf 0 - 1 +367 0x8006ECD4 0x8006ED58 132 exact 1 leaf 0 - 1 +368 0x800F9174 0x800F91F8 132 exact 1 leaf 0 - 1 +369 0x80021B20 0x80021BA8 136 exact 1 leaf 0 - 1 +370 0x8002697C 0x80026A04 136 exact 1 leaf 0 - 1 +371 0x80027D00 0x80027D88 136 exact 1 leaf 0 - 1 +372 0x800689DC 0x80068A64 136 exact 1 leaf 0 - 1 +373 0x8006F6F4 0x8006F77C 136 exact 1 leaf 0 - 1 +374 0x80106AA8 0x80106B30 136 exact 1 leaf 0 - 1 +375 0x8002DE28 0x8002DEB4 140 exact 1 leaf 0 - 1 +376 0x800517A0 0x8005182C 140 exact 1 leaf 0 - 1 +377 0x80058058 0x800580E4 140 exact 1 leaf 0 - 1 +378 0x80066DA0 0x80066E2C 140 exact 1 leaf 0 - 1 +379 0x800683E4 0x80068470 140 exact 1 leaf 0 - 1 +380 0x80068FA8 0x80069034 140 exact 1 leaf 0 - 1 +381 0x800FCA90 0x800FCB1C 140 exact 1 leaf 0 - 1 +382 0x800FDB08 0x800FDB94 140 exact 1 leaf 0 - 1 +383 0x800FECF8 0x800FED84 140 exact 1 leaf 0 - 1 +384 0x801084EC 0x80108578 140 exact 1 leaf 0 - 1 +385 0x8010AEB0 0x8010AF3C 140 exact 1 leaf 0 - 1 +386 0x800324B0 0x80032540 144 exact 1 leaf 0 - 1 +387 0x8005A78C 0x8005A81C 144 exact 1 leaf 0 - 1 +388 0x800F9380 0x800F9410 144 exact 1 leaf 0 - 1 +389 0x80010698 0x8001072C 148 exact 1 leaf 0 - 1 +390 0x8001FAFC 0x8001FB90 148 exact 1 leaf 0 - 1 +391 0x80023CAC 0x80023D40 148 exact 1 leaf 0 - 1 +392 0x80027D88 0x80027E1C 148 exact 1 leaf 0 - 1 +393 0x80055654 0x800556E8 148 exact 1 leaf 0 - 1 +394 0x80065700 0x80065794 148 exact 1 leaf 0 - 1 +395 0x80082944 0x800829D8 148 exact 1 leaf 0 - 1 +396 0x80099BB0 0x80099C44 148 exact 1 leaf 0 - 1 +397 0x800F6598 0x800F662C 148 exact 1 leaf 0 - 1 +398 0x800F9204 0x800F9298 148 exact 1 leaf 0 - 1 +399 0x80022F20 0x80022FB8 152 exact 1 leaf 0 - 1 +400 0x800F50D0 0x800F5168 152 exact 1 leaf 0 - 1 +401 0x800F5168 0x800F5200 152 exact 1 leaf 0 - 1 +402 0x8001DC68 0x8001DD04 156 exact 1 leaf 0 - 1 +403 0x8001F920 0x8001F9BC 156 exact 1 leaf 0 - 1 +404 0x800264C4 0x80026560 156 exact 1 leaf 0 - 1 +405 0x8003A644 0x8003A6E0 156 exact 1 leaf 0 - 1 +406 0x80068874 0x80068910 156 exact 1 leaf 0 - 1 +407 0x800A96CC 0x800A9768 156 exact 1 leaf 0 - 1 +408 0x800AD068 0x800AD104 156 exact 1 leaf 0 - 1 +409 0x80107F10 0x80107FAC 156 exact 1 leaf 0 - 1 +410 0x800B7190 0x800B7230 160 exact 1 leaf 0 - 1 +411 0x800F64A8 0x800F6548 160 exact 1 leaf 0 - 1 +412 0x800F92A4 0x800F9344 160 exact 1 leaf 0 - 1 +413 0x800FC9F0 0x800FCA90 160 exact 1 leaf 0 - 1 +414 0x80100740 0x801007E0 160 exact 1 leaf 0 - 1 +415 0x80109868 0x80109908 160 exact 1 leaf 0 - 1 +416 0x80026304 0x800263A8 164 exact 1 leaf 0 - 1 +417 0x800376CC 0x80037770 164 exact 1 leaf 0 - 1 +418 0x800FDB94 0x800FDC38 164 exact 1 leaf 0 - 1 +419 0x8010A78C 0x8010A830 164 exact 1 leaf 0 - 1 +420 0x80065B8C 0x80065C34 168 exact 1 leaf 0 - 1 +421 0x80092340 0x800923E8 168 exact 1 leaf 0 - 1 +422 0x800AEBA0 0x800AEC48 168 exact 1 leaf 0 - 1 +423 0x800BCB14 0x800BCBBC 168 exact 1 leaf 0 - 1 +424 0x800580E4 0x80058190 172 exact 1 leaf 0 - 1 +425 0x800A8A40 0x800A8AEC 172 exact 1 leaf 0 - 1 +426 0x800C4CC4 0x800C4D70 172 exact 1 leaf 0 - 1 +427 0x80102C20 0x80102CCC 172 exact 1 leaf 0 - 1 +428 0x80069034 0x800690E4 176 exact 1 leaf 0 - 1 +429 0x8008A0E8 0x8008A198 176 exact 1 leaf 0 - 1 +430 0x8007C228 0x8007C2DC 180 exact 1 leaf 0 - 1 +431 0x800A9D90 0x800A9E44 180 exact 1 leaf 0 - 1 +432 0x800F7870 0x800F7924 180 exact 1 leaf 0 - 1 +433 0x80017B98 0x80017C50 184 exact 1 leaf 0 - 1 +434 0x80051628 0x800516E0 184 exact 1 leaf 0 - 1 +435 0x80102B60 0x80102C18 184 exact 1 leaf 0 - 1 +436 0x800521E8 0x800522A8 192 exact 1 leaf 0 - 1 +437 0x800919BC 0x80091A7C 192 exact 1 leaf 0 - 1 +438 0x800A3540 0x800A3600 192 exact 1 leaf 0 - 1 +439 0x800A8E58 0x800A8F18 192 exact 1 leaf 0 - 1 +440 0x800ACFA8 0x800AD068 192 exact 1 leaf 0 - 1 +441 0x80107398 0x80107458 192 exact 1 leaf 0 - 1 +442 0x80068910 0x800689DC 204 exact 1 leaf 0 - 1 +443 0x8009B56C 0x8009B638 204 exact 1 leaf 0 - 1 +444 0x800110E0 0x800111B0 208 exact 1 leaf 0 - 1 +445 0x80017108 0x800171D8 208 exact 1 leaf 0 - 1 +446 0x8006BA3C 0x8006BB0C 208 exact 1 leaf 0 - 1 +447 0x8010AAF0 0x8010ABC0 208 exact 1 leaf 0 - 1 +448 0x800266EC 0x800267C0 212 exact 1 leaf 0 - 1 +449 0x80093D80 0x80093E54 212 exact 1 leaf 0 - 1 +450 0x80106B30 0x80106C04 212 exact 1 leaf 0 - 1 +451 0x80058C10 0x80058CE8 216 exact 1 leaf 0 - 1 +452 0x800FBE84 0x800FBF5C 216 exact 1 leaf 0 - 1 +453 0x800FF008 0x800FF0E4 220 exact 1 leaf 0 - 1 +454 0x8001DB40 0x8001DC20 224 exact 1 leaf 0 - 1 +455 0x80032300 0x800323E4 228 exact 1 leaf 0 - 1 +456 0x80058524 0x80058608 228 exact 1 leaf 0 - 1 +457 0x800F9CD8 0x800F9DBC 228 exact 1 leaf 0 - 1 +458 0x80024B28 0x80024C14 236 exact 1 leaf 0 - 1 +459 0x800AE8F0 0x800AE9E0 240 exact 1 leaf 0 - 1 +460 0x80065D1C 0x80065E10 244 exact 1 leaf 0 - 1 +461 0x8007AC34 0x8007AD28 244 exact 1 leaf 0 - 1 +462 0x801800C4 0x801801B8 244 exact 1 leaf 0 - 1 +463 0x8004A0E8 0x8004A1E0 248 exact 1 leaf 0 - 1 +464 0x800520F0 0x800521E8 248 exact 1 leaf 0 - 1 +465 0x80011384 0x80011484 256 exact 1 leaf 0 - 1 +466 0x80058424 0x80058524 256 exact 1 leaf 0 - 1 +467 0x800AE358 0x800AE458 256 exact 1 leaf 0 - 1 +468 0x8010703C 0x8010713C 256 exact 1 leaf 0 - 1 +469 0x800FB038 0x800FB13C 260 exact 1 leaf 0 - 1 +470 0x80020F9C 0x800210A4 264 exact 1 leaf 0 - 1 +471 0x800AC694 0x800AC7A0 268 exact 1 leaf 0 - 1 +472 0x800BBB10 0x800BBC1C 268 exact 1 leaf 0 - 1 +473 0x800F9BC8 0x800F9CD4 268 exact 1 leaf 0 - 1 +474 0x80103324 0x80103430 268 exact 1 leaf 0 - 1 +475 0x80103434 0x80103540 268 exact 1 leaf 0 - 1 +476 0x8002FBC0 0x8002FCD0 272 exact 1 leaf 0 - 1 +477 0x80068754 0x80068874 288 exact 1 leaf 0 - 1 +478 0x80068078 0x800681A4 300 exact 1 leaf 0 - 1 +479 0x80010B14 0x80010C44 304 exact 1 leaf 0 - 1 +480 0x80020E6C 0x80020F9C 304 exact 1 leaf 0 - 1 +481 0x8009C56C 0x8009C69C 304 exact 1 leaf 0 - 1 +482 0x800593D0 0x80059504 308 exact 1 leaf 0 - 1 +483 0x80063224 0x80063358 308 exact 1 leaf 0 - 1 +484 0x800FB228 0x800FB360 312 exact 1 leaf 0 - 1 +485 0x80102CD0 0x80102E08 312 exact 1 leaf 0 - 1 +486 0x80085494 0x800855D4 320 exact 1 leaf 0 - 1 +487 0x80017E38 0x80017F7C 324 exact 1 leaf 0 - 1 +488 0x8009F120 0x8009F264 324 exact 1 leaf 0 - 1 +489 0x800B704C 0x800B7190 324 exact 1 leaf 0 - 1 +490 0x800A8310 0x800A8464 340 exact 1 leaf 0 - 1 +491 0x800AE10C 0x800AE268 348 exact 1 leaf 0 - 1 +492 0x800F3C60 0x800F3DC0 352 exact 1 leaf 0 - 1 +493 0x8007D2B0 0x8007D418 360 exact 1 leaf 0 - 1 +494 0x800F2FC0 0x800F3134 372 exact 1 leaf 0 - 1 +495 0x8018080C 0x80180984 376 exact 1 leaf 0 - 1 +496 0x800522A8 0x80052424 380 exact 1 leaf 0 - 1 +497 0x800F6718 0x800F6894 380 exact 1 leaf 0 - 1 +498 0x800298C0 0x80029A48 392 exact 1 leaf 0 - 1 +499 0x800A2F44 0x800A30D4 400 exact 1 leaf 0 - 1 +500 0x80033040 0x800331D4 404 exact 1 leaf 0 - 1 +501 0x8017D5C0 0x8017D75C 412 exact 1 leaf 0 - 1 +502 0x8001FB90 0x8001FD30 416 exact 1 leaf 0 - 1 +503 0x80092898 0x80092A48 432 exact 1 leaf 0 - 1 +504 0x800F9414 0x800F95C4 432 exact 1 leaf 0 - 1 +505 0x801087D0 0x8010898C 444 exact 1 leaf 0 - 1 +506 0x8004D5CC 0x8004D7C8 508 exact 1 leaf 0 - 1 +507 0x800F6B40 0x800F6D60 544 exact 1 leaf 0 - 1 +508 0x800F96E8 0x800F9938 592 exact 1 leaf 0 - 1 +509 0x8001C8AC 0x8001CB38 652 exact 1 leaf 0 - 1 +510 0x800F9938 0x800F9BC4 652 exact 1 leaf 0 - 1 +511 0x80103804 0x80103A90 652 exact 1 leaf 0 - 1 +512 0x80074C74 0x80074F1C 680 exact 1 leaf 0 - 1 +513 0x8010ABC0 0x8010AE7C 700 exact 1 leaf 0 - 1 +514 0x80010C44 0x80010F30 748 exact 1 leaf 0 - 1 +515 0x800FE9C4 0x800FECF8 820 exact 1 leaf 0 - 1 +516 0x800BD298 0x800BD5E8 848 exact 1 leaf 0 - 1 +517 0x800A2684 0x800A2B04 1152 exact 1 leaf 0 - 1 +518 0x8010AF50 0x8010B420 1232 exact 1 leaf 0 - 1 +519 0x8002E3A8 0x8002E3B8 16 exact 2 frame 0 - 1 +520 0x80036380 0x80036390 16 exact 2 frame 0 - 1 +521 0x800290D0 0x800290F0 32 exact 2 frame 1 - 1 +522 0x80090028 0x80090048 32 exact 2 frame 1 - 1 +523 0x80090C8C 0x80090CAC 32 exact 2 frame 1 - 1 +524 0x80092068 0x80092088 32 exact 2 frame 1 - 1 +525 0x80093A64 0x80093A84 32 exact 2 frame 1 - 1 +526 0x8009AC08 0x8009AC28 32 exact 2 frame 1 - 1 +527 0x800BFE80 0x800BFEA0 32 exact 2 frame 1 - 1 +528 0x800BFEA0 0x800BFEC0 32 exact 2 frame 1 - 1 +529 0x800BFEC0 0x800BFEE0 32 exact 2 frame 1 - 1 +530 0x800BFEE0 0x800BFF00 32 exact 2 frame 1 - 1 +531 0x800BFF00 0x800BFF20 32 exact 2 frame 1 - 1 +532 0x800F3140 0x800F3160 32 exact 2 frame 1 - 1 +533 0x800F8638 0x800F8658 32 exact 2 frame 1 - 1 +534 0x800F8AF8 0x800F8B18 32 exact 2 frame 1 - 1 +535 0x800F8B18 0x800F8B38 32 exact 2 frame 1 - 1 +536 0x800F8B38 0x800F8B58 32 exact 2 frame 1 - 1 +537 0x800F8F3C 0x800F8F5C 32 exact 2 frame 1 - 1 +538 0x800F8F5C 0x800F8F7C 32 exact 2 frame 1 - 1 +539 0x800F8F7C 0x800F8F9C 32 exact 2 frame 1 - 1 +540 0x800F8FC0 0x800F8FE0 32 exact 2 frame 1 - 1 +541 0x800FA960 0x800FA980 32 exact 2 frame 1 - 1 +542 0x801085B0 0x801085D0 32 exact 2 frame 1 - 1 +543 0x80021F64 0x80021F88 36 exact 2 frame 1 - 1 +544 0x80068D54 0x80068D78 36 exact 2 frame 1 - 1 +545 0x8007A404 0x8007A428 36 exact 2 frame 1 - 1 +546 0x800A5CC8 0x800A5CEC 36 exact 2 frame 1 - 1 +547 0x800F3A00 0x800F3A24 36 exact 2 frame 1 - 1 +548 0x80108990 0x801089B4 36 exact 2 frame 1 - 1 +549 0x8010AAC0 0x8010AAE4 36 exact 2 frame 1 - 1 +550 0x80026F14 0x80026F3C 40 exact 2 frame 1 - 1 +551 0x800290F0 0x80029118 40 exact 2 frame 1 - 1 +552 0x8002E4C8 0x8002E4F0 40 exact 2 frame 1 - 1 +553 0x8008F478 0x8008F4A0 40 exact 2 frame 1 - 1 +554 0x8008F508 0x8008F530 40 exact 2 frame 2 - 1 +555 0x80099E34 0x80099E5C 40 exact 2 frame 1 - 1 +556 0x800AC85C 0x800AC884 40 exact 2 frame 1 - 1 +557 0x800B2534 0x800B255C 40 exact 2 frame 1 - 1 +558 0x80016E24 0x80016E50 44 exact 2 frame 1 - 1 +559 0x80021F24 0x80021F50 44 exact 2 frame 1 - 1 +560 0x8003B320 0x8003B34C 44 exact 2 frame 1 - 1 +561 0x80066E2C 0x80066E58 44 exact 2 frame 1 - 1 +562 0x80068F6C 0x80068F98 44 exact 2 frame 1 - 1 +563 0x8006BC08 0x8006BC34 44 exact 2 frame 1 - 1 +564 0x8008FF58 0x8008FF84 44 exact 2 frame 1 - 1 +565 0x800900A0 0x800900CC 44 exact 2 frame 1 - 1 +566 0x80090A44 0x80090A70 44 exact 2 frame 1 - 1 +567 0x800A623C 0x800A6268 44 exact 2 frame 1 - 1 +568 0x800A6268 0x800A6294 44 exact 2 frame 1 - 1 +569 0x800AE548 0x800AE574 44 exact 2 frame 1 - 1 +570 0x800AFFB8 0x800AFFE4 44 exact 2 frame 1 - 1 +571 0x80102B30 0x80102B5C 44 exact 2 frame 1 - 1 +572 0x80022FCC 0x80022FFC 48 exact 2 frame 2 - 1 +573 0x800268C4 0x800268F4 48 exact 2 frame 1 - 1 +574 0x800301FC 0x8003022C 48 exact 2 frame 1 - 1 +575 0x800F7990 0x800F79C0 48 exact 2 frame 1 - 1 +576 0x800F79C0 0x800F79F0 48 exact 2 frame 1 - 1 +577 0x800F79F0 0x800F7A20 48 exact 2 frame 1 - 1 +578 0x800F7A54 0x800F7A84 48 exact 2 frame 1 - 1 +579 0x80107338 0x80107368 48 exact 2 call 1 - 1 +580 0x801BB450 0x801BB480 48 exact 2 frame 1 - 1 +581 0x800128E4 0x80012918 52 exact 2 frame 1 - 1 +582 0x80018384 0x800183B8 52 exact 2 frame 1 - 1 +583 0x800183B8 0x800183EC 52 exact 2 frame 1 - 1 +584 0x800198C0 0x800198F4 52 exact 2 frame 1 - 1 +585 0x80022E44 0x80022E78 52 exact 2 frame 1 - 1 +586 0x8002F1A4 0x8002F1D8 52 exact 2 frame 1 - 1 +587 0x80041A24 0x80041A58 52 exact 2 frame 1 - 1 +588 0x800658FC 0x80065930 52 exact 2 frame 1 - 1 +589 0x800683B0 0x800683E4 52 exact 2 frame 1 - 1 +590 0x80072BA8 0x80072BDC 52 exact 2 frame 1 - 1 +591 0x80073250 0x80073284 52 exact 2 frame 2 - 1 +592 0x8009107C 0x800910B0 52 exact 2 frame 1 - 1 +593 0x800F4B54 0x800F4B88 52 exact 2 frame 1 - 1 +594 0x800F6330 0x800F6364 52 exact 2 frame 1 - 1 +595 0x800F7A20 0x800F7A54 52 exact 2 frame 1 - 1 +596 0x80019700 0x80019738 56 exact 2 frame 1 - 1 +597 0x80024630 0x80024668 56 exact 2 frame 0 - 1 +598 0x8002AC84 0x8002ACBC 56 exact 2 frame 1 - 1 +599 0x8002D5D0 0x8002D608 56 exact 2 frame 0 - 1 +600 0x8003AAE8 0x8003AB20 56 exact 2 frame 1 - 1 +601 0x80045388 0x800453C0 56 exact 2 frame 1 - 1 +602 0x800453C0 0x800453F8 56 exact 2 frame 1 - 1 +603 0x800697C4 0x800697FC 56 exact 2 frame 1 - 1 +604 0x800734A4 0x800734DC 56 exact 2 frame 2 - 1 +605 0x80090B7C 0x80090BB4 56 exact 2 frame 1 - 1 +606 0x800A5CEC 0x800A5D24 56 exact 2 frame 1 - 1 +607 0x800A9D58 0x800A9D90 56 exact 2 frame 3 - 1 +608 0x800F88F0 0x800F8928 56 exact 2 frame 2 - 1 +609 0x800FBDC0 0x800FBDF8 56 exact 2 frame 1 - 1 +610 0x80100334 0x8010036C 56 exact 2 frame 3 - 1 +611 0x8010036C 0x801003A4 56 exact 2 frame 3 - 1 +612 0x80025070 0x800250AC 60 exact 2 frame 1 - 1 +613 0x8002515C 0x80025198 60 exact 2 frame 1 - 1 +614 0x800254B0 0x800254EC 60 exact 2 frame 1 - 1 +615 0x800259A0 0x800259DC 60 exact 2 frame 1 - 1 +616 0x8002C6EC 0x8002C728 60 exact 2 frame 1 - 1 +617 0x8002C728 0x8002C764 60 exact 2 frame 1 - 1 +618 0x80034A80 0x80034ABC 60 exact 2 frame 0 - 1 +619 0x80042A54 0x80042A90 60 exact 2 frame 2 - 1 +620 0x8009B464 0x8009B4A0 60 exact 2 frame 1 - 1 +621 0x800A648C 0x800A64C8 60 exact 2 frame 1 - 1 +622 0x800F8A0C 0x800F8A48 60 exact 2 frame 2 - 1 +623 0x800F9344 0x800F9380 60 exact 2 frame 2 - 1 +624 0x80102F58 0x80102F94 60 exact 2 frame 1 - 1 +625 0x80013D04 0x80013D44 64 exact 2 frame 1 - 1 +626 0x800281A4 0x800281E4 64 exact 2 frame 1 - 1 +627 0x800429B0 0x800429F0 64 exact 2 frame 2 - 1 +628 0x8004820C 0x8004824C 64 exact 2 frame 2 - 1 +629 0x80057524 0x80057564 64 exact 2 frame 2 - 1 +630 0x8006BC34 0x8006BC74 64 exact 2 frame 1 - 1 +631 0x800751E8 0x80075228 64 exact 2 frame 1 - 1 +632 0x8007ED4C 0x8007ED8C 64 exact 2 frame 1 - 1 +633 0x80086DBC 0x80086DFC 64 exact 2 frame 1 - 1 +634 0x8008FF84 0x8008FFC4 64 exact 2 frame 1 - 1 +635 0x80096324 0x80096364 64 exact 2 frame 2 - 1 +636 0x800A6840 0x800A6880 64 exact 2 frame 1 - 1 +637 0x800F4C08 0x800F4C48 64 exact 2 frame 1 - 1 +638 0x800FBD80 0x800FBDC0 64 exact 2 frame 3 - 1 +639 0x8001590C 0x80015950 68 exact 2 frame 1 - 1 +640 0x8002E968 0x8002E9AC 68 exact 2 frame 2 - 1 +641 0x8002F160 0x8002F1A4 68 exact 2 frame 2 - 1 +642 0x80036328 0x8003636C 68 exact 2 frame 2 - 1 +643 0x80048350 0x80048394 68 exact 2 frame 2 - 1 +644 0x8004E3FC 0x8004E440 68 exact 2 frame 1 - 1 +645 0x8009132C 0x80091370 68 exact 2 frame 2 - 1 +646 0x800AA2B4 0x800AA2F8 68 exact 2 frame 2 - 1 +647 0x8001289C 0x800128E4 72 exact 2 frame 1 - 1 +648 0x80012918 0x80012960 72 exact 2 frame 1 - 1 +649 0x800129C8 0x80012A10 72 exact 2 frame 1 - 1 +650 0x800170C0 0x80017108 72 exact 2 frame 1 - 1 +651 0x80017A38 0x80017A80 72 exact 2 frame 1 - 1 +652 0x80017B50 0x80017B98 72 exact 2 frame 1 - 1 +653 0x80017D88 0x80017DD0 72 exact 2 frame 4 - 1 +654 0x80017DF0 0x80017E38 72 exact 2 frame 0 - 1 +655 0x80021FF4 0x8002203C 72 exact 2 frame 4 - 1 +656 0x8002E028 0x8002E070 72 exact 2 frame 1 - 1 +657 0x8002E9AC 0x8002E9F4 72 exact 2 frame 2 - 1 +658 0x8002F0D0 0x8002F118 72 exact 2 frame 2 - 1 +659 0x80036A0C 0x80036A54 72 exact 2 frame 2 - 1 +660 0x80036A54 0x80036A9C 72 exact 2 frame 2 - 1 +661 0x80057BE8 0x80057C30 72 exact 2 frame 1 - 1 +662 0x800668A8 0x800668F0 72 exact 2 frame 1 - 1 +663 0x8006B184 0x8006B1CC 72 exact 2 frame 1 - 1 +664 0x8006B1CC 0x8006B214 72 exact 2 frame 1 - 1 +665 0x8006B778 0x8006B7C0 72 exact 2 frame 1 - 1 +666 0x80070454 0x8007049C 72 exact 2 frame 1 - 1 +667 0x8007759C 0x800775E4 72 exact 2 frame 1 - 1 +668 0x80083470 0x800834B8 72 exact 2 frame 1 - 1 +669 0x8008F4AC 0x8008F4F4 72 exact 2 frame 1 - 1 +670 0x800A6BEC 0x800A6C34 72 exact 2 frame 3 - 1 +671 0x800A9FD4 0x800AA01C 72 exact 2 frame 2 - 1 +672 0x800BBAC8 0x800BBB10 72 exact 2 frame 1 - 1 +673 0x800F8928 0x800F8970 72 exact 2 frame 2 - 1 +674 0x800FDE54 0x800FDE9C 72 exact 2 frame 1 - 1 +675 0x800196B4 0x80019700 76 exact 2 frame 1 - 1 +676 0x8002864C 0x80028698 76 exact 2 frame 2 - 1 +677 0x8002D014 0x8002D060 76 exact 2 frame 1 - 1 +678 0x8003ABB4 0x8003AC00 76 exact 2 frame 3 - 1 +679 0x8003D310 0x8003D35C 76 exact 2 frame 1 - 1 +680 0x80042964 0x800429B0 76 exact 2 frame 2 - 1 +681 0x80049298 0x800492E4 76 exact 2 frame 2 - 1 +682 0x8007374C 0x80073798 76 exact 2 frame 1 - 1 +683 0x8007E8B8 0x8007E904 76 exact 2 frame 1 - 1 +684 0x800834B8 0x80083504 76 exact 2 frame 1 - 1 +685 0x800893E8 0x80089434 76 exact 2 frame 1 - 1 +686 0x800A86B4 0x800A8700 76 exact 2 frame 0 - 1 +687 0x800AC648 0x800AC694 76 exact 2 frame 2 - 1 +688 0x800AC98C 0x800AC9D8 76 exact 2 frame 1 - 1 +689 0x800B6C14 0x800B6C60 76 exact 2 frame 3 - 1 +690 0x800B6CB4 0x800B6D00 76 exact 2 frame 1 - 1 +691 0x800F7610 0x800F765C 76 exact 2 frame 3 - 1 +692 0x800FC280 0x800FC2CC 76 exact 2 frame 2 - 1 +693 0x800FFFEC 0x80100038 76 exact 2 frame 1 - 1 +694 0x801032D4 0x80103320 76 exact 2 frame 3 - 1 +695 0x80103D0C 0x80103D58 76 exact 2 frame 2 - 1 +696 0x8010806C 0x801080B8 76 exact 2 frame 1 - 1 +697 0x80025758 0x800257A8 80 exact 2 frame 1 - 1 +698 0x800259DC 0x80025A2C 80 exact 2 frame 1 - 1 +699 0x80029E88 0x80029ED8 80 exact 2 frame 2 - 1 +700 0x8002E3FC 0x8002E44C 80 exact 2 frame 3 - 1 +701 0x800354F8 0x80035548 80 exact 2 frame 6 - 1 +702 0x80046198 0x800461E8 80 exact 2 frame 1 - 1 +703 0x80048E20 0x80048E70 80 exact 2 frame 2 - 1 +704 0x80057748 0x80057798 80 exact 2 frame 1 - 1 +705 0x80057798 0x800577E8 80 exact 2 frame 1 - 1 +706 0x8005784C 0x8005789C 80 exact 2 frame 1 - 1 +707 0x8005789C 0x800578EC 80 exact 2 frame 1 - 1 +708 0x80057950 0x800579A0 80 exact 2 frame 1 - 1 +709 0x800579A0 0x800579F0 80 exact 2 frame 1 - 1 +710 0x800579F0 0x80057A40 80 exact 2 frame 1 - 1 +711 0x80057A40 0x80057A90 80 exact 2 frame 1 - 1 +712 0x80057AE0 0x80057B30 80 exact 2 frame 1 - 1 +713 0x80057C30 0x80057C80 80 exact 2 frame 1 - 1 +714 0x80057C80 0x80057CD0 80 exact 2 frame 1 - 1 +715 0x8006AE04 0x8006AE54 80 exact 2 frame 1 - 1 +716 0x8006B66C 0x8006B6BC 80 exact 2 frame 1 - 1 +717 0x8007D5AC 0x8007D5FC 80 exact 2 frame 1 - 1 +718 0x8008B910 0x8008B960 80 exact 2 frame 1 - 1 +719 0x80090894 0x800908E4 80 exact 2 frame 2 - 1 +720 0x800AFACC 0x800AFB1C 80 exact 2 frame 1 - 1 +721 0x800AFB1C 0x800AFB6C 80 exact 2 frame 1 - 1 +722 0x800FFBEC 0x800FFC3C 80 exact 2 frame 2 - 1 +723 0x80018210 0x80018264 84 exact 2 frame 2 - 1 +724 0x80028150 0x800281A4 84 exact 2 frame 2 - 1 +725 0x800419D0 0x80041A24 84 exact 2 frame 1 - 1 +726 0x80057B30 0x80057B84 84 exact 2 frame 1 - 1 +727 0x8006AD5C 0x8006ADB0 84 exact 2 frame 1 - 1 +728 0x8006ADB0 0x8006AE04 84 exact 2 frame 1 - 1 +729 0x8006B2D4 0x8006B328 84 exact 2 frame 1 - 1 +730 0x8006B470 0x8006B4C4 84 exact 2 frame 1 - 1 +731 0x80090CAC 0x80090D00 84 exact 2 frame 2 - 1 +732 0x80091490 0x800914E4 84 exact 2 frame 1 - 1 +733 0x80099024 0x80099078 84 exact 2 frame 2 - 1 +734 0x800AE66C 0x800AE6C0 84 exact 2 frame 1 - 1 +735 0x800B6C60 0x800B6CB4 84 exact 2 frame 3 - 1 +736 0x800B74D0 0x800B7524 84 exact 2 frame 1 - 1 +737 0x800C1E54 0x800C1EA8 84 exact 2 frame 3 - 1 +738 0x800FE970 0x800FE9C4 84 exact 2 frame 1 - 1 +739 0x80016DCC 0x80016E24 88 exact 2 frame 0 - 1 +740 0x800179E0 0x80017A38 88 exact 2 frame 1 - 1 +741 0x80017AF8 0x80017B50 88 exact 2 frame 1 - 1 +742 0x800245D8 0x80024630 88 exact 2 frame 1 - 1 +743 0x80025E54 0x80025EAC 88 exact 2 frame 2 - 1 +744 0x80026650 0x800266A8 88 exact 2 frame 1 - 1 +745 0x800282EC 0x80028344 88 exact 2 frame 2 - 1 +746 0x8002C764 0x8002C7BC 88 exact 2 frame 4 - 1 +747 0x8003022C 0x80030284 88 exact 2 frame 1 - 1 +748 0x80030284 0x800302DC 88 exact 2 frame 1 - 1 +749 0x800319F0 0x80031A48 88 exact 2 frame 1 - 1 +750 0x80043404 0x8004345C 88 exact 2 frame 1 - 1 +751 0x800474B0 0x80047508 88 exact 2 frame 1 - 1 +752 0x8005E538 0x8005E590 88 exact 2 frame 2 - 1 +753 0x80069580 0x800695D8 88 exact 2 frame 2 - 1 +754 0x80089B30 0x80089B88 88 exact 2 frame 2 - 1 +755 0x8008F2E0 0x8008F338 88 exact 2 frame 5 - 1 +756 0x80099D14 0x80099D6C 88 exact 2 frame 1 - 1 +757 0x800A34E8 0x800A3540 88 exact 2 frame 1 - 1 +758 0x800A6A18 0x800A6A70 88 exact 2 frame 2 - 1 +759 0x800A6C34 0x800A6C8C 88 exact 2 frame 2 - 1 +760 0x800A9F7C 0x800A9FD4 88 exact 2 frame 1 - 1 +761 0x800AAC44 0x800AAC9C 88 exact 2 frame 2 - 1 +762 0x800F66B8 0x800F6710 88 exact 2 frame 1 - 1 +763 0x80103B8C 0x80103BE4 88 exact 2 frame 2 - 1 +764 0x80011084 0x800110E0 92 exact 2 call 1 - 1 +765 0x80012F24 0x80012F80 92 exact 2 frame 3 - 1 +766 0x80024838 0x80024894 92 exact 2 frame 2 - 1 +767 0x80027BE8 0x80027C44 92 exact 2 frame 2 - 1 +768 0x80027C44 0x80027CA0 92 exact 2 frame 1 - 1 +769 0x800307FC 0x80030858 92 exact 2 frame 3 - 1 +770 0x80037984 0x800379E0 92 exact 2 frame 2 - 1 +771 0x8006B214 0x8006B270 92 exact 2 frame 1 - 1 +772 0x8006B9E0 0x8006BA3C 92 exact 2 frame 2 - 1 +773 0x8007E85C 0x8007E8B8 92 exact 2 frame 1 - 1 +774 0x80093A08 0x80093A64 92 exact 2 frame 2 - 1 +775 0x800B255C 0x800B25B8 92 exact 2 frame 3 - 1 +776 0x800B58C8 0x800B5924 92 exact 2 frame 3 - 1 +777 0x800B6838 0x800B6894 92 exact 2 frame 3 - 1 +778 0x800F44D0 0x800F452C 92 exact 2 frame 2 - 1 +779 0x801086B0 0x8010870C 92 exact 2 frame 1 - 1 +780 0x8010A8D8 0x8010A934 92 exact 2 frame 0 - 1 +781 0x80027CA0 0x80027D00 96 exact 2 frame 1 - 1 +782 0x800379E0 0x80037A40 96 exact 2 frame 1 - 1 +783 0x8004C000 0x8004C060 96 exact 2 frame 1 - 1 +784 0x80057564 0x800575C4 96 exact 2 frame 2 - 1 +785 0x80073364 0x800733C4 96 exact 2 frame 1 - 1 +786 0x8007E7FC 0x8007E85C 96 exact 2 frame 2 - 1 +787 0x8008D9AC 0x8008DA0C 96 exact 2 frame 2 - 1 +788 0x800A745C 0x800A74BC 96 exact 2 frame 1 - 1 +789 0x800F42AC 0x800F430C 96 exact 2 frame 2 - 1 +790 0x801029A0 0x80102A00 96 exact 2 frame 1 - 1 +791 0x8001278C 0x800127F0 100 exact 2 frame 5 - 1 +792 0x80023080 0x800230E4 100 exact 2 frame 3 - 1 +793 0x80023A4C 0x80023AB0 100 exact 2 frame 3 - 1 +794 0x80025EAC 0x80025F10 100 exact 2 frame 1 - 1 +795 0x8004857C 0x800485E0 100 exact 2 frame 3 - 1 +796 0x800577E8 0x8005784C 100 exact 2 frame 1 - 1 +797 0x800578EC 0x80057950 100 exact 2 frame 1 - 1 +798 0x80057B84 0x80057BE8 100 exact 2 frame 1 - 1 +799 0x8006B270 0x8006B2D4 100 exact 2 frame 1 - 1 +800 0x8008FFC4 0x80090028 100 exact 2 frame 3 - 1 +801 0x800A6934 0x800A6998 100 exact 2 frame 1 - 1 +802 0x800A8920 0x800A8984 100 exact 2 frame 2 - 1 +803 0x800B2488 0x800B24EC 100 exact 2 frame 0 - 1 +804 0x800B6754 0x800B67B8 100 exact 2 frame 0 - 1 +805 0x800BC960 0x800BC9C4 100 exact 2 frame 2 - 1 +806 0x800F2F08 0x800F2F6C 100 exact 2 frame 1 - 1 +807 0x80012834 0x8001289C 104 exact 2 frame 2 - 1 +808 0x80012960 0x800129C8 104 exact 2 frame 2 - 1 +809 0x800256F0 0x80025758 104 exact 2 frame 2 - 1 +810 0x8005E17C 0x8005E1E4 104 exact 2 frame 1 - 1 +811 0x8006F28C 0x8006F2F4 104 exact 2 frame 1 - 1 +812 0x8007432C 0x80074394 104 exact 2 frame 0 - 1 +813 0x8008A758 0x8008A7C0 104 exact 2 frame 2 - 1 +814 0x80091674 0x800916DC 104 exact 2 frame 3 - 1 +815 0x800A6B38 0x800A6BA0 104 exact 2 frame 1 - 1 +816 0x800B0E64 0x800B0ECC 104 exact 2 frame 4 - 1 +817 0x800B62C8 0x800B6330 104 exact 2 frame 2 - 1 +818 0x800F4098 0x800F4100 104 exact 2 frame 2 - 1 +819 0x800F6AD8 0x800F6B40 104 exact 2 frame 1 - 1 +820 0x800FAF84 0x800FAFEC 104 exact 2 frame 4 - 1 +821 0x800FB54C 0x800FB5B4 104 exact 2 frame 1 - 1 +822 0x80100038 0x801000A0 104 exact 2 frame 2 - 1 +823 0x801059E8 0x80105A50 104 exact 2 frame 1 - 1 +824 0x80015D50 0x80015DBC 108 exact 2 frame 2 - 1 +825 0x800183EC 0x80018458 108 exact 2 frame 0 - 1 +826 0x80026274 0x800262E0 108 exact 2 frame 1 - 1 +827 0x80030858 0x800308C4 108 exact 2 frame 1 - 1 +828 0x8003EB18 0x8003EB84 108 exact 2 frame 1 - 1 +829 0x80055958 0x800559C4 108 exact 2 frame 1 - 1 +830 0x80072D0C 0x80072D78 108 exact 2 frame 0 - 1 +831 0x8007F9B0 0x8007FA1C 108 exact 2 frame 1 - 1 +832 0x800909D8 0x80090A44 108 exact 2 frame 1 - 1 +833 0x800AA0A0 0x800AA10C 108 exact 2 frame 1 - 1 +834 0x800ACAC8 0x800ACB34 108 exact 2 frame 4 - 1 +835 0x800AE4DC 0x800AE548 108 exact 2 frame 3 - 1 +836 0x80031EBC 0x80031F2C 112 exact 2 frame 1 - 1 +837 0x8005584C 0x800558BC 112 exact 2 frame 1 - 1 +838 0x8006B328 0x8006B398 112 exact 2 frame 1 - 1 +839 0x800784F4 0x80078564 112 exact 2 frame 0 - 1 +840 0x800922D0 0x80092340 112 exact 2 frame 2 - 1 +841 0x800B6AE0 0x800B6B50 112 exact 2 frame 1 - 1 +842 0x800F452C 0x800F459C 112 exact 2 frame 2 - 1 +843 0x800FB410 0x800FB480 112 exact 2 frame 1 - 1 +844 0x800FB758 0x800FB7C8 112 exact 2 frame 4 - 1 +845 0x8010AA28 0x8010AA98 112 exact 2 frame 5 - 1 +846 0x80013C90 0x80013D04 116 exact 2 frame 2 - 1 +847 0x80014258 0x800142CC 116 exact 2 frame 3 - 1 +848 0x800280DC 0x80028150 116 exact 2 frame 2 - 1 +849 0x8002FDC8 0x8002FE3C 116 exact 2 frame 1 - 1 +850 0x800475CC 0x80047640 116 exact 2 frame 0 - 1 +851 0x80074C00 0x80074C74 116 exact 2 frame 1 - 1 +852 0x800833CC 0x80083440 116 exact 2 frame 1 - 1 +853 0x8009141C 0x80091490 116 exact 2 frame 1 - 1 +854 0x8009214C 0x800921C0 116 exact 2 frame 1 - 1 +855 0x800A4CA8 0x800A4D1C 116 exact 2 frame 0 - 1 +856 0x800B1D5C 0x800B1DD0 116 exact 2 frame 1 - 1 +857 0x800F6948 0x800F69BC 116 exact 2 frame 5 - 1 +858 0x800F9014 0x800F9088 116 exact 2 frame 1 - 1 +859 0x80021C64 0x80021CDC 120 exact 2 frame 4 - 1 +860 0x800275CC 0x80027644 120 exact 2 frame 2 - 1 +861 0x800454C8 0x80045540 120 exact 2 frame 1 - 1 +862 0x80045FD8 0x80046050 120 exact 2 frame 3 - 1 +863 0x800472E8 0x80047360 120 exact 2 frame 2 - 1 +864 0x80048DA8 0x80048E20 120 exact 2 frame 1 - 1 +865 0x80050CA8 0x80050D20 120 exact 2 frame 1 - 1 +866 0x80057E04 0x80057E7C 120 exact 2 frame 0 - 1 +867 0x800801B4 0x8008022C 120 exact 2 frame 2 - 1 +868 0x8008E258 0x8008E2D0 120 exact 2 frame 1 - 1 +869 0x800AA4F4 0x800AA56C 120 exact 2 frame 2 - 1 +870 0x800C110C 0x800C1184 120 exact 2 frame 1 - 1 +871 0x80103144 0x801031BC 120 exact 2 frame 1 - 1 +872 0x8001896C 0x800189E8 124 exact 2 frame 2 - 1 +873 0x8001AAA8 0x8001AB24 124 exact 2 frame 1 - 1 +874 0x80029054 0x800290D0 124 exact 2 frame 1 - 1 +875 0x8002D17C 0x8002D1F8 124 exact 2 frame 2 - 1 +876 0x8002E44C 0x8002E4C8 124 exact 2 frame 2 - 1 +877 0x8002E870 0x8002E8EC 124 exact 2 frame 3 - 1 +878 0x8002E8EC 0x8002E968 124 exact 2 frame 0 - 1 +879 0x8002FCD0 0x8002FD4C 124 exact 2 frame 3 - 1 +880 0x8002FD4C 0x8002FDC8 124 exact 2 frame 3 - 1 +881 0x800302DC 0x80030358 124 exact 2 frame 1 - 1 +882 0x8003870C 0x80038788 124 exact 2 frame 4 - 1 +883 0x80057F08 0x80057F84 124 exact 2 frame 1 - 1 +884 0x8006B5F0 0x8006B66C 124 exact 2 frame 2 - 1 +885 0x8006B964 0x8006B9E0 124 exact 2 frame 3 - 1 +886 0x8006BB0C 0x8006BB88 124 exact 2 frame 1 - 1 +887 0x8006D148 0x8006D1C4 124 exact 2 frame 1 - 1 +888 0x80072D78 0x80072DF4 124 exact 2 frame 1 - 1 +889 0x8008A400 0x8008A47C 124 exact 2 frame 0 - 1 +890 0x80095CF8 0x80095D74 124 exact 2 frame 1 - 1 +891 0x800A4764 0x800A47E0 124 exact 2 frame 0 - 1 +892 0x800A84E8 0x800A8564 124 exact 2 frame 2 - 1 +893 0x800B8DE4 0x800B8E60 124 exact 2 frame 3 - 1 +894 0x800C5278 0x800C52F4 124 exact 2 frame 1 - 1 +895 0x800F6638 0x800F66B4 124 exact 2 frame 1 - 1 +896 0x80107E90 0x80107F0C 124 exact 2 frame 0 - 1 +897 0x80026E94 0x80026F14 128 exact 2 frame 1 - 1 +898 0x800A6998 0x800A6A18 128 exact 2 frame 4 - 1 +899 0x800A80B8 0x800A8138 128 exact 2 frame 0 - 1 +900 0x800A88A0 0x800A8920 128 exact 2 frame 1 - 1 +901 0x800B67B8 0x800B6838 128 exact 2 frame 1 - 1 +902 0x800F4B88 0x800F4C08 128 exact 2 frame 2 - 1 +903 0x800F521C 0x800F529C 128 exact 2 frame 0 - 1 +904 0x800F6DD0 0x800F6E50 128 exact 2 frame 2 - 1 +905 0x800F6E50 0x800F6ED0 128 exact 2 frame 2 - 1 +906 0x800FB6D8 0x800FB758 128 exact 2 frame 4 - 1 +907 0x800FBB20 0x800FBBA0 128 exact 2 frame 5 - 1 +908 0x801000A0 0x80100120 128 exact 2 frame 1 - 1 +909 0x80102A00 0x80102A80 128 exact 2 frame 6 - 1 +910 0x80107DE8 0x80107E68 128 exact 2 frame 1 - 1 +911 0x801097A0 0x80109820 128 exact 2 call 1 - 1 +912 0x8001703C 0x800170C0 132 exact 2 frame 1 - 1 +913 0x80026E10 0x80026E94 132 exact 2 frame 2 - 1 +914 0x80042138 0x800421BC 132 exact 2 frame 4 - 1 +915 0x8005E79C 0x8005E820 132 exact 2 frame 3 - 1 +916 0x8007D5FC 0x8007D680 132 exact 2 frame 2 - 1 +917 0x800A8464 0x800A84E8 132 exact 2 frame 0 - 1 +918 0x800A9EF8 0x800A9F7C 132 exact 2 frame 1 - 1 +919 0x800AA01C 0x800AA0A0 132 exact 2 frame 2 - 1 +920 0x800AE458 0x800AE4DC 132 exact 2 frame 3 - 1 +921 0x800B1BB0 0x800B1C34 132 exact 2 frame 1 - 1 +922 0x800C3490 0x800C3514 132 exact 2 frame 0 - 1 +923 0x800FA5D8 0x800FA65C 132 exact 2 frame 4 - 1 +924 0x80102A80 0x80102B04 132 exact 2 frame 1 - 1 +925 0x80105148 0x801051CC 132 exact 2 frame 3 - 1 +926 0x8010A6C4 0x8010A748 132 exact 2 frame 4 - 1 +927 0x800239C4 0x80023A4C 136 exact 2 frame 2 - 1 +928 0x80025ADC 0x80025B64 136 exact 2 frame 1 - 1 +929 0x800268F4 0x8002697C 136 exact 2 frame 5 - 1 +930 0x8003FC78 0x8003FD00 136 exact 2 frame 2 - 1 +931 0x80073284 0x8007330C 136 exact 2 frame 1 - 1 +932 0x8007E0A4 0x8007E12C 136 exact 2 frame 2 - 1 +933 0x800A6294 0x800A631C 136 exact 2 frame 6 - 1 +934 0x800ADF18 0x800ADFA0 136 exact 2 frame 1 - 1 +935 0x80108740 0x801087C8 136 exact 2 frame 2 - 1 +936 0x80048180 0x8004820C 140 exact 2 frame 1 - 1 +937 0x80057E7C 0x80057F08 140 exact 2 frame 1 - 1 +938 0x8005BF44 0x8005BFD0 140 exact 2 frame 1 - 1 +939 0x8006D1C4 0x8006D250 140 exact 2 frame 1 - 1 +940 0x80089DE8 0x80089E74 140 exact 2 frame 1 - 1 +941 0x800B6B50 0x800B6BDC 140 exact 2 frame 1 - 1 +942 0x800C0BFC 0x800C0C88 140 exact 2 frame 1 - 1 +943 0x800FFF60 0x800FFFEC 140 exact 2 frame 3 - 1 +944 0x80107458 0x801074E4 140 exact 2 frame 1 - 1 +945 0x80013AF0 0x80013B80 144 exact 2 frame 3 - 1 +946 0x8001587C 0x8001590C 144 exact 2 frame 3 - 1 +947 0x80015CC0 0x80015D50 144 exact 2 frame 1 - 1 +948 0x8001758C 0x8001761C 144 exact 2 frame 1 - 1 +949 0x800182F4 0x80018384 144 exact 2 frame 1 - 1 +950 0x80025DC4 0x80025E54 144 exact 2 frame 2 - 1 +951 0x8002D364 0x8002D3F4 144 exact 2 frame 7 - 1 +952 0x80036278 0x80036308 144 exact 2 frame 2 - 1 +953 0x80038D48 0x80038DD8 144 exact 2 frame 0 - 1 +954 0x800461E8 0x80046278 144 exact 2 frame 1 - 1 +955 0x80047984 0x80047A14 144 exact 2 frame 1 - 1 +956 0x8005E340 0x8005E3D0 144 exact 2 frame 2 - 1 +957 0x80063060 0x800630F0 144 exact 2 frame 2 - 1 +958 0x80063870 0x80063900 144 exact 2 frame 3 - 1 +959 0x80065670 0x80065700 144 exact 2 frame 3 - 1 +960 0x800829D8 0x80082A68 144 exact 2 frame 0 - 1 +961 0x800AD1C8 0x800AD258 144 exact 2 frame 0 - 1 +962 0x800F421C 0x800F42AC 144 exact 2 frame 2 - 1 +963 0x800F897C 0x800F8A0C 144 exact 2 frame 2 - 1 +964 0x801001C4 0x80100254 144 exact 2 frame 1 - 1 +965 0x80100508 0x80100598 144 exact 2 frame 3 - 1 +966 0x80104BA8 0x80104C38 144 exact 2 frame 1 - 1 +967 0x800247A4 0x80024838 148 exact 2 frame 1 - 1 +968 0x8003AB20 0x8003ABB4 148 exact 2 frame 1 - 1 +969 0x8004331C 0x800433B0 148 exact 2 frame 0 - 1 +970 0x80051914 0x800519A8 148 exact 2 frame 1 - 1 +971 0x800637DC 0x80063870 148 exact 2 frame 2 - 1 +972 0x80079C90 0x80079D24 148 exact 2 frame 0 - 1 +973 0x8007A080 0x8007A114 148 exact 2 frame 1 - 1 +974 0x80089D54 0x80089DE8 148 exact 2 frame 1 - 1 +975 0x800A9CC4 0x800A9D58 148 exact 2 frame 4 - 1 +976 0x800AB504 0x800AB598 148 exact 2 frame 2 - 1 +977 0x800BC658 0x800BC6EC 148 exact 2 frame 4 - 1 +978 0x800FB480 0x800FB514 148 exact 2 frame 0 - 1 +979 0x801003A4 0x80100438 148 exact 2 frame 4 - 1 +980 0x80026A04 0x80026A9C 152 exact 2 frame 3 - 1 +981 0x8002BCE8 0x8002BD80 152 exact 2 frame 3 - 1 +982 0x8004A1E0 0x8004A278 152 exact 2 frame 1 - 1 +983 0x8005E820 0x8005E8B8 152 exact 2 frame 3 - 1 +984 0x800645CC 0x80064664 152 exact 2 frame 3 - 1 +985 0x8007D680 0x8007D718 152 exact 2 frame 1 - 1 +986 0x800B107C 0x800B1114 152 exact 2 frame 2 - 1 +987 0x800BBDF8 0x800BBE90 152 exact 2 frame 0 - 1 +988 0x800C1424 0x800C14BC 152 exact 2 frame 2 - 1 +989 0x800F4000 0x800F4098 152 exact 2 frame 3 - 1 +990 0x800F77D8 0x800F7870 152 exact 2 frame 3 - 1 +991 0x800F9094 0x800F912C 152 exact 2 frame 2 - 1 +992 0x80103094 0x8010312C 152 exact 2 frame 1 - 1 +993 0x80012DE8 0x80012E84 156 exact 2 frame 1 - 1 +994 0x80016F80 0x8001701C 156 exact 2 frame 1 - 1 +995 0x8002C7EC 0x8002C888 156 exact 2 frame 7 - 1 +996 0x8002FAB8 0x8002FB54 156 exact 2 frame 1 - 1 +997 0x80043AE4 0x80043B80 156 exact 2 frame 1 - 1 +998 0x80048B84 0x80048C20 156 exact 2 frame 2 - 1 +999 0x800491FC 0x80049298 156 exact 2 frame 3 - 1 +1000 0x800558BC 0x80055958 156 exact 2 frame 1 - 1 +1001 0x8006A654 0x8006A6F0 156 exact 2 frame 2 - 1 +1002 0x80083018 0x800830B4 156 exact 2 frame 1 - 1 +1003 0x800BC8C4 0x800BC960 156 exact 2 frame 4 - 1 +1004 0x80012E84 0x80012F24 160 exact 2 frame 3 - 1 +1005 0x8001644C 0x800164EC 160 exact 2 frame 3 - 1 +1006 0x8001CDA0 0x8001CE40 160 exact 2 frame 1 - 1 +1007 0x8002311C 0x800231BC 160 exact 2 frame 4 - 1 +1008 0x800575C4 0x80057664 160 exact 2 frame 2 - 1 +1009 0x80058190 0x80058230 160 exact 2 frame 1 - 1 +1010 0x8007C408 0x8007C4A8 160 exact 2 frame 1 - 1 +1011 0x80089C74 0x80089D14 160 exact 2 frame 1 - 1 +1012 0x800A9C24 0x800A9CC4 160 exact 2 frame 4 - 1 +1013 0x800B5FF0 0x800B6090 160 exact 2 frame 2 - 1 +1014 0x800FF0E4 0x800FF184 160 exact 2 frame 2 - 1 +1015 0x80012F80 0x80013024 164 exact 2 frame 1 - 1 +1016 0x80016660 0x80016704 164 exact 2 frame 0 - 1 +1017 0x80025D20 0x80025DC4 164 exact 2 frame 2 - 1 +1018 0x800270D4 0x80027178 164 exact 2 frame 2 - 1 +1019 0x8002DF84 0x8002E028 164 exact 2 frame 1 - 1 +1020 0x80031B18 0x80031BBC 164 exact 2 frame 1 - 1 +1021 0x80041FE4 0x80042088 164 exact 2 frame 4 - 1 +1022 0x800516FC 0x800517A0 164 exact 2 frame 1 - 1 +1023 0x8005E29C 0x8005E340 164 exact 2 frame 3 - 1 +1024 0x80066738 0x800667DC 164 exact 2 frame 1 - 1 +1025 0x8007D20C 0x8007D2B0 164 exact 2 frame 1 - 1 +1026 0x800827C4 0x80082868 164 exact 2 frame 2 - 1 +1027 0x800C2CE4 0x800C2D88 164 exact 2 frame 1 - 1 +1028 0x800F3B10 0x800F3BB4 164 exact 2 call 1 - 1 +1029 0x800F3BB4 0x800F3C58 164 exact 2 call 1 - 1 +1030 0x800F6898 0x800F693C 164 exact 2 frame 4 - 1 +1031 0x800FAC44 0x800FACE8 164 exact 2 frame 1 - 1 +1032 0x80100120 0x801001C4 164 exact 2 frame 1 - 1 +1033 0x80022E78 0x80022F20 168 exact 2 frame 1 - 1 +1034 0x80032258 0x80032300 168 exact 2 frame 1 - 1 +1035 0x800592A4 0x8005934C 168 exact 2 frame 2 - 1 +1036 0x8007BC64 0x8007BD0C 168 exact 2 frame 1 - 1 +1037 0x800A3358 0x800A3400 168 exact 2 frame 1 - 1 +1038 0x800A4AC8 0x800A4B70 168 exact 2 frame 3 - 1 +1039 0x800A5180 0x800A5228 168 exact 2 frame 1 - 1 +1040 0x800A8B8C 0x800A8C34 168 exact 2 frame 1 - 1 +1041 0x800BE6D8 0x800BE780 168 exact 2 frame 0 - 1 +1042 0x800BE780 0x800BE828 168 exact 2 frame 0 - 1 +1043 0x800FF758 0x800FF800 168 exact 2 frame 1 - 1 +1044 0x80028C34 0x80028CE0 172 exact 2 frame 1 - 1 +1045 0x8005E590 0x8005E63C 172 exact 2 frame 6 - 1 +1046 0x8006D250 0x8006D2FC 172 exact 2 frame 1 - 1 +1047 0x8007B00C 0x8007B0B8 172 exact 2 frame 1 - 1 +1048 0x80082868 0x80082914 172 exact 2 frame 5 - 1 +1049 0x800908E4 0x80090990 172 exact 2 frame 4 - 1 +1050 0x80091370 0x8009141C 172 exact 2 frame 2 - 1 +1051 0x800A5C1C 0x800A5CC8 172 exact 2 frame 0 - 1 +1052 0x800A64C8 0x800A6574 172 exact 2 frame 1 - 1 +1053 0x800A8224 0x800A82D0 172 exact 2 frame 3 - 1 +1054 0x800F4424 0x800F44D0 172 exact 2 frame 2 - 1 +1055 0x8010B420 0x8010B4CC 172 exact 2 call 4 - 1 +1056 0x80016E68 0x80016F18 176 exact 2 frame 2 - 1 +1057 0x80017C6C 0x80017D1C 176 exact 2 frame 2 - 1 +1058 0x800250AC 0x8002515C 176 exact 2 frame 3 - 1 +1059 0x80025A2C 0x80025ADC 176 exact 2 frame 1 - 1 +1060 0x80027E1C 0x80027ECC 176 exact 2 frame 3 - 1 +1061 0x80028344 0x800283F4 176 exact 2 frame 2 - 1 +1062 0x80046348 0x800463F8 176 exact 2 frame 1 - 1 +1063 0x80074734 0x800747E4 176 exact 2 frame 4 - 1 +1064 0x80089338 0x800893E8 176 exact 2 frame 2 - 1 +1065 0x800AD3D4 0x800AD484 176 exact 2 frame 0 - 1 +1066 0x800B1DD0 0x800B1E80 176 exact 2 frame 2 - 1 +1067 0x800C2D88 0x800C2E38 176 exact 2 frame 1 - 1 +1068 0x801080B8 0x80108168 176 exact 2 frame 4 - 1 +1069 0x801085E0 0x80108690 176 exact 2 frame 1 - 1 +1070 0x80021CDC 0x80021D90 180 exact 2 frame 4 - 1 +1071 0x8002E198 0x8002E24C 180 exact 2 frame 6 - 1 +1072 0x80050BF4 0x80050CA8 180 exact 2 frame 2 - 1 +1073 0x8006D2FC 0x8006D3B0 180 exact 2 frame 1 - 1 +1074 0x800A631C 0x800A63D0 180 exact 2 frame 3 - 1 +1075 0x800A6880 0x800A6934 180 exact 2 frame 3 - 1 +1076 0x800B1F94 0x800B2048 180 exact 2 frame 4 - 1 +1077 0x800C2C30 0x800C2CE4 180 exact 2 frame 2 - 1 +1078 0x80014FE8 0x800150A0 184 exact 2 frame 9 - 1 +1079 0x80019808 0x800198C0 184 exact 2 frame 1 - 1 +1080 0x80021E6C 0x80021F24 184 exact 2 frame 3 - 1 +1081 0x80023BF4 0x80023CAC 184 exact 2 frame 2 - 1 +1082 0x80028698 0x80028750 184 exact 2 frame 4 - 1 +1083 0x8005A6D4 0x8005A78C 184 exact 2 frame 7 - 1 +1084 0x8005E1E4 0x8005E29C 184 exact 2 frame 2 - 1 +1085 0x80079D24 0x80079DDC 184 exact 2 frame 0 - 1 +1086 0x8007AB7C 0x8007AC34 184 exact 2 frame 1 - 1 +1087 0x800ACA10 0x800ACAC8 184 exact 2 frame 4 - 1 +1088 0x800F436C 0x800F4424 184 exact 2 frame 2 - 1 +1089 0x800FED84 0x800FEE3C 184 exact 2 frame 5 - 1 +1090 0x80108434 0x801084EC 184 exact 2 frame 1 - 1 +1091 0x8001035C 0x80010418 188 exact 2 frame 1 - 1 +1092 0x80021BA8 0x80021C64 188 exact 2 frame 2 - 1 +1093 0x800236F8 0x800237B4 188 exact 2 frame 7 - 1 +1094 0x80045F1C 0x80045FD8 188 exact 2 frame 3 - 1 +1095 0x80050548 0x80050604 188 exact 2 frame 1 - 1 +1096 0x800506E4 0x800507A0 188 exact 2 frame 1 - 1 +1097 0x800507A0 0x8005085C 188 exact 2 frame 1 - 1 +1098 0x8006B6BC 0x8006B778 188 exact 2 frame 3 - 1 +1099 0x8008E19C 0x8008E258 188 exact 2 frame 2 - 1 +1100 0x800A63D0 0x800A648C 188 exact 2 frame 3 - 1 +1101 0x800A8984 0x800A8A40 188 exact 2 frame 4 - 1 +1102 0x800AF260 0x800AF31C 188 exact 2 frame 1 - 1 +1103 0x8001029C 0x8001035C 192 exact 2 frame 1 - 1 +1104 0x8002E0D8 0x8002E198 192 exact 2 frame 4 - 1 +1105 0x800437CC 0x8004388C 192 exact 2 frame 2 - 1 +1106 0x80046A18 0x80046AD8 192 exact 2 frame 0 - 1 +1107 0x800589E8 0x80058AA8 192 exact 2 frame 4 - 1 +1108 0x800682F0 0x800683B0 192 exact 2 frame 3 - 1 +1109 0x8006D3B0 0x8006D470 192 exact 2 frame 1 - 1 +1110 0x80086CFC 0x80086DBC 192 exact 2 frame 0 - 1 +1111 0x8008CC00 0x8008CCC0 192 exact 2 frame 2 - 1 +1112 0x8008DB44 0x8008DC04 192 exact 2 frame 2 - 1 +1113 0x8008FE98 0x8008FF58 192 exact 2 frame 3 - 1 +1114 0x800F459C 0x800F465C 192 exact 2 frame 4 - 1 +1115 0x8002C30C 0x8002C3D0 196 exact 2 frame 2 - 1 +1116 0x80030414 0x800304D8 196 exact 2 frame 5 - 1 +1117 0x80044B90 0x80044C54 196 exact 2 frame 0 - 1 +1118 0x80045D84 0x80045E48 196 exact 2 frame 1 - 1 +1119 0x800460D4 0x80046198 196 exact 2 frame 1 - 1 +1120 0x800654E4 0x800655A8 196 exact 2 frame 3 - 1 +1121 0x8006F9B4 0x8006FA78 196 exact 2 frame 1 - 1 +1122 0x80074268 0x8007432C 196 exact 2 frame 4 - 1 +1123 0x80089B88 0x80089C4C 196 exact 2 frame 2 - 1 +1124 0x800AD104 0x800AD1C8 196 exact 2 frame 0 - 1 +1125 0x800C1048 0x800C110C 196 exact 2 frame 3 - 1 +1126 0x80100254 0x80100318 196 exact 2 frame 1 - 1 +1127 0x8002BC20 0x8002BCE8 200 exact 2 frame 6 - 1 +1128 0x8003570C 0x800357D4 200 exact 2 frame 1 - 1 +1129 0x800655A8 0x80065670 200 exact 2 frame 2 - 1 +1130 0x800A6A70 0x800A6B38 200 exact 2 frame 2 - 1 +1131 0x80100598 0x80100660 200 exact 2 frame 5 - 1 +1132 0x800258D4 0x800259A0 204 exact 2 frame 2 - 1 +1133 0x800297F4 0x800298C0 204 exact 2 frame 2 - 1 +1134 0x8002CB84 0x8002CC50 204 exact 2 frame 10 - 1 +1135 0x800323E4 0x800324B0 204 exact 2 frame 3 - 1 +1136 0x80044C54 0x80044D20 204 exact 2 frame 4 - 1 +1137 0x800508CC 0x80050998 204 exact 2 frame 6 - 1 +1138 0x80054AF8 0x80054BC4 204 exact 2 frame 0 - 1 +1139 0x8005A81C 0x8005A8E8 204 exact 2 frame 1 - 1 +1140 0x800667DC 0x800668A8 204 exact 2 frame 1 - 1 +1141 0x80083BAC 0x80083C78 204 exact 2 frame 3 - 1 +1142 0x80099AE4 0x80099BB0 204 exact 2 frame 1 - 1 +1143 0x8009B4A0 0x8009B56C 204 exact 2 frame 1 - 1 +1144 0x800ACB34 0x800ACC00 204 exact 2 frame 1 - 1 +1145 0x800BB9FC 0x800BBAC8 204 exact 2 frame 3 - 1 +1146 0x800F8658 0x800F8724 204 exact 2 frame 1 - 1 +1147 0x80104230 0x801042FC 204 exact 2 frame 7 - 1 +1148 0x801094D8 0x801095A4 204 exact 2 frame 1 - 1 +1149 0x80019738 0x80019808 208 exact 2 frame 2 - 1 +1150 0x80031A48 0x80031B18 208 exact 2 frame 2 - 1 +1151 0x800453F8 0x800454C8 208 exact 2 frame 1 - 1 +1152 0x80046278 0x80046348 208 exact 2 frame 1 - 1 +1153 0x80099C44 0x80099D14 208 exact 2 frame 0 - 1 +1154 0x80100438 0x80100508 208 exact 2 frame 6 - 1 +1155 0x8010080C 0x801008DC 208 exact 2 frame 2 - 1 +1156 0x800111B0 0x80011284 212 exact 2 frame 1 - 1 +1157 0x80025F10 0x80025FE4 212 exact 2 frame 3 - 1 +1158 0x800279E4 0x80027AB8 212 exact 2 frame 0 - 1 +1159 0x8002D0A8 0x8002D17C 212 exact 2 frame 2 - 1 +1160 0x80043DC4 0x80043E98 212 exact 2 frame 3 - 1 +1161 0x80045E48 0x80045F1C 212 exact 2 frame 0 - 1 +1162 0x80057F84 0x80058058 212 exact 2 frame 0 - 1 +1163 0x8006821C 0x800682F0 212 exact 2 frame 1 - 1 +1164 0x8007A428 0x8007A4FC 212 exact 2 frame 1 - 1 +1165 0x800ACCD8 0x800ACDAC 212 exact 2 frame 0 - 1 +1166 0x800ACED4 0x800ACFA8 212 exact 2 frame 0 - 1 +1167 0x80101764 0x80101838 212 exact 2 frame 4 - 1 +1168 0x80105474 0x80105548 212 exact 2 frame 1 - 1 +1169 0x8006B398 0x8006B470 216 exact 2 frame 3 - 1 +1170 0x8006D470 0x8006D548 216 exact 2 frame 1 - 1 +1171 0x80090BB4 0x80090C8C 216 exact 2 frame 5 - 1 +1172 0x800A4E48 0x800A4F20 216 exact 2 frame 2 - 1 +1173 0x800AD9A8 0x800ADA80 216 exact 2 frame 0 - 1 +1174 0x800F3A30 0x800F3B08 216 exact 2 frame 1 - 1 +1175 0x80107B84 0x80107C5C 216 exact 2 frame 2 - 1 +1176 0x80015950 0x80015A2C 220 exact 2 frame 1 - 1 +1177 0x800198F4 0x800199D0 220 exact 2 frame 0 - 1 +1178 0x80021D90 0x80021E6C 220 exact 2 frame 3 - 1 +1179 0x8004D7C8 0x8004D8A4 220 exact 2 frame 2 - 1 +1180 0x8006B0A8 0x8006B184 220 exact 2 frame 2 - 1 +1181 0x80074658 0x80074734 220 exact 2 frame 7 - 1 +1182 0x8008F530 0x8008F60C 220 exact 2 frame 3 - 1 +1183 0x8008FDBC 0x8008FE98 220 exact 2 frame 3 - 1 +1184 0x80024F6C 0x8002504C 224 exact 2 frame 6 - 1 +1185 0x80029ED8 0x80029FB8 224 exact 2 frame 5 - 1 +1186 0x8002C22C 0x8002C30C 224 exact 2 frame 7 - 1 +1187 0x800733C4 0x800734A4 224 exact 2 frame 3 - 1 +1188 0x8007A324 0x8007A404 224 exact 2 frame 3 - 1 +1189 0x800A75CC 0x800A76AC 224 exact 2 frame 2 - 1 +1190 0x800AE6C0 0x800AE7A0 224 exact 2 frame 3 - 1 +1191 0x80100660 0x80100740 224 exact 2 frame 4 - 1 +1192 0x80105014 0x801050F4 224 exact 2 frame 1 - 1 +1193 0x80045CA0 0x80045D84 228 exact 2 frame 1 - 1 +1194 0x8005260C 0x800526F0 228 exact 2 frame 1 - 1 +1195 0x80057664 0x80057748 228 exact 2 frame 2 - 1 +1196 0x80073F78 0x8007405C 228 exact 2 frame 5 - 1 +1197 0x8007405C 0x80074140 228 exact 2 frame 5 - 1 +1198 0x8007FCCC 0x8007FDB0 228 exact 2 frame 4 - 1 +1199 0x800800D0 0x800801B4 228 exact 2 frame 4 - 1 +1200 0x8008FCD8 0x8008FDBC 228 exact 2 frame 2 - 1 +1201 0x80092A48 0x80092B2C 228 exact 2 frame 1 - 1 +1202 0x800A6574 0x800A6658 228 exact 2 frame 2 - 1 +1203 0x800FCB4C 0x800FCC30 228 exact 2 frame 3 - 1 +1204 0x80024894 0x8002497C 232 exact 2 frame 2 - 1 +1205 0x80065C34 0x80065D1C 232 exact 2 frame 1 - 1 +1206 0x80074570 0x80074658 232 exact 2 frame 1 - 1 +1207 0x8008D5F8 0x8008D6E0 232 exact 2 frame 2 - 1 +1208 0x800A3400 0x800A34E8 232 exact 2 frame 2 - 1 +1209 0x800B6F64 0x800B704C 232 exact 2 frame 3 - 1 +1210 0x800BB1C4 0x800BB2AC 232 exact 2 frame 3 - 1 +1211 0x8010A940 0x8010AA28 232 exact 2 frame 4 - 1 +1212 0x8001AB24 0x8001AC10 236 exact 2 frame 3 - 1 +1213 0x80024E80 0x80024F6C 236 exact 2 frame 3 - 1 +1214 0x800278F8 0x800279E4 236 exact 2 frame 1 - 1 +1215 0x8002BD80 0x8002BE6C 236 exact 2 frame 7 - 1 +1216 0x8006ED58 0x8006EE44 236 exact 2 frame 4 - 1 +1217 0x8007B83C 0x8007B928 236 exact 2 frame 3 - 1 +1218 0x8007C6E0 0x8007C7CC 236 exact 2 frame 1 - 1 +1219 0x800A8138 0x800A8224 236 exact 2 frame 1 - 1 +1220 0x800BC6EC 0x800BC7D8 236 exact 2 frame 6 - 1 +1221 0x800BC7D8 0x800BC8C4 236 exact 2 frame 6 - 1 +1222 0x800FF4BC 0x800FF5A8 236 exact 2 frame 4 - 1 +1223 0x80101678 0x80101764 236 exact 2 frame 4 - 1 +1224 0x8010713C 0x80107228 236 exact 2 frame 0 - 1 +1225 0x80013024 0x80013114 240 exact 2 frame 1 - 1 +1226 0x80026560 0x80026650 240 exact 2 frame 1 - 1 +1227 0x8003A9C8 0x8003AAB8 240 exact 2 frame 3 - 1 +1228 0x80046CCC 0x80046DBC 240 exact 2 frame 1 - 1 +1229 0x800907A4 0x80090894 240 exact 2 frame 4 - 1 +1230 0x800AE268 0x800AE358 240 exact 2 frame 5 - 1 +1231 0x80104630 0x80104720 240 exact 2 frame 5 - 1 +1232 0x80106C04 0x80106CF4 240 exact 2 frame 0 - 1 +1233 0x80028750 0x80028844 244 exact 2 frame 6 - 1 +1234 0x80028CE0 0x80028DD4 244 exact 2 frame 1 - 1 +1235 0x80046AD8 0x80046BCC 244 exact 2 frame 0 - 1 +1236 0x8006AA88 0x8006AB7C 244 exact 2 frame 7 - 1 +1237 0x8006EBA0 0x8006EC94 244 exact 2 frame 3 - 1 +1238 0x80090A70 0x80090B64 244 exact 2 frame 2 - 1 +1239 0x80099078 0x8009916C 244 exact 2 frame 7 - 1 +1240 0x8009F5AC 0x8009F6A0 244 exact 2 frame 0 - 1 +1241 0x800267CC 0x800268C4 248 exact 2 frame 6 - 1 +1242 0x8002DA48 0x8002DB40 248 exact 2 frame 3 - 1 +1243 0x80036134 0x8003622C 248 exact 2 frame 8 - 1 +1244 0x8004345C 0x80043554 248 exact 2 frame 2 - 1 +1245 0x80058AA8 0x80058BA0 248 exact 2 frame 5 - 1 +1246 0x80058DEC 0x80058EE4 248 exact 2 frame 4 - 1 +1247 0x8007EF84 0x8007F07C 248 exact 2 frame 1 - 1 +1248 0x8009F4B4 0x8009F5AC 248 exact 2 frame 0 - 1 +1249 0x8009F6A0 0x8009F798 248 exact 2 frame 0 - 1 +1250 0x8009F798 0x8009F890 248 exact 2 frame 0 - 1 +1251 0x8009F890 0x8009F988 248 exact 2 frame 0 - 1 +1252 0x800A466C 0x800A4764 248 exact 2 frame 2 - 1 +1253 0x800AFDBC 0x800AFEB4 248 exact 2 frame 2 - 1 +1254 0x800F8724 0x800F881C 248 exact 2 frame 1 - 1 +1255 0x800FE878 0x800FE970 248 exact 2 frame 6 - 1 +1256 0x800421BC 0x800422B8 252 exact 2 frame 10 - 1 +1257 0x8005DF74 0x8005E070 252 exact 2 frame 4 - 1 +1258 0x8007E12C 0x8007E228 252 exact 2 frame 4 - 1 +1259 0x8009D69C 0x8009D798 252 exact 2 frame 2 - 1 +1260 0x800A74D0 0x800A75CC 252 exact 2 frame 1 - 1 +1261 0x800FF5A8 0x800FF6A4 252 exact 2 frame 2 - 1 +1262 0x80046BCC 0x80046CCC 256 exact 2 frame 1 - 1 +1263 0x800911D4 0x800912D4 256 exact 2 frame 3 - 1 +1264 0x800A613C 0x800A623C 256 exact 2 frame 2 - 1 +1265 0x800BCA14 0x800BCB14 256 exact 2 frame 3 - 1 +1266 0x800FD120 0x800FD220 256 exact 2 frame 10 - 1 +1267 0x800137C8 0x800138CC 260 exact 2 frame 1 - 1 +1268 0x8002F300 0x8002F404 260 exact 2 frame 1 - 1 +1269 0x80031BBC 0x80031CC0 260 exact 2 frame 8 - 1 +1270 0x80049FE4 0x8004A0E8 260 exact 2 frame 2 - 1 +1271 0x80058CE8 0x80058DEC 260 exact 2 frame 2 - 1 +1272 0x80062D10 0x80062E14 260 exact 2 frame 1 - 1 +1273 0x800AFEB4 0x800AFFB8 260 exact 2 frame 3 - 1 +1274 0x800FA4D4 0x800FA5D8 260 exact 2 frame 4 - 1 +1275 0x80013B80 0x80013C88 264 exact 2 frame 6 - 1 +1276 0x80018458 0x80018560 264 exact 2 frame 2 - 1 +1277 0x800237B4 0x800238BC 264 exact 2 frame 7 - 1 +1278 0x800238BC 0x800239C4 264 exact 2 frame 7 - 1 +1279 0x80027ECC 0x80027FD4 264 exact 2 frame 3 - 1 +1280 0x80027FD4 0x800280DC 264 exact 2 frame 3 - 1 +1281 0x800281E4 0x800282EC 264 exact 2 frame 4 - 1 +1282 0x800308C4 0x800309CC 264 exact 2 frame 4 - 1 +1283 0x80037770 0x80037878 264 exact 2 frame 2 - 1 +1284 0x80058EE4 0x80058FEC 264 exact 2 frame 7 - 1 +1285 0x8005BE3C 0x8005BF44 264 exact 2 frame 4 - 1 +1286 0x8006CFB0 0x8006D0B8 264 exact 2 frame 6 - 1 +1287 0x800747E4 0x800748EC 264 exact 2 frame 12 - 1 +1288 0x8009D798 0x8009D8A0 264 exact 2 frame 2 - 1 +1289 0x800AC884 0x800AC98C 264 exact 2 frame 4 - 1 +1290 0x800B6E5C 0x800B6F64 264 exact 2 frame 3 - 1 +1291 0x801031C4 0x801032CC 264 exact 2 frame 2 - 1 +1292 0x800139E4 0x80013AF0 268 exact 2 frame 3 - 1 +1293 0x80027430 0x8002753C 268 exact 2 frame 9 - 1 +1294 0x80037878 0x80037984 268 exact 2 frame 2 - 1 +1295 0x8003B178 0x8003B284 268 exact 2 frame 2 - 1 +1296 0x800439D8 0x80043AE4 268 exact 2 frame 5 - 1 +1297 0x80057418 0x80057524 268 exact 2 frame 2 - 1 +1298 0x8005E070 0x8005E17C 268 exact 2 frame 2 - 1 +1299 0x8009F3A8 0x8009F4B4 268 exact 2 frame 3 - 1 +1300 0x8005AD44 0x8005AE54 272 exact 2 frame 0 - 1 +1301 0x800734DC 0x800735EC 272 exact 2 frame 3 - 1 +1302 0x80079DDC 0x80079EEC 272 exact 2 frame 1 - 1 +1303 0x800921C0 0x800922D0 272 exact 2 frame 4 - 1 +1304 0x800A6E9C 0x800A6FAC 272 exact 2 frame 3 - 1 +1305 0x800AA59C 0x800AA6AC 272 exact 2 frame 2 - 1 +1306 0x800C5168 0x800C5278 272 exact 2 frame 1 - 1 +1307 0x8002DD14 0x8002DE28 276 exact 2 frame 2 - 1 +1308 0x8002F1D8 0x8002F2EC 276 exact 2 frame 3 - 1 +1309 0x80031FC4 0x800320D8 276 exact 2 frame 1 - 1 +1310 0x800320D8 0x800321EC 276 exact 2 frame 1 - 1 +1311 0x80064858 0x8006496C 276 exact 2 frame 2 - 1 +1312 0x8006BF30 0x8006C044 276 exact 2 frame 2 - 1 +1313 0x8007C524 0x8007C638 276 exact 2 frame 4 - 1 +1314 0x8008E2D0 0x8008E3E4 276 exact 2 frame 2 - 1 +1315 0x800B1E80 0x800B1F94 276 exact 2 frame 3 - 1 +1316 0x800138CC 0x800139E4 280 exact 2 frame 3 - 1 +1317 0x8003A6E0 0x8003A7F8 280 exact 2 frame 3 - 1 +1318 0x800910BC 0x800911D4 280 exact 2 frame 5 - 1 +1319 0x8002DB40 0x8002DC5C 284 exact 2 frame 4 - 1 +1320 0x800529A0 0x80052ABC 284 exact 2 frame 2 - 1 +1321 0x800A4D2C 0x800A4E48 284 exact 2 frame 5 - 1 +1322 0x800F4100 0x800F421C 284 exact 2 frame 2 - 1 +1323 0x800F69BC 0x800F6AD8 284 exact 2 frame 4 - 1 +1324 0x800F95CC 0x800F96E8 284 exact 2 frame 5 - 1 +1325 0x80108168 0x80108284 284 exact 2 frame 3 - 1 +1326 0x80015FC8 0x800160E8 288 exact 2 frame 7 - 1 +1327 0x800289B4 0x80028AD4 288 exact 2 frame 0 - 1 +1328 0x80044FA4 0x800450C4 288 exact 2 frame 1 - 1 +1329 0x80045110 0x80045230 288 exact 2 frame 1 - 1 +1330 0x8007C108 0x8007C228 288 exact 2 frame 5 - 1 +1331 0x8008B960 0x8008BA80 288 exact 2 frame 4 - 1 +1332 0x800C1304 0x800C1424 288 exact 2 frame 2 - 1 +1333 0x800FC8D0 0x800FC9F0 288 exact 2 frame 1 - 1 +1334 0x80089E7C 0x80089FA0 292 exact 2 frame 6 - 1 +1335 0x800FB7C8 0x800FB8EC 292 exact 2 frame 3 - 1 +1336 0x800372A0 0x800373C8 296 exact 2 frame 1 - 1 +1337 0x8005DDD0 0x8005DEF8 296 exact 2 frame 5 - 1 +1338 0x80074140 0x80074268 296 exact 2 frame 7 - 1 +1339 0x800ACDAC 0x800ACED4 296 exact 2 frame 0 - 1 +1340 0x800B1C34 0x800B1D5C 296 exact 2 frame 1 - 1 +1341 0x801009E8 0x80100B10 296 exact 2 frame 5 - 1 +1342 0x80017660 0x8001778C 300 exact 2 frame 1 - 1 +1343 0x800257A8 0x800258D4 300 exact 2 frame 3 - 1 +1344 0x8002B924 0x8002BA50 300 exact 2 frame 1 - 1 +1345 0x80046DBC 0x80046EE8 300 exact 2 frame 0 - 1 +1346 0x80057CD0 0x80057DFC 300 exact 2 frame 1 - 1 +1347 0x8006B4C4 0x8006B5F0 300 exact 2 frame 1 - 1 +1348 0x8007C2DC 0x8007C408 300 exact 2 frame 1 - 1 +1349 0x800FEED0 0x800FEFFC 300 exact 2 frame 5 - 1 +1350 0x80027AB8 0x80027BE8 304 exact 2 frame 1 - 1 +1351 0x800373C8 0x800374F8 304 exact 2 frame 1 - 1 +1352 0x80042A90 0x80042BC0 304 exact 2 frame 4 - 1 +1353 0x8005A474 0x8005A5A4 304 exact 2 frame 7 - 1 +1354 0x8005A5A4 0x8005A6D4 304 exact 2 frame 10 - 1 +1355 0x80072BDC 0x80072D0C 304 exact 2 frame 4 - 1 +1356 0x800ADDE8 0x800ADF18 304 exact 2 frame 3 - 1 +1357 0x80022A98 0x80022BCC 308 exact 2 frame 1 - 1 +1358 0x80039AE4 0x80039C18 308 exact 2 frame 7 - 1 +1359 0x800630F0 0x80063224 308 exact 2 frame 2 - 1 +1360 0x800A66B0 0x800A67E4 308 exact 2 frame 2 - 1 +1361 0x800F8CBC 0x800F8DF0 308 exact 2 frame 3 - 1 +1362 0x80015B88 0x80015CC0 312 exact 2 frame 5 - 1 +1363 0x800180D8 0x80018210 312 exact 2 frame 1 - 1 +1364 0x800235C0 0x800236F8 312 exact 2 frame 1 - 1 +1365 0x80055108 0x80055240 312 exact 2 frame 3 - 1 +1366 0x800582EC 0x80058424 312 exact 2 frame 1 - 1 +1367 0x8005A33C 0x8005A474 312 exact 2 frame 1 - 1 +1368 0x8007B928 0x8007BA60 312 exact 2 frame 3 - 1 +1369 0x8008DA0C 0x8008DB44 312 exact 2 frame 3 - 1 +1370 0x800A4B70 0x800A4CA8 312 exact 2 frame 4 - 1 +1371 0x800AB3CC 0x800AB504 312 exact 2 frame 0 - 1 +1372 0x80102E20 0x80102F58 312 exact 2 frame 13 - 1 +1373 0x8001C0B0 0x8001C1EC 316 exact 2 frame 0 - 1 +1374 0x80024668 0x800247A4 316 exact 2 frame 2 - 1 +1375 0x8002CD94 0x8002CED0 316 exact 2 frame 4 - 1 +1376 0x8003B34C 0x8003B488 316 exact 2 frame 2 - 1 +1377 0x80067D34 0x80067E70 316 exact 2 frame 1 - 1 +1378 0x80078E94 0x80078FD0 316 exact 2 frame 3 - 1 +1379 0x800F8B80 0x800F8CBC 316 exact 2 frame 3 - 1 +1380 0x8001F9BC 0x8001FAFC 320 exact 2 call 1 - 1 +1381 0x80028DD4 0x80028F14 320 exact 2 frame 1 - 1 +1382 0x8007A16C 0x8007A2AC 320 exact 2 frame 4 - 1 +1383 0x8008D86C 0x8008D9AC 320 exact 2 frame 2 - 1 +1384 0x8008F338 0x8008F478 320 exact 2 frame 7 - 1 +1385 0x800BC054 0x800BC194 320 exact 2 frame 0 - 1 +1386 0x80023AB0 0x80023BF4 324 exact 2 frame 4 - 1 +1387 0x80024494 0x800245D8 324 exact 2 frame 2 - 1 +1388 0x8002CC50 0x8002CD94 324 exact 2 frame 8 - 1 +1389 0x8002CED0 0x8002D014 324 exact 2 frame 12 - 1 +1390 0x80046EE8 0x8004702C 324 exact 2 frame 1 - 1 +1391 0x8005E3F4 0x8005E538 324 exact 2 frame 2 - 1 +1392 0x80082A68 0x80082BAC 324 exact 2 frame 1 - 1 +1393 0x80082BAC 0x80082CF0 324 exact 2 frame 3 - 1 +1394 0x8009F264 0x8009F3A8 324 exact 2 frame 3 - 1 +1395 0x800ADB30 0x800ADC74 324 exact 2 frame 2 - 1 +1396 0x800F6364 0x800F64A8 324 exact 2 frame 4 - 1 +1397 0x800FCFDC 0x800FD120 324 exact 2 frame 13 - 1 +1398 0x80089FA0 0x8008A0E8 328 exact 2 frame 3 - 1 +1399 0x80095BB0 0x80095CF8 328 exact 2 frame 2 - 1 +1400 0x800BFBAC 0x800BFCF4 328 exact 2 frame 2 - 1 +1401 0x800277AC 0x800278F8 332 exact 2 frame 1 - 1 +1402 0x8004388C 0x800439D8 332 exact 2 frame 0 - 1 +1403 0x80085B90 0x80085CDC 332 exact 2 frame 3 - 1 +1404 0x800B1A64 0x800B1BB0 332 exact 2 frame 5 - 1 +1405 0x800F8DF0 0x800F8F3C 332 exact 2 frame 4 - 1 +1406 0x80027178 0x800272C8 336 exact 2 frame 5 - 1 +1407 0x80076778 0x800768C8 336 exact 2 frame 2 - 1 +1408 0x800A8564 0x800A86B4 336 exact 2 frame 2 - 1 +1409 0x800AD698 0x800AD7E8 336 exact 2 frame 2 - 1 +1410 0x800AE7A0 0x800AE8F0 336 exact 2 frame 7 - 1 +1411 0x800AF3E8 0x800AF538 336 exact 2 frame 6 - 1 +1412 0x800C1F04 0x800C2054 336 exact 2 frame 1 - 1 +1413 0x800F60A4 0x800F61F4 336 exact 2 frame 5 - 1 +1414 0x80010F30 0x80011084 340 exact 2 call 3 - 1 +1415 0x800393E0 0x80039534 340 exact 2 frame 11 - 1 +1416 0x80077D7C 0x80077ED0 340 exact 2 frame 3 - 1 +1417 0x800304D8 0x80030630 344 exact 2 frame 1 - 1 +1418 0x80045230 0x80045388 344 exact 2 frame 2 - 1 +1419 0x80047190 0x800472E8 344 exact 2 frame 1 - 1 +1420 0x80015A2C 0x80015B88 348 exact 2 frame 2 - 1 +1421 0x8002E24C 0x8002E3A8 348 exact 2 frame 9 - 1 +1422 0x8005D4C4 0x8005D620 348 exact 2 frame 0 - 1 +1423 0x80079B34 0x80079C90 348 exact 2 frame 2 - 1 +1424 0x800AA6AC 0x800AA808 348 exact 2 frame 5 - 1 +1425 0x800B6D00 0x800B6E5C 348 exact 2 frame 1 - 1 +1426 0x800FC774 0x800FC8D0 348 exact 2 frame 6 - 1 +1427 0x80028AD4 0x80028C34 352 exact 2 frame 9 - 1 +1428 0x8005E63C 0x8005E79C 352 exact 2 frame 7 - 1 +1429 0x800704BC 0x8007061C 352 exact 2 frame 1 - 1 +1430 0x800735EC 0x8007374C 352 exact 2 frame 2 - 1 +1431 0x8007EBEC 0x8007ED4C 352 exact 2 frame 1 - 1 +1432 0x800ABA28 0x800ABB88 352 exact 2 frame 2 - 1 +1433 0x800F6F70 0x800F70D0 352 exact 2 frame 4 - 1 +1434 0x800F7FD8 0x800F8138 352 exact 2 frame 3 - 1 +1435 0x8004702C 0x80047190 356 exact 2 frame 1 - 1 +1436 0x800556E8 0x8005584C 356 exact 2 frame 1 - 1 +1437 0x800A9768 0x800A98CC 356 exact 2 frame 5 - 1 +1438 0x800B5AF8 0x800B5C5C 356 exact 2 frame 1 - 1 +1439 0x800272C8 0x80027430 360 exact 2 frame 10 - 1 +1440 0x80033DC8 0x80033F30 360 exact 2 frame 1 - 1 +1441 0x80065794 0x800658FC 360 exact 2 frame 2 - 1 +1442 0x80101CDC 0x80101E44 360 exact 2 frame 11 - 1 +1443 0x80106ED4 0x8010703C 360 exact 2 frame 5 - 1 +1444 0x8003126C 0x800313D8 364 exact 2 frame 0 - 1 +1445 0x80047DE0 0x80047F4C 364 exact 2 frame 3 - 1 +1446 0x8009B638 0x8009B7A4 364 exact 2 frame 4 - 1 +1447 0x80028844 0x800289B4 368 exact 2 frame 11 - 1 +1448 0x8007DF34 0x8007E0A4 368 exact 2 frame 6 - 1 +1449 0x80083878 0x800839E8 368 exact 2 frame 2 - 1 +1450 0x8009CE58 0x8009CFC8 368 exact 2 frame 2 - 1 +1451 0x80012B88 0x80012CFC 372 exact 2 frame 1 - 1 +1452 0x800164EC 0x80016660 372 exact 2 frame 2 - 1 +1453 0x80038BD4 0x80038D48 372 exact 2 frame 1 - 1 +1454 0x8003D594 0x8003D708 372 exact 2 frame 4 - 1 +1455 0x800ADC74 0x800ADDE8 372 exact 2 frame 1 - 1 +1456 0x800BA8D4 0x800BAA48 372 exact 2 frame 0 - 1 +1457 0x800F3E8C 0x800F4000 372 exact 2 frame 9 - 1 +1458 0x8004780C 0x80047984 376 exact 2 frame 3 - 1 +1459 0x8006EE44 0x8006EFBC 376 exact 2 frame 5 - 1 +1460 0x8009BDF0 0x8009BF68 376 exact 2 frame 2 - 1 +1461 0x800F7660 0x800F77D8 376 exact 2 frame 2 - 1 +1462 0x800FFC3C 0x800FFDB4 376 exact 2 frame 3 - 1 +1463 0x8002EF54 0x8002F0D0 380 exact 2 frame 2 - 1 +1464 0x80034E50 0x80034FCC 380 exact 2 frame 2 - 1 +1465 0x800B5924 0x800B5AA0 380 exact 2 frame 2 - 1 +1466 0x800BD5E8 0x800BD764 380 exact 2 frame 4 - 1 +1467 0x8001FD38 0x8001FEB8 384 exact 2 frame 2 - 1 +1468 0x80038DD8 0x80038F58 384 exact 2 frame 5 - 1 +1469 0x8003F010 0x8003F190 384 exact 2 frame 6 - 1 +1470 0x8005D620 0x8005D7A0 384 exact 2 frame 1 - 1 +1471 0x800228D8 0x80022A60 392 exact 2 frame 5 - 1 +1472 0x800B1114 0x800B129C 392 exact 2 frame 3 - 1 +1473 0x800374F8 0x80037684 396 exact 2 frame 3 - 1 +1474 0x8008D6E0 0x8008D86C 396 exact 2 frame 8 - 1 +1475 0x800BF5A8 0x800BF734 396 exact 2 frame 1 - 1 +1476 0x800BFCF4 0x800BFE80 396 exact 2 frame 1 - 1 +1477 0x80026A9C 0x80026C2C 400 exact 2 frame 7 - 1 +1478 0x800914E4 0x80091674 400 exact 2 frame 10 - 1 +1479 0x80026C7C 0x80026E10 404 exact 2 frame 7 - 1 +1480 0x80029118 0x800292AC 404 exact 2 frame 0 - 1 +1481 0x80046884 0x80046A18 404 exact 2 frame 3 - 1 +1482 0x80073B74 0x80073D08 404 exact 2 frame 10 - 1 +1483 0x80079EEC 0x8007A080 404 exact 2 frame 2 - 1 +1484 0x80096364 0x800964F8 404 exact 2 frame 8 - 1 +1485 0x80109338 0x801094CC 404 exact 2 frame 5 - 1 +1486 0x800162B4 0x8001644C 408 exact 2 frame 4 - 1 +1487 0x800309CC 0x80030B64 408 exact 2 frame 3 - 1 +1488 0x8004AAF0 0x8004AC88 408 exact 2 frame 3 - 1 +1489 0x800A5D24 0x800A5EBC 408 exact 2 frame 2 - 1 +1490 0x800C5AEC 0x800C5C84 408 exact 2 frame 1 - 1 +1491 0x800199D0 0x80019B6C 412 exact 2 frame 4 - 1 +1492 0x80025FE4 0x80026180 412 exact 2 frame 1 - 1 +1493 0x8006606C 0x80066208 412 exact 2 frame 7 - 1 +1494 0x800FA338 0x800FA4D4 412 exact 2 frame 10 - 1 +1495 0x80109010 0x801091AC 412 exact 2 frame 3 - 1 +1496 0x80039168 0x80039308 416 exact 2 frame 1 - 1 +1497 0x80051F50 0x800520F0 416 exact 2 frame 0 - 1 +1498 0x8007F774 0x8007F914 416 exact 2 frame 1 - 1 +1499 0x800A8700 0x800A88A0 416 exact 2 frame 2 - 1 +1500 0x800BE828 0x800BE9C8 416 exact 2 frame 4 - 1 +1501 0x80044610 0x800447B4 420 exact 2 frame 3 - 1 +1502 0x8006B7C0 0x8006B964 420 exact 2 frame 16 - 1 +1503 0x80041A58 0x80041C00 424 exact 2 frame 8 - 1 +1504 0x800AA10C 0x800AA2B4 424 exact 2 frame 1 - 1 +1505 0x801027F8 0x801029A0 424 exact 2 frame 1 - 1 +1506 0x8002497C 0x80024B28 428 exact 2 frame 5 - 1 +1507 0x8002AAD8 0x8002AC84 428 exact 2 frame 9 - 1 +1508 0x800489D8 0x80048B84 428 exact 2 frame 3 - 1 +1509 0x800FFDB4 0x800FFF60 428 exact 2 frame 4 - 1 +1510 0x8001DECC 0x8001E07C 432 exact 2 call 3 - 1 +1511 0x8004E24C 0x8004E3FC 432 exact 2 frame 2 - 1 +1512 0x800B0ECC 0x800B107C 432 exact 2 frame 0 - 1 +1513 0x80108284 0x80108434 432 exact 2 frame 3 - 1 +1514 0x8001AC10 0x8001ADC4 436 exact 2 frame 4 - 1 +1515 0x8006F77C 0x8006F930 436 exact 2 frame 2 - 1 +1516 0x8008DFE8 0x8008E19C 436 exact 2 frame 5 - 1 +1517 0x800AA2F8 0x800AA4AC 436 exact 2 frame 2 - 1 +1518 0x800231BC 0x80023374 440 exact 2 frame 6 - 1 +1519 0x8002D828 0x8002D9E0 440 exact 2 frame 1 - 1 +1520 0x80080800 0x800809B8 440 exact 2 frame 5 - 1 +1521 0x80081174 0x8008132C 440 exact 2 frame 8 - 1 +1522 0x8009D8E0 0x8009DA98 440 exact 2 frame 1 - 1 +1523 0x80025B64 0x80025D20 444 exact 2 frame 7 - 1 +1524 0x800213C8 0x80021588 448 exact 2 frame 0 - 1 +1525 0x800559C4 0x80055B84 448 exact 2 frame 0 - 1 +1526 0x800AD7E8 0x800AD9A8 448 exact 2 frame 3 - 1 +1527 0x800AE9E0 0x800AEBA0 448 exact 2 frame 7 - 1 +1528 0x8010A1C8 0x8010A388 448 exact 2 frame 6 - 1 +1529 0x8002ACBC 0x8002AE80 452 exact 2 frame 12 - 1 +1530 0x8002FE3C 0x80030000 452 exact 2 frame 3 - 1 +1531 0x800839E8 0x80083BAC 452 exact 2 frame 2 - 1 +1532 0x800BBE90 0x800BC054 452 exact 2 frame 0 - 1 +1533 0x80018560 0x80018728 456 exact 2 frame 1 - 1 +1534 0x8001DD04 0x8001DECC 456 exact 2 frame 1 - 1 +1535 0x80068D78 0x80068F40 456 exact 2 frame 10 - 1 +1536 0x8006E1B0 0x8006E378 456 exact 2 frame 3 - 1 +1537 0x80077088 0x80077250 456 exact 2 frame 7 - 1 +1538 0x80030630 0x800307FC 460 exact 2 frame 2 - 1 +1539 0x80036DA4 0x80036F70 460 exact 2 frame 3 - 1 +1540 0x80036F70 0x8003713C 460 exact 2 frame 3 - 1 +1541 0x800590D8 0x800592A4 460 exact 2 frame 6 - 1 +1542 0x800695D8 0x800697A4 460 exact 2 frame 4 - 1 +1543 0x8008F114 0x8008F2E0 460 exact 2 frame 6 - 1 +1544 0x80099E84 0x8009A050 460 exact 2 frame 1 - 1 +1545 0x801095A8 0x80109774 460 exact 2 frame 4 - 1 +1546 0x800192D8 0x800194A8 464 exact 2 frame 0 - 1 +1547 0x8002BA50 0x8002BC20 464 exact 2 frame 14 - 1 +1548 0x8002E9F4 0x8002EBC4 464 exact 2 frame 6 - 1 +1549 0x8003A7F8 0x8003A9C8 464 exact 2 frame 10 - 1 +1550 0x800BBC1C 0x800BBDEC 464 exact 2 frame 0 - 1 +1551 0x800C022C 0x800C03FC 464 exact 2 frame 3 - 1 +1552 0x800F7B84 0x800F7D54 464 exact 2 frame 5 - 1 +1553 0x8002D3F4 0x8002D5C8 468 exact 2 frame 11 - 1 +1554 0x8001D7B0 0x8001D98C 476 exact 2 frame 0 - 1 +1555 0x80047F4C 0x80048128 476 exact 2 frame 3 - 1 +1556 0x80052ABC 0x80052C98 476 exact 2 frame 0 - 1 +1557 0x80074394 0x80074570 476 exact 2 frame 12 - 1 +1558 0x80078FD0 0x800791AC 476 exact 2 frame 7 - 1 +1559 0x80101878 0x80101A54 476 exact 2 frame 4 - 1 +1560 0x80044D78 0x80044F58 480 exact 2 frame 11 - 1 +1561 0x8006496C 0x80064B4C 480 exact 2 frame 6 - 1 +1562 0x80064B4C 0x80064D2C 480 exact 2 frame 4 - 1 +1563 0x8006AB7C 0x8006AD5C 480 exact 2 frame 12 - 1 +1564 0x800FBBA0 0x800FBD80 480 exact 2 frame 14 - 1 +1565 0x80106CF4 0x80106ED4 480 exact 2 frame 9 - 1 +1566 0x8001C450 0x8001C634 484 exact 2 frame 3 - 1 +1567 0x80059DF8 0x80059FDC 484 exact 2 frame 1 - 1 +1568 0x80070270 0x80070454 484 exact 2 frame 2 - 1 +1569 0x80052424 0x8005260C 488 exact 2 frame 7 - 1 +1570 0x80069398 0x80069580 488 exact 2 frame 3 - 1 +1571 0x800FA150 0x800FA338 488 exact 2 frame 21 - 1 +1572 0x8003F7CC 0x8003F9B8 492 exact 2 frame 2 - 1 +1573 0x80065980 0x80065B6C 492 exact 2 frame 1 - 1 +1574 0x801078A4 0x80107A94 496 exact 2 frame 11 - 1 +1575 0x80024C34 0x80024E28 500 exact 2 frame 3 - 1 +1576 0x80064664 0x80064858 500 exact 2 frame 3 - 1 +1577 0x800652A0 0x80065494 500 exact 2 frame 6 - 1 +1578 0x800A4F8C 0x800A5180 500 exact 2 frame 0 - 1 +1579 0x80016BD4 0x80016DCC 504 exact 2 frame 1 - 1 +1580 0x8007ED8C 0x8007EF84 504 exact 2 frame 6 - 1 +1581 0x800C52F4 0x800C54EC 504 exact 2 frame 3 - 1 +1582 0x80030000 0x800301FC 508 exact 2 frame 10 - 1 +1583 0x80031CC0 0x80031EBC 508 exact 2 frame 7 - 1 +1584 0x80014054 0x80014258 516 exact 2 frame 6 - 1 +1585 0x800254EC 0x800256F0 516 exact 2 frame 5 - 1 +1586 0x80029C84 0x80029E88 516 exact 2 frame 2 - 1 +1587 0x8007BA60 0x8007BC64 516 exact 2 frame 4 - 1 +1588 0x8009AC28 0x8009AE2C 516 exact 2 frame 3 - 1 +1589 0x800B0BE0 0x800B0DE4 516 exact 2 frame 8 - 1 +1590 0x80067E70 0x80068078 520 exact 2 frame 5 - 1 +1591 0x800150A0 0x800152AC 524 exact 2 frame 13 - 1 +1592 0x80015DBC 0x80015FC8 524 exact 2 frame 5 - 1 +1593 0x800194A8 0x800196B4 524 exact 2 frame 2 - 1 +1594 0x80043B80 0x80043D8C 524 exact 2 frame 5 - 1 +1595 0x80098E18 0x80099024 524 exact 2 frame 13 - 1 +1596 0x80010444 0x80010654 528 exact 2 frame 0 - 1 +1597 0x80038F58 0x80039168 528 exact 2 frame 3 - 1 +1598 0x8007CFFC 0x8007D20C 528 exact 2 frame 3 - 1 +1599 0x800A6C8C 0x800A6E9C 528 exact 2 frame 11 - 1 +1600 0x80104720 0x80104930 528 exact 2 frame 2 - 1 +1601 0x8004B438 0x8004B64C 532 exact 2 frame 3 - 1 +1602 0x800697FC 0x80069A10 532 exact 2 frame 3 - 1 +1603 0x800AD484 0x800AD698 532 exact 2 frame 5 - 1 +1604 0x800295D4 0x800297F4 544 exact 2 frame 6 - 1 +1605 0x8002D608 0x8002D828 544 exact 2 frame 2 - 1 +1606 0x8009D47C 0x8009D69C 544 exact 2 frame 0 - 1 +1607 0x8009C904 0x8009CB28 548 exact 2 frame 3 - 1 +1608 0x8001778C 0x800179B8 556 exact 2 frame 4 - 1 +1609 0x80059504 0x80059730 556 exact 2 frame 4 - 1 +1610 0x80063900 0x80063B2C 556 exact 2 frame 10 - 1 +1611 0x8003C590 0x8003C7C0 560 exact 2 frame 11 - 1 +1612 0x8008A1D0 0x8008A400 560 exact 2 frame 3 - 1 +1613 0x800BF734 0x800BF968 564 exact 2 frame 5 - 1 +1614 0x800FB8EC 0x800FBB20 564 exact 2 frame 11 - 1 +1615 0x8009D244 0x8009D47C 568 exact 2 frame 3 - 1 +1616 0x800B6090 0x800B62C8 568 exact 2 frame 13 - 1 +1617 0x80029A48 0x80029C84 572 exact 2 frame 2 - 1 +1618 0x8007F07C 0x8007F2B8 572 exact 2 frame 9 - 1 +1619 0x80018728 0x8001896C 580 exact 2 frame 3 - 1 +1620 0x80041DA0 0x80041FE4 580 exact 2 frame 6 - 1 +1621 0x800BF968 0x800BFBAC 580 exact 2 frame 5 - 1 +1622 0x8001C1EC 0x8001C434 584 exact 2 frame 0 - 1 +1623 0x8009AE2C 0x8009B074 584 exact 2 frame 0 - 1 +1624 0x800B0940 0x800B0B88 584 exact 2 frame 7 - 1 +1625 0x80023374 0x800235C0 588 exact 2 frame 0 - 1 +1626 0x80062E14 0x80063060 588 exact 2 frame 8 - 1 +1627 0x800B6894 0x800B6AE0 588 exact 2 frame 7 - 1 +1628 0x80016704 0x80016954 592 exact 2 frame 4 - 1 +1629 0x800A7E68 0x800A80B8 592 exact 2 frame 3 - 1 +1630 0x800AFB6C 0x800AFDBC 592 exact 2 frame 2 - 1 +1631 0x8002C930 0x8002CB84 596 exact 2 frame 23 - 1 +1632 0x8006AE54 0x8006B0A8 596 exact 2 frame 0 - 1 +1633 0x800283F4 0x8002864C 600 exact 2 frame 5 - 1 +1634 0x8009736C 0x800975C4 600 exact 2 frame 10 - 1 +1635 0x800C4F10 0x800C5168 600 exact 2 frame 2 - 1 +1636 0x80050998 0x80050BF4 604 exact 2 frame 2 - 1 +1637 0x80065E10 0x8006606C 604 exact 2 frame 4 - 1 +1638 0x800C29D4 0x800C2C30 604 exact 2 frame 6 - 1 +1639 0x8001CB3C 0x8001CD9C 608 exact 2 call 1 - 1 +1640 0x800F5E44 0x800F60A4 608 exact 2 frame 5 - 1 +1641 0x800B5CF8 0x800B5F5C 612 exact 2 frame 2 - 1 +1642 0x800BCBBC 0x800BCE20 612 exact 2 frame 0 - 1 +1643 0x8002BE6C 0x8002C0D4 616 exact 2 frame 13 - 1 +1644 0x800571AC 0x80057418 620 exact 2 frame 2 - 1 +1645 0x800B7264 0x800B74D0 620 exact 2 frame 10 - 1 +1646 0x800FD834 0x800FDAA0 620 exact 2 frame 6 - 1 +1647 0x8003F9B8 0x8003FC28 624 exact 2 frame 3 - 1 +1648 0x80069128 0x80069398 624 exact 2 frame 2 - 1 +1649 0x80073D08 0x80073F78 624 exact 2 frame 9 - 1 +1650 0x800F4E40 0x800F50B0 624 exact 2 frame 5 - 1 +1651 0x801051CC 0x8010543C 624 exact 2 frame 3 - 1 +1652 0x8001C634 0x8001C8AC 632 exact 2 frame 4 - 1 +1653 0x80043554 0x800437CC 632 exact 2 frame 9 - 1 +1654 0x80104930 0x80104BA8 632 exact 2 frame 3 - 1 +1655 0x8009CFC8 0x8009D244 636 exact 2 frame 12 - 1 +1656 0x80016954 0x80016BD4 640 exact 2 frame 0 - 1 +1657 0x80069A10 0x80069C90 640 exact 2 frame 4 - 1 +1658 0x8008FA58 0x8008FCD8 640 exact 2 frame 5 - 1 +1659 0x800A5EBC 0x800A613C 640 exact 2 frame 4 - 1 +1660 0x80106154 0x801063D4 640 exact 2 frame 9 - 1 +1661 0x80109F48 0x8010A1C8 640 exact 2 frame 11 - 1 +1662 0x8010A444 0x8010A6C4 640 exact 2 frame 2 - 1 +1663 0x800A30D4 0x800A3358 644 exact 2 frame 5 - 1 +1664 0x80010010 0x8001029C 652 exact 2 frame 0 - 1 +1665 0x8002AEAC 0x8002B138 652 exact 2 frame 30 - 1 +1666 0x800FF800 0x800FFA8C 652 exact 2 frame 13 - 1 +1667 0x80036B14 0x80036DA4 656 exact 2 frame 3 - 1 +1668 0x800943E0 0x80094670 656 exact 2 frame 1 - 1 +1669 0x80072680 0x80072914 660 exact 2 frame 0 - 1 +1670 0x80072914 0x80072BA8 660 exact 2 frame 16 - 1 +1671 0x8002E528 0x8002E7C4 668 exact 2 frame 9 - 1 +1672 0x8006A6F0 0x8006A98C 668 exact 2 frame 0 - 1 +1673 0x800FACE8 0x800FAF84 668 exact 2 frame 7 - 1 +1674 0x80093768 0x80093A08 672 exact 2 frame 7 - 1 +1675 0x800519A8 0x80051C4C 676 exact 2 frame 1 - 1 +1676 0x800313D8 0x80031684 684 exact 2 frame 10 - 1 +1677 0x800526F0 0x800529A0 688 exact 2 frame 0 - 1 +1678 0x800F5B94 0x800F5E44 688 exact 2 frame 9 - 1 +1679 0x8007DC4C 0x8007DF00 692 exact 2 frame 3 - 1 +1680 0x8009916C 0x80099420 692 exact 2 frame 4 - 1 +1681 0x800501DC 0x80050494 696 exact 2 frame 5 - 1 +1682 0x800844B8 0x80084770 696 exact 2 frame 8 - 1 +1683 0x800A3600 0x800A38B8 696 exact 2 frame 2 - 1 +1684 0x800FF184 0x800FF43C 696 exact 2 frame 3 - 1 +1685 0x80103544 0x801037FC 696 exact 2 frame 1 - 1 +1686 0x8001AE50 0x8001B10C 700 exact 2 frame 0 - 1 +1687 0x8001B994 0x8001BC50 700 exact 2 frame 0 - 1 +1688 0x8006BC74 0x8006BF30 700 exact 2 frame 1 - 1 +1689 0x800FA980 0x800FAC44 708 exact 2 frame 10 - 1 +1690 0x801063D4 0x8010669C 712 exact 2 frame 9 - 1 +1691 0x80074F1C 0x800751E8 716 exact 2 frame 8 - 1 +1692 0x8006EFBC 0x8006F28C 720 exact 2 frame 2 - 1 +1693 0x8004C800 0x8004CAD8 728 exact 2 frame 0 - 1 +1694 0x80084770 0x80084A48 728 exact 2 frame 7 - 1 +1695 0x800FA688 0x800FA960 728 exact 2 frame 9 - 1 +1696 0x8008A47C 0x8008A758 732 exact 2 frame 7 - 1 +1697 0x8006C044 0x8006C324 736 exact 2 frame 1 - 1 +1698 0x800916DC 0x800919BC 736 exact 2 frame 9 - 1 +1699 0x80091D88 0x80092068 736 exact 2 frame 7 - 1 +1700 0x800AB0EC 0x800AB3CC 736 exact 2 frame 1 - 1 +1701 0x8007AD28 0x8007B00C 740 exact 2 frame 5 - 1 +1702 0x800A47E0 0x800A4AC8 744 exact 2 frame 2 - 1 +1703 0x80033ADC 0x80033DC8 748 exact 2 frame 5 - 1 +1704 0x800BAED4 0x800BB1C4 752 exact 2 frame 4 - 1 +1705 0x80093A84 0x80093D80 764 exact 2 frame 1 - 1 +1706 0x80078B94 0x80078E94 768 exact 2 frame 6 - 1 +1707 0x80051C4C 0x80051F50 772 exact 2 frame 2 - 1 +1708 0x8009A904 0x8009AC08 772 exact 2 frame 2 - 1 +1709 0x8004C400 0x8004C708 776 exact 2 frame 0 - 1 +1710 0x80059AF0 0x80059DF8 776 exact 2 frame 9 - 1 +1711 0x8009829C 0x800985A4 776 exact 2 frame 9 - 1 +1712 0x8006D884 0x8006DB90 780 exact 2 frame 1 - 1 +1713 0x80091A7C 0x80091D88 780 exact 2 frame 12 - 1 +1714 0x800BFF20 0x800C022C 780 exact 2 frame 1 - 1 +1715 0x80013D44 0x80014054 784 exact 2 frame 10 - 1 +1716 0x8005D1B0 0x8005D4C4 788 exact 2 frame 2 - 1 +1717 0x800748EC 0x80074C00 788 exact 2 frame 21 - 1 +1718 0x800210B0 0x800213C8 792 exact 2 frame 0 - 1 +1719 0x80025198 0x800254B0 792 exact 2 frame 5 - 1 +1720 0x80072048 0x80072360 792 exact 2 frame 12 - 1 +1721 0x800830B4 0x800833CC 792 exact 2 frame 2 - 1 +1722 0x80094670 0x80094988 792 exact 2 frame 8 - 1 +1723 0x800FCC48 0x800FCF60 792 exact 2 frame 12 - 1 +1724 0x8002B608 0x8002B924 796 exact 2 frame 3 - 1 +1725 0x8007061C 0x80070938 796 exact 2 frame 10 - 1 +1726 0x8008355C 0x80083878 796 exact 2 frame 7 - 1 +1727 0x80072360 0x80072680 800 exact 2 frame 5 - 1 +1728 0x8006DB90 0x8006DEB4 804 exact 2 frame 3 - 1 +1729 0x800292AC 0x800295D4 808 exact 2 frame 2 - 1 +1730 0x80082CF0 0x80083018 808 exact 2 frame 9 - 1 +1731 0x8009CB28 0x8009CE58 816 exact 2 frame 6 - 1 +1732 0x801042FC 0x80104630 820 exact 2 frame 18 - 1 +1733 0x80041688 0x800419D0 840 exact 2 frame 11 - 1 +1734 0x80052CAC 0x80052FF4 840 exact 2 frame 14 - 1 +1735 0x80077250 0x8007759C 844 exact 2 frame 5 - 1 +1736 0x800C54EC 0x800C583C 848 exact 2 frame 3 - 1 +1737 0x80048684 0x800489D8 852 exact 2 frame 6 - 1 +1738 0x800A98CC 0x800A9C24 856 exact 2 frame 14 - 1 +1739 0x8006CC54 0x8006CFB0 860 exact 2 frame 4 - 1 +1740 0x80059FDC 0x8005A33C 864 exact 2 frame 4 - 1 +1741 0x80031684 0x800319F0 876 exact 2 frame 14 - 1 +1742 0x8005CA30 0x8005CDA0 880 exact 2 frame 4 - 1 +1743 0x80090D00 0x80091070 880 exact 2 frame 4 - 1 +1744 0x80040884 0x80040BFC 888 exact 2 frame 4 - 1 +1745 0x800897B8 0x80089B30 888 exact 2 frame 17 - 1 +1746 0x8003C7C0 0x8003CB3C 892 exact 2 frame 9 - 1 +1747 0x80089434 0x800897B8 900 exact 2 frame 20 - 1 +1748 0x800AC2C4 0x800AC648 900 exact 2 frame 0 - 1 +1749 0x800ABB88 0x800ABF10 904 exact 2 frame 1 - 1 +1750 0x80017200 0x8001758C 908 exact 2 frame 6 - 1 +1751 0x80048E70 0x800491FC 908 exact 2 frame 10 - 1 +1752 0x8002EBC4 0x8002EF54 912 exact 2 frame 5 - 1 +1753 0x80095820 0x80095BB0 912 exact 2 frame 10 - 1 +1754 0x80034ABC 0x80034E50 916 exact 2 frame 11 - 1 +1755 0x80064230 0x800645CC 924 exact 2 frame 13 - 1 +1756 0x80072DF4 0x80073190 924 exact 2 frame 10 - 1 +1757 0x80090408 0x800907A4 924 exact 2 frame 12 - 1 +1758 0x8003DBE0 0x8003DF80 928 exact 2 frame 11 - 1 +1759 0x8004FE38 0x800501DC 932 exact 2 frame 5 - 1 +1760 0x800564AC 0x80056854 936 exact 2 frame 11 - 1 +1761 0x800ABF10 0x800AC2C4 948 exact 2 frame 4 - 1 +1762 0x80059730 0x80059AF0 960 exact 2 frame 4 - 1 +1763 0x8006F2F4 0x8006F6BC 968 exact 2 frame 1 - 1 +1764 0x8008EBFC 0x8008EFC4 968 exact 2 frame 9 - 1 +1765 0x800B7524 0x800B78EC 968 exact 2 frame 4 - 1 +1766 0x80047A14 0x80047DE0 972 exact 2 frame 9 - 1 +1767 0x80033700 0x80033ADC 988 exact 2 frame 3 - 1 +1768 0x800447B4 0x80044B90 988 exact 2 frame 12 - 1 +1769 0x80073798 0x80073B74 988 exact 2 frame 4 - 1 +1770 0x80088F38 0x80089314 988 exact 2 frame 11 - 1 +1771 0x800AAC9C 0x800AB078 988 exact 2 frame 11 - 1 +1772 0x80058608 0x800589E8 992 exact 2 frame 2 - 1 +1773 0x80071C64 0x80072048 996 exact 2 frame 15 - 1 +1774 0x8010128C 0x80101678 1004 exact 2 frame 6 - 1 +1775 0x8009B074 0x8009B464 1008 exact 2 frame 0 - 1 +1776 0x800B0550 0x800B0940 1008 exact 2 frame 11 - 1 +1777 0x80037B98 0x80037F94 1020 exact 2 frame 9 - 1 +1778 0x8007BD0C 0x8007C108 1020 exact 2 frame 10 - 1 +1779 0x800C1A58 0x800C1E54 1020 exact 2 frame 8 - 1 +1780 0x800FD278 0x800FD674 1020 exact 2 frame 10 - 1 +1781 0x80039534 0x8003993C 1032 exact 2 frame 1 - 1 +1782 0x8010669C 0x80106AA8 1036 exact 2 frame 12 - 1 +1783 0x8005CDA0 0x8005D1B0 1040 exact 2 frame 17 - 1 +1784 0x80094F54 0x80095364 1040 exact 2 frame 9 - 1 +1785 0x800331D4 0x800335E8 1044 exact 2 frame 7 - 1 +1786 0x80055240 0x80055654 1044 exact 2 frame 6 - 1 +1787 0x800868E8 0x80086CFC 1044 exact 2 frame 3 - 1 +1788 0x800A2B04 0x800A2F20 1052 exact 2 frame 7 - 1 +1789 0x800B6330 0x800B6754 1060 exact 2 frame 13 - 1 +1790 0x8003F190 0x8003F5BC 1068 exact 2 frame 2 - 1 +1791 0x80056854 0x80056C88 1076 exact 2 frame 20 - 1 +1792 0x8003879C 0x80038BD4 1080 exact 2 frame 10 - 1 +1793 0x80092460 0x80092898 1080 exact 2 frame 13 - 1 +1794 0x800AA808 0x800AAC44 1084 exact 2 frame 9 - 1 +1795 0x800B2048 0x800B2488 1088 exact 2 frame 4 - 1 +1796 0x80034638 0x80034A80 1096 exact 2 frame 7 - 1 +1797 0x8008F60C 0x8008FA58 1100 exact 2 frame 4 - 1 +1798 0x8009A4AC 0x8009A904 1112 exact 2 frame 6 - 1 +1799 0x8005A8E8 0x8005AD44 1116 exact 2 frame 15 - 1 +1800 0x8001BC50 0x8001C0B0 1120 exact 2 frame 1 - 1 +1801 0x8003EBAC 0x8003F010 1124 exact 2 frame 10 - 1 +1802 0x800BCE20 0x800BD298 1144 exact 2 frame 13 - 1 +1803 0x800C03FC 0x800C0874 1144 exact 2 frame 3 - 1 +1804 0x800A38B8 0x800A3D34 1148 exact 2 frame 15 - 1 +1805 0x80041190 0x80041610 1152 exact 2 frame 18 - 1 +1806 0x80063358 0x800637DC 1156 exact 2 frame 11 - 1 +1807 0x800B8958 0x800B8DE4 1164 exact 2 frame 10 - 1 +1808 0x800BAA48 0x800BAED4 1164 exact 2 frame 1 - 1 +1809 0x800C5CD4 0x800C6168 1172 exact 2 frame 10 - 1 +1810 0x800668F0 0x80066DA0 1200 exact 2 frame 15 - 1 +1811 0x800A6FAC 0x800A745C 1200 exact 2 frame 20 - 1 +1812 0x800B9C64 0x800BA114 1200 exact 2 frame 0 - 1 +1813 0x8005E8B8 0x8005ED6C 1204 exact 2 frame 26 - 1 +1814 0x800F2A50 0x800F2F08 1208 exact 2 frame 3 - 1 +1815 0x80095364 0x80095820 1212 exact 2 frame 3 - 1 +1816 0x800BC194 0x800BC658 1220 exact 2 frame 6 - 1 +1817 0x8002B138 0x8002B608 1232 exact 2 frame 36 - 1 +1818 0x8004D8A4 0x8004DD74 1232 exact 2 frame 6 - 1 +1819 0x8004DD74 0x8004E24C 1240 exact 2 frame 7 - 1 +1820 0x800F465C 0x800F4B54 1272 exact 2 frame 8 - 1 +1821 0x800F70D0 0x800F75C8 1272 exact 2 frame 8 - 1 +1822 0x80093E54 0x80094370 1308 exact 2 frame 15 - 1 +1823 0x80056C88 0x800571AC 1316 exact 2 frame 4 - 1 +1824 0x8005C508 0x8005CA30 1320 exact 2 frame 1 - 1 +1825 0x8007D718 0x8007DC40 1320 exact 2 frame 5 - 1 +1826 0x800B78EC 0x800B7E14 1320 exact 2 frame 0 - 1 +1827 0x80034FCC 0x800354F8 1324 exact 2 frame 13 - 1 +1828 0x80066208 0x80066738 1328 exact 2 frame 7 - 1 +1829 0x800C3C4C 0x800C417C 1328 exact 2 frame 10 - 1 +1830 0x8005BFD0 0x8005C508 1336 exact 2 frame 1 - 1 +1831 0x80054BC4 0x80055108 1348 exact 2 frame 4 - 1 +1832 0x80086388 0x800868E8 1376 exact 2 frame 15 - 1 +1833 0x8004ED90 0x8004F2F8 1384 exact 2 frame 11 - 1 +1834 0x800855D4 0x80085B44 1392 exact 2 frame 2 - 1 +1835 0x80064D2C 0x800652A0 1396 exact 2 frame 4 - 1 +1836 0x80021588 0x80021B20 1432 exact 2 frame 1 - 1 +1837 0x8007E228 0x8007E7C0 1432 exact 2 frame 3 - 1 +1838 0x8007B2A0 0x8007B83C 1436 exact 2 frame 5 - 1 +1839 0x800C14BC 0x800C1A58 1436 exact 2 frame 12 - 1 +1840 0x80018D28 0x800192D8 1456 exact 2 frame 0 - 1 +1841 0x80095D74 0x80096324 1456 exact 2 frame 11 - 1 +1842 0x800AEC48 0x800AF1FC 1460 exact 2 frame 14 - 1 +1843 0x80094988 0x80094F54 1484 exact 2 frame 22 - 1 +1844 0x800152AC 0x8001587C 1488 exact 2 frame 19 - 1 +1845 0x8009BF70 0x8009C56C 1532 exact 2 frame 12 - 1 +1846 0x8003CBE4 0x8003D224 1600 exact 2 frame 15 - 1 +1847 0x8009B7A4 0x8009BDEC 1608 exact 2 frame 11 - 1 +1848 0x80075228 0x8007587C 1620 exact 2 frame 15 - 1 +1849 0x80076110 0x80076778 1640 exact 2 frame 27 - 1 +1850 0x80099420 0x80099A94 1652 exact 2 frame 11 - 1 +1851 0x80036390 0x80036A0C 1660 exact 2 frame 9 - 1 +1852 0x8007A4FC 0x8007AB7C 1664 exact 2 frame 9 - 1 +1853 0x80085CDC 0x80086388 1708 exact 2 frame 15 - 1 +1854 0x8004CF0C 0x8004D5CC 1728 exact 2 frame 11 - 1 +1855 0x800C356C 0x800C3C4C 1760 exact 2 frame 18 - 1 +1856 0x80023DA8 0x80024494 1772 exact 2 frame 3 - 1 +1857 0x80063B2C 0x80064230 1796 exact 2 frame 17 - 1 +1858 0x80030B64 0x8003126C 1800 exact 2 frame 7 - 1 +1859 0x80033F30 0x80034638 1800 exact 2 frame 0 - 1 +1860 0x80100B2C 0x80101244 1816 exact 2 frame 13 - 1 +1861 0x8006FB44 0x80070270 1836 exact 2 frame 24 - 1 +1862 0x800BB2AC 0x800BB9FC 1872 exact 2 frame 5 - 1 +1863 0x80037F94 0x8003870C 1912 exact 2 frame 25 - 1 +1864 0x80043E98 0x80044610 1912 exact 2 frame 12 - 1 +1865 0x8009E95C 0x8009F0E8 1932 exact 2 frame 10 - 1 +1866 0x800A3D34 0x800A44CC 1944 exact 2 frame 10 - 1 +1867 0x8004AC88 0x8004B438 1968 exact 2 frame 18 - 1 +1868 0x800A8F18 0x800A96CC 1972 exact 2 frame 8 - 1 +1869 0x800809B8 0x80081174 1980 exact 2 frame 17 - 1 +1870 0x800BA114 0x800BA8D4 1984 exact 2 frame 1 - 1 +1871 0x800B129C 0x800B1A64 1992 exact 2 frame 4 - 1 +1872 0x8005AE54 0x8005B638 2020 exact 2 frame 15 - 1 +1873 0x80092B2C 0x80093330 2052 exact 2 frame 16 - 1 +1874 0x8008E3E4 0x8008EBFC 2072 exact 2 frame 6 - 1 +1875 0x8007C7CC 0x8007CFFC 2096 exact 2 frame 10 - 1 +1876 0x8001B10C 0x8001B94C 2112 exact 2 frame 1 - 1 +1877 0x80083C78 0x800844B8 2112 exact 2 frame 15 - 1 +1878 0x800C417C 0x800C49BC 2112 exact 2 frame 6 - 1 +1879 0x800985A4 0x80098E18 2164 exact 2 frame 49 - 1 +1880 0x8004A278 0x8004AAF0 2168 exact 2 frame 12 - 1 +1881 0x800713D0 0x80071C64 2196 exact 2 frame 12 - 1 +1882 0x8007587C 0x80076110 2196 exact 2 frame 33 - 1 +1883 0x8002203C 0x800228D8 2204 exact 2 frame 4 - 1 +1884 0x80050D48 0x80051628 2272 exact 2 frame 15 - 1 +1885 0x80053064 0x80053954 2288 exact 2 frame 12 - 1 +1886 0x80101EB0 0x801027CC 2332 exact 2 frame 12 - 1 +1887 0x80055B84 0x800564AC 2344 exact 2 frame 17 - 1 +1888 0x8001CE70 0x8001D7A0 2352 exact 2 frame 14 - 1 +1889 0x8006C324 0x8006CC54 2352 exact 2 frame 19 - 1 +1890 0x8008CCC0 0x8008D5F8 2360 exact 2 frame 11 - 1 +1891 0x800357D4 0x80036134 2400 exact 2 frame 21 - 1 +1892 0x800C2054 0x800C29D4 2432 exact 2 frame 17 - 1 +1893 0x80069C90 0x8006A654 2500 exact 2 frame 13 - 1 +1894 0x800A5228 0x800A5C1C 2548 exact 2 frame 23 - 1 +1895 0x8004F2F8 0x8004FE38 2880 exact 2 frame 21 - 1 +1896 0x800B7E14 0x800B8958 2884 exact 2 frame 5 - 1 +1897 0x800BEA28 0x800BF5A8 2944 exact 2 frame 16 - 1 +1898 0x8003FD00 0x80040884 2948 exact 2 frame 26 - 1 +1899 0x800975C4 0x8009829C 3288 exact 2 frame 71 - 1 +1900 0x800142F4 0x80014FE8 3316 exact 2 frame 38 - 1 +1901 0x800B8E60 0x800B9C64 3588 exact 2 frame 8 - 1 +1902 0x8009DA98 0x8009E8D0 3640 exact 2 frame 21 - 1 +1903 0x800964F8 0x8009736C 3700 exact 2 frame 32 - 1 +1904 0x80019C10 0x8001AA9C 3724 exact 2 frame 16 - 1 +1905 0x80066E58 0x80067D34 3804 exact 2 frame 39 - 1 +1906 0x800BD764 0x800BE6D8 3956 exact 2 frame 27 - 1 +1907 0x8001FECC 0x80020E6C 4000 exact 2 frame 3 - 1 +1908 0x80053954 0x80054AF8 4516 exact 2 frame 32 - 1 +1909 0x80011508 0x80012780 4728 exact 2 frame 20 - 1 +1910 0x8008132C 0x80082750 5156 exact 2 frame 34 - 1 +1911 0x80086DFC 0x80088F38 8508 exact 2 frame 38 - 1 +1912 0x8009F988 0x800A2684 11516 exact 2 frame 102 - 1 +1913 0x80100808 0x8010080C 4 fallthrough 3 leaf 0 - 1 +1914 0x80180808 0x8018080C 4 fallthrough 3 leaf 0 - 1 +1915 0x800807E0 0x80080800 32 fallthrough 3 frame 0 - 1 +1916 0x801007E0 0x80100808 40 fallthrough 3 frame 1 - 1 +# +# listed=1916 +# excluded_already_registered=12 +# excluded_degenerate_body=252 +# excluded_header_entry=1 +# excluded_low_confidence_grade=88 +# excluded_named_exclusion=2 +# excluded_no_extent=0 diff --git a/docs/PHASE7_TRIAGE.md b/docs/PHASE7_TRIAGE.md new file mode 100644 index 0000000..e22fdb2 --- /dev/null +++ b/docs/PHASE7_TRIAGE.md @@ -0,0 +1,103 @@ +# Phase 7 — Ranked Match Worklist + +**Scope:** P7-T4 — replace hand-picked match targets with a single deterministic, reproducible queue. +**Status:** complete. Tracked output: `config/match_worklist.tsv`. Tool: `tools/sf3_triage` +(25 synthetic tests). + +## Why + +Phase 6 chose match targets by reading the boundary inventory and judging by eye. The inventory itself +says the heuristic out loud — "prefer `jal`-graded, unique, small bodies" — but nothing enforced it, +nothing excluded known-bad candidates, and two people would not have produced the same list. Phase 7 +now has the evidence to do better: extents (`config/function_extents.tsv`), duplicate groups +(`config/duplicate_bodies.tsv`), and a demonstrated class of degenerate candidates. + +## Eligibility + +A candidate is listed only if all of these hold: + +| Condition | Why | +|---|---| +| Carries an extent, graded `exact` or `fallthrough` | `indirect` (jump-table switch), `escape` (control flow leaves the region), `outside`, `runaway`, `contained` and `standalone` are all excluded — and counted | +| Body is not entirely zero bytes | An all-zero body is a zero-filled region the walk ran through, not code — 252 candidates. See `docs/PHASE7_DUPES.md` | +| Not already in `config/regions.tsv` | Already matched | +| Not graded `entry` in the inventory | CRT startup is not compiler output | +| Not named by `--exclude` | The two deferred near-misses | + +## Ranking + +Rows are ordered by `(tier, size, address)`. The order is reproducible from the tracked inputs alone — +no judgement, no timestamps, no hashes. + +| Tier | Rule | Rationale | +|---|---|---| +| 0 | Duplicate-group representative with a code body | One match registers several addresses at once; the `registers` column says how many | +| 1 | `exact` and `leaf` (no call instruction in the body) | No cross-references, so no symbol rows are needed | +| 2 | `exact` and not a leaf | Needs symbol rows for its callees | +| 3 | `fallthrough` | No reachable terminal, so the extent may include alignment padding; the body may still be matchable | + +Only the **lowest-address member** of a duplicate group is listed, so a group cannot be attempted +twice. `shape` is `frame` when the body sets up a stack frame (`addiu sp,sp,-N`, N > 0), `leaf` when it +makes no call and has no frame, and `call` otherwise. + +## Results + +| Measure | Count | +|---|---| +| Listed | **1,916** | +| — tier 0 (duplicate representative) | 9 | +| — tier 1 (`exact` leaf) | 509 | +| — tier 2 (`exact` non-leaf) | 1,394 | +| — tier 3 (`fallthrough`) | 4 | +| Excluded: already registered | 12 | +| Excluded: degenerate (all-zero) body | 252 | +| Excluded: low-confidence grade | 88 | +| Excluded: header entry | 1 | +| Excluded: named (`--exclude`) | 2 | + +The head of the queue is exactly what the phase wants to attack first: + +| Rank | Address | Size | Tier | Shape | Registers | +|---|---|---|---|---|---| +| 1 | `0x80042088` | 8 | 0 | leaf | 4 | +| 2 | `0x800F7FB4` | 36 | 0 | leaf | 3 | +| 3 | `0x800F8F9C` | 36 | 0 | frame | 2 | +| 4 | `0x80010810` | 60 | 0 | leaf | 2 | +| 5 | `0x80018CB0` | 120 | 0 | leaf | 3 | +| 6 | `0x800FB13C` | 128 | 0 | leaf | 2 | +| 7 | `0x8009E8D0` | 140 | 0 | leaf | 2 | +| 8 | `0x8001D98C` | 436 | 0 | frame | 2 | +| 9 | `0x8001084C` | 712 | 0 | frame | 2 | +| 10 | `0x80100808` | 4 | 3 | leaf | 1 | + +The nine tier-0 entries are the real duplicate groups from the census; matching those nine bodies +registers **22** function addresses. Behind them sit 509 leaf functions whose smallest members are +8 bytes (`0x80013C88`, `0x800179CC`, `0x8002F2F8`, `0x80036378`, `0x80038788`, `0x80057DFC`, +`0x800FB5D4`, `0x80103FCC`, `0x80103FEC`). + +## Limits + +- A worklist entry is **not** a match. It says where to look, not what is correct; the byte gate + remains the only authority. +- `exact` is a statement about control flow, not about library-versus-game code, which is still + unresolved. +- `shape` is read from the body's own instructions. A `leaf` with an indirect `jalr` to an unmapped + address still counts as a call; a body whose calls are all in unreachable bytes would be misread. +- The exclusion counts do not sum to the total: a duplicate group's non-representative members are + dropped without a reason counter, because they are represented by the group's listed entry. + +## Regenerate + +```bash +make worklist +# or, explicitly: +./tools/sf3_triage plan --exe 'extracted/SCUS_946.40;1' \ + --extents config/function_extents.tsv --inventory config/function_inventory.tsv \ + --census config/duplicate_bodies.tsv --regions config/regions.tsv \ + --exclude 0x8005DEF8 --exclude 0x800F3160 \ + --out config/match_worklist.tsv --force +``` + +The two excluded addresses are the recorded near-misses deferred by developer direction in Phase 7 +(`0x8005DEF8`, 5-byte register tie-break; `0x800F3160`, store-in-delay-slot scheduling). Naming them +explicitly in the `Makefile` keeps the exclusion visible rather than burying it in the tool. diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/CURRENT_PHASE.md index 5671098..fca72ef 100644 --- a/phase-ends/CURRENT_PHASE.md +++ b/phase-ends/CURRENT_PHASE.md @@ -12,7 +12,7 @@ function bodies, bringing the project past **thirty** distinct byte-identical fu - [x] **P7-T1 — Phase control records, baseline revalidation, and open-item triage** (complete) - [x] **P7-T2 — Evidence-graded function extents** (complete) - [x] **P7-T3 — Duplicate-body census** (complete) -- [ ] **P7-T4 — Candidate triage worklist** +- [x] **P7-T4 — Candidate triage worklist** (complete) - [ ] **Rules check** - [ ] **P7-T5 — Symbol rows at scale** - [ ] **P7-T6 — Scaled batch A: at least fifteen new bodies** @@ -156,6 +156,55 @@ reproducible from tracked inputs alone. The plan's intent — no ROM content com **Limits:** a group is evidence of a shared body, not that every member is a function start; a shared *tail* is not a duplicate function; and the census inherits the extents' bounds. +## P7-T4 — Candidate triage worklist (2026-09-23) + +**Delivered:** + +- `tools/sf3_triage plan` — ranks eligible candidates by `(tier, size, address)` and records every + exclusion reason; 25 synthetic tests. +- `config/match_worklist.tsv` — tracked queue, + `rankaddressendsizegradetiershapecallsduplicateregisters`, + plus a comment block with the exclusion counts. +- `make worklist`; `docs/PHASE7_TRIAGE.md`. + +**Results:** **1,916 listed** — tier 0 (duplicate representative) 9, tier 1 (`exact` leaf) 509, + tier 2 (`exact` non-leaf) 1,394, tier 3 (`fallthrough`) 4. Excluded: 252 degenerate (all-zero) bodies, +88 low-confidence grades, 12 already registered, 1 header entry, 2 named (`--exclude`). + +The nine tier-0 entries are the real duplicate groups from P7-T3: matching those nine bodies registers +**22** function addresses. Behind them are 509 leaf functions, the smallest 8 bytes. + +**Eligibility rule:** an extent graded `exact`/`fallthrough`; a non-degenerate body; not already +registered; not the header entry; not named by `--exclude`. `indirect`, `escape`, `outside`, +`runaway`, `contained` and `standalone` are excluded and counted. + +**Verification:** + +| Check | Command | Result | +|---|---|---| +| Ranked order is deterministic | two `plan` runs | identical; order is `(tier, size, address)` from tracked inputs only | +| Every exclusion is counted | `plan` stdout and the file's comment block | counts printed and recorded | +| Duplicate group listed once | `awk '$9 != "-"'` | 9 rows, one per code group | +| Synthetic suite | `python3 -m unittest discover -s tools/tests` | 25 new tests pass | +| Firewall | output columns | addresses, sizes, grades, counts, group labels only | + +**Limits:** a worklist entry is not a match; `exact` says nothing about library-versus-game code; +`shape` is read from the body's instructions and can misread unreachable bytes; the exclusion counts do +not sum to the total because a duplicate group's non-representative members are dropped without a +reason counter. + +## Rules check + +Re-read `AGENTS.md` mandatory behavior after P7-T4. One task at a time; explain before changing code or +architecture; never overwrite blind; evidence before assumption with Ghidra and PCSX-Redux as the +oracles; a match is byte-for-byte with the full-binary hash green; unmatched code stays fallback; +verify from clean state and read exit codes; check duplicates before matching and share a verified body +through the documented mechanism; document uncertainty; stop after two distinct unexplained failures. +The ROM/repository firewall and the `git clean -x` prohibition stand, as does the phase discipline of +one task at a time with a checkpoint before ending a session. + +`Rules check — re-read complete. Continuing with P7-T5.` + ## Notes and limits - The four class items are the plan's P7-T2..T5 work; the single-function items are explicitly out of diff --git a/tools/sf3_triage b/tools/sf3_triage new file mode 100755 index 0000000..ffdb101 --- /dev/null +++ b/tools/sf3_triage @@ -0,0 +1,391 @@ +#!/usr/bin/env python3 +"""Ranked match worklist for the USA executable. + +Phase 6 selected match targets by hand from the boundary inventory. This tool +turns the Phase 7 evidence into a single deterministic queue: which candidates +to attempt, in what order, and what each one costs. + +## Eligibility + +A candidate is listed only if all of these hold: + + * it carries an extent (`tools/sf3_extents` grade `exact` or `fallthrough`); + * its body is not degenerate -- an all-zero body is a zero-filled region the + walk ran through, not code (see `docs/PHASE7_DUPES.md`); + * it is not already registered in the region registry; + * it is not the header entry (CRT startup is not compiler output); + * it is not named by `--exclude`. + +Candidates graded `indirect` (jump-table switch), `escape` (control flow leaves +the region), `outside`, `runaway`, `contained` or `standalone` are excluded and +counted, not listed. + +## Ranking + +Rows are ordered by `(tier, size, address)`, so the order is reproducible from +the tracked inputs alone: + + * **tier 0** -- a duplicate group representative with a code body: one match + registers several addresses at once (the `registers` column). + * **tier 1** -- `exact` and `leaf` (no call instruction in the body): no + cross-references, so no symbol rows are needed. + * **tier 2** -- `exact` and not a leaf: needs symbol rows for its callees. + * **tier 3** -- `fallthrough`: no reachable terminal, so the extent may include + alignment padding; the body may still be matchable. + +`shape` is `frame` when the body sets up a stack frame (`addiu sp,sp,-N`, N > 0), +`leaf` when it makes no call and has no frame, and `call` otherwise. + +## Output + +A tracked TSV of `rankaddressendsizegradetiershapecallsduplicateregisters`, +followed by a comment block recording the exclusion counts by reason. Addresses, +sizes, grades, counts and group labels only -- no instruction bytes. + +Nothing here promotes a candidate to a match: a match still requires an +instruction-identical `sf3_match range` comparison and the clean full-binary +gate. The worklist says where to look, not what is correct. + +Exit codes: 0 success, 2 usage or environment error. +""" + +from __future__ import annotations + +import argparse +from pathlib import Path +import struct +import sys +from typing import Sequence + + +EXE_MAGIC = b"PS-X EXE" +HEADER_SIZE = 0x800 +PAYLOAD_LMA = 0x800 + +ELIGIBLE_GRADES = ("exact", "fallthrough") + +HEADER_LINES = ( + "# Syphon Filter 3 (USA) match worklist.", + "# Columns: rankaddressendsizegradetiershapecalls" + "duplicateregisters.", + "# Ordered by (tier, size, address): tier 0 = duplicate group with code (one", + "# match, several addresses), 1 = exact leaf, 2 = exact non-leaf, 3 = fallthrough.", + "# shape: frame = sets up a stack frame, leaf = no call and no frame, else call.", + "# Addresses, sizes, grades, counts and group labels only; no bytes.", + "# A worklist entry is not a match: verify it with sf3_match range and make gate.", +) + + +class ToolError(Exception): + """A usage or environment problem; maps to exit code 2.""" + + +def parse_hex(text: str, label: str) -> int: + try: + return int(text, 16) + except ValueError as exc: + raise ToolError(f"{label}: not a hex address: {text!r}") from exc + + +def require_file(path: Path, label: str) -> Path: + if not path.is_file(): + raise ToolError(f"{label} is not a regular file: {path}") + return path + + +def resolve_output(path: Path, force: bool) -> Path: + if path.exists() or path.is_symlink(): + if not force: + raise ToolError(f"output already exists (use --force to overwrite): {path}") + if not path.is_file() or path.is_symlink(): + raise ToolError(f"output is not a regular file: {path}") + return path + + +def parse_psx_exe(header: bytes) -> tuple[int, int, int]: + if len(header) < HEADER_SIZE: + raise ToolError("executable is smaller than a PS-X EXE header") + if header[:8] != EXE_MAGIC: + raise ToolError("executable does not carry the PS-X EXE magic") + entry, _gp, text_address, text_size = struct.unpack_from(" list[tuple[int, int, str]]: + """Read a generated extents table; keep rows that carry an extent.""" + rows: list[tuple[int, int, str]] = [] + for number, raw in enumerate(path.read_text(encoding="utf-8").splitlines(), 1): + line = raw.split("#", 1)[0].strip() + if not line: + continue + fields = line.split("\t") + if len(fields) != 7: + raise ToolError(f"extents line {number}: expected seven fields") + if fields[1] == "-": + continue + address = parse_hex(fields[0], f"extents line {number}") + end = parse_hex(fields[1], f"extents line {number}") + if end <= address: + raise ToolError(f"extents line {number}: end is not after address") + rows.append((address, end, fields[5])) + if not rows: + raise ToolError("extents table contains no rows with an extent") + return rows + + +def load_entry_addresses(path: Path) -> set[int]: + """Addresses graded `entry` in the boundary inventory.""" + entries: set[int] = set() + for number, raw in enumerate(path.read_text(encoding="utf-8").splitlines(), 1): + line = raw.split("#", 1)[0].strip() + if not line: + continue + fields = line.split("\t") + if len(fields) != 2: + raise ToolError(f"inventory line {number}: expected 'addressgrades'") + names = {name.strip() for name in fields[1].split(",")} + if "entry" in names: + entries.add(parse_hex(fields[0].strip(), f"inventory line {number}")) + return entries + + +def load_registered_starts(path: Path) -> set[int]: + """Starts already registered in the region registry.""" + starts: set[int] = set() + for number, raw in enumerate(path.read_text(encoding="utf-8").splitlines(), 1): + line = raw.split("#", 1)[0].strip() + if not line: + continue + fields = line.split("\t") + if len(fields) < 3: + raise ToolError(f"region line {number}: expected at least three fields") + starts.add(parse_hex(fields[0].strip(), f"region line {number}")) + return starts + + +def load_duplicate_groups(path: Path) -> dict[int, tuple[str, int]]: + """Map every member address to (group label, member count).""" + members: dict[int, tuple[str, int]] = {} + for number, raw in enumerate(path.read_text(encoding="utf-8").splitlines(), 1): + line = raw.split("#", 1)[0].strip() + if not line: + continue + fields = line.split("\t") + if len(fields) != 6: + raise ToolError(f"census line {number}: expected six fields") + label, _size, count, addresses, _grades, flags = fields + if flags == "zero": + continue + for text in addresses.split(","): + members[parse_hex(text.strip(), f"census line {number}")] = (label, int(count)) + return members + + +def body_shape(body: bytes) -> tuple[str, int]: + """Classify a body as `frame`, `leaf` or `call`, and count its calls.""" + calls = 0 + framed = False + for offset in range(0, len(body) - 3, 4): + word = struct.unpack_from("> 26 + if opcode == 0x03: + calls += 1 + elif opcode == 0 and (word & 0x3F) == 0x09: + calls += 1 + elif opcode == 0x09: + rs = (word >> 21) & 0x1F + rt = (word >> 16) & 0x1F + immediate = word & 0xFFFF + if rs == 29 and rt == 29 and immediate != 0: + framed = True + if framed: + return "frame", calls + if calls: + return "call", calls + return "leaf", calls + + +class Candidate: + """One ranked worklist entry.""" + + __slots__ = ("address", "end", "grade", "tier", "shape", "calls", "duplicate", "registers") + + def __init__(self, address: int, end: int, grade: str, tier: int, shape: str, + calls: int, duplicate: str, registers: int) -> None: + self.address = address + self.end = end + self.grade = grade + self.tier = tier + self.shape = shape + self.calls = calls + self.duplicate = duplicate + self.registers = registers + + @property + def size(self) -> int: + return self.end - self.address + + @property + def sort_key(self) -> tuple[int, int, int]: + return (self.tier, self.size, self.address) + + +def build_worklist(payload: bytes, text_address: int, rows: Sequence[tuple[int, int, str]], + duplicates: dict[int, tuple[str, int]], excluded: set[int], + registered: set[int], entries: set[int]) -> tuple[list[Candidate], dict[str, int]]: + """Rank eligible candidates and count every exclusion reason.""" + reasons = { + "no_extent": 0, + "low_confidence_grade": 0, + "degenerate_body": 0, + "already_registered": 0, + "header_entry": 0, + "named_exclusion": 0, + } + candidates: list[Candidate] = [] + seen_duplicates: set[str] = set() + + for address, end, grade in rows: + size = end - address + if grade not in ELIGIBLE_GRADES: + reasons["low_confidence_grade"] += 1 + continue + start = address - text_address + body = payload[start:start + size] + if len(body) != size: + raise ToolError(f"extent 0x{address:08X}..0x{end:08X} is outside the payload") + if not any(body): + reasons["degenerate_body"] += 1 + continue + if address in registered: + reasons["already_registered"] += 1 + continue + if address in entries: + reasons["header_entry"] += 1 + continue + if address in excluded: + reasons["named_exclusion"] += 1 + continue + + shape, calls = body_shape(body) + group = duplicates.get(address) + if group is not None: + label, count = group + if label in seen_duplicates: + # Only the lowest-address member of a group is listed. + continue + seen_duplicates.add(label) + tier = 0 + registers = count + duplicate = label + else: + if grade == "fallthrough": + tier = 3 + elif shape == "leaf": + tier = 1 + else: + tier = 2 + registers = 1 + duplicate = "-" + candidates.append(Candidate(address, end, grade, tier, shape, calls, duplicate, registers)) + + candidates.sort(key=lambda candidate: candidate.sort_key) + return candidates, reasons + + +def format_worklist(candidates: Sequence[Candidate], reasons: dict[str, int]) -> str: + lines = list(HEADER_LINES) + for rank, candidate in enumerate(candidates, 1): + lines.append("\t".join(( + str(rank), f"0x{candidate.address:08X}", f"0x{candidate.end:08X}", + str(candidate.size), candidate.grade, str(candidate.tier), candidate.shape, + str(candidate.calls), candidate.duplicate, str(candidate.registers), + ))) + lines.append("#") + lines.append(f"# listed={len(candidates)}") + for reason in sorted(reasons): + lines.append(f"# excluded_{reason}={reasons[reason]}") + return "\n".join(lines) + "\n" + + +def command_plan(args: argparse.Namespace) -> int: + exe_path = require_file(args.exe, "executable") + extents_path = require_file(args.extents, "function extents") + inventory_path = require_file(args.inventory, "function inventory") + census_path = require_file(args.census, "duplicate-body census") + regions_path = require_file(args.regions, "region registry") + out = resolve_output(args.out, args.force) + + data = exe_path.read_bytes() + _entry, text_address, text_size = parse_psx_exe(data) + payload = data[PAYLOAD_LMA:PAYLOAD_LMA + text_size] + + rows = load_extents(extents_path) + duplicates = load_duplicate_groups(census_path) + entries = load_entry_addresses(inventory_path) + registered = load_registered_starts(regions_path) + excluded = {parse_hex(text, "--exclude") for text in args.exclude} + + candidates, reasons = build_worklist(payload, text_address, rows, duplicates, + excluded, registered, entries) + if args.limit is not None: + if args.limit < 1: + raise ToolError("--limit must be at least 1") + candidates = candidates[:args.limit] + + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(format_worklist(candidates, reasons), encoding="ascii") + + tiers = {tier: 0 for tier in range(4)} + for candidate in candidates: + tiers[candidate.tier] = tiers.get(candidate.tier, 0) + 1 + print(f"listed={len(candidates)}") + for tier in sorted(tiers): + print(f"tier_{tier}={tiers[tier]}") + for reason in sorted(reasons): + print(f"excluded_{reason}={reasons[reason]}") + print(f"output={out}") + return 0 + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter + ) + subparsers = parser.add_subparsers(dest="command", required=True) + + plan_parser = subparsers.add_parser("plan", help="build the ranked worklist") + plan_parser.add_argument("--exe", required=True, type=Path) + plan_parser.add_argument("--extents", required=True, type=Path) + plan_parser.add_argument("--inventory", required=True, type=Path) + plan_parser.add_argument("--census", required=True, type=Path) + plan_parser.add_argument("--regions", required=True, type=Path) + plan_parser.add_argument("--out", required=True, type=Path) + plan_parser.add_argument("--force", action="store_true", + help="overwrite an existing output file") + plan_parser.add_argument("--exclude", action="append", default=[], + help="address to exclude (repeatable)") + plan_parser.add_argument("--limit", type=int, default=None, + help="keep only the first N entries") + plan_parser.set_defaults(handler=command_plan) + + return parser + + +def main(argv: Sequence[str] | None = None) -> int: + parser = build_parser() + args = parser.parse_args(argv) + try: + return args.handler(args) + except ToolError as exc: + print(f"error: {exc}", file=sys.stderr) + return 2 + except OSError as exc: + print(f"error: {exc}", file=sys.stderr) + return 2 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tools/tests/test_sf3_triage.py b/tools/tests/test_sf3_triage.py new file mode 100644 index 0000000..b2c37be --- /dev/null +++ b/tools/tests/test_sf3_triage.py @@ -0,0 +1,362 @@ +"""Synthetic-only tests for the match-worklist triage tool. + +Fixtures are self-authored bytes in temporary directories. They never read the +local disc or the extracted game executable. +""" + +from __future__ import annotations + +import contextlib +import importlib.machinery +import importlib.util +import io +from pathlib import Path +import struct +import sys +import tempfile +import unittest + + +TOOL_PATH = Path(__file__).resolve().parents[1] / "sf3_triage" + + +def _load_tool() -> object: + loader = importlib.machinery.SourceFileLoader("sf3_triage_under_test", str(TOOL_PATH)) + spec = importlib.util.spec_from_loader(loader.name, loader) + if spec is None: + raise RuntimeError("could not create an import specification") + module = importlib.util.module_from_spec(spec) + sys.modules[spec.name] = module + loader.exec_module(module) + return module + + +sf3_triage = _load_tool() + +PAYLOAD = 0x80010000 + +# Payload-relative layout of the fixture. +LEAF = 0x00 # duplicate of LEAF_TWIN, exact +LEAF_TWIN = 0x08 +CALL = 0x10 # has a jal, exact +FRAME = 0x20 # sets up a frame, exact +ZERO = 0x30 # all-zero body, exact +FALL = 0x38 # fallthrough grade +REGISTERED = 0x44 # already in the region registry +ENTRY_FN = 0x4C # graded `entry` in the inventory +EXCLUDED = 0x54 # named by --exclude +LOW_CONF = 0x5C # escape grade +LEAF2 = 0x64 # exact leaf, no twin + +LEAF_BODY = (0x03E00008, 0x00000000) # jr ra; nop + + +def _words() -> list[int]: + words = [0] * (0x70 // 4) + + def put(offset: int, *values: int) -> None: + for index, value in enumerate(values): + words[offset // 4 + index] = value + + put(LEAF, *LEAF_BODY) + put(LEAF_TWIN, *LEAF_BODY) + put(CALL, 0x0C000018, 0x00000000, 0x03E00008, 0x00000000) # jal 0x60; nop; jr ra; nop + put(FRAME, 0x27BDFFF0, 0xAFBF000C, 0x03E00008, 0x27BD0010) # frame setup and restore + put(FALL, 0x00000000, 0x00000000, 0x03E00008) # nop; nop; jr ra + put(REGISTERED, 0x03E00008, 0x24020001) + put(ENTRY_FN, 0x03E00008, 0x24020002) + put(EXCLUDED, 0x03E00008, 0x24020003) + put(LOW_CONF, 0x03E00008, 0x24020004) + put(LEAF2, 0x03E00008, 0x24020005) + return words + + +def _payload() -> bytes: + return b"".join(struct.pack(" bytes: + header = bytearray(0x800) + header[:8] = b"PS-X EXE" + struct.pack_into(" str: + lines = ["# synthetic extents", + "# Columns: addressendsizenextgapgradeevidence."] + + def row(offset: int, size: int, grade: str) -> str: + start = PAYLOAD + offset + return f"0x{start:08X}\t0x{start + size:08X}\t{size}\t-\t-\t{grade}\tevidence=1" + + lines.append(row(LEAF, 8, "exact")) + lines.append(row(LEAF_TWIN, 8, "exact")) + lines.append(row(CALL, 16, "exact")) + lines.append(row(FRAME, 16, "exact")) + lines.append(row(ZERO, 8, "exact")) + lines.append(row(FALL, 12, "fallthrough")) + lines.append(row(REGISTERED, 8, "exact")) + lines.append(row(ENTRY_FN, 8, "exact")) + lines.append(row(EXCLUDED, 8, "exact")) + lines.append(row(LOW_CONF, 8, "escape")) + lines.append(row(LEAF2, 8, "exact")) + lines.append(f"0x{PAYLOAD + 0x6C:08X}\t-\t-\t-\t-\tcontained\tinside=0x80010000") + return "\n".join(lines) + "\n" + + +def _inventory_text() -> str: + return (f"# synthetic inventory\n" + f"0x{PAYLOAD + LEAF:08X}\tjal\n" + f"0x{PAYLOAD + ENTRY_FN:08X}\tentry,jal\n") + + +def _census_text() -> str: + return ( + "# synthetic census\n" + f"g0001\t8\t2\t0x{PAYLOAD + LEAF:08X},0x{PAYLOAD + LEAF_TWIN:08X}\texact,exact\t-\n" + f"g0002\t8\t2\t0x{PAYLOAD + ZERO:08X},0x{PAYLOAD + 0x34:08X}\texact,exact\tzero\n" + ) + + +def _regions_text() -> str: + return f"0x{PAYLOAD + REGISTERED:08X}\t0x{PAYLOAD + REGISTERED + 8:08X}\tsrc/f.c\n" + + +def _rows() -> list[tuple[int, int, str]]: + return [ + (PAYLOAD + LEAF, PAYLOAD + LEAF + 8, "exact"), + (PAYLOAD + LEAF_TWIN, PAYLOAD + LEAF_TWIN + 8, "exact"), + (PAYLOAD + CALL, PAYLOAD + CALL + 16, "exact"), + (PAYLOAD + FRAME, PAYLOAD + FRAME + 16, "exact"), + (PAYLOAD + ZERO, PAYLOAD + ZERO + 8, "exact"), + (PAYLOAD + FALL, PAYLOAD + FALL + 12, "fallthrough"), + (PAYLOAD + REGISTERED, PAYLOAD + REGISTERED + 8, "exact"), + (PAYLOAD + ENTRY_FN, PAYLOAD + ENTRY_FN + 8, "exact"), + (PAYLOAD + EXCLUDED, PAYLOAD + EXCLUDED + 8, "exact"), + (PAYLOAD + LOW_CONF, PAYLOAD + LOW_CONF + 8, "escape"), + (PAYLOAD + LEAF2, PAYLOAD + LEAF2 + 8, "exact"), + ] + + +def _build(**overrides: object) -> tuple[list[object], dict[str, int]]: + options = { + "duplicates": {PAYLOAD + LEAF: ("g0001", 2), PAYLOAD + LEAF_TWIN: ("g0001", 2)}, + "excluded": {PAYLOAD + EXCLUDED}, + "registered": {PAYLOAD + REGISTERED}, + "entries": {PAYLOAD + ENTRY_FN}, + } + options.update(overrides) + return sf3_triage.build_worklist( + _payload(), PAYLOAD, _rows(), options["duplicates"], options["excluded"], + options["registered"], options["entries"]) + + +class ParseTests(unittest.TestCase): + def test_rejects_missing_magic(self) -> None: + with self.assertRaises(sf3_triage.ToolError): + sf3_triage.parse_psx_exe(bytes(0x800)) + + +class LoaderTests(unittest.TestCase): + def test_extents_skip_rows_without_an_extent(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "extents.tsv" + path.write_text(_extents_text(), encoding="ascii") + self.assertEqual(len(sf3_triage.load_extents(path)), 11) + + def test_inventory_finds_entry_grades(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "inventory.tsv" + path.write_text(_inventory_text(), encoding="ascii") + self.assertEqual(sf3_triage.load_entry_addresses(path), {PAYLOAD + ENTRY_FN}) + + def test_regions_yield_starts(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "regions.tsv" + path.write_text(_regions_text(), encoding="ascii") + self.assertEqual(sf3_triage.load_registered_starts(path), {PAYLOAD + REGISTERED}) + + def test_zero_flagged_groups_are_ignored(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "census.tsv" + path.write_text(_census_text(), encoding="ascii") + members = sf3_triage.load_duplicate_groups(path) + self.assertEqual(members[PAYLOAD + LEAF], ("g0001", 2)) + self.assertNotIn(PAYLOAD + ZERO, members) + + def test_rejects_a_malformed_census_row(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + path = Path(tmp) / "census.tsv" + path.write_text("g0001\t8\t2\t0x80010000\texact\n", encoding="ascii") + with self.assertRaises(sf3_triage.ToolError): + sf3_triage.load_duplicate_groups(path) + + +class ShapeTests(unittest.TestCase): + def _body(self, offset: int, size: int) -> bytes: + return _payload()[offset:offset + size] + + def test_leaf_has_no_calls(self) -> None: + self.assertEqual(sf3_triage.body_shape(self._body(LEAF, 8)), ("leaf", 0)) + + def test_jal_counts_as_a_call(self) -> None: + self.assertEqual(sf3_triage.body_shape(self._body(CALL, 16)), ("call", 1)) + + def test_frame_setup_is_detected(self) -> None: + self.assertEqual(sf3_triage.body_shape(self._body(FRAME, 16)), ("frame", 0)) + + def test_jalr_counts_as_a_call(self) -> None: + body = struct.pack(" None: + candidates, reasons = _build() + self.assertEqual(reasons["already_registered"], 1) + self.assertEqual(reasons["header_entry"], 1) + self.assertEqual(reasons["named_exclusion"], 1) + self.assertEqual(reasons["degenerate_body"], 1) + self.assertEqual(reasons["low_confidence_grade"], 1) + self.assertEqual(reasons["no_extent"], 0) + + def test_ranked_order_is_tier_then_size_then_address(self) -> None: + candidates, _ = _build() + addresses = [candidate.address for candidate in candidates] + self.assertEqual(addresses, [ + PAYLOAD + LEAF, # tier 0: duplicate representative + PAYLOAD + LEAF2, # tier 1: exact leaf + PAYLOAD + CALL, # tier 2: exact, has a call + PAYLOAD + FRAME, # tier 2: exact, frame + PAYLOAD + FALL, # tier 3: fallthrough + ]) + + def test_duplicate_group_is_listed_once_with_its_member_count(self) -> None: + candidates, _ = _build() + listed = [candidate for candidate in candidates if candidate.duplicate != "-"] + self.assertEqual(len(listed), 1) + self.assertEqual(listed[0].address, PAYLOAD + LEAF) + self.assertEqual(listed[0].registers, 2) + self.assertEqual(listed[0].tier, 0) + + def test_registers_is_one_for_a_single_body(self) -> None: + candidates, _ = _build() + single = [candidate for candidate in candidates if candidate.address == PAYLOAD + LEAF2] + self.assertEqual(single[0].registers, 1) + + def test_shapes_and_tiers_are_recorded(self) -> None: + candidates, _ = _build() + by_address = {candidate.address: candidate for candidate in candidates} + self.assertEqual(by_address[PAYLOAD + CALL].shape, "call") + self.assertEqual(by_address[PAYLOAD + FRAME].shape, "frame") + self.assertEqual(by_address[PAYLOAD + FALL].tier, 3) + self.assertEqual(by_address[PAYLOAD + LEAF2].tier, 1) + + def test_an_entry_graded_candidate_is_never_listed(self) -> None: + candidates, _ = _build() + self.assertNotIn(PAYLOAD + ENTRY_FN, [candidate.address for candidate in candidates]) + + def test_deterministic(self) -> None: + first, _ = _build() + second, _ = _build() + self.assertEqual([candidate.address for candidate in first], + [candidate.address for candidate in second]) + + +class FormatTests(unittest.TestCase): + def test_header_columns_and_exclusion_counts(self) -> None: + candidates, reasons = _build() + text = sf3_triage.format_worklist(candidates, reasons) + body = [line for line in text.splitlines() if not line.startswith("#")] + self.assertTrue(body) + for line in body: + self.assertEqual(len(line.split("\t")), 10) + self.assertIn("# listed=5", text) + self.assertIn("# excluded_degenerate_body=1", text) + + def test_ranks_are_sequential_from_one(self) -> None: + candidates, reasons = _build() + text = sf3_triage.format_worklist(candidates, reasons) + ranks = [line.split("\t")[0] for line in text.splitlines() if not line.startswith("#")] + self.assertEqual(ranks, ["1", "2", "3", "4", "5"]) + + def test_no_body_bytes_are_written(self) -> None: + candidates, reasons = _build() + text = sf3_triage.format_worklist(candidates, reasons) + self.assertNotIn("03e00008", text.lower()) + + +class MainTests(unittest.TestCase): + def _write_inputs(self, root: Path) -> dict[str, Path]: + exe = root / "synthetic.exe" + exe.write_bytes(_synthetic_exe(_payload(), PAYLOAD)) + paths = {"exe": exe} + for name, text in (("extents", _extents_text()), ("inventory", _inventory_text()), + ("census", _census_text()), ("regions", _regions_text())): + path = root / f"{name}.tsv" + path.write_text(text, encoding="ascii") + paths[name] = path + return paths + + def _argv(self, paths: dict[str, Path], out: Path, *extra: str) -> list[str]: + return ["plan", "--exe", str(paths["exe"]), "--extents", str(paths["extents"]), + "--inventory", str(paths["inventory"]), "--census", str(paths["census"]), + "--regions", str(paths["regions"]), "--out", str(out), + "--exclude", f"0x{PAYLOAD + EXCLUDED:08X}", *extra] + + def test_plan_writes_the_worklist(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + paths = self._write_inputs(root) + out = root / "worklist.tsv" + stdout = io.StringIO() + with contextlib.redirect_stdout(stdout): + rc = sf3_triage.main(self._argv(paths, out)) + self.assertEqual(rc, 0) + text = out.read_text(encoding="ascii") + self.assertIn(f"1\t0x{PAYLOAD + LEAF:08X}", text) + self.assertIn("listed=5", stdout.getvalue()) + self.assertIn("excluded_named_exclusion=1", stdout.getvalue()) + + def test_limit_keeps_the_first_entries(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + paths = self._write_inputs(root) + out = root / "worklist.tsv" + with contextlib.redirect_stdout(io.StringIO()): + rc = sf3_triage.main(self._argv(paths, out, "--limit", "2")) + self.assertEqual(rc, 0) + body = [line for line in out.read_text(encoding="ascii").splitlines() + if not line.startswith("#")] + self.assertEqual(len(body), 2) + + def test_rejects_a_bad_limit(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + paths = self._write_inputs(root) + rc = sf3_triage.main(self._argv(paths, root / "w.tsv", "--limit", "0")) + self.assertEqual(rc, 2) + + def test_refuses_an_existing_output(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + paths = self._write_inputs(root) + out = root / "worklist.tsv" + out.write_text("", encoding="ascii") + self.assertEqual(sf3_triage.main(self._argv(paths, out)), 2) + + def test_force_overwrites(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + paths = self._write_inputs(root) + out = root / "worklist.tsv" + out.write_text("stale\n", encoding="ascii") + with contextlib.redirect_stdout(io.StringIO()): + rc = sf3_triage.main(self._argv(paths, out, "--force")) + self.assertEqual(rc, 0) + self.assertNotIn("stale", out.read_text(encoding="ascii")) + + +if __name__ == "__main__": + unittest.main()