
    UHjS                    r   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Zddlm	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 ddlmZmZmZmZ  ee      j%                         j6                  d	   Zed
z  ZdZdZdZ dZ!dZ"dZ#d&dZ$d'dZ%d(dZ&d)dZ'd*dZ(d+dZ)d,dZ*d-dZ+	 	 	 	 	 	 	 	 	 	 	 	 d.dZ,d/d0dZ-d1dZ.d2dZ/d3dZ0	 	 	 	 	 	 	 	 	 	 	 	 	 	 d4dZ1d5dZ2	 d6	 	 	 	 	 	 	 d7d Z3d8d!Z4d9d"Z5efd:d#Z6d;d$Z7e8d%k(  r e7        yy)<zCScan map1_01a/map2_02d resource references for nearby point tables.    )annotationsN)Counter)Path)Any)read_point_table)find_cns_stringsoffset_to_varead_sectionsva_to_offset   outmap1_01amap2_02di  i         c                    d| dS )N0x08x )values    A/home/exedev/hwanse/tools/summarize_map1_01a_resource_ref_scan.pyhex32r      s    c{    c                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)pathfallbacks     r   	load_jsonr$   "   s*    ;;=::dnngn677r   c                    | j                  d      }d}|j                  |      st        |  d      t        j                  |t        |      d  j                  d            S )Nr   r   zwindow.HWANSE_MAPS = z. does not contain the expected maps.js wrapperz;
)r!   
startswith
ValueErrorr   r    lenrstrip)r"   textprefixs      r   parse_maps_jsr,   (   s[    >>7>+D$F??6"D6!OPQQ::d3v;<(//677r   c                L    | D ]  }|d   |cxk  r|d   |d   z   k  s|c S  ! y )Nrawraw_sizer   )sectionsoffsetsections      r   section_for_offsetr3   0   s@     5>VJgenwz7J&JJN K r   c                L    | D ]  }|d   |cxk  r|d   |d   z   k  s|c S  ! y )Nvar/   r   )r0   r5   r2   s      r   section_for_var6   7   s@     4=BD1D!DDN E r   c                d    |dk  s|dz   t        |       kD  ry t        j                  d| |      d   S )Nr      <I)r(   structunpack_from)exer1   s     r   dword_at_offsetr=   >   s5    zVaZ#c(*dC033r   c                8    t        ||      }|y t        | |      S N)r   r=   )r<   r0   r5   r1   s       r   dword_at_var@   D   s#    (B'F~3''r   c                J   t        | |      }t        | |dz         }t        | |dz         }|j                  |xs d      }t        |xrX |j                  d      xrE |j	                  d      xr2 t        |t              xr  d|cxk  xr dk  nc xr |dz  d	v xr |dk(        S )
Nr8      map.cnsr   i      >   r      )r=   getboolr&   endswith
isinstanceint)r<   stringsr1   r   scene_idzeronames          r   is_scene_recordrQ   K   s    C(EsFQJ/H3
+D;;u{#D 	OOE"	MM&!	 x%	 #8#		
 tO|+	 AI r   c           	        g }t        ||      }t        ||dz
        }|||S |dz  }||dz  z
  }t        |t        |t        |       dz
        d      D ]k  }	t	        | |	      }
|j                  |
xs d      }|s't        ||	      }|j                  |t        |xs d      ||j                  d      r|d d n|d       m |S )Nr   r8   rC   r   rE   )refVarefVaHexfilenamemapStem)
r   rangeminr(   r=   rH   r	   appendr   rJ   )r<   r0   rM   start_vaend_varowsstartendalignedr1   r   rP   r5   s                r   cns_refs_in_windowra   [   s     D8,E
x!
,C}1HCuqy!GS#c(Q,!7; V,{{5;B'(F+bgA$(MM&$9tCRyt	
 	 Kr   c                "   t        j                  d|      }d}g }d}	 | j                  ||      }|dk  rnV|dz   }t        ||      }	|	-|	d   |z   |	d   z
  }
|dz  }t	        |      |k  r |j                  |	d   t        |
      d       n||dS )	Nr9   r   r   r5   r.   rP   )r2   rU   )countsamples)r:   packfindr3   r(   rZ   r   )r<   r0   r   sample_limitneedlerc   rd   searchhitr2   ref_vas              r   pointer_ref_countrl   x   s    [[u%FEGF
hhvv&7q$Xs3?$wu~5
w<,&NN"6?!&M   w//r   c                R   g }| D ]  }|j                  d      t        k7  rt        |j                  d      xs g vr8|j                  d      xs g D ]  }|j                  d      xs i }|j                  d      }|j                  d      }t        |t              sKt        |t              s\|j                  |j                  d      |||j                  d      |j                  d	      d
         i }|D ]  }|||d   |d   |d   f<    t        |j                               S )NrD   selectorTargetCandidatesexitCandidatessamplexysideautoTriggeredgeDistance)rs   rq   rr   rt   ru   )rH   SOURCETARGETrK   rL   rZ   listvalues)	map_exit_candidatesr]   map_row	candidaterp   rq   rr   uniquerows	            r   route_exit_samplesr      s!   D& ;;u''++&@AGRH %56<" 	I]]8,2F

3A

3A!S!jC&8%MM&1#,==#?$-MM.$A 	" F 847FSXs3x018  r   c           	        t        ||      }|y t        |d   |dz
        }t        |dz
  |dz
  d      D ]  }t        ||      }|t	        | ||      st        | |      }t        | |dz         }	|j                  |xs d      }
|t        |      |
t        |
t              r|
j                  d      r|
d d n|
t        |	t              rd|	d	nd d
c S  y )Nr5   i   r8   r   rS   rC   rE   r   04x)recordVarecordVaHexrV   rW   
sceneIdHex)r6   maxrX   r   rQ   r=   rH   r   rK   strrJ   rL   )r<   r0   rM   r5   r2   r^   candidate_var1   r   rN   rP   s              r   nearest_scene_record_beforer      s    Xr*GrEz*Eb1feai4 
h5>gv!FV,"3
3{{5;B'$ .$.tS$9dmmF>StCRyY]1;Hc1JBxn-PT
 	

 r   c                   | j                  d      ryt        | j                  d      xs d      }t        | j                  d      xs d      }| j                  d      xs g }|r|d   ni }|j                  d      }|j                  d      }| j                  d	      xs i }|d
k(  r5|dk(  r|dk(  ry|dk(  rt        |t              r|dk\  r	|dz  dk(  ry|dk(  ryy|dk  r||k(  ryy|r||k(  ry|dk(  r|d
k(  ry|dk(  ryy)NexactRouteExitHitCountz route-exit-point-table-candidaterawPointCountr   inBoundsPointCountfirstRawPointsrq   rr   ownerSceneRecordr   ?   sentinel-0x003f-singletonr      resource-size-singletonout-of-bounds-singletonzsingle-in-bounds-point   zshort-in-bounds-scalar-runzshort-out-of-bounds-scalar-runzowned-point-table-non-route!   zscript-command-shaped-runzout-of-bounds-runz#point-table-near-resource-reference)rH   rL   rK   )r~   	raw_countin_bounds_countfirstfirst_pointrq   rr   owners           r   classify_point_candidater      s   
ww'(1CGGO,12I#''"67<1=OGG$%+E#%(KAAGG&'-2EA~7qAv.6jC(Q#X!b&A+,a,'A~i'//I-,Bw16*!"0r   c                   |j                  t              xs i }t        |j                  d      xs d      }t        |j                  d      xs d      }|r|sg S |d   }	t        |d   |	t        z
        }
t        |d   |	t        z         }g }t        |
|
dz  z
  |d      D ]  }t        | ||      }|||v sd|cxk  rd	k  sn %t        ||      2t        | ||||      \  }}|sG|D cg c]  }|d
   |d   f|v r| }}t        | ||      }t        | |||      }|t        |      |t        |      |||	z
  t        |      t        |      |d t         |d t         t        |      |d t         |d   |d   t        |       dt        |t         z          d}t#        |      |d<   |j%                  |        |S c c}w )Nwidthr   heightrT   	sectionVasectionEndVar8   i  @ i  ` rq   rr   rc   rd   ..)fieldVa
fieldVaHex	payloadVapayloadVaHexr   distanceFromResourceRefr   r   r   firstInBoundsPointsr   exactRouteExitHitspointerRefCountpointerRefsscanSpanHexclassification)rH   rv   rL   r   WINDOW_BEFORErY   WINDOW_AFTERrX   r@   r   r   rl   r   r   r(   REPORT_POINT_LIMITPOINT_TABLE_SCAN_SPANr   rZ   )r<   r0   rM   map_datarefexit_points
source_mapr   r   rk   r[   r\   r]   field_var   
raw_points	in_boundspoint
exact_hitsrefsr   r~   s                         r   point_candidates_for_refr      s    f%+J
w',1-E).Q/F	\F3{#Vm%;<H^$f|&;<FD(hl3VQ? "C84=EW,Z55U:5U%(0 0huf U
I $
c
E#J';6 

 

 !h6+C7HM/!%L %'/&'8 _"%i.()<*<=#,-@.@#A&)*o",-@.@"A#G}	?#El^2eE<Q4Q.R-ST
" !9 =CE"F K5
s   -F>c                .   |j                         D cg c]  \  }}||k(  s| }}}g }|D ]  }t        j                  d|      }	d}
	 | j                  |	|
      }|dk  r4|dz   }
t	        ||      }|-|d   |z   |d   z
  }t        | ||      }|rt        | |dz         nd }|j                  ||d d |t        |      |t        |      |d   |d   |d   |d	   z   |t        |t              rd
|dnd d        |j                  d        |S c c}}w )Nr9   r   r   r5   r.   r8   rS   rP   r/   r   r   )rV   rW   stringVastringVaHexrT   rU   
refSectionr   r   sceneRecordLiker   c                    | d   | d   fS )NrT   r   r   )r~   s    r   <lambda>zresource_refs.<locals>.<lambda>2  s    s7|S_= r   )key)itemsr:   re   rf   r3   rQ   r=   rZ   r   rK   rL   sort)r<   r0   rM   rV   r5   rP   
string_vasr]   	string_varh   ri   rj   r2   rk   scene_recordrN   s                   r   resource_refsr     sO   %,]]_IT8H"IJID 	T9-((66*CQw1WF(37GT]S(75>9F*3=L8DsC!G4$HKK$#CR=%$Y/!&M%fo$T] '
0C C#/5?#5N8C.1TX  6 	II=I>K= Js
   DDc                   t        |       }t        | |      }t        |xs g       }|D ch c]  }|d   |d   f }}g }t         dt         dfD ]X  }	t        | |||	      D ]C  }
t        |
d   |
d   t        z
        }t        |
d   |
d   t        z         }t        | ||||
|      }t        | ||||      }t        |D ch c]"  }|d   j                  d      rd	|d   v r|d   $ c}      }|D cg c]  }|d
   r
t        |v r| }}|j                  i |
j                         D ci c]  \  }}|j                  d      r|| c}}t!        |       dt!        |       |t#        |      t#        |      t%        t'        d |D                    |t#        |      d       F [ |D cg c]  }|d   t        k(  s| }}|D cg c]  }|d   t        k(  s| }}t)        d |D              }t)        d |D              }t)        d |D              }t+        d |D        d       }t%        t'        d |D                    }t%        t'        d |xs i j-                  d      xs g D                    }t)        d |xs i j-                  d      xs g D              }t)        d |j                         D              }d}i dt        dt        dt!        t              dt!        t              d|dt#        |      dt#        |      d t#        |      d!|d"|d#|d$|d%|d u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 )-Nrq   rr   rE   r   rT   r   rW   rD   _r   r2   r   c              3  &   K   | ]	  }|d      ywr   Nr   .0r   s     r   	<genexpr>z build_summary.<locals>.<genexpr>U  s      :05E*+:   )	windowHexnearbyMapResourcesnearbyCnsRefCountpointCandidateCountpointCandidateClassCountspointCandidates strictSourceTargetCandidateCountc              3  &   K   | ]	  }|d      yw)r   Nr   r   r~   s     r   r   z build_summary.<locals>.<genexpr>]  s     DSc/0Dr   c              3  >   K   | ]  }|d    D ]  }|d   rd   yw)r   r   r   Nr   )r   r~   r   s      r   r   z build_summary.<locals>.<genexpr>^  s<      *+ )* 	
	s   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r   r   z build_summary.<locals>.<genexpr>d  s     R3s=>Rr   c              3  `   K   | ]&  }|d    dk(  rt         |j                  dg       v r| ( yw)rU   
0x00542b44r   N)rw   rH   r   s     r   r   z build_summary.<locals>.<genexpr>f  s8      	
:,.#''"6;; 	
s   ,.c              3  :   K   | ]  }|d    D ]	  }|d      yw)r   r   Nr   )r   recordr   s      r   r   z build_summary.<locals>.<genexpr>m  s9      &-.&  	&&s   c              3  &   K   | ]	  }|d      ywr   r   r   s     r   r   z build_summary.<locals>.<genexpr>r  s      7 	7r   r   c              3  @   K   | ]  }|j                  d d        yw)r   r   N)rH   r   s     r   r   z build_summary.<locals>.<genexpr>v  s$      1 			*A.1s   c              3  .   K   | ]  \  }}|d v r|  yw)>   r   r   r   Nr   )r   r   rc   s      r   r   z build_summary.<locals>.<genexpr>z  s)      5C 
 
 	5s   a  The direct resource-reference scan finds the expected scene-list references for map1_01a and map2_02d, including the current selector-only frontier at 0x00542b44. Nearby point-table-like payloads still do not produce a strict map1_01a route-exit hit for map2_02d. The current frontier candidates are non-route singletons or resource-size payloads, so this scan does not promote the transition.sourcetargetwindowBeforeHexwindowAfterHexrouteExitSamplessourceReferenceCounttargetReferenceCountresourceReferenceCountr   r   routeExitPointCandidateCountr   currentFrontierReferenceFoundcurrentFrontierReference(currentFrontierPointCandidateClassCounts%currentFrontierRouteExitPointHitCount3currentFrontierNonRouteSingletonPointCandidateCountblocked)zHfind a point/hotspot table that belongs to map1_01a and targets map2_02dzZor prove the selector-only resource cluster executes from a non-coordinate runtime triggerz`or capture a runtime trace / real selector 2:0 savedata that supplies the missing source trigger)promotionStatusremainingProofs
conclusionrecords)r
   r   r   rv   rw   r   r   r   rY   r   r   ra   sortedr&   rZ   r   r   r(   dictr   sumnextrH   )r<   r   rz   r0   rM   exit_samplesr~   r   r   rV   r   r[   r\   
point_rowscns_rowslinked_mapsstrict_candidatesr   r   source_recordstarget_recordspoint_countexact_countstrict_countcurrent_frontierpoint_class_counts#current_frontier_point_class_counts&current_frontier_route_exit_point_hits*current_frontier_non_route_singleton_countr   s                                 r   build_summaryr
  6  sc   
 S!HsH-G%&9&?R@L3?@CCHc#h'@K@Gxt_o6  hB 	C3{+S\M-IJH^,c'l\.IJF1#x(TWYdeJ)#x(FSH #"y>,,U3s9~8M I" K  *!/0V{5J ! ! NN 03		]*#u3>>R[C\3:] %h05=/B&1%(]'*:-1' :9C: 3 . $.478I4J 	6 &-IcI&0HcINI%,IcI&0HcINIDGDDK  K R'RRL	
)	

 	 g &&  
 +/w 7'-2223DEK7 0 +' .1 1'-2223DEK1 .* 25 5=CCE5 2.	^ && 	5/ 	%-	
 	L 	N 3 	N 3 	!#g, 	{ 	$%7 	' 	+L 	()9)E 	#$4 	34W  	01W!" 	>6%( %

 !7 W A"
!
 ^ JIs5   M'M	4M+MM2MMM Mc                :    dj                  d | D              xs dS )N, c              3  6   K   | ]  }|d     d|d      yw)rq   ,rr   Nr   r   s     r   r   zpoint_text.<locals>.<genexpr>  s#     Fec
|1U3ZL1Fs   -)join)pointss    r   
point_textr    s    99FvFFM#Mr   c           (     2   g }| d   D ]  }dj                  |d         xs d}|j                  d      r|j                  d      nd}|j                  dt        j                  |d          d	t        j                  |d
          d	t        j                  |       dt        j                  |       d|d    dt        j                  t        |j                  d      xs i              d|d    d        g }| d   D ]A  }|d   D ]5  }|j                  d      xs i }|r%|j                  d       d|j                  d       nd}|j                  dt        j                  |d          dt        j                  |d
          d	t        j                  |d          d	t        j                  |d          dt        j                  t        |j                  d                   dt        j                  |       d|d    d|d    d|d    dt        j                  t        |d                d|d    d       8 D dj                  d  | d!   D              }	d"j                  d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3t        j                  | d4          d5t        j                  | d6          d7| d8    d9| d    d:t        j                  t        | j                  d      xs i              d;| d<    d=| d    d>t        j                  t        | j                  d?      xs i              d@| j                  dA       dBdCt        j                  | dD          dEdFdGdHdj                  |      xs dI dJdKdLdHdj                  |      xs dM dJdNdO|	 dPdQdRdg      S )SNr   r  r   r  r   r   z<tr><td><code>rV   z</code></td><td><code>rU   z</code></td><td>z	</td><td>r   r   r   z
</td></tr>r   r   rW    r   z</code><br><code>r   r   r   r   r   r   r   r    c              3  N   K   | ]  }d t        j                  |       d  yw)z<li>z</li>N)htmlescape)r   items     r   r   zhtml_page.<locals>.<genexpr>  s#     adDT!2 359as   #%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">z1  <title>map1_01a Resource Reference Scan</title>z	  <style>z^    body { margin: 24px; background: #101010; color: #eee; font: 14px system-ui, sans-serif; }zJ    table { border-collapse: collapse; width: 100%; margin-bottom: 24px; }zM    th, td { border: 1px solid #333; padding: 6px 8px; vertical-align: top; }z    th { background: #1d1d1d; }z    code { color: #f5d76e; }z
  </style>z</head>z<body>z+  <h1>map1_01a Resource Reference Scan</h1>z  <p>Route: <code>r   z -&gt; r   z</code>. Resource refs: r   z; point candidates: z; point candidate classes: z; route-exit point candidates: r   z#; strict source-target candidates: z; current frontier classes: r   z; current frontier route hits: r   z.</p>z  <p>r   z</p>z  <h2>Resource References</h2>z  <table><thead><tr><th>resource</th><th>ref</th><th>scene</th><th>nearby maps</th><th>point candidates</th><th>classes</th><th>strict</th></tr></thead>z	  <tbody>z&<tr><td colspan="7">No refs.</td></tr>z</tbody></table>z  <h2>Point Candidates</h2>z  <table><thead><tr><th>resource ref</th><th>field</th><th>payload</th><th>class</th><th>owner</th><th>raw</th><th>in bounds</th><th>route hits</th><th>first points</th><th>refs</th></tr></thead>z3<tr><td colspan="10">No point candidates.</td></tr>z  <h2>Remaining Proofs</h2>z  <ul>z</ul>z</body>z</html>)r  rH   rZ   r  r  r   r  )
summaryreference_rowsr~   mapsscener   r   r   owner_labelproof_itemss
             r   	html_pager!    sX   Ny! 
yy123:s),1B)C%S_56 7S_56 7U+, -;;t$% &,-. /;;s377+F#G#M2NOP Q9:; <
	

 Jy! *+ 	EII017RERWUYYy12!EIIm4L3MN]`K![[Z9::KDKKX[\fXgLhKi j![[|)<=> ?![[~)>?@ A{{3uyy1A'B#CDE F{{;/0 1_-. /123 4567 8{{:e4D.E#FGH I./0 1	$ ''agN_F`aaK99"P;hTW)&5
T[[):;<GDKKPWX`PaDbCc d!":;<<PQXYnQoPp q$$(KKGKK@[4\4b`b0c$d#e f((/0N(O'P Q,,34V,W+X Y%;;s7;;'QRXVXYZ
[ \((/4[(\']]b	d GL12348( 	c
BGGN+Y/YZZjk% 	N
BGGJ'b+bccst%
U#
I% % %r   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       y )
NT)parentsexist_okmap1_01a_resource_ref_scan.jsonF   )ensure_asciiindentr  r   r   )mkdir
write_textr   dumps)r  out_dirs     r   write_outputsr-    sC    MM$M.00<<

7q9D@ = r   c                 D   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               | j                         }t        |j                  j                         t        |j                        t        |j                  g             }t        ||j                          t#        d
|j                   dz          y )N)descriptionz--exezHwanse2.exe)typedefaultz--mapszmaps.jsz--map-exit-candidateszmap_exit_candidates.jsonz	--out-dirz*wrote map1_01a resource reference scan -> r%  )argparseArgumentParser__doc__add_argumentr   ROOTOUT
parse_argsr
  r<   
read_bytesr,   r  r$   rz   r-  r,  print)parserargsr  s      r   mainr=     s    $$9F
dD=4HI
tS9_E
/dCJdDde
$<Ddii $**B/G
 '4<<(	6t||Fg7g6h
ijr   __main__)r   rL   returnr   )r"   r   r#   r   r?  r   )r"   r   r?  r   )r0   
list[dict]r1   rL   r?  dict | None)r0   r@  r5   rL   r?  rA  )r<   bytesr1   rL   r?  
int | None)r<   rB  r0   r@  r5   rL   r?  rC  )r<   rB  rM   dict[int, str]r1   rL   r?  rI   )r<   rB  r0   r@  rM   rD  r[   rL   r\   rL   r?  r@  )   )
r<   rB  r0   r@  r   rL   rg   rL   r?  r   )rz   r@  r?  r@  )
r<   rB  r0   r@  rM   rD  r5   rL   r?  rA  )r~   r   r?  r   )r<   rB  r0   r@  rM   rD  r   r   r   r   r   zset[tuple[int, int]]r?  r@  )
r<   rB  r0   r@  rM   rD  rV   r   r?  r@  r?   )r<   rB  r   r   rz   zlist[dict] | Noner?  r   )r  r@  r?  r   )r  r   r?  r   )r  r   r,  r   r?  None)r?  rF  )9r4  
__future__r   r2  r  r   r:   syscollectionsr   pathlibr   typingr   r"   insertr   __file__resolveparentextract_scene_eventsr   probe_exe_scene_tablesr   r	   r
   r   r#  r6  r7  rv   rw   r   r   r   r   r   r$   r,   r3   r6   r=   r@   rQ   ra   rl   r   r   r   r   r   r
  r  r!  r-  r=  __name__r   r   r   <module>rS     s   I "     
    3tH~--/667 8 1 ^ ^ H~''*
Ul		  884( 	  	
  :0.!2,1>4	44 4 	4
 
4 &4 4nJ .2o	oo +o 
	odNIX 25 k  zF r   