Ë
    PaÇj  ã                   ór  ‡— d 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Z	 ee
«      j                  Zej                  j                  dd«       ddlmZ  ej"                  edz  j%                  «       «      Z eedz  «      Zedz  j+                  «       Z ej.                  ded	«      d   Z ej"                  ed
d
ez    «      Zdez   Zeed Zdj9                  «       Z ee«      ed   D � ch c]  } | d   ’Œ	 c} cxk(  red   D � ch c]  } | d   ’Œ	 c} k(  sJ ‚ J ‚ed   ed   cxk(  rdk  sJ ‚ J ‚ed   ed   cxk(  rdk(  sJ ‚ J ‚ ed„ ed   D «       «      sJ ‚ ed„ ed   D «       «      sJ ‚ ed„ ed   D «       «      sJ ‚ed   D �ci c]  }|d   |“Œ
 c}Z dD ]C  Z!e e!   d   Z"e"d   d    ejF                   ejH                  d«      «      e"d   d    z  z   d!k  rŒCJ ‚ e d"   d#   d$   d%k(  re d"   d#   d&   d'k(  sJ ‚e d(   d#   d$   d)k(  re d(   d#   d&   d*k(  sJ ‚e d+   d,   ddgk(  sJ ‚e d+   d-   d.d/d0œk(  sJ ‚e d+   d   d1k  re d2   d   d1k  sJ ‚ ej"                  ed3z  j%                  «       «      d4   Z%ed4   D �ch c]  }|d   ’Œ	 c}Z&e& ee%«      k  sJ ‚e&D ]2  Z!e%e!   d5   jO                  «       D ]  Z(ee(z  jS                  «       rŒJ ‚ Œ4 ej                  d6z  Z*dZ+e&d7d8hz
  D ]_  Z!e%e!   d5   jO                  «       D ]D  Z,e*e,z  j[                  «       sŒee,z  j+                  «       e*e,z  j+                  «       k(  sJ ‚e+dz  Z+ŒF Œa d9 ej\                  e«      j_                  «       d
ed   ded   D � ci c]  } | d   | d   “Œ c} ddd:d:e+ed   d;d<œZ0ed=z  jc                   ejd                  e0d ¬>«      «        e3 ejd                  e0d ¬>«      «       ed?z  jc                   ejd                  ed ¬>«      «       ed@z  Z4e4j[                  «       �rQ ee4«      Z5e5d   e5d   cxk(  rdk(  sJ ‚ J ‚edAz  jc                   ejd                  e5d ¬>«      «       e4j+                  «       Z6 ej.                  de6d	«      d   Z7 ej"                  e6d
d
e7z    «      Z8eD �‡ci c]  Š‰ e9ˆfdB„e8d   D «       «      “Œ c}Z:d	dCd ddddddddddDœZ; edE„ e;jy                  «       D «       «      sJ e:«       ‚d9e;D �ci c]  }|e:|   “Œ
 c}dddCd gdF ej\                  e6«      j_                  «       e8d4   D �cg c]  }|d   ‘Œ	 c}dGœZ=edHz  jc                   ejd                  e=d ¬>«      «       edIz  Z>e>j[                  «       rk ej"                  e>j%                  «       «      d   D �ci c]  }|d   |“Œ
 c}Z?e jy                  «       D ]#  \  Z!Z@dJD ]  ZAe@eA   e?e!   eA   k(  rŒJ e!eAf«       ‚ Œ% dKe dL   d4   v sJ ‚dMe dL   d4   vsJ ‚ e3dN«       y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 )OzNDelivery checks independent of Blender authoring; run python3 validate_kit.py.é    N)ÚPathz=/home/claude-agent/.agents/skills/blender-game-assets/scripts)Úauditzkit.jsonzkit.glbz<Ié   é   é   zñdormer_gabled dormer_hipped dormer_wall louvre_ridge chimney_cluster chimney_twin sign_boot sign_pig sign_key sign_pretzel oriel door_arched_stone door_cellar window_cellar window_shuttered finial thatch_panel thatch_ridge pillory well_wheelÚatomsÚ	node_nameÚnodesÚnameÚ	trianglesÚtotal_trianglesiÈ¯  Úzero_area_trianglesÚnonfinite_attribute_componentsc              #   ó2   K  — | ]  }|d    |d   k  –— Œ y­w)r   Útriangle_budgetN© )Ú.0Úvs     úvalidate_kit.pyú	<genexpr>r      s   è ø€ Ò
D°Aˆ1ˆ[‰>˜1Ð.Ñ/Õ/Ñ
Dùs   ‚c              #   óz   K  — | ]3  }|d    j                  d«      d   |d   j                  d«      d   k7  –— Œ5 y­w)Ú	primitiveú[r   Úsame_asN)Úsplit)r   Úxs     r   r   r      s=   è ø€ Ò
gÈˆ1ˆ[‰>×Ñ Ó$ QÑ'¨¨9©×);Ñ);¸CÓ)@ÀÑ)CÕCÑ
gùs   ‚9;Úduplicate_primitivesc              #   óH   K  — | ]  }d |vxr d|vxr
 d|vxr d|v–— Œ y­w)ÚtranslationÚrotationÚscaleÚmatrixNr   )r   Únodes     r   r   r      s@   è ø€ ò  IÐuyˆ= Ð$Òp¨¸4Ð)?ÒpÀGÐSWÐDWÒpÐ\dÐlpÐ\pÓpñ  Iùs   ‚ ")Údormer_gabledÚdormer_hippedÚbounding_boxÚmaxé   é7   Úminé   gš™™™™™©?Údoor_arched_stoneÚopeningÚwidthgš™™™™™ñ?Úheightgffffff@Údoor_cellargÍÌÌÌÌÌì?gÍÌÌÌÌÌü?Úthatch_panelÚgrid_step_metresÚmesh_overlap_metresg{®Gáz„?g{®Gáz¤?)r   Úzi,  Úthatch_ridgezmaterials.jsonÚ	materialsÚmapszmedieval-atom-kit-v1ÚThatch_reedÚThatch_reed_cutÚPASSTztSeparate dormer atoms intentionally reuse identical component geometry. No duplicate primitive inside a single atom.)ÚstatusÚ
glb_sha256Úfrozen_namesr   ÚbudgetÚper_atomÚ	nonfiniteÚ	zero_areaÚidentity_node_transformsÚ$dormer_rear_buried_on_55_degree_roofÚshared_texture_files_identicalÚdocumented_audit_exceptionÚaudit_exception_reasonzvalidation.json)Úindentzaudit_glb.jsonztest_house.glbzaudit_assembly.jsonc              3   ól   •K  — | ]+  }|j                  d d«      j                  d«      d   ‰k(  –— Œ- y­w)r   Ú ú.r   N)Úgetr   )r   r#   r   s     €r   r   r   +   s1   øè ø€ ÒR¸d�$—(‘(˜6 "Ó%×+Ñ+¨CÓ0°Ñ3°TÕ9ÑRùs   ƒ14é   )r1   r5   r$   Úchimney_clusterr,   Úwindow_cellarÚorielÚ	sign_bootÚwindow_shutteredÚlouvre_ridgeÚpilloryÚ
well_wheelc              #   ó:   K  — | ]  \  }}t         |   |k(  –— Œ y ­w)N)Úcounts)r   Úkr   s      r   r   r   -   s   è ø€ Ò5™S˜Q˜qŒF�1‰I�q�LÑ5ùs   ‚z+render_kit.py and exported glTF node census)r;   rV   Úrich_roof_pitch_degreesÚthatch_roof_pitch_degreesÚthatch_grid_per_sideÚsourcer<   Úmaterial_nameszassembly_validation.jsonzrevision_2_before/kit.json)Úorigin_ruleÚnominal_size_whd_metresr   ÚLeather_brownrP   Ú
Sign_paintÚ#ASSEMBLY_AND_REVISION_CONTRACT_PASS)BÚ__doc__ÚjsonÚstructÚhashlibÚsysÚmathÚpathlibr   ÚnumpyÚnpÚ__file__ÚparentÚRÚpathÚinsertÚ	audit_glbr   ÚloadsÚ	read_textÚjÚaÚ
read_bytesÚdataÚunpack_fromÚnÚgÚoffsetÚbinaryr   ÚexpectedÚsetÚallÚmetar   ÚbÚtanÚradiansÚshelfÚusedÚvaluesÚfileÚis_fileÚrefÚcheckedÚpÚexistsÚsha256Ú	hexdigestÚreportÚ
write_textÚdumpsÚprintÚassemblyÚaaÚrawÚnnÚagÚsumrV   ÚrequiredÚitemsÚarÚbaselineÚoldr   Úkey)r   r   Úmr   rW   s   000p0r   ú<module>rŸ      s	  øðÙ Tß #× #Ó #Ý Û Ù€xƒ.×Ñ€Ø ‡�‡��ÐQÔ RÝ Ø€$‡*�*ˆa�
‰l×%Ñ%Ó'Ó(€©5°°9±Ó+=¨ÀAÀiÁK×C[ÑC[ÓC]¸dÐ`rÐ`f×`rÑ`rÐswÐx|Ð}ó  aAð  BCñ  aDÐ^_ð  GQð  GK÷  GQñ  GQð  RVð  WYð  Z\ð  ]^ñ  Z^ð  R_ó  G`ð  EFð  hjð  klñ  hlð  agð  txð  yð  y@ð  tAð  msð 
}÷  
Cñ  
Có  
E€Ù
ˆ8ƒ}¨q°©zÖ:¨!�q˜“~Ò:Ô[ÐPQÐRYÑPZÖ<[È1¸Q¸v»YÒ<[Ò[Ð [Ñ[Ð [Ð[Øˆ�~�qÐ*Ñ+Ô2¨UÒ2Ð 2Ñ2Ð 2Ð2ØÐ	Ñ Ð#CÑ!DÔGÀaÒGÐ GÑGÐ GÐGÙ
Ñ
D¸¸7¹Ô
DÔDÐ DÐDñ Ñ
gÈQÐOeÑMfÔ
gÔgÐ gÐgÙ
ñ  IÐ}~ð  @Gñ  ~Hô  Iô  Ið  Ið  IØ ! '¡
Ö+˜1€aˆ�n�QÑÒ+€Ø-ò \€DØˆ�:ˆnÑ€ Q u¡X¨a¡[°°·±¸,¸$¿,¹,ÀrÓ:JÓ1KÈAÈeÉHÐUVÉKÑ1WÑ%WÐX[Ó%[Ð[Ð%[ð\àÐÑ  Ñ+¨GÑ4°cÒ9¸dÐCVÑ>WÐXaÑ>bÐckÑ>lÐnqÒ>qÐ qÐqØˆMÑ˜9Ñ% gÑ.°Ò2°t¸MÑ7JÈ9Ñ7UÐV^Ñ7_ÐadÒ7dÐ dÐdØˆNÑÐ.Ñ/°!°A°Ò6Ð 6Ð6ØˆNÑÐ1Ñ2¸ÀÑ4EÒEÐ EÐEØˆNÑ˜KÑ(¨#Ò-°$°~Ñ2FÀ{Ñ2SÐUXÒ2XÐ XÐXØ€d‡j�j�!Ð$Ñ$×/Ñ/Ó1Ó2°;Ñ?€ÐYZÐ[fÑYgÖEhÐTUÀaÈÃiÒEhÀÐptÑvyÐzó  wAò  qAð  jAð  qAØò D€DØ�4‰[˜Ñ ×'Ñ'Ó)ÒC€T°!°D±&×1AÑ1AÕ1CÐ*CÐ1CÑCðDð ‡H�HÐ#Ñ#€¨A GØ�-Ð 1Ð2Ñ2ò Q€DØ
�‰+�fÑ
×
$Ñ
$Ó
&ò Q€QØ	ˆ!�e‡^�^Õ˜a ™c×-Ñ-Ó/°#°a±%×1CÑ1CÓ1EÒEÐEÐEÀgÈqÁjÁgñQðQð  ^ W§^¡^°DÓ%9×%CÑ%CÓ%EÐUWÐdeÐfqÑdrð  }Bð  vwð  xñ  v@ö  NAð  qrð  OPð  Q\ñ  O]ð  ^_ð  `kñ  ^lñ  Olò  NAð  NOð  \]ð  y}ð  eið  KRð  pqð  rHñ  pIð  cYñ  Z€ØÐÑ×  Ñ    §¡¨F¸!Ô!<Ô =¹eÀJÀDÇJÁJÈvÐ]^ÔD_Ô>`àÐÑ× Ñ  
 §
¡
¨1°AÔ 6Ô 7Ø	
ÐÑ	€Ø‡?�?ÕÙ	ˆ(ƒO€˜2Ð3Ñ4°bÐ9YÑ6ZÔ]Ð\]Ò]Ð]Ñ]Ð]Ð]ØÐÑ×%Ñ% j d§j¡j°¸1Ô&=Ô>Ø×ÑÓ€Ð0˜f×0Ñ0°°c¸"Ó=¸aÑ@˜2ÀJÀDÇJÁJÈsÐSUÐVXÐY[ÑV[È}ÓD]ÀØ_g×hÐW[ˆ‰cÓRÀbÈÁkÔRÓRÑ	RÒh€Ø¨A¸aÐRSÐhiÐz{ð  EFð  STð  hið  yzð  EFð  TUñ  V€ÙÑ5 H§N¡NÓ$4Ô5Ô5Ð<°fÓ<Ð5Ø°HÖ=¨q˜q ¨¡™{Ò=ÐXZÐwyð  STð  UVð  RWð  aNð  \jð  \c÷  \jñ  \jð  knó  \o÷  \yñ  \yó  \{ð  acð  doñ  apö  Mqð  \]ð  NOð  PVó  NWò  Mqñ  r€ØÐÑ×*Ñ*¨:¨4¯:©:°bÀÔ+BÔCà	
Ð'Ñ	'€Ø‡?�?ÔØ * §
¡
¨8×+=Ñ+=Ó+?Ó @ÀÑ IÖJ˜1€aˆ�n�QÑÒJ€Ø�z‰z‹|ò ,�V€Tˆ!ØHò ,€cØ
ˆC‰&�#�d‘)˜C‘.Ó
 Ð+ $ s Ó+Ð
 ñ,ð,ð ˜$˜{Ñ+¨KÑ8Ñ8Ð 8Ð8Ø˜4 Ñ,¨[Ñ9Ñ9Ð 9Ð9Ù Ð+Õ ,ùò_ ;ùÒ<[ùò ,ùò Fiùò NAùò 	iùò >ùò  Mqùò
 Ks6   Ã.XÄXÆXÊXÍ?X Ò"X%Ó9X*Ô4X/Ö%X4