Ë
    6ÔÆj  ã                   óÆ   — d dl Z d dl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	  e	e
«      j                  «       j                  Zedz  Zi Zi Zd
d„Zd„ Zdd„Zg d¢Zg d¢Zd	„ Zy)é    N)ÚPathÚsourcesc                 ó`  — t        | «      } t        j                  | j                  «       «      j	                  «       t
        t        | «      <   t        j                  j                  j                  t        | «      d¬«      }|rdnd|j                  _        |j                  ||«       t        j                  |j                   d d  t        j"                  ¬«      j%                  ||d«      d d …d d …d d…f   j'                  «       }t        j                  j                  j)                  |«       |S )NF)Úcheck_existingÚsRGBú	Non-Color)Údtypeé   é   )r   ÚhashlibÚsha256Ú
read_bytesÚ	hexdigestÚ
PROVENANCEÚstrÚbpyÚdataÚimagesÚloadÚcolorspace_settingsÚnameÚscaleÚnpÚarrayÚpixelsÚfloat32ÚreshapeÚcopyÚremove)ÚpathÚsizeÚcolorÚimÚas        úshelf.pyÚ
read_imager&      sä   € Ü
ˆ4ƒj€¤w§~¡~°d·o±oÓ6GÓ'H×'RÑ'RÓ'T”œC ›IÑ&Ü‡H�H‡O�O×Ñœ˜T›°%ÐÓ8€Ù',™V°+€×ÑÔØ‡�ˆ$ˆtÔ”r—x‘x §	¡	©! ´2·:±:Ô>×FÑFÀtÈDÐQRÓSÒTUÒVWÐXZÐYZÐXZÐTZÑ[×`Ñ`Ób�QÔcf×ckÑck×crÑcr×cyÑcyÐz|Ôc}ð  FGð  Gó    c           	      óÜ  — | j                   \  }}}t        j                  | «      }| ddd…dd…f   | ddd…dd…f   z
  |ddd…dd…f<   |ddd…dd…f    |ddd…dd…f<   |dd…ddd…fxx   | dd…ddd…f   | dd…ddd…f   z
  z  cc<   |dd…ddd…fxx   | dd…ddd…f   | dd…ddd…f   z
  z  cc<   t        j                  t        j                  |«      t        j                  |«      d¬«      \  }}dt        j
                  dt        j                  z  |z  |z  «      z  dt        j
                  dt        j                  z  |z  |z  «      z  z   dz
  }d|d	<   t        j                  j                  |d
¬«      |dd…dd…df   z  }d|dddd…f<   | t        j                  j                  |d
¬«      j                  z
  }	d
D ]q  }
t        j                  |	d|
«      }|d   |d   z
  dz  }t        d«      D ]<  }d|dz  z
  dz  dd|z  dz  z   z  }||xx   ||z  z  cc<   |d|z
  xx   ||z  z  cc<   Œ> Œs t        j                  |	dd«      j                  t        j                  «      S )z¯Moisan periodic-plus-smooth decomposition: remove only nonperiodic low frequencies.
 Then match the outer texels exactly with a narrow cubic correction (no reflected tiles).
 éÿÿÿÿNr   Úij)Úindexingé   r
   é   )r   r   ©r   r-   )Úaxesç      à?)Úshaper   Ú
zeros_likeÚmeshgridÚarangeÚcosÚpiÚfftÚfft2Úifft2ÚrealÚswapaxesÚrangeÚclipÚastyper   )r$   ÚhÚwÚcÚbÚyyÚxxÚdenÚfÚoutÚaxisÚtÚdeltaÚiÚweights                  r%   ÚperiodicrM      s@  € ð 	‡w�w�€€1€Q”—‘˜qÓ!ˆqØ
ˆBŠq’ˆF‰)�A�ašš!�e‘HÑ
€€1‚Q‚q€5�¨¨!ªAªa¨%© y˜Q˜r¢!¢A˜v™YØ‚1€Q‚q€5ƒˆ1ŠQˆr’!ˆV‰9�Q’q˜š1�u‘XÑÑƒ˜a¢ "¢Q ›i¨ª1¨R²¨6©°1²Q°qº°U±8Ñ);Ñ;›iÜ	‡{�{”2—9‘9˜Q“<¤§	¡	¨!£°dÔ;�€€BØ„r‡v�vˆa”—‘‰g�b‰j˜‰lÓÑ˜AœbŸf™f Q¤r§u¡u¡W¨R¡Z°¡\Ó2Ñ2Ñ2°1Ñ4€¸a°S¸±XÜ‡6�6‡;�;ˆq�e€;Ó˜S¢¢1 T ™]Ñ*€°A¨1¨Q¨q²¨U©8Ø„r‡v�v‡|�|�A˜5€|Ó!×&Ñ&Ñ&€Øò H€TÜ‡K�K��A�dÓ€! 1 R¡5¨¨1©¡:¨r¡/˜EÜ�‹8ò H€aØˆQˆq‰S‰5�1‰*�a˜˜!™˜A™‘gÑ
€6˜q ›t U¨6¡\Ñ1›t°!°B°q±D³'¸5À¹<Ñ2G´'ñHðHô 	�‰��A�aÓ×Ñ¤§
¡
Ó+Ð+r'   c                 ó‚  ‡— | j                   j                  dd¬«       |j                  d d \  }}|j                  dk(  r"t	        j
                  |d d …d d …d f   dd¬«      }t        j                  j                  j                  | j                  ||dd¬«      }|rdnd	|j                  _        t	        j                  |t	        j                  ||d
ft        j                  «      fd¬«      j!                  t        j                  «      }|j"                  j%                  |j'                  «       «       t)        | «      |_        d|_        |j/                  «        t        j                  j                  j1                  |«       |r¶dd lŠt	        j4                  |d d …d d …df   dd
«      dz  dz   j!                  d«      d d d…   }ˆfd„}	dj7                  d„ |D «       «      }
| j9                  d |	dt;        j<                  d||ddddd«      «      z    |	d‰j?                  |
d«      «      z    |	dd«      z   «       tA        tC        tE        |d   |d   z
  «      jC                  «       tE        |d d …df   |d d …df   z
  «      jC                  «       «      «      ||gdœtF        t)        | jI                  tJ        «      «      <   y )NT)ÚparentsÚexist_okr,   r   ©rH   F)ÚwidthÚheightÚalphaÚfloat_bufferr   r   r-   ÚPNGr   iÿÿ  r0   z>u2r)   c                 ó¦   •— t        j                  dt        |«      «      | z   |z   t        j                  d‰j                  | |z   «      dz  «      z   S )Nz>Il   ÿÿ )ÚstructÚpackÚlenÚcrc32)Útagr   Úzlibs     €r%   Úchunkzsave_image.<locals>.chunk(   sJ   ø€ œVŸ[™[¨¬c°$«iÓ8¸Ñ<¸TÑAÄ&Ç+Á+ÈdÐSW×S]ÑS]Ð^aÐbfÑ^fÓSgÐhrÑSrÓBsÑsÐsr'   r'   c              3   óB   K  — | ]  }d |j                  «       z   –— Œ y­w)ó    N)Útobytes)Ú.0Úrows     r%   ú	<genexpr>zsave_image.<locals>.<genexpr>)   s   è ø€ Ò3 sˆu�S—[‘[“]Õ"Ñ3ùs   ‚s   ‰PNG

s   IHDRz>IIBBBBBé   s   IDATé	   s   IEND)Úedge_max_absr!   )&ÚparentÚmkdirr1   Úndimr   Úrepeatr   r   r   ÚnewÚstemr   r   ÚconcatenateÚonesr   r>   r   Úforeach_setÚravelr   Úfilepath_rawÚfile_formatÚsaver   r]   r=   ÚjoinÚwrite_bytesrX   rY   ÚcompressÚfloatÚmaxÚabsÚseamsÚrelative_toÚROOT)r    r$   r"   Úgreyr?   r@   r#   ÚrgbaÚrowsr^   Úrawr]   s              @r%   Ú
save_imager‚      sh  ø€ Ø‡�×Ñ˜4¨ÐÔ.°1·7±7¸2¸A°;©s¨q°Ø‡F�FˆA‚I”—	‘	˜!šAša ˜H™+ a¨QÔ/ˆaÜ‡H�H‡O�O×Ñ˜Ÿ	™	¨°¸ÈEÐÓR€Ù',™V°+€×ÑÔÜ‡n�n�aœŸ™  1 Q ¬¯
©
Ó3Ð4¸!Ô<×CÑCÄBÇJÁJÓO€Ø‡�×Ñ�t—z‘z“|Ô$´S¸³Y R¤_Èe¸r¼~ÐTV×T[ÑT[ÔT]Ô^a×^fÑ^f×^mÑ^m×^tÑ^tÐuwÔ^xáÛÜ
�‰�’!’A�a�%‘˜˜1Ó˜eÑ# BÑ&×.Ñ.¨uÓ5±d¸°dÑ;€$ÜsØ	‡h�hÑ3¨dÔ3Ó3€#Ø×ÑÐ'©¨g´f·k±kÀ*ÈQÈqÐQSÐTUÐVWÐXYÐZ[Ó6\Ó(]Ñ]Ñ^cÐdkÐlp×lyÑlyÐz}Ð~ó  mAó  _Bñ  Bñ  CHð  IPð  QTó  CUñ  Uô  VÜ49¼#¼cÀ!ÀAÁ$ÀqÈÁuÁ*»o×>QÑ>QÓ>SÔTWÐXYÒZ[Ð\]ÐZ]ÑX^Ð_`ÒabÐceÐaeÑ_fÑXfÓTg×TkÑTkÓTmÓ:nÓ4oÐxyÐz{Ðw|Ñ$}„„sˆ4×ÑœDÓ!Ó"Ò#r'   )ÚRubble_stoneÚRubble_stone_darkÚ	Oak_frameÚOak_frame_greyÚPlaster_ochreÚPlaster_whiteÚPlaster_pinkÚ	Clay_tileÚClay_tile_darkÚDressed_limestoneÚWrought_ironÚLeaded_glassÚ
Door_paintÚ
Sign_paint)ç      ü?r‘   r-   r-   ç      ø?r’   r’   çÍÌÌÌÌÌä?r“   gš™™™™™ù?r-   r-   r-   r-   c                  ó¸  — g } i }dt         j                  v �rµt        dz  j                  «       �r�t	        j
                  t        dz  j                  «       «      d   }t        D �]b  }||   d   j                  «       D ��ci c]  \  }}|t        t        |z  d|dk(  «      “Œ }}}t        j                  j                  j                  |«      }d|_        |j                  j                   j#                  d«      }g t%        t&        |d   j)                  d	¬
«      «      ¢d‘­|_        |j*                  |j,                  d   _        t'        |d   d d …d d …df   j)                  «       «      |j,                  d   _        t'        |d   d d …d d …df   j)                  «       «      |j,                  d   _        | j1                  |«       �Œe | |fS t3        t        «      D �]|  \  }}|dk  rdnd}	|dk  rd}
n|dv rd}
n|dv rd}
n
|dk(  rd}
nd}
i }dD �]Ü  \  }}t5        t6        j9                  |
› d|› d�«      «      }t        ||	|dk(  «      }|dv r7t;        j<                  |d«      j?                  «       }|dk(  r|d d …d d …g d¢f   }|j)                  d¬
«      }|dk(  �r|dk  r8|d d …d d …d f   d z  d!z   t;        j@                  g d"¢«      z  }||dk(  rd#ndz  }�n�|d$v r5|d d …d d …d f   d%z  d&z   t;        j@                  |dk(  rg d'¢ng d(¢«      z  }�nH|dv rLg d)¢g d*¢g d+¢g|d,z
     }d-d.||j)                  «       z
  z  z   d d …d d …d f   t;        j@                  |«      z  }�nø|d/v rId0d1||j)                  «       z
  z  z   d d …d d …d f   t;        j@                  g d2¢«      z  }||d3k(  rd4ndz  }�n«|d5k(  r=d6d-||j)                  «       z
  z  z   d d …d d …d f   t;        j@                  g d7¢«      z  }�ni|dk(  r,d8d9|z  z   d d …d d …d f   t;        j@                  g d:¢«      z  }�n8|d;k(  r<d<d=||j)                  «       z
  z  z   d d …d d …d f   t;        j@                  g d>¢«      z  }n÷d?d@||j)                  «       z
  z  z   d d …d d …d f   t;        j@                  g dA¢«      z  }n»|dk(  rd|dz  dz
  }|d d …d d …d d…fxx   |dBv rd.ndCz  cc<   |t;        jB                  t:        jD                  jG                  |dd¬D«      dE«      z  dz   dz  }nRdFdG|d d …d d …dHf   z  z   |d d …d d …dHf<   |d;k7  rd%dI|d d …d d …df   z  z   ndI|d d …d d …df<   |dk(  rdJndH|d d …d d …df<   tI        t;        jJ                  |dHd«      «      }|dk(  rG|dz  dz
  }|t;        jB                  t:        jD                  jG                  |dd¬D«      dE«      z  dz   dz  }|||<   tM        t        dz  |z  |› dK�z  ||dk(  «       �Œß t        j                  j                  j                  |«      }d|_        |j                  j                   j#                  d«      }|d   j)                  d	¬
«      }g t%        t&        |«      ¢d‘­|_        |j*                  |j,                  d   _        t'        |d   d d …d d …df   j)                  «       «      |j,                  d   _        t'        |d   d d …d d …df   j)                  «       «      |j,                  d   _        | j1                  |«       tN        |   |D �ci c]  }|dL|› dM|› dK�“Œ c}|	dNdOdPdQdRdSœdTœ}|dv r|jQ                  dUdVdVgdWdXœ«       |dYv røt5        t6        j9                  |
› dZ�«      «      }t        ||	«      d d …d d …dHf   }tI        t;        jR                  |d d …d d …d f   d[d¬
«      «      d d …d d …dHf   }||jU                  «       z
  tW        t'        |jW                  «       |jU                  «       z
  «      dE«      z  }tM        t        dz  |z  d\z  |d¬]«       |jQ                  dL|› d^�d_|dk  rd`ndadHtN        |   dbœ«       |||<   �Œ t        dz  jY                  t	        jZ                  dc|dddedfg dg¢dhdiœdjœd¬k«      «       t        dlz  jY                  t	        jZ                  t\        t^        dmœd¬k«      «       | |fS c c}}w c c}w )nNz--reuse-shelfzmaterials.jsonÚ	materialsÚmapsé    Ú	BaseColorTzPrincipled BSDFr.   rQ   r-   z
Base ColorÚORMÚ	Roughnessr,   ÚMetallicé
   i   i   Úcastle_wall_varriation)r,   r   é   é   Ú
rough_wood)r
   é   é   Úrough_plaster_03Úmetal_plate_02Úworn_rock_natural_01))r˜   Údiff)ÚNormalÚnor_gl)r™   ÚarmÚ_z_1k.*)r-   r   r,   r§   çš™™™™™é?g
×£p=
Ç?)ç{®Gázð?ç      ð?ç{®Gázì?g®Gáz®ç?)r,   r   ç
×£p=
ç?gú~j¼t“ˆ?)çö(\�Âõè?çÃõ(\�Âå?çìQ¸…ëá?)r¬   g)\�Âõ(ð?gffffffî?)r¯   gR¸…ëQà?gHáz®GÑ?)gHáz®Gé?gR¸…ëQè?gq=
×£på?)çffffffæ?g¸…ëQ¸Þ?g=
×£p=Ú?r
   g333333ë?g333333Ó?)é   é   r²   çÍÌÌÌÌÌì?)r«   gáz®GáÚ?g      Ð?rµ   r®   rf   g
×£p=
×?)g®Gázî?r¶   r«   g¤p=
×£À?gìQ¸…ëÑ?)r±   g¸…ëQ¸æ?r¯   é   g¸…ëQ¸Î?g{®Gáz´?)r³   g)\�Âõ(ì?r­   r³   gÍÌÌÌÌÌÜ?)r­   g¸…ëQ¸î?g×£p=
×ë?)r
   r¡   r¢   r·   rž   rŸ   r“   )rH   Úkeepdimsg:Œ0âŽyE>r°   g)\�Âõ(Ì?r   gq=
×£pÍ?g=
×£p=ê?z.pngz
materials/ú/ÚREPEATz	OpenGL +YÚ	occlusionÚ	roughnessÚmetallic)ÚRÚGÚB)Útile_size_metresr–   Ú
resolutionÚwrapÚnormal_conventionÚORM_channelsz+X / texture Ur­   z­Geometry maps longitudinal distance to U/1m and cross-grain distance to V/1m. Generated beams must choose their local longitudinal axis, not stretch a whole texture per box.)Ú
grain_axisÚphysical_repeat_metresÚuv_note)r   r-   r
   r¡   r¢   z
_disp_1k.*r   z
Height.png)r~   z/Height.pngz16-bit grayscale linearg¤p=
×£°?g{®Gázd?)Ú
height_mapÚheight_encodingÚdisplacement_scale_metresÚdisplacement_bias_metresÚheight_repeat_metreszforge.material-shelf.v1a  Exact-name replacement; external images. BaseColor sRGB; Normal/ORM linear. glTF flipY=false; RepeatWrapping; UV0 already contains physical repeat. Set roughness=metalness=1 so ORM controls them. Heights are for generated wall/plaster displacement; do not displace window surrounds.ÚCC0z
Poly Haven)r�   r    r£   r¥   r¤   zÊRegistered scan sets graded and made periodic; continuous rough timber scan transposed into longitudinal U; normal X/Y transposed together; glass is an opaque tinted surrogate. No AI texture generation.)ÚlicenseÚproviderÚidsÚnote)Úschemar•   Úruntime_bindingÚ
provenance)Úindentztexture_evidence.json)Úsource_sha256r{   )0ÚsysÚargvr}   ÚexistsÚjsonÚloadsÚ	read_textÚNAMESÚitemsr&   r   r   r•   rl   Ú	use_nodesÚ	node_treeÚnodesÚgetÚmaprx   ÚmeanÚdiffuse_colorÚinputsÚdefault_valueÚappendÚ	enumerateÚnextÚSOURCEÚglobr   Ú	transposer   r   ÚmaximumÚlinalgÚnormrM   r=   r‚   ÚTILESÚupdaterk   Úminry   Ú
write_textÚdumpsr   r{   )ÚmatsÚshelfr   ÚkÚpr–   ÚmÚbsrK   ÚnÚsrcÚkindÚsuffixr    r$   ÚlumÚtintÚvÚavgÚentryÚhpr?   s                         r%   Úbuildr  /   sH  € Ø€ˆrˆØ”s—x‘xÒ¤TÐ*:Ñ%:×$BÑ$BÕ$DÜ�
‰
”DÐ)Ñ)×4Ñ4Ó6Ó7¸ÑD€%Üó r€dØ;@À¹;ÀvÑ;N×;TÑ;TÓ;V×W±C°A°aˆŒ:”d˜1‘f˜R  ;¡Ó/Ñ	/ÐW€4ÑWÜ‡X�X×Ñ×Ñ˜DÓ!€1¨d !¤+°a·k±k×6GÑ6G×6KÑ6KÐL]Ó6^°2ð  pbÔqtÔuzÐ{ð  ALñ  |M÷  |Rñ  |Rð  X]ð  |Ró  |^ó  r_ð  pbð  `añ  pbÐ_`Ô_nð  IJ÷  IXñ  IXð  ce÷  clñ  clð  myñ  czô  cHô  ~Cð  DHð  INñ  DOò  PQò  RSð  TUð  PUñ  DV÷  D[ñ  D[ó  D]ó  ~^ð  Y[÷  Ybñ  Ybð  cnñ  Yoô  Y}ô  CHð  IMð  NSñ  ITò  UVò  WXð  YZð  UZñ  I[÷  I`ñ  I`ó  Ibó  Ccð  _a÷  _hñ  _hð  isñ  _tô  _Bð  dh÷  doñ  doð  pqö  drðrð 
ˆeˆÐÜœÓó )�V€Q€tØˆbŠD�D�c€!Ø€q‚SÐ%‰ØˆKÑ˜L™ØˆG�|Ð*‘CØˆ"‚uÐ!‰SØ!€sØ	€$ØMó T�k€dˆ6ÜŒV�[‰[˜C˜5  & ¨Ð/Ó0Ó1€4Ü��Q�t˜[Ñ(Ó)€1Øˆ;ÑÜ‡l�l�1�WÓ×"Ñ"Ó$€AØˆX‚~˜š!šAšg˜+™�aØ‡v�v�1€vƒ~€3Ø
ˆKÓØˆ‚sˆc’!’A�d�(‰m˜BÑ˜sÑ"¤B§H¡Hª^Ó$<Ñ<ˆ1¸QÀqÈ!ÂtÁÐQRÑ=RºQØ	
ˆe‰�sš1šQ˜t˜8‘} SÑ(¨Ñ-¬r¯x©xÈÈAÊ»ÒSbÓ/cÑc’AØ	
ˆg‰Úš¢}Ð
5°a¸±cÑ
:€T¸cÀ"ÀcÈ#Ï(É(Ë*ÁnÑBUÑ>UÒWXÒYZÐ[_ÐW_Ñ=`Ôac×aiÑaiÐjnÓaoÑ=oº1Ø	
ˆe‰�s˜2˜s 3§8¡8£:™~Ñ.Ñ.²²!°D°Ñ9¼"¿(¹(Â=Ó:QÑQ�AÐRSÐ\]Ð_`Ò\`ÑUXÐfgÑRgÒRSØ	
ˆAŠ��S˜#˜cŸh™h›j™.Ñ)Ñ)ª1ªQ¨t¨8Ñ4´R·X±XºlÓ5KÑKŠaØ	
ˆBŠ�#�c˜#‘g‘+šq¢ 4˜xÑ(¬¯©²-Ó)@Ñ@ŠqØ	
ˆBŠ�#�c˜3˜sŸx™x›z™>Ñ*Ñ*ªAªa°¨HÑ5´b·h±hº|Ó6LÑL‰qØ��S˜Ÿ™›‘^Ñ$Ñ$¢aª¨$ hÑ/´·±ºÓ0GÑG‰ØˆhŠØˆ�cˆ!�e€AˆAŠa’�"�1�"ˆf‹I˜QÐ"2Ñ2‘r¸Ñ;‹IØŒ�‰”B—I‘I—N‘N 1¨!°T�NÓ:¸4Ó	@Ñ@ÀÑBÀAÑE�Aà��Q’qš˜1�u‘X‘Ñ€A‚aŠˆ!€e�H¸QÀºU¨¨C°²!²A°a°%±©LÒ(8È˜a¢¢! A ™hÐ\]Ð_aÒ\aÑUXÐghÈAÊaÒPQÐRSÈeÉHÜŒb�g‰g�a˜˜!‹nÓ€1Ø
ˆH‚n�q˜‘s˜1‘u�Q ¤"§*¡*¬R¯Y©Y¯^©^¸AÀ1Èd¨^Ó-SÐTXÓ"YÑ YÐZ[Ñ [Ð]^Ñ^˜QØ€4ˆ�:”
œ4 Ñ+¨DÑ0°D°6¸°Ñ>¸qÀÀ{ÑARÖSð1Tô2 ‡H�H×Ñ×Ñ˜4Ó €!¨T ¤°Q·[±[×5FÑ5F×5JÑ5JÐK\Ó5]°"Ø
ˆ;Ñ×Ñ %ÐÓ(€#Ð9L¼3¼uÀS»>Ð9LÈ!Ñ9L¨¬Ðst÷  tCñ  tCÈRÏYÉYÐWcÑMdÔMrô  inð  osð  tyñ  ozò  {|ò  }~ð  @ð  {@ñ  oA÷  oFñ  oFó  oHó  iIð  DF÷  DMñ  DMð  NYñ  DZô  Dhô  nsð  txð  y~ñ  tò  @Aò  BCð  DEð  @Eñ  tF÷  tKñ  tKó  tMó  nNð  JL÷  JSñ  JSð  T^ñ  J_ô  Jmð  OS÷  OZñ  OZð  [\ô  O]Ü! !™HÐTXÖ,YÈq¨Q°¸D¸6ÀÀ1À#ÀTÐ/JÑ-JÒ,YÐghÐpxð  NYð  nyð  ~Ið  NXñ  iYñ  	Z€%Øˆ+Ñ�e—l‘lÐ1AÐ\_Ð`cÐ[dð  p_ñ  $`ô  aØˆ+ÑÜ
Œ6�;‰;˜#˜˜jÐ)Ó*Ó+€2¬j¸¸AÓ.>ºqÂÀ1¸uÑ.E¨AÌÔQS×QZÑQZÐ[\Ò]^Ò_`ÐaeÐ]eÑ[fÐghÐnoÔQpÓHqÒrsÒtuÐvwÐrwÑHxÀaÐ|}Ð~÷  Dñ  Dó  Fñ  }Fô  HKô  LQð  RS÷  RWñ  RWó  RYð  Z[÷  Z_ñ  Z_ó  Zañ  Raó  Lbð  cgó  Hhñ  |hÐyzÜŒd�;Ñ˜tÑ# LÑ0°¸Õ=Ø‡<�< 
¨4¨&°Ð<ÐOhð  NOð  PQò  NQñ  FJð  W\ð  xyô  QVð  WXñ  QYñ  Zô  [Ø€%ˆƒ+ðS)ôT ÐÑ×#Ñ#¤D§J¡JÐ9RÐ_dð  xTð  mrð  ~Jò  Qsð  {Gñ  bHñ  0Ið  QRô  %Sô  TÜÐÑ×*Ñ*¬4¯:©:ÄzÔZ_Ñ6`ÐhiÔ+jÔkØˆUˆ
Ðùó_ 	XùòL -Zs   Â "cÜc)F)FF)r   Únumpyr   Úmathr   rX   rÛ   rØ   Úpathlibr   Ú__file__Úresolverh   r}   rì   r   r{   r&   rM   r‚   rÞ   rò   r  © r'   r%   ú<module>r     sa   ðß 9× 9× 9Ó 9Ý Ù	ˆ(ƒ^×ÑÓ×$Ñ$€ØˆI�~€Ø€
�BˆeóGò,ó"~ò  `€Ú5€ó4r'   