
    UHj              	         d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
 ej                  j                  d e ee      j                         j                                ddlmZmZmZ  ee      j                         j*                  d   Zedz  Zd	Zd
ZdZdZdZdZdZg dZg dZ g dZ!ddddddddddddgZ"de#jI                  d      ddd d!e#jI                  d"      dd#d d$e#jI                  d%      dd&d d'e#jI                  d(      d)d*d d+e#jI                  d,      d)d-d gZ%ejM                  d.d/      Z'e#jI                  d(      Z(d0d1d2d3d4d5d6d7d8d4d9d:d;d<d4d=d:d;d>d4d?d@dAdBd4dCZ)d\dDZ*d]dEZ+d^dFZ,d_dGZ-d`dadHZ.dbdIZ/dcdJZ0dddKZ1dedLZ2dfdMZ3dgdNZ4dhdOZ5didPZ6djdQZ7dkdRZ8dldSZ9dmdTZ:dndUZ;	 	 	 do	 	 	 	 	 	 	 	 	 dpdVZ<dqdWZ=dqdXZ>efdrdYZ?dsdZZ@eAd[k(  r e@        yy)tzGSummarize the context+0xf2 sources behind opcode 0x20 object-base rows.    )annotationsN)Path)Any)offset_to_varead_sectionsva_to_offset   outmap1_01amap2_02d   i0Y zKruntime_selected_pointer_patched_public_selector_2_0_active_order_poll.jsoni  @ i  )activeOrderCountactiveOrder0activeOrder1activeOrder2activeSlot0DescriptoractiveSlot1DescriptoractiveSlot2DescriptorruntimeSlotBaseTable0runtimeSlotBaseTable1runtimeSlotBaseTable2runtimeObjectTable0runtimeObjectTable1runtimeObjectTable2)z'normal-route-runtime-object-table-statez!context-f2-current-frontier-valuezopcode42-object-pointer-tracezstrict-source-hotspot)zfnon-diagnostic/normal-route selector 2:0 active order/count with live 0x0059db30 object-table contentszHcurrent frontier context+0xf2 byte or equivalent runtime object selectorzYruntime trace of opcode 0x42 reader 0x00406470 resolving the current route object pointerz:strict map1_01a source hotspot or equivalent route triggerHwanse2.exez;static context+0xf2 read/write and object-table reader scan)pathdescriptionz6out/save_selector_opcode20_object_base_candidates.jsonz>opcode 0x20 object-base candidates that depend on context+0xf2z+out/save_selector_opcode20_order_space.jsonz?current selector sample coverage and active-order insufficiencyzOout/runtime_selected_pointer_patched_public_selector_2_0_active_order_poll.jsonz6diagnostic-only active order and object-table snapshotread_al_from_eax_f28a80f2000000readzmov al, byte [eax+0xf2])namebytesaccessinstructionread_cl_from_eax_f28a88f2000000zmov cl, byte [eax+0xf2]read_dl_from_ecx_f28a91f2000000zmov dl, byte [ecx+0xf2]write_al_to_ecx_f28881f2000000writezmov byte [ecx+0xf2], alwrite_imm_to_eax_f2c680f2000000zmov byte [eax+0xf2], imm8   littlezactive object initializerzloop/local object indexzOsets context+0xf2 to the table slot and stores the context in 0x0059db30[index]
0x0040c048)rolesourceExpressioneffectnearbyEvidenceVaHexzsecondary object initializerzloop/local object index + 3zOsets context+0xf2 to an offset slot and stores the context in 0x0059db3c[index]
0x0040c28bz+opcode 0x42 context+0xf2 object-base readerzcontext+0xf2z:loads dword[0x0059db30 + context[0xf2]*4] for context+0xa8
0x00406480z)alternate context+0xf2 object-base reader
0x0041d91fzobject field materializerzlinked context+0xf2z+copies linked context+0xf2 into object+0x61
0x00433439)@ O@ ipd@ iA i04C c                    d| dS )N0x08x )values    P/home/exedev/hwanse/tools/summarize_save_selector_opcode20_context_f2_sources.pyhex32rA      s    c{    c                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)r   fallbacks     r@   	load_jsonrL      s*    ;;=::dnngn677rB   c                V    | D cg c]  }|j                  d      dk(  s| c}S c c}w )Nr!   z.textget)sectionssections     r@   text_sectionsrR      s&    #+Nw{{6/Bg/MGNNNs   &&c                J    t        |d         }t        |d         }| |||z    S )Nrawraw_sizeint)exerQ   rT   rU   s       r@   section_bytesrY      s0    
gen
C7:&'HsS8^$$rB   c                x    t        ||      }|yt        d||z
        }t        t        |       ||z         }| || S )NrB   r   )r   maxminlen)rX   rP   vabeforeafteroffsetstartends           r@   nearby_bytesrd      sF    (B'F~6F?#E
c#h
'CuS>rB   c                   t        |d         }|d   }t        | ||dd      }t        | ||dd      t        j                  |i       }|dk(  xr t        |v }|dk(  xr t
        |d d v }|d	k(  xr t        fd
t        D              }	|dv }
|d   dk(  }i ||j                  d      |j                  d      |j                  d      |j                  d      |||	|
|d	S )Nr^   r#   r   0   )r_   r`      r       r+   c              3  @   K   | ]  }|d    dk(  xr |d   v   yw)r#   r    r"   Nr>   ).0patternwindow_befores     r@   	<genexpr>zclassify_ref.<locals>.<genexpr>   s5      3 	V#I(8M(II3s   >   r9   r:   rk   r,   r1   r2   r3   r4   )	r1   r2   r3   r4   usesRuntimeObjectTablecopiesF2ToChildContextcopiedFromParentContextdirectInitializerconstantWrite)rW   rd   KNOWN_EVIDENCErO   OBJECT_TABLE_BYTESCOPY_WRITE_BYTESanyPATTERNS)rX   rP   rowr^   r#   window_afterknownuses_object_tablecopies_f2_to_childcopied_from_parentdirect_initializerconstant_writerl   s               @r@   classify_refr      s   	SYB]FXr!2FL h2QGMr2&E&(O-?<-O6)S.>,sPRBS.S7* s 33 0 77^'<<N
		&!!II&89))H%$yy)>?"3"4#5/' rB   c                   t        |       }g }t        |      D ]  }t        | |      }t        |d         }t        D ]q  }d}	 |j                  |d   |      }|dk  r!||z   }	t        ||	      }
|
9t        ||
      |	k(  r*|j                  |	t        |	      |
|d   |d   |d   d       |dz   }m  t        |d	 
      D cg c]  }t        | ||       c}S c c}w )Nr^   r   r"   r!   r#   r$   )r^   vaHex
fileOffsetrk   r#   r$   r	   c                    t        | d         S )Nr^   rV   items    r@   <lambda>z&scan_context_f2_refs.<locals>.<lambda>   s    T$Z rB   key)r   rR   rY   rW   rw   findr   r   appendrA   sortedr   )rX   rP   rowsrQ   database_vark   rb   indexr^   file_offsetrx   s               r@   scan_context_f2_refsr      s   S!HD * "S'*gdm$ 	"GE		''"2E:19u_*8R8*|Hk/RVX/XKK !&r&1#*6?")("3'.}'=!  	 	"". $$@A 	S(C(  s   Cc                ,    t        fd| D              S )Nc              3  J   K   | ]  }|j                        d u sd  yw)Tr	   NrN   )rj   rx   r   s     r@   rm   zcount_where.<locals>.<genexpr>   s      9SCGGCLD$8q9s   ##)sum)r   r   s    `r@   count_wherer      s    9D999rB   c                    i }| D ]8  }t        |j                  |      xs d      }|j                  |d      dz   ||<   : t        |j                               D cg c]
  \  }}||d c}}S c c}}w )Nnoner   r	   )r?   count)strrO   r   items)r   r   countsrx   r?   r   s         r@   	histogramr      s|    F 1CGGCL*F+

5!,q0u1
 #6<<>2E5 %(  s   A/c                    i }| D ]8  }t        |j                  d      xs d      }|j                  |d      dz   ||<   : |S )Nr#   unknownr   r	   )r   rO   )r   r   rx   r#   s       r@   access_histogramr      sN    F 3SWWX&3)4FA.2v3 MrB   c                   i }| D ]  }|j                  d      xs i j                         D ]j  \  }}|j                  |i       }|xs g D ]J  }|j                  d      }||j                  |d      t        |j                  d      xs d      z   ||<   L l  t	        |j                               D 	ci c]8  \  }}|t	        |j                         d       D 	cg c]
  \  }}	||	d c}	}: c}	}}}S c c}	}w c c}	}}}w )NuniqueWatchValuesvalueHexr   r   c                    | d    | d   fS )Nr	   r   r>   r   s    r@   r   z2aggregate_watch_values_from_rows.<locals>.<lambda>   s    RVWXRYQY[_`a[bPc rB   r   )r   r   )rO   r   
setdefaultrW   r   )
r   	aggregaterx   r!   valuestarget	value_row	value_hex
value_rowsr   s
             r@    aggregate_watch_values_from_rowsr      s%   +-I ` WW%89?RFFH 	`LD&))$3F#\r `	%MM*5	$$*JJy!$<s9==QXCYC^]^?_$_y!	`	`` !'y'8 9 
 D*	 	$*:+;+;+=Cc$d
 	5 #U3
 	
 
s   8(D
 C;/D
;D
c                    | j                  |      xs g }t        |      dk7  ry |d   j                  d      |k7  ry |d   S )Nr	   r   r   )rO   r]   )watch_valuessample_countr!   r   s       r@   single_watch_valuer     sF    D!'RD
4yA~Aw{{7|+7NrB   c                F    t        | ||      }|r|j                  d      S d S )Nr   )r   rO   )r   r   r!   rx   s       r@   watch_value_hexr     s&    
\<
>C"%377:/4/rB   c                     t        | ||      d uS N)r   )r   r   r!   s      r@   watch_value_stabler     s    lL$?tKKrB   c                B    |D cg c]  }t        | ||       c}S c c}w r   )r   )r   r   namesr!   s       r@   stable_watch_hexesr     s    JOP$OL,=PPPs   c                    | r|sy t        | d      }t        |d      }||cxk  r|t        z   k  rn y dt        |z   |z
  dS y )N   r<   r=   )rW   
IMAGE_SIZE
IMAGE_BASE)r   loaded_base_hexr?   loaded_bases       r@   runtime_to_static_hexr     sV    O	2Eor*Ke6kJ66 J&4S9::rB   c                   | xs i } | s
dt         ddS | j                  d      xs g }|D cg c]  }|j                  d      s| }}|sAdt         d| j                  d      | j                  d      dd| j                  d	      xs g d
d	S t        d |D              t        |      t	        |D ch c]%  }|j                  d      s|j                  d      ' c}      }t        |      dk(  r|d   nd }g d}g d}g d}g d}	t        |      }
t        d      }|rt        |d      nd }||
d | ng }t        |      }t        |      }t        |	      }i dddt         ddd| j                  d      d| j                  d      dt        |      dd|D cg c]%  }|j                  d      s|j                  d      ' c}dt        dt        |      t        |      z
        d	| j                  d	      xs g d| j                  d       xs g d!| j                  d"      d#| j                  d$      d|d%|d|d&|
|||D cg c]  }t        ||       c}||D cg c]  }t        ||       c}||D cg c]  }t        ||       c}t        fd't        D              dddd(g d)d*S c c}w c c}w c c}w c c}w c c}w c c}w )+NFT)	available
sourcePolldiagnosticOnlyr   reachedRouteSelectorContextsequenceCountsampleCountr   observedSelectorszmissing-route-row)	r   r   r   totalSequenceCounttotalSampleCountrouteSequenceCountrouteSampleCountr   promotionStatusc              3  X   K   | ]"  }t        |j                  d       xs d       $ yw)r   r   N)rW   rO   rj   rx   s     r@   rm   zAbuild_diagnostic_runtime_object_table_evidence.<locals>.<genexpr><  s#     T#S!7!<1=Ts   (*loadedBaseHexr	   )r   r   r   )r   r   r   )r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   routeSequenceNamesr!   nonRouteSequenceCountobservedStagedSelectorsobservedPublicSaveSelectorsreachedCurrentRootanyReachedCurrentRootreachedRouteSelectoranyReachedRouteSelectorContextactiveOrderCountHexorderByteHexesc              3  8   K   | ]  }t        |        y wr   )r   )rj   r!   route_sample_countr   s     r@   rm   zAbuild_diagnostic_runtime_object_table_evidence.<locals>.<genexpr>j  s#      &
 |-?F&
s   zdiagnostic-only)z`the object-table values were captured only while loading the patched public-base diagnostic savezithe poll reaches selector 2:0 through constructed save staging, not a captured normal gameplay route savezythe stable runtime object table explains the diagnostic run but does not prove a normal-route context+0xf2 object pointer)activeOrderHexesactiveSlotFirstDwordsHexactiveSlotFirstDwordsStaticHexruntimeSlotBaseTableHexesruntimeSlotBaseTableStaticHexesruntimeObjectTableHexesruntimeObjectTableStaticHexesallWatchedValuesStable"specificRuntimeObjectPointerProvennormalRouteProofnotRoutePromotionProofr   nonPromotingBecause)DIAGNOSTIC_ACTIVE_ORDER_POLLrO   r   r   r   r]   r   r   rW   r[   r   allACTIVE_ORDER_WATCH_NAMES)active_order_pollall_rowsrx   
route_rowsloaded_basesr   order_byte_namesactive_slot_namesslot_base_table_namesobject_table_namesorder_byte_hexesactive_order_count_hexactive_order_countactive_order_hexesslot_first_dwordsslot_base_tableobject_tabler?   r   r   s                     @@r@   .build_diagnostic_runtime_object_table_evidencer   &  s   )/R6"
 	

 !$$V,2H!)T#SWW5R-S#TJT6""3"7"7"H 1 5 5m D"# !!2!6!67J!K!Qr2

 
	
 TTT3J?LzfSWWUdMe377?3fgL),\):a)?l1oTOGcg^),8JL\],\;MOab<R3R8X\BTB`)*=+=>fh*<9KM^_(7IK`aO%l4FHZ[L,T,2, 	$, 	/33OD	,
 	-11-@, 	c*o, 	., 	*X3PVswwvX, 	 QHJ(G!H, 	.223FGM2, 	"#4#8#89V#W#][], 	/334KL, 	 1 5 56V W, 	, 	5,  	.!," 	*#,$ /$5GX+
>C!%9+
 &5GV,
>C!%9,
 $0GS*
>C!%9*
 #& &
0&
 #
 /4!"&, 
O, ,9 U g* Y+
,
*
s5   KK4KK*KKK
5KK c                r    dD ci c]'  }| j                  |      dvr|| j                  |      ) c}S c c}w )N)r   r#   r$   r1   r2   r3   r4   rn   ro   rp   rq   )NFrN   )rx   r   s     r@   compact_rowr   z  sC    
 773<}, 	SWWS\  s   ,4c                   ||nt        t        dz  i       }||nt        t        dz  i       }t        |       }|D cg c]  }|j                  d      dk(  s| }}|D cg c]  }|j                  d      dk(  s| }}|D cg c]  }|j                  d      s| }}|D cg c]  }|j                  d      r| }	}|D cg c]  }|j                  d      r| }
}|D cg c]  }|j                  d	      r| }}t	        |j                  d
      xs d      }t	        |j                  d      xs d      }t	        |j                  d      xs d      }|j                  d      }|j                  d      }t        |      }d}i dt        dt        dddt        t              dt        |      dt        |      dt        |      dt        |      dt        |d      dt        |	      dt        |
      dt        |      dt        |d       d!|D cg c]  }t        |       c}d"|
D cg c]  }t        |       c}d#|	d d$ D cg c]  }t        |       c}d%|i d|d&|d|d|d'|d(d)d*d)d+d,d-d)d.d)d/t        d0t         d1t"        d2t        t"              d3d4d5g d6d7|S c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )8N2save_selector_opcode20_object_base_candidates.json'save_selector_opcode20_order_space.jsonr#   r    r+   r1   rn   rq   rp   candidateCountr   contextF2ObjectSelectorCount"immediateObjectIndexCandidateCountcurrentFrontierSampleCoveredactiveOrderAlonePromotesRoutea  The opcode 0x20 object-base candidates all rely on context+0xf2, but the f2 byte is a runtime object-slot selector. Static code evidence finds only runtime initializers/copies and object-table readers, with no constant f2 assignment or fixed stream+2 object index for the current route. The patched public-base diagnostic poll now captures a stable active order and 0x0059db30 object-table snapshot, but that capture is constructed diagnostic evidence rather than a normal-route proof. Because the current selector sample is still uncovered and active order alone does not promote the route, context+0xf2 cannot identify a specific map1_01a->map2_02d gate object without non-diagnostic runtime object-table state or an equivalent trace.sourcer   contextFieldOffsetHex
0x000000f2runtimeObjectTableHexreferenceCountreadReferenceCountwriteReferenceCountaccessHistogrampatternHistogramrk   runtimeObjectTableReaderCountdirectInitializerCountcopyWriterCountconstantWriteCountrr   knownEvidenceRowsdirectInitializerRowssampleRuntimeObjectTableReadersr   objectBaseCandidateCountfixedStream2ObjectSelectorCount$diagnosticRuntimeObjectTableEvidence+fixedContextF2ValueProvenForCurrentFrontierFr   runtimeObjectTableStateRequiredT
proofFoundopcode20ContextF2ProofFoundfailedOpcode20ContextF2GateIdsmissingEvidenceevidenceRefsevidenceRefCountr   blockedremainingProofs)zncapture non-diagnostic/normal-route selector 2:0 active order/count with live 0x0059db30 object-table contentsz[trace the opcode 0x42 read at 0x00406470 to a concrete context+0xf2 slot and object pointerzWfind a strict map1_01a source hotspot if object-table state cannot be proven statically
conclusion)rL   OUTr   rO   rW   r   SOURCETARGETrA   RUNTIME_OBJECT_TABLEr]   r   r   r   r   #FAILED_OPCODE20_CONTEXT_F2_GATE_IDS$OPCODE20_CONTEXT_F2_MISSING_EVIDENCE!OPCODE20_CONTEXT_F2_EVIDENCE_REFS)rX   object_base_candidatesorder_spacer   r   rx   readswrites
known_rowsobject_base_reader_rowsdirect_initializer_rowscopy_writer_rowsobject_candidate_countcontext_f2_candidate_countfixed_stream2_countcurrent_sample_coveredactive_order_promotesdiagnostic_runtime_object_tabler"  s                      r@   build_summaryr8    s    8N7Y3_hBB
` "-!8+i77
?K  $D @SCGGH$5$?S@E@!BcSWWX%6'%AcBFB!%9##9J977+, 	 
 77&' 	 
 77,- 	  !!7!;!;<L!M!RQRS!$%;%?%?@^%_%dcd!e4889]^cbcd(__-KL'OO,KL&TUf&g#	| '&'&' 	 ' 	 ';!<	'
 	#d)' 	c%j' 	s6{' 	+D1' 	IdI6' 	(-D)E' 	!#&=">' 	3/0' 	k$@' 	*E3k#.E' 	 >U!Vs+c"2!V'  	*H_`cacHd+eK,<+e!'" 	#$:#'$ 	'(B%'& 	*+>''( 	'(>)'* 	()>+', 	/0O-'. 	6u/'0 	-e1'2 	*43'4 	e5'6 	&u7'8 	)*M9': 	?;'< 	9='> 	C AB?'@ 	9A'B 	 
C'L 	jM' '= AB9B F!V+esG   KK"K<KKK'KK'K!K;K$K)c                   | j                  d      xs i }dyd}ddd| d    d| d    d	d
| d    d	d| d    d	d| d    d| d    d| d    d| d    d| d    d| d    d| d    d| d    d| d    d | d!    d"| d#    d$| d%    d&| d'    d(| d)    d	d*| d+    d	d,| d-    d	d| d.   dd/dg}|j                  d0 | d1   D               |j                  g d2       |j                  d3 | d4   D               |j                  g d5       |j                  d6 | d7   D               |j                  dd8dd9d:d;|j                  d<       d=d>|j                  d?       d=d@|j                  dA       d=dB|j                  dC       dD|j                  dE       dFdG|j                  dH       dD|j                  dI       dJdK ||j                  dL             d=dM ||j                  dN             d=dO|j                  dP       d=dQ|j                  dR       d=dS ||j                  dT             d=dU ||j                  dV             d=dW ||j                  dX             d=dY ||j                  dZ             d=d[ ||j                  d\             d=d]|j                  d^       d=d_|j                  d`       d=da|j                  d-       d=ddbddcddg       | de   D ]  }|j                  df|j                  dg       dh|j                  di       dj|j                  dk       dh|j                  dl      xs dm dn|j                  do      xs dm dn|j                  dp      xs dm dj|j                  dq      xs dm d=        |j                  g dr       | ds   D ]R  }|j                  df|j                  dg       dh|j                  do      xs dm dn|j                  dp      xs dm dt       T |j                  g du       |j                  dv | j                  dw      xs g D               |j                  d       dxj                  |      S )zNr  c                B    dj                  d | xs g D              xs dS )N, c              3  8   K   | ]  }|t        |        y wr   r   rj   r?   s     r@   rm   z0markdown.<locals>.join_values.<locals>.<genexpr>       SARUS   -joinr   s    r@   join_valueszmarkdown.<locals>.join_values  !    yyS2SSZWZZrB   z0# Save Selector Opcode 0x20 Context+0xf2 Sources z
- route: `r  z -> r   `z- context field: `r  z- runtime object table: `r  z- context+0xf2 refs in .text: r	  z- reads/writes: r
  /r  z - runtime object-table readers: r  z- direct f2 initializers: r  z- f2 copy writers: r  z- constant f2 writes: r  z#- opcode20 object-base candidates: r  z!- context+0xf2 object selectors: r  z#- fixed stream+2 object selectors: r  z#- current selector sample covered: r  z%- active order alone promotes route: r  z*- specific runtime object pointer proven: r   z- proofFound: `r  z - opcode20ContextF2ProofFound: `r  z- promotion status: `r   r"  z## Failed Gatesc              3  (   K   | ]
  }d | d  yw)- `rH  Nr>   rj   r   s     r@   rm   zmarkdown.<locals>.<genexpr>  s     U43tfAUs   r  )rG  z## Missing EvidencerG  c              3  &   K   | ]	  }d |   ywz- Nr>   rL  s     r@   rm   zmarkdown.<locals>.<genexpr>  s     D2dVD   r  )rG  z## Evidence RefsrG  c              3  8   K   | ]  }d |d    d|d      yw)rK  r   z`: r   Nr>   r   s     r@   rm   zmarkdown.<locals>.<genexpr>  s/       c&k]#c-012s   r  z"## Diagnostic Runtime Object Tablez| field | value |z| --- | --- |z| source poll | `r   z` |z| available | `r   z| diagnostic only | `r   z| route samples | `r   z
` across `r   z` route-reaching sequence(s) |z| total samples | `r   r   z` sequence(s) |z| route sequence names | `r   z| observed selectors | `r   z| loaded base | `r   z| active order count | `r   z| active order bytes | `r   z| active order used bytes | `r   z%| active slot first dwords static | `r   z$| runtime slot-base table static | `r   z!| runtime object table static | `r   z| all watched values stable | `r   z| normal route proof | `r   z| promotion status | `z## Known EvidencezH| va | access | instruction | role | source | effect | nearby evidence |z+| --- | --- | --- | --- | --- | --- | --- |r  z| `r   z` | r#   z | `r$   r1   rA  z | r2   r3   r4   )rG  z## Direct InitializersrG  z| va | source | effect |z| --- | --- | --- |r  z |)rG  z## Remaining ProofsrG  c              3  &   K   | ]	  }d |   ywrN  r>   rL  s     r@   rm   zmarkdown.<locals>.<genexpr>I  s     N2dVNrO  r!  
r   zlist | Nonereturnr   )rO   extendr   rC  )summary
diagnosticrE  linesrx   s        r@   markdownrY    s   CDJJ[ 	;

WX&'tGH,=+>a@
W%<=>a@
#G,C$D#EQG
(1A)B(CD
7#7897CX;Y:Z[
*73R+S*TU
$W-E%F$GH
g&789:
 )=!> ?@
-g6P.Q-RS
+G4R,S+TU
-g6W.X-YZ
-g6T.U-VW
/8W0X/YZ
4W=a5b4cd
',/02
*73P+Q*RRST
(9 :;1=


3E6 
LLU73S+TUU	LL  
 
LLD1B)CDD	LL  
 
LL >*  
LL
,

JNN<89=
*..56c:

/? @AE
jnn-?@AJNN[oLpKq  rP  	Q
jnn-?@AJNN[oLpKq  rA  	B
$[@T1U%V$WWZ[
";z~~>Q/R#S"TTWX
JNN?;<C@
":>>2G#H"IM
";z~~>N/O#P"QQTU
'JNNCU4V(W'XX[\
/JNNKk<l0m/nnqr
.{:>>Jk;l/m.nnqr
+K
Gf8g,h+iilm
)*..9Q*R)SSVW
":>>2D#E"FcJ
 0A!B C3G

R57 : *+ 
#'''"#4(9':$sww}?U>VVZwwv%#&c#''2D*E*L)MSwwx 'C(SWW5J-K-Rs,SSVX	

 
LL   ./ 
#'''"#40B(C(Js'K3swwW_O`OgdgNhhjk	

 
LL  
 
LLN5F)G)M2NN	LL99UrB   c                   | j                  d      xs i }dd}g }| d   D ]g  }|j                  dt        j                  t	        |j                  d                   dt        j                  t	        |j                  d                   dt        j                  t	        |j                  d	                   dt        j                  t	        |j                  d
      xs d             dt        j                  t	        |j                  d      xs d             dt        j                  t	        |j                  d      xs d             dt        j                  t	        |j                  d      xs d             d       j g }| d   D ]  }|j                  dt        j                  t	        |j                  d                   dt        j                  t	        |j                  d      xs d             dt        j                  t	        |j                  d      xs d             d        dj                  d | j                  d      xs g D              }dj                  d | d   D              }dj                  d | d   D              }dj                  d | d   D              }	dj                  dt        j                  t	        |j                  d                   ddt        j                  t	        |j                  d                    dd!t        j                  t	        |j                  d"                   dd#t        j                  t	        |j                  d$                   d%t        j                  t	        |j                  d&                   d'd(t        j                  t	        |j                  d)                   d%t        j                  t	        |j                  d*                   d+d,t        j                   ||j                  d-                   dd.t        j                   ||j                  d/                   dd0t        j                  t	        |j                  d1                   dd2t        j                  t	        |j                  d3                   dd4t        j                   ||j                  d5                   dd6t        j                   ||j                  d7                   dd8t        j                   ||j                  d9                   dd:t        j                   ||j                  d;                   dd<t        j                   ||j                  d=                   dd>t        j                  t	        |j                  d?                   dd@t        j                  t	        |j                  dA                   ddBt        j                  t	        |j                  dC                   dg      }
dj                  g dDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXt        j                  | dY          dZt        j                  | d[          d\| d]    d^| d_    d`| da    db| dc    dd| de    df| dg    dh| di    dj| dk    dlt        j                  t	        | dm                dnt        j                  | dC          dodpt        j                  | dq          drdsdt| dudvdt| dudwdt|	 dudxdy|
dzd{d||dzd}d~|dzddt| duddd      S )Nr  c                B    dj                  d | xs g D              xs dS )Nr;  c              3  8   K   | ]  }|t        |        y wr   r=  r>  s     r@   rm   z1html_page.<locals>.join_values.<locals>.<genexpr>R  r?  r@  rA  rB  rD  s    r@   rE  zhtml_page.<locals>.join_valuesQ  rF  rB   r  z<tr><td><code>r   z</code></td><td>r#   z</td><td><code>r$   r1   rA  z	</td><td>r2   r3   r4   z</code></td></tr>r  z
</td></tr>rR  c              3  N   K   | ]  }d t        j                  |       d  ywz<li></li>NhtmlescaperL  s     r@   rm   zhtml_page.<locals>.<genexpr>j  s#     h4dkk$/06h   #%r!  rG  c              3  N   K   | ]  }d t        j                  |       d  yw)
<li><code>z</code></li>Nr`  rL  s     r@   rm   zhtml_page.<locals>.<genexpr>k  s+       T[[&'|4rc  r  c              3  N   K   | ]  }d t        j                  |       d  ywr^  r`  rL  s     r@   rm   zhtml_page.<locals>.<genexpr>o  s+       t{{4 !'rc  r  c              3     K   | ]9  }d t        j                  |d          dt        j                  |d          d ; yw)re  r   z	</code>: r   r_  Nr`  r   s     r@   rm   zhtml_page.<locals>.<genexpr>s  sE       T[[V-.iCDV8W7XX]^s   ?Ar  z"<tr><th>source poll</th><td><code>r   z <tr><th>available</th><td><code>r   z&<tr><th>diagnostic only</th><td><code>r   z$<tr><th>route samples</th><td><code>r   z</code> across <code>r   z,</code> route-reaching sequence(s)</td></tr>z$<tr><th>total samples</th><td><code>r   r   z</code> sequence(s)</td></tr>z+<tr><th>route sequence names</th><td><code>r   z)<tr><th>observed selectors</th><td><code>r   z"<tr><th>loaded base</th><td><code>r   z)<tr><th>active order count</th><td><code>r   z)<tr><th>active order bytes</th><td><code>r   z.<tr><th>active order used bytes</th><td><code>r   z6<tr><th>active slot first dwords static</th><td><code>r   z5<tr><th>runtime slot-base table static</th><td><code>r   z2<tr><th>runtime object table static</th><td><code>r   z0<tr><th>all watched values stable</th><td><code>r   z)<tr><th>normal route proof</th><td><code>r   z'<tr><th>promotion status</th><td><code>r   z<!doctype html>z<html lang="en">z<head>z  <meta charset="utf-8">zF  <meta name="viewport" content="width=device-width, initial-scale=1">z?  <title>Save Selector Opcode 0x20 Context+0xf2 Sources</title>z	  <style>zg    :root { color-scheme: dark; font-family: system-ui, sans-serif; background: #101010; color: #eee; }z&    body { margin: 0; padding: 24px; }z,    h1 { margin: 0 0 8px; font-size: 24px; }z/    h2 { margin: 24px 0 8px; font-size: 18px; }z<    p { max-width: 1180px; color: #bbb; line-height: 1.45; }z[    table { width: 100%; border-collapse: collapse; margin: 12px 0 20px; font-size: 13px; }zi    th, td { border-bottom: 1px solid #303030; padding: 7px 8px; text-align: left; vertical-align: top; }zF    th { position: sticky; top: 0; background: #181818; color: #ddd; }z    code { color: #d7f0ff; }z
  </style>z</head>z<body>z9  <h1>Save Selector Opcode 0x20 Context+0xf2 Sources</h1>z  <p>route <code>r  z -&gt; r   z</code>; context+0xf2 refs r	  z; reads/writes r
  rI  r  z; runtime object-table readers r  z; direct f2 initializers r  z; constant f2 writes: r  z!; context+0xf2 object selectors: r  z#; fixed stream+2 object selectors: r  z; proofFound <code>r  z </code>; promotion status <code>z</code>.</p>z  <p>r"  z</p>z  <h2>Failed Gates</h2>z  <ul>z</ul>z  <h2>Missing Evidence</h2>z  <h2>Evidence Refs</h2>z*  <h2>Diagnostic Runtime Object Table</h2>z  <table><tbody>z  </tbody></table>z  <h2>Known Evidence</h2>z  <table><thead><tr><th>va</th><th>access</th><th>instruction</th><th>role</th><th>source</th><th>effect</th><th>nearby evidence</th></tr></thead><tbody>z  <h2>Direct Initializers</h2>zQ  <table><thead><tr><th>va</th><th>source</th><th>effect</th></tr></thead><tbody>z  <h2>Remaining Proofs</h2>z</body>z</html>rS  )rO   r   ra  rb  r   rC  )rV  rW  rE  r.  rx   initializer_rowsproofsfailed_gatesmissing_evidenceevidence_refsdiagnostic_rowss              r@   	html_pagern  N  s	   CDJJ[ J*+ 
S)9%:;< =;;s3778#4567 8S)?%@AB C;;s3776?#9c:;< =;;s377+=#>#E#FGH I;;s3778#4#;<=> ?S1F)G)N3%OPQ R
	

 ./ 
S)9%:;< =;;s377+=#>#E#FGH I;;s3778#4#;<=> ?	

 YYh7;;O`CaCgeghhF77 <= L ww -.  GG >* M ii
,T[[Z^^L=Y9Z-[,\\mn
*4;;s:>>+;V7W+X*YYjk
0SP`Aa=b1c0dduv
.t{{3z~~N`?a;b/c.ddyz~  {F  {F  GJ  KU  KY  KY  Zn  Ko  Gp  {q  zr  r^  	_
.t{{3z~~N`?a;b/c.ddyz~  {F  {F  GJ  KU  KY  KY  Zn  Ko  Gp  {q  zr  rO  	P
5dkk+jnn]qNrBs6t5u  vG  	H
3DKKJNN[nLo@p4q3r  sD  	E
,T[[Z^^O=\9]-^,__pq
3DKKJNNShDi@j4k3ll}~
3DKKJNN[kLl@m4n3o  pA  	B
8[Q[Q_Q_`rQsEt9u8v  wH  	I
@[YcYgYg  iI  ZJ  NK  BL  AM  M^  	_
?KXbXfXf  hI  YJ  MK  AL  @M  M^  	_
<T[[U_UcUc  eD  VE  JF  >G  =H  HY  	Z
:4;;s:>>ZrKsGt;u:v  wH  	I
3DKKJNNSeDf@g4h3iiz{
1$++c*..QbBc>d2e1ffwx#! O& 99 555 	5 	#	5
 	Q5 	J5 	5 	r5 	15 	75 	:5 	G5 	f5 	t5 	Q5  	'!5" 	#5$ 	%5& 	'5( 	D)5* DKK(9:;74;;wW_O`CaBb c$%567wOcGdFeefgn  pE  hF  gG G((/0O(P'QQjkr  tL  lM  kN N&';<= >**12P*Q)R S,,34U,V+W X KKGL,A(BCD E""&++g6G.H"I!J,	X+5: GL12348;5< 	"=5> e$?5@ 	&A5B !"%(C5D 	#E5F u%G5H 	5I5J 	K5L 	M5N 	O5P 	$Q5R 	dS5T 
U5V 	W5X 	)Y5Z 	\[5\ 
]5^ 	_5` 	&a5b c5d 	e5f 	g5h 	i5 5 5rB   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       |d
z  j                  t	        |       d	       y )NT)parentsexist_okz.save_selector_opcode20_context_f2_sources.jsonF   )ensure_asciiindentrR  rD   rE   .save_selector_opcode20_context_f2_sources.html)mkdir
write_textrH   dumpsrn  )rV  out_dirs     r@   write_outputsrz    sk    MM$M.??KK

7q9D@ L  ??KK' L rB   c            	        t        j                  t              } | j                  dt        t
        dz         | j                  dt        t        dz         | j                  dt        t        dz         | j                  d	t        t        t        z         | j                  d
t        t               | j                         }t        |j                  j                         t        |j                  i       t        |j                  i       t        |j                  i             }t!        ||j"                         t%        d|j"                  dz          y )N)r   z--exer   )typedefaultz--object-base-candidatesr   z--order-spacer   z--active-order-pollz	--out-dirz8wrote save selector opcode 0x20 context+0xf2 sources -> ru  )argparseArgumentParser__doc__add_argumentr   ROOTr#  r   
parse_argsr8  rX   
read_bytesrL   r*  r+  r   rz  ry  print)parserargsrV  s      r@   mainr    s(   $$9F
dD=4HI
2s  NB  HB  C
dCBk<kl
-D#HdBde
$<D$--r2$""B'$(("-	G '4<<(	B<<JJ
K	MrB   __main__)r?   rW   rT  r   )r   r   rK   r   rT  r   )rP   
list[dict]rT  r  )rX   r"   rQ   dictrT  r"   )rg   rf   )rX   r"   rP   r  r^   rW   r_   rW   r`   rW   rT  r"   )rX   r"   rP   r  rx   r  rT  r  )rX   r"   rT  r  )r   r  r   r   rT  rW   )r   r  r   r   rT  r  )r   r  rT  zdict[str, int])r   r  rT  zdict[str, list[dict[str, Any]]])r   r  r   rW   r!   r   rT  dict | None)r   r  r   rW   r!   r   rT  
str | None)r   r  r   rW   r!   r   rT  bool)r   r  r   rW   r   z	list[str]rT  zlist[str | None])r   r  r   r  rT  r  )r   r  rT  r  )rx   r  rT  r  )NNN)
rX   r"   r*  r  r+  r  r   r  rT  r  )rV  r  rT  r   )rV  r  ry  r   rT  None)rT  r  )Br  
__future__r   r~  ra  rH   syspathlibr   typingr   r   insertr   __file__resolveparentprobe_exe_scene_tablesr   r   r   rp  r  r#  r$  r%  CONTEXT_F2_OFFSETr&  r   r   r   r   r'  r(  r)  r"   fromhexrw   to_bytesrt   ru   rs   rA   rL   rR   rY   rd   r   r   r   r   r   r   r   r   r   r   r   r   r   r8  rY  rn  rz  r  __name__r>   rB   r@   <module>r     s   M "    
   3tH~--/667 8 L L H~''*
Ul		 ! l 

  ' #( $ +hiE  WW  X:  LM  N^  ph  i	% ! &~.0	 &~.0	 &~.0	 %~.0	 &~.2	3B *221h? ==0 
 ,5c+	 /9c+	 >*N+	 <*N+	 ,1?+	3D8O%8<:&0
LQQh, +/#%)	T	T'T T #	T
 
TnfRqh 25 	* zF rB   