
    zMj[                       d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZ  e
e      j                         j                  d   Zedz  d	z  Zed
z  Zedz  Zedz  Zedz  Zdd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(dZ	 	 	 	 	 	 	 	 d)dZ 	 	 	 	 	 	 	 	 	 	 	 	 d*dZ!d+dZ"d,dZ#d-dZ$e%d k(  r e$        yy).a  Bridge intro-battle runtime effect draws to static helper evidence.

This report is deliberately narrower than the full intro battle review. It
answers one question: which runtime `btl_efc.cns` draw rectangles observed in
the opening battle are already explained by static battle action/helper data,
and which ones are extra result/presentation particles that should not be
mistaken for a skill-local helper.
    )annotationsN)Counterdefaultdict)Path)Any   capturesruntimeoutwebz*intro_battle_helper_dictionary_review.jsonz*intro_battle_helper_dictionary_review.htmlz
ataho:0x19zrinshan:0x10zsmashu:0x0c)u   Ataho 맹호스페셜u   Linxiang 선렬각   Smash 쾌진격c                V    t        j                  | dd      S t        |       d      S )N T)quote)htmlescapestr)values    4tools/build_intro_battle_helper_dictionary_review.pyhr   #   s%    ;;U]r$GGE
$GG    c                p    | j                         si S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)paths    r   	read_jsonr!   '   s*    ;;=	::dnngn677r   c                     g } t        t        j                  d            D ]F  }|j                  d      j                  d      }|j	                         s4| j                  ||f       H | r| d   S d S )Nz*intro-battle*.manifest.jsonr   z.jsonl)sortedCAPTURESglobwith_suffixr   append)pairsmanifestjsonls      r   latest_intro_battle_tracer,   -   sm    E8==)GHI ,$$R(44X><<>LL(E*+, 59'4'r   c                $   | si S i }ddddj                         D ]2  \  }}t        j                  ||       }|s|j                  d      ||<   4 t        j                  d|       }|r(|j                  d       d|j                  d       |d	<   |S )
Nzcaller=(0x[0-9a-fA-F]+)zsrcRect=([0-9,\-]+)zflags=(0x[0-9a-fA-F]+))callersrcRectflagsr   z\sat\s(-?\d+),(-?\d+),   dstPoint)itemsresearchgroup)detailparsedkeypatternmatchats         r   parse_draw_detailr>   6   s    	F,)* eg	)W
 		'6*++a.F3K) 
+V	4B	 "}Abhhqk];zMr   c                    t        t        dz        } i }| j                  dg       D ]^  }|j                  d      dk7  r|j                  dg       D ]2  }|d    d|d    d|d   |d	   z    d|d   |d
   z    }i |d|i||<   4 ` |S )Nzcns_rect_review_data.jsonrowscnsbtl_efc.cnsrectsxr1   ywr   r/   )r!   OUTget)rA   rect_maprowrectr:   s        r   build_btl_efc_rect_maprL   H   s    
C55
6C*,Hwwvr" 5775>]*GGGR( 	5D#YKqc1T#Yc-B,C1T#YQUVYQZEZD[\C4t4Y4HSM	55 Or   c                    t        t        dz        } i }| j                  dg       D ]  }|j                  d      }|t        j	                         v s,g }g }|j                  dg       D ]  }g }|j                  dg       D ]#  }|j                  |j                  dg              % |j                  dg       D ]4  }	|	j                  d      |j                  |	j                  d             6 |j                  d	      xs i j                  d
g       D ]4  }
|
j                  d      |j                  |
j                  d             6 |j                  |j                  d      |j                  d      |j                  d      |j                  dg       t        |D ch c]  }|t        |       c}      |j                  d	      xs i j                  dd      |j                  di       |j                  dg       d       |j                  |d   d           ||j                  d      |j                  d      |j                  d      |j                  d      |j                  dg       |j                  d      |j                  dg       t        t        |            |j                  dg       |j                  dg       |d||<    |S c c}w )Nz+battle_effect_animation_pattern_review.json	skillRows	recordKeyhelperAnimationsframeScriptsframeSequence
initFramesframedirectSpawneventshelperIdanimationClassbehaviorClasseffectFrameLabelscountr   rootCounterSetsexecutionRequirements)rW   rX   rY   rZ   framesdirectSpawnCountr\   r]   r#   r^   	ownerName	skillName
skillIdHexlevelOrFixed	helperIdseffectAnimationClassresultWlkNoseffectWlkNos)rO   r`   ra   rb   rc   rd   re   rZ   expectedFramesrf   rg   rP   )
r!   rG   rH   PHASE_TO_RECORDvaluesextendr(   r$   intset)patternsr@   rJ   
record_keyr^   helpershelperhelper_framesscriptiniteventrT   s               r   expected_skill_rowsrv   T   s   LLMHD||K, )WW[)
//11FG''"4b9 5 "$jj< JF!((OR)HIJ"JJ|R8 @Dxx(4%,,TXXg->?@ %jj7=2BB8RP AEyy)5%,,UYYw-?@A $*JJz$:*0**5E*F)/O)D-3ZZ8KR-P"(-)eSXSd#e*)e"f-3ZZ-F-L",Q,QRY[\,]+1::6G+L17<SUW1X	 gbk(34-50 ( WW[1 WW[1!ggl3 # 7 WW["5(+0F(G%(WW-@"%E"(V"5 # ; # ;$+ D9)T K+ *fs   !K)Kc                   |D ci c]  }|d   g 
 }}| j                  d      5 }|D ]{  }|j                         st        j                  |      }|j	                  d      dk7  r?|j	                  d      dk7  r|j	                  d      dk7  rh|j	                  d	      }t        |t              sd }	|D ]  }|d
   |cxk  r	|d   k  sn |d   }	 n |	st        |j	                  d            }
|
j	                  d      }|j	                  |xs d      }|
j	                  d      }|j	                  d      ||j	                  d      |
j	                  d      |||
j	                  d      |r|j	                  d      nd |rdndd	}|r||d<   ||	   j                  |       ~ 	 d d d        |S c c}w # 1 sw Y   |S xY w)Nlabelr   r   ru   zdraw-surfacesourceResourceNamerB   sourceLabelrT   
firstFrame	lastFramer8   r/   r   r3   seqpcr.   r0   indexmappedunmapped)	r}   rT   r~   r.   r/   r3   r0   effectFrame
rectStatusrK   )	openstripr   r   rH   
isinstancerl   r>   r(   )
jsonl_pathphasesrI   phaseby_phasefilelineru   rT   phase_labelr9   src_rectrK   pointrJ   s                  r   load_runtime_effect_drawsr      s   
 177ug"7H7	'	* $.d #	.D::<JJt$Eyy!^3yy-.-?EIImD\`mDmIIg&EeS)K &%E53EE"'.K &uyy':;Fzz),H<<B/DJJz*Eyy'iio **X.#!G,48txx0d*.hJ
C "F[!((-G#	.$.J OM 8$.J Os   F3B%F8CF88Gc           
        g }g }t        | |      D ]  \  }}|s		 |j                  d      D cg c]  }t        |       c}\  }}|j	                  |       |j	                  |       |sZ|j	                  |t        |j                  dd            z          |j	                  |t        |j                  dd            z           |sy t        |      t        |      t        |      t        |      dS c c}w # t        $ r Y w xY w)Nr1   rF   r   r   )x0y0x1y1)zipsplitrl   
ValueErrorr(   rH   minmax)	pointsrC   xsysr   rK   partrD   rE   s	            r   boundsr      s    BB65) 1t	*/++c*:;$CI;DAq 			!
		!IIa#dhhsA.//0IIa#dhhsA.//01 b'RBs2wGG < 		s"   C:C5 C:5C::	DDc                8    | y| |v ryd| cxk  rdk  ry | dv ryy)	Nzunmapped-runtime-rectzcovered-by-static-skill-helper   %   z&runtime-extra-result-sparkle-candidate>   A   B   C            z.known-helper-family-but-not-current-static-rowzruntime-extra-effect-frame )rT   expected_framess     r   classify_observed_framer      s9    }&/	Ub7 ++?'r   c                   t        d |xs i j                  dg       D              t               }t               t        t              }|D ]J  }|j                  d      }|xx   dz  cc<   ||d      |xx   dz  cc<   |t	        |      xx   dz  cc<   L g }j                         D ]  \  }|D cg c](  }|j                  d      k(  s|j                  d      * }	}|D cg c](  }|j                  d      k(  s|j                  d      * }
}t        fd|D        i       }|j                  |t	              t        fd	|D              t        fd
|D              t        |	|
      |j                  d      |j                  d      |j                  d      d	        g }t        |      D ]c  }||   }|j                  |t        |j                               t        |j                         d       D cg c]
  \  }}||d c}}d       e t        fdD              }t        fdD              }t        fdD              }| d   | j                  d      t        j                  | d         | d   | d   t!        |      |||||j                         ||t#        | d   ||||      dS c c}w c c}w c c}}w )Nc              3  2   K   | ]  }t        |        y wNrl   .0rT   s     r   	<genexpr>z"summarize_phase.<locals>.<genexpr>   s     _#e*_s   rh   r   r   rT   r3   rK   c              3  L   K   | ]  }|j                  d       k(  s|  yw)r   NrH   r   drawrT   s     r   r   z"summarize_phase.<locals>.<genexpr>   s!     R-1HE1QtRs   $$c              3  R   K   | ]  }|j                  d       k(  s|d      ywr   rT   Nr   r   s     r   r   z"summarize_phase.<locals>.<genexpr>   s&     !fDTXXmE\`eEe$w-!f   '
'c              3  R   K   | ]  }|j                  d       k(  s|d      ywr   r   r   s     r   r   z"summarize_phase.<locals>.<genexpr>   s&      e4DHH]D[_dDdg er   r/   r.   )	r   	drawCountclassificationr{   r|   	dstBoundssampleSrcRectsampleDstPointsampleCallerc                ,    | d   dS t        | d         S )Nr   i'  r   )items    r   <lambda>z!summarize_phase.<locals>.<lambda>   s$    Z^_`ZaZiRV orswxyszo{ r   )r:   )r   r[   )runtimeFramer   effectFrameCountsc              3  F   K   | ]  }j                  |      s|  y wr   r   r   rT   by_frames     r   r   z"summarize_phase.<locals>.<genexpr>  s     XHLLQVDWeX   !!c              3  F   K   | ]  }j                  |      r|  y wr   r   r   s     r   r   z"summarize_phase.<locals>.<genexpr>  s     \UZH[e\r   c              3  .   K   | ]  }||vr|  y wr   r   )r   rT   r   s     r   r   z"summarize_phase.<locals>.<genexpr>  s&      o!= 	s   rx   titler{   r|   )
phaseLabelr   rO   r{   r|   runtimeDrawCount	staticRowexpectedFramesCoveredexpectedFramesMissingruntimeExtraFramesclassificationCountsobservedFrameRowsruntimeFrameRowsinterpretation)rm   rH   r   r   r   most_commonnextr(   r   r   r   r$   sumrj   r4   ri   lenphase_interpretation)r   draws
static_rowby_classby_runtime_framer   effect_frame
frame_rowsr[   r   rC   sampleruntime_rowsruntime_framecounterrT   expected_coveredexpected_missingruntime_extrar   r   s                  `   @@r   summarize_phaser      s   
 _:3C2H2HIY[]2^__O$YH$+IH7B77K Nxx.!#g'5:5(GHAMH	N J ,,. 
u38]4DHH]<SW\<\$((:&]].3Xdtxx7NRW7W&!XXRRTVW$""9%"Q!!fE!ff  e5 ee#FE2!'I!6"(**Z"8 &

8 4
	
	
$ L 01 
"=1 - !12 )/w}}D|(}&$u %*E:&		

 XXX\\\  M Gn7#$((w8L);'J!1!1+ ( 4 4 6'(.uW~zK[]mo|} O ^X.&s   9KK,KKKc                
   g }|s|j                  d       |S |r|j                  d| d       |r|j                  d| d       |rWt        d |D              r|j                  d       |D cg c]  }d|cxk  rdk  rn | }}|r|j                  d	| d
       |j                  d      s|r|j                  d       | dk(  r6t        g d      j	                  t        |            r|j                  d       |S c c}w )NuK   정적 skill row를 찾지 못했으므로 runtime-only evidence로 둔다.u   정적 helper frame u2   가 런타임 btl_efc draw로 직접 관측됐다.uo   는 이번 phase에서 관측되지 않았다. trace 구간/분기 또는 구현 매핑 재검토 대상이다.c              3  <   K   | ]  }d |cxk  xr dk  nc   yw)r   r   Nr   r   s     r   r   z'phase_interpretation.<locals>.<genexpr>,  s     4UrU b  4s   uy   runtime extra #30..37은 공용 sparkle/result particle 후보다. 기술 자체 helper로 바로 승격하지 않는다.r   r   zruntime extra frame u-   는 현재 정적 row에 없는 이펙트다.rd   u   이 skill row에는 helperIds가 비어 있으므로 extra effect는 result/critical/presentation 경로 또는 아직 누락된 helper-call 후보로 분리해야 한다.r   )r          !   "   #   $   r   us   쾌진격 4단계 helper 31의 sparkle child family와 런타임 source rect가 같은 frame range를 공유한다.)r(   anyrH   rm   intersection)rx   r   coveredmissingextrar   rT   others           r   r   r     s    C

`a


)'2def

)'  3b  c  	d4e44JJ  S  T$)E5"2C2CEEJJ-eW4abc>>+&5

  A  	B!!c*J&K&X&XY\]dYe&f

  I  	JJ Fs   /D  D c                 0   t               } t        t        dz        }| r|sddddS | \  }}t               }t	               }|j                  dg       }t        |||      }g }|D ]\  }	t        j                  |	d         }
|j                  t        |	|j                  |	d   g       |j                  |
xs d                   ^ d	|D cg c]%  t        fd
t        dd      D              rd   ' c}dddd|D cg c]  t        fddD              rd    c}dddd|D cg c]  t        fddD              rd    c}dddd}ddddt        |j                  t                    ddd t        |      t!        d! |D              t!        d" |D              t!        d# |D              t#        |D ch c]  }|d$   D ]  }|  c}}      t%        d% |D              j'                         d&||g d'd(S c c}w c c}w c c}w c c}}w ))Nz intro_battle_runtime_review.jsonr   z,hwanse-intro-battle-helper-dictionary-reviewzmissing-input)versionkindstatusactionPhasesrx   r   zsparkle/result particle familyc              3  >   K   | ]  }|d    v xs |d   v   yw)r   r   Nr   r   rT   rJ   s     r   r   zbuild.<locals>.<genexpr>Q  s0     ~glu$8 99bUcJaFb=bb~s   r   &   r   uZ   쾌진격 2~4단 helper 29/30/31 spawn-tree frameScript에서 #30..37이 직접 나온다.zlframe family confirmed; exact semantic role can be skill helper or result/presentation depending caller row.)rx   runtimeEvidencestaticEvidence	promotionzslash/through helper familyc              3  ,   K   | ]  }|d    v   ywr   Nr   r   s     r   r   zbuild.<locals>.<genexpr>[  s     Wu$; <<W   )r   r   r   u5   helper 12 frameScript에서 #65,#66,#67이 나온다.u,   confirmed for 쾌진격 phase when observed.u$   선렬각 final streak helper familyc              3  ,   K   | ]  }|d    v   ywr  r   r   s     r   r   zbuild.<locals>.<genexpr>e  s     Zu$; <<Zr  )r   r   r   uH   선렬각 4단 helper 110 frameScript에서 #173,#174,#175가 나온다.u   confirmed for 선렬각 phase.)frameRange30to37frameRange65to67frameRange173to175zruntime-static-helper-bridgez$out/intro_battle_runtime_review.jsonz/out/battle_effect_animation_pattern_review.jsonzout/cns_rect_review_data.json)r
   rawTracestaticPatternsrC   c              3  &   K   | ]	  }|d      yw)r   Nr   r   rJ   s     r   r   zbuild.<locals>.<genexpr>x  s     %T#c*<&=%Ts   c              3  8   K   | ]  }t        |d            ywr  r   r  s     r   r   zbuild.<locals>.<genexpr>y       &_Ss3/F+G'H&_   c              3  8   K   | ]  }t        |d            yw)r   Nr  r  s     r   r   zbuild.<locals>.<genexpr>z  r  r  r   c              3  Z   K   | ]#  }|d    D ]  \  }}t        |      D ]  }|   % yw)r   N)range)r   rJ   rx   r[   _s        r   r   zbuild.<locals>.<genexpr>|  sP      ,$'(>$?, !E5u	,  ,,,s   )+)
phaseCountruntimeBtlEfcDrawscoveredStaticFramesmissingStaticFramesr   r   )uo   intro-battle 런타임은 btl_efc draw source rect를 실제 frame index로 매핑할 수 있는 첫 근거다.uo   쾌진격 4단계는 정적 helper 31(#30..37) 및 helper 12(#65..67)와 런타임 frame range가 맞물린다.up   선렬각 4단계는 helper 110(#173..175)이 런타임에서 관측되어 정적 helper 해석을 보강한다.u   맹호스페셜은 정적 skill helper가 비어 있는데 #30..37 계열이 관측되므로, 이는 skill-local helper가 아니라 result/critical/presentation 계열 후보로 보류한다.u   따라서 이 런타임은 모든 기술을 자동 확정하지는 않지만, #30..37, #65..67, #173..175 frame family의 실제 draw 경로를 확인하는 dictionary 기준점으로 쓸 수 있다.)r   r   r   sourcesummaryhelperDictionary	phaseRowsconclusions)r,   r!   rG   rL   rv   rH   r   ri   r(   r   r   r  r   relative_toROOTr   r   r$   r   r   )traceintror  r   rI   static_rowsr   runtime_draws
phase_rowsr   ro   rJ   helper_dictionaryrT   s              `  r   buildr'  8  sx   %'Ec>>?EB%
 	

 MAz%'H%'KYY~r*F-j&(KMJ |$((w8
/%1B1B5>SU1VXcXgXghrhxvxXyz{| 6 & ~puvxz|p}~~ L! 
 { H	
 3 & W,WW L! 
 VG	
 < & Z/ZZ L! 
 i9	
+D >0=J22489O4	
 j/"%%T%T"T#&&_T^&_#_#&&_T^&_#_"(:)mCSVWkSl)m%%)m%)m"n$+ ,%, %
 km
 .
3   =   2 *ns   	*H? H+ H
 Hc                   | j                  di       }dj                  d | j                  dg       D              }dj                  d | j                  di       j                         D              }g }| j                  dg       D ]!  }dj                  d |j                  d	g       D              }|j                  d
      xs i }dj                  d |j                  dg       D              }g }	|j                  dg       d d D ]~  }
dj                  d |
j                  dg       D              }|	j                  dt	        |
j                  d             dt	        |
j                  d             dt	        |       d        dj                  |	      }|j                  dt	        |j                  d             dt	        |j                  d             dt	        |j                  d             dt	        |j                  d             dt	        |j                  d              d!t	        |j                  d"g              d#t	        |j                  d$g              d%t	        |j                  d&             d't	        |j                  d(             d)| d*| d+| d,       $ dj                  d- |j                  d.g       D              }d/t	        |j                  d0             d1t	        |j                  d2             d3t	        |j                  d4             d5t	        |j                  d(             d6| d7| d8| d9dj                  |       d:S );Nr  r   c              3  :   K   | ]  }d t        |       d  ywz<li>z</li>Nr   r  s     r   r   zrender_html.<locals>.<genexpr>  s     [afXU3[   r  c              3  @  K   | ]  \  }}d t        |       dt        |j                  d             dt        dj                  |j                  dg             xs d       dt        |j                  d             dt        |j                  d             d	  y
w)<tr><td><code></code></td><td>rx   	</td><td>, r   -r  r  
</td></tr>N)r   rH   join)r   r:   rJ   s      r   r   zrender_html.<locals>.<genexpr>  s      	 C	sVH !"# $377#4b9:AcBC D)*+, -%&' (		s   BBr  r  c              3  :   K   | ]  }d t        |       d  ywr*  r+  )r   r   s     r   r   zrender_html.<locals>.<genexpr>  s     [44$y.[r,  r   r   c              3    K   | ]  }d t        |j                  d             dt        |j                  d             dt        |j                  d             dt        |j                  d             dt        |j                  d             d	t        |j                  d
             dt        |j                  d             dt        |j                  d             d  yw)r.  r   r/  r   r0  r   r{   ..r|   z</td><td><code>r   z</code></td><td><code>r   r   r3  N)r   rH   r  s     r   r   zrender_html.<locals>.<genexpr>  s       
 377=123 4SWW[)*+ ,SWW-./0 1SWW\*+,Bq1E/F.G H377?345 6377#3456 7SWW[)*+ , 
s   C%C'r   r   (   r1  c              3  8   K   | ]  }d |d    d|d      yw)#r   z xr[   Nr   )r   r   s     r   r   zrender_html.<locals>.<genexpr>  s/      & D'(4=/:&r  r   <tr><td>r   r0  r   r3  z)
            <section>
              <h2>r   z4</h2>
              <p class="muted">runtime frames r{   r7  r|   z; record <code>rO   z</code>; runtime btl_efc draws r   zm</p>
              <div class="grid">
                <div class="box"><strong>Static helper ids</strong><br>rd   zL</div>
                <div class="box"><strong>Expected frames</strong><br>rh   zD</div>
                <div class="box"><strong>Covered</strong><br>r   zJ</div>
                <div class="box"><strong>Runtime extra</strong><br>r   z.</div>
              </div>
              <ol>z</ol>
              <h3>Observed btl_efc frames</h3>
              <div class="table-wrap"><table><thead><tr><th>frame</th><th>draws</th><th>class</th><th>runtime frames</th><th>srcRect</th><th>sample dst</th><th>bounds</th></tr></thead><tbody>z</tbody></table></div>
              <details><summary>Runtime frame timeline</summary><div class="table-wrap"><table><thead><tr><th>runtime frame</th><th>draws</th><th>effect frame counts</th></tr></thead><tbody>zD</tbody></table></div></details>
            </section>
            c              3  X   K   | ]"  \  }}d t        |       dt        |       d $ yw)r;  r0  r3  Nr+  )r   rx   r[   s      r   r   zrender_html.<locals>.<genexpr>  s3      E5 1U8*IahZz:s   (*r   u  <!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <title>Intro Battle Helper Dictionary Review</title>
  <style>
    :root { color-scheme: dark; --bg:#101316; --panel:#181d22; --line:#2c3740; --text:#e9eef3; --muted:#9aa8b3; --accent:#88d1c7; }
    body { margin:0; background:var(--bg); color:var(--text); font-family:system-ui,-apple-system,Segoe UI,sans-serif; }
    main { max-width:1240px; margin:0 auto; padding:24px; }
    a { color:var(--accent); }
    section { background:var(--panel); border:1px solid var(--line); border-radius:8px; padding:16px; margin:14px 0; }
    .muted { color:var(--muted); }
    code { color:#d8ecff; }
    .grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); gap:10px; margin:10px 0; }
    .box { border:1px solid var(--line); background:#11171b; border-radius:8px; padding:10px; }
    table { width:100%; border-collapse:collapse; font-size:13px; }
    th,td { padding:7px 8px; border-bottom:1px solid var(--line); text-align:left; vertical-align:top; }
    th { background:#14191e; }
    .table-wrap { overflow:auto; }
  </style>
</head>
<body>
<main>
  <h1>Intro Battle Helper Dictionary Review</h1>
  <p class="muted">intro-battle 런타임의 실제 <code>btl_efc.cns</code> draw source rect를 정적 helper frameScript와 연결한 브리지입니다.</p>
  <section>
    <h2>Summary</h2>
    <div class="grid">
      <div class="box"><strong>Phases</strong><br>r  zH</div>
      <div class="box"><strong>Runtime btl_efc draws</strong><br>r  zH</div>
      <div class="box"><strong>Covered static frames</strong><br>r  zG</div>
      <div class="box"><strong>Runtime extra frames</strong><br>z</div>
    </div>
    <ol>z</ol>
  </section>
  <section>
    <h2>Classification Counts</h2>
    <table><thead><tr><th>class</th><th>draw count</th></tr></thead><tbody>z</tbody></table>
  </section>
  <section>
    <h2>Helper Dictionary</h2>
    <div class="table-wrap"><table><thead><tr><th>range</th><th>label</th><th>runtime evidence</th><th>static evidence</th><th>promotion</th></tr></thead><tbody>z&</tbody></table></div>
  </section>
  z
  <section>
    <h2>JSON</h2>
    <p><a href="../out/intro_battle_helper_dictionary_review.json">out/intro_battle_helper_dictionary_review.json</a></p>
  </section>
</main>
</body>
</html>
)rH   r4  r4   r(   r   )datar  conclusion_items	dict_rows
phase_htmlr   interpstaticobserved_rowsruntime_row_partsrJ   effect_countsr   
class_rowss                 r   render_htmlrG    s   hhy"%Gww[txxWY?Z[[ 	 !3R8>>@	 	I J+r* .
[599EUWY;Z[[;'-2  
 yy!4b9 
 
 99/4Sb9 	C II &GG$7<& M $$012 3-./ 0'( )	 ww01UYY|,-. ///0<1H/I.J"QuyyYdOeMfLggvwxy~  zC  zC  DO  zP  xQ  wR  Rq  rs  ty  t}  t}  ~P  tQ  rR  qS SHHI&**U`bdJeHfGg hFFG

ScegHhFiEj k>>?		Ja@b>c=d eDDEeiiPdFeDfCg h( @ AN  @O O @L  M M	
;.
^  #KK(>C J3: 45W[[5N3O2P QBBCGKKPdDeBfAg hBBCGKKPeDfBgAh iAAB7;;OcCdAe@f g		 L MW< Xb cl  bm m77: Y4 4r   c                    t         j                  d       t        j                  d       t               } t        j                  t        j                  | dd      d       t        j                  t        |       d       t        dt        j                  t                      t        dt        j                  t                      y )	NT)exist_okFr2   )ensure_asciiindentr   r   zwrote )rG   mkdirWEBr'  JSON_OUT
write_textr   dumpsHTML_OUTrG  printr  r   )r=  s    r   mainrS    s    IItIIItI7D

4eAFQXYD)G<	F8''-.
/0	F8''-.
/0r   __main__)r   r   returnr   )r    r   rU  dict[str, Any])rU  ztuple[Path, Path] | None)r8   z
str | NonerU  rV  )rU  dict[str, dict[str, Any]])r   r   r   list[dict[str, Any]]rI   rW  rU  zdict[str, list[dict[str, Any]]])r   zlist[str | None]rC   zlist[dict[str, Any] | None]rU  zdict[str, int] | None)rT   z
int | Noner   zset[int]rU  r   )r   rV  r   rX  r   dict[str, Any] | NonerU  rV  )rx   r   r   rY  r   	list[int]r   rZ  r   rZ  rU  z	list[str])rU  rV  )r=  rV  rU  r   )rU  None)&__doc__
__future__r   r   r   r5   collectionsr   r   pathlibr   typingr   __file__resolveparentsr   r%   rG   rM  rN  rQ  ri   r   r!   r,   r>   rL   rv   r   r   r   r   r   r'  rG  rS  __name__r   r   r   <module>re     sq   #   	 ,   H~''**y(
Ul
Ul==== *($H8($	-`++ + (+ %	+\H(	(GGG &G 	GT%  	
  8Tnup1 zF r   