Ë
    )cÉjX0 ã                   ó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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ZdZej                   j#                  ej$                  j'                  d e	j(                  «       «      dd«      ZdZ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œZdZdZdZdZdZdZd Zd!Zd"Z d#Z!ej                   j#                  ed$«      Z"d%Z#d•d&„Z$d'„ Z%d(„ Z&d–d)„Z'd*„ Z(g d+¢Z)d,„ Z*d—d-„Z+d.„ Z,d/„ Z-d0„ Z.d1„ Z/d2„ Z0d3„ Z1d Z2d4Z3d5Z4d6Z5dZ6d7„ Z7d8„ Z8d9„ Z9d:„ Z:d˜d;„Z;d<Z<d=Z=d>Z>d?Z?d˜d@„Z@de!dfdA„ZA	 	 d™dD„ZBdE„ ZCdF„ ZDdG„ ZEg dH¢ZFdI„ ZGdJ„ ZHdšdK„ZI	 d˜dL„ZJdM„ ZKdN„ ZLd˜dO„ZMdP„ ZNd#ZOdQZPdRZQdS„ ZRd˜dT„ZSd›dU„ZTeOfdV„ZUdWZVd5ZWdXZXdYZYeXdfdZ„ZZdœd[„Z[deVdfd\„Z\d]„ Z]d^„ Z^g d_¢Z_g d`¢Z`da„ Zadb„ Zb	 	 d�dc„Zcdd„ Zdde„ Zedf„ Zfdg„ Zgdh„ ZhdiZidZjdj„ Zkdk„ Zldl„ Zmdm„ Zn	 	 dždn„Zodœdo„Zpdp„ Zqdq„ Zrdr„ Zsds„ Ztdt„ Zudu„ Zvdv„ ZwdwZxdxZydyZzdzZ{dQZ|d{Z}d|Z~d}Zd~Z€dZ�dBZ‚d„ ZƒdŸd€„Z„d�eddddddCdCdd‚dxddCddƒdddCd„ddCdddd…fd†„Z…d‡„ Z†dˆ„ Z‡d‰„ ZˆdŠ„ Z‰d‹„ ZŠdŒ„ Z‹d�„ ZŒdŽ„ Z�d�„ ZŽd�„ Z�e�d‘k(  rk e�j"                  ed„¬’«       d“e�j$                  v r e�j&                   e�«       «       d”e�j$                  v r e�j&                   eŽ«       «        e�«        yy) u=	  
êµ¬ì¡°í•´ì„� ì„œë²„(fea_server.py) â€” í�¬íŠ¸ 8097
=========================================
í•˜ëŠ” ì�¼: ì œê´€ì›¹(fab.html)ì—�ì„œ ë³´ë‚¸ ë¶€ìž¬ ë©”ì‹œ + í•˜ì¤‘/êµ¬ì†� ì¡°ê±´ì�„ ë°›ì•„
        CalculiX(ccx) ë¡œ êµ¬ì¡°í•´ì„�ì�„ ë�Œë¦¬ê³ , ê²°ê³¼(ë³€ìœ„Â·von Mises ì�‘ë ¥Â·í•­ë³µ ëŒ€ë¹„ %)ë¥¼
        JSON ìœ¼ë¡œ ë�Œë ¤ì¤€ë‹¤.

[2ë‹¨ê³„ â€” ì‹¤ì œ í˜•ìƒ� í•´ì„�]
  1ë‹¨ê³„ì�˜ 'ì™¸ê³½ ìƒ�ìž� ê·¼ì‚¬' ë¥¼ ë²„ë¦¬ê³ , ë³´ë‚´ì˜¨ ì‚¼ê°�í˜• ë©”ì‹œë¥¼ ê·¸ëŒ€ë¡œ ì”�ë‹ˆë‹¤.
    â‘  ì •ì � ë³‘í•©(weld) â†’ â‘¡ ë‹«ížŒ ì†”ë¦¬ë“œì�¸ì§€ ê²€ì‚¬ â†’ â‘¢ tetgen ìœ¼ë¡œ ì‚¬ë©´ì²´ ì±„ìš°ê¸°
    â†’ â‘£ 2ì°¨ ì‚¬ë©´ì²´(C3D10)ë¡œ ìŠ¹ê²© â†’ â‘¤ ccx í•´ì„�
  Â· ì†� ë¹ˆ ê°�íŒŒì�´í”„Â·ì±„ë„�Â·êµ¬ë©� ëš«ë¦° íŒ�ìž¬ê°€ ì‹¤ì œ ë‹¨ë©´ ê·¸ëŒ€ë¡œ ê³„ì‚°ë�©ë‹ˆë‹¤.

  â˜… [2026-10-05] ë¶€í’ˆ 1ê°œ ì‹¤íŒ¨ê°€ ì „ì²´ë¥¼ ì£½ì�´ì§€ ì•ŠëŠ”ë‹¤ â€” 'ë¶€í’ˆë³„ ê²©ë¦¬'
    ì˜ˆì „ì—�ëŠ” ì‚¬ë©´ì²´ ë©”ì‹œë¥¼ ë§Œë“œëŠ” ì „ ê³¼ì •ì�´ try í•˜ë‚˜ë¡œ ë¬¶ì—¬ ìžˆì–´ì„œ, 293ë¶€í’ˆ ì¤‘
    ë‹¨ 1ê°œê°€ ê¹¨ì ¸ë�„ ì „ì²´ê°€ 'ì™¸ê³½ ìƒ�ìž� ê·¼ì‚¬'ë¡œ ë¬¼ëŸ¬ë‚¬ë‹¤. ê·¸ëŸ¬ë©´ ì œí’ˆ ì „ì²´ê°€
    ì†� ì°¬ ë„¤ëª¨ ë�©ì–´ë¦¬ê°€ ë�˜ê³  ì�‘ë ¥ì�´ 0ì—� ê°€ê¹�ê²Œ ë‚˜ì˜¨ë‹¤ â€” ì‹¤íŒ¨ë¥¼ ê²°ê³¼ì²˜ëŸ¼
    ë³´ì—¬ì£¼ëŠ” ê°€ìž¥ ë‚˜ì�œ ë�™ìž‘ì�´ì—ˆë‹¤. ì§€ê¸ˆì�€
      â‘  ë¶€í’ˆ 1ê°œ = STL 1ê°œ = tetgen 1íšŒ (part_sizes ë¥¼ ë°›ìœ¼ë©´ ì „ë¶€í„° ê·¸ëž¬ë‹¤)
      â‘¡ ê·¸ 1íšŒë¥¼ ë¶€í’ˆë§ˆë‹¤ ë”°ë¡œ try ë¡œ ê°�ì‹¸, ê¹¨ì§„ ë¶€í’ˆë§Œ ë¹¼ê³  ë‚˜ë¨¸ì§€ë¡œ í•´ì„�í•œë‹¤
      â‘¢ ë¹ ì§„ ë¶€í’ˆì�€ ë²ˆí˜¸Â·ì�´ë¦„Â·ì‚¬ìœ ë¥¼ ê²°ê³¼ JSON(failed_parts)ì—� ë°˜ë“œì‹œ ë‚¨ê¸´ë‹¤
      â‘£ ìž�ë�™ ì™¸ê³½ìƒ�ìž� í›„í‡´ëŠ” ì‚­ì œí–ˆë‹¤. ì“¸ ìˆ˜ ìžˆëŠ” ë¶€í’ˆì�´ í•˜ë‚˜ë�„ ì—†ìœ¼ë©´
         ok:false ì™€ "Në²ˆ ë¶€í’ˆ(ì�´ë¦„)ì—�ì„œ í˜•ìƒ� ì²˜ë¦¬ ì‹¤íŒ¨" ë¥¼ ë�Œë ¤ì¤€ë‹¤.
    (force_obb=True ëŠ” ê²€ì¦�ìš© ë¹„êµ�ì—�ë§Œ ë‚¨ì•„ ìžˆë‹¤ â€” selftest ê°€ ì“´ë‹¤)

  â˜… C3D4(1ì°¨ ì‚¬ë©´ì²´)ë¥¼ ì“°ì§€ ì•ŠëŠ” ì�´ìœ : êµ½íž˜ì—�ì„œ ì „ë‹¨ìž ê¹€(shear locking)ì�´ ì‹¬í•´
    ì–‡ì�€ ë²½ ë¶€ìž¬ê°€ ì‹¤ì œë³´ë‹¤ 2~5ë°° ë»£ë»£í•˜ê²Œ ë‚˜ì˜¨ë‹¤. ê·¸ëž˜ì„œ ì¤‘ê°„ì ˆì �ì�„ ì§�ì ‘ ë§Œë“¤ì–´
    C3D10(2ì°¨ ì‚¬ë©´ì²´)ë¡œ ì˜¬ë¦°ë‹¤(tetgen -o2 ì�˜ ì ˆì � ìˆœì„œì—� ì�˜ì¡´í•˜ì§€ ì•ŠëŠ”ë‹¤).

ë‹¨ìœ„: mm / N / MPa

ì‹¤í–‰:  python fea_server.py             (ì„œë²„ ì‹œìž‘, í�¬íŠ¸ 8097)
ê²€ì¦�:  python fea_server.py --selftest  (íŒ�ìž¬ + ê°�íŒŒì�´í”„ ì�´ë¡ ê°’ ëŒ€ì¡°)
ì¡°ì‚¬:  python fea_server.py --survey    (ì œí’ˆ OBJ ë“¤ì�´ ë‹«ížŒ ì†”ë¦¬ë“œì�¸ì§€ ì „ìˆ˜ ì¡°ì‚¬)
é    NuE   E:\ë�„ì§„íŒ©í† ë¦¬\SYSTEMS\calculix\calculix_2.23_4win\ccx_static.exeuA   E:\ë�„ì§„íŒ©í† ë¦¬\SYSTEMS\calculix\calculix_2.23_4win\tetgen.exeÚLOCALAPPDATAÚTempÚdzw_feai¡  u$   SS275 (êµ¬ SS400 ì�¼ë°˜êµ¬ì¡°ìš©ê°•)g    @	Ag333333Ó?g     0q@g\O™H•Û@>)ÚnameÚEÚnuÚfyÚrhou$   SS400 (êµ¬ ê·œê²©, ë‘�ê»˜ 16 ì�´í•˜)g      n@u$   SM490 (ìš©ì ‘êµ¬ì¡°ìš© ê³ ìž¥ë ¥ê°•)g     Pt@u    S45C (ê¸°ê³„êµ¬ì¡°ìš© íƒ„ì†Œê°•)g      ~@u&   STKR400 (ì�¼ë°˜êµ¬ì¡°ìš© ê°�íŒŒì�´í”„)u   AL6061-T6 (ì•Œë£¨ë¯¸ëŠ„)g    @Òð@g…ëQ¸Õ?gÎß\1'>)ÚSS275ÚSS400ÚSM490ÚS45CÚSTKR400ÚAL6061r   iðI ç      @çffffffþ?é(   i�  i   u/   ì„±ê¸´ ë©”ì‹œ â€” êµ­ë¶€ ì�‘ë ¥ê°’ì�€ ì°¸ê³ ìš©g      9@Úrepair_cachez
L3-hull400c                 óì  — t        j                  | t        ¬«      j                  dd«      }t	        |«      t	        |«      dz  z
  }|d| }t        j
                  ||z  «      j                  t         j                  «      }t        j                  |ddd¬«      \  }}}||   }|j                  dd«      }	|	dd…df   |	dd…df   k7  |	dd…df   |	dd…d	f   k7  z  |	dd…df   |	dd…d	f   k7  z  }
||	|
   fS )
ue   ë¸Œë�¼ìš°ì €ì�˜ ì‚¼ê°�í˜• ìˆ˜í”„(ì�¸ë�±ìŠ¤ ì—†ëŠ” position)ë¥¼ ì •ì � ë³‘í•©í•´ (V, F) ë¡œ ë§Œë“ ë‹¤.©Údtypeéÿÿÿÿé   Nr   T)ÚaxisÚreturn_indexÚreturn_inverseé   é   )	ÚnpÚasarrayÚfloatÚreshapeÚlenÚroundÚastypeÚint64Úunique)Ú	positionsÚtolÚPÚnÚkeyÚ_ÚuniqÚinvÚVÚFÚoks              õ;   E:\ë�„ì§„íŒ©í† ë¦¬\3DìŠ¤ìº”ë°�í‹°ì¹­ì‹œìŠ¤í…œ\fea_server.pyÚ	weld_meshr4   k   sï   € ä
�
‰
�9¤EÔ*×2Ñ2°2°qÓ9€AÜˆA‹”#�a“&˜1‘*Ñ€AØ	ˆ"ˆ1ˆ€AÜ
�(‰(�1�s‘7Ó
×
"Ñ
"¤2§8¡8Ó
,€CÜ—9‘9˜S q°tÈDÔQ�L€A€tˆSØ	ˆ$‰€AØ�‰�B˜Ó€AØ
ŠAˆqˆD‰'�Q’q˜!�t‘WÑ
 ¢1 a 4¡¨Aªa°¨d©GÑ!3Ñ	4¸º!¸Q¸$¹À1ÂQÈÀTÁ7Ñ8JÑ	K€BØˆa�‰eˆ8€Oó    c           
      óÔ  — | |dd…df      | |dd…df      | |dd…df      }}}t        j                  ||z
  ||z
  «      }dt         j                  j                  |d¬«      j	                  «       z  }t        t        j                  d|t        j                  ||«      «      j	                  «       dz  «      }t        j                  |dd…ddgf   |dd…ddgf   |dd…ddgf   g«      }t        j                  |d¬«      }t        j                  |dd	¬
«      \  }	}
t        |
dk(  j                  «       «      }|dkD  rd|z  |z  nd}||||t        |
dk7  j	                  «       «      dœS )u²   ë‹«ížŒ ì†”ë¦¬ë“œì�¸ì§€ + ë¶€í”¼Â·í‘œë©´ì �Â·í�‰ê·  ë²½ë‘�ê»˜ ì¶”ì •.
    ë²½ë‘�ê»˜ t â‰ˆ 2V/S â€” ì–‡ì�€ ê»�ë�°ê¸° í˜•ìƒ�ì—�ì„œ ì„±ë¦½(ê°�íŒŒì�´í”„ 100x50x4.5 ì—�ì„œ 4.5 ê·¼ì²˜).Nr   r   r   ç      à?©r   úij,ij->iç      @T©r   Úreturn_countsç       @ç        )ÚclosedÚ
volume_mm3Úarea_mm2Úwall_mmÚ	bad_edges)r   ÚcrossÚlinalgÚnormÚsumÚabsÚeinsumÚvstackÚsortr'   ÚboolÚallÚint)r0   r1   ÚaÚbÚcÚcrÚareaÚvolÚer-   Úcntr?   Úthicks                r3   Úmesh_metricsrX   x   sR  € ð �’!�Q�$‘‰j˜!˜Aša ˜d™G™* a¨ª!¨Q¨$©¡jˆ!€q€AÜ	�‰�!�a‘%˜˜Q™Ó	€BØ”—‘—‘ ¨�Ó+×/Ñ/Ó1Ñ1€DÜ
Œb�i‰i˜
 A¤r§x¡x°°1£~Ó6×:Ñ:Ó<¸sÑBÓ
C€Cä
�	‰	�1’Q˜˜A˜�Y‘< ¢1 q¨! f 9¡¨q²°Q¸°F°©|Ð<Ó=€AÜ
�‰�˜Ô€AÜ�Y‰Y�q˜q°Ô5�F€A€sÜ�3˜!‘8—.‘.Ó"Ó#€FØ"&¨¢(ˆS�3‰Y˜Ò°€EØ¨C¸TØ¬3°°q±¯~©~Ó/?Ó+@ñBð Br5   c           	      ó*  — t        | d«      5 }|j                  d«       |D ]Ë  }||d      ||d      ||d      }}}t        j                  ||z
  ||z
  «      }t        j                  j                  |«      }	|	dkD  r||	z  nt        j                  g d¢«      }|j                  dt        |«      z  «       |||fD ]  }
|j                  dt        |
«      z  «       Œ! |j                  d	«       ŒÍ |j                  d
«       d d d «       y # 1 sw Y   y xY w)NÚwzsolid s
r   r   r   )r>   r>   ç      ð?z$ facet normal %g %g %g
  outer loop
z   vertex %.6f %.6f %.6f
z  endloop
 endfacet
zendsolid s
)ÚopenÚwriter   rD   rE   rF   ÚarrayÚtuple)Úpathr0   r1   ÚfÚtriÚp0Úp1Úp2ÚnrmÚLÚps              r3   Ú	write_stlri   ‰   sí   € Ü	ˆd�CŒ˜AØ	�‰�ÔÛˆCØ˜3˜q™6™ A c¨!¡f¡I¨q°°Q±©y�B�ˆBÜ—(‘(˜2 ™7 B¨¡GÓ,ˆCÜ—	‘	—‘˜sÓ#ˆAØ šU�#˜’'¬¯©²Ó(>ˆCØ�G‰GÐ<¼uÀS»zÑIÔJØ˜"˜b“\�Ø—‘Ð4´u¸Q³xÑ?Õ@ð "à�G‰GÐ,Õ-ð ð 	
�‰�Ô÷ 
�‰ús   �C3D	Ä	Dc           	      ó¤  — t         j                  j                  |d«      }t        || |«       t	        j                  t         j                  j                  |d«      «      D ]  }t        j
                  |«       Œ |r|nd|z  }t        j                  t        |dg|ddd|¬«      }	t         j                  j                  |d«      }
t         j                  j                  |d«      }t         j                  j                  |
«      rt         j                  j                  |«      s/t        d	|	j                  xs d
dd j                  dd«      z   «      ‚t        |
d¬«      5 }|j                  «       j                  «       }t!        |d   «      }t#        j$                  |df«      }d}|D ]{  }|j'                  d«      s|j)                  «       sŒ%|j                  «       }t+        |d   «      t+        |d   «      t+        |d   «      f|t!        |d   «      dz
  <   |dz  }||k\  sŒ{ n ddd«       t        |d¬«      5 }|j                  «       j                  «       }t!        |d   «      }t#        j$                  |dft"        j,                  ¬«      }d}|D ]”  }|j'                  d«      s|j)                  «       sŒ%|j                  «       }t!        |d   «      dz
  t!        |d   «      dz
  t!        |d   «      dz
  t!        |d   «      dz
  g|t!        |d   «      dz
  <   |dz  }||k\  sŒ” n ddd«       |fS # 1 sw Y   �ŒxY w# 1 sw Y   fS xY w)uB   ë°˜í™˜: (ì ˆì � (N,3), ì‚¬ë©´ì²´ (M,4) 0-base) / ì‹¤íŒ¨ ì‹œ ì˜ˆì™¸z	shape.stlz	shape.1.*ú-pq1.4a%.6fTÚreplace©ÚcwdÚcapture_outputÚtextÚerrorsÚtimeoutzshape.1.nodezshape.1.eleu   tetgen ì‹¤íŒ¨: Ú iþÿÿNÚ
z | ©rq   r   r   Ú#r   r   é   r   )Úosr`   Újoinri   ÚglobÚremoveÚ
subprocessÚrunÚ
TETGEN_EXEÚisfileÚRuntimeErrorÚstdoutrl   r\   ÚreadlineÚsplitrN   r   ÚzerosÚ
startswithÚstripr!   r&   )r0   r1   ÚwdÚmaxvolÚswitchesrr   Ústlra   ÚswÚprÚnfÚefÚheadÚnnÚptsÚgotÚlnrh   ÚneÚtetss                       r3   Ú
run_tetgenr–   ›   sÁ  € ä
�'‰'�,‰,�r˜;Ó
'€CÜˆc�1�aÔÜ�Y‰Y”r—w‘w—|‘| B¨Ó4Ö5ˆÜ
�	‰	�!�ð 6á‰ M°FÑ$:€BÜ	�‰œ R¨Ð5¸2Ø'+°$¸yÐRYô
[€Bä	�‰�‰�b˜.Ó	)€BÜ	�‰�‰�b˜-Ó	(€BÜ�G‰G�N‰N˜2Ô¤2§7¡7§>¡>°"Ô#5ÜÐ,°·	±	²¸RÀÀÐ/G×/OÑ/OÐPTÐV[Ó/\Ñ\Ó]Ð]ä	ˆb˜Õ	# qØ�z‰z‹|×!Ñ!Ó#ˆÜ��a‘‹\ˆÜ�h‰h˜˜A�wÓˆØˆÛˆBØ�}‰}˜SÔ!¨¯©¬ØØ—‘“
ˆAÜ"'¨¨!©£+¬u°Q°q±T«{¼EÀ!ÀAÁ$»KÐ!HˆC”�A�a‘D“	˜A‘ÑØ�1‰HˆCØ�b‹yÙð ÷ 
$ô 
ˆb˜Õ	# qØ�z‰z‹|×!Ñ!Ó#ˆÜ��a‘‹\ˆÜ�x‰x˜˜Q˜¤r§x¡xÔ0ˆØˆÛˆBØ�}‰}˜SÔ!¨¯©¬ØØ—‘“
ˆAÜ#& q¨¡t£9¨q¡=´#°a¸±d³)¸a±-ÄÀQÀqÁTÃÈQÁÔPSÐTUÐVWÑTXÓPYÐ\]ÑP]Ð"^ˆD”�Q�q‘T“˜Q‘ÑØ�1‰HˆCØ�b‹yÙð ÷ 
$ð �ˆ9Ð÷5 
$Ñ	#ú÷ 
$ð �ˆ9Ðús&   Å CL6È#L6È;C+MÌ'MÌ6M ÍMc           	      óš  — | |dd…df      | |dd…df      | |dd…df      | |dd…df      f\  }}}}t        j                  d||z
  t        j                  ||z
  ||z
  «      «      }|dk  }|j                  «       r5||df   j	                  «       ||df   j	                  «       c||df<   ||df<   |t        |j                  «       «      fS )ui   ë¶€í”¼ê°€ ì�Œìˆ˜ì�¸ ì‚¬ë©´ì²´ëŠ” ì ˆì � 2ê°œë¥¼ ë°”ê¿” ì–‘ìˆ˜ë¡œ. (ccx ëŠ” ì�Œì�˜ ì•¼ì½”ë¹„ì•ˆì�„ ê±°ë¶€)Nr   r   r   r   r9   )r   rI   rD   ÚanyÚcopyrN   rG   )r‘   r•   rc   rd   re   Úp3ÚvÚbads           r3   Úfix_orientationr�   Æ   sÙ   € à˜ša ˜d™‘_ c¨$ªq°!¨t©*¡o°s¸4ÂÀ1À¹:±ÈÈDÒQRÐTUÐQUÉJÉÐW�N€BˆˆB�Ü
�	‰	�*˜b 2™g¤r§x¡x°°R±¸¸b¹Ó'AÓB€AØ
ˆa‰%€CØ
‡w�w„yØ%)¨#¨q¨&¡\×%6Ñ%6Ó%8¸$¸sÀA¸v¹,×:KÑ:KÓ:MÐ"ˆˆS�!ˆV‰�d˜3 ˜6‘lØ”�S—W‘W“Y“ÐÐr5   )©r   r   ©r   r   )r   r   ©r   r   ©r   r   ©r   r   c           
      óÞ  — t        j                  t        D ��cg c]  \  }}|dd…||gf   ‘Œ c}}d¬«      }t        j                  |d¬«      }t        j                  |dd¬«      \  }}d| |dd…df      | |dd…df      z   z  }t        j
                  | |g«      }t        |«      }	|j                  d|	«      j                  t        | «      z   }
|t        j                  ||
g«      fS c c}}w )	u™   1ì°¨ ì‚¬ë©´ì²´ â†’ 2ì°¨ ì‚¬ë©´ì²´. ì¤‘ê°„ì ˆì �ì�„ ì§�ì ‘ ë§Œë“¤ì–´ ccx ìˆœì„œë¥¼ ë³´ìž¥í•œë‹¤
    (tetgen -o2 ì�˜ ë‚´ë¶€ ìˆœì„œì—� ì�˜ì¡´í•˜ì§€ ì•Šì�Œ).Nr   r8   r   T©r   r   r7   é   )
r   ÚconcatenateÚC3D10_EDGESrK   r'   rJ   r#   r"   ÚTÚhstack)r‘   r•   rO   rP   Úear.   r/   ÚmidsÚnodesr”   Úmid_idxs              r3   Ú
make_c3d10r®   Ô   sØ   € ô 
�‰µ[ÔA±[©T¨Q°˜ša ! Q ˜i›°[ÒAÈÔ	J€BÜ	�‰�˜!Ô	€BÜ—	‘	˜" 1°TÔ:�I€Dˆ#Ø�#�dš1˜a˜4‘j‘/ C¨ªQ°¨T©
¡OÑ3Ñ4€DÜ�I‰I�s˜D�kÓ"€EÜ	ˆT‹€BØ�{‰{˜1˜bÓ!×#Ñ#¤c¨#£hÑ.€GØ”"—)‘)˜T 7˜OÓ,Ð,Ð,ùó Bs   ™C)
c                 óf   — 	 t        | ||dd|¬«      \  }}t        |«      dkD  S # t        $ r Y yw xY w)Nr>   ú-p©r‰   rr   r   F)r–   r#   Ú	Exception)r0   r1   r‡   rr   r‘   r•   s         r3   Ú	_tet_ok_pr³   ô   s?   € ðÜ˜q ! R¨°tÀWÔM‰	ˆˆTÜ�4‹y˜1‰}ÐøÜò Ùðús   ‚!$ ¤	0¯0c                 óx   — 	 t        | |«      d   }|dk\  xr |t        |d«      dz  dz   k  S # t        $ r Y yw xY w)uY  íŒ�ë‘�ê»˜ íƒ€ë‹¹ì„± ê²Œì�´íŠ¸.
    â˜… tetgen í†µê³¼ë§Œìœ¼ë¡œ ìˆ˜ë¦¬ë¥¼ ë°›ì•„ë“¤ì�´ë©´ ì•ˆ ë�œë‹¤ â€” êµ¬ë©�ë©”ì›€ì�´ ë¶€í”¼ë¥¼ 25ë°°ë¡œ ë¶€í’€ë ¤ë�„
      tetgen ì�€ í†µê³¼ì‹œí‚¨ë‹¤(ì‹¤ì¸¡ Group73/81: 1,580mm3 â†’ 40,690mm3).
      íŒ�ë‘�ê»˜ t=2V/S ê°€ 0.8mm ì�´ìƒ�ì�´ê³  ë¶€í’ˆ ìµœì†Œë³€ì�˜ 1.2ë°°+1 ì�´í•˜ì—¬ì•¼ ë¬¼ë¦¬ì �ìœ¼ë¡œ ê°€ëŠ¥í•˜ë‹¤.rB   Fçš™™™™™é?r[   ç333333ó?)rX   r²   Úmax)r0   r1   ÚeminÚts       r3   Ú_thickness_okrº   ü   sR   € ð
Ü˜˜AÓ˜yÑ)ˆð �‰HÒ;˜1¤ D¨#£°Ñ 4°sÑ :Ñ:Ð;øô ò Ùðús   ‚- ­	9¸9c                 ó°  — dd l }|j                  | |d¬«      }|j                  dd¬«       |j                  |j	                  «       «       |j                  |j                  «       «       |j                  «        	 |j                  «        t        j                  |j                  «      t        j                  |j                  «      fS # t        $ r Y ŒIw xY w)Nr   F©ÚverticesÚfacesÚprocessT)Ú	merge_texÚ
merge_norm)ÚtrimeshÚTrimeshÚmerge_verticesÚupdate_facesÚnondegenerate_facesÚunique_facesÚremove_unreferenced_verticesÚfix_normalsr²   r   r    r½   r¾   )r0   r1   rÂ   Úms       r3   Ú	_tm_cleanrË     s©   € ÛØ�‰ ¨!°UˆÓ;€AØ×Ñ˜t°ÐÔ5Ø‡N�N�1×(Ñ(Ó*Ô+Ø‡N�N�1—>‘>Ó#Ô$Ø×"Ñ"Ô$ðØ	�‰Œô �:‰:�a—j‘jÓ!¤2§:¡:¨a¯g©gÓ#6Ð6Ð6øô ò Ùðús   Á;C	 Ã		CÃCc                 ó¬  — dd l }|j                  t        j                  | t        j                  «      t        j                  |t        j
                  «      ¬«      }|j                  |«      j                  «       }t        j                  |j                  d d …d d…f   t        «      t        j                  |j                  t        j                  «      fS )Nr   )Úvert_propertiesÚ	tri_vertsr   )Ú
manifold3dÚMeshr   r    Úfloat32Úuint32ÚManifoldÚto_meshrÍ   r!   rÎ   r&   )r0   r1   ÚMÚmeshÚos        r3   Ú_manifold_passrØ     s‘   € ÛØ�6‰6¤"§*¡*¨Q´·
±
Ó";ÜŸJ™J q¬"¯)©)Ó4ð ó 6€Dà	�
‰
�4Ó× Ñ Ó"€AÜ�:‰:�a×'Ñ'ª¨2¨A¨2¨Ñ.´Ó6¼¿
¹
À1Ç;Á;ÔPR×PXÑPXÓ8YÐYÐYr5   c           
      ó&  — t        «       i }}| D ]|  }|d   |d   f|d   |d   f|d   |d   ffD ]Z  \  }}t        ||«      t        ||«      f}|j                  |d«      dz   ||<   |j	                  t        |«      t        |«      f«       Œ\ Œ~ |D ��cg c]-  \  }}|t        ||«      t        ||«      f   dk(  r
||f|vr||f‘Œ/ }}}i }|D ]&  \  }}|j                  |g «      j                  |«       Œ( t        «       g }
}	|D ]€  \  }}||	v rŒg |}}||v rN||	vrJ|	j	                  |«       |j                  |«       ||   D �cg c]	  }||	vsŒ|‘Œ }}|sn|d   }||v r||	vrŒJt        |«      dk\  sŒp|
j                  |«       Œ‚ |
S c c}}w c c}w )uF   ìœ í–¥ halfedge ë¡œ ê²½ê³„ ê³ ë¦¬ë¥¼ ì˜¬ë°”ë¥¸ ìˆœì„œë¡œ ì¶”ì¶œí•œë‹¤.r   r   r   r   )	ÚsetÚminr·   ÚgetÚaddrN   Ú
setdefaultÚappendr#   )r1   ÚherV   r¹   rO   rP   ÚkÚbndÚnxtÚusedÚloopsÚa0r-   ÚloopÚcurÚxÚcands                    r3   Ú
_dir_loopsrë     sÊ  € ä‹e�Rˆ€BÛˆØ˜‘d˜A˜a™D�\ A a¡D¨!¨A©$ <°!°A±$¸¸!¹°Ó>‰DˆAˆqÜ�Q˜“œC  1›IÐ&ˆAØ—W‘W˜Q “] QÑ&ˆC�‰FØ�F‰F”C˜“FœC ›FÐ#Õ$ñ ?ð ñ
 !#ô E¡‘f�q˜!Ø”3�q˜!“9œc ! Q›iÐ(Ñ)¨QÒ.°A°q°6ÀÑ3Cð ˆqŠ6 €Cñ Eà
€CÛ‰ˆˆ1Ø�‰�q˜"Ó×$Ñ$ QÕ'ð ä“%˜ˆ%€DÛ‰ˆˆAØ�‰:ØØ˜ˆcˆØ�S‰j˜S¨™_Ø�H‰H�SŒMØ�K‰K˜ÔØ" 3šxÓ9™x˜!¨1°Dª=’A˜xˆDÐ9ÙØØ�q‘'ˆCð �S‰j˜S¨š_ô ˆt‹9˜‹>Ø�L‰L˜Õð ð €Lùó'Eùò :s   Â2FÅ	FÅFc           
      ó"  — ddl }g }t        |«      D �]¨  }t        j                  |t        j                  ¬«      }| |   | |   j                  d¬«      z
  }	 t        j                  j                  |d¬«      \  }}}t        j                  ||d   z  ||d   z  gd¬«      j                  t        j                  «      }	dt        j                  |	dd…df   t        j                  |	dd…df   d	«      z  t        j                  |	dd…df   d	«      |	dd…df   z  z
  «      z  }
|
dk  r|	ddd	…   |ddd	…   }}		 |j                  |	t        j                  t        |	«      g«      «      }t        |«      s�Œc|j!                  |t        j"                  |t        j                  «      j%                  d	d
«         «       �Œ« |s| |dfS | t        j&                  |g|z   «      t        d„ |D «       «      fS # t        $ r Y �Œëw xY w# t        $ r Y �Œûw xY w)uW   ê²½ê³„ ê³ ë¦¬ë¥¼ ìµœì �í•© í�‰ë©´ì—� íˆ¬ì˜�í•´ earcut ìœ¼ë¡œ ì‚¼ê°�ë¶„í• í•´ ë�®ëŠ”ë‹¤.r   Nr   r8   F)Úfull_matricesr   r7   r   r   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N©r#   )Ú.0rO   s     r3   Ú	<genexpr>z_earcut_fill.<locals>.<genexpr>S  s   è ø€ Ð'<¹°1¬¨A¯¹ùó   ‚)Úmapbox_earcutrë   r   r^   r&   ÚmeanrE   Úsvdr²   Ústackr%   Úfloat64rG   ÚrollÚtriangulate_float64r#   rß   r    r"   rJ   )r0   r1   ÚecrÝ   ÚlpÚidxÚQr-   ÚVtÚuvÚArb   s               r3   Ú_earcut_fillr  <  s×  € ãØ
€CÜ˜�mˆÜ�h‰h�r¤§¡Ô*ˆØˆc‰F�Q�s‘V—[‘[ a�[Ó(Ñ(ˆð	Ü—y‘y—}‘} Q°e�}Ó<‰HˆAˆq�"ô �X‰X�q˜2˜a™5‘y ! b¨¡e¡)Ð,°1Ô5×<Ñ<¼R¿Z¹ZÓHˆØ”"—&‘&˜šA˜q˜D™¤B§G¡G¨Bªq°!¨t©H°bÓ$9Ñ9¼B¿G¹GÀBÂqÈ!ÀtÁHÈbÓ<QÐTVÒWXÐZ[ÐW[ÑT\Ñ<\Ñ\Ó]Ñ]ˆØˆqŠ5Ø™˜2˜‘h ¡D b D¡	�ˆBð	Ø×(Ñ(¨¬R¯X©X´s¸2³w°iÓ-@ÓAˆCô ˆsŽ8Ø�J‰J�sœ2Ÿ:™: c¬2¯8©8Ó4×<Ñ<¸RÀÓCÑDÖEð! ñ" Ø�!�QˆwˆØŒb�i‰i˜˜˜c™	Ó"¤CÑ'<¹Ó'<Ó$<Ð<Ð<øô ò 	Úð	ûô ò 	Úð	ús$   Á%G1Ä9/HÇ1	G>Ç=G>È	HÈHc           	      ó*  — ddl }|j                  j                  |j                  j	                  t        j                  | t        «      «      |j                  j                  t        j                  |t
        j                  «      «      «      }|j                  t        |«      «      }|j                  «        |j                  «        |j                  «        t        j                  |j                  «      t        j                  |j                   «      fS )uB   ì‚¼ê°�í˜• ìˆ˜ë¥¼ ëª©í‘œì¹˜ë¡œ ì¤„ì�¸ë‹¤(open3d 2ì°¨ì˜¤ì°¨ ê°�ì‡„).r   N)Úopen3dÚgeometryÚTriangleMeshÚutilityÚVector3dVectorr   r    r!   ÚVector3iVectorÚint32Úsimplify_quadric_decimationrN   Úremove_degenerate_trianglesÚremove_duplicated_verticesrÈ   r½   Ú	triangles)r0   r1   ÚtargetÚo3drÊ   s        r3   Ú	_decimater  V  s´   € ãØ�‰×!Ñ! #§+¡+×"<Ñ"<¼R¿Z¹ZÈÌ5Ó=QÓ"RØ"%§+¡+×"<Ñ"<¼R¿Z¹ZÈÌ2Ï8É8Ó=TÓ"Uó	W€Aà	×%Ñ%¤c¨&£kÓ2€AØ×!Ñ!Ô#Ø× Ñ Ô"Ø×"Ñ"Ô$Ü�:‰:�a—j‘jÓ!¤2§:¡:¨a¯k©kÓ#:Ð:Ð:r5   çš™™™™™©?r[   ç      D@c                 ób  ‡‡— t        j                  | t        «      } t        | «      dk  ry| j	                  d¬«      | j                  d¬«      z
  Št        t        j                  ‰«      «      Š‰‰   t        kD  rd‰fS t        ˆˆfd„t        d«      D «       «      }|d   t        k  rd‰fS d‰fS )uÅ  bbox ìµœì†Œë³€ì�´ 0 ì—� ê°€ê¹Œìš´ê°€ â†’ ë‘�ê»˜ 0 ë©´ í˜•ìƒ�.
    â˜… ë‹¨, ë©´ ì•ˆìª½(ë‚˜ë¨¸ì§€ ë‘� ë³€)ë�„ íŒ�ì�´ë�¼ í•  ë§Œí�¼ì�€ ì»¤ì•¼ í•œë‹¤.
      ì‹¤ì¸¡: 85ë²ˆ Group74 ëŠ” 0 x 0.06 x 2.25mm ì‚¼ê°�í˜• 1ê°œë‹¤ â€” ë‘� ë³€ì�´ ë�™ì‹œì—�
      ì°Œê·¸ëŸ¬ì§„ CAD ì°Œêº¼ê¸°ì�´ê³  ë¶€ìž¬ê°€ ì•„ë‹ˆë‹¤. ì�´ê²ƒì�„ ì••ì¶œí•´ 'ì‚´ë ¸ë‹¤' ê³  ì �ìœ¼ë©´
      ê³„ì‚° ì•ˆ í•œ ê²ƒ(ìžˆì§€ë�„ ì•Šì�€ ë¶€ìž¬)ì�„ í‘œì‹œí•˜ëŠ” ì§“ì�´ë‹¤. ì‚¬ìœ ë¥¼ ê·¸ëŒ€ë¡œ ë‚¨ê¸´ë‹¤.r   )Fr   r   r8   Fc              3   óF   •K  — | ]  }|‰k7  sŒ	t        ‰|   «      –— Œ y ­wrï   )r!   )rñ   rá   ÚaxÚexts     €€r3   rò   z is_flat_sheet.<locals>.<genexpr>†  s    øè ø€ Ð@©H q¸¸R»”U˜3˜q™6—]©Hùs   ƒ
!Ž!T)r   r    r!   r#   r·   rÛ   rN   ÚargminÚSHEET_FLAT_TOL_MMÚsortedÚrangeÚSHEET_MIN_SPAN_MM)r0   Úinplaner  r  s     @@r3   Úis_flat_sheetr  y  sž   ù€ ô 	�
‰
�1”eÓ€AÜ
ˆ1ƒv�‚zØØ
�%‰%�Qˆ%‹-˜!Ÿ%™% Q˜%›-Ñ
'€CÜ	ŒR�Y‰Y�s‹^Ó	€BØ
ˆ2�wÔ"Ò"Ø�bˆyÐÜÔ@¬E°!¬HÓ@Ó@€GØˆq�zÔ%Ò%Ø�bˆyÐØ�ˆ8€Or5   c                 óÀ  — | \  }}g }|D ]¼  \  \  }}}t         |cxk  r	t        k  sn Œt        j                  t        j                  |«      dz
  t        j                  |«      k  «      sŒat        j                  t        j                  |«      dz
  t        j                  |«      k  «      sŒ£|j                  t        |«      «       Œ¾ |r,t        t        j                  |«      «      dt        |«      z  fS |D ��cg c]'  \  }}t         |cxk  r
t        k  sŒn nt        |«      ‘Œ) }	}}|	r,t        t        j                  |	«      «      dt        |	«      z  fS yc c}}w )un   íŒ�ë‘�ê»˜ ì¶”ì •. neigh = [(ì�´ì›ƒ bbox(lo,hi), ì‹¤ì¸¡ ë²½ë‘�ê»˜), ...]
    ë°˜í™˜: (ë‘�ê»˜ mm, ê·¼ê±° ë¬¸ìž¥)g      >@u'   ì�´ì›ƒ ë¶€ìž¬ %dê°œ ë²½ë‘�ê»˜ ì¤‘ì•™ê°’u@   ì�´ì›ƒ ì—†ì�Œ â€” ê¸°ê³„ ì „ì²´ ë¶€ìž¬ ë²½ë‘�ê»˜ ì¤‘ì•™ê°’ %dê°œ)NuJ   ì¶”ì • ê·¼ê±°ê°€ ì—†ìŠµë‹ˆë‹¤(ë²½ë‘�ê»˜ë¥¼ ìž° ë¶€ìž¬ê°€ í•˜ë‚˜ë�„ ì—†ì�Œ))	ÚSHEET_T_MIN_MMÚSHEET_T_MAX_MMr   rM   r    rß   r!   Úmedianr#   )
ÚbbÚneighÚloÚhiÚnearÚnloÚnhirZ   Ú_bÚallws
             r3   Úguess_sheet_tr,  Œ  s  € ð �F€BˆØ€DÛ‰‰
ˆˆc�AÜ !Ô5¤~Ô5ØÜ�6‰6”"—*‘*˜S“/ DÑ(¬B¯J©J°r«NÑ:Õ;Ü�6‰6”"—*‘*˜R“. 4Ñ'¬2¯:©:°c«?Ñ:Õ;Ø�K‰Kœ˜a›Õ!ð ñ Ü”R—Y‘Y˜t“_Ó%Ð'PÔSVÐW[ÓS\Ñ'\Ð\Ð\Ù$)ÔS¡E™˜"˜a¬^¸qÔ-RÄNÖ-RŒE�!�H E€DÑSÙÜ”R—Y‘Y˜t“_Ó%Ð'iÔloÐptÓluÑ'uÐuÐuØ]ùó Ts   Ã<EÄEc           	      ó  — t        j                  | t        «      } t        j                  |t         j                  «      }t	        |«      dk  s|dkD  syt        j
                  d«      }t        |«      dz  |t        |«      <   t	        | «      }t        j                  | |z
  | |z   g«      }i }|D ]{  }|d   |d   f|d   |d   f|d   |d   ffD ]Y  \  }	}
t        t        |	«      t        |
«      «      t        t        |	«      t        |
«      «      f}|j                  |d«      dz   ||<   Œ[ Œ} g }|D ]�  }|d   |d   f|d   |d   f|d   |d   ffD ]k  \  }	}
t        |	«      t        |
«      }
}	|t        |	|
«      t        |	|
«      f   dk(  sŒ;|j                  |	|
|
|z   g«       |j                  |	|
|z   |	|z   g«       Œm Œ� |syt        j                  |dd…ddd…f   ||z   t        j                  |t         j                  «      g«      }||fS )u»   í�‰ë©´ ì‚¼ê°�í˜• íŒ�ì�„ ë‘�ê»˜ t ì�˜ ë‹«ížŒ ì†”ë¦¬ë“œë¡œ(íŒ� ì¤‘ì•™ë©´ ê¸°ì¤€ +-t/2).
    ìœ„/ì•„ëž˜ ë©´ + ê²½ê³„ì—£ì§€ ì¸¡ë²½ â†’ ëª¨ë“  ì—£ì§€ê°€ ì •í™•ížˆ 2ë²ˆ ì“°ì�´ëŠ” ë‹«ížŒ ê»�ì§ˆ.r   r   Nr   r=   r   r   )r   r    r!   r&   r#   r„   rN   rJ   rÛ   r·   rÜ   rß   )r0   r1   r¹   r  Údr+   ÚV2rV   ÚtrrO   rP   rá   ÚsideÚF2s                 r3   Úextrude_flat_sheetr3  Ÿ  sú  € ô 	�
‰
�1”eÓ€AÜ
�
‰
�1”b—h‘hÓ€AÜ
ˆ1ƒv�‚z˜!˜aš%ØÜ
�‰�‹€AÜ�q“˜C‘€A„cˆ"ƒg�JÜˆA‹€AÜ	�‰�A˜‘E˜1˜q™5�>Ó	"€BØ
€CÛˆØ˜‘e˜R ™U�^ b¨¡e¨R°©U ^°b¸±e¸RÀ¹U°^ÓD‰DˆAˆqÜ”S˜“VœS ›VÓ$¤c¬#¨a«&´#°a³&Ó&9Ð:ˆAØ—W‘W˜Q “] QÑ&ˆC�ŠFñ Eð ð €DÛˆØ˜‘e˜R ™U�^ b¨¡e¨R°©U ^°b¸±e¸RÀ¹U°^ÓD‰DˆAˆqÜ�q“6œ3˜q›6ˆqˆAØ”C˜˜1“Iœs 1 a›yÐ)Ñ*¨aÓ/Ø—‘˜Q  1 q¡5˜MÔ*Ø—‘˜Q  A¡ q¨1¡uÐ-Õ.ñ	 Eð ñ ØÜ	�‰�A’a™˜2˜�g‘J  A¡¤r§z¡z°$¼¿¹Ó'AÐBÓ	C€BØˆrˆ6€Mr5   c           	      óž  ‡‡‡‡‡— ddl }|j                  t        j                  t        j                  | d«      «      j                  «       t        j                  t        j                  |t        j                  «      «      j                  «       z   t        j                  «       z   «      j                  «       dd }t        j                  j                  t        |dz   «      Š	 t        j                  t        d¬«       t        j                  j!                  ‰«      r,t        j"                  ‰«      }|d   |d	   t%        |d
   «      fS 	 ˆfd„Št)        | «      r.t+        t        j,                  | d¬«      j/                  «       «      ndŠdŠˆˆˆˆfd„} || |d«      }|r|S ‰dz  Š	 t1        | |«      \  }}	 |||	d«      }|r|S 	 ‰dz  Š	 t3        | |«      \  }
} ||
|d«      }|r|S ‰dz  Š	 t5        |
|«      \  }}}|r2 |||d«      }|r|S ‰dz  Š	 t1        ||«      \  }} |||d«      }|r|S 	 ‰dz  Š	 ddl}|j9                  | |d¬«      j:                  }t        j                  |j<                  «      t        j                  |j>                  «      }}t)        |«      t@        kD  r	 tC        ||t@        «      \  }}t        j                  j                  ‰d«      }t        j                  |d¬«       t)        |«      dk\  rtE        |||«      r
 ‰||d«      S t        jF                  d«      t        jF                  dt        j                  «      dfS # t&        $ r Y �Œw xY w# t&        $ r Y �Œ¬w xY w# t&        $ r | |}}
Y �Œ«w xY w# t&        $ r
 |
|d}}}Y �Œ�w xY w# t&        $ r Y �Œyw xY w# t&        $ r Y Œûw xY w# t&        $ r Y Œ®w xY w)u  ì‚¬ë‹¤ë¦¬ë¥¼ í•œ ë‹¨ì”© ì˜¬ë�¼ê°€ë©° 'tetgen -p ì„±ê³µ + ë‘�ê»˜ íƒ€ë‹¹' ì�„ ë§Œì¡±í•˜ëŠ” í˜•ìƒ�ì�„ ì°¾ëŠ”ë‹¤.
    ë°˜í™˜: (V, F, ë°©ë²•ì�´ë¦„).  ì „ë¶€ ì‹¤íŒ¨í•˜ë©´ (ë¹ˆë°°ì—´, ë¹ˆë°°ì—´, 'ì‹¤íŒ¨').
    ë””ìŠ¤í�¬ ìº�ì‹œëŠ” (V,F,ì‚¬ë‹¤ë¦¬ë²„ì „) SHA-1 í‚¤. ì„±ê³µë§Œ ìº�ì‹œí•œë‹¤.r   Nrw   é   ú.npzT©Úexist_okr0   r1   rÊ   c                 ó†   •— 	 t        j                  ‰| |t        j                  |«      ¬«       | ||fS # t        $ r Y Œw xY w)N)r0   r1   rÊ   )r   Úsavez_compressedr^   r²   )ÚVxÚFxÚmethÚcps      €r3   Úsavezrepair_for_tet.<locals>.saveÍ  sF   ø€ ð	Ü×Ñ  b¨B´"·(±(¸4³.ÕAð �2�tˆ|Ðøô ò 	Ùð	ús   ƒ,4 ´	A ¿A r8   r>   c                 óø   •— t        |«      rt        | «      dk  ry t        j                  j                  ‰d‰z  «      }t        j                  |d¬«       t        | ||«      sy t        | |‰«      sy  ‰| ||«      S )Nrw   zrp%dTr7  )r#   rx   r`   ry   Úmakedirsr³   rº   )r;  r<  r=  r.  r¸   r?  Útriesr‡   s       €€€€r3   Úacceptzrepair_for_tet.<locals>.accept×  sj   ø€ Ü�2Œwœ#˜b›' Aš+ØÜ�G‰G�L‰L˜˜V e™^Ó,ˆÜ
�‰�A Õ%Ü˜˜R Ô#ØÜ˜R  TÔ*ØÙ�B˜˜DÓ!Ð!r5   u   ì›�ë³¸r   u   A manifold3d(ì›�ë³¸)u   B ì¤‘ë³µÂ·í‡´í™”ë©´ ì •ë¦¬u   C êµ¬ë©�ë©”ì›€u   D ë©”ì›€+manifold3dFr¼   Úrphullõ   H ë³¼ë¡�ê»�ì§ˆëŒ€ì²´r    u   ì‹¤íŒ¨)$ÚhashlibÚsha1r   Úascontiguousarrayr$   Útobytesr    r&   Ú
LADDER_VERÚencodeÚ	hexdigestrx   r`   ry   ÚREPAIR_CACHErA  r   ÚloadÚstrr²   r#   r!   ÚptprÛ   rØ   rË   r  rÂ   rÃ   Úconvex_hullr½   r¾   ÚHULL_TRI_CAPr  r³   r„   )r0   r1   r‡   rF  r,   ÚzrC  ÚrÚVmÚFmÚV1ÚF1r/  r2  ÚnaÚV3ÚF3Ú_tmÚchÚVhÚFhr.  r>  r¸   r?  rB  s     `                   @@@@r3   Úrepair_for_tetr`  ¼  s¢  ü€ ó Ø
�,‰,”r×+Ñ+¬B¯H©H°Q¸«NÓ;×CÑCÓEÜ×-Ñ-¬b¯j©j¸¼B¿H¹HÓ.EÓF×NÑNÓPñQä#×*Ñ*Ó,ñ-ó .ç.7©i«k¸#¸2ð?€Cô 
�‰�‰”l C¨&¡LÓ	1€BðÜ
�‰”L¨4Õ0Ü�7‰7�>‰>˜"ÔÜ—‘˜“ˆAØ�S‘6˜1˜S™6¤3 q¨¡v£;Ð.Ð.ð ôô .1°¬VŒ5”—‘˜ Ô"×&Ñ&Ó(Ô)¸€DØ€E÷	"ñ 	ˆq�!�XÓ€AÙØˆØ	ˆQ�J€EðÜ  1Ó%‰ˆˆBÙ�2�rÐ1Ó2ˆÙØˆHð ð 
ˆQ�J€EðÜ˜1˜a“‰ˆˆBñ 	ˆr�2Ð3Ó4€AÙØˆØ	ˆQ�J€EðÜ! " bÓ)‰
ˆˆB�ñ 
Ù�2�rÐ+Ó,ˆÙØˆHØ�‰
ˆð	Ü# B¨Ó+‰FˆB�Ù�r˜2Ð4Ó5ˆAÙØ�ð ð 
ˆQ�J€Eð
ÛØ�[‰[ !¨1°eˆ[Ó<×HÑHˆÜ—‘˜BŸK™KÓ(¬"¯*©*°R·X±XÓ*>ˆBˆÜˆr‹7”\Ò!ðÜ" 2 r¬<Ó8‘��Bô �G‰G�L‰L˜˜XÓ&ˆÜ
�‰�A Õ%Üˆr‹7�aŠ<œI b¨"¨aÔ0Ù˜˜BÐ 6Ó7Ð7ô �8‰8�FÓœRŸX™X f¬b¯h©hÓ7¸ÐAÐAøôe ò ÚðûôD ò Úðûô
 ò Ø�AˆB‹ðûô ò Ø˜˜Q�ˆB‹ðûô ò 	Úð	ûô ò Ùðûô ò Ùðús“   Ã$A%M Æ)M' ÇM7 Ç0N ÈN! È:A2O  Ê-N1 ËAO  Í	M$Í#M$Í'	M4Í3M4Í7NÎNÎNÎNÎ!	N.Î-N.Î1	N=Î:O  Î<N=Î=O  Ï 	OÏOc                 ó<  — ddl }t        t        |xs t        «      t        t        «      «      }|j	                  t        j                  t        j                  | d«      «      j                  «       t        j                  t        j                  |t
        j                  «      «      j                  «       z   dt        t        |«      fz  j                  «       z   «      j                  «       dd }t        j                   j#                  t$        d|z   dz   «      }	 t        j&                  t$        d¬	«       t        j                   j)                  |«      rœt        j*                  |«      }t-        |d   «      }	|d
   |d   t        |d   «      t        |d   «      ddt        |d   «      dœt        |d   «      t        |d   «      dt-        |d   «      t        |d   «      |	t/        |	dk(  «      dœ
S 	 t3        | ||«      \  }
}}t5        |«      st7        d«      ‚dx}}d}d}t9        d«      D �]  }t;        |
||ddd¬«      \  }}t=        ||«      \  }}t?        ||«      \  }}t5        |«      |k  st5        |«      dk  r n¾tA        dt        t5        |«      |z  t        t5        |«      «      z  dz  «      «      }	 tC        |
||«      \  }}t        j                   j#                  |d |z  «      }t        j&                  |d¬	«       t5        |«      r$t5        |«      t5        |«      k\  stE        |||«      sd} n||}}
�Œ tG        |
|«      }d!tA        |d"   d#«      z  tA        t5        |«      d$«      z  d%z  }|r|d&   |z  nd}	 t        jH                  ||||d&   |d"   |jK                  d'd«      ||t        jL                  |«      |t        jL                  |«      ¬(«       |||||d||||dk(  dœ
S # t0        $ r Y �Œw xY w# t0        $ r d}Y  ŒÎw xY w# t0        $ r Y Œ=w xY w))uÑ  ì „ì²´í•´ì„� ëª¨ë“œ(ë¶€í’ˆ 40ê°œ ì´ˆê³¼) ì „ìš© ë©”ì‹œ ìƒ�ì„±.
    â‘  ìˆ˜ë¦¬ ì‚¬ë‹¤ë¦¬ë¡œ í˜•ìƒ�ì�„ ê³ ì¹˜ê³  â‘¡ tetgen ì�€ '-p'(í‘œë©´ë³´ì¡´) ì „ìš©ìœ¼ë¡œë§Œ ì“°ê³ 
    â‘¢ ë¶€í’ˆë‹¹ ì ˆì � ìƒ�í•œì�„ ë„˜ìœ¼ë©´ í‘œë©´ ì‚¼ê°�í˜•ì�„ ì¤„ì—¬ ë‹¤ì‹œ ìž°ë‹¤.
    â˜… í’ˆì§ˆì¡°ê±´(-q) ìŠ¹ê²©ì�„ ê±´ë„ˆë›°ëŠ” ê·¼ê±°: -q ê°€ ì ˆì �ì�„ 51ë°°(ìµœì•… 1,272ë°°)ë¡œ ë¶ˆë¦°ë‹¤.
      ì–‡ì�€ ë¶€í’ˆì�¼ìˆ˜ë¡� ì²´ì �ìƒ�í•œì�´ ìž‘ì•„ì ¸ 20ì‚¼ê°�í˜• ë¶€í’ˆì�´ 27,985ì ˆì �ì�´ ë��ë‹¤.r   Nrw   z%s|%dr5  rÊ   r6  Tr7  ÚndÚelrZ   r›   rO   ©rB   r@   r?   rC   rA   ÚhÚtwÚqÚflrE  ©
r¬   ÚelemsÚmetricsÚelem_size_mmÚthrough_wallÚ	coarsenedÚqualityÚflippedÚrepairÚhullõ]   í˜•ìƒ� ìˆ˜ë¦¬ ì‹¤íŒ¨(ì‚¬ë‹¤ë¦¬ ì „ë¶€ ì†Œì§„) â€” ë‹«ížŒ ì†”ë¦¬ë“œë¡œ ë§Œë“¤ ìˆ˜ ì—†ìŠµë‹ˆë‹¤u   -pì „ìš©r>   r°   é   r±   éP   é<   g333333ë?u   -pì „ìš©(ìƒ�í•œì´ˆê³¼ ìœ ì§€)zdec%dr:   r@   r[   r   çUUUUUUÕ?rB   rA   ©
rb  rc  rZ   r›   rO   re  rf  rg  rh  rÊ   )'rF  rÛ   r!   ÚPER_CAPrG  r   rH  r$   rI  r    r&   rJ  rN   rK  rL  rx   r`   ry   rM  rA  r   rN  rO  rL   r²   r`  r#   r€   r  r–   r�   r®   r·   r  r³   rX   r:  rÜ   r^   )r0   r1   r‡   Úbudget_nodesrF  ÚcapÚmkeyÚmcprS  Ú_mmÚVrÚFrr=  r¬   Útets10rp  ÚtagÚattemptr‘   r•   Útets2ÚtgtÚVdÚFdr.  ÚmetÚhhrf  s                               r3   Úbuild_tet_mesh_repairedrŠ    sÖ  € ó Ü
Œe�LÒ+¤GÓ,¬e´G«nÓ
=€Cð �<‰<œ×,Ñ,¬R¯X©X°a¸«^Ó<×DÑDÓFÜ×.Ñ.¬r¯z©z¸!¼R¿X¹XÓ/FÓG×OÑOÓQñRà"¤j´#°c³(Ð%;Ñ;×CÑCÓEñFó GçGPÁyÃ{ÐSVÐTVðX€Dô �'‰'�,‰,”| S¨4¡Z°&Ñ%8Ó
9€CðÜ
�‰”L¨4Õ0Ü�7‰7�>‰>˜#ÔÜ—‘˜“ˆAÜ�a˜‘f“+ˆCØ˜t™W¨q°©wÜ+0°°3±«=ÌÈaÐPSÉfËØ*.¸QÜ,1°!°C±&«Mñ ;ô %*¨!¨C©&£MÄ5ÈÈ4ÉÃ>Ø!%´#°a¸±f³+Ì#ÈaÐPTÉgË,Ø!¬4°Ð7MÑ0MÓ+NñPð Pð ô " ! Q¨Ó+�L€BˆˆDÜˆrŒ7ÜÐzÓ{Ð{ØÐ€EˆFØ€GØ
€CÜ˜—8ˆÜ˜r 2 r¨3¸ÀrÔJ‰	ˆˆTÜ(¨¨dÓ3‰ˆˆwÜ" 3¨Ó.‰ˆˆvÜˆu‹:˜Ò¤ B£¨"¢ÙÜ�"”cœ#˜b›' C™-¬%´°E³
Ó*;Ñ;¸dÑBÓCÓDˆð	Ü˜r 2 sÓ+‰FˆB�ô �G‰G�L‰L˜˜W wÑ.Ó/ˆÜ
�‰�A Õ%Ü�2Œwœ#˜b›'¤S¨£WÒ,´I¸bÀ"ÀaÔ4HØ1ˆCÙØ�RˆBŠð# ô$ �r˜2Ó
€CØ
”�C˜Ñ% sÓ+Ñ
+¬c´#°f³+¸qÓ.AÑ
AÀyÑ	Q€BÙ"$ˆ#ˆi‰.˜2Ò
¨#€BðÜ
×Ñ˜C E¨f¸¸I¹Ø! ,Ñ/°3·7±7¸:ÀsÓ3KØ  R¬2¯8©8°C«=¸WÌÏÉÐQUËõ	Xð
  V¸ÈRØ¨T¸cÈgØ TÐ-CÑ%CñFð FøôG ò Úðûô" ò 	Ø1ˆCÚð	ûô  ò Ùðús8   ÄCO- Ê9O=ÎAP Ï-	O:Ï9O:Ï=PÐPÐ	PÐPg     €K@rµ   z-pq2.0ç     Àr@c                 óŽ  — ddl }|j                  t        j                  t        j                  | d«      «      j                  «       t        j                  t        j                  |t        j                  «      «      j                  «       z   dt        t        t        t        fz  j                  «       z   «      j                  «       dd }t        j                  j!                  t"        d|z   dz   «      }	 t        j$                  t"        d¬	«       t        j                  j'                  |«      ržt        j(                  |d¬
«      }t+        |d   «      }|d   |d   t-        |d   «      t-        |d   «      ddt-        |d   «      dœt-        |d   «      t-        |d   «      dt+        |d   «      t/        |d   «      |t1        |dk(  «      dœ
S 	 t5        | ||«      \  }	}
}t7        |
«      st9        d«      ‚t;        |	|
«      }t7        |
«      }t        dz   }t=        d«      D �]  \  }}t        |z  }t/        t?        |jA                  dd«      d«      d|z  |z  z  «      }d|cxk  rt/        |dz  «      k  sn ŒX	 tC        |	|
|«      \  }}t;        ||«      }t7        |«      dk  s|d   sŒ‰|d    t?        |d    d!«      z  t        k  rŒ¦t        j                  j!                  |d"|z  «      }t        j$                  |d¬	«       tE        |||«      sŒî|||}}
}	|d#d$dt7        |«      t-        |«      z  z
  z  z  z  } n tG        |	|
|dt        tH        ¬%«      \  }}tK        ||«      \  }}tM        ||«      \  }}d&t?        |d'   d«      z  t?        t7        |«      d(«      z  d)z  }|r|d    |z  nd}	 t        jN                  ||||d    |d'   |jA                  dd«      ||t        jP                  |«      |t        jP                  |«      ¬*«       |||||d+||||dk(  dœ
S # t2        $ r Y �ŒVw xY w# t2        $ r Y �Œw xY w# t2        $ r Y Œ;w xY w),u  ì „ì²´í•´ì„� í’ˆì§ˆ ë©”ì‹œ. ìˆ˜ë¦¬ â†’ í‘œë©´ ì¤„ì�´ê¸°(ë²½ë‘�ê»˜ ê²Œì�´íŠ¸) â†’ tetgen í’ˆì§ˆì¡°ê±´.

    ì ˆì � ìˆ˜ë¥¼ ì •í•˜ëŠ” ê²ƒì�€ í’ˆì§ˆì¡°ê±´ì�´ ì•„ë‹ˆë�¼ ë²½ë‘�ê»˜ë‹¤(ê³„íš� F-5 ì‹¤ì¸¡). ê·¸ëž˜ì„œ
    ì†�ìž¡ì�´ëŠ” 'í‘œë©´ ì¤„ì�´ê¸°' í•˜ë‚˜ì�´ê³ , ë²½ì�´ ë¬´ë„ˆì§€ë©´ í•œ ë‹¨ ë�œ ê±°ì¹ ê²Œ ë¬¼ëŸ¬ë‚œë‹¤.
    í•œ ë²ˆë§Œ ì‹œë�„í•˜ë©´ ê²Œì�´íŠ¸ê°€ ê±°ë¶€í•œ ë¶€í’ˆì�´ ì›�ë³¸ ë°€ë�„ë¥¼ ìœ ì§€í•´ ìƒ�ìœ„ 5ë¶€í’ˆì�´
    ì „ì²´ ì ˆì �ì�˜ 39% ë¥¼ ì°¨ì§€í•œë‹¤(ì‹¤ì¸¡) â€” ê·¸ëž˜ì„œ ì‚¬ë‹¤ë¦¬ë¡œ ë¬¼ëŸ¬ë‚œë‹¤.
    r   Nrw   zq|%s|%s|%.2f|%.2fr5  rg  r6  Tr7  )Úallow_picklerÊ   rb  rc  rZ   r›   rO   rd  re  rf  rh  rE  ri  rs  u   (í’ˆì§ˆ))r[   g      è?r7   gffffffÖ?rA   r>   r[   gƒÀÊ¡E¶Û?gÍÌÌÌÌÌì?r?   rB   ç•Ö&è.>zqd%du   +ì¤„ìž„%.0f%%ç      Y@r±   r:   r@   r   rw  rx  F))rF  rG  r   rH  r$   rI  r    r&   rJ  ÚQBULK_TETGEN_SWÚQBULK_HS_MMÚQBULK_WALL_GATErK  rL  rx   r`   ry   rM  rA  r   rN  rO  r!   rN   rL   r²   r`  r#   r€   rX   Ú	enumerater·   rÜ   r  r³   r–   ÚQBULK_TIMEOUT_Sr�   r®   r:  r^   )r0   r1   r‡   rz  rF  r|  r}  rS  r~  r  r€  r=  rˆ  Ú	base_trisr‚  rá   ÚmultÚhsr…  r†  r‡  Úm1r.  r‘   r•   r„  rp  r¬   r�  r‰  rf  s                                  r3   Úbuild_tet_mesh_quality_bulkr™  p  s  € ó Ø�<‰<œ×,Ñ,¬R¯X©X°a¸«^Ó<×DÑDÓFÜ×.Ñ.¬r¯z©z¸!¼R¿X¹XÓ/FÓG×OÑOÓQñRà.´*¼oÜ2=¼ð2Pñ PßQWÑQWÓQYñZó ÷ $™)›+ c rð	+€Dô
 �'‰'�,‰,”| S¨4¡Z°&Ñ%8Ó
9€CðÜ
�‰”L¨4Õ0Ü�7‰7�>‰>˜#ÔÜ—‘˜¨$Ô/ˆAÜ�a˜‘f“+ˆCØ˜t™W¨q°©wÜ+0°°3±«=ÌÈaÐPSÉfËØ*.¸QÌEÐRSÐTWÑRXËMñ [ä$)¨!¨C©&£MÄ5ÈÈ4ÉÃ>Ø!%´#°a¸±f³+Ì#ÈaÐPTÉgË,Ø!¬4°Ð7MÑ0MÓ+NñPð Pð ô " ! Q¨Ó+�L€BˆˆDÜˆrŒ7ÜÐzÓ{Ð{Ü
�r˜2Ó
€CÜ�B“€IÜ
˜JÑ
&€CÜÐ3×4‰ˆˆ4Ü˜4ÑˆÜ”#�c—g‘g˜j¨#Ó.°Ó4¸À¹
ÀR¹ÑHÓIˆØ�SÔ/œ3˜y¨3™Ó/Ô/Øð	Ü˜r 2 sÓ+‰FˆB�ô ˜"˜bÓ!ˆÜˆr‹7�QŠ;˜b šlØØˆi‰=œ3˜s 9™~¨tÓ4Ñ4´ÒFØÜ�G‰G�L‰L˜˜V a™ZÓ(ˆÜ
�‰�A Õ%Ü˜˜R Ô#ØØ˜"˜b�ˆBˆØˆ %¨3´°R³¼5ÀÓ;KÑ1KÑ+KÑ"LÑMÑMˆÙð) 5ô* ˜2˜r 2 s´_ÌoÔ^�I€CˆÜ$ S¨$Ó/�N€Eˆ7Ü˜s EÓ*�M€Eˆ6Ø
”�C˜Ñ% sÓ+Ñ
+¬c´#°f³+¸qÓ.AÑ
AÀyÑ	Q€BÙ"$ˆ#ˆi‰.˜2Ò
¨#€BðÜ
×Ñ˜C E¨f¸¸I¹Ø! ,Ñ/°3·7±7¸:ÀsÓ3KØ  R¬2¯8©8°C«=¸WÌÏÉÐQUËõ	Xð
  V¸ÈRØ¨U¸sÈwØ TÐ-CÑ%CñFð FøôQ ò Úðûô ò 	Úð	ûô. ò Ùðús8   Ã5CP É9P(Î,AP8 Ð	P%Ð$P%Ð(	P5Ð4P5Ð8	QÑQc                 óÚ  — t        | ||«      \  }}}t        |«      st        d«      ‚|rê|dkD  råt        |«      dz  dz  }	d|	z  dfd|	z  dffD ]Ã  \  }
}	 t	        |||d	|
t        |d
«      ¬«      \  }}t        |«      sŒ1t        ||«      \  }}t        ||«      \  }}t        ||«      }dt        |d   d«      z  t        t        |«      d«      z  dz  }|||||r|d   |z  nd	d||||dk(  t        |«      t        |t        |«      dz  k  «      dœc S  	 t        |||||d¬«      }||d<   |dk(  |d<   |rt        |«      nd|d<   |rdnd|d<   |S # t        $ r Y �Œw xY w# t        $ r� t	        |||d	dd¬«      \  }}t        ||«      \  }}t        ||«      \  }}t        ||«      }dt        |d   d«      z  t        t        |«      d«      z  dz  }|||||r|d   |z  nd	dd|dœ}Y ŒÃw xY w) uâ  êµ­ë¶€ ìž¬í•´ì„�(2ë‹¨ê³„) ì „ìš© â€” ìˆ˜ë¦¬ ì‚¬ë‹¤ë¦¬ë¡œ í˜•ìƒ�ì�„ ê³ ì¹œ ë’¤ **í’ˆì§ˆ ê²½ë¡œ**ë¡œ ë©”ì‹œ.

    ì™œ ë”°ë¡œ í•„ìš”í•œê°€ (ì‹¤ì¸¡ 2026-10-10):
      Â· build_tet_mesh(í’ˆì§ˆ ê²½ë¡œ)ë§Œ ì“°ë©´ CAD ê°€ ì—´ë¦° ë¶€í’ˆì�´ ê·¸ëŒ€ë¡œ ì‹¤íŒ¨í•œë‹¤.
        êµ­ë¶€ ì˜�ì—­ 25ë¶€í’ˆ ì¤‘ 20ê°œê°€ 'ë‹«ížŒ ì†”ë¦¬ë“œê°€ ì•„ë‹˜' ìœ¼ë¡œ ì£½ì—ˆë‹¤.
      Â· build_tet_mesh_repaired(ì „ì²´í•´ì„� ê²½ë¡œ)ëŠ” ìˆ˜ë¦¬ëŠ” í•˜ì§€ë§Œ ë¶€í’ˆë‹¹ ì ˆì �ì�´
        PER_CAP(4,000)ì—� í•˜ë“œìº¡ìœ¼ë¡œ ê±¸ë ¤ 'ìš”ì†Œ í�¬ê¸° ì ˆë°˜' ì‚¬ë‹¤ë¦¬ë¥¼ ë§Œë“¤ ìˆ˜ ì—†ë‹¤
        (ë‘� ë‹¨ê³„ê°€ ê°™ì�€ ë©”ì‹œë¡œ ë‚˜ì™€ ìˆ˜ë ´ íŒ�ì •ì�´ ë¬´ì�˜ë¯¸í•´ì§„ë‹¤).
      â†’ ìˆ˜ë¦¬ëŠ” ì‚¬ë‹¤ë¦¬ì—�ì„œ, ë°€ë�„ëŠ” ì²´ì �ìƒ�í•œì—�ì„œ â€” ë‘� ê²½ë¡œì�˜ í•„ìš”í•œ ì ˆë°˜ì”©ë§Œ ì“´ë‹¤.

    â˜… ê²°í•¨ 1 ê³ ì¹¨ (ì‹¤ì¸¡ 2026-10-09): êµ­ë¶€ ì˜�ì—­ì—�ì„œ ë¶€ìž¬ê°€ ë¹ ì§€ëŠ” ì›�ì�¸ì�€ 'í˜•ìƒ� ì²˜ë¦¬
      ì‹¤íŒ¨' ê°€ **ì•„ë‹ˆì—ˆë‹¤**. ì „ìˆ˜ í™•ì�¸í•œ 12ë¶€ìž¬ Ã— 2ë‹¨ê³„ì—�ì„œ íƒˆë�½ ì‚¬ìœ  10ê±´ì�´ ì „ë¶€
      `ê°€ìž¥ ì„±ê¸´ ì„¤ì •ì—�ì„œë�„ ì ˆì � Nê°œë¡œ ì˜ˆì‚°(M) ì´ˆê³¼` ì˜€ë‹¤. êµ­ë¶€ ê²½ë¡œëŠ” _bulk ê°€
      ì•„ë‹ˆì–´ì„œ PER_CAP ì�´ ì•ˆ ê±¸ë¦¬ëŠ” ëŒ€ì‹  per = ì´�ì˜ˆì‚° Ã— ë¶€í”¼ë¹„ ë¡œ ìª¼ê°œì§€ëŠ”ë�°,
      1ë‹¨ê³„ ì´�ì˜ˆì‚° 8ë§Œì�„ 12ë¶€ìž¬ê°€ ë‚˜ëˆ„ë©´ ìž‘ì�€ ë¶€ìž¬ ëª«ì�´ PER_NODE_FLOOR(400)ê¹Œì§€
      ë‚´ë ¤ê°€ í‘œë©´ë³´ì¡´(-p) ìµœì†Œ ë©”ì‹œì¡°ì°¨ ëª» ë“¤ì–´ê°„ë‹¤. ë‹¨ê³„ë§ˆë‹¤ ê·¸ ê²½ê³„ê°€ ë‹¬ë�¼
      ë©”ì‹œ ì„±ê³µ ë¶€ìž¬ ì§‘í•©ì�´ 7â†’8, 11â†’12 ë¡œ ë°”ë€Œì—ˆë‹¤(ê²°í•¨ 2 ì�˜ ì›�ì�¸ë�„ ì�´ê²ƒ).
      â†’ êµ­ë¶€ ê²½ë¡œì—�ì„œëŠ” ë¶€ìž¬ë³„ ì˜ˆì‚° ì´ˆê³¼ë¥¼ **íƒˆë�½ ì‚¬ìœ ë¡œ ì“°ì§€ ì•ŠëŠ”ë‹¤**. ê°€ìž¥ ì„±ê¸´
        ë©”ì‹œë¥¼ ê·¸ëŒ€ë¡œ ë°›ì•„ë“¤ì�´ê³ (allow_over_budget), ì´� ì ˆì �ì�€ ì˜�ì—­ ë¶€ìž¬ ìˆ˜ê°€
        LOCAL_MAX_PARTS ë¡œ ë¬¶ì—¬ ìžˆì–´ ë°œì‚°í•˜ì§€ ì•ŠëŠ”ë‹¤.
    rs  r   r   r:   ú-pq2.0a%.6fu   ìš”ì†Œì§€ì •(í’ˆì§ˆ)z-pa%.6fu   ìš”ì†Œì§€ì •r>   g      N@r±   r@   r[   r   rw  rB   FrE  g      ô?)r¬   rj  rk  rl  rm  rn  ro  rp  rq  rr  Úh_target_mmÚh_hitT)rz  Úquality_timeoutÚallow_over_budgetr°   rv  u   í‘œë©´ë³´ì¡´ë§Œ(í›„í‡´)©r¬   rj  rk  rl  rm  rn  ro  rp  rq  rr  Nrœ  r�  )r`  r#   r€   r!   r–   r·   r²   r�   r®   rX   rL   Úbuild_tet_mesh)r0   r1   r‡   rz  rž  Úh_targetr  r€  r=  Ú_ar‹   Útgr‘   r•   r„  rp  rb  rc  rˆ  r‰  Útms                        r3   Úbuild_tet_mesh_localr¦  ·  sp  € ô. " ! Q¨Ó+�L€BˆˆDÜˆrŒ7ÜÐzÓ{Ð{ñ �H˜q’LÜ�H‹o Ñ" cÑ)ˆØ%¨Ñ*Ð,BÐCØ! B™¨Ð7ó9‰FˆB�ðÜ& r¨2¨r°3ÀÜ/2°?ÀDÓ/IôK‘	��Tô �t”9ØÜ,¨S°$Ó7‰NˆE�7Ü  UÓ+‰FˆB�Ü˜r 2Ó&ˆCØœ˜C Ñ-¨sÓ3Ñ3´c¼#¸b»'À1³oÑEÈ9ÑUˆBØ¨"¸ÈbÙ<> S¨¡^°bÒ%8ÀCØ!&°2À'Ø"¨TÐ5KÑ-KÜ#(¨£?ô
 " "¬¨h«¸$Ñ(>Ñ">Ó?ñ	Aò 	Að9ð.[Ü˜B  B°\Ø,;Ø.2ô4ˆð  €B€x�LØÐ0Ñ0€B€v�JÙ,4œ˜xœ¸$€B€}ÑÙ#‘%¨€B€w�KØ€IøôO ò Úðûô, ò [ô
 ˜r 2 r¨3¸ÀrÔJ‰	ˆˆTÜ(¨¨dÓ3‰ˆˆwÜ˜C Ó'‰ˆˆBÜ˜2˜rÓ"ˆØ”C˜˜LÑ)¨3Ó/Ñ/´#´c¸"³g¸q³/ÑAÀyÑQˆØ B°3ÈÙ68˜s 9™~°Ò2¸cØÐ,EÐRYñ[Šð[ús%   ÁEÄE  Å	EÅEÅ BG*Ç)G*ç      .@Fc           
      óÊ  — t        |xs t        «      }t        | |«      }|d   st        d|d   z  «      ‚|d   }|dkD  st        d«      ‚||z  }	t	        |t
        z  d«      }
d|d	   z  t        z  |
z  d
z  }t	        |	|«      }d}d}	 t        | ||dd¬«      \  }}t        ||«      \  }}t        ||«      \  }}d|d	   z  t	        t        |«      d«      z  d
z  }||||||z  dd|dœ}t        |«      dkD  }|�?t        |d   «      |kD  r.|s%t        dt        |d   «      t        |«      fz  «      ‚d|d<   |S |�|s|d   dk\  r|S d|dz  dz  z  dfd|dz  dz  z  dffD ]œ  \  }}	 t        | ||d||¬«      \  }}t        ||«      \  }}t        ||«      \  }}t        |«      |kD  r#t        d!t        |«      t        |«      fz  «      }Œjd|d	   z  t	        t        |«      d«      z  d
z  }||||||z  |dk7  ||dœc S  |�|S t        d"|›�«      ‚# t        $ r}|}Y d}~�Œ9d}~ww xY w# t        j                  $ r t        d |z  «      }Y  ŒOt        $ r}|}Y d}~Œýd}~ww xY w)#u¨   ë²½ë‘�ê»˜ë¥¼ ìž¬ì„œ tetgen ì²´ì �ìƒ�í•œì�„ ì •í•˜ê³  C3D10 ë©”ì‹œë¥¼ ë§Œë“ ë‹¤.
    ì ˆì �ì�´ ì˜ˆì‚°ì�„ ë„˜ìœ¼ë©´ ìž�ë�™ìœ¼ë¡œ ì„±ê¸°ê²Œ í•˜ê³  ê·¸ ì‚¬ì‹¤ì�„ ì•Œë¦°ë‹¤.r?   uK   ë‹«ížŒ ì†”ë¦¬ë“œê°€ ì•„ë‹˜(ì—´ë¦° ì—£ì§€ %dê°œ) â€” ì‚¬ë©´ì²´ ë©”ì‹œ ë¶ˆê°€rC   rB   r   õ   ë²½ë‘�ê»˜ ì¶”ì • ì‹¤íŒ¨g     @@r:   r@   rw  Nr>   r°   )r‰   r   Tu   í‘œë©´ë³´ì¡´ë§Œ(ì„±ê¹€)r   iÐ  r¬   ud   ê°€ìž¥ ì„±ê¸´ ì„¤ì •ì—�ì„œë�„ ì ˆì � %dê°œë¡œ ì˜ˆì‚°(%d) ì´ˆê³¼ â€” ë¶€ìž¬ê°€ ë„ˆë¬´ ë³µìž¡í•©ë‹ˆë‹¤u,   í‘œë©´ë³´ì¡´ë§Œ(ì„±ê¹€Â·ì˜ˆì‚°ì´ˆê³¼ í—ˆìš©)ro  rm  r¶   rk   r   u	   ê³ í’ˆì§ˆr›  u   í‘œì¤€í’ˆì§ˆr±   u8   í’ˆì§ˆ ê°œì„  %.0fì´ˆ ì´ˆê³¼ â€” ì„±ê¸´ ë©”ì‹œë¡œ ì§„í–‰u   ì ˆì � %dê°œ > ì˜ˆì‚° %du   ì‚¬ë©´ì²´ ë©”ì‹œ ì‹¤íŒ¨: )r!   ÚMAX_C3D10_NODESrX   r€   r·   ÚC3D10_NODES_PER_TETÚTETGEN_OVERSHOOTr–   r�   r®   r#   r²   rN   r|   ÚTimeoutExpired)r0   r1   r‡   Útarget_elems_through_wallrz  rž  rŸ  rˆ  r¹   Úh_wantÚn_tet_okÚh_budgetre  ÚlastÚbaser‘   r•   r„  rp  r¬   r�  r‰  ÚexÚdense_surfacer‹   r‚  s                             r3   r¡  r¡    s  € ô ˜Ò8¬Ó9€LÜ
�q˜!Ó
€CØˆxŠ=ÜÐhÐknÐozÑk{Ñ{Ó|Ð|ØˆI‰€AØ�ŠEÜÐ4Ó5Ð5ð Ð*Ñ*€FÜ�<Ô"5Ñ5°uÓ=€HØ�c˜,Ñ'Ñ'Ô*:Ñ:¸XÑEÈ9ÑU€HÜˆF�HÓ€Að" €DØ€Dð	Ü˜q ! R¨°tÔ<‰	ˆˆTÜ(¨¨dÓ3‰ˆˆwÜ" 3¨Ó.‰ˆˆvØ�C˜Ñ%Ñ%¬¬C°«J¸Ó(:Ñ:À	ÑJˆØ¨¸CØ "°A¸±FØ!Ð.GÐT[ñ]ˆô ˜“F˜T‘M€MØÐœC  W¡Ó.°Ò=ñ
 !Üð   FÜ"% d¨7¡mÓ"4´c¸,Ó6GÐ!Hñ Ió Jð JàHˆˆY‰ØˆØÐ™]¨d°>Ñ.BÀcÒ.IØˆð # a¨1¡f¨s¡lÑ3°[ÐAØ" a¨1¡f¨s¡lÑ3°^ÐDóF‰ˆˆCð	Ü" 1 a¨¨S¸2ÀÔW‰IˆC�ô (¨¨TÓ2‰ˆˆgÜ" 3¨Ó-‰ˆˆvÜˆu‹:˜Ò$ÜÐ :¼cÀ%»jÌ#ÈlÓJ[Ð=\Ñ \Ó]ˆDØØ�C˜Ñ%Ñ%¬¬C°«I°qÓ(9Ñ9¸yÑIˆØ¨¸CØ "°A¸±FØ  KÑ/¸CÈGñUò 	Uð!Fð& ÐØˆÝ
¹Ð>Ó
?Ð?øôU ò ØŽûðûô2 ×(Ñ(ò 	ÜÐ ZÐ]lÑ lÓmˆDÚÜò 	ØˆDÜûð	ús7   Â	A H Å'H*È	H'ÈH"È"H'È*!I"ÉI"ÉIÉI"c                 óz  — t        j                  | t        ¬«      j                  dd«      } t        j                  t        j
                  | d«      d¬«      } | j                  d¬«      }| |z
  }t         j                  j                  t        j                  |j                  «      «      \  }}|d d …t        j                  |«      d d d…   f   }t         j                  j                  |«      dk  r|d d …dfxx   dz  cc<   ||z  }|j                  d¬«      |j                  d¬«      }}||z
  }t        j                  |«      d d d…   }	|d d …|	f   ||	   ||	   ||	   f\  }}}}t         j                  j                  |«      dk  r$|d d …dfxx   dz  cc<   |d    |d    c|d<   |d<   ||||z   d	z  z  z   ||fS )
Nr   r   r   rw   r   r8   r   ç      ð¿r=   )r   r    r!   r"   r'   r$   rõ   rE   ÚeighÚcovr¨   ÚargsortÚdetrÛ   r·   )
r*   Úc0rþ   rZ   ÚVvÚLpr%  r&  ÚsizeÚo2s
             r3   Úobb_from_pointsrÁ  k  s�  € Ü
�
‰
�1œEÔ"×*Ñ*¨2¨qÓ1€AÜ
�	‰	”"—(‘(˜1˜a“. qÔ)€AØ	
�‰�Qˆ‹€BØ	ˆB‰€AÜ�I‰I�N‰Nœ2Ÿ6™6 !§#¡#›;Ó'�E€A€rØ	ŠAŒr�z‰z˜!‹}™T˜r˜TÑ"Ð"Ñ	#€BÜ	‡y�y‡}�}�RÓ˜1ÒØ
Š1ˆaˆ4‹�DÑ‹Ø	
ˆR‰€BØ�V‰V˜ˆV‹^˜RŸV™V¨˜V›^ˆ€BØ�‰7€DÜ	�‰�DÓ	™$˜B˜$Ñ	€BØš!˜R˜%‘y " R¡&¨"¨R©&°$°r±(Ð:Ñ€BˆˆB�Ü	‡y�y‡}�}�RÓ˜1ÒØ
Š1ˆaˆ4‹�DÑ‹Ø˜1™�v  1¡˜vˆˆˆ1‰ˆr�!‰uØ��r˜B‘w #‘oÑ&Ñ&¨¨DÐ0Ð0r5   c                 óN  ‡‡— | \  }}}t        j                  d||dz   «      t        j                  d|‰dz   «      t        j                  d|‰dz   «      }	}}ˆˆfd„}
t        j                  |dz   ‰dz   z  ‰dz   z  df«      }t        |dz   «      D ]D  }t        ‰dz   «      D ]1  }t        ‰dz   «      D ]  }||   ||   |	|   f| |
|||«      dz
  <   Œ  Œ3 ŒF g }t        |«      D ]Ÿ  }t        ‰«      D ]�  }t        ‰«      D ]  }|j	                   |
|||«       |
|dz   ||«       |
|dz   |dz   |«       |
||dz   |«       |
|||dz   «       |
|dz   ||dz   «       |
|dz   |dz   |dz   «       |
||dz   |dz   «      g«       Œ� Œ‘ Œ¡ |t        j
                  |t        ¬«      dz
  fS )Nr   r   c                 ó>   •— | ‰dz   z  ‰dz   z  |‰dz   z  z   |z   dz   S ©Nr   © )ÚiÚjrá   ÚnvÚnws      €€r3   Únidzbox_hex_mesh.<locals>.nidƒ  s1   ø€ Ø�B˜‘F‰|˜r A™vÑ&¨¨b°1©f©Ñ5¸Ñ9¸AÑ=Ð=r5   r   r   )r   Úlinspacer„   r  rß   r^   rN   )r¿  r   rÈ  rÉ  rg   rP   r¹   ÚxsÚysÚzsrÊ  r¬   rÆ  rÇ  rá   rj  s     ``            r3   Úbox_hex_meshrÏ    sá  ù€ Ø�G€A€qˆ!Ü—‘˜Q  2¨¡6Ó*¬B¯K©K¸¸1¸bÀ1¹fÓ,EÄrÇ{Á{ÐSTÐVWÐY[Ð^_ÑY_ÓG`ˆBˆ€Bõ>ô �H‰H�r˜A‘v " q¡&Ñ)¨R°!©VÑ4°aÐ8Ó9€EÜ�2˜‘6Ž]ˆÜ�r˜A‘v–ˆAÜ˜2 ™6–]�Ø+-¨a©5°"°Q±%¸¸A¹Ð*?�‘c˜!˜Q “l QÑ&Ò'ñ #ñ ð ð €EÜ�2ŽYˆÜ�r–ˆAÜ˜2–Y�Ø—‘™c ! Q¨›l©C°°A±°q¸!Ó,<¹cÀ!ÀaÁ%ÈÈQÉÐPQÓ>RÑTWÐXYÐ[\Ð_`Ñ[`ÐbcÓTdÙ! ! Q¨¨A©Ó.±°A¸±E¸1¸aÀ!¹eÓ0DÁcÈ!ÈaÉ%ÐQRÐUVÑQVÐXYÐ\]ÑX]ÓF^Ñ`cÐdeÐghÐklÑglÐnoÐrsÑnsÓ`tðvõ wñ ñ ð ð
 ”"—(‘(˜5¬Ô,¨qÑ0Ð0Ð0r5   c                 óà  ‡— t        | «      }t        j                  |«      Šˆfd„}|D ]*  } ||d   «      }dD ]  } |||   «      }||k7  sŒ|‰|<   Œ Œ, t        j                  t	        |«      D �cg c]
  } ||«      ‘Œ c}«      }	t        j
                  |	d¬«      \  }
}g }t	        t        |
«      «      D ]®  }||k(  }|j                  «       sŒ|||dd…df         }t        |«      dk  rŒ7t        j                  |«      d   }t        j                  |t        j                  ¬«       }t        j                  t        |«      «      ||<   |j                  | |   ||   f«       Œ° |S c c}w )	uV   ì‚¼ê°�í˜•ì�´ ì„œë¡œ ì •ì �ì�„ ê³µìœ í•˜ëŠ” ë�©ì–´ë¦¬ë³„ë¡œ ë‚˜ëˆˆë‹¤ = ë¶€ìž¬ 1ê°œì”©.c                 óJ   •— ‰|    | k7  r‰‰|       ‰| <   ‰|    } ‰|    | k7  rŒ| S rï   rÅ  )ré   Úparents    €r3   Úfindzsplit_components.<locals>.findœ  s=   ø€ Ø�Q‰i˜1ŠnØ˜v a™yÑ)ˆF�1‰IØ�q‘	ˆAð �Q‰i˜1‹nð ˆr5   r   rŸ   T)r   Nrw   r   )r#   r   Úaranger^   r  r'   r˜   ÚwhereÚonesr&   rß   )r0   r1   r+   rÓ  rb   rO   rá   rP   rÆ  ÚrootsÚlabelsr/   ÚcompsÚciÚvmaskÚfselrý   ÚremaprÒ  s                     @r3   Úsplit_componentsrÞ  —  sN  ø€ äˆA‹€AÜ�Y‰Y�q‹\€Fôó ˆÙ��Q‘‹LˆÛˆAÙ�S˜‘V“ˆAØ�A‹vØ��q’	ñ ð ô �H‰H¤u¨Q¤xÓ0¡x !‘d˜1•g xÑ0Ó1€EÜ—)‘)˜E°$Ô7�K€FˆCØ€EÜ”C˜“KÖ ˆØ�r‘	ˆØ�y‰yŒ{ØØ��qš˜A˜‘w‘Ñ ˆÜˆt‹9�qŠ=ØÜ�h‰h�u‹o˜aÑ ˆÜ—‘˜¤"§(¡(Ô+Ð+ˆÜ—Y‘Yœs 3›xÓ(ˆˆc‰
Ø�‰�a˜‘f˜e D™kÐ*Õ+ð !ð €Lùò 1s   Á2E+))r   r   r   rw   é   r¥   )r   r   r   é   é   rw   )r   r   r   rá  é	   rß  )r   r   r   râ  rà  r¥   c           	      óÆ  — g g }}h d£}t         D ]X  }|j                  | dd…t        |«      f   «       t        |t        |dd «      z
  «      d   }|j                  | dd…|f   «       ŒZ t	        j
                  |«      }t	        j                  |«      }t	        j                  |dd…dd…f   d¬«      }t	        j                  |ddd¬«      \  }	}
}|
|dk(     }||   ||   fS )	u}  ê²‰ë©´(í•œ ë²ˆë§Œ ì“°ì�¸ ë©´)ì�„ 6ì ˆì � ì‚¼ê°�í˜•ìœ¼ë¡œ ë°˜í™˜.
    ë°˜í™˜: faces(n,6), opp(n,) = ê·¸ ë©´ì�´ ì†�í•œ ì‚¬ë©´ì²´ì�˜ 'ë°˜ëŒ€ìª½ ê¼­ì§“ì �'.
    â˜… opp ê°€ ìžˆì–´ì•¼ ë°”ê¹¥ ë°©í–¥ ë²•ì„ ì�„ ì�¼ê´€ë�˜ê²Œ ì •í•  ìˆ˜ ìžˆë‹¤.
      (ê°�ê¹€ë§Œìœ¼ë¡œ ì •í•˜ë©´ ë©´ë§ˆë‹¤ ì•ˆíŒŽì�´ ë’¤ì„žì—¬, ìš©ì ‘ë©´ ì „ë‹¬ë ¥ ì �ë¶„ì�´ ìƒ�ì‡„ë�˜ì§€ ì•Šê³  ìˆ˜ì‹­ ë°°ë¡œ íŠ„ë‹¤ â€” ì‹¤ì¸¡)>   r   r   r   r   Nr   r   r   r8   T©r   r   r<   )	ÚC3D10_FACE_NODESrß   ÚlistrÚ   r   rJ   r¦   rK   r'   )Úelems10ÚblocksÚoppsÚallcra   r×   r¾   Úoppr,   r-   rý   rV   Úkeeps                r3   Úboundary_faces6rí  Ã  sÛ   € ð
 �rˆD€FÚ€DßˆØ�‰�gša¤ a£˜jÑ)Ô*Ü�œ˜A˜b˜q˜E›
Ñ"Ó# AÑ&ˆØ�‰�GšA˜q˜D‘MÕ"ð ô �I‰I�fÓ€EÜ
�.‰.˜Ó
€CÜ
�'‰'�%š˜2˜A˜2˜‘, QÔ
'€CÜ—)‘)˜C a°dÈ$ÔO�K€A€sˆCØˆs�a‰x‰=€DØ�‰;˜˜D™	Ð!Ð!r5   c           	      óv  — |d   |d   |d   }}}t        j                  ||z
  ||z
  «      }t        j                  ||«      }|dk  ry| |t        j                  | |z
  |«      |z  z  z
  }||z
  ||z
  ||z
  }
}	}t        j                  ||«      t        j                  ||	«      t        j                  |	|	«      }}}t        j                  |
|«      t        j                  |
|	«      }}||z  ||z  z
  }t        |«      dk  ry||z  ||z  z
  |z  }||z  ||z  z
  |z  }d|z
  |z
  }t        j                  t        j
                  |||g«      dd«      }|j                  «       }|dk  ry||z  }|\  }}}t        j
                  |d|z  dz
  z  |d|z  dz
  z  |d|z  dz
  z  d|z  |z  d|z  |z  d|z  |z  g«      S )	u\   ì � p ë¥¼ 6ì ˆì � ì‚¼ê°�í˜•(P6) ì—� íˆ¬ì˜�í•´ 2ì°¨ í˜•ìƒ�í•¨ìˆ˜ ê°€ì¤‘ì¹˜ 6ê°œë¥¼ êµ¬í•œë‹¤.r   r   r   ç#B’¡œÇ;Nr[   r>   rw   )r   rD   ÚdotrH   Úclipr^   rG   )rh   ÚP6rO   rP   rQ   r+   r�   rg  Úv0Úv1Úv2Úd00Úd01Úd11Úd20Úd21ÚdenÚl2Úl3Úl1rg   ÚsÚL1ÚL2ÚL3s                            r3   Útri6_weightsr  Ö  sØ  € à�‰e�R˜‘U˜B˜q™Eˆ!€q€AÜ
�‰��Q‘˜˜A™Ó€AÜ	�‰��1‹€BØ	ˆU‚{ØØ	ˆA”—‘˜˜A™˜qÓ! BÑ&Ñ'Ñ'€AØ�Q‘˜˜A™˜q 1™uˆBˆ€BÜ—F‘F˜2˜r“N¤B§F¡F¨2¨r£N´B·F±F¸2¸r³Nˆcˆ€CÜ�v‰v�b˜"‹~œrŸv™v b¨"›~ˆ€CØ
�‰)�c˜C‘iÑ
€CÜ
ˆ3ƒx�%ÒØØ
�‰)�c˜C‘iÑ
 3Ñ	&€BØ
�‰)�c˜C‘iÑ
 3Ñ	&€BØ	ˆr‰�B‰€Bä
�‰”—‘˜"˜b "˜Ó&¨¨SÓ1€AØ	�‰‹€AØˆA‚vØØ	ˆA‰€AØ�J€BˆˆBÜ�8‰8�R˜1˜r™6 A™:Ñ&¨¨a°"©f°q©jÑ(9¸2ÀÀRÁÈ!ÁÑ;LØ˜‘V˜b‘[ ! b¡&¨2¡+¨q°2©v¸©{ð<ó =ð =r5   c           	      ó”   — t        | «      t        |«      t        |«      t        |«      t        |«      t        |«      t        |«      dœS )u!  ìš©ì ‘ ì”¨ì•—ì�´ 'ì–´ë””ì„œ ëª‡ ê°œ ì‚¬ë�¼ì¡Œë‚˜' ë¥¼ ë‹´ëŠ” ì¹¸. í•©ì�´ ë°˜ë“œì‹œ ë‹«ížŒë‹¤:
       n_in = spc_drop + taken_drop + no_face + too_far + degen + eq
    â˜… ì™œ taken_drop ê³¼ spc_drop ì�„ ìª¼ê°œëŠ”ê°€ (2026-10-12): í˜¸ì¶œë¶€ì—�ì„œ
      `fixed_set = set(spc_set)` ë¡œ ì‹œìž‘í•˜ë¯€ë¡œ, ë²„ë ¤ì§„ ì”¨ì•—ì—�ëŠ” 'ì›�ëž˜ êµ¬ì†�ì ˆì �'
      (ê³ ì¹  ìˆ˜ ì—†ì�Œ) ê³¼ 'ì•ž ìŒ�ì�´ ë¨¼ì € ê°€ì ¸ê°�'(ë°°ì • ê²°í•¨, ê³ ì¹  ìˆ˜ ìžˆì�Œ) ì�´ ì„žì�¸ë‹¤.
      ë‘� ìˆ˜ë¥¼ í•œ ì¹¸ì—� ë‹´ìœ¼ë©´ ë°°ì •ì�„ ê³ ì³�ë�„ íš¨ê³¼ê°€ ì¸¡ì •ë�˜ì§€ ì•ŠëŠ”ë‹¤.)ÚinÚspc_dropÚ
taken_dropÚno_faceÚtoo_farÚdegenÚeq©rN   ©Ún_inr  r  r  r	  r
  r  s          r3   Ú_wlossr  ò  s;   € ô �d“)¬¨X«ÄcÈ*ÃoÜ˜7“|´°G³Ü˜“Z¤s¨2£wñ0ð 0r5   c                 ó–  — ddl m} t        |«      }t        |«      rt        |«      sg dt        ||¬«      fS |€|n|}g dd}}
}	|D ]2  }t	        |«      }||v r||v r|
dz  }
n|dz  }Œ"|	j                  |«       Œ4 t        j                  |	t        j                  ¬«      }	t        |	«      sg dt        ||
|¬«      fS | |	   } ||«      }| |dd…dd…f      }|j                  d¬	«      }t        j                  j                  ||dd…ddd…f   z
  d
¬	«      j                  d¬	«      |z   }|j                  ||«      }t        j                  t        |	«      t        j                  «      }t        j                   t        |	«      t        j                  ¬«       }t#        |«      D ]s  \  }}t        |«      sŒt        j$                  |t        j                  ¬«      }t'        ||   ||   «      }|||   k  }|j)                  «       sŒb||   }||   ||<   |||<   Œu g }dx}x}}t+        t        |	«      «      D ]l  }t	        ||   «      }|dk  r|dz  }Œ||   |kD  r|dz  }Œ*t-        | |	|      | ||      «      } | €|dz  }ŒJ|j                  t	        |	|   «      ||   | f«       Œn |t        |«      t        ||
||||t        |«      ¬«      fS )u¹  ë¹„ì �í•©(ì„œë¡œ ì•ˆ ë§žëŠ”) ë©”ì‹œë�¼ë¦¬ ìš©ì ‘ ì ‘í•© = ë‚´ê°€ ì§�ì ‘ ë§Œë“œëŠ” MPC(*EQUATION).

    ë°˜í™˜: (eqs, len(eqs), loss) â€” loss ëŠ” _wloss ì�˜ ë¶„í•´ í‘œ(ê³„ì¸¡ ì „ìš©, í•´ì„� ë¶ˆë³€).
    â˜… CalculiX *TIE ë¥¼ ì“°ì§€ ì•ŠëŠ” ì�´ìœ (ì‹¤ì¸¡): *TIE ëŠ” ì¢…ì†� ì ˆì �ì�„ ìƒ�ëŒ€ ë©´ ìœ„ë¡œ 'ì‹¤ì œë¡œ ì˜®ê²¨ì„œ'
      ì£¼ë³€ ì‚¬ë©´ì²´ê°€ ë’¤ì§‘ížˆê³  'nonpositive jacobian' ìœ¼ë¡œ í•´ì„�ì�´ ì£½ëŠ”ë‹¤.
      *EQUATION ì�€ ì ˆì �ì�„ ì˜®ê¸°ì§€ ì•Šê³  ë³€ìœ„ë§Œ ë¬¶ìœ¼ë¯€ë¡œ ê·¸ ë¬¸ì œê°€ ì—†ë‹¤.

    â˜…â˜… í›„ë³´ ìƒ�ëŒ€ë©´ì�„ 'ë©´ ì¤‘ì‹¬ê¹Œì§€ì�˜ ê±°ë¦¬' ë¡œ ê³ ë¥´ë©´ ì•ˆ ë�œë‹¤ (ì‹¤ì¸¡ 2026-10-05)
      ì˜ˆì „ì—�ëŠ” ì¢…ì†�ì ˆì �ì—�ì„œ max_dist ì•ˆì—� ìžˆëŠ” 'ë©´ ì¤‘ì‹¬' ë§Œ í›„ë³´ë¡œ ì‚¼ì•˜ë‹¤. ìƒ�ëŒ€ ë¶€ìž¬ê°€
      ì„±ê¸´ ë©”ì‹œë©´ ë©´ í•˜ë‚˜ê°€ ìˆ˜ë°± mm ë�¼ì„œ, ì¢…ì†�ì ˆì �ì�´ ê·¸ ë©´ ìœ„ì—� ë”± ë¶™ì–´ ìžˆì–´ë�„ ë©´ ì¤‘ì‹¬ì�€
      ìˆ˜ë°± mm ë–¨ì–´ì ¸ ìžˆë‹¤ â†’ í›„ë³´ê°€ 0ê°œ â†’ ì�´ì�Œì�´ í•˜ë‚˜ë�„ ì•ˆ ìƒ�ê¸´ë‹¤.
      ì‹¤ì¸¡: 500PRO-R 16ë¶€í’ˆ ë¬¶ì�Œì—�ì„œ ìž‘ì�€ ë¶€ìž¬(RE102_0215_1)ê°€ ìƒ�ëŒ€ë©´ 12ê°œë¥¼ ê°€ì¡ŒëŠ”ë�°
      ì¢…ì†�ì ˆì � 374+135+46ê°œì—� ëŒ€í•´ ë¬¶ì�¸ ì ˆì �ì�´ 0+2+0ê°œì˜€ë‹¤. ê·¸ ë¶€ìž¬ëŠ” ì‚¬ì‹¤ìƒ� ê³µì¤‘ì—�
      ë– ì„œ ë³€ìœ„ê°€ 66,534,314 mm(6,600ë§Œ mm)ë¡œ ë‚˜ì™”ë‹¤ â€” ì˜¤ë¥˜ ì—†ì�´ ê°€ì§œ ê²°ê³¼ê°€ ë‚˜ì˜¨ ê²ƒ.
      â†’ ë©´ì�˜ í�¬ê¸°(ì¤‘ì‹¬~ê¼­ì§“ì � ìµœëŒ€ê±°ë¦¬)ë¥¼ ë°˜ê²½ì—� ë�”í•´ í›„ë³´ë¥¼ ê³ ë¥´ê³ , ê±°ë¦¬ëŠ” ì �â†”ì‚¼ê°�í˜•
        ì •í™•ê±°ë¦¬ë¡œ íŒ�ì •í•œë‹¤. ë©”ì‹œ ë°€ë�„ê°€ ë‹¬ë�¼ë�„ ì„±ë¦½í•œë‹¤.r   ©ÚcKDTree)r  r  Nr   r   )r  r  r  r   r8   r   r  )Úscipy.spatialr  r#   r  rN   rß   r   r^   r&   rõ   rE   rF   r·   Úquery_ball_pointÚfullÚinfrÖ  r“  r    Úpoint_tri_distr˜   r  r  )!r¬   Ú	slave_idsÚmaster_faces6Ú	fixed_setÚmax_distÚ
fixed_set0r  Ú_n_inÚ_f0ÚsidsÚ_spcdÚ_takdrÿ  ÚsptsÚtreer¨   ÚctrÚradrê   Úbest_dÚbest_fÚfiÚidxsÚixr.  ÚupdÚiiÚeqsÚ_nofÚ_tfarÚ_degrá   rZ   s!                                    r3   Úbuild_weld_equationsr1  þ  sÍ  € õ$ &Ü�	‹N€EÜˆyŒ>¤ ]Ô!3Ø�1”f %°Ô7Ð7Ð7Ø!Ð)‰)¨z€CØ˜Q �ˆ%€DÛˆÜ�‹FˆØ�	‰>Ø�C‰xØ˜‘
‘à˜‘
�ØØ�‰�A�ð ô �8‰8�D¤§¡Ô)€DÜˆtŒ9Ø�1”f %°%ÀEÔJÐJÐJØ�‰;€DÙ�4‹=€DØˆmšA˜r ˜r˜EÑ"Ñ#€AØ
�&‰&�aˆ&‹.€CÜ
�)‰)�.‰.˜˜S¢ Dª! ™_Ñ,°1ˆ.Ó
5×
9Ñ
9¸qÐ
9Ó
AÀHÑ
L€CØ× Ñ   cÓ*€DÜ�W‰W”S˜“Y¤§¡Ó'€FÜ�g‰g”c˜$“i¤r§x¡xÔ0Ð0€FÜ˜d–O‰ˆˆDÜ�4ŒyØÜ�Z‰Z˜¤B§H¡HÔ-ˆÜ˜4 ™8 Q r¡UÓ+ˆØ�&˜‘*‰nˆØ�7‰7�9Ø�C‘ˆBØ˜3™ˆF�2‰JØˆF�2ŠJð $ð €CØÐ€DÐˆ5�4Ü”3�t“9ÖˆÜ�˜‘‹^ˆØ�Š6Ø�A‰IˆDØØ�!‰9�xÒØ�Q‰JˆEØÜ˜˜t A™w™¨¨}¸RÑ/@Ñ)AÓBˆØˆ9Ø�A‰IˆDØØ�
‰
”C˜˜Q™“L -°Ñ"3°QÐ7Õ8ð ð ”�C“œ& e°eÈØ)-°uÀDÜ$'¨£Hô.ð .ð .r5   c                 óö  — t        j                  | t        «      } |dd…df   |dd…df   |dd…df   }}}||z
  ||z
  }}t        j                  ||«      }t        j                  d||«      }|dkD  }	t        j
                  |	|d«      }
| |z
  }t        j                  d||«      |
z  }| |dd…df   |z  z
  }||z
  }t        j                  d||«      }t        j                  d||«      }t        j                  d||«      }||z  ||z  z
  }t        j
                  t        j                  |«      dkD  |d«      }|t        j                  d||«      z  |t        j                  d||«      z  z
  |z  }|t        j                  d||«      z  |t        j                  d||«      z  z
  |z  }|	t        j                  |«      dkD  z  |dk\  z  |dk\  z  ||z   d	k  z  }t         j                  j                  | |z
  d¬
«      }t        j                  t        | «      t         j                  «      }||f||f||ffD ]¬  \  }}||z
  }t        j                  t        j                  d||«      d«      }t        j                  t        j                  d| |z
  |«      |z  dd«      }t        j                  |t         j                  j                  | ||dd…df   |z  z   z
  d¬
«      «      }Œ® t        j
                  |||«      S )u  ì§�ì§€ì–´ì§„ ì �â†”ì‚¼ê°�í˜• ê±°ë¦¬ë¥¼ í•œêº¼ë²ˆì—� ê³„ì‚°í•œë‹¤. P:(M,3), T:(M,3,3) â†’ (M,).

    â˜… ì™œ ì�´ í•¨ìˆ˜ê°€ ë”°ë¡œ í•„ìš”í•œê°€: point_tri_dist ëŠ” 'ì‚¼ê°�í˜• 1ê°œ ëŒ€ ì � ì—¬ëŸ¬ ê°œ' ë�¼ì„œ
      í›„ë³´ ì‚¼ê°�í˜•ì�´ ìˆ˜ë§Œ ê°œë©´ íŒŒì�´ì�¬ ë°˜ë³µì�´ ìˆ˜ë§Œ ë²ˆ ë�Œì•„ í•´ì„�ë³´ë‹¤ ì˜¤ëž˜ ê±¸ë¦°ë‹¤.
      ìš©ì ‘ ì „ë‹¬ë ¥ ë©´ ì„ ë³„(B-6)ì�€ 'ë©´ë§ˆë‹¤ ë‹¤ë¥¸ í›„ë³´ ì‚¼ê°�í˜•' ì�´ë�¼ ì§� ê³„ì‚°ì�´ ë§žë‹¤.
    í�‰ë©´ì—� ë‚´ë¦° ë°œì�´ ì‚¼ê°�í˜• ì•ˆì�´ë©´ ìˆ˜ì§�ê±°ë¦¬, ë°–ì�´ë©´ ì„¸ ë³€ê¹Œì§€ì�˜ ê±°ë¦¬ ì¤‘ ìµœì†Œ.
    Nr   r   r   r9   rï  r[   ç•Ö&è.¾ç0¸D   ð?r8   r>   )r   r    r!   rD   rI   rÕ  rH   rE   rF   r  r#   r  Úmaximumrñ  Úminimum)r*   r¨   r  ÚBÚCró  rô  r+   r�   ÚsafeÚnn_srZ   re  rg  Úwqrö  r÷  rø  rû  Úden_srü  rý  ÚinsideÚdperpÚdedgeÚUr½  rU   r  r¹   s                                 r3   Úpoint_tri_dist_pairsrA  H  s¾  € ô 	�
‰
�1”eÓ€AØ’�1�‰g�qš˜A˜‘w ¢! Q $¡ˆ!€q€AØ�‰U�A˜‘Eˆ€BÜ
�‰��RÓ€AÜ	�‰�:˜q !Ó	$€BØ�‰:€DÜ�8‰8�D˜"˜cÓ"€DØ	ˆA‰€AÜ
�	‰	�*˜a Ó# dÑ*€AØ	ˆAŠa�ˆg‰J˜‰NÑ€AØ	
ˆQ‰€BÜ
�)‰)�J  BÓ
'€CÜ
�)‰)�J  BÓ
'€CÜ
�)‰)�J  BÓ
'€CØ
�‰)�c˜C‘iÑ
€CÜ�H‰H”R—V‘V˜C“[ 5Ñ(¨#¨sÓ3€EØ
”—	‘	˜* b¨"Ó-Ñ
-°´b·i±iÀ
ÈBÐPRÓ6SÑ0SÑ
SÐW\Ñ	\€BØ
”—	‘	˜* b¨"Ó-Ñ
-°´b·i±iÀ
ÈBÐPRÓ6SÑ0SÑ
SÐW\Ñ	\€BØ”R—V‘V˜C“[ 5Ñ(Ñ)¨R°5©[Ñ9¸RÀ5¹[ÑIÈRÐRTÉWÐX`ÑM`Ña€FÜ�I‰I�N‰N˜1˜q™5 qˆNÓ)€EÜ�G‰G”C˜“FœBŸF™FÓ#€EØ˜�F˜Q ˜F Q¨ FÓ+‰ˆˆBØ�‰FˆÜ�Z‰ZœŸ	™	 *¨a°Ó3°UÓ;ˆÜ�G‰G”B—I‘I˜j¨!¨a©%°Ó3°bÑ8¸#¸sÓCˆÜ—
‘
˜5¤"§)¡)§.¡.°°a¸!ºA¸t¸G¹*Àq¹.Ñ6HÑ1IÐPQ .Ó"RÓS‰ð	 ,ô
 �8‰8�F˜E 5Ó)Ð)r5   c                 óä  — |d   |d   |d   }}}t        j                  ||z
  ||z
  «      }t        t        j                  ||«      «      }|dk  rît        j                  t        | «      t         j                  «      }||f||f||ffD ]±  \  }}	|	|z
  }
t        t        j                  |
|
«      «      }|dkD  r t        j                  | |z
  |
z  |z  dd«      nt        j                  t        | «      «      }t        j                  |t         j                  j                  | ||dd…df   |
z  z   z
  d¬«      «      }Œ³ |S | |z
  |z  |z  }| |dd…df   |z  z
  }||z
  ||z
  }}t        j                  ||«      t        j                  ||«      t        j                  ||«      }}}||z
  }||z  ||z  }}||z  ||z  z
  }t        |«      dk  r=t        j                  t        | «      «      }t        j                  t        | «      «      }n||z  ||z  z
  |z  }||z  ||z  z
  |z  }|d	k\  |d	k\  z  ||z   d
k  z  }t         j                  j                  | |z
  d¬«      }|j                  «       r|S t        j                  t        | «      t         j                  «      }||f||f||ffD ]±  \  }}	|	|z
  }
t        t        j                  |
|
«      «      }|dkD  r t        j                  | |z
  |
z  |z  dd«      nt        j                  t        | «      «      }t        j                  |t         j                  j                  | ||dd…df   |
z  z   z
  d¬«      «      }Œ³ t        j                  |||«      S )u½   ì � ì—¬ëŸ¬ ê°œ(p: n,3) â†’ ì‚¼ê°�í˜• 1ê°œ(T: 3,3) ê¹Œì§€ì�˜ ì •í™•í•œ ìµœë‹¨ê±°ë¦¬.
    í�‰ë©´ì—� ë‚´ë¦° ë°œì�´ ì‚¼ê°�í˜• ì•ˆì�´ë©´ ê·¸ ê±°ë¦¬, ë°–ì�´ë©´ ì„¸ ë³€ê¹Œì§€ì�˜ ê±°ë¦¬ ì¤‘ ìµœì†Œ.r   r   r   rï  r>   r[   Nr8   r3  r4  )r   rD   r!   rð  r  r#   r  rñ  r„   r6  rE   rF   rH   rM   rÕ  )rh   r¨   rO   rP   rQ   r+   r�   r.  Úur›   rU   r  r¹   re  rg  ró  rô  rö  r÷  rø  rZ   rù  rú  rû  rü  rý  r=  Údes                               r3   r  r  m  s'  € ð �‰d�A�a‘D˜!˜A™$ˆ!€q€AÜ
�‰��Q‘˜˜A™Ó€AÜ	Œr�v‰v�a˜‹|Ó	€BØ	ˆU‚{Ü�G‰G”C˜“FœBŸF™FÓ#ˆØ˜1�v  1˜v¨¨1 vÓ.‰FˆQ�Ø�A‘ˆAÜ”r—v‘v˜a “|Ó$ˆBØ9;¸eº”—‘˜!˜a™% 1™¨Ñ*¨C°Ô5ÌÏÉÔRUÐVWÓRXÓIYˆAÜ—
‘
˜1œbŸi™iŸn™n¨Q°!°aº¸4¸±jÀ1±nÑ2DÑ-EÈA˜nÓNÓO‰Að	 /ð
 ˆØ
ˆa‰%�1‰˜Ñ€AØ	ˆAŠa�ˆg‰J˜‰NÑ€AØ�‰U�A˜‘Eˆ€BÜ—F‘F˜2˜r“N¤B§F¡F¨2¨r£N´B·F±F¸2¸r³Nˆcˆ€CØ	ˆA‰€AØ�2‰v�q˜2‘vˆ€CØ
�‰)�c˜C‘iÑ
€CÜ
ˆ3ƒx�%ÒÜ�X‰X”c˜!“fÓˆ¤B§H¡H¬S°«VÓ$4™rà�C‰i˜# ™)Ñ# sÑ*ˆØ�C‰i˜# ™)Ñ# sÑ*ˆØ�E‰k˜b E™kÑ*¨b°2©g¸Ñ.CÑD€FÜ
�	‰	�‰�q˜1‘u 1ˆÓ%€AØ‡z�z„|ØˆÜ	�‰”�Q“œŸ™Ó	 €BØ�q�6˜A˜q˜6 A q 6Ó*‰ˆˆAØ�‰EˆÜ”2—6‘6˜!˜Q“<Ó ˆØ57¸%²ZŒB�G‰G�a˜!‘e˜q‘[ BÑ&¨¨SÔ1ÄRÇXÁXÌcÐRSËfÓEUˆÜ�Z‰Z˜œBŸI™IŸN™N¨1°°A²a¸°g±JÀ±NÑ0BÑ+CÈ!˜NÓLÓM‰ð	 +ô
 �8‰8�F˜A˜rÓ"Ð"r5   c                 ób  — ddl m} t        | «      rt        |«      s/t        j                  g t        j
                  ¬«      t        «       fS |�|n || «      }|j                  d¬«      }t        j                  j                  ||dd…ddd…f   z
  d¬«      j                  d¬«      |z   }|j                  ||«      }t        j                  t        | «      t        ¬«      }	t        «       }
t        |«      D ]ž  \  }}t        |«      sŒt        j                  |t        j
                  ¬«      }|	j!                  «       r	||	|       n|}t        |«      sŒ^t#        | |   ||   «      }||k  }|j!                  «       sŒ†d|	||   <   |
j%                  |«       Œ  t        j&                  |	«      d   |
fS )	u“  ì¢…ì†� ë¶€ìž¬ì�˜ ê²‰ë©´ ì ˆì � ì¤‘ 'ìƒ�ëŒ€ ë¶€ìž¬ í‘œë©´ ìœ„(ë˜�ëŠ” tol ì�´ë‚´)' ì—� ìžˆëŠ” ê²ƒì�„ ê³ ë¥¸ë‹¤.
    ë°˜í™˜: (ì ˆì � ì�¸ë�±ìŠ¤ ë°°ì—´, ì“°ì�¸ ìƒ�ëŒ€ ì‚¼ê°�í˜• ì�¸ë�±ìŠ¤ ì§‘í•©)

    â˜…â˜… ì™œ ì ˆì �â†”ì ˆì �ì�´ ì•„ë‹ˆë�¼ ì ˆì �â†”í‘œë©´ì�¸ê°€ (ì‹¤ì¸¡ ê·¼ê±°, 2026-10-05)
      ì˜ˆì „ì—�ëŠ” ë‘� ë¶€ìž¬ì�˜ ê²‰ë©´ 'ì ˆì �ë�¼ë¦¬' tol ì�´ë‚´ì�¸ì§€ë¡œ ì ‘ì´‰ì�„ íŒ�ì •í–ˆë‹¤. ê·¸ëŸ°ë�° ë‘� ë¶€ìž¬ì�˜
      ë©”ì‹œëŠ” ì„œë¡œ ë§žì¶° ë§Œë“  ê²Œ ì•„ë‹ˆë�¼ì„œ(ë¹„ì �í•© ë©”ì‹œ), ë©´ì�´ ì™„ì „ížˆ ê²¹ì³� ë¶™ì–´ ìžˆì–´ë�„
      ì ˆì �ì�€ ìƒ�ëŒ€ ì ˆì � ì‚¬ì�´ í•œê°€ìš´ë�°ì—� ë–¨ì–´ì§„ë‹¤. ì ˆì � ê°„ê²©ì�´ 20mmë©´ ìµœê·¼ì ‘ ì ˆì �ê¹Œì§€
      10mm ì�´ìƒ� ë‚˜ì˜¤ë¯€ë¡œ tol(=ìµœì†Œë²½ë‘�ê»˜x1.2, 6.6mm) ì•ˆì—� ì•„ë¬´ë�„ ì•ˆ ë“¤ì–´ì˜¨ë‹¤.
      â†’ ì‹¤ì¸¡: 500PRO-R ë¸”ëŸ­ì—�ì„œ í‘œë©´ê°„ ê±°ë¦¬ 1mm ì�´ë‚´ë¡œ 'ì§„ì§œ ë¶™ì–´ ìžˆëŠ”' ìŒ� 16ê°œ ì¤‘
        ì ˆì �â†”ì ˆì � ë°©ì‹�ì�€ 4ê°œë§Œ ì°¾ì•„ëƒˆê³ , 15ë¶€í’ˆì�´ 11ë�©ì–´ë¦¬ë¡œ ê°ˆë�¼ì¡Œë‹¤(í•˜ì¤‘ ì „ë‹¬ ë¶ˆê°€).
      ì ˆì �ì�´ ìƒ�ëŒ€ 'í‘œë©´' ìœ„ì—� ìžˆëŠ”ì§€ëŠ” ë©”ì‹œ ë°€ë�„ì™€ ë¬´ê´€í•˜ê²Œ ì„±ë¦½í•œë‹¤. ê·¸ëž˜ì„œ ê±°ë¦¬ ê¸°ì¤€
      tol ë�„ ë¹„ë¡œì†Œ 'ìš©ì ‘ ê°€ëŠ¥í•œ í‹ˆ(mm)' ì�´ë�¼ëŠ” ë¬¼ë¦¬ì � ëœ»ì�„ ê°–ëŠ”ë‹¤.r   r  r   Nr   r8   r   T)r  r  r#   r   r^   r&   rÚ   rõ   rE   rF   r·   r  r„   rL   r“  r    r˜   r  rÝ   rÕ  )Ú	slave_ptsÚmaster_trisr)   Ú
tree_slaver  r#  r$  r%  rê   Úhiträ   r(  r)  r*  r.  r2   s                   r3   Úcontact_nodesrJ  ”  se  € õ &ÜˆyŒ>¤ [Ô!1Ü�x‰x˜¤"§(¡(Ô+¬S«UÐ2Ð2Ø#Ð/‰:±W¸YÓ5G€DØ
×
Ñ
 Ð
Ó
"€Cä
�)‰)�.‰.˜ sª1¨d²A¨:¡Ñ6¸Qˆ.Ó
?×
CÑ
CÈÐ
CÓ
KÈcÑ
Q€CØ× Ñ   cÓ*€DÜ
�(‰(”3�y“>¬Ô
.€CÜ‹5€DÜ˜d–O‰ˆˆDÜ�4ŒyØÜ�Z‰Z˜¤B§H¡HÔ-ˆØ ŸW™WœYˆR��R‘�Š\¨BˆÜ�2ŒwØÜ˜9 R™=¨+°b©/Ó:ˆØ�#‰XˆØ�6‰6�8ØˆC��2‘‰KØ�H‰H�R�Lð $ô �8‰8�C‹=˜Ñ˜TÐ!Ð!r5   c                 ó  ‡ — ddl m} g }g }g }‰ D ]Q  }|d   }|j                  |j                  d¬«      |j	                  d¬«      f«       |j                   ||«      «       ŒS t        t        ‰ «      «      D �]  }t        |dz   t        ‰ «      «      D �]æ  }	t        j                  ||   d   |z
  ||	   d   k  «      r't        j                  ||	   d   |z
  ||   d   k  «      sŒSg }
||	f|	|ffD ]o  \  }}‰ |   ‰ |   }}|d   |d   dd…dd	…f   |d
   z
     }t        |d   ||||   ¬«      \  }}t        |«      dk\  sŒQ|
j                  t        |«      ||||f«       Œq |
sŒÒˆ fd„}|
j                  |¬«       |
d   \  }}}}}t        |
«      dkD  r|
d   nd}‰ |   ‰ |   }}|d   |d   dd…dd	…f   |d
   z
     }|d   |   }|d   ||d
   z
     g}|r-|j                  |t        |«         j                  dd	«      «       t        j                  |«      }|j	                  d¬«      |j                  d¬«      z
  }|j                  ||||t        j                  t        |«      t        j                  ¬«      |j                  d¬«      |j	                  d¬«      |j!                  d¬«      t#        t        j                  |«      d   «      t%        t        |«      d	k  «      |�‰ |d      d   |d	      n$t        j                  g t        j                  ¬«      |�1t        j                  t        |d   «      t        j                  ¬«      n$t        j                  g t        j                  ¬«      dœ«       �Œé �Œ |S )u�   ë¶€ìž¬ ìŒ�ë§ˆë‹¤ 'ì„œë¡œ ë§žë‹¿ì�€ ê³³'(ìš©ì ‘ì„ )ì�„ ì°¾ëŠ”ë‹¤.
    parts[i] = {'nodes','elems','n0','e0'} (n0/e0 = ì „ì²´ ëª¨ë�¸ì—�ì„œì�˜ ë²ˆí˜¸ ì‹œìž‘ì �)r   r  Úsurf_ptsr8   r   r¬   Úfaces6Nr   Ún0)rH  c                 ó¢   •— ‰| d      }|d   | d      }| d    t        t        |j                  «       «      d«      t        t	        |«      «      fS )Nr   rL  r   r   )r$   r!   rG   rN   r#   )r¹   Ú_AÚ_ptsÚpartss      €r3   Ú_tiekeyz find_weld_pairs.<locals>._tiekeyã  sO   ø€ Ø˜1˜Q™4‘[�Ø˜*‘~ a¨¡dÑ+�Ø˜1™˜œu¤U¨4¯8©8«:Ó%6¸Ó:¼CÄÀDÃ	»NÐKÐKr5   ©r,   Úsurf_idsr   r   rw   )rÆ  rÇ  Ú	dep_nodesÚind_partÚ
near_facesÚzone_minÚzone_maxÚcenterÚ	length_mmÚspotÚdep_nodes_revÚnear_faces_rev)r  r  rß   rÛ   r·   r  r#   r   rM   rJ  rK   r  r"   rJ   r^   r&   rõ   r!   rL   ) rR  r)   r  Úweldsr#  ÚtreesÚppÚsprÆ  rÇ  Ú_gotÚ_siÚ_mirP  Ú_BÚ_mtÚ_aiÚ_ufrS  r-   ÚsiÚmiÚaiÚ
used_facesÚ_revr  r7  ÚmtÚanÚzone_ptsÚzoner  s    `                               r3   Úfind_weld_pairsrt  º  sd  ø€ õ &Ø€Eð 
€BØ€EÛˆØ�
‰^ˆØ
�	‰	�2—6‘6˜q�6“> 2§6¡6¨q 6£>Ð2Ô3Ø�‰‘W˜R“[Õ!ð ô ”3�u“:×ˆÜ�q˜1‘uœc %›j×)ˆAÜ—F‘F˜2˜a™5 ™8 c™>¨R°©U°1©XÑ5Ô6¼2¿6¹6À"ÀQÁ%ÈÁ(ÈSÁ.ÐTVÐWXÑTYÐZ[ÑT\ÑB\Ô;]Øð ˆDØ ! 1˜v¨¨1 vÓ.‘
��cØ˜s™ U¨3¡Z�B�Ø˜‘k " X¡,ªq°"°1°"¨uÑ"5¸¸4¹Ñ"@ÑA�Ü(¨¨J©¸¸cÈeÐTWÉjÔY‘��SÜ�s“8˜q“=Ø—K‘K¤ S£¨3°°S¸#Ð >Õ?ð /ñ ØôLð �I‰I˜'ˆIÔ"Ø(,¨Q©Ñ%ˆAˆr�2�r˜:ä! $›i¨!šm�4˜’7°ˆDØ˜‘9˜e B™iˆqˆAØ�7‘˜A˜h™Kª¨2¨A¨2¨Ñ.°°4±Ñ8Ñ9ˆBØ�:‘˜rÑ"ˆBØ˜'™
 2¨¨$©¡<Ñ0Ð1ˆHÙØ—‘ ¤6¨*Ó#5Ñ 6× >Ñ >¸rÀ1Ó EÔFÜ—9‘9˜XÓ&ˆDØ—(‘( �(Ó" T§X¡X°1 XÓ%5Ñ5ˆCØ�L‰LØ˜bØØÜ Ÿh™h¤v¨jÓ'9ÄÇÁÔJØ ŸH™H¨!˜HÓ,¸$¿(¹(È¸(Ó:JØŸ)™)¨˜)Ó+Ü"¤2§7¡7¨3£<°Ñ#3Ó4ÜœS ›W q™[Ó)àIMÐIY %¨¨Q©¡.°Ñ"<¸TÀ!¹WÒ"EÜ')§x¡x°¼"¿(¹(Ô'CØPTÐP`¤2§8¡8¬F°4¸±7«OÄ2Ç8Á8Õ#LÜ(*¯©°¼2¿8¹8Ô(Dñö òQ *ð ðp €Lr5   r   ç      @c                 óÞ  — t        | «      s| S t        j                  t        j                  | t        «      |z  «      j                  t        j                  «      }t        j                  |dd¬«      \  }}t        j                  |«      j                  «       }g }t        t        |j                  «       «      dz   «      D ]{  }t        j                  ||k(  «      d   }| |   j                  d¬«      }|j                  t        |t        j                  | |   |z
  dz  j!                  d¬«      «         «      «       Œ} | t        j"                  t%        |«      t        j                  ¬«         S )uB  ì �êµ¬ë¦„ì�„ ì „ì—­ ê²©ìž�(ì›�ì � 0, ê°„ê²© pitch)ë¡œ ë‚˜ëˆ„ê³  ì¹¸ë§ˆë‹¤ ëŒ€í‘œì � 1ê°œë§Œ ë‚¨ê¸´ë‹¤.
    â˜… ì™œ ê²©ìž�ì�¸ê°€: CAD ì‚¼ê°�í˜•ë§ˆë‹¤ ì �ì�„ ë½‘ìœ¼ë©´ ì”¨ì•— ìˆ˜ê°€ 'CAD ë¶„í•  ë°©ì‹�' ì—� ë”°ë�¼
      ë‹¬ë�¼ì§„ë‹¤. ì „ì—­ ê²©ìž�ì—� ìŠ¤ëƒ…í•˜ë©´ ë©”ì‹œë�„ CAD ë¶„í• ë�„ ë°”ê¿”ë�„ ê°™ì�€ ì”¨ì•—ì�´ ë‚˜ì˜¨ë‹¤.r   Tr¤   r   r8   r   r   )r#   r   Úfloorr    r!   r%   r&   r'   Úravelr  rN   r·   rÕ  rõ   rß   r  rG   r^   r  )	r*   Úpitchr,   r-   r/   ÚoutrQ   rý   rÊ   s	            r3   Ú_lattice_pickr{  
  s  € ô ˆqŒ6ØˆÜ
�(‰(”2—:‘:˜a¤Ó'¨%Ñ/Ó
0×
7Ñ
7¼¿¹Ó
A€CÜ�Y‰Y�s °4Ô8�F€A€sÜ
�*‰*�S‹/×
Ñ
Ó
!€CØ
€CÜ”3�s—w‘w“y“> AÑ%Ö&ˆÜ�h‰h�s˜a‘xÓ  Ñ#ˆØˆc‰F�K‰K˜QˆKÓˆØ�
‰
”3�sœ2Ÿ9™9 q¨¡v°¡z°aÑ&7×%<Ñ%<À!Ð%<Ó%DÓEÑFÓGÕHð 'ð ŒR�X‰X”f˜S“k¬¯©Ô2Ñ3Ð3r5   c                 óÀ  — ddl m} t        j                  | t        «      } t        | «      rt        |«      s%t        j                  g t        j                  ¬«      S |�|n || «      }|j                  d¬«      }t        j                  j                  ||dd…ddd…f   z
  d¬«      j                  d¬«      |z   }|j                  ||«      }g g }
}	t        |«      D ]ƒ  \  }}t        |«      sŒ|	j                  t        j                  |t        j                  ¬«      «       |
j                  t        j                  t        |«      |t        j                  ¬«      «       Œ… |	s%t        j                  g t        j                  ¬«      S t        j                   |	«      }	t        j                   |
«      }
g }t#        dt        |	«      d«      D ]C  }t%        ||dz   «      }t'        | |	|      ||
|      «      }|j                  |	|   ||k     «       ŒE |r(t        j(                  t        j                   |«      «      S t        j                  g t        j                  ¬«      S )	u*  ì �êµ¬ë¦„ ì¤‘ 'ì‚¼ê°�í˜• ì§‘í•©ì�˜ í‘œë©´ì—�ì„œ tol ì�´ë‚´' ì�¸ ì �ì�˜ ì�¸ë�±ìŠ¤. ì™„ì „ ë²¡í„°í™”.
    contact_nodes ì™€ íŒ�ì •ì�€ ê°™ì§€ë§Œ ì‚¼ê°�í˜•ë§ˆë‹¤ íŒŒì�´ì�¬ ë°˜ë³µì�„ ë�Œì§€ ì•ŠëŠ”ë‹¤ â€”
    CAD ì‚¼ê°�í˜•ì�€ ìˆ˜ë§Œ ê°œë�¼ ë°˜ë³µì�´ ë�Œë©´ ì”¨ì•— ê³„ì‚°ì�´ í•´ì„�ë³´ë‹¤ ì˜¤ëž˜ ê±¸ë¦°ë‹¤.r   r  r   Nr   r8   r   i€„ )r  r  r   r    r!   r#   r^   r&   rõ   rE   rF   r·   r  r“  rß   r  r¦   r  ÚslicerA  r'   )r‘   r¨   r)   Útree_ptsr  r#  r$  r%  rê   ÚpiÚtir(  r)  rz  rá   Úslr.  s                    r3   Ú_pts_near_trisr‚    sÉ  € õ &Ü
�*‰*�Sœ%Ó
 €CÜˆsŒ8œ3˜qœ6Ü�x‰x˜¤"§(¡(Ô+Ð+ØÐ+‰8±¸³€DØ
�&‰&�aˆ&‹.€CÜ
�)‰)�.‰.˜˜S¢ Dª! ™_Ñ,°1ˆ.Ó
5×
9Ñ
9¸qÐ
9Ó
AÀCÑ
G€CØ× Ñ   cÓ*€DØ�ˆ€BÜ˜d–O‰ˆˆDÜ�4ŒyØØ
�	‰	”"—*‘*˜T¬¯©Ô2Ô3Ø
�	‰	”"—'‘'œ#˜d›) R¬r¯x©xÔ8Õ9ð	 $ñ
 Ü�x‰x˜¤"§(¡(Ô+Ð+Ü	�‰˜Ó	€B¤"§.¡.°Ó"4˜RØ
€CÜ�1”c˜"“g˜wÖ'ˆÜ�1�a˜'‘kÓ"ˆÜ   R¨¡V¡¨a°°2±©iÓ8ˆØ�
‰
�2�b‘6˜!˜s™(Ñ#Õ$ð (ñ .1Œ2�9‰9”R—^‘^ CÓ(Ó)ÐR´b·h±h¸rÌÏÉÔ6RÐRr5   c           	      óh  — ddl m} t        j                  | t        «      } t        j                  |t        «      j                  dd«      }t        t        t        |d«      t        | «      «      «      } || «      j                  ||¬«      \  }}t        j                  |t        «      j                  t        |«      |«      }t        j                  |t        j                  «      j                  t        |«      |«      }t        «       }|dd…df   j                  «       }|dd…df   j                  «       }	t        j                  |dd…df   «      D ]Z  }
t        |«      D ]J  }t        ||
|f   «      |vsŒ|j!                  t        ||
|f   «      «       ||
|f   ||
|f   c||
<   |	|
<    ŒZ Œ\ ||	fS )uÁ  ì”¨ì•—ì �ë§ˆë‹¤ ì„œë¡œ ê²¹ì¹˜ì§€ ì•ŠëŠ” ìµœê·¼ì ‘ ì ˆì � 1ê°œì”©ì�„ ë°°ì •í•œë‹¤ (ê²°í•¨ 2).

    â˜… ì™œ í•„ìš”í•œê°€ (ì‹¤ì¸¡ 2026-10-10): ì”¨ì•— 3,425ì � ì¤‘ 507ì �(14.8%)ì�´ ë‹¤ë¥¸ ì”¨ì•—ê³¼
      ê°™ì�€ ì ˆì �ì—� ë–¨ì–´ì¡Œë‹¤. ì¢…ì „ ì½”ë“œëŠ” `np.unique` ë¡œ ê·¸ê±¸ ì‚¼ì¼œ ë¬¶ì�¸ì ˆì �ì�´
      ì”¨ì•— ìˆ˜ë³´ë‹¤ ì �ì–´ì¡Œê³ , ë©”ì‹œê°€ ë‹¬ë�¼ì§€ë©´ ì‚¼ì¼œì§€ëŠ” ìˆ˜ë�„ ë‹¬ë�¼ì ¸ ë‹¨ê³„ ê°„
      'ê°™ì�€ ë¬¶ì�Œ' ì�´ ê¹¨ì¡Œë‹¤.
    â†’ ê°€ê¹Œìš´ ìˆœì„œ(k=1..kmax)ë¡œ ë³´ë©° ì�´ë¯¸ ì“´ ì ˆì �ì�€ ê±´ë„ˆë›°ê³  ë‹¤ì�Œ ì ˆì �ì—� ë°°ì •í•œë‹¤.
      kmax ê¹Œì§€ ë‹¤ ì°¼ìœ¼ë©´ ì–´ì©” ìˆ˜ ì—†ì�´ ìµœê·¼ì ‘ì�„ ê³µìœ í•œë‹¤(ê·¸ ìˆ˜ë¥¼ ì„¸ì–´ ë³´ê³ í•œë‹¤).
    ë°˜í™˜: (ê±°ë¦¬(n,), ì ˆì �ìž�ë¦¬ë²ˆí˜¸(n,))
    r   r  r   r   r   ©rá   N)r  r  r   r    r!   r"   rN   rÛ   r·   r#   Úqueryr&   rÚ   r™   rº  r  rÝ   )Úpoolr‘   Úkmaxr  Úkkr.  rÆ  ÚtakenÚoutdÚoutirÿ  rQ   s               r3   Ú_assign_uniquerŒ  8  sg  € õ &Ü�:‰:�dœEÓ"€DÜ
�*‰*�Sœ%Ó
 ×
(Ñ
(¨¨QÓ
/€CÜ	ŒS”�T˜1“œs 4›yÓ)Ó	*€BÙ�4‹=×Ñ˜s bÐÓ)�D€A€qÜ
�
‰
�1”eÓ×$Ñ$¤S¨£X¨rÓ2€AÜ
�
‰
�1”b—h‘hÓ×'Ñ'¬¨C«°"Ó5€Aä‹E€EØŠQ�ˆT‰7�<‰<‹>€DØŠQ�ˆT‰7�<‰<‹>€DÜ�Z‰Z˜š!˜Q˜$™Ö ˆÜ�r–ˆAÜ�1�Q˜�T‘7‹| 5Ò(Ø—	‘	œ#˜a  1 ™g›,Ô'Ø#$ Q¨ T¡7¨A¨a°¨d©GÐ ��Q‘˜˜a™Ùñ	 ð !ð �ˆ:Ðr5   c                 óT	  ‡‡‡‡— ddl m} i }t        |«      dddg dœ}g g g g f\  ŠŠ}Š| D �]i  }t        j                  |j                  d«      t        «      }t        j                  |j                  d«      t        j                  «      }	||	   }
‰j                  |
j                  d¬«      |
j                  d¬«      f«       t        j                  |
dd…df   |
dd…df   |
dd…d	f   |
j                  d¬«      d
|
dd…df   |
dd…df   z   z  d
|
dd…df   |
dd…d	f   z   z  d
|
dd…d	f   |
dd…df   z   z  g«      }‰j                  |«       |j                  |
«       ‰j                  |j                  d¬«      |j                  d¬«      f«       �Œl t        t        | «      «      D �]ñ  }t        |dz   t        | «      «      D �]Ò  }t        j                  ‰|   d   ‰z
  ‰|   d   k  «      r't        j                  ‰|   d   ‰z
  ‰|   d   k  «      sŒSˆˆˆˆfd„} |||«      \  }} |||«      \  }}t        |«      r't        |«      r|t        ‰|   |   ||   |   ‰«         n$t        j                   g t        j                  ¬«      }t        |«      r't        |«      r|t        ‰|   |   ||   |   ‰«         n$t        j                   g t        j                  ¬«      }t        |«      st        |«      s�Œ9t        j                  t        |«      r‰|   |   ndt        |«      r‰|   |   ndfD �cg c]  }|�|‘Œ c}«      }t        |«      r0|t        j"                  |dd…d	f   |dd…df   |dd…df   f«         }t        |«      }t%        ||«      }d}t        |«      t&        k  rw|t(        kD  rnt        |«      t        |«      kD  rWt        |dz  t(        «      }t%        ||«      }|dz  }t        |«      t&        k  r!|t(        kD  rt        |«      t        |«      kD  rŒW|r|dxx   dz  cc<   ||||f<   |dxx   dz  cc<   |dxx   t        |«      z  cc<   |d   j                  | |   d   | |   d   t        |«      t+        |d«      f«       �ŒÕ �Œô ||fS c c}w )uk  ìš©ì ‘ ì”¨ì•—ì �ì�„ **ë©”ì‹œë¥¼ ë§Œë“¤ê¸° ì „ì�˜ CAD í‘œë©´**ì—�ì„œ 1íšŒë§Œ ì •í•œë‹¤ (1ë‹¨ê³„).

    â˜… ì™œ í•„ìš”í•œê°€ (ì‹¤ì¸¡ ê·¼ê±°): ì¢…ì „ì—�ëŠ” ë©”ì‹œë¥¼ ë§Œë“  ë’¤ 'í‘œë©´ ì ˆì �ì�´ ìƒ�ëŒ€ í‘œë©´ì—�
      ë‹¿ì•˜ëŠ”ê°€' ë¡œ ì¢…ì†�ì ˆì �ì�„ ê³¨ëž�ë‹¤. ê·¸ëž˜ì„œ ë©”ì‹œë¥¼ ì´˜ì´˜í•˜ê²Œ í•˜ë©´ ë¬¶ì�´ëŠ” ì ˆì �ì�´
      43% ëŠ˜ì–´ë‚˜ 'ë©”ì‹œë¥¼ í‚¤ì› ë�”ë‹ˆ ê²°ê³¼ê°€ ë°”ë€ŒëŠ”' ë¹„êµ�ê°€ ë¶ˆê°€ëŠ¥í–ˆë‹¤. ë˜� ë¬¶ì�¸ ì ˆì �ì�´
      ì „ì²´ì�˜ 29.7% ë¥¼ ë�®ì–´, êµ¬ì†�ì—�ì„œ ë–¨ì–´ì§„ ìˆœìˆ˜ êµ¬ì¡° í›„ë³´ê°€ í•˜ë‚˜ë�„ ë“œëŸ¬ë‚˜ì§€ ì•Šì•˜ë‹¤.
    â†’ ì”¨ì•—ì �ì�€ CAD ì‚¼ê°�í˜•ë�¼ë¦¬ì�˜ ê±°ë¦¬ë¡œë§Œ ì •í•˜ë¯€ë¡œ ë©”ì‹œ ë°€ë�„ì™€ ë¬´ê´€í•˜ë‹¤. ì–´ë–¤ ë©”ì‹œë“ 
      ì”¨ì•—ì �ë§ˆë‹¤ ê°€ìž¥ ê°€ê¹Œìš´ ì ˆì � 1ê°œì”©ë§Œ ì¢…ì†�ìœ¼ë¡œ ì“°ë¯€ë¡œ ë¬¶ì�Œ ìˆ˜ê°€ ê³ ì •ë�œë‹¤.

    ë°˜í™˜: (seeds, stat)
      seeds[(i,j)] = (n,3) ì”¨ì•—ì � ì¢Œí‘œ (i<j, parts ìž�ë¦¬ë²ˆí˜¸)
    r   r  )Úpitch_mmÚpairsÚseedsÚrefined_pairsÚ	pair_listÚcadVÚcadFr   r8   Nr   r7   c                 ó€  •— ‰|   d   ‰z
  ‰|   d   ‰z   }}‰
|    \  }}t        j                  t        j                  ||k\  d¬«      t        j                  ||k  d¬«      z  «      d   }t        j                  t        j                  ‰	|    |k\  d¬«      t        j                  ‰	|    |k  d¬«      z  «      d   }||fS )Nr   r   r8   )r   rÕ  rM   )rk  rl  Úlo_Úhi_ÚtlÚthÚftrc  r#  ÚsampÚtbbr)   s           €€€€r3   Ú_selzweld_seeds_cad.<locals>._sel|  s»   ø€ Ø˜b™6 !™9 s™?¨B¨r©F°1©I¸©O�S�Ø˜R™‘��BÜ—X‘XœbŸf™f R¨3¡Y°QÔ7¼"¿&¹&ÀÀsÁÐQRÔ:SÑSÓTÐUVÑW�Ü—X‘XœbŸf™f T¨"¡X°¡_¸1Ô=Ü "§¡ t¨B¡x°3¡¸QÔ ?ñ@ó AØABñD�à˜2�v�r5   r   r=   r‘  r�  r�  r’  Úpart_no)r  r  r!   r   r    rÜ   r&   rß   rÛ   r·   rJ   rõ   r  r#   rM   r‚  r^   Úlexsortr{  ÚWELD_SEED_MINÚWELD_SEED_PITCH_FLOORr$   )rR  r)   ry  r  r�  ÚstatÚtrisrb  r0   r1   r¨   rÿ  rÆ  rÇ  r�  ÚftiÚspiÚftjÚspjrm  Úajré   ÚcloudÚpitr‘   Úrefr#  r›  rœ  s    `                        @@@r3   Úweld_seeds_cadr¬  W  st  û€ õ &Ø€EÜ˜e›¨q¸1Ø¨Rñ1€Dà˜b " b˜.Ñ€Bˆˆd�CÜˆÜ�J‰J�r—v‘v˜f“~¤uÓ-ˆÜ�J‰J�r—v‘v˜f“~¤r§x¡xÓ0ˆØˆa‰DˆØ�
‰
�A—E‘E˜q�E“M 1§5¡5¨a 5£=Ð1Ô2ä�I‰I�qš˜A˜‘w ¢! Q $¡¨ª1¨a¨4©°!·&±&¸a°&³.Ø˜a¢ 1 ™g¨ª!¨Q¨$©Ñ/Ñ0°#¸º1¸a¸4¹À1ÂQÈÀTÁ7Ñ9JÑ2KØ˜a¢ 1 ™g¨ª!¨Q¨$©Ñ/Ñ0ð2ó 3ˆð 	�‰�AŒØ�‰�AŒØ
�	‰	�1—5‘5˜a�5“= !§%¡%¨Q %£-Ð0Ö1ð ô ”3�u“:×ˆÜ�q˜1‘uœc %›j×)ˆAÜ—F‘F˜2˜a™5 ™8 c™>¨R°©U°1©XÑ5Ô6¼2¿6¹6À"ÀQÁ%ÈÁ(ÈSÁ.ÐTVÐWXÑTYÐZ[ÑT\ÑB\Ô;]Ø÷ñ ˜A˜q“z‰HˆC�Ù˜A˜q“z‰HˆC�ä˜”X¤# c¤(ð ”n T¨!¡W¨S¡\°4¸±7¸3±<ÀÓEÒFÜ02·±¸Ä2Ç8Á8Ô0Lð ô ˜”X¤# c¤(ð ”n T¨!¡W¨S¡\°4¸±7¸3±<ÀÓEÒFÜ02·±¸Ä2Ç8Á8Ô0Lð ä�r”7¤3 r¤7Ùä—I‘I¼#¸b¼'¨4°©7°2ª;ÀtÜ:=¸b¼'¨4°©7°2ª;Àtñ+Mó 1ñ +M Qà"# -ò  !ð +Mñ 1ó 2ˆEô �5ŒzØœbŸj™j¨%²°1°©+°uºQÀ¸T±{ÀEÊ!ÈQÈ$ÁKÐ)PÓQÑR�Ü˜“,ˆCÜ  sÓ+ˆCØˆCÜ�c“(œ]Ò*¨sÔ5JÒ/JÌsÐSXËzÔ\_Ð`cÓ\dÒOdÜ˜# ™)Ô%:Ó;�Ü# E¨3Ó/�Ø�q‘�ô �c“(œ]Ò*¨sÔ5JÒ/JÌsÐSXËzÔ\_Ð`cÓ\dÓOdñ Ø�_Ó%¨Ñ*Ó%ØˆE�1�a�&‰MØ�‹M˜QÑ‹MØ�‹MœS ›XÑ%‹MØ�Ñ×$Ñ$ e¨A¡h¨yÑ&9¸5À¹8ÀIÑ;NÜ&)¨#£h´°c¸1³ð&?ö @ò] *ð ðb �$ˆ;Ðùò51s   Ì<R%ç      $@i0u  )r[   ç      ø?r=   ç      @ru  c                 óø  — d}t         D ]ß  }t        |«      |z  }t        j                  j	                  |d|dz  z  «      }	t        j
                  |	d¬«       	 t        | ||	dd|¬«      }
t        |«      |
d	<   t        |«      |
d
<   t        t        |
d   «      |kD  «      |
d<   |
}t        |
d   «      |k  sŒ­|r. |d||||
d   dj                  t        |
d   «      «      fz  «       |
c S  |S # t        $ r Y Œïw xY w)u¿  ë¶€ìž¬ 1ê°œë¥¼ ìš”ì†Œí�¬ê¸° h_req ë¡œ ë‹¤ì‹œ ë©”ì‹œí•œë‹¤. ì ˆì � ìƒ�í•œì�„ ë„˜ìœ¼ë©´ ê±°ì¹ ê²Œ ë¬¼ëŸ¬ë‚œë‹¤.

    â˜… ìˆ«ìž�ë¥¼ ë§žì¶”ë ¤ëŠ” ì¡°ì •ì�´ ì•„ë‹ˆë‹¤ â€” h_req ëŠ” 'ì�´ ë¶€ìž¬ê°€ ìƒ�ëŒ€ í‘œë©´ì—�ì„œ ê°„ê²©+ì—¬ìœ 
      ì•ˆì—� ì ˆì �ì�„ ê°€ì ¸ì•¼ í•œë‹¤' ëŠ” ìš”êµ¬ì—�ì„œ ë‚˜ì˜¨ ê°’(= ì‹¤ì¸¡ ê°„ê²© + ì—¬ìœ )ì�´ë‹¤.
      ìƒ�í•œì�€ ì „ì²´ ì ˆì � 100ë§Œì�„ ë„˜ê¸°ì§€ ì•Šê¸° ìœ„í•œ ì˜ˆì‚°ì�´ê³ , ë¬¼ëŸ¬ë‚œ ì‚¬ì‹¤ì�€ ì �ì–´ ë‚¨ê¸´ë‹¤.
    Nzf%.0fé
   Tr7  g    eÍÍAg     €f@©rz  rž  r¢  Úfine_h_req_mmÚfine_h_multr¬   Úfine_cappeduQ       [ë°€ë�„ìƒ�í–¥] ìš”êµ¬ h %.2fmm Ã— %.1f = %.2fmm â†’ ì‹¤ì œ %.2fmm / ì ˆì � %srl  ú{:,})ÚFINE_H_LADDERr!   rx   r`   ry   rA  r¦  r²   rL   r#   Úformat)r0   r1   r‡   Úh_reqÚnode_capÚlogfr²  r–  re  r.  r¥  s              r3   Úbuild_tet_mesh_finer¼  Î  s  € ð €DßˆÜ�%‹L˜4ÑˆÜ�G‰G�L‰L˜˜W¨¨r©	Ñ2Ó3ˆÜ
�‰�A Õ%ð	Ü% a¨¨A¸CØ6;ÀaôIˆBô $ E›lˆˆ?ÑÜ! $›Kˆˆ=ÑÜ ¤ R¨¡[Ó!1°HÑ!<Ó=ˆˆ=ÑØˆÜˆr�'‰{Ó˜xÓ'ÙÙÐhØ˜t Q¨¨>Ñ(:¸F¿M¹MÌ#ÈbÐQXÉkÓJZÓ<[Ð\ñ]ô ^àŠIð# ð$ €Køô ò 	Ùð	ús   ÁC-Ã-	C9Ã8C9c                 ó<  — ddl m} | |   ||   }}t        j                  | |j	                  d¬«      g«      }|j	                  d¬«      }	t        t        |t        |	«      «      «      }
t        |«      r|
st        d«      S  ||	«      j                  ||
¬«      \  }}t        j                  |«      j                  t        |«      |
«      }t        d«      }t        |
«      D ]9  }t        |t        t        |||dd…|f      «      j                  «       «      «      }Œ; |S )u�  ë¶€í’ˆ i í‘œë©´ â†” ë¶€í’ˆ j í‘œë©´ì�˜ ìµœì†Œ ê°„ê²©(mm). ì �â†”ì‚¼ê°�í˜• ì •í™•ì‹�.

    í‘œë³¸ì �ì�€ i ì�˜ ê¼­ì§“ì � + ì‚¼ê°�í˜• ë¬´ê²Œì¤‘ì‹¬. í‘œë³¸ì �ë§ˆë‹¤ j ì�˜ ì‚¼ê°�í˜• ì¤‘ ë¬´ê²Œì¤‘ì‹¬ì�´
    ê°€ê¹Œìš´ kê°œë§Œ ì •í™•ê±°ë¦¬ë¥¼ ìž¬ê³  ê·¸ ìµœì†Œë¥¼ ì·¨í•œë‹¤ â€” ì „ìˆ˜(ìˆ˜ë§ŒÃ—ìˆ˜ë§Œ)ëŠ” ë�Œì§€ ì•ŠëŠ”ë‹¤.
    k ë¥¼ í‚¤ìš°ë©´ ê°’ì�€ ë‹¨ì¡° ê°�ì†Œí•˜ë¯€ë¡œ ì�´ ê°’ì�€ ì°¸ ìµœì†Œê±°ë¦¬ì�˜ ìƒ�í•œì�´ë‹¤.
    r   r  r   r8   r  r„  N)r  r  r   rJ   rõ   rN   rÛ   r#   r!   r…  r    r"   r  rA  )ÚViÚFiÚVjÚFjrá   r  ÚTiÚTjÚSr8  rˆ  Ú_drý   ÚbestÚcols                  r3   Úcad_min_gaprÈ  ë  sð   € õ &Ø�‰V�R˜‘Vˆ€BÜ
�	‰	�2�r—w‘w A�w“Ð'Ó(€AØ
�‰�Qˆ‹€AÜ	ŒS�”C˜“F‹^Ó	€BÜˆqŒ6™Ü�U‹|ÐÙ�a‹j×Ñ˜q BÐÓ'�G€BˆÜ
�*‰*�S‹/×
!Ñ
!¤# a£&¨"Ó
-€CÜ�‹<€DÜ�RŽyˆÜ�4œÔ3°A°r¸#ºaÀ¸f¹+±ÓG×KÑKÓMÓNÓO‰ð à€Kr5   c
                 ó˜  ‡ ‡‡7‡8— t        j                  ‰ D �
cg c]  }
|
d   ‘Œ	 c}
t        «      }t        j                  ‰ D �
cg c]  }
|
d   ‘Œ	 c}
t        «      }i Š8t        |«      D ]/  \  }}‰8j	                  t        |«      g «      j                  |«       Œ1 t        ˆfd„‰8D «       ˆ8ˆ fd„¬«      }g g }}|D �]q  }t        ‰8|   ˆ fd„¬«      }t        |«      }g }|D ]«  }t        j                  t        j                  |||   z
  ||   |z
  «      d«      j                  d¬	«      }t        j                  ||k  «      d
   D ]E  }t        |«      }||v rŒ|j                  t        ‰ |   d   «      t        ‰ |   d   «      ||f«       ŒG Œ­ |j                  «        |D �]ˆ  \  }}}}‰ |   ‰ |   }}t        t        j                  |d   t        «      t        j                  |d   t         j                  «      t        j                  |d   t        «      t        j                  |d   t         j                  «      «      }t        j                   |«      r||kD  r7|j                  ||t        j                   |«      rt#        |d«      nddœ«       Œòt        t        |«      t        |«      t$        z   «      }t'        ||g|«      \  }}|j)                  d«      } | �t+        | «      s"|j                  ||t#        |d«      ddœ«       �Œh| j-                  d
¬	«      |z
  | j                  d
¬	«      |z   }"}!g d
g }%}$}#d\  }&}'||f||ffD �]‘  \  }(})||)d   dd…dd…f      }*|*j/                  d¬	«      }+t         j0                  j3                  |*|+dd…ddd…f   z
  d¬	«      j                  d¬	«      dd…df   },t        j                  t        j4                  |+|!|,z
  k\  d¬	«      t        j4                  |+|"|,z   k  d¬	«      z  «      d
   }-|t        j                  |(d   t         j                  «         }.t+        |.«      rVt        |.t        j6                  t+        |.«      «      j9                  dd«      j;                  dd«      ||)d   dd…dd…f   «      n
t        d«      }/|%j                  t        t+        |.«      «      t        t+        |-«      «      t        j                   |/«      rt#        |/d«      nddœ«       t+        |-«      s�Œ½t=        ||(d   |)d   |-   |t        |«      t$        z   |	«      \  }0}1}2|1s�Œît        j                  |0D �3cg c]  }3t        |3d
   «      ‘Œ c}3t         j                  ¬«      Š7t?        |‰7   | «      \  }4}5t        ˆ7fd„|5D «       «      }6|0D �3cg c]  }3t        |3d
   «      |6v sŒ|3‘Œ }#}3t+        |#«      }$|$s�Œ‚|2t        |(d   «      }'}& n |$sP|j                  ||t#        |d«      |%dt+        | «      t$        djA                  d„ |%D «       «      xs d fz  d!œ«       �ŒŒ|#D ]  }3|jC                  |3d
   «       Œ |jE                  |#«       |j                  ||t#        t        |«      d«      t#        |d«      t        t+        | «      «      t        |$«      ||k  rd"nd#|&t        |&r|&d$   nd
|$z
  «      |'t        j                  |#D �3cg c]  }3t        |3d
   «      ‘Œ c}3t         j                  ¬«      d%œ«       |s�Œh |d&||||t+        | «      |$|d   d'   fz  «       �Œ‹ �Œt ||fS c c}
w c c}
w c c}3w c c}3w c c}3w )(u7  ë–  ìžˆëŠ” ë�©ì–´ë¦¬ë¥¼ ì‹¤ì¸¡ ê°„ê²© ê·¼ê±°ë¡œë§Œ ì�´ì–´ ë¶™ì�¸ë‹¤. tie_blocks ì—� ë°”ë¡œ ë�”í•œë‹¤.

    ë°˜í™˜: ì�´ì�€ ë‹¤ë¦¬ ëª©ë¡� [{'a','b','gap_mm','tol_mm','seeds','eqs','kind'}]
          + ëª» ì�´ì�€ ìŒ�ì�˜ ì‹¤ì¸¡ ê°„ê²©(ì‚¬ìœ  í‘œê¸°ìš©)
    â˜… ìˆœì„œ ì�˜ì¡´ì„±: ì�´ í•¨ìˆ˜ê°€ ë§Œë“œëŠ” ë°©ì •ì‹�ë�„ fixed_set('í•œ ì ˆì �ì�€ í•œ ë²ˆë§Œ ì¢…ì†�')ì�„
      ëˆ„ì �í•˜ë¯€ë¡œ ë�„ëŠ” ìˆœì„œê°€ ê²°ê³¼ë¥¼ ë°”ê¿€ ìˆ˜ ìžˆë‹¤. ì„±ë¶„ì�€ 'ë¶€í’ˆë²ˆí˜¸ ìµœì†Ÿê°’',
      ìŒ�ì�€ '(ë¶€í’ˆë²ˆí˜¸, ë¶€í’ˆë²ˆí˜¸)' ë¡œ ì •ë ¬í•´ ìž…ë ¥ ìˆœì„œì™€ ë¬´ê´€í•˜ê²Œ ë§Œë“ ë‹¤.
    r%  r&  c              3   ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­wrï   rÅ  )rñ   ÚgÚ
fix_groupss     €r3   rò   z"bridge_floating.<locals>.<genexpr>  s   øè ø€ Ð:™U˜ a¨zÒ&9”!™Uùs   ƒ	�c                 ó2   •— t        ˆfd„‰|    D «       «      S )Nc              3   ó.   •K  — | ]  }‰|   d    –— Œ y­w)rž  NrÅ  )rñ   rÆ  rR  s     €r3   rò   z4bridge_floating.<locals>.<lambda>.<locals>.<genexpr>  s   øè ø€ Ð"IÁ¸1 5¨¡8¨IÕ#6Áùs   ƒ)rÛ   )rË  rÙ  rR  s    €€r3   Ú<lambda>z!bridge_floating.<locals>.<lambda>  s   ø€ œsÓ"IÀÀaÂÓ"IÔIr5   rT  c                 ó   •— ‰|    d   S )Nrž  rÅ  )rÆ  rR  s    €r3   rÏ  z!bridge_floating.<locals>.<lambda>  s   ø€ ¨U°1©X°iÒ-@r5   r>   r   r8   r   rž  r“  r”  r   N)rO   rP   Úgap_mmrž   u   ì”¨ì•— 0ê°œ)rO   rP   rÑ  Úwhy)NNrM  r   rU  r   r  )Úslave_nÚ	sel_facesÚnode_gap_mmr   c              3   ó:   •K  — | ]  }t        ‰|   «      –— Œ y ­wrï   r  )rñ   rá   Ú_cids     €r3   rò   z"bridge_floating.<locals>.<genexpr>Z  s   øè ø€ Ð6±#¨QœC  Q¡ŸL±#ùs   ƒur   ì”¨ì•— %dê°œì�¸ë�° ê°„ê²©+%.0fmm ì•ˆì—� ë¬¶ì�„ ì ˆì �ì�´ ì—†ì�Œ (ê²‰ë©´ ì ˆì �â†”ìƒ�ëŒ€ ë©”ì‹œ ìµœì†Œê±°ë¦¬ %s mm)Ú/c              3   ó8   K  — | ]  }t        |d    «      –— Œ y­w)rÕ  N©rO  )rñ   rT  s     r3   rò   z"bridge_floating.<locals>.<genexpr>i  s#   è ø€ ð 5EÙ>C¸ô 69¸¸=Ñ9I×5JÙ>Cùó   ‚Ú?)rO   rP   rÑ  ÚrolesrÒ  u   ì ‘ì´‰ìŒ� ëˆ„ë�½ ë³µêµ¬u   ê°„ê²© ì¶”ì • ìš©ì ‘r  )rO   rP   rÑ  Útol_mmr�  r-  ÚkindÚlossÚ
assign_cutÚside_part_noÚtied_idsuS     [ë‹¤ë¦¬] %dë²ˆâ†”%dë²ˆ ê°„ê²© %.3fmm â†’ tol %.2fmm, ì”¨ì•— %d, ë°©ì •ì‹� %d (%s)rß  )#r   r^   r!   r“  rÞ   rN   rß   r  rÚ   r5  r·   rÕ  rK   rÈ  r    r&   Úisfiniter$   ÚBRIDGE_TOL_MARGIN_MMr¬  rÜ   r#   rÛ   rõ   rE   rF   rM   rÔ  r"   Úrepeatr1  rŒ  ry   rÝ   Úextend)9rR  r¬   ÚgrprÌ  r  Ú
tie_blocksÚbase_tolr»  Úmax_gapr  rh   r%  r&  rÆ  rË  ÚfloÚbridgesÚrejectedÚmemÚmemsetrê   rO   r.  rP   rY  Únbr  r7  Úgapr)   ÚsdÚ_str‘   ÚzloÚzhir-  rV   rÝ  Ú_blÚ_bsiderÄ  rÕ   rh  Ú_mcÚ_mrÚselÚ_spÚ_ngÚ_allÚ_nÚ_bl0rU   Ú_dkÚ_ikÚ_keepr×  rÙ  s9   `  `                                                   @@r3   Úbridge_floatingr    sã  û€ ô 
�‰¡EÓ*¡E˜q�1�T“7 EÑ*¬EÓ	2€BÜ	�‰¡EÓ*¡E˜q�1�T“7 EÑ*¬EÓ	2€BØ€EÜ˜#–‰ˆˆ1Ø×Ñœ˜Q› Ó$×+Ñ+¨AÕ.ð ä
Ó:™UÓ:ÜIôK€Cà˜BˆX€GÜˆÜ�U˜1‘XÓ#@ÔAˆÜ�S“ˆØˆÛˆAÜ—
‘
œ2Ÿ:™: b¨2¨a©5¡j°"°Q±%¸"±*Ó=¸sÓC×GÑGÈQÐGÓOˆAÜ—X‘X˜a 7™lÓ+¨AÔ.�Ü˜“F�Ø˜‘;ØØ—‘œS  q¡¨)Ñ!4Ó5´s¸5À¹8ÀIÑ;NÓ7OÐQRÐTUÐVÕWñ	 /ð ð 	�	‰	ŒÜ"‰NˆR��Q˜Ø˜‘8˜U 1™XˆqˆAÜœbŸj™j¨¨6©´EÓ:¼B¿J¹JÀqÈÁyÔRT×RZÑRZÓ<[Ü Ÿj™j¨¨6©´EÓ:¼B¿J¹JÀqÈÁyÔRT×RZÑRZÓ<[ó]ˆCä—;‘;˜sÔ# s¨W¢}Ø—‘ b¨rÜACÇÁÈSÔAQô ?DÀCÈ¼mØW[ñ!^ô _àÜ”e˜H“o¤u¨S£zÔ4HÑ'HÓIˆCÜ$ a¨ V¨SÓ1‰GˆB�Ø—&‘&˜“.ˆCØˆ{¤# c¤(Ø—‘ b¨r¼UÀ3È»]Ø(5ñ!7ô 8áØ—w‘w A�w“¨Ñ,¨c¯g©g¸1¨g«oÀÑ.C�ˆCØ  ! R�e�ˆCØ$‰KˆC�Ø˜q˜6 A q 6Ô*‘��Að ˜A˜h™Kª¨2¨A¨2¨Ñ.Ñ/�Ø—h‘h A�hÓ&�Ü—i‘i—n‘n S¨3ªq°$º¨z©?Ñ%:À�nÓC×GÑGÈQÐGÓOÒPQÐSWÐPWÑX�Ü—h‘hœrŸv™v c¨S°3©YÑ&6¸QÔ?Ü!#§¡¨¨s°S©yÑ(8¸qÔ!Añ Bó CØCDñF�ð
 œBŸJ™J q¨¡}´b·h±hÓ?Ñ@�ô ˜cœ(ô # 3¬¯	©	´#°c³(Ó(;×(CÑ(CÀBÈÓ(J×(QÑ(QÐRSÐUVÓ(WØ#(¨!¨H©+²a¸¸!¸°eÑ*<ô>ä(-¨e«ð ð —‘¬¬S°«X«ÄSÌÈSËÃ]Ü?A¿{¹{È3Ô?O¬e°C¸¬mÐUYñ\ô ]ä˜3”xÙô "6Ø˜1˜Z™=¨!¨H©+°cÑ*:¸IÜ˜#“JÔ!5Ñ5°zó"C‘��b˜$ñ Ùô —x‘x±DÓ 9±D¨q¤ Q q¡T¥°DÑ 9ÄÇÁÔJ�Ü)¨%°©+°sÓ;‘��SÜÓ6±#Ó6Ó6�Ù"&Ó=¡$˜Q¬#¨a°©d«)°uÒ*<’q $�Ð=Ü˜#“h�Ûð #'¬¨A¨i©LÓ(9˜�CÙða +ñb Ø—‘ b¨r¼UÀ3È»]Ø*/ð*^ä,/°«HÔ6JØ,/¯H©Hñ 5EÙ>Có5Eó -Eò -LØHKð,Mñ*Mñ!Oô Pñ Û�Ø—‘˜a ™dÕ#ð à×Ñ˜cÔ"Ø�N‰NØ˜b¬E´%¸³*¸aÓ,@Ü  Q›-´#´c¸#³h³-ÌÈCËð 7:¸X²oÑ2ÐKað ¬3¹S°°D²	ÀaÈ3Ñ/NÓ+OØ &ô ŸH™H¹Ó%=¹°A¤c¨!¨A©$¥i¸Ñ%=ÄRÇXÁXÔNñô ó  ÙÐjØ˜B  S¬#¨c«(°C¸À¹ÀVÑ9LÐMñNö OòA #ð ð\ �HÐÐùòm +ùÚ*ùòV !:ùò >ùòD &>s#   ˜\3Á\8Õ\=Ö]
Ö2]
Û]$c           	      ó’  — t        j                  |dd…ddgf   |dd…ddgf   |dd…ddgf   g«      }t        j                  |d¬«      }t        j                  |dd¬«      \  }}||dk(     }t	        |«      syt        t         j                  j                  | |dd…df      | |dd…df      z
  d¬«      j                  «       «      S )	uF   ì ‘í•©ë©´ ì‚¼ê°�í˜• ì§‘í•©ì�˜ ë°”ê¹¥ ë‘˜ë ˆ ê¸¸ì�´ = ìš©ì ‘ì„  ê¸¸ì�´.Nr   r   r   r8   Tr;   r>   )	r   rJ   rK   r'   r#   r!   rE   rF   rG   )r¬   Úfaces3rU   rá   rC  rV   rP   s          r3   Úinterface_perimeterr  …  s½   € ä
�	‰	�6š!˜a ˜V˜)Ñ$ fªQ°°A°¨YÑ&7¸ÂÀAÀqÀ6À	Ñ9JÐKÓL€AÜ
�‰�˜Ô€AÜ�Y‰Y�q˜q°Ô5�F€A€sØ	ˆ#�‰(‰€AÜˆqŒ6ØÜ”—‘—‘  aª¨1¨¡g¡°°qº¸A¸±w±Ñ ?Àa�ÓH×LÑLÓNÓOÐOr5   c                 óè  — | }|j                  d«      }|�t        |«      sy|d   |   dd…dd…f   }|d   |   }||dd…df      ||dd…df      ||dd…df      }}
}	t        j                  |
|	z
  ||	z
  «      }t        j                  j                  |d¬	«      }d
|z  }|t        j                  |dd…df   d«      z  }|	|
z   |z   dz  }t        j                  d||||   z
  «      dk  }||xx   dz  cc<   t        j                  t        |«      t        ¬«      }|d   |   dd…dd…f   }||   j                  d¬	«      }|j                  \  }}}}}}|dd…df   |dd…df   |dd…df   }}}t        j                  ||z  ||z  z   ||z  z   ||z  ||z  z   ||z  z   ||z  ||z  z   ||z  z   gd¬	«      }||   ||df   z  j                  d¬	«      }|t        ||   j                  «       «      dœS )uÞ   ìš©ì ‘ ì ‘í•©ë©´ì�„ ì§€ë‚˜ ì „ë‹¬ë�˜ëŠ” íž˜ = ì ‘ì´‰ë©´ ì‚¼ê°�í˜•ì—� ìž‘ìš©í•˜ëŠ” íŠ¸ëž™ì…˜ t=ÏƒÂ·n ì�˜ ì �ë¶„.
    (ë°˜ë ¥ ì¶”ì¶œì�´ ì•„ë‹ˆë�¼ ì�‘ë ¥ìž¥ì—�ì„œ ì§�ì ‘ êµ¬í•˜ë¯€ë¡œ CalculiX ì˜µì…˜ì—� ì�˜ì¡´í•˜ì§€ ì•ŠëŠ”ë‹¤)Ú	force_idxNrM  r   Ú	faces_oppr   r   r   r8   r7   çê-�™—q=r¯  r9   r·  r   )Úforce_NrA   )rÜ   r#   r   rD   rE   rF   r5  rI   rÖ  rL   rõ   r¨   r÷   rG   r!   ) r¬   ÚstressÚpartÚwelds_wr)   r‘   Úsel_idxrË  rë  rc   rd   re   rR   r“   rS   rf   r$  Úfliprû  ÚgmrÄ  ÚsxÚsyÚszÚtxyÚtyzÚtzxÚn1Ún2Ún3r¹   r1   s                                    r3   Úweld_interface_forcer  �  s1  € ð €CØ�k‰k˜+Ó&€GØ€œc 'œlØØˆX‰�wÑ¢ 2 A 2 Ñ&€AØ
ˆ{Ñ
˜GÑ
$€CØ�Q’q˜!�t‘W‘˜s 1¢Q¨ T¡7™|¨S°²1°a°4±©\ˆBˆ€BÜ	�‰�"�r‘'˜2 ™7Ó	#€BÜ	�‰�‰˜ ˆÓ	#€BØ�‰8€DØ
Œr�z‰z˜"šQ ˜W™+ uÓ-Ñ
-€CØ�‰7�R‰<˜3Ñ
€Cä�9‰9�Z  c¨C°©H¡nÓ5¸Ñ9€DØˆƒI�ÑƒIÜ
�'‰'”#�a“&¤Ô
%€Cð 
ˆh‰˜Ñ	 ¢ A¡B Ñ	'€BØˆr‰
�‰˜QˆÓ€AØ !§¡Ñ€BˆˆB��S˜#Ø’Q˜�T‘˜C¢ 1 ™I sª1¨a¨4¡yˆBˆ€BÜ
�‰�"�r‘'˜C "™HÑ$ s¨R¡xÑ/Ø˜‘(˜R "™WÑ$ s¨R¡xÑ/Ø˜‘(˜S 2™XÑ%¨¨R©Ñ/ð1à78ô	:€Að 
ˆ3‰�$�s˜D�y‘/Ñ	!×&Ñ&¨AÐ&Ó.€AØ¤e¨D°©I¯M©M«OÓ&<Ñ=Ð=r5   ))r   r   r   )r   r   r   ©r   r   r   )r   r   r   ))r   r   r   r   )rw   rß  r¥   rà  )r   r   rß  rw   )r   r   r¥   rß  )r   r   rà  r¥   )r   r   rw   rà  c           
      óø   — t        j                  t        D �cg c]  }| dd…t        |«      f   ‘Œ c}«      }t        j                  |d¬«      }t        j
                  |ddd¬«      \  }}}|||dk(        S c c}w )u   í•œ ë²ˆë§Œ ì“°ì�¸ ë©´ = ê²‰ë©´.Nr   r8   r   Trä  )r   rJ   Ú	TET_FACESræ  rK   r'   )r•   ra   r¾   r,   r-   rý   rV   s          r3   Úsurface_tris_tetr   ¸  sn   € ä�I‰IµÓ;±¨A�tšAœt A›w˜JÓ'°Ñ;Ó<€EÜ
�'‰'�%˜aÔ
 €CÜ—)‘)˜C a°dÈ$ÔO�K€A€sˆCØ��S˜A‘X‘ÑÐùò <s   ˜A7c           
      óJ  — t        j                  t        D �cg c]  }| d d …t        |«      f   ‘Œ c}«      }t        j                  |d¬«      }t        j
                  |ddd¬«      \  }}}|||dk(        }t        j                  |d d …g d¢f   |d d …g d¢f   g«      S c c}w )Nr   r8   r   Trä  )r   r   r   )r   r   r   )r   rJ   Ú	HEX_FACESræ  rK   r'   )Úhexesra   Úquadsr,   r-   rý   rV   rg  s           r3   Úsurface_tris_hexr%  À  s‘   € Ü�I‰Iµ)Ó<±)¨Q�ušQ¤ Q£˜ZÓ(°)Ñ<Ó=€EÜ
�'‰'�%˜aÔ
 €CÜ—)‘)˜C a°dÈ$ÔO�K€A€sˆCØˆc�#˜‘(‰mÑ€AÜ�9‰9�ašš9˜‘o qªªI¨¡Ð7Ó8Ð8ùò	 =s   ˜B c                 ó:  — dg}t        |d«      D ]&  \  }}|j                  d||d   |d   |d   fz  «       Œ( |j                  d|z  «       t        |d«      D ]1  \  }}|j                  d|dj                  d	„ |D «       «      fz  «       Œ3 |xs g D �]!  \  }}}d
D �]  }|dz   |dfg}t        d«      D ]D  }t	        ||   «      dkD  sŒ|j                  t        ||   «      dz   |t        ||   «       f«       ŒF |j                  d«       |j                  dt        |«      z  «       g }t        |«      D ]x  \  }\  }}}|j                  d|||fz  «       t        |«      dk(  s|t        |«      dz
  k(  sŒA|j                  dj                  |«      |t        |«      dz
  k7  rdndz   «       g }Œz �Œ �Œ$ |ddd||fz  gz  }|	r|dd|	z  d|	dz  z  gz  }|ddgz  }t        |«      D ]  }|j                  d|dz   z  «       Œ |	r|g d¢z  }n|dd gz  }|
rI|j                  d«       t        |
«      D ]*  }|
|   D ]   \  }}|j                  d!|dz   |||fz  «       Œ" Œ, |rk|j                  d"«       |j                  «       D ]G  \  }}t        d#«      D ]4  }t	        ||   «      d$kD  sŒ|j                  d%|dz   |dz   ||   fz  «       Œ6 ŒI |g d&¢z  }t        | d'd(¬)«      5 }|j                  d*j                  |«      d*z   «       d d d «       y # 1 sw Y   y xY w)+Nz*NODE, NSET=Nallr   z%d, %.6f, %.6f, %.6fr   r   z*ELEMENT, TYPE=%s, ELSET=Eallz%d, %sú, c              3   óJ   K  — | ]  }t        t        |«      d z   «      –— Œ y­w)r   N)rO  rN   ©rñ   ré   s     r3   rò   zwrite_inp.<locals>.<genexpr>Ò  s   è ø€ Ð)EÁ1¸a¬#¬c°!«f°q©j¯/Á1ùs   ‚!#r  r[   r¥   rŽ  z	*EQUATIONz%dz%d, %d, %.10grw   Ú,rs   z*MATERIAL, NAME=MATz*ELASTICz
%.1f, %.3fz*PLASTICz	%.1f, 0.0z
%.1f, 0.20gffffffò?z(*SOLID SECTION, ELSET=Eall, MATERIAL=MATz	*BOUNDARYz%d, 1, 3)z*STEP, INC=200ú*STATICz0.1, 1.0, 1e-5, 0.5z*STEPr+  z%d, %d, %d, %.8fz*CLOADr   r  z%d, %d, %.8f)z
*NODE FILEzU, S, RFz	*END STEPrZ   Úascii©Úencodingrt   )r“  rß   ry   r  rH   rN   r!   r#   r  Úitemsr\   r]   )r`   r¬   rj  ÚetypeÚ	fix_nodesÚloadsr   r   ÚtiesÚ
plastic_fyÚ
prescribedr×   rÆ  rh   rU   ÚsnÚfnodesrZ   ÚdofÚtermsrá   Úliner€  r�   ÚddÚccr+   ÚvalÚvecr.  ra   s                                  r3   Ú	write_inpr?  Ë  s<  € à	Ð€AÜ˜% Ö#‰ˆˆ1Ø	�‰Ð'¨1¨a°©d°A°a±D¸!¸A¹$Ð*?Ñ?Õ@ð $à‡H�HÐ,¨uÑ4Ô5Ü˜% Ö#‰ˆˆ1Ø	�‰�˜Q §	¡	Ñ)EÁ1Ó)EÓ EÐFÑFÕGð $ð !šJ B›J‰ˆˆV�QÜˆCØ˜1‘f˜c 3Ð'Ð(ˆEÜ˜1–X�Ü�q˜‘t“9˜tÓ#Ø—L‘L¤# f¨Q¡i£.°1Ñ"4°c¼EÀ!ÀAÁ$»K¸<Ð!HÕIð ð �H‰H�[Ô!Ø�H‰H�TœC ›JÑ&Ô'ØˆDÜ$-¨eÖ$4Ñ �‘L�R˜˜RØ—‘˜O¨r°2°r¨lÑ:Ô;Ü�t“9 ’> R¬3¨u«:¸©>Ó%9Ø—H‘H˜TŸY™Y t›_°r¼SÀ»ZÈ!¹^Ò7K±ÐQSÑTÔUØ‘Dò	 %5ò ð 'ð Ð
 ¨\¸QÀ¸GÑ-CÐ	DÑD€AÙà	ˆj˜+¨
Ñ2°LÀJÐQUÑDUÑ4VÐWÑWˆØÐ
4°kÐ	BÑB€AÜ�IÖˆØ	�‰�˜q 1™uÑ%Õ&ð áØ	ÒAÑA‰à	ˆg�yÐ!Ñ!ˆñ Ø	�‰�ÔÜ˜
Ö#ˆAØ& qœM‘��SØ—‘Ð+¨q°1©u°c¸3ÀÐ.DÑDÕEñ *ð $ñ Ø	�‰�ÔØ—k‘k–m‰FˆAˆsÜ˜1–X�Ü�s˜1‘v“; Ó&Ø—H‘H˜^¨q°1©u°a¸!±e¸SÀ¹VÐ.DÑDÕEñ ð $ð Ò	0Ñ0€AÜ	ˆd�C 'Õ	*¨aØ	�‰�—	‘	˜!“˜tÑ#Ô$÷ 
+×	*Ñ	*ús   Ë$$LÌLc                 óÆ   — g }t        |«      D ]B  }| dd|z  z   dd|dz   z  z    }|j                  «       s n|j                  t        |«      «       ŒD t	        | dd «      |fS )Né   é   r   r   )r  r†   rß   r!   rN   )r:  ÚcountÚvalsrÆ  rÿ  s        r3   Ú_frd_fieldsrE    si   € Ø€DÜ�5Ž\ˆØ��b˜1‘f‘˜b 2¨¨Q©¡<Ñ/Ð0ˆØ�w‰wŒyÙØ�‰”E˜!“HÕð	 ô
 ˆt�A�bˆz‹?˜DÐ Ð r5   c                 ó   — t        j                  |df«      }t        j                  |df«      }t        j                  |df«      }t        j                  |t         j                  «      }d}t	        | dd¬«      5 }|D �]4  }|j                  d«      r;|dd j                  «       }	|	r|	d	   nd
}
|
dk(  rdn|
dk(  rdn|
dk(  rdn|
dk(  rdnd}ŒP|j                  d«      rd}Œd|j                  d«      sŒv|sŒy|dk(  r*t        |d«      \  }}d|cxk  r|k  sŒ™n Œœ|dd ||dz
  <   Œ¨|dk(  r*t        |d«      \  }}d|cxk  r|k  sŒÈn ŒË|dd ||dz
  <   Œ×|dk(  r.t        |d«      \  }}d|cxk  r|k  sŒ÷n Œú|sŒý|d	   ||dz
  <   �Œ
t        |d«      \  }}d|cxk  r|k  s�Œ&n �Œ*|dd ||dz
  <   �Œ7 	 ddd«       ||||fS # 1 sw Y   ŒxY w)uv  .frd ì�½ê¸° â€” ë³€ìœ„(DISP) / ì�‘ë ¥(STRESS) / ë°˜ë ¥(FORC).

    â˜… FORC(ë°˜ë ¥)ë¥¼ ì�½ëŠ” ì�´ìœ  = êµ¬ì¡°í•´ì„� ì‹¤ë¬´ì�˜ ê°€ìž¥ ê°’ì‹¸ê³  ê°•í•œ 1ì°¨ ê²€ì¦�ì�´
      'Î£ë°˜ë ¥ = Î£í•˜ì¤‘' ì�´ê¸° ë•Œë¬¸ì�´ë‹¤(F-1). write_inp ê°€ '*NODE FILE U,S,RF' ë¡œ
      ì�´ë¯¸ ì¶œë ¥í•˜ê³  ìžˆì—ˆëŠ”ë�° ì�½ì§€ ì•Šì•„ ê²€ì¦� ìž¥ì¹˜ê°€ ë¹„ì–´ ìžˆì—ˆë‹¤.
    â˜… ë¸”ë¡� ì�´ë¦„Â·í˜•ì‹�ì�€ ì‹¤ì¸¡ í™•ì�¸(job.frd): ' -4  DISP 4 1' / ' -4  STRESS 6 1'
      / ' -4  FORC 4 1' / ' -4  ERROR 1 1'. FORC ëŠ” DISP ì™€ ê°™ì�€ 12ìž� í•„ë“œ 3ê°œë‹¤.
      ëª¨ë¥´ëŠ” ì�´ë¦„ì�€ mode=None ìœ¼ë¡œ ê±´ë„ˆë›°ë¯€ë¡œ ê¸°ì¡´ íŒŒì‹±ì�´ ê¹¨ì§€ì§€ ì•ŠëŠ”ë‹¤.
    r   r¥   NrT  rl   ru   z -4rß  r   rs   ÚDISPr@  ÚSTRESSrÄ  ÚFORCÚRÚERRORr   z -3z -1r   )r   r„   r  Únanr\   r…   rƒ   rE  )r`   ÚnnodeÚdispr  ÚforcÚerrÚmodera   r:  ÚtokÚnmr+   r›   s                r3   Ú	parse_frdrT    sÏ  € ô �8‰8�U˜A�JÓ€DÜ�X‰X�u˜a�jÓ!€FÜ�8‰8�U˜A�JÓ€DÜ
�'‰'�%œŸ™Ó
 €CØ€DÜ	ˆd�C 	Õ	*¨aÜˆDØ�‰˜uÔ%Ø˜1˜2�h—n‘nÓ&�Ù"�S˜’V¨�Ø! Vš|™¸¸hº±Ø$&¨&¢L™S¸RÀ7º]±cÐPTñ à—‘ Ô'Ø‘Ø—‘ Õ'ªDØ˜3’;Ü& t¨QÓ/‘D�A�qØ˜A” –Ø&'¨¨ e˜˜Q ™UšØ˜S’[Ü& t¨QÓ/‘D�A�qØ˜A” –Ø&'¨¨ e˜˜Q ™UšØ˜S’[ô ' t¨QÓ/‘D�A�qØ˜A” –ª1Ø%& q¡T˜˜A ™E›
ä& t¨QÓ/‘D�A�qØ˜A” —�Ø()¨"¨1¨˜˜q 1™u›ñ7 ÷ 
+ð: �˜˜sÐ"Ð"÷; 
+Ð	*ús7   Á:A8GÃ3GÃ6GÄ.GÅ.GÅ4GÅ:'GÆ#GÇGc                 ó\  — t        j                  |t        ¬«      }t        |«      r| j	                  «       s|S t        j
                  |t         j                  ¬«      }| |   j	                  d¬«      }|j	                  «       r)d|t        j                  ||   j                  «       «      <   |S )u°  ì”¨ì•— ì ˆì �ì�´ ë“¤ì–´ ìžˆëŠ” ìš”ì†Œì�˜ ëª¨ë“  ì ˆì �ìœ¼ë¡œ 1ê²¹ ë„“ížŒë‹¤(F-2 ì œì™¸ ë§ˆìŠ¤í�¬ìš©).

    ì™œ 'ìš”ì†Œ 1ê²¹' ì�¸ê°€: ìš©ì ‘ MPC ì¢…ì†�ì ˆì �ì—� ìƒ�ê¸°ëŠ” ê°€ì§œ ì²¨ë‘�ëŠ” ê·¸ ì ˆì � í•˜ë‚˜ê°€
    ì•„ë‹ˆë�¼ ê·¸ ì ˆì �ì�´ ì†�í•œ ìš”ì†Œ ì „ì²´ì—� í�¼ì§„ë‹¤(2ì°¨ ìš”ì†Œë�¼ ì¤‘ê°„ì ˆì �ê¹Œì§€). ë°˜ê²½ì�„
    ì§€ì–´ë‚´ëŠ” ëŒ€ì‹  ë©”ì‹œ ìž�ì²´ì�˜ ì—°ê²°ë¡œ ë„“ížˆëŠ” ê²ƒì�´ ë©”ì‹œ ë°€ë�„ê°€ ë°”ë€Œì–´ë�„ ì�¼ê´€ë�œë‹¤.
    r   r   r8   T)	r   r„   rL   r#   r˜   r    r&   r'   rx  )Úseedrj  rM  rz  r   rI  s         r3   Ú_grow_one_layerrW  ;  s{   € ô �(‰(�5¤Ô
%€CÜˆuŒ:˜TŸX™XœZØˆ
Ü
�
‰
�5¤§¡Ô)€AØ
ˆq‰'�+‰+˜1ˆ+Ó
€CØ
‡w�w„yØ)-ˆŒB�I‰I�a˜‘f—l‘l“nÓ%Ñ&Ø€Jr5   c                 ó6  — t        j                  |«      }t        |«      si S |dd…dd…f   j                  t         j                  «      }t        j                  | t
        «      |   }t        j                  t        |«      t         j                  «      }dD �]'  \  }}}}|dd…|f   |dd…|f   z
  |dd…|f   |dd…|f   z
  |dd…|f   |dd…|f   z
  }}
}	t        j                  dt        j                  |	|
«      |«      }t         j                  j                  |	d¬«      t         j                  j                  |
d¬«      z  t         j                  j                  |d¬«      z  }t        j                  |t        j                  d«      t        j                  |«      z  t        j                  |d«      z  «      }�Œ* d	}t        j                   |D ��cg c]7  \  }}t         j                  j                  |dd…|f   |dd…|f   z
  d¬«      ‘Œ9 c}}d¬«      }|j#                  d¬«      t        j                  |j%                  d¬«      d«      z  }t        j                  dt        j                  |dd…df   |dd…d
f   z
  |dd…df   |dd…d
f   z
  «      |dd…df   |dd…d
f   z
  «      }t        j                  |«      dz  }t'        t        |«      «      t)        t        t        j*                  |«      «      d«      t        dt        |j%                  «       «      z  «      t)        t        dt        j,                  |dk  «      z  «      d«      t)        t        t        j*                  |«      «      d«      t)        t        t        j.                  |d«      «      d«      t)        t        |j#                  «       «      d«      t'        t        j0                  |dk  «      «      t)        t        t        j*                  |«      «      d«      ||dœS c c}}w )už  ìš”ì†Œ í’ˆì§ˆì�„ ì „ìˆ˜ ê³„ì‚°í•œë‹¤(ê³„íš� B-7 / D-1-1). ì‚¬ë©´ì²´ ê¼­ì§“ì � 4ê°œë§Œ ì“´ë‹¤.

    â˜… ì™œ ì�´ê²ƒì�´ í•„ìš”í•œê°€: ì „ì²´í•´ì„� ë©”ì‹œì�˜ 43~57% ê°€ ìƒ�ìš© í•´ì„�ê¸°ë�¼ë©´ ê±°ë¶€ë‹¹í• 
      ë‚©ìž‘í•œ ì‚¬ë©´ì²´(ìŠ¬ë¦¬ë²„)ì�¸ë�°, ì½”ë“œì—� ìž¬ëŠ” ê³³ì�´ ì—†ì–´ ì§€ê¸ˆê¹Œì§€ ë³´ì�´ì§€ ì•Šì•˜ë‹¤.
      ê·¸ ìƒ�íƒœì—�ì„œ ë‚˜ì˜¨ ì�‘ë ¥Â·ì•ˆì „ìœ¨ì�„ 'íŒ�ì •' ìœ¼ë¡œ ì“°ë©´ ê±°ì§“ë§�ì�´ ë�œë‹¤.
    Â· sj(ìŠ¤ì¼€ì�¼ë“œ ì•¼ì½”ë¹„ì•ˆ) = sqrt(2)Â·det(e1,e2,e3)/(|e1||e2||e3|) ì�˜ ë„¤ ê¼­ì§“ì � ìµœì†Œê°’.
      ì •ì‚¬ë©´ì²´ = 1, ì™„ì „ ë‚©ìž‘ = 0. ìƒ�ìš© í•´ì„�ê¸° ê²½ê³ ì„  â‰ˆ 0.1, ê±°ë¶€ì„  â‰ˆ 0.02.
    Â· ar(ì¢…íš¡ë¹„) = ìµœìž¥ë³€/ìµœë‹¨ë³€. ì¢‹ì�Œ < 3.
    Nrw   ))r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r9   r   r8   r=   g ÂëþKH´9©rž   )r   r   r    rŸ   r¡   r¢   r   r   r   rw  z%.3gr�  ç{®Gáz”?éc   r>   )rj  Ú	sj_medianÚsj_minÚ
sj_bad_pctÚ	ar_medianÚar_p99Úar_maxÚneg_volÚelem_size_median_mmÚ_sjÚ_ar)r   r    r#   r%   r&   r!   r  r  rI   rD   rE   rF   r6  ÚsqrtrH   r5  r÷   r·   rÛ   rN   r$   r"  rõ   Ú
percentilerG   )r¬   rj  r   r*   ÚsjrO   rP   rQ   r.  Úe1Úe2Úe3r»  rf   r�  rÆ  rÇ  rg   ÚarÚvol6Úh_es                        r3   Útet_qualityro  L  s,  € ô 	�
‰
�5Ó€AÜˆqŒ6Øˆ	Ø	Š!ˆRˆaˆRˆ%‰�‰œŸ™Ó!€AÜ
�
‰
�5œ%Ó  Ñ#€AÜ	�‰”�Q“œŸ™Ó	 €BÜN‰
ˆˆ1ˆa�Ø’q˜!�t‘W˜q¢ A ™wÑ&¨ª!¨Q¨$©°!²A°q°D±'Ñ(9¸1ºQÀ¸T¹7ÀQÂqÈ!ÀtÁWÑ;L�ˆBˆÜ�i‰i˜
¤B§H¡H¨R°Ó$4°bÓ9ˆÜ�y‰y�~‰~˜b qˆ~Ó)¬B¯I©I¯N©N¸2ÀA¨NÓ,FÑFÜ—‘—‘ ¨�Ó+ñ,ˆä�Z‰Z˜œBŸG™G C›L¬2¯6©6°#«;Ñ6¼¿¹ÀCÈÓ9OÑOÓPŠð Oð =€EÜ
�‰ÉÔNÉÁÀÀ1”"—)‘)—.‘. ¢1 a 4¡¨1ªQ°¨T©7Ñ!2¸�.Õ;ÈÒNÐUVÔW€AØ	
�‰�Aˆ‹œŸ™ A§E¡E¨q E£M°5Ó9Ñ	9€BÜ�9‰9�Z¤§¡¨!ªA¨q¨D©'°A²a¸°d±GÑ*;¸QºqÀ!¸t¹WÀqÊÈAÈÁwÑ=NÓ!OØ’q˜!�t‘W˜q¢ A ™wÑ&ó(€Dô �&‰&�‹,˜9Ñ
%€CÜœ˜Q›“[Üœu¤R§Y¡Y¨r£]Ó3°QÓ7Ü˜F¤U¨2¯6©6«8£_Ñ4Ó5Ü¤ e¬b¯g©g°b¸4±iÓ.@Ñ&@Ó AÀ1ÓEÜœu¤R§Y¡Y¨r£]Ó3°QÓ7ÜœE¤"§-¡-°°BÓ"7Ó8¸!Ó<ÜœE "§&¡&£(›O¨QÓ/Üœ2Ÿ6™6 $¨#¡+Ó.Ó/Ü#(¬¬r¯y©y¸«~Ó)>ÀÓ#BØ˜bñ	"ð 	"ùó Os   Ç<P
c                 ó²   — | j                   \  }}}}}}t        j                  d||z
  dz  ||z
  dz  z   ||z
  dz  z   z  d|dz  |dz  z   |dz  z   z  z   «      S )Nr7   r   r¯  )r¨   r   rf  )rÄ  r  r  r  r  r  r  s          r3   Ú	von_misesrq  v  su   € Ø !§¡Ñ€BˆˆB��S˜#Ü�7‰7�3˜2 ™7 q™.¨B°©G¸©>Ñ9¸RÀ"¹WÈ¹NÑJÑKØ˜C 1™H s¨a¡xÑ/°#¸±(Ñ:Ñ;ñ<ó =ð =r5   r=   c                 óò   — t        j                  | t        «      j                  \  }}}}}}dd|z  z  ||z  ||z  z   ||z  z   d|z  ||z  ||z  z   ||z  z   z  z
  dd|z   z  ||z  ||z  z   ||z  z   z  z   z  S )ux  ì�‘ë ¥ë§Œìœ¼ë¡œ ë³€í˜•ì—�ë„ˆì§€ë°€ë�„(NÂ·mm/mmÂ³)ë¥¼ ê³„ì‚°í•œë‹¤.

    â˜… ì„ í˜• ë“±ë°© íƒ„ì„±ì—�ì„œëŠ” ë³€í˜•ë¥ ì�„ ë”°ë¡œ ì¶œë ¥ë°›ì§€ ì•Šì•„ë�„ ì�‘ë ¥ì—�ì„œ ì •í™•ížˆ ë‚˜ì˜¨ë‹¤:
      u = 1/(2E)[ÏƒxÂ²+ÏƒyÂ²+ÏƒzÂ² âˆ’ 2Î½(ÏƒxÏƒy+ÏƒyÏƒz+ÏƒzÏƒx) + 2(1+Î½)(Ï„xyÂ²+Ï„yzÂ²+Ï„zxÂ²)]
      (`*EL FILE, E` ë¥¼ ì¶”ê°€í•œ ê²ƒì�´ ì•„ë‹ˆë‹¤ â€” ì�‘ë ¥ì—�ì„œ ìœ ë�„í•œ ê°’ì�´ë‹¤.)
    r[   r=   )r   r    r!   r¨   )	rÄ  r   r   r  r  r  r  r  r  s	            r3   Ústrain_energy_densityrs  �  s¬   € ô !#§
¡
¨1¬eÓ 4× 6Ñ 6Ñ€BˆˆB��S˜#Ø�3˜‘7‰O  R¡¨"¨r©'Ñ 1°B¸±GÑ ;Ø"%¨¡(¨b°2©g¸¸R¹Ñ.?À"ÀrÁ'Ñ.IÑ"Jñ!Kà"%¨¨r©Ñ"2°c¸C±iÀ#ÈÁ)Ñ6KÈcÐTWÉiÑ6WÑ"Xñ!Yñ Zð Zr5   c                 óÈ  — t        j                  |«      dd…dd…f   j                  t         j                  «      }t        j                  t        | «      «      }t        |«      s|S ||   }|j                  d¬«      |j                  d¬«      z
  }| |   }t        j                  dD ��	cg c]7  \  }}	t         j                  j                  |dd…|f   |dd…|	f   z
  d¬«      ‘Œ9 c}	}d¬«      }
|t        j                  |
j                  d¬«      d«      z  }t         j                  j                  ||j                  «       t        j                  |d«      «       |S c c}	}w )u8  ìš”ì†Œ ì•ˆ ì ˆì �ê°’ì�˜ ìµœëŒ€ ì°¨ì�´ Ã· ìš”ì†Œ í�¬ê¸° = ìš”ì†Œë³„ êµ¬ë°°. ì ˆì �ì—�ëŠ” ìµœëŒ€ê°’ì�„ ë¿Œë¦°ë‹¤.

    â˜… ì¢Œí‘œ ë°˜ê²½ìœ¼ë¡œ ì�´ì›ƒì�„ ì°¾ì§€ ì•Šê³  'ë©”ì‹œ ì—°ê²°' ë¡œë§Œ ê³„ì‚°í•œë‹¤ â€” ë°˜ê²½ì�„ ì§€ì–´ë‚´ë©´
      ë©”ì‹œ ë°€ë�„ê°€ ë°”ë€” ë•Œ ê°’ì�´ ë”°ë�¼ ë°”ë€Œì–´ ë¹„êµ�ê°€ ì•ˆ ë�œë‹¤.
    Nrw   r   r8   rY  rŽ  )r   r    r%   r&   r„   r#   r·   rÛ   r÷   rE   rF   r5  rõ   Úatrx  ræ  )r¬   rj  r=  ÚE4rz  r›   Úrngr*   rÆ  rÇ  rg   rË  s               r3   Ú_nodal_gradientrx  œ  s#  € ô 
�‰�EÓ	š1˜b˜q˜b˜5Ñ	!×	(Ñ	(¬¯©Ó	2€BÜ
�(‰(”3�u“:Ó
€CÜˆrŒ7Øˆ
ØˆB‰€AØ
�%‰%�Qˆ%‹-˜!Ÿ%™% Q˜%›-Ñ
'€CØˆb‰	€AÜ
�‰ÙNôPÙN‘d�a˜ô —)‘)—.‘. ¢1 a 4¡¨1ªQ°¨T©7Ñ!2¸�.Õ;ØNòPØVWô	Y€AàŒb�j‰j˜Ÿ™ Q˜›¨Ó.Ñ.€AÜ‡J�J‡M�M�#�r—x‘x“z¤2§9¡9¨Q°£?Ô3Ø€Jùó	Ps   Â*<E
c                 ó  — t        j                  t        | «      «      }t        j                  |«      d   }t        |«      s|S t        j                  t        j                  | |   «      «      }|t        t        |«      dz
  d«      z  ||<   |S )uE   mask ì�¸ ì ˆì �ë“¤ ì•ˆì—�ì„œì�˜ ë°±ë¶„ìœ„ ìˆœìœ„(0~1). mask ë°–ì�€ 0.r   r   )r   r„   r#   rÕ  rº  r·   )r›   Úmaskrz  rý   r×   s        r3   Ú	_pct_rankr{  °  so   € ä
�(‰(”3�q“6Ó
€CÜ
�(‰(�4‹.˜Ñ
€CÜˆsŒ8Øˆ
Ü
�
‰
”2—:‘:˜a ™fÓ%Ó&€AØ”3”s˜3“x !‘| QÓ'Ñ'€Cˆ�HØ€Jr5   c                 ó*  — ddl m} ddlm} t	        j
                  | «      dd…dd…f   j                  t        j                  «      }t        |«      r|j                  «       sg S ||   }g g }}t        d«      D ]f  }	t        |	dz   d«      D ]R  }
|dd…|	f   |dd…|
f   z  }|j                  «       sŒ'|j                  |||	f   «       |j                  |||
f   «       ŒT Œh t	        j                  |«      d   }|s$|D �cg c]  }t	        j                  |g«      ‘Œ c}S t	        j                  |«      }t	        j                  |«      } |t	        j                  t        |«      «      ||ff||f¬«      } ||d¬	«      \  }}i }|D ]8  }|j!                  t#        ||   «      g «      j                  t#        |«      «       Œ: |j%                  «       D �cg c]  }t	        j                  |«      ‘Œ }}|j'                  t        d
¬«       |S c c}w c c}w )u¸   ì”¨ì•— ì ˆì �ì�„ 'ìš”ì†Œë¥¼ ê³µìœ í•˜ë©´ í•œ ë�©ì–´ë¦¬' ë¡œ ë¬¶ëŠ”ë‹¤(ë©”ì‹œ ì—°ê²° ê¸°ë°˜ í�´ëŸ¬ìŠ¤í„°ë§�).
    ë°˜í™˜: ì ˆì �ìˆ˜ ë§Žì�€ ìˆœìœ¼ë¡œ ì •ë ¬ë�œ [ì ˆì �ë²ˆí˜¸ ë°°ì—´, ...]r   )Ú
coo_matrix)Úconnected_componentsNrw   r   )ÚshapeF)ÚdirectedT©r,   Úreverse)Úscipy.sparser}  Úscipy.sparse.csgraphr~  r   r    r%   r&   r#   r˜   r  rß   rÕ  r^   r¦   rÖ  rÞ   rN   ÚvaluesrK   )rj  rV  rM  r}  r~  rv  rì  ÚrowsÚcolsrO   rP   rÊ   ÚsidrÆ  rT  rQ   rË  r+   ÚlabÚgroupsr›   rz  s                         r3   Ú_cluster_seedsr‹  »  sÃ  € õ (Ý9Ü	�‰�EÓ	š1˜b˜q˜b˜5Ñ	!×	(Ñ	(¬¯©Ó	2€BÜˆrŒ7˜$Ÿ(™(œ*Øˆ	Ø�‰8€DØ�Rˆ$€DÜ�1ŽXˆÜ�q˜1‘u˜a–ˆAØ’Q˜�T‘
˜T¢! Q $™ZÑ'ˆAØ�u‰u�wØ—‘˜B˜q !˜t™HÔ% t§{¡{°2°a¸°d±8Õ'<ñ !ð ô
 �(‰(�4‹.˜Ñ
€CÙÙ'*Ó+¡s !”—‘˜!˜• sÑ+Ð+Ü
�‰�tÓ€A¤"§.¡.°Ó"6˜aÙ”B—G‘GœC ›F“O a¨ VÐ,°U¸E°NÔC€AÙ! !¨eÔ4�F€A€sØ€FÛˆØ×Ñœ#˜c !™f›+ rÓ*×1Ñ1´#°a³&Õ9ð à &§¡¤Ó
0¡˜1Œ2�8‰8�A�; €CÐ
0Ø‡H�H”˜d€HÔ#Ø€Jùò ,ùò 1s   Ä HÇHc                 ón  ‡ ‡‡‡‡	‡‡‡‡‡‡‡‡ ‡!‡"‡#‡$— t        ‰ «      Š!t        |||«      Š$t        ‰ ‰‰«      Š t        j                  ‰«      dd…dd…f   j                  t        j                  «      }t        j                  ‰!«      }t        j                  ‰!«      }|�Ÿt        |«      t        |«      k(  rˆt        j                  j                  ||j                  «       d«       t        j                  j                  ||j                  «       t        j                  |dk  j                  t        «      d«      «       |t        j                  |d«      z  Št        j                  ‰!dt        ¬«      Š"i Š#|
D ]T  }t        |j!                  dd«      «      ‰"|d   |d	    |j!                  d
d«      ‰#t        |j!                  dd«      «      <   ŒV t        j                  ‰!t        j"                  «      Š|xs g D ]a  \  }}t        j$                  ‰t        j&                  j)                  ‰ t        j                  |t        «      z
  d¬«      t        |«      z
  «      ŠŒc t        j                  ‰!t        j"                  «      Š|�3|j+                  «       r#ddlm}  |‰ |   «      j1                  ‰ «      \  Š}ˆˆˆˆˆˆ	ˆ ˆˆ!ˆ ˆ"ˆ#ˆ$ˆˆˆˆfd„} || d«      } ||d«      }dd‰t3        t        ‰«      d«      t        | j5                  «       «      t        |j5                  «       «      t6        t8        ddœ	}|||fS )u¡  ì·¨ì•½ í›„ë³´ ì˜�ì—­ì�„ ì‚¬ìš©ìž� ìž…ë ¥ ì—†ì�´ ë½‘ëŠ”ë‹¤. ë°˜í™˜: (êµ¬ì¡°í›„ë³´ëª©ë¡�, íŠ¹ì�´ì �í›„ë³´ëª©ë¡�, ìš”ì•½)

    ìˆœìœ„ëŠ” 'ë‹¨ì�¼ ìµœëŒ€ì�‘ë ¥' ì�´ ì•„ë‹ˆë�¼ â‘ â‘¡â‘¢ ë°±ë¶„ìœ„ ìˆœìœ„ì�˜ í�‰ê· (ì§€í‘œ í•©ì�˜)ì�´ë‹¤.
    â‘£ERR% ì™€ ìš”ì†Œí’ˆì§ˆì�€ ìˆœìœ„ì—� ì„žì§€ ì•Šê³  'ì‹ ë¢°ë�„' ë¡œë§Œ ë¶™ì�¸ë‹¤ â€” ì„žìœ¼ë©´
    "ì˜¤ì°¨ê°€ ì»¤ì„œ ìˆœìœ„ê°€ ì˜¬ë�¼ê°”ë‹¤" ê°™ì�€ ëœ» ì—†ëŠ” ê²°ê³¼ê°€ ë‚˜ì˜¨ë‹¤.
    Nrw   r[   rZ  r   r   rž  rN  r  Ú	part_namers   r   r8   r   r  c                 óè  •— | j                  «       sg S t        ‰*| «      }t        ‰!| «      }t        ‰'| «      }||z   |z   dz  }d||  <   t        dt        | j	                  «       ‰(z  «      «      }t        t        j                  ||    t        |t        | j	                  «       «      «       «      t        |t        | j	                  «       «      «          «      }| ||k\  z  }g }	t        ‰|‰#«      d ‰)dz   D �]N  }
t        |
«      dk  rŒ‰$|
   }|j                  d¬«      }t        t        j                  j                  ||z
  d¬«      j                  «       «      }t        t        d„ ‰%|
   D «       «      «      }‰|
   t        j                   ‰|
   «         }t        d	‰|
   j                  «       z  «      }t        j                   ‰|
   «      j                  «       r!t        t        j                  ‰|
   «      «      nd }t        j                   ‰|
   «      j                  «       r!t        t        j                  ‰|
   «      «      nd }t"        t        ‰"d
«      z  }|t$        kD  rdd|z  }}nR|dk(  rd\  }}nG|�||k  s|�9||k  r4dd|€|�!dt        ||fD �cg c]  }|€Œ|‘Œ	 c}«      z  nd‰"t"        fz  }}nd\  }}d }‰+rå‰+D �cg c][  }|j'                  d«      rHt        t        j                  j                  t        j(                  |d   t
        «      |z
  «      «      |f‘Œ] }}|r}t        |d„ ¬«      \  }}t+        |d«      |j'                  d«      t+        t        |j'                  d«      xs d«      d«      t+        t        |j'                  d«      xs d«      d«      dœ}|	j-                  i d|“d|D �cg c]  }t+        t        |«      d«      ‘Œ c}“dt+        |d«      “dt        t        |
«      «      “d |d d! “d"|d d! D �cg c]  }‰&j'                  |d#«      ‘Œ c}“d$t+        t        ||
   j                  «       «      d%«      “d&t+        t        ‰*|
   j                  «       «      d«      “d't+        t        t        j.                  ‰*|
   «      «      d«      “d(t+        t        ‰!|
   j                  «       «      d«      “d)t        d*t        ‰'|
   j                  «       «      z  «      “d+t        |«      r(t+        t        t        j.                  |«      «      d«      nd “d,t+        |d«      “d-|�!t        j                   |«      rt+        |d«      nd “d.|�!t        j                   |«      rt+        |d«      nd “d/|“d0t+        t        ‰*|
   j                  «       ‰ z  d	z  «      d«      “|d1d2d||
   j                  «       z
  z  d2d||
   j                  «       z
  z  d2d||
   j                  «       z
  z  t        ||
   j                  «       «      t        |«      rdt        j.                  |«      z  nd3|fz  d4d5œ¥«       �ŒQ |	j1                  d6„ d7¬8«       |	d ‰) S c c}w c c}w c c}w c c}w )9Nr¯  r·  rv  r   r   r8   r   c              3   ó>   K  — | ]  }|d k\  sŒ	t        |«      –— Œ y­w©r   Nr  r)  s     r3   rò   z1detect_candidates.<locals>.run.<locals>.<genexpr>  s   è ø€ Ð=©F q°a¸1³fœC ŸF©Fùs   ‚
�r�  r[   u   ë©”ì‹œ ê²°í•¨u‘   ì�´ ì˜�ì—­ ìš”ì†Œì�˜ %.1f%% ê°€ ì“¸ ìˆ˜ ì—†ëŠ” í’ˆì§ˆ(sj<0.02)ì�´ë�¼ ì�‘ë ¥ê°’ì�´ í˜•ìƒ� ë•Œë¬¸ì�¸ì§€ ë©”ì‹œ ë•Œë¬¸ì�¸ì§€ ê°€ë¦´ ìˆ˜ ì—†ìŠµë‹ˆë‹¤Úsingular)õ   íŠ¹ì�´ì � ì�˜ì‹¬u‰   ê³ ì •Â·í•˜ì¤‘Â·ìš©ì ‘ êµ¬ì†� ìž�ë¦¬(ë˜�ëŠ” ê·¸ 1ìš”ì†Œ ì�´ë‚´)ìž…ë‹ˆë‹¤ â€” ì—¬ê¸° ì�‘ë ¥ì�€ ê³„ì‚°ìƒ� ì�¸ê³µ ì²¨ë‘�ì�¼ ìˆ˜ ìžˆìŠµë‹ˆë‹¤r’  uF   ê°€ìž¥ ê°€ê¹Œìš´ êµ¬ì†�ê¹Œì§€ %s mm (ìš”ì†Œ %.1fmm ì�˜ %.1fë°° ì�´ë‚´)z%.1fÚ-)õ   êµ¬ì¡° í›„ë³´uS   êµ¬ì†�Â·ê»�ì§ˆ ìž�ë¦¬ì—�ì„œ ë–¨ì–´ì§„ ë³¸ì²´ì�´ê³  ìš”ì†Œ í’ˆì§ˆë�„ ì •ìƒ�ìž…ë‹ˆë‹¤ru  c                 ó   — | d   S )Nr   rÅ  )r¹   s    r3   rÏ  z0detect_candidates.<locals>.run.<locals>.<lambda>&  s   € °1°Q²4r5   rT  Úlabelr  r>   Úpct)Údist_mmr–  r  Úfatigue_pctrß  r   Ú	radius_mmr¬   rR  rB  Ú
part_namesrs   Úscorerw   Úvonmises_max_MPaÚvonmises_med_MPaÚgrad_max_MPa_per_mmÚsed_max_Nmm_per_mm3z%.4gÚerrpct_medianÚbad_elem_pctÚdist_to_bc_mmÚdist_to_weld_mpc_mmÚnearest_weldÚyield_ratio_pctu°   von Mises ìƒ�ìœ„ %.0f%% Â· ì�‘ë ¥êµ¬ë°° ìƒ�ìœ„ %.0f%% Â· ë³€í˜•ì—�ë„ˆì§€ë°€ë�„ ìƒ�ìœ„ %.0f%% (ì„¸ ì§€í‘œ í•©ì�˜ %.2f). ì†”ë²„ ì�‘ë ¥ì˜¤ì°¨ %s%%, ì�´ ì˜�ì—­ ë¶ˆëŸ‰ìš”ì†Œ %.2f%%.éd   u   ì—†ì�Œu   íŒ�ì • ë³´ë¥˜)Úclass_reasonrÒ  Úverdictc                 ó   — | d   S )Nrœ  rÅ  )r.  s    r3   rÏ  z0detect_candidates.<locals>.run.<locals>.<lambda>B  s   € ˜q šzr5   Tr�  )r˜   r{  r·   rN   rG   r!   r   Ú	partitionrÛ   r‹  r#   rõ   rE   rF   r  rÚ   rä  ÚSTRESS_SINGULAR_NEARÚMESH_DEFECT_PCTrÜ   r    r$   rß   r"  rK   ),Úpoprß  Úr1Úr2Úr3Úconsrá   ÚthrrV  rz  rË  r*   r$  r%  ÚpsÚevÚbfÚdbcÚdmpr'  ÚclsÚwhy_clsré   ÚwnearrZ   Úwd_r;  Úbad_fracÚd_bcÚd_mpcrj  Úerrpctr	   ÚgradÚh_elemr�   r¬   ÚpidÚpnmÚsedÚ	seed_fracÚtop_nÚvmr`  s,                              €€€€€€€€€€€€€€€€€r3   r}   zdetect_candidates.<locals>.runý  s0  ø€ Ø�w‰wŒyØˆIÜ�r˜3Óˆ¤i°°cÓ&: ÄÈ3ÐPSÓAT¸BØ�R‘˜"‘ Ñ#ˆØˆˆcˆT‰
Ü�”C˜Ÿ™›	 IÑ-Ó.Ó/ˆÜ”B—L‘L  c¡¬S°´C¸¿¹»	³NÓ-CÐ,CÓDÄcÈ!ÌSÐQT×QXÑQXÓQZË^ÓF\ÐE\Ñ]Ó^ˆØ�d˜c‘kÑ"ˆØˆÜ  t¨RÓ0°°%¸!±)Ô<ˆAÜ�1‹v˜ŠzØØ�a‘ˆAØ—&‘&˜a�&“.ˆCÜœŸ	™	Ÿ™ q¨3¡w°Q˜Ó7×;Ñ;Ó=Ó>ˆCÜœÑ=¨C°ªFÓ=Ó=Ó>ˆBØ˜‘œ2Ÿ;™; v¨a¡yÓ1Ñ2ˆBÜ�u˜x¨™{×/Ñ/Ó1Ñ1Ó2ˆBÜ,.¯K©K¸¸Q¹Ó,@×,DÑ,DÔ,F”%œŸ™˜t A™w›Ô(ÈDˆCÜ-/¯[©[¸¸q¹Ó-B×-FÑ-FÔ-H”%œŸ™˜u Q™xÓ(Ô)ÈdˆCÜ'¬#¨f°cÓ*:Ñ:ˆDØ”OÒ#Ø.ð 2yØ{}ñ2~�W‘à˜Ò#ð k‘�‘Wà�/ c¨T¢k°s°È3ÐRVÊ;Ø1Ð4|à25°/ÀSÀ_ð 06¼ÈÈcÉ
Ó<dÉ
À1ÐVWÑVcºQÈ
Ñ<dÓ8eÒ/eØ[^Ø.4Ô6Jð.Lñ5L�W‘ð
  F‘��WàˆEÙÙ]bó 'Ñ]bÐXYØŸ%™% œ+ô œbŸi™iŸn™n¬R¯Z©Z¸¸$¹ÄÓ-GÈ#Ñ-MÓNÓOÐQRÒSÐ]b�ð 'áÜ ©Ô8‘E�B˜Ü(-¨b°!«¸q¿u¹uÀW»~Ü(-¬e°A·E±E¸)Ó4DÒ4KÈÓ.LÈaÓ(PÜ,1´%¸¿¹¸e»Ò8KÈÓ2LÈaÓ,PñR�Eð �J‰Jð Ø˜ðØ!ÁÓ#DÁ¸1¤E¬%°«(°AÕ$6ÀÑ#DðàœU 3¨›]ðà,3´S¼¸Q»³[ðð ˜˜C˜R˜ðð #/ÈÈCÈRÉÓ0QÉÀA°·±¸¸BµÈÑ0Qðð œœu T¨!¡W§[¡[£]Ó3°QÓ7ð	ð
 #¤E¬%°°1±·	±	³Ó*<¸aÓ$@ðð #¤E¬%´·	±	¸"¸Q¹%Ó0@Ó*AÀ1Ó$Eðð &¤u¬U°4¸±7·;±;³=Ó-AÀ1Ó'Eðð &¤u¨V´e¸CÀ¹F¿J¹J»LÓ6IÑ-IÓ'Jðð  Ä3ÀrÄ7¤¤u¬R¯Y©Y°r«]Ó';¸QÔ!?ÐPTðð ¤ b¨!£ðð  °3°?ÄrÇ{Á{ÐSVÔGW¤%¨¨Q¤-Ð]aðð &¸¸ÌRÏ[É[ÐY\ÔM]¬¨c°1¬Ðcgðð  ðð "¤5¬¨r°!©u¯y©y«{¸RÑ/?À%Ñ/GÓ)HÈ!Ó#Lðð !(ðnà ! b¨¡e§i¡i£k¡/Ñ2°C¸1¸rÀ!¹u¿y¹y»{¹?Ñ4KØ ! b¨¡e§i¡i£k¡/Ñ2´E¸$¸q¹'¿+¹+»-Ó4HÜ7:¸2´w˜F¤R§Y¡Y¨r£]Ò2ÀHÈbðRñRð
 +ò-ö ðG =ðv 	�‰Ñ)°4ˆÔ8Ø�6�Eˆ{ÐùòQ =eùò'ùò $Eùâ0Qs   ÊY ÊY ËA Y%Î:Y*Ð	Y/Ústructr‘  u¿   ì§€í‘œ í•©ì�˜(von Mises ìˆœìœ„ + ì�‘ë ¥êµ¬ë°° ìˆœìœ„ + ë³€í˜•ì—�ë„ˆì§€ë°€ë�„ ìˆœìœ„ì�˜ í�‰ê· ) + ë©”ì‹œ ì—°ê²° ê¸°ë°˜ í�´ëŸ¬ìŠ¤í„°ë§�. ë‹¨ì�¼ ìµœëŒ€ì�‘ë ¥ìœ¼ë¡œ ìˆœìœ„ë¥¼ ì •í•˜ì§€ ì•ŠëŠ”ë‹¤.u^   ë³€í˜•ì—�ë„ˆì§€ë°€ë�„ëŠ” ì�‘ë ¥ì—�ì„œ ìœ ë�„í–ˆë‹¤(ë³€í˜•ë¥  ì¶œë ¥ì�€ ìš”ì²­í•˜ì§€ ì•ŠëŠ”ë‹¤)r   u‹   í›„ë³´ì—�ëŠ” ì•ˆì „ìœ¨Â·ìœ„í—˜ì�„ ë¶™ì�´ì§€ ì•ŠëŠ”ë‹¤. êµ­ë¶€ ìž¬í•´ì„�ìœ¼ë¡œ ìˆ˜ë ´ì�„ í™•ì�¸í•œ ë’¤ì—�ë§Œ ê°’ì�„ ë§�í•œë‹¤(CEO ì§€ì‹œ 7).)	ÚmethodÚsed_noterÆ  rl  Ú
pop_structÚpop_singularÚsingular_near_factorÚmesh_defect_gate_pctÚverdict_policy)r#   rs  rx  r   r    r%   r&   r„   rÝ   ru  rx  ræ  r!   r5  r  rN   rÜ   r  r6  rE   rF   r˜   r  r  r…  r$   rG   r¬  r­  )%r¬   rj  rÈ  r  rÀ  ÚexclÚsj_elemr   r   r	   rR  Ú
bc_spheresÚmpc_seedr`  rÂ  rÇ  rÆ  rv  Úbad_cntÚall_cntrb  Ú_pÚ_rr  r-   r}   ÚmainÚsingÚsummaryr½  r¾  r¿  rÁ  r�   rÃ  rÄ  rÅ  s%   ``` `    `   ````            @@@@@@@@r3   Údetect_candidatesrÜ  Ø  sˆ  ÿÿø€ ô 
ˆU‹€BÜ
 ¨¨2Ó
.€CÜ˜5 %¨Ó,€DÜ	�‰�EÓ	š1˜b˜q˜b˜5Ñ	!×	(Ñ	(¬¯©Ó	2€Bô �h‰h�r‹l€G¤b§h¡h¨r£l˜GØÐœs 7›|¬s°2«wÒ6Ü
�‰�	‰	�'˜2Ÿ8™8›: sÔ+Ü
�‰�	‰	�'˜2Ÿ8™8›:¤r§y¡y°'¸D±.×1HÑ1HÌÓ1OÐQRÓ'SÔTØœŸ™ G¨SÓ1Ñ1€Hô �'‰'�"�b¤Ô
$€CØ
€CÛˆÜ!$ R§V¡V¨I°rÓ%:Ó!;ˆˆBˆt‰H�R˜‘XÐØ*,¯&©&°¸bÓ*AˆŒC�—‘�y "Ó%Ó&Ò'ð ô
 �7‰7�2”r—v‘vÓ€DØÒ% 2Ò%‰ˆˆRÜ�z‰z˜$¤§	¡	§¡¨u´r·z±zÀ"ÄeÓ7LÑ/LÐST Ó UÔX]Ð^`ÓXaÑ aÓb‰ð &ä�G‰G�BœŸ™Ó€EØÐ §¡¤Ý)Ù˜5 ™?Ó+×1Ñ1°%Ó8‰ˆˆq÷F÷ Fô FñP �ˆu�hÓ€DÙˆt�ZÓ €DðvàtØ´´e¸F³mÀQÓ0GÜ˜D˜5Ÿ+™+›-Ó(¼#¸d¿h¹h»j»/Ü 4Ü /ðQñ
€Gð ��wÐÐr5   c           	      óæ
  — ddl m} t        j                  |t        «      }t        j                  |t        j
                  «      dd…dd…f   }t        j                  | t        «      } t        j                  |t        «      }t        j                  t        |«      df«      }t        j                  t        |«      t        j                  ¬«      }t        |«      s||fS | |   j                  d¬«      }	t        t        |t        |	«      «      «      }
 ||	«      j                  ||
¬	«      \  }}t        j                  |«      j                  t        |«      |
«      }t        j                  t        |«      t        ¬«      }t!        |
«      D �]ö  }t        j"                  |«      d   }t        |«      s �nÐ|||f   }| ||      }|dd…df   |dd…df   z
  |dd…d
f   |dd…df   z
  |dd…df   |dd…df   z
  }}}||   |dd…df   z
  }t        j$                  d|t        j&                  ||«      «      }t        j(                  |«      dkD  }t        j"                  ||d«      }t        j$                  d|t        j&                  ||«      «      |z  }t        j$                  d|t        j&                  ||«      «      |z  }t        j$                  d|t        j&                  ||«      «      |z  }d|z
  |z
  |z
  }d}|||k\  z  ||k\  z  ||k\  z  ||k\  z  }|j+                  «       s�Œž||   }t        j,                  ||   ||   ||   ||   gd¬«      } t        j$                  d| ||||         «      ||<   d||<   d||<   �Œù |j+                  «       �rÙt        j"                  |«      d   }||df   }| ||      }|dd…df   |dd…df   z
  |dd…d
f   |dd…df   z
  |dd…df   |dd…df   z
  }}}||   |dd…df   z
  }t        j$                  d|t        j&                  ||«      «      }t        j"                  t        j(                  |«      dkD  |d«      }t        j$                  d|t        j&                  ||«      «      |z  }t        j$                  d|t        j&                  ||«      «      |z  }t        j$                  d|t        j&                  ||«      «      |z  }t        j.                  t        j,                  d|z
  |z
  |z
  |||gd¬«      dd«      } | t        j0                  | j3                  dd¬«      d«      z  } t        j$                  d| |||      «      ||<   d
||<   ||fS )uï  ì „ì²´ í•´ì„�ì�˜ ë³€ìœ„ìž¥ì�„ ìž„ì�˜ ì¢Œí‘œì—�ì„œ ë³´ê°„í•œë‹¤ (2ë‹¨ê³„ êµ­ë¶€ ìž¬í•´ì„�ì�˜ ê²½ê³„ ê°•ì œìš©).

    â˜… ì™œ ë³´ê°„ì�¸ê°€: êµ­ë¶€ ë©”ì‹œëŠ” ì ˆì �ì�´ ìƒˆë¡œ ìƒ�ê¸°ë¯€ë¡œ ì „ì²´ í•´ì„�ì�˜ ì ˆì �ë²ˆí˜¸ë¥¼ ì“¸ ìˆ˜ ì—†ë‹¤.
      ì �ì�„ í’ˆì�€ ì‚¬ë©´ì²´ë¥¼ ì°¾ì•„ ê¼­ì§“ì � 4ê°œì�˜ ë¬´ê²Œì¤‘ì‹¬ì¢Œí‘œë¡œ ì„žëŠ”ë‹¤(C3D10 ì�˜ ëª¨ì„œë¦¬ì ˆì �ì�€
      ì“°ì§€ ì•ŠëŠ” 1ì°¨ ë³´ê°„ â€” ê²½ê³„ë©´ì—�ì„œì�˜ ì˜¤ì°¨ëŠ” ìš”ì†Œ í�¬ê¸°ì�˜ ì œê³±ì—� ë¹„ë¡€í•´ ìž‘ë‹¤).
      ì‚¬ë©´ì²´ë¥¼ ëª» ì°¾ìœ¼ë©´ ìµœê·¼ì ‘ ì ˆì � ê°’ìœ¼ë¡œ ëŒ€ì²´í•˜ê³  **ê·¸ ê°œìˆ˜ë¥¼ ë”°ë¡œ ë³´ê³ í•œë‹¤**
      (ì–´ë–¤ ë°©ì‹�ì�´ ëª‡ ê°œì—� ì“°ì˜€ëŠ”ì§€ ìˆ¨ê¸°ë©´ ê²°ê³¼ë¥¼ ê²€ì¦�í•  ìˆ˜ ì—†ë‹¤).
    ë°˜í™˜: (disp(m,3), mode(m,))  mode 1=ì‚¬ë©´ì²´ ë³´ê°„, 0=ìµœê·¼ì ‘ ì ˆì � ëŒ€ì²´r   r  Nrw   r   r   r   r8   r„  r   r9   r  r[   g�íµ ÷Æ°¾z
ik,ikj->ijFr>   T)r   Úkeepdims)r  r  r   r    r!   r&   r„   r#   Úint8rõ   rN   rÛ   r…  r"   rÖ  rL   r  rÕ  rI   rD   rH   r˜   r÷   rñ  r5  rG   )!ÚgnodesÚgelemsÚgdispr‘   rá   r  Úcornrz  rQ  r$  rˆ  r-   r,  ÚtodorQ   rý   rU   r  ró  rô  rõ  rg  r»  r9  r;  Úb1Úb2Úb3Úb0ÚtbÚinsÚjjÚWs!                                    r3   Úinterp_disprí  X  sÎ  € õ &Ü
�*‰*�Sœ%Ó
 €CÜ�:‰:�fœbŸh™hÓ'ª¨2¨A¨2¨Ñ.€DÜ�Z‰Z˜¤Ó&€FÜ�J‰J�uœeÓ$€EÜ
�(‰(”C˜“H˜a�=Ó
!€CÜ�8‰8”C˜“H¤B§G¡GÔ,€DÜˆsŒ8Ø�DˆyÐØ
�‰,×
Ñ
 Ð
Ó
#€CÜ	ŒS�”C˜“HÓÓ	€BÙ�C‹L×Ñ˜s bÐÓ)�E€A€rÜ	�‰�B‹×	Ñ	¤ C£¨"Ó	-€BÜ�7‰7”3�s“8¤4Ô(€DÜ�2�YˆÜ�h‰h�t‹n˜QÑˆÜ�3ŒxÚØˆs�Aˆv‰JˆØ�4˜‘7‰OˆØ’q˜!�t‘W˜q¢ A ™wÑ&¨ª!¨Q¨$©°!²A°q°D±'Ñ(9¸1ºQÀ¸T¹7ÀQÂqÈ!ÀtÁWÑ;L�ˆBˆØ�‰H�qš˜A˜‘wÑˆÜ�i‰i˜
 B¬¯©°°RÓ(8Ó9ˆÜ�v‰v�c‹{˜UÑ"ˆÜ�X‰X�d˜C Ó%ˆÜ�Y‰Y�z 1¤b§h¡h¨r°2Ó&6Ó7¸"Ñ<ˆÜ�Y‰Y�z 2¤r§x¡x°°2£Ó7¸"Ñ<ˆÜ�Y‰Y�z 2¤r§x¡x°°A£Ó7¸"Ñ<ˆØ�2‰X˜‰]˜RÑˆØˆØ�b˜B‘hÑ 2¨¡8Ñ,°°b±Ñ9¸RÀ2¹XÑFˆØ�7‰7Ž9Ø�S‘ˆBÜ—‘˜"˜S™' 2 c¡7¨B¨s©G°R¸±WÐ=ÀAÔFˆAÜ—i‘i ¨a°°t¸A¸c¹F±|Ñ1DÓEˆC�‰GØˆD�‰HØˆD�‹Hð- ð. ‡x�x…zô �h‰h�t‹n˜QÑˆØˆs�Aˆv‰JˆØ�4˜‘7‰OˆØ’q˜!�t‘W˜q¢ A ™wÑ&¨ª!¨Q¨$©°!²A°q°D±'Ñ(9¸1ºQÀ¸T¹7ÀQÂqÈ!ÀtÁWÑ;L�ˆBˆØ�‰H�qš˜A˜‘wÑˆÜ�i‰i˜
 B¬¯©°°RÓ(8Ó9ˆÜ�X‰X”b—f‘f˜S“k EÑ)¨3°Ó4ˆÜ�Y‰Y�z 1¤b§h¡h¨r°2Ó&6Ó7¸"Ñ<ˆÜ�Y‰Y�z 2¤r§x¡x°°2£Ó7¸"Ñ<ˆÜ�Y‰Y�z 2¤r§x¡x°°A£Ó7¸"Ñ<ˆÜ�G‰G”B—H‘H˜c B™h¨™m¨bÑ0°"°b¸"Ð=ÀAÔFÈÈSÓQˆØ”—
‘
˜1Ÿ5™5 a°$˜5Ó7¸Ó?Ñ?ˆÜ—9‘9˜\¨1¨e°D¸±G©nÓ=ˆˆC‰ØˆˆS‰	Ø�ˆ9Ðr5   c                 ó°   — t         j                  j                  | t        j                  |t        «      z
  d¬«      }t        j
                  ||k  «      d   S )Nr   r8   r   )r   rE   rF   r    r!   rÕ  )r¬   ÚptÚradiusr.  s       r3   Ú
nodes_nearrñ  ž  s@   € Ü
�	‰	�‰�uœrŸz™z¨"¬eÓ4Ñ4¸1ˆÓ=€AÜ�8‰8�A˜‘KÓ  Ñ#Ð#r5   c                 ó$  — | |z
  |z  }|dd…df   }|j                  «       |j                  «       }}t        ||z
  dz  |d   dz  «      }t        j                  |||z   k  «      d   }	t        j                  |||z
  k\  «      d   }
|	|
|dd…df   fS )uh   í�´ë¦­ ì¡°ê±´ì�´ ì—†ì�„ ë•Œì�˜ ê¸°ë³¸ê°’: ê¸´ ì¶• í•œìª½ ë�� ê³ ì • + ë°˜ëŒ€ ë��ì—� ë‘�ê»˜ë°©í–¥ í•˜ì¤‘.Nr   rZ  r   r7   )rÛ   r·   r   rÕ  )r¬   r[  rJ  r¿  ÚlocalrC  r%  r&  ÚbandÚfixÚtips              r3   Úauto_cantileverr÷  £  sš   € à�V‰^˜qÑ €EØŠa�ˆd‰€AØ�U‰U‹W�a—e‘e“gˆ€BÜ��R‘˜4Ñ  a¡¨3¡Ó/€DÜ
�(‰(�1˜˜T™	‘>Ó
" 1Ñ
%€CÜ
�(‰(�1˜˜T™	‘>Ó
" 1Ñ
%€CØ��Q’q˜!�t‘WÐÐr5   c                 ób   — 	 | xs g |   }|rt        |«      S d|dz   z  S # t         $ r d}Y Œ"w xY w)u4   ë¶€í’ˆ ì�´ë¦„. ì�´ë¦„ì�„ ì•ˆ ë°›ì•˜ìœ¼ë©´ ë²ˆí˜¸ë§Œ.Nu   %dë²ˆ ë¶€í’ˆr   )r²   rO  )r›  r  rS  s      r3   Ú_pnamerù  ±  sH   € ðØÒ˜B Ñ#ˆñ Œ3ˆr‹7Ð9˜~°°a±Ñ8Ð9øô ò ØŠðús   ‚	   .­.c                 óv  — t        | «      }t        |«      r%|j                  d¬«      |j                  d¬«      z
  nt	        j
                  d«      }t        |j                  «       «      dk  s|j                  dd«      dk  rdt        |«      z  S d|v sd	|v sd
|v sd|v ryd|v r|dz   S d|v sd|v r|S d|v ry|S )uñ   tetgen/ë©”ì‹œ ì‹¤íŒ¨ ì‚¬ìœ ë¥¼ í˜„ìž¥ì—�ì„œ ì•Œì•„ë“¤ì�„ í•œêµ­ì–´ë¡œ ë°”ê¾¼ë‹¤.
    â˜… ì‚¬ìœ ë¥¼ ë­‰ê°œë©´ 'ì–´ëŠ� ë�„ë©´ì�„ ê³ ì³�ì•¼ í•˜ëŠ”ì§€' ë¥¼ ì•Œ ìˆ˜ ì—†ë‹¤. í˜•ìƒ� ìž�ì²´ì�˜ ê²°í•¨ê³¼
      ê·œëª¨ ì´ˆê³¼ë¥¼ êµ¬ë¶„í•´ì„œ ì �ëŠ”ë‹¤.r   r8   r   ç�íµ ÷Æ°>r@   r>   u{   ë‘�ê»˜ê°€ 0ì�¸ ë©´ í˜•ìƒ�ìž…ë‹ˆë‹¤(í�¬ê¸° %.0f x %.0f x %.0f mm) â€” ì†�ì�„ ì±„ìš¸ ìˆ˜ ì—†ì–´ í•´ì„� ëŒ€ìƒ�ì�´ ì•„ë‹™ë‹ˆë‹¤zself-intersectionzvertex liesz	PLC Errorz
Two facetsuf   í˜•ìƒ�ì�´ ìŠ¤ìŠ¤ë¡œ êµ�ì°¨í•©ë‹ˆë‹¤(CAD ë³€í™˜ ê²°í•¨) â€” ê·¸ ë¶€í’ˆë§Œ ëª¨ë�¸ì�„ ê³ ì³�ì•¼ í•©ë‹ˆë‹¤u   ë‹«ížŒ ì†”ë¦¬ë“œê°€ ì•„ë‹˜u"    â€” ë©´ì�´ ë¹ ì§„ í˜•ìƒ�ìž…ë‹ˆë‹¤u   ì˜ˆì‚°u   ì ˆì �r©  uA   ë²½ë‘�ê»˜ë¥¼ ìž¬ì§€ ëª»í–ˆìŠµë‹ˆë‹¤(ë¶€í”¼ ë˜�ëŠ” í‘œë©´ì �ì�´ 0))	rO  r#   r·   rÛ   r   r„   r!   rÜ   r_   )r´  rˆ  ÚVcrÿ  Úspans        r3   Ú_why_mesh_failedrþ  º  sÎ   € ô 	ˆB‹€AÜ03°B´ˆB�F‰F˜ˆF‹N˜RŸV™V¨˜V›^Ò+¼R¿X¹XÀa»[€DÜˆT�X‰X‹ZÓ˜DÒ  C§G¡G¨L¸#Ó$>À$Ò$Fð NÜ˜“+ñð 	à˜aÑ =°AÑ#5¸ÈÑ9IÈ\Ð]^ÑM^ØwØ# qÑ(ØÐ7Ñ7Ð7Ø�1�}˜ A™ØˆØ  AÑ%ØRØ€Hr5   c                 ó¢   — | sydj                  d„ | dd D «       «      }t        | «      dkD  rdt        | «      dz
  z  nd}dt        | «      ||fz  S )u*   í™”ë©´ì—� ê·¸ëŒ€ë¡œ ë�„ìš¸ í•œ ì¤„ ìš”ì•½.rs   r'  c              3   ó>   K  — | ]  }d |d   |d   |d   fz  –— Œ y­w)u   %dë²ˆ(%s): %sÚnor   rÒ  NrÅ  ©rñ   ra   s     r3   rò   z_failed_text.<locals>.<genexpr>Ò  s+   è ø€ Ð`ÑO_È!�_¨¨$©°°6±¸A¸e¹HÐ'EÕEÑO_ùó   ‚Nr¥   u     â€¦ì™¸ %dê°œu#   í˜•ìƒ� ì²˜ë¦¬ ì‹¤íŒ¨ %dê°œ â€” %s%s)ry   r#   )Úfailed_partsr�   Úmores      r3   Ú_failed_textr  Î  s`   € áØØ�9‰9Ñ`È|Ð\^Ð]^ÑO_Ó`Ó`€DÜ;>¸|Ó;LÈqÒ;PÐ¤ LÓ 1°AÑ 5Ò6ÐVX€DØ0´C¸Ó4EÀtÈTÐ3RÑRÐRr5   c                 óÜ   — d}t        |xs g «      D ]X  \  }}t        |«      dz  }||k(  r;| |||z    }t        |«      s y|j                  d¬«      |j	                  d¬«      fc S ||z  }ŒZ y)uM   ì›�ëž˜ ë³´ë‚´ì˜¨ ì‚¼ê°�í˜• ìˆ˜í”„ì—�ì„œ pië²ˆ(0-base) ë¶€í’ˆì�˜ ê²½ê³„ìƒ�ìž�.r   r   Nr8   )r“  rN   r#   rÛ   r·   )r*   Ú
part_sizesr  Úoffrá   rV   r†  Úsegs           r3   Ú
_part_bboxr  ×  sz   € à
€CÜ˜JÒ,¨"Ö-‰ˆˆ3Ü�3‹x˜1‰}ˆØ�Š7Ø�C˜˜d™
Ð#ˆCÜ�s”8ÙØ—7‘7 �7“? C§G¡G° G£OÐ3Ò3Øˆt‰‰ð .ð r5   c           	      óR  — g }|rÞ|rÜ|rÚ|D ]Õ  }t        |||d   dz
  «      }|€Œ|\  }}	t        t        t        j                  |	|z
  «      «      dz  d«      }
|D ]…  }t        j                  |j                  d«      t        «      }|j                  dk(  sŒ<t        j                  |||
z
  k\  «      sŒXt        j                  ||	|
z   k  «      sŒt|j                  |«        ŒÕ Œ× |r*| ›ddj                  d	„ |D «       «      ›d
|d   d   ›d| ›d�S d| z  }|r|dt        |«      z   z  }|S )u•  'ê·¸ ìž�ë¦¬ì—� ì ˆì �ì�´ ì—†ë‹¤' ë¥¼ ì›�ì�¸ë³„ë¡œ ê°ˆë�¼ ë§�í•œë‹¤.
    â˜… ê°™ì�€ ì¦�ìƒ�ì—� ì›�ì�¸ì�´ ë‘˜ì�´ê³  ìš´ì „ìž�ê°€ í•  ì�¼ì�´ ë‹¤ë¥´ë‹¤.
      â‘  ì°�ì�€ ìž�ë¦¬ì�˜ ë¶€í’ˆì�´ í˜•ìƒ� ì²˜ë¦¬ì—� ì‹¤íŒ¨í•´ ì•„ì˜ˆ ë©”ì‹œì—�ì„œ ë¹ ì¡Œë‹¤ â†’ ê·¸ ë¶€í’ˆ ì�´ë¦„ì�„ ë§�í•œë‹¤
      â‘¡ ê·¸ ìž�ë¦¬ì—� í˜•ìƒ� ìž�ì²´ê°€ ì—†ë‹¤(í”„ë¦¬ì…‹ì�´ ì™¸ê³½ìƒ�ìž� ëª¨ì„œë¦¬ë¥¼ ì§šì—ˆë‹¤) â†’ ì§�ì ‘ ì°�ìœ¼ë�¼ê³  í•œë‹¤r  r   r  r   rh   r   u   ì�´ ìžˆëŠ” r'  c              3   ó6   K  — | ]  }d |d   |d   fz  –— Œ y­w)u   %dë²ˆ ë¶€í’ˆ(%s)r  r   NrÅ  r  s     r3   rò   z_no_node_msg.<locals>.<genexpr>ú  s'   è ø€ Ð"ZÑVYÐQRÐ#5¸¸4¹À!ÀFÁ)Ð8LÕ#LÑVYùó   ‚uN   ì—�ì„œ í˜•ìƒ� ì²˜ë¦¬ê°€ ì‹¤íŒ¨í•´ ê·¸ ë¶€í’ˆì�´ í•´ì„�ì—�ì„œ ë¹ ì¡ŒìŠµë‹ˆë‹¤ (r   rÒ  u   ). ë‹¤ë¥¸ ë¶€ìž¬ì—� u   ì�„ ì°�ì–´ì£¼ì„¸ìš”.u¨   ì�´ ìž�ë¦¬ì—�ëŠ” í˜•ìƒ�ì�´ ì—†ìŠµë‹ˆë‹¤ â€” %sì�„ ë¶€ìž¬ í‘œë©´ì—� ì§�ì ‘ ì°�ì–´ì£¼ì„¸ìš”. (ê°�íŒŒì�´í”„Â·ì±„ë„�Â·Lí˜•ê°•ì�€ ë°”ê¹¥ ì¹˜ìˆ˜ ëª¨ì„œë¦¬ê°€ í—ˆê³µìž…ë‹ˆë‹¤)õ     â€» )r  r·   r!   r   r    rÜ   r¿  rM   rß   ry   r  )rß  r‘   r  r  r*   rI  ra   r#  r%  r&  Úmgrg  rh   r³  s                 r3   Ú_no_node_msgr  å  s$  € ð
 €CÙ™
¡sÛˆAÜ˜A˜z¨1¨T©7°Q©;Ó7ˆBØˆzØØ‰FˆB�Ü”Uœ2Ÿ6™6 " r¡'›?Ó+¨dÑ2°CÓ8ˆBÛ�Ü—J‘J˜qŸu™u S›z¬5Ó1�Ø—6‘6˜Q“;¤2§6¡6¨!¨r°B©w©,Õ#7¼B¿F¹FÀ1ÈÈRÉÁ<Õ<PØ—J‘J˜q”MÙñ	 ð ñ ò ˜Ÿ™Ñ"ZÑVYÓ"ZÕZØ�q‘6˜%“=¢$ð(ð 	)ð\Ø^bñc€DáØ�œ<¨Ó5Ñ5Ñ5ˆØ€Kr5   rB  r>   )i€8 i Ä	 )r=   r[   ið~ çÍÌÌÌÌÌü?)r=   r   r  iÀ'	 c                 ó®   — t        t        j                  j                  t        j                  t        j                  || z
  | |z
  «      d«      «      «      S )u;   ì �ì—�ì„œ ê²½ê³„ìƒ�ìž�ê¹Œì§€ì�˜ ê±°ë¦¬(ì•ˆì—� ìžˆìœ¼ë©´ 0).r>   )r!   r   rE   rF   r5  )r$  r%  r&  s      r3   Ú
_bbox_distr  5	  s8   € ä”—‘—‘¤§
¡
¬2¯:©:°b¸3±hÀÀbÁÓ+IÈ3Ó OÓPÓQÐQr5   c                 óV-  ‡‡m‡n‡o‡p— ˆfd„}t        |j                  d«      xs d«      t        d   z  g}|xs t        gt	        |«      z  }d„ }g }	|d   }
|
D �cg c]  }t        |d   «      ‘Œ c}Šp|j                  d«      xs i }t        |j                  d«      xs d«      }t        d	|z  d
«      }g g }}| D �]"  }t        j                  |d   t         «      }d}t        |«      D ]R  \  }}t        t        j                  j                  |t        j                  |d   t         «      z
  «      «      |k  sŒP|} n |€#|j                  |«       |j                  g «       Œ¨||   j                  |d   |j                  d«      t        t        t        j                  j                  |t        j                  ||   d   t         «      z
  «      «      d«      dœ«       �Œ%  |dt	        | «      t	        |«      ||fz  «       t        |d| «      D �]Ä  \  }}t        j                  |d   t         «      }t        j                  |
D �cg c]  }t        ||d   |d   «      ‘Œ c}«      }t        j                   |«      dt"         }t%        d„ |D «       «      }t'        ˆpfd„|D «       «      }t        ||   j                  «       «      }g g }}t%        |j)                  «       d„ ¬«      D ]a  \  \  }} }!||v | |v k7  sŒt	        |!«      sŒ|j                  |!«       |j+                  t        |«      t        | «      fgt	        |!«      z  «       Œc |rt        j,                  |«      nt        j.                  d«      }"t	        |"«      r;t        t        j                  j                  |"|z
  d¬«      j1                  «       «      nd}#|j                  d«      xs i }$i i i }'}&}%|$j)                  «       D ]´  \  \  }} }!||v | |v k(  rŒt        |«      t        | «      f}(t3        |!t4        «      rUt        j                  |!j                  d«      t         «      |%|(<   |!j                  d«      |&|(<   |!j                  d«      |'|(<   ŒŽt        j                  |!t         «      |%|(<   d|&|(<   d|'|(<   Œ¶ t7        |%j9                  «       «      })|)rt        j:                  |)d¬«      nd}*g g g }-},}+|D ]‚  }.|
|.   d   |
|.   d      j=                  d d!«      }/|+j                  |/«       |,j                  t        |/j>                  «      «       |-j                  |
|.   d"   xs tA        |
|.   d   «      «       Œ„ t        j,                  |+«      }0|0j1                  d¬«      d
z
  }1|0j                  d¬«      d
z   }2|j                  d#«      xs g D �3cg c]j  }3t        jB                  t        j                  |3d$   t         «      |1k\  «      r5t        jB                  t        j                  |3d$   t         «      |2k  «      r|3‘Œl }4}3|dz   |d   |d   t	        |«      t        |d«      t        t	        |"«      «      |#�t        |#d«      ndt	        |4«      t	        |)«      t	        ||   «      ||   t        |d«      |*�#|*D �5cg c]  }5t        t        |5«      d«      ‘Œ c}5ndg d%œ}6t	        |"«      sd&|6d'<   d(|6d)<   |	j                  |6«       �ŒÝ|j                  d*«      xs g D �7cg c]j  }7t        jB                  t        j                  |7d$   t         «      |1k\  «      r5t        jB                  t        j                  |7d$   t         «      |2k  «      r|7‘Œl }8}7t	        |8«      |6d+<   t5        |«      }9|9jE                  d#d«       |9jE                  d*d«       t        |j                  d,«      xs d-«      }:t        |:d	t        |j                  d«      xs d«      z  z   d.«      };t        |;d«      |6d/<   t7        |dd «      }d }<	 |<dz  }<|<t	        |«      k\  s	|<tF        k\  r�
nl||<   }=tH        d1z  }>tK        jJ                  «       }?	 tM        |0j=                  d «      jO                  «       f|,|-|4xs d|8xs d|>d2d0d0|D �.cg c]  }.t        |
|.   d   «      ‘Œ c}.|d3   |d4   |d5   |"|tP        |=|j                  d«      xs g D �5cg c]  }5t        |5«      ‘Œ c}5d6œd7œ
|9¤Ž}@@d<   Šm|@d=   j                  d>«      xs d}Bt        j                  j                  ‰md3   |z
  d¬«      }C|C|;k  ‰md?   dk(  z  }Dt'        d@„ |j                  d«      xs g D «       «      }E|Erxt        j.                  t	        ‰md3   «      tX        ¬A«      }F‰md   xs g D ]0  }Gt        |Gd   «      Ev sŒd0Ft        GdB   «      t        |GdC   «       Œ2 Fj[                  «       rDFz  }Di dD|<dz   “dEt        |=d«      “dF@d=   j                  dF«      “dG|@d=   j                  dG«      “d3|@d=   d3   “d4|@d=   dH   “d|@d=   d   “dIB“dJ|@d=   j                  dK«      “dL|@d=   j                  dM«      xs i j                  dL«      “dN@dO   dP   “dQ|@dO   dR   “dSDj[                  «       r)t        t        ‰mdT   D   j                  «       «      d«      nd“dUt        Dj;                  «       «      “dVt%        t'        ˆmfdW„|j                  d«      xs g D «       «      «      “dX@d=   d   “dY|@d=   j                  dG«      xs g D �5cg c]:  }5t        |5d   «      t'        dZ„ |j                  d«      xs g D «       «      v r|5d[   ‘Œ< c}5xs d“@j                  d\«      |@j                  d]«      xs i j                  d^«      @j                  d]«      xs i j                  d_«      @j                  d]«      xs i j                  d`«      @j                  d]«      xs i j                  da«      @j                  db«      |@j                  dc«      |@j                  dd«      t        tK        jJ                  «       |?z
  d«      |@de   dfœ
¥}H|Hdb   rÐ|*�Ît        j                  Hdb   t         «      }It        t        j                  j                  |*«      «      }Jt        |Jd«      |Hdg<   t        t        t        j                  j                  |I«      «      d«      |Hdh<   |JdikD  r;t        t        t        j                  j                  I|*z
  «      «      Jz  djz  d«      ndHdk<   Hj                  dl«      xs i }K|K�ro|%�rlg g }M}Lt%        |%j)                  «       «      D �]V  \  }N}OKj                  dm|Nz  «      xs Kj                  dmNd   |Nd   fz  «      }P|P€KLj                  dmNz  t        t        t        j                  j                  O«      «      d«      dddndoœ«       Œ†t        j                  Pt         «      }P|&j                  N«      }QHj                  dp«      xs i j                  dmNz  «      }R|R€/Hj                  dp«      xs i j                  dmNd   |Nd   fz  «      }RQduxr Rduxr t        Q«      t        R«      k7  }S|SrP }Pt        t        j                  j                  O«      «      }Tt        dq„ |%j9                  «       D «       «      }U|Tt        didr|Uz  «      kD  r1t        t        j                  j                  POz
  «      «      Tz  djz  nd}VLj                  dmNz  t        Td«      t        t        t        j                  j                  P«      «      d«      |V�t        Vd«      nd|'j                  N«      QRtY        S«      |Q�R�dndsdtœ	«       V€�ŒFMj                  V«       �ŒY t'        du„ |%D «       «      t'        dv„ |%D «       «      z  }Wt%        Kj)                  «       «      D ]�  \  }X}Y|XWv rŒLj                  Xdt        t        t        j                  j                  t        j                  Yt         «      «      «      d«      dddHj                  dp«      xs i j                  X«      d2dwdtœ	«       Œ‘ LHdx<   t        t;        dy„ |LD «       «      «      |Hdz<   t        j                  |LD �5cg c]  }5|5d{   €Œ	|5d|   ‘Œ c}5«      }Zt        j                  LD �5cg c]  }5|5d{   €Œ	|5d{   ‘Œ c}5«      }[t	        |[«      rŸt        t        Z[z  j;                  «       t        |Zj;                  «       d}«      z  «      d«      Hd~<   t        t        |[j                  «       «      d«      |Hd<   t        t	        |[«      «      |Hd€<   t        t;        d�„ LD «       «      «      |Hd‚<   |6d8   j                  H«        |dƒ|dz   |<dz   d„j]                  |Hd3   «      B|HdN   |HdS   |Hd…   fz  «        |d†|=|Hj                  dF«      |Hj                  d~«      |Hj                  d«      fz  «       |<dz   tF        k  r@ |H|«      \  }\}]|\r"|j                  \«        |d‡|\|\dˆz  fz  «       n]|6d‰<    |dŠ|]z  «       ~@‹m�
ŒŠ|6d8   D ]2  }^d‹|^vsŒt        ^j                  d3«      xs d«      tH        kD  sŒ.d0^dŒ<   Œ4 |6d8   D �5cg c]  }5d‹|5vr|5j                  dŒ«      s|5‘Œ }_}5|_D �5cg c]  }5|5j                  dV«      rŒ|5‘Œ }`}5t	        _«      dk  rdd&|6d'<   d�t	        _«      z  |6j                  d‰«      rdŽ|6d‰   z   nd�z   t[        d�„ |6d8   D «       «      rd‘t;        d’„ |6d8   D «       «      z  nd�z   |6d)<   �n(`r8d&|6d'<   d“d”j_                  d•„ |j                  d«      xs g D «       «      z  |6d)<   �nî_d–   |_d    cŠnŠoˆnˆofd—„}a |adN«       |adS«       |ad\«      }d}c}b|c|dfD �5cg c]  }5|5€Œ|5‘Œ	 }e}5|ert        e«      nd}ft1        ‰nj                  dY«      xs g D �5cg c]  }5|5sŒt        |5«      ‘Œ c}5xs dg«      xs d}gt1        ‰oj                  dY«      xs g D �5cg c]  }5|5sŒt        |5«      ‘Œ c}5xs dg«      xs d}hgrhrt        ghz  d«      nd|6d˜<   ghg|6d™<   t	        _«      |6dš<   b�t        bd«      ndd›c�t        cd«      ndd�t        dd«      ndf�t        fd«      nddœœ|6d�<   ‰oj                  dS«      xs d‰nj                  dS«      xs dz
  }ic€d&|6d'<   dž|6d)<   nxf�%ft`        k  r|d   dŸk(  rd nd¡|6d'<   d¢t`        z  |6d)<   nQc�8idkD  r3ctb        kD  r*d£|6d'<   g}jh}k|jrkrkdkD  rd¤jk|j|kz  fz  nd¥}ld¦|lcfz  |6d)<   nd§|6d'<   d¨fxs dt`        fz  |6d)<   |	j                  |6«       �ŒÇ |	S c c}w c c}w c c}3w c c}5w c c}7w c c}.w c c}5w # tR        $ r|}A|6d8   j                  |<dz   t        |=d«      tU        A«      jV                  ›d9|A›�t        tK        jJ                  «       |?z
  d«      d:œ«        |d;|dz   |<dz   |Afz  «       Y d}A~A�Œ`d}A~Aww xY wc c}5w c c}5w c c}5w c c}5w c c}5w c c}5w c c}5w c c}5w )©u[  2Â·3ë‹¨ê³„ â€” ìƒ�ìœ„ í›„ë³´ë§ˆë‹¤ êµ­ë¶€ ì˜�ì—­ì�„ ìž˜ë�¼ 2ë‹¨ê³„ ë©”ì‹œë¡œ ë‹¤ì‹œ í’€ê³  ìˆ˜ë ´ì�„ íŒ�ì •í•œë‹¤.

    ì™œ 'ë¶€í’ˆ ë‹¨ìœ„' ë¡œ ìž�ë¥´ëŠ”ê°€: ë¶€í’ˆ ê°€ìš´ë�°ë¥¼ ìž˜ë�¼ ê·¸ ë‹¨ë©´ì—� ë³€ìœ„ë¥¼ ê°•ì œí•˜ë©´ ìž˜ë¦°
    ë©´ ì „ì²´ê°€ êµ¬ì†�ì²˜ëŸ¼ êµ³ì–´ ê·¸ ê·¼ì²˜ ì�‘ë ¥ì�´ ê°€ì§œê°€ ë�œë‹¤. ë¶€í’ˆ ê²½ê³„(=ìš©ì ‘ ì ‘í•©ë¶€)ì—�ì„œ
    ìž�ë¥´ë©´ ì˜�ì—­ ë°– êµ¬ì¡°ê°€ **ì›�ëž˜ ì—°ê²°ë�¼ ìžˆë�˜ ê·¸ ìž�ë¦¬(ìš©ì ‘ ì”¨ì•—ì �)** ë¡œë§Œ íž˜ì�„
    ì£¼ê³ ë°›ìœ¼ë¯€ë¡œ, ê·¸ ì”¨ì•—ì �ì—�ë§Œ ì „ì²´ í•´ì„�ì�˜ ë³€ìœ„ë¥¼ ê°•ì œí•˜ë©´ ë�œë‹¤. ì˜�ì—­ ì•ˆì�˜ ìž�ìœ 
    í‘œë©´ì�€ ê·¸ëŒ€ë¡œ ìž�ìœ ë‹¤.
    c                 ó   •— ‰r	 ‰| «       y y rï   rÅ  )rÊ   r»  s    €r3   Ú_logzlocal_refine.<locals>._logC	  s   ø€ ÙÙ��Gð r5   Úh_globalr­  r   c                 óà  ‡
— | j                  d«      xs g D �cg c]  }|sŒt        |«      ‘Œ }}|syt        |«      }t        d„ |j                  d«      xs g D «       «      Š
t	        ˆ
fd„| j                  d«      xs g D «       «      }t        t        | j                  d«      xs d«      |z
  d	«      }t        D ]&  }|||d
z  z  t        z  z   }|t        k  sŒ||z  dfc S  ||t        d   d
z  z  t        z  z   }	ddt        d   dj                  t        |	«      «      dj                  t        «      dj                  t        |«      «      dj                  t        |«      «      fz  fS c c}w )uî   ë‹¤ì�Œ ë‹¨ê³„ ëª©í‘œ h = ì�´ë²ˆ ë‹¨ê³„ 'í›„ë³´ ë¶€ìž¬ ì‹¤ì¸¡ h' ì�˜ 1/2.
        ë°˜í™˜ (ëª©í‘œ h ë˜�ëŠ” None, ë©ˆì¶˜ ì‚¬ìœ ).
        ì ˆì � ìƒ�í•œì�„ ë„˜ê¸¸ ê²ƒ ê°™ìœ¼ë©´ ì˜¬ë�¼ê°€ì§€ ì•Šê³  ì‚¬ìœ ë¥¼ ë‚¨ê¸´ë‹¤ â€” 100ë§Œ ì ˆì � ê¸ˆì§€.Ú	cand_h_mm)Nu>   í›„ë³´ ë¶€ìž¬ì�˜ ì‹¤ì¸¡ ìš”ì†Œí�¬ê¸°ë¥¼ ì�½ì§€ ëª»í–ˆìŠµë‹ˆë‹¤c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   r  r)  s     r3   rò   z0local_refine.<locals>._next_h.<locals>.<genexpr>U	  s   è ø€ Ð8Ñ"6˜A”�Q—Ñ"6ùró   rR  c              3   óz   •K  — | ]2  }t        |d    «      ‰v r t        |j                  d«      xs d«      –— Œ4 y­w)r  r¬   r   N)rN   rÜ   )rñ   ré   r>  s     €r3   rò   z0local_refine.<locals>._next_h.<locals>.<genexpr>V	  s;   øè ø€ ð (Ñ4N¨aÜ˜˜$™“L BÑ&ô �Q—U‘U˜7“^Ò( q×)Ñ4Nùs   ƒ8;Ú
per_part_hr¬   r   r>   r   rs   r   Nu    ìš”ì†Œë¥¼ %.1fë°° ê°€ëŠ˜ê²Œ í•˜ëŠ” ê²ƒì¡°ì°¨ ì ˆì � ì•½ %sê°œë¡œ ìƒ�í•œ %sê°œë¥¼ ë„˜ìŠµë‹ˆë‹¤(í›„ë³´ ë¶€ìž¬ %sì ˆì � / ë‘˜ë ˆ %sì ˆì �) - ì—¬ê¸°ì„œ ë©ˆì¶¥ë‹ˆë‹¤r¶  )rÜ   r!   rÛ   rÚ   rG   r·   ÚLOCAL_RATIOSÚLOCAL_REFINE_OVERSHOOTÚLOCAL_NODE_CEILr¸  rN   )ÚstrQ   ré   r—  rè   Úcnr³  ÚrrÚprojÚ_p18r>  s             @r3   Ú_next_hzlocal_refine.<locals>._next_hM	  sm  ø€ ð "$§¡¨Ó!4Ò!:¸Ð!:ÓAÑ!:˜1ºqŒe�A�hÐ!:ˆÐAÙØYÜ�"‹gˆÜÑ8 !§%¡%¨£.Ò"6°BÐ"6Ó8Ó8ˆÜó (°B·F±F¸<Ó4HÒ4NÈBÐ4Nó (ó (ˆä”5˜Ÿ™ ›Ò-¨AÓ.°Ñ3°SÓ9ˆçˆBØ˜"  a¡™.Ô+AÑAÑAˆDØ”Ó&Ø˜R‘x �|Ò#ð ð �bœL¨Ñ,°Ñ1Ñ2Ô5KÑKÑKˆØð hä% bÑ)¨6¯=©=¼¸T»Ó+CØŸ™¤Ó7ØŸ™¤s¨2£wÓ/°·±¼sÀ4»yÓ1IðKñKð Lð 	Lùò Bs
   ™E+¡E+rR  r  Ú
seed_pairsr¯  r[   ru  Nrß  r   )ru  rß  r˜  uH   í›„ë³´ ì¤‘ë³µ ì œê±°: %dê°œ â†’ %dê°œ (ë¬¸í„± %.1fmm = ìš”ì†Œ %.1fmm x3)r%  r&  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   r  )rñ   rá   s     r3   rò   zlocal_refine.<locals>.<genexpr>…	  s   è ø€ Ð,¡e ”c˜!—f¡eùró   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wrï   rÅ  )rñ   rá   Úpnos     €r3   rò   zlocal_refine.<locals>.<genexpr>†	  s   øè ø€ Ð+¡d �c˜!•f¡dùs   ƒc                 óF   — t        | d   d   «      t        | d   d   «      fS )Nr   r   r  )Úkvs    r3   rÏ  zlocal_refine.<locals>.<lambda>—	  s)   € ÄcÈ"ÈQÉ%ÐPQÉ(ÃmÔUXÐY[Ð\]ÑY^Ð_`ÑYaÓUbÑEcr5   rT  r    r   r8   Úiface_rfr1   râ  õ	   ì ‘í•©ë©´r“  r”  r   r   r   Úload_pointsrh   )rê   ru  rß  Úparts_nÚR_mmÚ	drive_ptsÚcand_to_drive_mmÚload_points_insideÚ
cut_ifacesÚmerged_nÚmergedÚmerge_tol_mmÚglobal_cut_NÚstageu   íŒ�ì • ë¶ˆê°€r©  u]   ì˜�ì—­ ë°–ê³¼ ìž‡ë�˜ ìš©ì ‘ ì”¨ì•—ì �ì�´ ì—†ìŠµë‹ˆë‹¤ - ê²½ê³„ ë³€ìœ„ë¥¼ ì¤„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤rÒ  Ú
fix_pointsÚfix_points_insiderš  r>   g      4@Úcand_sel_r_mmTçÍÌÌÌÌÌô?Fr¬   rj  rN  )r¬   rj  rN  r2  Ú	drive_srcÚdrive_rr¢  Úh_parts)
r  r›  r/  r;  rz  Úquality_bulkÚ	weld_seedÚkeep_arraysÚ	_orig_nosÚsubmodelr:  ú: )r+   rœ  ÚerrorÚsecz  cand%d stage%d FAIL: %sÚ_arraysrÖ   Úelem_size_real_mmrÑ  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   r  r)  s     r3   rò   zlocal_refine.<locals>.<genexpr>
  s   è ø€ Ð=Ñ'; ”c˜!—fÑ';ùró   r   rN  r  r+   rœ  Úh_miss_partsr  ÚelementsÚelem_mmÚ
welds_tiedr`  r�  rC  Údisp_mmÚresultÚmax_disp_mmÚ
struct_MPaÚmax_vonmises_MPaÚcand_MParÈ  Ú
cand_nodesÚcand_parts_in_meshc              3   ój   •K  — | ]*  }|t        d „ ‰d   xs g D «       «      v rt        |«      –— Œ, y­w)c              3   ó8   K  — | ]  }t        |d    «      –— Œ y­w)r  Nr  )rñ   rb  s     r3   rò   z)local_refine.<locals>.<genexpr>.<genexpr>5
  s   è ø€ ÐKÑ9I°"¤ B t¡H§Ñ9IùrÛ  rR  N)rÚ   rN   )rñ   ré   r  s     €r3   rò   zlocal_refine.<locals>.<genexpr>3
  s=   øè ø€ ð 1MÙ%9˜qØœCÑK¸¸7¹Ò9IÀrÐ9IÓKÓKÑKô ˜—FÑ%9ùs   ƒ03Úparts_meshedr  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   r  )rñ   Úys     r3   rò   zlocal_refine.<locals>.<genexpr>8
  s   è ø€ Ð5]ÑG[À´c¸!·fÑG[ùró   Úh_mmÚcompliance_NmmrF  Údriven_nodesÚinterp_in_tetÚinterp_clampedÚinterp_nearestÚrf_driven_NÚrf_driven_by_iface_NÚrf_driven_by_iface_sideÚ	solve_sec)
r_  Údrivenra  rb  rc  rd  Úrf_by_iface_NÚrf_by_iface_siderI  rg  Úcut_force_global_NÚcut_force_local_Nrû  r�  Úcut_force_err_pctri  ú%d-%du5   ì�´ ì ‘í•©ë©´ ì”¨ì•—ì�´ êµ­ë¶€ ë©”ì‹œì—� ì—†ìŠµë‹ˆë‹¤)ÚifaceÚglobal_NÚlocal_NÚerr_pctÚnoterj  c              3   ól   K  — | ],  }t        t        j                  j                  |«      «      –— Œ. y ­wrï   )r!   r   rE   rF   )rñ   r›   s     r3   rò   zlocal_refine.<locals>.<genexpr>n
  s#   è ø€ ÐQÁ.¸Q¤¤b§i¡i§n¡n°QÓ&7× 8Á.ùs   ‚24g{®Gáz„?u2   ì¢…ì†� ìª½ì�„ ëª°ë�¼ ë¶€í˜¸ë¥¼ ëª» ë§žì·„ìŠµë‹ˆë‹¤)	ro  rp  rq  rr  rß  Úside_globalÚ
side_localrp  rs  c              3   ó&   K  — | ]	  }d |z  –— Œ y­w)rn  NrÅ  ©rñ   Ú_ks     r3   rò   zlocal_refine.<locals>.<genexpr>€
  s   è ø€ Ð:±E¨b˜W r�\±Eùó   ‚c              3   ó6   K  — | ]  }d |d   |d   fz  –— Œ y­w)rn  r   r   NrÅ  rx  s     r3   rò   zlocal_refine.<locals>.<genexpr>€
  s0   è ø€ ð ARÙKPÀRð BIÈBÈqÉEÐSUÐVWÑSXÈ>ÕAYÙKPùr  uk   ì „ì²´ í•´ì„�ì—� ì�´ ì ‘í•©ë©´ íž˜ì�´ ì—†ìŠµë‹ˆë‹¤ â€” ê¸°ì¤€ê°’ ì—†ì�´ êµ­ë¶€ê°€ ê°•ì œí•œ ê²½ê³„ìž…ë‹ˆë‹¤Úiface_forcec              3   ó*   K  — | ]  }|d    €d–— Œ y­w)rp  Nr   rÅ  r)  s     r3   rò   zlocal_refine.<locals>.<genexpr>�
  s!   è ø€ ð 3M¹e¸Ø67¸
±mÐ6Kô 45¹eùó   ‚Úiface_force_no_refrr  rp  rŽ  Úiface_force_err_wpctÚiface_force_err_max_pctÚiface_force_nc              3   ó*   K  — | ]  }|d    €d–— Œ y­w)rr  Nr   rÅ  r)  s     r3   rò   zlocal_refine.<locals>.<genexpr>™
  s!   è ø€ ð 8QÁ5¸aØ;<¸Y¹<Ð;Oô 9:Á5ùr~  Úiface_force_missingzF  cand%d stage%d: nodes %s / h %.1fmm / disp %.4f / candMPa %s / %.0fsr¶  rI  uX         hëª©í‘œ %.1fmm / ëª»ë§žì¶˜ë¶€ìž¬ %s / ì ‘í•©ë©´íž˜ ê°€ì¤‘ì˜¤ì°¨ %s%% (ìµœëŒ€ %s%%)u@         ë‹¤ì�Œ ë‹¨ê³„ ëª©í‘œ %.2fmm (ì�´ë²ˆ ì‹¤ì¸¡ %.2fmm ì�˜ 1/2)r=   Úladder_stopu         ì‚¬ë‹¤ë¦¬ ë©ˆì¶¤: %srH  Úover_ceilingu4   íŒ�ì •ì—� ì“¸ ìˆ˜ ìžˆëŠ” ë‹¨ê³„ê°€ %dê°œë¿�ìž…ë‹ˆë‹¤u    â€” rs   c              3   ó>   K  — | ]  }|j                  d «      –— Œ y­w)r†  N©rÜ   r)  s     r3   rò   zlocal_refine.<locals>.<genexpr>½
  s   è ø€ Ð#PÁ<¸a A§E¡E¨.×$9Á<ùr  u1    (ì ˆì � ìƒ�í•œì�„ ë„˜ê²¨ ì œì™¸í•œ ë‹¨ê³„ %dê°œ)c              3   óD   K  — | ]  }|j                  d «      sŒd–— Œ y­w)r†  r   Nrˆ  r)  s     r3   rò   zlocal_refine.<locals>.<genexpr>¼
  s   è ø€ Ð"T©l¨¸a¿e¹eÀNÕ>S¤1©lùs   ‚ ™ u–   í›„ë³´ ë¶€ìž¬ %së²ˆì�´ êµ­ë¶€ ë©”ì‹œì—� ì—†ìŠµë‹ˆë‹¤(í˜•ìƒ� ì²˜ë¦¬ ì‹¤íŒ¨) â€” ì�´ ìž�ë¦¬ ì�‘ë ¥ì�„ ìž´ ìˆ˜ ì—†ì–´ ìˆ˜ë ´ì�„ íŒ�ì •í•˜ì§€ ì•ŠìŠµë‹ˆë‹¤r'  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   rÚ  r)  s     r3   rò   zlocal_refine.<locals>.<genexpr>Â
  s   è ø€ Ð%MÑ7K°¤c¨!§fÑ7Kùró   éþÿÿÿc                 óŒ   •— ‰j                  | «      ‰j                  | «      }}|r|€y t        ||z
  «      t        |«      z  dz  S )Nr�  )rÜ   rH   )rá   ÚvaÚvbrO   rP   s      €€r3   r]  zlocal_refine.<locals>.chÆ
  sB   ø€ ØŸ™˜q› 1§5¡5¨£8�B�Ù˜R˜ZØÜ˜2 ™7“|¤c¨"£gÑ-°Ñ5Ð5r5   Úh_ratioÚ	h_pair_mmÚstages_doneu,   ê²½ê³„ ê°•ì œê°’ â€” íŒ�ì •ì—� ì“°ì§€ ì•Šì�Œ)Údisp_pct_ref_onlyÚ	disp_noteÚcand_MPa_pctÚcompliance_pctÚ	worst_pctÚconvuF   í›„ë³´ ìž�ë¦¬ ì�‘ë ¥ì�„ ë‘� ë‹¨ê³„ ëª¨ë‘�ì—�ì„œ ìž¬ì§€ ëª»í–ˆìŠµë‹ˆë‹¤r”  u   êµ¬ì¡° í›„ë³´(ìˆ˜ë ´)u   ìˆ˜ë ´u“   í›„ë³´ìž�ë¦¬ ì�‘ë ¥Â·ì»´í”Œë�¼ì�´ì–¸ìŠ¤ ë³€í™”ìœ¨ì�´ ëª¨ë‘� %.1f%% ì�´í•˜ìž…ë‹ˆë‹¤ (ìµœëŒ€ë³€ìœ„ëŠ” ê²½ê³„ ê°•ì œê°’ì�´ë�¼ íŒ�ì •ì—� ì“°ì§€ ì•Šì�Œ)u   íŠ¹ì�´ì � í™•ì •u6   ìš”ì†Œë¥¼ %.1fmm â†’ %.1fmm (%.2fë°°) ë¡œ ì¤„ì˜€ëŠ”ë�°u!   ìš”ì†Œë¥¼ ë�” ê°€ëŠ˜ê²Œ í–ˆëŠ”ë�°ut   %s ì�´ ìž�ë¦¬ ì�‘ë ¥ì�´ %.1f%% ë�” ì»¤ì¡ŒìŠµë‹ˆë‹¤ - ê°’ì�´ ë°œì‚°í•˜ëŠ” íŠ¹ì�´ì �ìž…ë‹ˆë‹¤(ì‹¤ì œ ìœ„í—˜ì�´ ì•„ë‹˜)u   ë¯¸ìˆ˜ë ´(íŒ�ì • ìœ ë³´)u:   ë³€í™”ìœ¨ %.1f%% - %.1f%% ê²Œì�´íŠ¸ë¥¼ ëª» ë„˜ê²¼ìŠµë‹ˆë‹¤)2r!   rÜ   ÚLOCAL_H_MULTÚLOCAL_SURROUND_BUDGETr#   rN   r·   r   r    r“  rE   rF   rß   r$   r^   r  rº  ÚLOCAL_MAX_PARTSr  rÚ   r/  rç  rJ   r„   rÛ   Ú
isinstanceÚdictræ  r…  rG   r"   r¿  rO  rM   r®  ÚLOCAL_MAX_STAGESr   ÚtimeÚrun_feaÚtolistÚLOCAL_DRIVE_R_MMr²   ÚtypeÚ__name__rL   r˜   r¸  ry   ÚCONV_GATE_PCTÚDIVERGE_PCT)qÚcandsrË  Úbase_kwrÇ  Úbudgetsr»  r  Úhstepsr&  rz  rR  rb  r'  Ú_hmÚ_mrgr.   r7  rQ   r×  rI  ÚuirC  rÚ  r$  r.  Úorderrì  Úkeep_norJ  ÚdpÚdsrcÚpaÚpbr›   ÚdriveÚsepÚ_irfÚ_cutdÚ_cutsideÚ_cutkindÚ_kkÚ_cutÚgcutÚsoupÚsizesÚnamesrá   r¨   ÚPnr%  r&  rü   Úlpsré   ÚrecÚfpÚfpsÚkwr%  Úselrrk  Ú_htÚbudÚt0rT  r´  Ú_hÚ_dnÚoknÚ_cpÚ_pmÚ_ppr!  Ú_lvÚ_gmÚ_lbiÚ_rowsÚ_errsry  Ú_gvÚ_lvvÚ_gsÚ_lsÚ_flipÚ_gm2Ú_gmaxÚ_epÚ_gkeysÚ_lkÚ_lvv0Ú_wgÚ_weÚ_nhÚ_stopwhyÚ_xr2   Ú_nocandr]  ÚcdÚcsr<  rD  r—  Ú_ha0Ú_hb0ÚgrowÚ_haÚ_hbÚ_hwr  rO   rP   r*  sq        `                                                                                                       @@@@r3   Úlocal_refinerí  :	  sÄ  ü€ ôô �A—E‘E˜*Ó%Ò-¨Ó.´¸a±Ñ@ÐA€Fð Ò>Ô/Ð0´3°v³;Ñ>€GòLð0 €CØˆg‰J€EÙ#(Ó
)¡5˜RŒ3ˆr�$‰x�= 5Ñ
)€CØ—‘�|Ó$Ò*¨€Jô �—‘�jÓ!Ò) TÓ
*€CÜˆs�S‰y˜#Ó€DØ�rˆ&€DÜˆÜ�Z‰Z˜˜$™¤Ó'ˆØˆÜ˜t–_‰EˆB�Ü”R—Y‘Y—^‘^ B¬¯©°A°d±G¼UÓ)CÑ$CÓDÓEÈÓMØ�Ùð %ð ˆ;Ø�K‰K˜ŒNØ�M‰M˜"Õà�3‰K×Ñ a¨¡g°q·u±u¸V³}Ü+0´´r·y±y·~±~Ø$&¬¯©°D¸±I¸d±OÄUÓ)KÑ$Kó8Mó 2NØOPó,Rñ Sö Tð ñ 	Ð	SÜ�‹Jœ˜D›	 4¨Ð-ñ
.ô /ä˜4  ˜<×(‰ˆˆAÜ�j‰j˜˜4™¤%Ó(ˆÜ�H‰HÁEÓJÁE¸b”j  b¨¡h°°4±Õ9ÀEÑJÓKˆÜ—
‘
˜1“Ð.œÐ/ˆÜÑ,¡eÓ,Ó,ˆÜÓ+¡dÓ+Ó+ˆÜ�!�E‘(—,‘,“.Ó!ˆð �rˆDˆô " *×"2Ñ"2Ó"4Ñ:c×d‰K‰HˆR��aØ�g� 2¨ =Ó1´c¸!µfØ—	‘	˜!”Ø—‘œc "›g¤s¨2£wÐ/Ð0´3°q³6Ñ9Õ:ð eñ "$”—	‘	˜"”¬¯©°&Ó)9ˆÜCFÀuÄ:Œu”R—Y‘Y—^‘^ E¨C¡K°a�^Ó8×<Ñ<Ó>Ô?ÐSWˆð �u‰u�ZÓ Ò& BˆØ$&¨¨B˜ˆxˆØŸ:™:ž<‰K‰HˆR��aØ�g� 2¨ =Ò1ØÜ�r“7œC ›GÐ$ˆCÜ˜!œTÔ"ÜŸZ™Z¨¯©¨c«
´EÓ:��c‘
Ø !§¡ nÓ 5�˜‘Ø !§¡ f£�˜’äŸZ™Z¨¬5Ó1��c‘
Ø $�˜‘Ø +�˜’ð (ô �E—L‘L“NÓ#ˆÙ(,”—‘�t !Õ$°$ˆØ  R�UˆeˆÛˆAØ�a‘˜Ñ   q¡¨&Ñ!1Ñ2×:Ñ:¸2¸qÓAˆAØ�K‰K˜ŒNØ�L‰Lœ˜QŸV™V›Ô%Ø�L‰L˜˜q™ &Ñ)Ò@¬S°°q±¸$±Ó-@ÕAð	 ô
 �Y‰Y�t‹_ˆØ�V‰V˜ˆV‹^˜cÑ!ˆØ�V‰V˜ˆV‹^˜cÑ!ˆØ$Ÿ[™[¨Ó7Ò=¸2Ð=ó =Ñ=�bÜ—&‘&œŸ™ B s¡G¬UÓ3°rÑ9Ô:Ü—6‘6œ"Ÿ*™* R¨¡W¬eÓ4¸Ñ:Ô;ò Ð=ˆð =ð ˜A‘v Q t¡W°a¸±iÜ˜d›)¬U°1°a«[Ü¤ E£
›OØ58°_¤E¨#¨q¤MÈ$Ü%(¨£XÜ  ›YÜ˜v b™z›?Ø ™Ü$ T¨1›~à#'Ð#3ñ >BÓ B¹T¸¤¤u¨Q£x°Õ!3¸TÒ BØ9=Øñˆô �5ŒzØ,ˆC�	‰NØxˆC�‰JØ�J‰J�sŒOÙð %Ÿ[™[¨Ó6Ò<¸"Ð<ó =Ñ<�bÜ—&‘&œŸ™ B s¡G¬UÓ3°rÑ9Ô:Ü—6‘6œ"Ÿ*™* R¨¡W¬eÓ4¸Ñ:Ô;ò Ð<ˆð =ô $' s£8ˆÐÑ Ü�'‹]ˆØ
�‰ˆ}˜dÔ#Ø
�‰ˆ|˜TÔ"Ü�A—E‘E˜+Ó&Ò-¨#Ó.ˆô �3˜œu Q§U¡U¨:Ó%6Ò%>¸$Ó?Ñ?Ñ?ÀÓFˆÜ$ T¨1›~ˆˆOÑÜ�f˜R˜a�jÓ!ˆØˆØØ�!‰GˆBØ”S˜“[Ò  BÔ*:Ò$:ÙØ˜‘*ˆCô " CÑ'ˆCÜ—‘“ˆBðÜ˜BŸJ™J r›N×1Ñ1Ó3ð "ÀÐRWØ),ª°À3Â;È$Ø),¸5ÈDØ(,ñ EIÓ&IÁD¸q¤s¨5°©8°D©>Õ':ÀDÑ&IØ/0°©zÀAÀgÁJØ./°©iÀeØ37Ü1AØ25ð DEÇ5Á5ÈÃ>ÒCWÐUWÐCWÓ1YÑCW¸Q´#°aµ&ÐCWÑ1Yñ&[ñ"ð0 !ñ1"�ð> �)‘ˆAØ�6‘—‘Ð2Ó3Ò;°tˆBÜ—)‘)—.‘.  7¡¨cÑ!1¸�.Ó:ˆCð ˜$‘; 1 V¡9°¡>Ñ2ˆCô Ñ= q§u¡u¨W£~Ò';¸Ð';Ó=Ó=ˆCÙÜ—h‘hœs 1 W¡:›´dÔ;�Ø˜g™JÒ,¨"Ò,�CÜ˜3˜t™9“~¨Ò,Ø=A˜œC  D¡	›N¬3¨s°4©y«>Ñ:ð -ð —7‘7”9Ø ™)�CðØ�R˜!‘VðØ*¬E°#°q«Mðà  &¡	§¡¨nÓ =ðð ˜a ™iŸm™m¨LÓ9ðð ˜˜6™ 7Ñ+ð	ð .5°a¸±iÀ
Ñ6Kð	ð
 ˜˜6™ 7Ñ+ðð
 .7¸ðð ˜a ™iŸm™m¨GÓ4ðð ˜!˜F™)Ÿ-™-¨Ó4Ò:¸×?Ñ?ÀÓHðð ˜1˜X™; }Ñ5ðð ˜a ™kÐ*<Ñ=ðð ÀCÇGÁGÄIœU¤5¨¨4©°©×)9Ñ)9Ó);Ó#<¸aÔ@ÐSWðð œc #§'¡'£)›nðð %¤f¬Só 1MØ%&§U¡U¨7£^Ò%9°rÐ%9ó1Mó .Mó 'Nðð   &¡	¨'Ñ 2ðð  °1°V±9·=±=ÀÓ3NÒ3TÐRTÐ3Tó _Ñ3T¨QÜ"% a¨¡g£,´#Ñ5]ÀqÇuÁuÈWÃ~ÒG[ÐY[ÐG[Ó5]Ó2]Ñ"]ð  ! ›yÐ3Tñ _ò &à!%ð%ð& #$§%¡%Ð(8Ó"9ØŸ5™5 Ó,Ò2°×7Ñ7¸ÓGØ"#§%¡%¨
Ó"3Ò"9°r×!>Ñ!>¸Ó!OØ#$§5¡5¨Ó#4Ò#:¸×"?Ñ"?Ð@PÓ"QØ#$§5¡5¨Ó#4Ò#:¸×"?Ñ"?Ð@PÓ"QØ Ÿu™u ]Ó3Ø!"§¡Ð'=Ó!>Ø$%§E¡EÐ*CÓ$DÜœTŸY™Y›[¨2Ñ-¨qÓ1ÀÀ+Áò7ˆBð> �-Ò  TÐ%5Ü—j‘j  MÑ!2´EÓ:�ÜœBŸI™IŸN™N¨4Ó0Ó1�Ü+0°°a«=�Ð'Ñ(Ü*/´´b·i±i·n±nÀSÓ6IÓ0JÈAÓ*N�Ð&Ñ'à.1°Dªjô ,1´´r·y±y·~±~ÀcÈDÁjÓ7QÓ1RÐUXÑ1XÐ[`Ñ1`ÐbcÔ+dØ>Bð Ð&Ñ'ð —6‘6˜/Ó*Ò0¨bˆDÚšØ! 2�u�Ü% e§k¡k£m×4‘G�B˜ØŸ8™8 G¨b¡LÓ1ÒW°T·X±X¸gÈÈAÉÐPRÐSTÑPUÈÑ>VÓ5W�DØ�|ØŸ™¨w¸©|ÌÌuÔUW×U^ÑU^×UcÑUcÐdgÓUhÓOiÐklÓImØ15À$Ø.eñ&gô hð !ÜŸ:™: d¬EÓ2�Dð #Ÿ,™, rÓ*�CØŸ6™6Ð"4Ó5Ò;¸×@Ñ@ÀÈ2ÁÓN�CØ�{Ø!Ÿv™vÐ&8Ó9Ò?¸R×DÑDÀWÐPRÐSTÑPUÐWYÐZ[ÑW\È~ÑE]Ó^˜Ø ¨˜_ò 6°¸D°ò 6Ü!$ S£¬S°«XÑ!5ð áØ $˜u˜Ü ¤§¡§¡°Ó!4Ó5�Dô  ÑQÀ%Ç,Á,Ä.ÓQÓQ�Eà"¤S¨¨t°e©|Ó%<Ò<ô !¤§¡§¡°°s±
Ó!;Ó<¸tÑCÀeÒKØBFð à—L‘L¨7°R©<Ü.3°D¸!«nÜ-2´5¼¿¹¿¹ÈÓ9MÓ3NÐPQÓ-RØ?B¸¬e°C¸¬mÐTXØ*2¯,©,°rÓ*:Ø14ÀCÜ-1°%«[Ø47°OÈÈ©4Ø0dñ"gô hð ’ØŸ™ SÖ)ðO  5ôX Ñ:±EÓ:Ó:¼Sñ ARÙKPóARó >Rñ R�ä"(¨¯©«Ö"6‘J�C˜Ø˜f‘}Ø Ø—L‘L¨3¸DÜ-2´5¼¿¹¿¹Ü&(§j¡j°¼Ó&>ó:@ó 4AØBCó.Eà-1¸4Ø15Ø13·±Ð8JÓ1KÒ1QÈr×0VÑ0VÐWZÓ0[Ø-2ð+añ"bõ cð #7ð %*��=Ñ!Ü+.¬sñ 3M¹eó 3Mó 0Mó ,N�Ð'Ñ(ô —h‘h±uÓY±u°!ÀÀ)ÁÑ@X  *£°uÑYÓZ�Ü—h‘h±eÓX±e°¸qÀ¹|Ñ?W  )£°eÑXÓY�Ü�s”8Ü16´u¸cÀC¹i¿_¹_Ó=NÜ?BÀ3Ç7Á7Ã9ÈdÓ?Sñ>Tó 8UØVWó2Y�BÐ-Ñ.ä49¼%ÀÇÁÃ	Ó:JÈAÓ4N�BÐ0Ñ1Ü*-¬c°#«h«-�B�Ñ'Ü03´Cñ 8QÁ5ó 8Qó 5Qó 1R�BÐ,Ñ-à�‰L×Ñ Ô#ÙÐYØ˜‘F˜B ™F F§M¡M°"°W±+Ó$>ÀØ�y‘M 2 j¡>°2°e±9ð>ñ>ô ?ñ ÐkØ˜Ÿ™ Ó/°·±Ð8NÓ1OØ—F‘FÐ4Ó5ð7ñ7ô 8ð �A‰vÔ(Ò(Ù '¨¨A£‘��XÙØ—M‘M #Ô&ÙÐ[Ø  s¡Ð+ñ,õ -ð *2�C˜Ñ&ÙÐ5¸Ñ@ÔAØ�1ñO ðX �g”,ˆBØ˜bÒ ¤S¨¯©°«Ò)=¸AÓ%>ÄÓ%PØ%)��>Ò"ð ð ˜Wšó A™�AØ Ñ!¨!¯%©%°Ô*?ò ˜ˆð Aá ÓD™b˜¨¯©Ð.BÕ(C’1˜bˆÐDÜˆr‹7�QŠ;Ø,ˆC�	‰NØPÔSVÐWYÓSZÑZØ=@¿W¹WÀ]Ô=S˜W s¨=Ñ'9Ò9ÐY[ñ]ô !$Ñ#PÀ3ÀwÂ<Ó#PÔ Pð QÜ"Ñ"T¨c°'ªlÓ"TÓTòUàVXñ	ZˆC�‹Jñ
 Ø,ˆC�	‰Nðdà ŸI™IÑ%M°q·u±u¸W³~Ò7KÈÐ7KÓ%MÓMñNˆC�‹Jð �b‘6˜2˜b™6ˆDˆAˆqõ6ñ ˜I›©¨:«¹Ð;KÓ8L�B�ˆBð !# B™xÓ9™x˜!¨1©=’A˜xˆDÐ9Ù $”3�t”9¨$ˆDä¨1¯5©5°Ó+=Ò+CÀÐ+CÓJÑ+C QÊœ˜a�Ð+CÑJÒQÈqÈcÓRÒZÐVZˆDÜ¨1¯5©5°Ó+=Ò+CÀÐ+CÓJÑ+C QÊœ˜a�Ð+CÑJÒQÈqÈcÓRÒZÐVZˆDÙ8<Áœe D¨4¡K°Ô3ÈDˆC�	‰NØ $ d˜|ˆC�ÑÜ!$ R£ˆC�ÑØACÀ´°r¸1´ÐUYØ(VØ<>¸N¬E°"°a¬LÐPTØ>@¸n¬e°B¸¬lÐRVØ;?Ð;K¬¨t°Q¬ÐQUñ	XˆC�‰Kð
 —E‘E˜*Ó%Ò*¨¨q¯u©u°ZÓ/@Ò/EÀAÑFˆDØˆzØ!0��I‘Øe��E’
ØÐ! d¬mÒ&;Ø<=¸f¹IÈÒ<XÑ!8Ð^f��I‘ðcÜerñs��E’
à� D¨1¢H°´kÒ1AØ!3��I‘ð �Ø�á36¹3À3ÈÂ7ð PØ˜s C¨#¡IÐ.ò/à?ð ðbØehÐjlÐdmñn��E’
ð "<��I‘ØZØ!%¢¨¬MÐ :ñ;��E‘
à�
‰
�3Žðk )ðl €Jùòa *ùò8 Kùòp=ùò !Cùò=ùòP 'Jùò 2Zøäò Ø�G‘×#Ñ#¨"¨q©&ÄÀsÈAÃÜ:>¸r»(×:KÓ:KÉRÐ.PÜ,1´$·)±)³+ÀÑ2BÀAÓ,Fñ%Hô Iñ Ð0°B¸±F¸BÀ¹FÀBÐ3GÑGÔHÝûðüòT_ùòv  ZùÚXùòBAùâDùò8 :ùò KùÚJsØ   ÁAWÉAW
Ö5A/AW"ÚAW'ÜA/AW,á8AW;âAW1â--AW;ãAW6,ã,
AW;ì=?AZ
ÁC$
AZ
ÁC/AZ
ÁD
AZ
ÁDAZ
ÁK'AZÁLAZÁL"AZÁPAZÁPAZÁP<AZ!
ÁQAZ!
ÁQ=AZ&
ÁRAZ&
ÁW1
AW;ÁW;	AZ ÁXA1AY;ÁY;AZ ç     @�@Úbondr   Tr   c                 óB—  ‡‡½‡ï‡ù�‡h�‡i�‡j�‡k�‡l�‡m�‡n�‡o�‡p�‡q�‡r— t         j                  |t         t           «      }|rt        |«      n|d   }|rt        |«      n|d   }|d   }t	        j
                  | t        ¬«      j                  dd«      }t        |«      dk  rt        dt        |«      z  «      ‚|r|s|st        d	«      ‚ˆfd
„}t        j                  «       j                  dd }t        j                  j                  t        |«      } t        j                   | d¬«       t#        |«      \  }!}"}#d\  }$}%}&i }'g g g c�Šp}(�Šri })i }*d}+g },|	�s|rêg }-d}.t%        |«      D ]É  \  }/}0t'        |0«      dz  }1||.|.|1z    }2|.|1z  }.t        |2«      dk  r2|,j)                   ||/«      t+        ||/«      dt        |2«      z  dœ«       Œat-        |2«      \  }3}4t/        |3|4«      }5|5s&|,j)                   ||/«      t+        ||/«      ddœ«       Œ£|-j1                  |5D �6�7cg c]
  \  }6}7|6|7|/f‘Œ c}7}6«       ŒË t-        |«      \  }8}9n=t-        |«      \  }8}9t%        t/        |8|9«      «      D �:�6�7cg c]  \  }:\  }6}7|6|7|:f‘Œ }-}6}:}7|-st3        d«      ‚t        |
xs t4        «      };|-D �<�=�>cg c]  \  }<}=}>t7        |<|=«      ‘Œ }?}=}<}>|?D �@cg c]  }@t9        |@d   d«      ‘Œ }A}@t;        |A«      }Bt<        }Ct        |-«      t>        kD  }Di }Eg }Fg }Gg }Ht%        |-«      D ]w  \  }I\  }J}K}Lt	        j
                  |Jt        «      }JHj)                  |JjA                  d¬«      |Jj9                  d¬«      ft        |?|I   j                  d«      xs d«      f«       Œy g }Mt%        |-«      D �]  \  }I\  }J}K}LtC        |J«      \  }N}O|NsMj)                  JKLf«       Œ0tE        HI   d   tG        t        |H«      «      D �Pcg c]  }P|PIk7  sŒ	HP   ‘Œ c}P«      \  }Q}Rd}S|QrtI        JKQO«      }SS€Mj)                  JKLf«       Œ—Mj)                  Sd   |Sd   Lf«       Gj)                   ||L«      t+        ||L«      tK        t        Q«      d«      Rdœ«       |sŒí |d |L«      t+        ||L«      QRfz  «       �Œ GrJM}-|-D �<�=�>cg c]  \  }<}=}>t7        |<|=«      ‘Œ }?}=}<}>|?D �@cg c]  }@t9        |@d   d«      ‘Œ }A}@t;        |A«      }Bg }Tg }Ug g d}X}W}Vg g dddf\  }Y}Z}[}\}]t%        |-«      D �]E  \  }:\  }^}_}>t        j                  j                  | d |:z  «      }5t        j                   |5d¬«       t9        |;A|:   z  Bz  tL        «      }`DrtA        `tN        «      }`	 D�r,|xs i j                   ||>«      «      }a|ar¨|r¦tQ        ^_|5t        a«      |¬!«      }b|b€t3        d"t        a«      z  «      ‚Uj)                   ||>«      tK        t        a«      d«      tK        t        bd#   «      d«      t'        t        |bd$   «      «      tS        |bj                  d%«      «      d&œ«       n|rtU        ^_|5«      ntW        ^_|5`¬'«      }bEj                  bd(   d«      dz   |E|bd(   <   |bj                  d)«      �r.Fj)                   ||>«      «       �n|�rtY        ^_|5`C|j                  d*«      r" ||>«      t[        |j                  d*«      «      v r|j                  d+«      nd¬,«      }bTj)                   ||>«      tK        t        |bd#   «      d«      |bj                  d-«      |bj                  d.«      t'        t        |bd$   «      «      d/œ«       Ej                  |bd(   d«      dz   |E|bd(   <   |bj                  d)«      r(Fj)                   ||>«      «       nt]        ^_|5`C¬0«      }bbd$   |bd1   }e}dtc        |e«      \  }f}g|fXz   }f|g|Xz   }g|fdd…dd…f   |Xz
  }h|fdd…dd…f   |Xz
  }it	        jd                  |d|idd…df      |d|idd…df      z
  |d|idd…df      |d|idd…df      z
  «      }jt	        jf                  t        jh                  jk                  |jd¬«      dd…df   d2«      }k|j|kz  }l|d|i   jm                  d¬«      }mt	        jn                  d3|l|m|d|g|Xz
     z
  «      dk  }n|l|nxx   d4z  cc<   t	        jp                  |h«      |Xz   }o�‰pj)                  i d$|d“d1|e“d5|X“d6t        W«      xr t;        d7„ WD «       «      xs d“d8f“d9g“d:o“d;t	        jp                  |f«      “d<dt	        jp                  |f«      Xz
     “d=l“d>m“d?|Xt        |d«      z   “d@|dt	        jp                  h«         “dAbdB   d   “dC ||>«      “dDt+        ||>«      “dE|djA                  d¬«      “|dj9                  d¬«      ^_dFœ¥«       Vj)                  |d«       Wj)                  e|Xz   «       Yj)                  |bdB   d   «       Zj)                  |bd#   «       [xs bdG   }[bj                  dHd«      }]\|bdI   z  }\Xt        d«      z  }X�ŒH �‰ps.ts        jt                  | d¬J«       t3        dKtw        |,«      z   «      ‚d}pt%        W«      D ]  \  }/}qp�‰p|/   d6<   |pt        |q«      z  }pŒ t	        jx                  V«      �Šot	        jx                  W«      }rt{        |rdd…dd…f   «      }st        �‰p«      dkD  �rPt9        tA        Y«      dLz  dM«      }tt}        �‰p|t«      }(ddNl?m@}u |(D �]J  Šï�‰p‰ïdO      }v�‰p‰ïdP      }w|wd8   }f�‰o|fdd…dd…f      jm                  d¬«      }x u|vd>   «      jƒ                  |x«      \  }y}zt	        jn                  d3|wd=   |vd=   |z   «      }{‰ïdQ   tz
  ‰ïdR   |tz   }}}|t	        j„                  t	        j†                  |x||k\  |x|}k  z  d¬«      «      d   }~�‰o|vd8   dd…dd…f      }t        |«      rHt        t        jh                  jk                  vd>   dd…ddd…f   z
  d¬«      j9                  «       «      nd}€t	        j„                  {dSk  yt|€z   k  z  «      d   }�t	        jˆ                  t        x«      t        jŠ                  «      }‚t        |�«      rÈtA        dTt        vd>   «      «      }ƒ u|vd>   «      jƒ                  x�   |ƒ¬U«      \  }„}…|…j                  t        |�«      |ƒ«      }…}†|x|�   }‡t	        jˆ                  t        |�«      t        jŠ                  «      }ˆtG        |ƒ«      D ],  }‰t	        jŒ                  ˆt�        ‡†…dd…|‰f      «      «      }ˆŒ. ˆ‚�<   t	        j„                  ‚tk  «      d   }Š‰ïj                  dV«      }‹|‹�!t        ‹«      rt	        j�                  ~‹«      }~t        ~«      s�Œ¤~‰ïdW<   Š‰ïdX<   t‰ïdY<   t        |Š«      rˆ�‰ofŠ   dd…dd…f      }Œt        dZt        jh                  jk                  t	        jd                  |Œdd…df   |Œdd…df   z
  |Œdd…df   |Œdd…df   z
  «      d¬«      j;                  «       z  «      ‰ïd[<   �ŒFd‰ïd[<   �ŒM |�rÒt“        �‰pt«      \  }�}Žt[        d\„ |(D «       «      }�t[        d]„ |�j•                  «       D «       «      }�t        |�«      |Žd^<   t        |�«      |Žd_<   t        |�|�z  «      |Žd`<   t        |�|�z
  «      |Žda<   t        |�|�z
  «      |Ždb<   d}‘|(D �]Ð  ŠïtA        ‰ïdO   ‰ïdP   «      t9        ‰ïdO   ‰ïdP   «      f}I�j                  |I«      }’|’�t        ’«      sVt	        j–                  g t        j˜                  ¬«      ‰ïdc<   t	        j–                  g t        j˜                  ¬«      ‰ïdd<   ‘dz  }‘Œœ�‰p‰ïdO      �‰p‰ïdP      }”}“|“j                  d<|“d@   «      }•|”j                  d<|”d@   «      }–|“j                  d;|“d:   «      }—|”j                  d;|”d:   «      }˜t›        |•’«      \  }™}št›        |–|’«      \  }›}œt	        jp                  |—|š   «      ‰ïdc<   t	        jp                  |˜|œ   «      ‰ïdd<   t'        t        |’«      «      ‰ïde<   t'        t        |’«      t        ‰ïdc   «      z
  «      ‰ïdf<   tK        t        t9        |™j9                  «       |›j9                  «       «      «      d«      ‰ïdg<   �ŒÓ ‘Ždh<   t'        t;        di„ |(D «       «      «      |Ždj<   |Ž})�j•                  «       D ���žci c])  \  }�}žt        |ž«      r�‰p�d      dC   �‰p|�d      dC   fž“Œ+ }*}�}ž|%dkk(  rt�        �‰or«      ni }Ÿ|ŸjŸ                  dld«      }+|ŸjŸ                  dmd«       |Ÿj                  dn«      xs t        t	        jl                  Z«      «      } i dot        �‰p«      “dtK        t        t	        jl                  Y«      «      d«      “d#tK        t        t	        jl                  Z«      «      d«      “dptK        t        t	        jl                  |Y«      t	        jl                  |Z«      z  «      d«      “dqtK        t        | «      d«      “drtK        t        t	        j                   |Y«      t9        | ds«      z  «      d«      “dtŸ“dG[“dI\“dH]“dut        |8«      “dvt        |9«      “dwd“dx|rt        |«      n
t        |-«      “dyt        |,«      “dzG“d(E“FtS        D«      |Dr|st¢        ndtS        Dxr |«      |)T|r|j                  d+«      ndTD �¡cg c]  }¡|¡j                  d.«      du sŒ¡d{   ‘Œ c}¡Ud|œ	¥}'|,rtw        |,«      }&|	rOd}\  }$}%g g g g f\  �Šp}(�Šr},t¥        |#d~dd«      \  }¢}£|!|¢|#dz  z
  |"j¦                  z  z   �Šo|£}rt©        |r«      }sdddd€œ}'|rd�n|
xs t4        d‚z  }¤t        �‰o«      |¤kD  rÊts        jt                  | d¬J«       t3        dƒd„j«                  t        �‰o«      «      d„j«                  t'        |
xs t4        «      «      t        �‰o«      t        |
xs t4        «      z  |'j                  dx«      xs t        �‰p«      t        �‰p«      t        |,«      |,rd…tw        |,«      z   fz  «      ‚dfz  «      ‚�‰oj9                  d¬«      �‰ojA                  d¬«      z
  }¥|xs1 t9        ¥j9                  «       d†z  |'j                  d#d‡«      dz  dM«      }¦i �Šmi }§t[        «       �ŠldˆddtK        |¦d«      d‰œ}¨d}©d}ªd}«g }¬i }­i }®i }¯|�rt	        j
                  |dŠ   t        «      j                  dd«      }°t        |j                  d‹«      xs d«      }±|±dkD  r|°D �²cg c]  }²t­        �‰o|²±«      ‘Œ }³}²|³D �¡cg c]  }¡t        |¡«      sŒ¡‘Œ }³}¡|³r(t	        jp                  t	        j®                  ³«      «      nt	        j–                  g t&        ¬«      }´n4t›        �‰o°«      \  }µ}¶t	        j
                  |¶t        j˜                  «      }´t        ´«      �rìt±        |d$   |d1   |dŒ   �‰o´   «      \  }·}¸t%        |´«      D ]]  \  }¹}ºt'        |º«      }…d�D ]6  }»§j³                  …g «      j)                  |»t        ·¹|»dz
  f   «      f«       Œ8 �‰ljµ                  …«       Œ_ |j                  dŽ«      }¼|¼��4±dk  �r.t        ¼«      t        ´«      k(  �rt	        j–                  �‰pD �½cg c]  }½|½d5   ‘Œ	 c}½�‰pd   d?   gz   t        j˜                  ¬«      }¾t%        ´«      D ]Æ  \  }¹}ºt·        d�„ ¼|¹   D «       «      }¿®j³                  |¿g «      j)                  t'        |º«      «       t'        t	        j¸                  ¾t'        |º«      d�¬‘«      «      dz
  }Ld|Lcxk  rt        �‰p«      k  sŒˆn Œ‹¯j³                  ¿i «      }Àt'        �‰pL   dC   «      }Á|Àj                  |Ád«      dz   |À|Á<   ŒÈ t'        t        °«      «      tK        ±d«      t'        t        ´«      «      |±dk  r t'        t        °«      t        ´«      z
  «      ndt'        ¸dk(  j;                  «       «      t'        |¸dk(  j;                  «       «      t'        |¸dk(  j;                  «       «      ±dk  r(tK        t        t	        j8                  µ«      «      d«      ndtK        t        t        jh                  jk                  ·d¬«      j9                  «       «      d«      d’œ	}­n"t'        t        °«      «      tK        ±d«      dd“œ}­|s|�rt	        jp                  t	        j®                  |xs g D �Âcg c]&  }Ât­        �‰o|Âd”   |Âj                  d•«      xs ¦«      ‘Œ( c}Âxs t	        j–                  g t&        ¬«      g«      «      }Ãt[        d–„ |ÃD «       «      }Ä|xs g D ]K  }Â¬j)                  |Âd”   D �¡cg c]  }¡t        |¡«      ‘Œ c}¡t        Âj                  d•«      xs ¦«      g«       ŒM |xs g D ]K  }Å¬j)                  |Åd”   D �¡cg c]  }¡t        |¡«      ‘Œ c}¡t        Åj                  d•«      xs ¦«      g«       ŒM |xs g D �]@  }Åt­        �‰o|Åd”   |Åj                  d•«      xs ¦«      }ÆÅj                  d—«      €'©t»        t        Åj                  d˜|«      «      «      z  }©t        Æ«      s9Åj                  d—«      €'ªt»        t        Åj                  d˜|«      «      «      z  }ªŒ¤t	        j
                  Åj                  d™«      xs g dš¢t        «      }Çt        jh                  jk                  |Ç«      }È|ÈdkD  rÇÈz  nt	        j–                  g d›¢«      }ÇÅj                  d—«      �œt'        t	        j¼                  t	        jº                  Ç«      «      «      }É|Ç|É   dk\  rdnd4}Êt        Åd—   «      |Êz  }ËÉdz   }ÌÆD ]B  Šùt'        ‰ù«      }Í§j³                  |Íg «      j)                  ÌËf«       �‰ljµ                  |Í«       ŒD �ŒÀt        Åj                  d˜|«      «      t        Æ«      z  }`|ÆD ]U  Šùt'        ‰ù«      }Í|ÍÄv r«dz  }«ªt»        `«      z  }ªŒ&�‰mj                  Ít	        j¾                  d«      «      Ç`z  z   �‰m|Í<   ŒW �ŒC n¢|r!t	        j–                  g t&        ¬«      }Ãdœ¨d�<   ntÁ        �‰o|!|"|#«      \  }Ã}Î}Ç|t9        t        |Î«      d«      z  }`|ÎD ]  ŠùÇ `z  �‰mt'        ‰ù«      <   Œ dž¨d�<   t»        t        |«      «      }©t        �‰p«      dkD  rdŸt        �‰p«      z  ¨d <   t        Ã«      s§§s¥ts        jt                  | d¬J«       |rtt3        d¡t        t	        j
                  |dŠ   t        «      j                  dd«      «      t        |j                  d‹«      xs d«      t        |,«      tw        |,«      fz  «      ‚t3        tÃ        d¢||,||«      «      ‚�‰ms1§s/ts        jt                  | d¬J«       t3        tÃ        d£||,||«      «      ‚t'        t        Ã«      «      ¨d¤<   t'        t        �‰m«      «      |¨d¥<   §rdŒ¨d�<   t'        t        �‰l«      «      |¨d¦<   t[        d§„ ÃD «       «      �‰lz  �Šqt[        �‰q«      }ÏtÅ        �‰q«      }Ð|d¨k7  �r“d©„ }ÑtÇ        |(|Ñ¬ª«      }(|(D �]@  ŠïdW‰ïvrŒ	�‰p‰ïdP      }wtÉ        �‰o‰ïdc   |wd8   ‰ïdW      Ï‰ïdY   d«z  Ð«      \  }Ò}0}Ót'        �‰p‰ïdO      dC   «      }Ô|0dk(  rp�‰p‰ïdO      }Õ‰ïj                  d¬«      }Ö|Ö�Tt        Ö«      rItÉ        �‰o‰ïdd   Õd8   Ö   Ï‰ïdY   d«z  Ð«      \  }×}Ø}Ù|ØdkD  r ×ØÙ}Ó}0}Òd‰ïd­<   t'        �‰p‰ïdP      dC   «      }ÔÒD ]  }qÏjµ                  |qd   «       Œ �‰rj1                  Ò«       |0‰ïd®<   Ó‰ïd¯<   Ô‰ïd°<   t	        j–                  |ÒD �qcg c]  }qt'        |qd   «      ‘Œ c}qt        j˜                  ¬«      ‰ïd±<   �ŒC ddddddddd²œ}Ú|(D ]ç  ŠïÚd³xx   t'        ‰ïj                  de«      xs d«      z  cc<   Úd´xx   t'        ‰ïj                  d®«      xs d«      z  cc<   dW‰ïv r+t'        ‰ïj                  de«      xs d«      sÚdµxx   dz  cc<   ‰ïj                  d¯«      }Û|ÛsŒ˜Úd¶xx   Ûd·   z  cc<   |Úd¸xx   |Ûd¸   z  cc<   |Úd¹xx   |Ûd¹   z  cc<   |Údºxx   |Ûd»   z  cc<   |Úd¼xx   |Ûd¼   z  cc<   Œé t'        Úd³   |Úd´   z
  «      |Úd½<   |Ú|'d¾<   |'j                  dod«      dkD  rt;        d¿„ |(D «       «      |'dw<   t        �‰p«      dkD  �rFt	        j–                  �‰pD �½cg c]  }½|½d5   ‘Œ	 c}½�‰pd   d?   gz   t        j˜                  ¬«      �Šh�ˆh�ˆpfdÀ„�Šk�ˆk�ˆl�ˆm�ˆp�ˆq�ˆrfdÁ„}Ü |Ü«       \  }Ý}Þ}ß}à}ág g }ã}ât        jÊ                  j                  dÂ«      dÃk(  }ä|ärÝr
|r |dÄ«       Ýru|d¨k7  rpäsntÍ        �‰p�‰oßàÏ�‰rt        tÏ        «       j                  dY«      xs dM«      |Ð¬Å«	      \  }â}ã|âr. Ü«       \  }Ý}Þ}ß}à}á|r |dÆt        â«      t        Ý«      fz  «       âD �7���žcg c],  }7|7j•                  «       D ���žci c]  \  }�}ž|�d±k7  sŒ�ž“Œ c}ž}�‘Œ. c}ž}�}7|'dÇ<   ârEt'        t;        dÈ„ âD «       «      «      |'dÉ<   t'        |'j                  dw«      xs d«      |'dÉ   z   |'dw<   i �ŠjãD ]`  }å|ådÊ   |ådË   f|ådË   |ådÊ   ffD ]G  \  }¡}æåj                  dÌ«      }ç|ç€Œ¡�‰jvsç�‰j¡   d   k  sŒ,çæåj                  dÍ«      xs df�‰j¡<   ŒI Œb i }è�‰rD ]H  \  }é}ê}ët'        |é«      t'        |êd   «      fD ]&  }ì �‰k|ì«      }/|/€Œèj                  |/d«      dz   |è|/<   Œ( ŒJ g }ít%        �‰p«      D ]L  \  }/Š½tÑ        ˆ½fdÎ„�‰qD «       «      }î|îrŒèj                  |/d«      dk  sŒ4íj)                  ‰½dC   ‰½dD   f«       ŒN ír4íD �ïcg c]  }ï|ïd   ‘Œ	 c}ï¨dÏ<   dÐdÑj                  dÒ„ íD «       «      z  |¨d <   t        jÊ                  j                  dÓ«      �ræ	 g }ð|(D �]S  }ëdW|ëvrŒ	t'        �‰pëdO      dC   «      }ñt'        �‰p|ëdP      dC   «      }òt	        j
                  |ëj                  dÔ«      t        «      j                  d«      }‰|ëj                  dc«      }óðj)                  tA        |ñ|ò«      t9        |ñ|ò«      |‰dd D �¡cg c]  }¡tK        t        |¡«      d«      ‘Œ c}¡t'        ëj                  d®«      xs d«      tS        ëj                  d­«      «      t'        |ëj                  de«      xs d«      t'        ó€dn
t        ó«      «      ëj                  d°«      |ëj                  d¯«      dÕdÖœ
«       �ŒV âD ]”  }ôðj)                  tA        |ôdÊ   |ôdË   «      t9        |ôdÊ   |ôdË   «      dt'        |ôd×   «      dt'        |ôj                  dØ«      xs d«      dôj                  d°«      |ôj                  d¯«      |ôj                  dÙ«      dÚdÛœ«       Œ– tÓ        jÔ                  t'        t        �‰p«      «      �‰pD �½cg c]  }½t'        |½dC   «      ‘Œ c}½t'        |'j                  dw«      xs d«      t'        |'j                  dÉ«      xs d«      ÝD �õcg c]  }õt'        |õd   «      ‘Œ c}õðdÜœt×        t        jÊ                  dÓ   dÝdÞ¬ß«      dd¬à«       |r2 |dát        �‰p«      t        ð«      t        jÊ                  dÓ   fz  «       t        jÊ                  j                  dã«      �r�Ý�rŒ	 tÏ        «       }Ût        |Ûj                  dY«      xs d«      �‰pD �½cg c]š  }½|½dC   |½dD   |½dE   jÙ                  «       |½dä   jÙ                  «       t        |½j                  dA«      xs d«      t	        j
                  ½då   t        jÚ                  «      t	        j
                  |½dæ   t        jÜ                  «      dçœ‘Œœ c}½ÝD �õcg c]  }õt'        |õd   «      ‘Œ c}õßD �¡cg c]  }¡t'        |¡«      ‘Œ c}¡tß        â«      tß        ã«      �‰ojá                  t        jÚ                  «      i tÇ        dè„ àD «       «      tÇ        t[        �ˆkfdé„�‰qD «       «      «      tß        Ûj                  dê«      xs g «      tß        |,«      Ûj                  dë«      xs g D �ïcg c�]   }ït'        |ïdO   «      t'        |ïdP   «      t        |ïj                  dY«      xs d«      t'        ïj                  de«      xs d«      t'        ïj                  df«      xs d«      t'        ïj                  d®«      xs d«      tS        ïj                  d­«      «      t'        t        |ïj                  dc«      	 �ïj                  dc«      ng «      «      t        ïj                  d[«      xs d«      dìœ	‘�Œ c}ïÛj                  dí«      xs i j•                  «       D ���žci c]4  \  }�}žt'        |�d   «      t'        |�d   «      ft'        t        |ž«      «      “Œ6 c}ž}�i dîœ}÷�‰rD ]h  \  }é}ê}ë �‰kt'        |é«      «       �‰kt'        |êd   «      «      }ò}ñ|ñ�ò€Œ3tA        ñò«      t9        |ñ|ò«      f}ø÷dï   j                  |ød«      dz   |÷dï   |ø<   Œj t%        �‰p«      D �ù�½cg c]  \  }ù}½|½dC   t[        dð„ ÝD «       «      v rù‘Œ  }ú}ù}½t	        j–                  �‰pD �½cg c]  }½|½dE   ‘Œ	 c}½t        «      }ût	        j–                  �‰pD �½cg c]  }½|½dä   ‘Œ	 c}½t        «      }üt[        ú«      }ý|úD ]z  }ñt	        jf                  t	        jf                  ûü|ñ   z
  |û|ñ   |üz
  «      d«      j9                  d¬«      }þýt[        dñ„ t	        j„                  |þtâ        k  «      d   D «       «      z  }ýŒ| tÇ        ý«      D ]w  }ÿ�‰p|ÿ   }‡t	        j
                  |‡d8   t        jÜ                  «      t	        j
                  |‡d:   t        jÜ                  «      t'        |‡d5   «      t'        |‡d?   «      dòœ÷dó   |ÿ<   Œy t×        t        jÊ                  dã   dô«      5 }atå        jÔ                  ÷|ad¬õ«       ddd«       |r2 |döt        �‰p«      t        Ý«      t        jÊ                  dã   fz  «       Ý�r|dkD  �r	|�r|�rt[        dø„ ÝD «       «      �}i �}ãxs g D ]Ø  }å|åj                  dÌ«      }ç|ç�	çtâ        kD  rŒ åj                  dù«      xs g D �¡cg c]$  }¡|¡j                  dú«      �¡j                  dú«      ‘Œ& �}}¡�|rtA        �«      çtæ        z   k  rŒ}ådÊ   |ådË   fD ]O  �}t'        �|«      �vrŒt        ç«      tæ        z   }ý��vsý�t'        �«         k  sŒ@ý�t'        �«      <   ŒQ ŒÚ ��rté        |xs i «      �}�|jë                  �«       �|té        |xs i «      k7  rÒts        jt                  | d¬J«       |rG |dûtÇ        �«      ›düdÑj                  dý„ tÇ        �|j•                  «       «      D «       «      ›dþ�«       tí        | fi 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z
  “ŽS Ý�r|dkD  �r|�rt        Ý«      t        �‰p«      dz
  k  �ræt[        �d„ ÝD «       «      �}dg g g g f\  �}�}�}	�}
�}t%        |«      D ]”  \  }>�}t'        �|«      dz  �} ||>«      �vrk�j)                   ||>«      «       �j)                  |��|�z    «       �	j)                  t'        �«      «       �
j)                  t+        ||>«      «       ��z  �}Œ– ts        jt                  | d¬J«       ��rt        �	«      t        |«      k  rë�ˆjf�d„�}tß        |xs g «      ÝD �õcg c]!  }õt'        |õd   «      |õd    �|õd   «      dœ‘Œ# c}õz   �}tí        t	        jx                  �«      jï                  «       jÙ                  «       fi dÿ|“�d |“d|“d|“�d|“�d|“�d|“�d|“�d|	“�d|
“�d|“�d|“�d	�	“�d
|“�d�
“�d|dz
  “�d�|“�d�“�d|“�d|“dœ|“�d|“�d|“�d|“�d|“�d|“ŽS ÝrŠts        jt                  | d¬J«       dÑj                  �d„ ÝddT D «       «      �}t        |Ý«      dTkD  r��dt        Ý«      dTz
  z  z  �}t3        �›�dÞr�dnd›�d|,rd…tw        |,«      z   ›�«      ‚d›�«      ‚|$�dk(  r�d¨d <   t        j                  j                  | �d«      �}tñ        �|�‰or|%t[        �d „ ÃD «       «      �‰m||�‰r|r|nd§�¬!«       tó        jò                  «       �}tõ        jö                  tø        �d"�d#g| dd�d$�d%�¬&«      �}tó        jò                  «       �|z
  �}t        j                  j                  | �d'«      �}t        j                  jû                  �|«      r�d(�jü                  xs dvrS�jü                  xs d�d)d �jþ                  xs d�d*d z   �}ts        jt                  | d¬J«       t3        �d+�|z   «      ‚�t        �t        �‰o«      «      \  �}�}�}�}�t        �|«      �}t        jh                  jk                  �|d¬«      �}�|t	        �j                  �|«         �}�d,tS        t        �|«      «      i�}t        �|«      rž�jë                  tK        t        t	        j                   �«      «      d«      tK        t        t	        �j                  �|�d-«      «      d«      tK        t        �|j9                  «       «      d«      t'        t        �|«      «      �d.œ«       d�}�‰mxs i j•                  «       D ]S  \  �} �}!�t        t	        �j                  t	        j
                  �|!t        «      �t'        �| «         «      «      z  �}ŒU tÇ        �‰l«      D ]D  �} �t        t	        �j                  �t'        �| «         �t'        �| «         «      «      z  �}ŒF t	        j
                  tÇ        t[        �d/„ ÃD «       «      «      t&        ¬«      �}"t        �|"«      rt	        j:                  ��"   d¬«      nt	        j¾                  d«      �}#t	        �j
                  t        �‰o«      tR        ¬«      �}$t        �"«      rd�$�"<   tß        �‰m�j                  «       «      tß        �‰l«      z   D ]  }…d�$t'        |…«      <   Œ t	        j:                  ��$   d¬«      �}%�‰mr0t	        j:                  tß        �‰m�j                  «       «      d¬«      nt	        j¾                  d«      �}&t        t        jh                  jk                  �|&«      «      �}'t        t        jh                  jk                  �#«      «      �}(t	        j:                  �d¬«      �})�|'dskD  r›t        t        jh                  jk                  �)«      �'z  �d0z  «      �}*t        t        jh                  jk                  �#�&z   «      �|'z  �d0z  «      �}+t        t        jh                  jk                  �%«      �|'z  �d0z  «      �},n	dx�}*x�}+�},�(�#D �¡cg c]  }¡t        |¡«      ‘Œ c}¡�&D �¡cg c]  }¡t        |¡«      ‘Œ c}¡�+t        t        jh                  jk                  �)«      «      �*�|*duxr �*dk  t        t        jh                  jk                  �%«      «      �,t'        t        �"«      «      �d1œ
�}-t	        j¾                  t        �‰o«      tR        ¬«      �}.d«�}/¬D ]V  \  }²�}0�|0dkD  sŒd�.t        jh                  jk                  �‰ot	        j
                  ²t        «      z
  d¬«      �0�/z  k  <   ŒX t	        j¾                  t        �‰o«      tR        ¬«      �}1t        �"«      rd�1�"<   tß        �‰m�j                  «       «      tß        �‰l«      z   D ]  }…d�1t'        |…«      <   Œ ¬s�.�t        �1rt        �‰o«      «      z  �}.�.�1z  �}.t'        �|.j;                  «       «      �}2t	        j¾                  t        �‰o«      tR        ¬«      �}3�‰rxs g D ]<  \  �}4�}5}ëd�3t'        �|4«      <   tG        �d2«      D ]  }Id�3t'        �5|I   «      <   Œ Œ> t'        �3j;                  «       «      �}6�|6r"�.�t        �3rt        �‰o«      «      �|3z  z  �}.t'        �.j;                  «       «      �2z
  �}7t[        �d3„ |'j                  �d4«      xs g D «       «      �}8d�}9�|8r:�‰pD ]4  Š½t'        ‰½j                  dCd«      «      �8v sŒ"d�.‰½d5   ‰½d?    �9dz  �}9Œ6 t'        �.j;                  «       «      �2z
  �7z
  �}:t'        �|. j;                  «       «      �};�|;t        t        �‰o«      «      z  �d0z  �}<�|;t9        �d5t        �‰o«      �d6z  «      k\  �}=�|=r;t	        j„                  �.d4�«      �}>t'        t	        j¼                  �|>«      «      �}?n t'        t	        j¼                  �«      «      �}?t'        �.j;                  «       «      �;tK        �<d«      �2�7�:�6�9�/tÇ        t[        �d7„ ¬D «       «      «      tS        �=«      �d8œ�}@�|=rt	        j„                  �.d4�«      n��}At	        �j                  �|A«      ddd…   �}Bg t9        ¥j9                  «       �d9z  �d:«      c�}C�Šn�|BD ]T  Šùt        �C«      dk\  r nC�A‰ù   dk  r n8t‡        ˆù�ˆn�ˆof�d;„�CD «       «      sŒ:�Cj)                  t'        ‰ù«      «       ŒV �Cs!t'        t	        j¼                  �«      «      g�}Ct'        �?«      �}Dt'        t	        j¼                  �«      «      �}Et'        t	        j¼                  �«      «      �}F�||z  �}Gg �}H|(�rF|d¨k7  �r@|�r=|d   �t        z  �}I|(D �])  ŠïdW‰ïvrŒ	�‰p‰ïdP      }wt        ‰ïj                  dXg «      «      rwd8   ‰ïdX      dd…dd…f   nd�}J�|J�t        �J«      sŒT�t        �‰o�J«      �}K�|Kdk  rŒk�‰ot	        jp                  �J«         jm                  d¬«      �}Lwd5   |wd?   �}N�}Mt	        j¾                  d«      �}Ot	        j¾                  d«      �}P�‰mj•                  «       D ]F  \  �}Q�}R�M�|Qcxk  r�Nk  sŒn Œ�O�Rz  �}O�Pt	        jd                  �‰o�Q   �Lz
  �|R«      z  �}PŒH t;        ˆïf�d<„|(D «       «      �}St        jh                  jk                  �O«      dsk  r�Œc|�Kz  }Õ|�|Kdz  z  �d=z  �}Tt        t        jh                  jk                  �O«      |Õz  «      �}U�|TdkD  r-t        t        jh                  jk                  �P«      �Tz  «      nd�}Vt        �t        �j                  �|Vdz  dM�Udz  z  z   «      «      �}W�Sdk(  �}X�Hj)                  �d>�‰p‰ïdO      dC   �‰p‰ïdO      dD   �‰p‰ï�d?      dC   �‰p‰ï�d?      dD   �K|fz  �LjÙ                  «       t        t        jh                  jk                  �O«      «      �|OD �¡cg c]  }¡t        |¡«      ‘Œ c}¡t        t        jh                  jk                  �P«      «      t        ‰ïj                  d[d«      xs d«      �K|�U�V�Wt        �I«      t        �|W�|Iz  �d0z  «      tS        �X«      �|Xrdn�d@�dAœ«       �Œ, d�}Y|d¨k7  r	|r�Hs�dB�}Yi �}Z|(xs g D ]¨  }ë|ëj                  d±«      �}[�|[�t        �[«      sŒ%�‰pëdO      dC   �‰p|ëdP      dC   f}It	        j:                  ��[   d¬«      |ëj                  d°«      t	        j
                  �|[t        j˜                  «      t'        t        �|[«      «      dÕ�dCœ�Z|I<   Œª tÏ        «       j                  �dD«      xs g D ]Ä  �}\�|\j                  d±«      �}[�|[�t        �[«      sŒ't'        �\dÊ   «      t'        �|\dË   «      f}I|I�Zv sId   |Id   f�Zv rŒXt	        j:                  ��[   d¬«      �\j                  d°«      t	        j
                  �|[t        j˜                  «      t'        t        �|[«      «      dÚ�dCœ�ZI<   ŒÆ 	 |'j                  dq«      xs |'j                  d#«      xs �d:�}]�t        �‰or����.|+|||�‰p¬�3�Ht        �|]«      «      \  �}^�}_�}`i �dHd“�dI|$“�dJ|$�dKk(  r�dLn�dM“d |&“�dN|,“�dOtw        |,«      “�dP|,D �¡cg c]  }¡|¡d{   |¡�dQ   |¡dÍ   dœ‘Œ c}¡tß        |xs g «      z   “�dRtß        |xs g «      “�d ||�dQ   |||�dSœ“dót'        t        �‰o«      «      t'        t        r«      «      |%�dTœ|'¥“�dU¨“�dV�‰mrVt        t        jh                  jk                  t	        j:                  tß        �‰m�j                  «       «      d¬«      «      «      nd“�dWt        ©«      “�dXt        ª«      “�dY�-“�dZ�|-�dZ   “�d[�|-�d[   “i �d\t'        ««      “�d]|#d   |#d   |#d   �d^œ“�d_�@“�d`�“�datK        t        �«      d«      “�db�^“�dc�_“�dd�`“�det        ��D   «      �‰o�|D   jÙ                  «       t        �G�|D   �d0z  «      �|�|D   dkD  rt        |��D   z  «      nd�=r�dfn�dgt        ��E   «      �‰o�|E   jÙ                  «       t        �G�|E   �d0z  «      �|�|E   dkD  rt        |��E   z  «      ndt        ��F   «      �‰o�|F   jÙ                  «       �CD �ùcg c]9  }ù�‰o|ù   jÙ                  «       t        �|ù   «      t        �G|ù   �d0z  «      �dhœ‘Œ; c}ù�diœ“dw�H“�dj�Y“�d|“�dktK        �d«      “dœ­“�dl�‰lrFt	        j:                  �tÇ        �‰l«         d¬«      D �¡cg c]  }¡tK        t        |¡«      d«      ‘Œ c}¡nd“�dm®j•                  «       D ���ž�¡ci c]Z  \  }�}ž|žrS�dn�z  t	        j:                  �tÇ        t[        ž«      «         d¬«      D �¡cg c]  }¡tK        t        |¡«      d«      ‘Œ c}¡“Œ\ c}¡}ž}�“�do¯j•                  «       D ���žci c]5  \  }�}ž|žr.�dn�z  t'        t9        žj•                  «       �dp„ ¬ª«      d   «      “Œ7 c}ž}�“¥�dq�‰ojK                  d«      j                  d«      jÙ                  «       �G�d0z  jK                  d«      jÙ                  «       �jK                  d‡«      j                  d«      jÙ                  «       �jK                  d«      jÙ                  «       �.já                  t        �j"                  «      jÙ                  «       t	        j„                  t	        �j                  �«      �|d4«      jK                  d«      jÙ                  «       sj                  d«      já                  t&        «      jÙ                  «       �drœi¥�}b|�rj�^�rf|�sc�‰or��‰pD �½cg c]  }½|½dC   |½dD   |½dE   |½dä   |½då   |½dæ   �dsœ‘Œ  c}½|*�Zt        �]«      �dtœ}i|||||||||�duœ	�}c	 �t%        �^i�ct'        |«      |�¬v«      �}d�d�b�dx<   �|dD ]ç  �}f�|f�dy   g�|fj                  �dz«      xs g D �@cg c]  }@|@�dy   ‘Œ
 c}@z   �}g�b�db   D ]§  �ŠitÑ        �ˆif�d{„�gD «       «      sŒ�f�‰i�dx<   t	        �j&                  t	        j
                  �‰i�dy   t        «      t	        j
                  �|f�dy   t        «      �d|�¬}«      rdn'�f�dy   D �¡cg c]  }¡tK        t        |¡«      d«      ‘Œ c}¡�‰i�d~<   Œ© Œé |rT�‰or����.�‰pD �½cg c]&  }½|½dC   |½dD   |½d5   |½d?   |½dE   |½dä   |½då   |½dæ   �dœ‘Œ( c}½|*�Zt        �]«      �d€œ
�b�d�<   |r
| �b�d‚<   �|bS ts        jt                  | d¬J«       �bS c c}7}6w c c}7}6}:w c c}>}=}<w c c}@w c c}Pw c c}>}=}<w c c}@w # t^        $ r>}c|,j)                   ||>«      t+        ||>«      ta        c|?|:   ^«      dœ«       Y d}c~c�DŒÖd}c~cww xY 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 c c}qw c c}½w c c}ž}�w c c}ž}�}7w c c}ïw c c}¡w c c}½w c c}õw # t^        $ r}ö|r |dâöz  «       Y d}ö~ö�"Œñd}ö~öww xY 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 # 1 sw Y   �Œ²xY w# t^        $ r�} |r |d÷� ›�«       Y d�} �~ �Œ¡d�} �~ ww xY wc c}¡w c c}õw c c}¡w c c}¡w c c}¡w # t^        $ r;�}ag g �}_�}^�dE�dF�t        �a«      �j                   ›�dG�|a›�i�}`Y d�}a�~a�ŒÀd�}a�~aww xY wc c}¡w c c}ùw c c}¡w c c}¡w c c}¡}ž}�w c c}ž}�w c c}½w # t^        $ r7�}eg �}d�t        �e«      �j                   ›�dG�|e›��b�dw<   Y d�}e�~e�Œ}d�}e�~eww xY wc c}@w c c}¡w c c}½w (ƒ  uM  positions: í�‰íƒ„í•œ [x,y,z,...] ì‚¼ê°�í˜• ìˆ˜í”„.
    fix_points  : [{'p':[x,y,z], 'r':ë°˜ê²½}, ...]  (ì—†ìœ¼ë©´ ìž�ë�™ ì™¸íŒ”ë³´)
    load_points : [{'p':[x,y,z], 'r':ë°˜ê²½, 'dir':[x,y,z], 'N':í�¬ê¸°}, ...]
    part_names  : part_sizes ì™€ ê°™ì�€ ìˆœì„œì�˜ ë¶€í’ˆ ì�´ë¦„. ì‹¤íŒ¨í•œ ë¶€í’ˆì�„ ì�´ë¦„ìœ¼ë¡œ ì•Œë ¤ì£¼ê¸° ìœ„í•¨.
    r   r   r	   r   r   r   rw   u$   ì •ì �ì�´ ë„ˆë¬´ ì �ìŠµë‹ˆë‹¤(%dê°œ)u>   ê³ ì •ì �ë§Œ ì°�í˜”ìŠµë‹ˆë‹¤ â€” í•˜ì¤‘ì �ë�„ ì°�ì–´ì£¼ì„¸ìš”.c                 óX   •— 	 ‰rt        ‰|    «      S | dz   S # t        $ r | dz   cY S w xY wrÄ  )rN   r²   )rá   rE  s    €r3   Ú_onumzrun_fea.<locals>._onum  s:   ø€ ð	Ù(1”3�y ‘|Ó$Ð<°q¸1±uÐ<øÜò 	Ø�q‘5ŠLð	ús   ƒ “ ˜)¨)Nr±  Tr7  )Ú	tet_c3d10ÚC3D10Nr   u-   ì •ì �ì�´ %dê°œë¿� â€” í˜•ìƒ�ì�´ ì—†ìŠµë‹ˆë‹¤)r  r   rÒ  u8   ì‚¼ê°�í˜•ì�´ ë„ˆë¬´ ì �ì–´ ë�©ì–´ë¦¬ë¥¼ ëª» ë§Œë“­ë‹ˆë‹¤u-   ì‚¼ê°�í˜• ë�©ì–´ë¦¬ë¥¼ ì°¾ì§€ ëª»í–ˆìŠµë‹ˆë‹¤r@   r[   r8   rB   r>   r   r   )r  r   Út_mmÚbasisuD     ë‘�ê»˜ 0 ë©´ í˜•ìƒ� %dë²ˆ(%s) â†’ ë‘�ê»˜ ì¶”ì • %.2fmm ì••ì¶œ (%s)Frs   zc%d)r»  u*   ë°€ë�„ ìƒ�í–¥ ë©”ì‹œ ì‹¤íŒ¨(ìš”êµ¬ %.2fmm)rl  r¬   rµ  )r  Úh_req_mmr^  r¬   Úcapped)rz  rq  rr  rA  r¢  r²  rœ  r�  )r  r^  rœ  r�  r¬   )rz  rž  rj  r  r9   r·  rN  Úe0c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   rð   r)  s     r3   rò   zrun_fea.<locals>.<genexpr>Ð  s   è ø€ ÐLcÑ]bÐXYÌSÐQRÏVÑ]bùró   rM  r
  rU  Úsurf_ids_allÚsurf_pts_allÚfaces_nÚ	faces_ctrr  rL  Úwallrk  rž  r�  r%  )r&  r“  r”  rn  ro  rp  )Úignore_errorsu6   í˜•ìƒ� ì²˜ë¦¬ì—� ì„±ê³µí•œ ë¶€í’ˆì�´ ì—†ìŠµë‹ˆë‹¤ â€” r¶   r¯  r  rÆ  rW  rY  rZ  gffffffæ¿rá  r„  rX  Úface_idxr	  Úwtolr7   Ú
iface_areac              3   ód   K  — | ](  }t        |d    |d   «      t        |d    |d   «      f–— Œ* y­w)rÆ  rW  N)rÛ   r·   ©rñ   rZ   s     r3   rò   zrun_fea.<locals>.<genexpr>S  s;   è ø€ ð 1Ù&/ ô " ! C¡&¨!¨J©-Ó8¼#¸aÀ¹fÀaÈ
ÁmÓ:TÔUÙ&/ùs   ‚.0c              3   ó>   K  — | ]  \  }}t        |«      sŒ|–— Œ y ­wrï   rð   ©rñ   rá   r›   s      r3   rò   zrun_fea.<locals>.<genexpr>U  s   è ø€ ÐD©>¡4 1 a¼SÀ½VœQ©>ùs   ‚–Ú
pairs_meshÚ	pairs_cadÚ
pairs_bothÚpairs_cad_onlyÚpairs_mesh_onlyrV  r^  Úseed_nÚseed_collideÚseed_snap_max_mmÚwelds_without_seedc              3   ó@   K  — | ]  }|j                  d d«      –— Œ y­w)r  r   Nrˆ  r  s     r3   rò   zrun_fea.<locals>.<genexpr>w  s   è ø€ Ð.[ÑQZÈA¨q¯u©u°^ÀQ×/GÑQZùó   ‚Ú
collisionsrô  rd  re  rc  rR  Úthrough_wall_meanmeanrK  rm  rŽ  Úquality_metricsÚwelded_vertsr£  r`  Úparts_inÚparts_failedÚ	sheet_estr  )	Ú
hull_partsÚbulkÚcoarse_noterB  rC  r  rœ  rM  Ú
fine_parts)Ú
obb_forcedÚC3D8Ié   r=   )rR  r`  Ú
forced_obbg    àÈ0Ar>  u#  ì„ íƒ�í•œ ë¶€í’ˆì�´ ë„ˆë¬´ ë§ŽìŠµë‹ˆë‹¤ â€” ì ˆì � %sê°œë¡œ í•œ ë²ˆì—� í’€ ìˆ˜ ìžˆëŠ” ì–‘(%sê°œ)ì�˜ %.1fë°°ìž…ë‹ˆë‹¤. ë¶€í’ˆ %dê°œ ì¤‘ %dê°œëŠ” í˜•ìƒ� ì²˜ë¦¬ì—� ì„±ê³µí–ˆê³  %dê°œëŠ” ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. ë¶€ìž¬ë¥¼ 10~30ê°œì”© ë‚˜ëˆ ì„œ í•´ì„�í•˜ì„¸ìš”(ì™¼ìª½ íˆ´ë°”ì—�ì„œ ì�¼ë¶€ë§Œ ì„ íƒ�).%sr¶  r  r  rß  Úclick)rQ  r1  Ú
load_nodesrš  r2  r@  rN  r  r?  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   r  r)  s     r3   rò   zrun_fea.<locals>.<genexpr>ú  s   è ø€ Ð ;±¨A¤ Q§±ùró   Úright©r1  )	r2  Ú
drive_r_mmr`  Ú
driven_dupra  rb  rc  Úsnap_max_mmÚdriven_disp_max_mm)r2  r'  r`  rh   rT  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   r  r)  s     r3   rò   zrun_fea.<locals>.<genexpr>  s   è ø€ Ð*¡c ”c˜!—f¡cùró   ÚmmÚNÚdir)r   r   r   )r>   r>   r·  rF  rQ  r÷  uÂ   ë¶€ìž¬ %dê°œì�¸ë�° ê³ ì •ì �ì�„ ì•ˆ ì°�ì—ˆìŠµë‹ˆë‹¤. ì „ì²´ í•œìª½ ë��ë§Œ ìž�ë�™ ê³ ì •ë�˜ì–´ ë©€ë¦¬ ìžˆëŠ” ë¶€ìž¬ê°€ ë§¤ë‹¬ë¦° ìƒ�íƒœë¡œ ê³„ì‚°ë�©ë‹ˆë‹¤ â€” ì‹¤ì œ ì·¨ë¶€ì �ì�„ ì°�ì–´ì£¼ì„¸ìš”.ÚwarnuŸ   êµ­ë¶€ ì˜�ì—­ ê²½ê³„ì—� ì ˆì �ì�´ ì—†ìŠµë‹ˆë‹¤ â€” ê²½ê³„ ì”¨ì•—ì � %dê°œ ì£¼ë³€ %.0fmm ì•ˆì—� ì ˆì �ì�´ í•˜ë‚˜ë�„ ì—†ìŠµë‹ˆë‹¤(í˜•ìƒ� ì²˜ë¦¬ ì‹¤íŒ¨ %dê°œ). %su	   ê³ ì •ì �u	   í•˜ì¤‘ì �r1  r#  Úprescribed_nodesc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   r  r)  s     r3   rò   zrun_fea.<locals>.<genexpr>x  s   è ø€ Ð&¡#˜Q”#�a—&¡#ùró   Únonec           
      ó¨  — t        j                  | j                  d«      t        «      j	                  d«      }| j                  d«      }t        t        |d   «      d«      t        t        |d   «      d«      t        t        |d   «      d«      t        t        | j                  d«      xs d	«      d«      t        |€d«      fS t        |«      «      fS )
Nr[  r   rV  r   r   r   r   r\  r>   )r   r    rÜ   r!   r"   r$   rN   r#   )rZ   rQ   Údns      r3   Ú_weld_order_keyz run_fea.<locals>._weld_order_key‰  s°   € Ü—
‘
˜1Ÿ5™5 ›?¬EÓ2×:Ñ:¸2Ó>ˆAØ—‘�{Ó#ˆBÜœ%  !¡›+ qÓ)¬5´°q¸±t³¸aÓ+@Ä%ÌÈaÐPQÉdËÐUVÓBWÜœ% §¡ kÓ 2Ò 9°cÓ:¸AÓ>Ü˜R˜Z˜Ó5ð7ð 7ä-0°«WÓ5ð7ð 7r5   rT  r®  r_  Úflipped_roleÚ
tied_nodesrà  râ  rã  )rV  ÚtiedÚcompeter	  r  Úspcr
  Úno_seedrV  r8  r;  r9  r  r	  r  r:  r  r
  ÚlostÚ	weld_lossc              3   ó@   K  — | ]  }|j                  d d«      –— Œ y­w)r7  r   Nrˆ  r  s     r3   rò   zrun_fea.<locals>.<genexpr>È  s   è ø€ Ð#NÁI¸q A§E¡E¨,¸×$:ÁIùr  c                 ó~   •— t        t        j                  ‰| d¬«      «      dz
  }d|cxk  rt        ‰«      k  r|S  d S )Nr%  r&  r   r   )rN   r   Úsearchsortedr#   )rÊ  rá   Ú_bndrR  s     €€r3   Ú_part_ofzrun_fea.<locals>._part_ofÒ  s=   ø€ Ü”B—O‘O D¨#°GÔ<Ó=ÀÑAˆAØ˜QÔ+¤ U£Ò+�1Ð5Ð+°Ð5r5   c                  ó  •‡— t        t        t        ‰«      «      «      Šˆfd„} ‰D ]K  \  }}} ‰t        |«      «       ‰t        |d   «      «      }}|�|€Œ1 | |«       | |«      }}||k7  sŒG|‰|<   ŒM t	        «       }‰D ]-  }	 ‰t        |	«      «      }
|
€Œ|j                   | |
«      «       Œ/ t	        «       }t        ‰j                  «       «      t        ‰«      z   D ]-  } ‰t        |«      «      }
|
€Œ|j                   | |
«      «       Œ/ g d}}t        ‰«      D ]2  \  }
} | |
«      }||vsŒ|j                  |d   |d   f«       ||v sŒ1d}Œ4 ||t        t        ‰«      «      D �cg c]
  } | |«      ‘Œ c}||fS c c}w )Nc                 óJ   •— ‰|    | k7  r‰‰|       ‰| <   ‰|    } ‰|    | k7  rŒ| S rï   rÅ  )ré   Úpofs    €r3   rÓ  z$run_fea.<locals>._conn.<locals>.findâ  s<   ø€ Ø˜!‘f ’kØ   Q¡™[�C˜‘FØ˜A™�Að ˜!‘f “kð �r5   r   Frž  r�  T)	ræ  r  r#   rN   rÚ   rÝ   Úkeysr“  rß   )rÓ  r6  Úfn6Ú_wrO   rP   ÚraÚrbÚfixgra   r  ÚloadgrÊ  rì  Ú
flo_loadedrb  rË  rÆ  rE  rB  Údisp_node_setr2  rR  Úspc_setré  s                     @€€€€€€r3   Ú_connzrun_fea.<locals>._connß  sƒ  ù€ Ü”uœS ›ZÓ(Ó)ˆCôó ",‘��S˜"Ù¤ B£Ó(©(´3°s¸1±v³;Ó*?�1�Ø�9  	ØÙ˜a›¡$ q£'�B�Ø˜“8Ø �C˜’Gð ",ô “5ˆDÛ�Ùœc !›fÓ%�Ø‘>Ø—H‘H™T "›XÕ&ð ô “EˆEÜ˜EŸJ™J›LÓ)¬D°Ó,?Ô?�Ùœc #›hÓ'�Ø‘>Ø—I‘I™d 2›hÕ'ð @ð ! %�ˆCÜ# EÖ*‘��BÙ˜“H�Ø˜D’=Ø—J‘J  9¡¨r°+©Ð?Ô@Ø˜E’zØ%)™
ð +ð ˜
´e¼CÀ»JÔ6GÓ$HÑ6G°¡T¨!¥WÐ6GÑ$HÈ$ÐPUÐUÐUùÒ$Hs   Å,FÚDZW_FEA_NOBRIDGEÚ1uM     [ë‹¤ë¦¬] DZW_FEA_NOBRIDGE=1 â€” ë‹¤ë¦¬ ìž‡ê¸°ë¥¼ ê±´ë„ˆë›´ë‹¤(í†µì œì‹¤í—˜))r»  r  uB     [ë‹¤ë¦¬] %dêµ°ë�°ë¥¼ ì�´ì–´ ë–  ìžˆëŠ” ë¶€ìž¬ %dê°œê°€ ë‚¨ì•˜ë‹¤Úweld_bridgesc              3   ó&   K  — | ]	  }|d    –— Œ y­w)r-  NrÅ  )rñ   rP   s     r3   rò   zrun_fea.<locals>.<genexpr>  s   è ø€ Ð1MÁH¸q°!°Eµ(ÁHùrz  Úweld_bridge_eqsrO   rP   rÑ  rÒ  c              3   óJ   •K  — | ]  }‰d    |cxk  xr ‰d   k  nc –— Œ y­w)rN  r  NrÅ  )rñ   ra   rb  s     €r3   rò   zrun_fea.<locals>.<genexpr>1  s'   øè ø€ ÐD¹G°q˜"˜T™( aÖ2¨"¨T©(×2Ð2¹Gùs   ƒ #Ú
weak_partsu“   ë¶€ìž¬ %s ê°€ ê³ ì •ë�„ ì•ˆ ë�˜ê³  ìš©ì ‘ ì�´ì�Œë�„ ê±°ì�˜ ì—†ìŠµë‹ˆë‹¤(ì‚¬ì‹¤ìƒ� ê³µì¤‘ì—� ëœ¬ ìƒ�íƒœ). ê²°ê³¼ ë³€ìœ„Â·ì�‘ë ¥ì�„ ë¯¿ì§€ ë§ˆì„¸ìš”.r'  c              3   ó&   K  — | ]	  }d |z  –— Œ y­w©u	   %dë²ˆ(%s)NrÅ  r  s     r3   rò   zrun_fea.<locals>.<genexpr>9  s   è ø€ Ð*IÁD¸q¨;¸­?ÁDùrz  ÚDZW_FEA_PAIRDUMPr[  r.  )
rO   rP   r[  r8  rp  r  Údep_nrâ  rà  rß  r-  r�  rá  u   ë‹¤ë¦¬)rO   rP   r[  r8  rp  r  r[  râ  rà  rá  rß  )r[  Ú	parts_nosÚwelds_tied_totalÚ
bridge_eqsÚfloatingr�  rZ   úutf-8r-  )Úensure_asciiÚindentu-     [ìŒ�ë�¤í”„] ë¶€í’ˆ %dê°œ / ìŒ� %dê°œ â†’ %su     [ìŒ�ë�¤í”„] ì‹¤íŒ¨: %sÚDZW_FEA_DIAGr&  r“  r”  )r  r   r%  r&  rB   r“  r”  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   r  r)  s     r3   rò   zrun_fea.<locals>.<genexpr>‰  s   è ø€ Ð(D¹°A¬¨Q¯¹ùró   c              3   ót   •K  — | ]/  } ‰t        |«      «      �t         ‰t        |«      «      «      –— Œ1 y ­wrï   r  )rñ   ra   rB  s     €r3   rò   zrun_fea.<locals>.<genexpr>Š  s5   øè ø€ ð ,MÉ7ÀaÙ/7¼¸A»Ó/?Ð/Kô -0±¼¸Q»Ó0@×,AÉ7ùó   ƒ58Ú
_sheet_estÚ	weld_list)	rÆ  rÇ  r  r  r  r8  rp  r[  r  Ú_seeds)Úwtol_mmrR  r_  Úgrouprí  Úbridge_rejectedr¬   rÖ   rÌ  Ú	spc_partsr  Úfailedr`  r�  Útie_pairro  c              3   ó8   K  — | ]  }t        |d    «      –— Œ y­wr�  r  ©rñ   r¹   s     r3   rò   zrun_fea.<locals>.<genexpr>£  s   è ø€ Ð1NÁXÀ´#°a¸±d·)ÁXùrÛ  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   r  r)  s     r3   rò   zrun_fea.<locals>.<genexpr>ª  s   è ø€ Ð VÑ1U¨A¤ Q§Ñ1Uùró   )rM  rU  rN  r  rÖ   Úwb)ÚprotocoluH     [ì§„ë‹¨] ì—°ê²° ì§„ë‹¨ ë�¤í”„ ì €ìž¥ â€” ë¶€í’ˆ %d / ë– ìžˆì�Œ %d / %su     [ì§„ë‹¨] ë�¤í”„ ì‹¤íŒ¨: c              3   ó8   K  — | ]  }t        |d    «      –— Œ y­wr�  r  rq  s     r3   rò   zrun_fea.<locals>.<genexpr>¿  ó   è ø€ Ð6©X¨œ#˜a ™dŸ)©XùrÛ  rÝ  rÕ  u4     [ë°€ë�„ìƒ�í–¥] ë©”ì‹œê°€ ì„±ê²¨ ëª» ì�´ì�€ ë¶€ìž¬ u    â†’ ìš”ì†Œí�¬ê¸° c              3   ó0   K  — | ]  \  }}d ||fz  –— Œ y­w)u   %dë²ˆ %.2fmmNrÅ  r  s      r3   rò   zrun_fea.<locals>.<genexpr>×  s(   è ø€ ð ;_ÙG]¹t¸qÀ!ð <JÈQÐPQÈFÕ;RÙG]ùs   ‚u.    ë¡œ ë‹¤ì‹œ ë©”ì‹œí•˜ê³  í•œ ë²ˆ ë�” ìž‡ëŠ”ë‹¤Úload_NÚmaterialr;  r/  Úpick_radiusrì  Ú	force_obbrz  Ú	weld_modeÚweld_throatr  Úplasticr›  Ú_drop_roundsÚ_auto_droppedrE  rB  rC  rD  Úlocal_refine_nÚ_logfÚ_fine_partsÚ_fine_roundsc              3   ó8   K  — | ]  }t        |d    «      –— Œ y­wr�  r  rq  s     r3   rò   zrun_fea.<locals>.<genexpr>ë  rv  rÛ  c                 óØ   •— ‰j                  t        | «      «      }|€	dt        z  S |d   t        kD  rdt        |d   «      |d   t        fz  S dt        |d   «      |d   |d   xs dfz  S )Nu‹   ê³ ì •ë�œ ë¶€ìž¬ì™€ ìš©ì ‘ìœ¼ë¡œ ì�´ì–´ì§€ì§€ ì•Šì•„ ìž�ë�™ ì œì™¸ â€” ì‹¤ì¸¡ %.0fmm ì•ˆì—� ì�´ì�„ ìˆ˜ ìžˆëŠ” ì�´ì›ƒ ë¶€ìž¬ê°€ ì—†ìŠµë‹ˆë‹¤r   uŒ   ì‹¤ì œ ë¶„ë¦¬ â€” ê°€ìž¥ ê°€ê¹Œìš´ %dë²ˆ ë¶€ìž¬ì™€ ì‹¤ì¸¡ ê°„ê²© %.2fmm (%.0fmm ë„˜ê²Œ ë–¨ì–´ì ¸ ìžˆì–´ ìš©ì ‘ìœ¼ë¡œ ìž‡ì§€ ì•Šì•˜ìŠµë‹ˆë‹¤)r   u®   ê³ ì •ë�œ ë¶€ìž¬ì™€ ì�´ì–´ì§€ì§€ ì•Šì•„ ìž�ë�™ ì œì™¸ â€” ê°€ìž¥ ê°€ê¹Œìš´ %dë²ˆ ë¶€ìž¬ì™€ ì‹¤ì¸¡ ê°„ê²© %.2fmm (ì�´ì�„ ë²”ìœ„ ì•ˆì�¸ë�° ì ‘í•©ì�„ ëª» ë§Œë“¤ì—ˆìŠµë‹ˆë‹¤: %s)r   u   ì‚¬ìœ  ë¯¸ê¸°ë¡�)rÜ   rN   ÚBRIDGE_MAX_GAP_MM)r  ÚgvÚ_gap_ofs     €r3   Ú
_why_floatzrun_fea.<locals>._why_floatù  s—   ø€ Ø Ÿ™¤S¨£WÓ-�BØ�zð!kä"3ñ!4ð 5ð ˜!‘uÔ0Ò0ð!gä#& r¨!¡u£:¨r°!©uÔ6GÐ"Hñ!Ið Jð
rä" 2 a¡5›z¨2¨a©5°"°Q±%Ò2MÐ;MÐNñOð Pr5   c              3   ó&   K  — | ]	  }d |z  –— Œ y­wrY  rÅ  rq  s     r3   rò   zrun_fea.<locals>.<genexpr>  s   è ø€ ÐB±\°˜K¨!�O±\ùrz  u    â€¦ì™¸ %dê°œu¬    ê°€ ê³ ì •ë�œ ë¶€ìž¬ì™€ ìš©ì ‘ìœ¼ë¡œ ì�´ì–´ì ¸ ìžˆì§€ ì•ŠìŠµë‹ˆë‹¤(ê³µì¤‘ì—� ëœ¬ ìƒ�íƒœ). ê·¸ëŒ€ë¡œ í’€ë©´ ë³€ìœ„ê°€ ìˆ˜ì²œë§Œ mm ë¡œ ë‚˜ì˜¤ëŠ” ê°€ì§œ ê²°ê³¼ê°€ ë�©ë‹ˆë‹¤.u7    íŠ¹ížˆ í•˜ì¤‘ì�´ ê·¸ ë�©ì–´ë¦¬ì—� ê±¸ë ¤ ìžˆìŠµë‹ˆë‹¤.uˆ    ê³ ì •ì �ì�„ ê·¸ ë�©ì–´ë¦¬ì—�ë�„ ì°�ê±°ë‚˜, ì‚¬ì�´ë¥¼ ìž‡ëŠ” ë¶€í’ˆì�„ í•¨ê»˜ ì„ íƒ�í•˜ê±°ë‚˜, ê·¸ ë¶€í’ˆì�„ ì„ íƒ�ì—�ì„œ ë¹¼ì£¼ì„¸ìš”.r  ux   ê²€ì¦�ìš© ì™¸ê³½ìƒ�ìž� ëª¨ë“œìž…ë‹ˆë‹¤(ë°”ê¹¥ ì¹˜ìˆ˜ ìƒ�ìž�). ë¶€ìž¬ë³„ ê³ ì •Â·ìš©ì ‘ ì �ê²€ì�€ í•˜ì§€ ì•Šì•˜ìŠµë‹ˆë‹¤.zjob.inpc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   r  r)  s     r3   rò   zrun_fea.<locals>.<genexpr>*  s   è ø€ Ð+@¹C°q¬C°¯F¹Cùró   )r3  r4  r5  z-iÚjobrl   i„  rm   zjob.frdzJob finishediPûÿÿi¨ýÿÿu   CalculiX í•´ì„� ì‹¤íŒ¨:
Ú	availableéZ   )Ú
median_pctÚp90_pctÚmax_pctr¬   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   r  r)  s     r3   rò   zrun_fea.<locals>.<genexpr>]  s   è ø€ Ð#8±C¨q¤C¨§F±Cùró   r�  )
Ú
reaction_NÚreaction_xyzÚload_xyzÚreaction_err_pctÚequilibrium_NÚequilibrium_err_pctÚreaction_okÚreaction_other_NÚother_raw_pctr1  r¥   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrï   r  r)  s     r3   rò   zrun_fea.<locals>.<genexpr>µ  s   è ø€ ÐEÑ#C˜Q”#�a—&Ñ#Cùró   r  é2   rZ  c              3   óL   K  — | ]  \  }}t        t        |«      d «      –— Œ y­w)r   N)r$   r!   )rñ   r×  rT  s      r3   rò   zrun_fea.<locals>.<genexpr>Î  s    è ø€ ÐLÁ±g°r¸1œu¤U¨1£X¨q×1Áùs   ‚"$)Ú
excl_totalÚkeptÚkept_pctÚby_bcÚby_mpcÚby_hullÚmpc_seed_nodesÚhull_parts_nÚradius_factorÚradii_mmÚusableg{®Gáz´?r   c              3   ót   •K  — | ]/  }t         j                  j                  ‰‰   ‰|   z
  «      ‰kD  –— Œ1 y ­wrï   )r   rE   rF   )rñ   rÇ  rÆ  Úminsepr¬   s     €€€r3   rò   zrun_fea.<locals>.<genexpr>Þ  s1   øè ø€ ÐJÁTÀŒr�y‰y�~‰~˜e A™h¨¨q©Ñ1Ó2°VÕ;ÁTùrf  c              3   óN   •K  — | ]  }|d    ‰d    k(  s|d   ‰d    k(  rd–— Œ y­w)rW  rÆ  r   NrÅ  )rñ   ré   rZ   s     €r3   rò   zrun_fea.<locals>.<genexpr>  s7   øè ø€ ð W¡I˜qØ˜j™M¨Q¨z©]Ò:¸aÀ¹fÈÈ*ÉÒ>Uô ¡Iùs   ƒ"%r:   uG   ë¶€ìž¬%d(%s)-ë¶€ìž¬%d(%s) ìš©ì ‘ (ìš©ì ‘ì„  %.0fmm, ëª©ë‘�ê»˜ a=%.1fmm)rÇ  u{   ì°¸ê³ ê°’(ë¯¸ê²€ì¦�) â€” ì�´ ë¶€ìž¬ê°€ ì—¬ëŸ¬ ê³³ì—�ì„œ ë¶™ì–´ ìžˆì–´ íž˜ ë°°ë¶„ì�´ ì •ì—­í•™ë§Œìœ¼ë¡œ ì•ˆ ì •í•´ì§‘ë‹ˆë‹¤.)r–  ru  r  Ú	force_xyzÚ
moment_NmmÚiface_area_mm2r\  Ú	throat_mmÚtau_MPaÚ	sigma_MPaÚcombined_MPaÚ	allow_MPar—  Úverifiedrs  uº   ìš©ì ‘ë¶€ ê²€í† ê°€ 0ê±´ìž…ë‹ˆë‹¤ â€” ë§žë‹¿ì�€ ì ‘í•©ë©´ì�„ ì°¾ì§€ ëª»í–ˆìŠµë‹ˆë‹¤. ì�‘ë ¥Â·ë³€ìœ„ ê²°ê³¼ëŠ” ìœ íš¨í•˜ì§€ë§Œ ìš©ì ‘ëª© ì�‘ë ¥ì�€ ì�´ í™”ë©´ì—�ì„œ íŒ�ì •í•˜ì§€ ë§ˆì„¸ìš”.)r1   râ  rã  r+   rß  Ú_bridgesrH  u   í›„ë³´ íƒ�ì§€ ì‹¤íŒ¨: rG  r2   rÊ  Ú	method_krró  u   ì‹¤ì œ í˜•ìƒ� ì‚¬ë©´ì²´(C3D10)u-   ì™¸ê³½ ìƒ�ìž� ê·¼ì‚¬(ê²€ì¦�ìš© ê°•ì œ ëª¨ë“œ)r  Úfailed_textÚexcluded_partsr   Úauto_dropped)Úcoder   ÚE_MPar   Úfy_MPa)r¬   rN  r¢  ÚbcÚ	applied_NÚrequested_NÚ	dropped_NÚreactionr”  r—  Úoverlap_nodesÚobb)ÚL_mmÚb_mmrõ  Ústruct_maskÚstress_errorr_  Ú
candidatesÚcandidates_singularÚcandidates_inforR  rÉ  Úglobal)ru  ÚMPar—  )rU  Úmax_vonmises_atr¦  Úsafety_factorrö  Úpeak_vonmises_MPaÚpeak_vonmises_atÚpeak_yield_ratio_pctÚpeak_safety_factorrS  Úmax_disp_atÚhotspotsÚ	weld_noterg  rd  re  rn  rf  c                 ó   — | d   S rÄ  rÅ  )ré   s    r3   rÏ  zrun_fea.<locals>.<lambda>¥  s   € ÈÈ1Êr5   Úviz)r(   ÚratiorN  ÚvonmisesrÑ  rÀ  Úindices)r  r   r%  r&  r“  r”  )r¬   rj  rN  rR  r'  r-  r  )	ry  r   r   rx  rz  r|  r}  r~  r/  )rÇ  r»  Úlocal_errorró  ru  r7  c              3   ó´   •K  — | ]O  }t        j                  t        j                  ‰d    t        «      t        j                  |t        «      d¬«      –— ŒQ y­w)ru  rû  ©ÚatolN)r   Úallcloser    r!   )rñ   r£  Ú_cds     €r3   rò   zrun_fea.<locals>.<genexpr>Ï  sK   øè ø€ ð UÙOSÈô —{‘{¤2§:¡:¨c°$©i¼Ó#?Ü#%§:¡:¨b´%Ó#8¸t÷Eð EÙOSùs   ƒAArû  rß  Úmerged_into)r  r   rN  r  r%  r&  r“  r”  )
r¬   rj  rN  ÚrfallrÈ  rÑ  rR  r'  r-  r  rJ  Úworkdir)”Ú	MATERIALSrÜ   ÚDEF_MATr!   r   r    r"   r#   Ú
ValueErrorÚuuidÚuuid4Úhexrx   r`   ry   Ú	WORK_ROOTrA  rÁ  r“  rN   rß   rù  r4   rÞ  rç  r€   rª  rX   r·   rG   ÚQUALITY_TIMEOUT_SÚ
MANY_PARTSrÛ   r  r,  r  r3  r$   ÚPER_NODE_FLOORry  r¼  rL   r™  rŠ  r¦  rÚ   r¡  r²   rþ  rí  rD   r5  rE   rF   rõ   rI   r'   ÚshutilÚrmtreer  rJ   r   rt  r  r  r…  rÕ  rM   r  r  r6  rA  Úunion1dr¬  r/  r^   r&   rŒ  ro  r®  r"  ÚCOARSE_NOTErÏ  r¨   r%  r¸  rñ  r¦   rí  rÞ   rÝ   r_   r@  rH   Úargmaxr„   r÷  r  Ú	frozensetr  r1  Úenvironr  Úlocalsr˜   ÚjsonÚdumpr\   r   rÑ   r
  ræ  r%   r‡  Úpicklerå  rœ  ÚupdaterŸ  rx  r?  rž  r|   r}   ÚCCX_EXEr   r�   ÚstderrrT  rq  rä  rg  rð  rÖ  rF  r…  rW  rº  ÚWELD_TAU_FACTORr  Úmathrf  rÜ  r¢  r£  Úuint8rí  rá  (s  r(   rx  ry  r   r   r;  r/  rz  rì  r{  rz  r|  r}  r  r~  r›  r  r€  rE  rB  rC  rF  rD  r�  r‚  rƒ  r„  Úmatr	   r*   rò  r�  r‡   r[  rJ  r¿  rÊ  r0  r/  Úmeshinforh  Ú
_seed_statÚ_seed_pairs_outÚ_sjarrr  rÙ  r	  r  rV   r†  r
  ÚVpÚFpÚsubrO   rP   r0   r1   rÚ  Ú_tot_budgetÚvcÚfcÚ_piÚ_metsrÊ   Ú_volsÚ_vsumÚ_qtoÚ_bulkÚ_repair_statÚ_hull_partsrg  Ú_nbry  Ú_vkÚ_fkÚ_pkÚcomps2Ú_isflatÚ_axrÇ  Ú_tÚ_basisÚ_okÚ_hstatÚ
_fine_statÚnlistÚelistrN  ÚwallsÚesizesÚcoarseÚflipsÚqualrü  ÚFcÚperÚ_fhr¥  Ú_exrb  rc  Úf6Úfopprb   Ú_gÚ_crÚ_lnÚ_nnÚ_ctrÚ_flr  ÚaccrU   rj  Úsurfr  Ú_KDr  r7  r$  ÚdAÚiAÚfacingr%  r&  Úsel_mpcÚ_AvtxÚ_AradÚ_preÚdA_triÚ_ncr-   Ú_iiÚ_AtrirÎ  Ú_bestÚ_cÚsel_fr�   Ú_ftri  Ú_sstatÚ_mpairÚ_spairÚ_noseedrü  Ú_ApÚ_BpÚ_AptÚ_BptÚ_AidÚ_BidÚ_dA2Ú_iA2Ú_dB2Ú_iB2rá   r›   Ú_tqÚ_h_realré   Únodes_lr#  Ú_nbudgetÚbboxÚr_defr5  Úbc_infoÚreq_sumÚdrop_sumrÄ  rÓ  Úsub_infoÚ_drv_src_nodesÚ_drv_src_partÚ_dpÚ_drr×  Ú_hlÚ_hitÚ_dd2Ú_ii2Ú_duÚ_dmodeÚ_qÚ_ii0Ú_dofÚ_dsrcrb  Ú_pbndÚ_kk0Ú_d0Ú_pnra   rõ  Ú_fixsetrü   rý   r.  rf   r   Úsignr=  r8  r,  rö  r  r  r5  r-  Ú_wlÚ_wsideÚAwÚnf2Úeqs2Úcnt2Ú_wl2r×  Ú_LrP  r_  Úfloat_loadedÚ_grprÌ  Úload_groupsr·  Ú_bridge_rejÚ	_nobridgerT  r]  rˆ  Útied_cntr6  rG  rH  rÊ  ÚweakÚhas_fixrZ   Ú_pdr£  r*  rÊ  Ú_b2r¹   Ú_eÚ_dgr¹  rÆ  Ú_flo_iÚ_loÚ_hiÚ_needrÅ  Ú_iÚ_dexÚ_flosetÚ_fineqÚ_ngsÚ_noÚ_fpÚ_dropnoÚ_offÚ_keepPÚ_keepSÚ_keepNÚ_keepOÚ_cntrÒ  rŠ  Ú_accÚlstÚinprÈ  rŒ   ÚsecsÚfrdÚtailrN  r  rä  rÀ  rÈ  ÚdmagÚ_evÚerr_infoÚ
complianceÚ_niÚ_fvÚ_fixarrÚrf_fixÚ_otherÚrf_otherÚf_sumÚf_magÚ	react_magÚrf_allÚ	equil_errÚ	react_errÚ	mpc_shareÚ
react_inforÑ  ÚEXCL_R_FACTORrØ  Úbc_seedÚn_bcrÔ  Ú_snÚ_fn6Ú
n_mpc_seedÚn_mpcÚ_hullnoÚn_hull_partsÚn_hullr¡  r¢  Ústruct_usableÚ_vmkÚsimaxÚ	mask_infoÚ_vmrankr­  ÚhotsÚimaxÚipeakÚidmaxrÚ  Úweld_outÚallowÚf3ÚLwÚctr_wÚlo_nÚhi_nÚFvÚMvÚnidxr>  Ún_connÚZwÚtauÚsigÚcombÚok_statr×  Ú	_iface_rfÚ_tiÚ_b3Ú_hrealÚ	cand_mainÚ	cand_singÚcand_sumÚ_cexÚresÚ_bkÚ_locÚ_lexÚ_lrÚ_atsrA  râ  r‰  rB  rN  r2  r¬  r¬   rR  rO  ré  ss                    `                                                                                                                                                                          `                                                 `         `                                                                                                              @@@@@@@@@@@r3   rŸ  rŸ  ú
  s¾H  ÿÿÿù€ ô �-‰-˜¤)¬GÑ"4Ó
5€CÙŒˆaŒ˜3˜s™8€AÙŒˆrŒ˜c $™i€BØ	ˆT‰€Bä
�
‰
�9¤EÔ*×2Ñ2°2°qÓ9€AÜ
ˆ1ƒv�‚zÜÐ?Ä#ÀaÃ&ÑHÓIÐIñ ™+©hÜÐYÓZÐZôô �*‰*‹,×
Ñ
˜3˜BÐ
€CÜ	�‰�‰”i Ó	%€BÜ‡K�K�˜TÕ"ä% aÓ(�O€FˆAˆtØ4Ñ€FˆE�4Ø€Hà#% r¨2Ð �Eˆ9‘jØ€JØ€OØ€FØ€LÚñ ØˆEØˆCÜ$ ZÖ0‘��CÜ˜3“x 1‘}�Ø˜˜C $™JÐ'�Ø�t‘�Ü�s“8˜a’<Ø ×'Ñ'©u°R«yÄ&ÈÐUWÓBXØ0_ÔbeÐfiÓbjÑ0jñ)lô màÜ" 3›‘��BÜ& r¨2Ó.�ÙØ ×'Ñ'©u°R«yÄ&ÈÐUWÓBXØ0jñ)lô màØ—‘±sÔ;±s©V¨a°˜q ! Ršj°sÒ;Õ<ð 1ô ˜Q“<‰DˆA‰qä˜Q“<‰DˆAˆqÜ2;Ô<LÈQÐPQÓ<RÔ2SÕTÑ2S¡J B©¨¨A�a˜˜B’ZÐ2SˆEÒTÙÜÐNÓOÐOä˜LÒ;¬OÓ<ˆÙ9>Õ?¹©+¨"¨b°#”˜b "Õ%¸ˆÒ?Ù49Ó:±E¨q”�Q�|‘_ cÕ*°EˆÐ:Ü�E“
ˆô !ˆô �E“
œZÑ'ˆØˆØˆð ˆ
ØˆÜ#,¨UÖ#3ÑˆB‘��c˜3Ü—*‘*˜S¤%Ó(ˆCØ�J‰J˜Ÿ™ a˜›¨#¯'©'°q¨'«/Ð:Ü˜e B™iŸm™m¨IÓ6Ò=¸#Ó>ð@õ Að $4ð ˆÜ#,¨U×#3ÑˆB‘��c˜3Ü(¨Ó-‰LˆG�SÙØ—‘˜s C¨˜oÔ.ØÜ& s¨2¡w¨q¡zÜ8=¼cÀ#»h¼Ó'S¹°1È1ÐPRË7¨¨A«¸Ñ'SóU‰JˆB�àˆCÙÜ(¨¨c°2°sÓ;�Øˆ{Ø—‘˜s C¨˜oÔ.ØØ�M‰M˜3˜q™6 3 q¡6¨3Ð/Ô0Ø×Ñ¡U¨3£Z¼À
ÈCÓ9PÜ',¬U°2«Y¸Ó':ÀVñMô NâÙÐ\Ù˜s›¤V¨J¸Ó%<¸bÀ&ÐIñJö Kð# $4ñ& ØˆEÙ=BÕC¹U©k¨b°"°c”\ " bÕ)¸UˆEÒCÙ8=Ó>¹°1”S˜˜<™¨#Õ.¸ˆEÐ>Ü˜“JˆEØˆØˆ
Ø˜r 1�bˆuˆØ-/°°U¸A¸rÐ-AÑ*ˆˆv�v˜u dÜ!*¨5×!1ÑˆB‘��R˜Ü—'‘'—,‘,˜r 5¨2¡:Ó.ˆCÜ�K‰K˜ dÕ+Ü�k E¨"¡IÑ-°Ñ5´~ÓFˆCÙÜ˜#œwÓ'�ð/Úð 'Ò,¨"×1Ñ1±%¸³*Ó=�CÙ™|Ü0°°R¸¼eÀC»jÈuÔU˜Ø˜:Ü".Ð/[Ô^cÐdgÓ^hÑ/hÓ"iÐiØ"×)Ñ)±°s³Ü7<¼UÀ3»ZÈÓ7KÜ38¼¸rÀ.Ñ?QÓ9RÐTUÓ3VÜ47¼¸B¸w¹KÓ8HÓ4IÜ59¸"¿&¹&ÀÓ:OÓ5Pñ	+Rõ Sñ ".ô :¸"¸bÀ#ÔFä5°b¸"¸cÐPSÔTð ð 2>×1AÑ1AÀ"ÀXÁ,ÐPQÓ1RÐUVÑ1V�L  H¡Ñ.Ø—v‘v˜f•~Ø#×*Ñ*©5°«:Ö6Úä-¨b°"°cÈØ>Bð ;C¿,¹,ÀyÔ:QÙ9>¸s»ÄsØ:B¿,¹,ÀyÓ:QóHSñ :Sð 3;·,±,¸zÔ2Jð 8<ô>�Bð —M‘M©¨s«Ü+0´°r¸.Ñ7IÓ1JÈAÓ+NØ24·&±&¸Ó2GØ,.¯F©F°7«OÜ,/´°B°w±KÓ0@Ó,Añ	#Cô Dð
 2>×1AÑ1AÀ"ÀXÁ,ÐPQÓ1RÐUVÑ1V�L  H¡Ñ.Ø—v‘v˜f”~Ø#×*Ñ*©5°«:Õ6ä'¨¨B°À#ÐW[Ô\�Bð
 ˜‘[ " W¡+�ˆBÜ& rÓ*‰HˆB�Ø�b‘ˆBØ˜"‘9ˆDØ’Q˜˜˜�U‘)˜b‘.ˆCØ’A�r˜�r�E‘˜R‘ˆBÜ—(‘(˜2˜b¢ A ™h™<¨"¨R²°1°©X©,Ñ6¸¸2ºaÀ¸d¹8¹ÀrÈ"ÊQÐPQÈTÉ(Á|Ñ8SÓTˆCÜ—*‘*œRŸY™YŸ^™^¨C°a˜^Ó8º¸D¸ÑAÀ5ÓIˆCØ˜‘)ˆCØ�b‘6—;‘; A�;Ó&ˆDÜ—)‘)˜J¨¨T°B°t¸b±y±MÑ-AÓBÀQÑFˆCØ�‹H˜Ñ‹HÜ—9‘9˜S“> BÑ&ˆDÙ�L‰Lð Ø˜ðØ$ bðØ*.°ðØ48¼#¸e»*Ò:cÌÑLcÑ]bÓLcÓIcÒ:hÐghðà˜"ðà)¨4ðà1;¸Tðð ¤§	¡	¨"£ðð  ¤2§9¡9¨R£=°2Ñ#5Ñ 6ðð ˜3ðð !,¨Tðð 48¸¼cÀ"»g¹ðð ˜BœrŸy™y¨›~Ñ.ðð  ˜˜9™ iÑ0ð!ð& ™5 ›:ð'ð& (3´F¸:ÀsÓ4Kð'ð( �b—f‘f !�f“nð)ð( -/¯F©F¸¨F«Nð  Bò/ô ð2 �L‰L˜ÔØ�L‰L˜˜b™Ô!Ø�L‰L˜˜I™ yÑ1Ô2Ø�M‰M˜"˜^Ñ,Ô-ØÒ.˜r +™ˆFØ—6‘6˜) RÓ(ˆDØ�R˜	‘]Ñ"ˆEØ”#�b“'‰MŠBðM "2òR Ü�M‰M˜"¨DÕ1ÜÐWÔZfÐgsÓZtÑtÓuÐuàˆÜ˜uÖ%‰EˆB�Ø!‰E�"‰I�d‰OØ”3�q“6‰M‰Cð &ô —	‘	˜%Ó ‰Ü—	‘	˜%Ó ˆÜ ¢a¨¨!¨ e¡Ó-ˆô ‰u‹:˜‹>ô ”s˜5“z CÑ'¨Ó-ˆDÜ'©¨tÓ4ˆIÝ4Ü�Ù˜!˜C™&‘M�Ù˜!˜J™-Ñ(�Ø�x‘[�Ù˜Bšq " 1 "˜u™IÑ&×+Ñ+°Ð+Ó3�ñ ˜Q˜{™^Ó,×2Ñ2°3Ó7‘��BÜŸ™ :¨q°©|¸Q¸y¹\È"Ñ=MÓN�à˜:™¨Ñ-¨q°©}¸tÑ/C�B�ÜŸ(™(¤2§6¡6¨3°"©9¸À¹Ñ*CÈ!Ô#LÓMÈaÑP�ñ( ˜a ™kª!¨R¨a¨R¨%Ñ0Ñ1�äJMÈeÌ*ô œbŸi™iŸn™nØ˜A˜k™Nª1¨d²A¨:Ñ6Ñ6¸Qð -ó @ß@CÁÃôGØZ]ð ä—x‘x ¨$¡°2¸À¹Ñ3EÑ FÓGÈÑJ�ÜŸ™¤ S£¬2¯6©6Ó2�Ü�t”9Ü˜a¤ Q {¡^Ó!4Ó5�CÙ   ;¡Ó0×6Ñ6°s¸4±yÀCÐ6ÓH‘F�A�sØŸ+™+¤c¨$£i°Ó5�CØ!�EØ˜d™)�CÜŸG™G¤C¨£I¬r¯v©vÓ6�EÜ# Cžj˜Ü "§
¡
¨5Ô2FÀsÈEÐRUÒVWÐY[ÐV[ÑR\ÑL]Ó2^Ó _™ð )à#(�F˜4‘LÜŸ™ ¨4¡Ó0°Ñ3�ð —U‘U˜<Ó(�Ø�>¤c¨"¤gÜ Ÿj™j¨°"Ó5�GÜ�w–<Ø$+�A�j‘MØ%*�A�k‘NØ $�A�f‘Iô
 ˜5”zÙ# B u¡Iªa°°!°¨eÑ$4Ñ5˜Ü*/°´b·i±i·n±nÜŸH™H Sª¨A¨¡Y°²Q¸°T±Ñ%:¸CÂÀ1À¹IÈÊAÈqÈDÉ	Ñ<QÓRÐYZð 7Eó 7\ß\_Ñ\_Ó\añ1bó +c˜˜,›ð +.˜˜,›ðK òV Ü!/±°tÓ!<‘�˜Üñ 1Ù&/ó1ó 1�äÑD¨6¯<©<¬>ÓDÓD�Ü'*¨6£{��|Ñ$Ü&)¨&£k��{Ñ#Ü'*¨6°F©?Ó';��|Ñ$Ü+.¨v¸©Ó+?�Ð'Ñ(Ü,/°¸±Ó,@�Ð(Ñ)Ø�Ü"�AÜ˜a ™f a¨
¡mÓ4´c¸!¸C¹&À!ÀJÁ-Ó6PÐQ�BØ Ÿ*™* R›.�CØ�{¬#¨c¬(Ü)+¯©°"¼B¿H¹HÔ)E˜˜+™Ü-/¯X©X°bÄÇÁÔ-I˜˜/Ñ*Ø 1™˜Ø Ù$ Q s¡V™}©e°A°j±MÑ.B˜�Cð Ÿ7™7 >°3°z±?ÓC�DØŸ7™7 >°3°z±?ÓC�DØŸ7™7 >°3°z±?ÓC�DØŸ7™7 >°3°z±?ÓC�DÜ!/°°cÓ!:‘J�D˜$Ü!/°°cÓ!:‘J�D˜$Ü%'§Y¡Y¨t°D©zÓ%:�A�k‘NÜ)+¯©°4¸±:Ó)>�A�oÑ&Ü"%¤c¨#£h£-�A�h‘Kô
 ),¬C°«H´s¸1¸[¹>Ó7JÑ,JÓ(K�A�nÑ%Ü,1´%¼¸D¿H¹H»JÈÏÉË
Ó8SÓ2TÐVWÓ,X�AÐ(Ó)ð3 #ð4 07�Ð+Ñ,Ü'*¬3Ñ.[ÑQZÓ.[Ó+[Ó'\��|Ñ$Ø#�
à/5¯|©|¬~ô#IÙ/=¡t q¨!ÄÀQÄñ %*¨!¨A©$¡K°	Ñ$:¹EÀ!ÀAÁ$¹KÈ	Ñ<RÐ#SÐUVÑ#VØ/=ð  ñ #Ið
 ,1°GÒ+;Œk™% Ô'ÀˆØ—‘˜ Ó%ˆØ�‰��tÔð —'‘'Ð/Ó0ÒJ´E¼"¿'¹'À&»/Ó4Jˆð
Ø”S™“Zð
à”uœU¤2§7¡7¨5£>Ó2°AÓ6ð
ð œE¤%¬¯©°«Ó"8¸!Ó<ð
ð
 $¤U¬5´·±¸³Ä"Ç'Á'È&Ã/Ñ1QÓ+RÐTUÓ%Vð
ð  ¤¤u¨W£~°qÓ!9ð
ð œE¤%¬¯	©	°%Ó(8¼3¸wÈÓ;MÑ(MÓ"NÐPQÓRð
ð ˜sð
ð ˜ð
ð "+¨Eð
ð 4=¸dð
ð œC ›Fð
ð %+¬C°«Fð
ð �Qð
ð ©:œ˜Jœ¼3¸u»:ð
ð œC Ó-ð
ð  ˜ð!
ð$ �lð%
ð& &Ü˜“KÙ,1¹,�KÈRÜ  Ò!7¨<Ó8Ø#ð !Ù8@˜HŸL™L¨Ô4ÀdÙ.4ÓP©f¨¸¿¹¸g»È%Ò8O˜Q˜t›W¨fÑPà$ò=
ˆñ@ Ü Ó-ˆDñ Ø-‰ˆ�Ø57¸¸RÀ°^Ñ2‰ˆy™* lÜ% d¨B°°1Ó5‰ˆ�Ø˜' D¨3¡JÑ.°!·#±#Ñ5Ñ5‰ØˆÜ Ó&ˆØ¨¸$Ñ?ˆá%‘¨LÒ,K¼OÈsÑ+R€HÜ
‰5ƒz�HÒÜ�‰�b¨Õ-ô ðgð �}‰}œS¡›ZÓ(¨&¯-©-¼¸LÒ<[ÌOÓ8\Ó*]Ü‘5‹zœE ,Ò"A´/ÓBÑBØ—‘˜ZÓ(Ò6¬C±«J¼¹U»ÄSÈÓEVÙ:F�œ<¨Ó5Ñ5ðPñPóQð 	Qð MOðPñPóQð 	Qñ �9‰9˜!ˆ9Ó™uŸy™y¨a˜yÓ0Ñ0€DØÒ[œ3˜tŸx™x›z¨DÑ0°(·,±,¸~ÈqÓ2QÐTUÑ2UÐWZÓ[€EØ�EØ€JÜ“E�MØ¨Q¸aÌeÐTYÐ[\ËoÑ^€GØ€GØ€Hà€Mð €Jð €HØ€Nð €MÚÜ�j‰j˜ +Ñ.´Ó6×>Ñ>¸rÀ1ÓEˆÜ�H—L‘L Ó+Ò2¨sÓ3ˆð �Š7Ù8;Ó<¹°"”:™e R¨Õ-¸ˆCÐ<Ù!Ó,™c˜¤S¨¥V’1˜cˆCÐ,Ù58”2—9‘9œRŸ^™^¨CÓ0Ô1¼b¿h¹hÀrÔQTÔ>U‰Dô (©¨sÓ3‰JˆD�$Ü—:‘:˜d¤B§H¡HÓ-ˆDÜˆt�9Ü% h¨wÑ&7¸À'Ñ9JØ&.¨vÑ&6¹¸d¹óE‰KˆC�ä% džO‘��DÜ˜$“i�Û%�DØ×)Ñ)¨#¨rÓ2×9Ñ9¸4ÄÀsÈ2ÈtÐVWÉxÈ<ÑGXÓAYÐ:ZÕ[ð &á×!Ñ! #Õ&ð	 ,ð —L‘L Ó-ˆEØÑ  S¨A£X´#°e³*ÄÀDÃ	Ó2IÜŸ™²UÓ!;±U¨r " T£(°UÑ!;¹uÀR¹yÈ¹Ð>OÑ!OÜ')§x¡xô1�ä )¨$¦‘H�B˜Ü Ñ ;°°r²Ó ;Ó;�DØ"×-Ñ-¨d°BÓ7×>Ñ>¼sÀ4»yÔIÜœbŸo™o¨e´S¸³YÀWÔMÓNÐQRÑR�CØ˜CÔ,¤#¡e£*Ö,Ø+×6Ñ6°t¸RÓ@˜Ü!¡%¨¡*¨YÑ"7Ó8˜Ø#&§7¡7¨3°£?°QÑ#6˜˜Cšð !0ô &)¬¨S«£]Ä%ÈÈQÃ-Ü(+¬C°«I«ØCFÈ!Â8¤c¬#¨c«(´S¸³YÑ*>Ô&?ÐQUÜ),¨f¸©k×->Ñ->Ó-@Ó)Aä*-¨v¸©{×.?Ñ.?Ó.AÓ*BÜ*-¨v¸©{×.?Ñ.?Ó.AÓ*BØHKÈqÊ¤u¬U´2·6±6¸$³<Ó-@À!Ô'DÐVZÜ.3´E¼"¿)¹)¿.¹.ÈÐST¸.Ó:U×:YÑ:YÓ:[Ó4\Ð^_Ó.`ñb‰Hô &)¬¨S«£]Ä%ÈÈQÃ-Ø()ñ+ˆHñ ’[Ü�i‰iœŸ™ØFPÒFVÐTVÐFVÓXÑFVÀŒZ™˜q ™v q§u¡u¨S£zÒ':°UÕ;ÐFVÑXò )Ü—‘˜¤3Ô'Ð(ó*ó +ˆô Ñ*¡cÓ*Ó*ˆØÒ" Ò"ˆAØ×Ñ°!°C²&Ó9±&¨Q¤ a¥°&Ñ9¼5ÀÇÁÀsÃÒATÈuÓ;UÐVÕWð #àÒ$ "Ò$ˆBØ×Ñ°"°S²'Ó:±'¨Q¤ a¥°'Ñ:¼EÀ"Ç&Á&ÈÃ+ÒBVÐQVÓ<WÐXÕYð %àÒ$ "Ó$ˆBÜ™U B s¡G¨R¯V©V°C«[Ò-A¸EÓBˆCØ�v‰v�d‹|Ð#Øœ3œu R§V¡V¨C°Ó%8Ó9Ó:Ñ:�Ü�s”8à—6‘6˜$“<Ð'Ø¤¤E¨"¯&©&°°fÓ*=Ó$>Ó ?Ñ?�HØÜ—
‘
˜2Ÿ6™6 %›=Ò6ªJ¼Ó>ˆAÜ—)‘)—.‘. Ó#ˆCØ š7��C’¬¯©²Ó(?ˆAØ�v‰v�d‹|Ð'ô œ2Ÿ9™9¤R§V¡V¨A£YÓ/Ó0�Ø ™g¨šl‘s°�Ü˜B˜t™H“o¨Ñ,�Ø˜Q‘h�Û�AÜ˜Q›�BØ×)Ñ)¨"¨bÓ1×8Ñ8¸#¸s¸ÔDÙ!×%Ñ% bÕ)ò ô ˜BŸF™F 3¨Ó/Ó0´3°s³8Ñ;�Û�AÜ˜Q›�BØ˜W‘}Ø%¨Ñ*˜Ø ¤C¨£HÑ,˜Ø Ù %§	¡	¨"¬b¯h©h°q«kÓ :¸QÀ¹WÑ D‘E˜"’Iò ñ9 %ñF 
ä�h‰h�r¤Ô%ˆØ$ˆ�Šä%¡e¨V°Q¸Ó=‰ˆˆS�!Ø”sœ3˜s›8 QÓ'Ñ'ˆÛˆAØ˜B ™H‰E”#�a“&ŠMð à+ˆ�‰Ü”e˜F“mÓ$ˆÜ‰u‹:˜Š>ð Fä!$¡U£ñ ,ˆG�F‰Oô ˆsŒ8™JÜ�‰�b¨Õ-Ùô ðSä”r—z‘z (¨;Ñ"7¼Ó?×GÑGÈÈAÓNÓOÜ˜Ÿ™ iÓ0Ò7°CÓ8¼#¸lÓ:KÜ Ó-ð/ñ/ó0ð 0ô œ<¨°ZÀÈzÐ[\Ó]Ó^Ð^Ú™Ü�‰�b¨Õ-Üœ<¨°[À,ÐPZÐ\]Ó^Ó_Ð_Üœs 3›x›=€GˆKÑÜ¤¡E£
›O€GˆLÑÙØ ˆ�‰Ü&)¬#©mÓ*<Ó&=ˆÐ"Ñ#ô Ñ&¡#Ó&Ó&©Ñ6�GÜ‘G“€Iô ™7Ó#€JØ�FÓò	7ô ˜9¨/Ô:ˆ	ÜˆAØ Ñ"ØÙ�a˜
‘mÑ$ˆAÜ0±¸¸+¹Ø12°8±¸Q¸z¹]Ñ1KØ1:¸A¸f¹IÈ¹OØ1;ó=‰MˆC��cô ™˜q ™v™ yÑ1Ó2ˆFð �aŠxÙ˜1˜S™6‘]�Ø—e‘eÐ,Ó-�Ø�?¤s¨3¤xÜ';Ù˜q Ñ1°2°h±<ÀÑ3DØ! 1 V¡9¨s¡?°Jó(@Ñ$�D˜$ ð ˜a’xØ(,¨d°D #˜S˜Ø,0˜˜.Ñ)ä!$¡U¨1¨Z©=Ñ%9¸)Ñ%DÓ!E˜Û�Ø—‘˜a ™dÕ#ð á×Ñ˜cÔ"Ø!ˆAˆl‰OØˆAˆf‰IØ &ˆAˆnÑô ŸH™H¹Ó%=¹°A¤c¨!¨A©$¥i¸Ñ%=ÄRÇXÁXÔNˆAˆj‹MðG ðL  !°¸aØ A°¸añAˆãˆAØ�‹Kœ3˜qŸu™u X›Ò3°!Ó4Ñ4‹KØ�‹Kœ3˜qŸu™u \Ó2Ò7°aÓ8Ñ8‹KØ˜Q‰¤s¨1¯5©5°«?Ò+?¸aÔ'@Ø�I“ !Ñ#“Ø—‘�v“ˆBÚØ�I“ " \Ñ"2Ñ2“Ø�I“ " Y¡-Ñ/“Ø�I“ " Y¡-Ñ/“Ø�E“
˜b ™nÑ,“
Ø�G“  7¡Ñ+”ð ô ˜#˜f™+¨¨F©Ñ3Ó4ˆˆF‰Ø #ˆ�ÑØ�<‰<˜ Ó# aÒ'Ü #Ñ#NÁIÓ#NÓ NˆH�WÑô ‰5ƒz�Aƒ~ä�x‰xªEÓ2©E b˜˜D›¨EÑ2±e¸B±iÀ±oÐ5FÑFÌbÏhÉhÔW‰÷	6ð 	6÷!	V÷ !	VñF AFÃÑ=ˆ�,  j°+à " B�+ˆô —J‘J—N‘NÐ#5Ó6¸#Ñ=ˆ	Ù™¡eÙÐaÔbÙ˜	 VÒ+±IÜ$3Ù‘u˜d J°	¹:Ü”f“h—l‘l 6Ó*Ò1¨cÓ2¸Ø%ô%'Ñ!ˆH�kñ ÙHMËÑE�˜,¨¨j¸+ÙÙÐ^Ü  ›]¬C°«MÐ:ñ;ô <ñ
 .6õ$7Ù-5¨ð 78·g±g´iÔ$S±i©d¨a°À1È
Ã? Q¨¡T°iÔ$SØ-5ó$7ˆ�Ñ ñ Ü*-¬cÑ1MÁHÓ1MÓ.MÓ*NˆHÐ&Ñ'Ü # H§L¡L°Ó$9Ò$>¸QÓ ?À(ÐK\ÑB]Ñ ]ˆH�WÑà‰ÛˆAØ˜c™F A c¡FÐ+¨a°©f°a¸±fÐ-=Ó>‘��AØ—U‘U˜8“_�Ø‘> q±Ñ'7¸2ÁÈÁ
È1ÁÓ;MØ"$ a¨¯©¨u«Ò);¸Ð!<‘G˜A’Jñ ?ð ð ˆÜ'‰MˆR��bÜ˜B›¤ S¨¡V£Ó-�Ú˜c“]�Ø‘>Ø#+§<¡<°°AÓ#6¸Ñ#:�H˜R’Lñ .ð (ð
 ˆÜ¡Ö&‰FˆB�ÜÓDºGÓDÓDˆGÚ˜xŸ|™|¨B°Ó2°QÓ6à—‘˜R 	™]¨B¨{©OÐ<Õ=ð	 'ñ
 Ù37Ó$8±4¨a Q q£T°4Ñ$8ˆG�LÑ!ð!Mà!%§¡Ñ*IÁDÓ*IÓ!Iñ JˆG�F‰Oô �:‰:�>‰>Ð,Õ-ð+;Ø�Ü#�BØ!¨Ñ+Ø Ü™U 2 c¡7™^¨IÑ6Ó7�BÜ™U 2 j¡>Ñ2°9Ñ=Ó>�BÜŸ™ B§F¡F¨8Ó$4´eÓ<×DÑDÀRÓH�BØŸ&™& Ó-�CØ—J‘J¤S¨¨R£[´s¸2¸r³{ØGIÈ"È1ÁvÓ*NÁvÀ!¬5´°q³¸1Õ+=ÀvÑ*NÜ(+¨B¯F©F°<Ó,@Ò,EÀAÓ(FÜ+/°·±°~Ó0FÓ+Gô +.¨b¯f©f°XÓ.>Ò.CÀ!Ó*DÜ),°#°+©QÄ3ÀsÃ8Ó)LØ02·±°~Ó0FØ(*¯©¨v«Ø(3ñ
 5ö 
6ð $ó$ $�CØ—J‘J¤S¨¨S©°3°s±8Ó%<Ä3ÀsÈ3ÁxÐQTÐUXÑQYÓCZØ*.¼¸CÀ¹J»Ø+0Ü*-¨c¯g©g°gÓ.>Ò.CÀ!Ó*DØ)-Ø03·±¸Ó0GØ(+¯©°«Ø.1¯g©g°lÓ.CØ(0ñ 2õ 3ð $ô —	‘	¬3¬s±5«z«?ÚFKÓ(LÁeÀ¬¨R°	©]Õ);ÀeÑ(LÜ/2°8·<±<ÀÓ3HÒ3MÈAÓ/NÜ),¨X¯\©\Ð:KÓ-LÒ-QÐPQÓ)RÙ;CÓ'D¹8°a¬¨A¨a©D­	¸8Ñ'DØ$'ñ)ô œrŸz™zÐ*<Ñ=¸sÈWÔUØ',°Qõ8ñ ÙÐIÜ ¡›Z¬¨S«´2·:±:Ð>PÑ3QÐRñSô Tô �:‰:�>‰>˜.Õ)ªhð@DÜ“X�ä$ R§V¡V¨F£^Ò%:°sÓ;ò ).ó/ñ
 ). "ð &(¨	¡]¸B¸{¹OØ%'¨¡X§_¡_Ó%6¸bÀ¹h¿o¹oÓ>OÜ*/°·±°v³Ò0EÀ#Ó*FÜ')§z¡z°"°V±*¼b¿j¹jÓ'IÜ')§z¡z°"°V±*¼b¿h¹hÓ'Gó	Ið
 ).ñ/ñ 5=Ó =±H¨q¤ Q q¡T¥°HÑ =Ù.2Ó3©d¨œc !�f¨dÑ3Ü# H›~Ä$À{ÓBSñ #Ÿ\™\¬"¯*©*Ó5ØÜ"(Ñ(D¹Ó(DÓ"DÜ!'¬ô ,MÊ7ó ,Mó )Mó "Nä!% b§f¡f¨\Ó&:Ò&@¸bÓ!AÜ" <Ó0ð )+¯©¨{Ó(;Ò(A¸rÐ(Aó	Dò )B !ô %(¨¨#©£K´c¸!¸J¹-Ó6HÜ',¨Q¯U©U°6«]Ò-A¸cÓ'BÜ),¨Q¯U©U°8«_Ò-AÀÓ)BÜ/2°1·5±5¸Ó3HÒ3MÈAÓ/NÜ'*¨1¯5©5°Ó+>Ò+CÀ!Ó'DÜ*.¨q¯u©u°^Ó/DÓ*EÜ(+¬CÀaÇeÁeÈKÓFXØ8<ðG=°·±°kÔ0BØBDó-Fó )Gä-2°1·5±5¸Ó3FÒ3MÈ#Ó-NôPð )Bñ	Dð ,.¯6©6°(Ó+;Ò+A¸r×*HÑ*HÔ*JôLÙ*J¡$ ! Qô  # 1 Q¡4›y¬#¨a°©d«)Ð4´c¼#¸a»&³kÑAØ*JòLà "ñC"�ôF &0‘M�R˜˜bÚ%¤c¨"£gÓ.²¼¸SÀ¹V»Ó0E˜�BØ�z R ZØ Ü˜r 2›;¬¨B°«Ð4�CØ+.¨z©?×+>Ñ+>¸sÀAÓ+FÈÑ+J�C˜
‘O CÒ(ð &0ô *3±5Ô)9ô PÑ)9¡  2Ø 	™]¬cÑ1NÁXÓ1NÓ.NÑNò Ð)9�ñ Pä—h‘h²5Ó9±5¨R  4£°5Ñ9¼5ÓA�Ü—h‘h²5Ó9±5¨R  4£°5Ñ9¼5ÓA�Ü˜F›�Û �BÜŸ™¤B§J¡J¨s°S¸±W©}¸cÀ"¹gÈ¹mÓ$LØ$'ó)ß),©°!¨«ð àœSÑ V´·±¸"Ô@QÑ:QÓ1RÐSTÒ1UÓ VÓVÑV‘Eð !ô ! ž-�BÙ ™)�CÜ13·±¸CÀ¹MÌ2Ï8É8Ó1TÜ35·:±:¸cÀ*¹oÌrÏxÉxÓ3XÜ-0°°T±«^Ä3ÀsÈ4ÁyÃ>ñ'S�C˜‘K ’Oð (ô
 œ"Ÿ*™* ^Ñ4°dÔ;¸sÜ—K‘K  S°1Õ5÷ <áÙÐdÜ ¡›Z¬¨X«¼¿
¹
À>Ñ8RÐSñTô Uò ˜ qÓ(ªZºLÜÑ6©XÓ6Ó6‰GØ‰FØ!Ò' RÒ'�Ø—U‘U˜8“_�Ø�: Ô&7Ò!7ØØ78·u±u¸W³~Ò7KÈÐ7Kó =Ñ7K°ØŸ5™5 Ó/Ð;ð Ÿ™˜mÕ,Ð7K‘ð =âœs¡4›y¨BÔ1EÑ,EÒEØØ˜c™F A c¡FÓ+‘CÜ™3“x¡wÑ.Ø Ü! "›IÔ(<Ñ<�EÙ¡&Ñ(¨E±F¼3¹s»8Ñ4DÓ,DØ+0™œs¡3›xÒ(ñ ,ð (ó Ü˜;Ò,¨"Ó-‘Ù—
‘
™6Ô"Ùœ$˜{Ò0¨bÓ1Ò1Ü—M‘M "°DÕ9ÙÚä!'©¥°·±ñ ;_ÜGMÉfÏlÉlËnÔG]ó;_õ 2_ð`ô aô # 9ò S±Vñ SÁhð SÑRSð SÑXZñ SÙ.8ñSÙFQñSá/:ñSáAEñSáQZñSñ 1=ñSñ IRñSñ 0;ñ	Sñ HRñ	Sñ
 ,3ñSñ
 @JñSñ 1=ñSñ MZñSñ .7ñSñ FRñSñ .7ðSñ BJñSñ 0;ñSñ 3AñSñ INñSò 03ñSð BNÐPQÒAQðSð Sò ˜ qÓ(ªZ¼CÀ»MÌCÑPUËJÐYZÉNÓ<Zô Ò6©XÓ6Ó6‰GØ34°b¸"¸bÀ"Ð3DÑ0‰D‘&™&¡&©&Ü& zÖ2‘	�‘TÜ™D›	 Q™‘Ù˜“:¡WÑ,Ù—M‘M¡%¨£*Ô-Ù—M‘M !¡D©±©Ð"6Ô7Ù—M‘M¤#¡d£)Ô,Ù—M‘M¤&¨°SÓ"9Ô:Ù™‘’ð 3ô �M‰M˜"¨DÕ1Ûœ#™f›+¬¨J«Ò7÷Pô  ˜MÒ/¨RÓ0á=Eó4Gá=E¸ô <?¸qÀ¹t»9ÈaÐPQÉdÚ<FÀqÈÁtÓ<Ló5Nà=Eñ4Gñ G‘ô œrŸy™y©Ó0×6Ñ6Ó8×?Ñ?ÓAò SÉ&ñ SÙ(0ðSÙ45ðSÙ:<ñSá*4ñSáBMñSñ ,7ñSñ >BñSñ NWñSñ -9ñ	Sñ ENñ	Sñ
 ,7ñSò
 DJñSñ (/ñSò <BñSð -9¸1Ò,<ñSò MQñSò *0ñSñ ?KñSñ *3ðSñ >FñSñ ,7ñSñ /=ñSñ EJñSñ ,7ñSñ FRðSð Sñ Ü�M‰M˜"¨DÕ1Ø—)‘)ÒB°X¸b¸q±\ÓBÓB‰CÜ�8‹}˜qÒ Ù‘¬#¨h«-¸!Ñ*;Ñ<Ñ<‘Üô
 ÙP\ÒLÐbdÒdÙ>J�Hœ|¨LÓ9Ñ9ÐRðTóUð Uð QSÐRðTóUð Uð ‘ÒñXˆ�‰ä
�'‰'�,‰,�r™9Ó
%�CÜ‰c‘5˜% ¬Ò+@¹CÓ+@Ó(@Á%ÈÈBÙ±©2¸dÐPZö\ô 
�‰‹�BÜ	�‰œ¡$©Ð.°BÀtØ!©)¹Sõ
B�Bä�9‰9‹;™Ñ�DÜ
�'‰'�,‰,�r™9Ó
%�CÜ�7‰7�>‰>™#Ô¡.¹¿¹ºÀbÑ"IÙ—	‘	’˜R¡ Ð(©B¯I©IªO¸¹T¸UÐ+CÑC‰Ü�‰�b¨Õ-ÜÑ6¹Ñ=Ó>Ð>å"+©C´±U³Ó"<Ñ�D‰&‘%™Ý	‘6Ó	�BÜ�9‰9�>‰>™$ Qˆ>Ó'�Dñ
 ”—’™VÓ$Ñ
%�CÙœT¤#¡c£(›^Ð,�HÜ
‰3„xÙ�‰Ü¤¤b§i¡i±£nÓ 5°qÓ9ÜœU¤2§=¢=±±bÓ#9Ó:¸AÓ>ÜœU¡3§7¡7£9Ó-¨qÓ1Üœ™S›“]ò	
ô 	ð �JÙ’[˜b×'Ñ'Ö)‰‰‰SÙ”eœBŸFšF¤2§:¡:©c´5Ó#9¹4ÄÁCÃ¹>ÓJÓKÑKŠ
ð *ô
 ‘mÖ$‰Ù”eœBŸFšF¡5¬©S«¡?±D¼¹S»±NÓCÓDÑDŠ
ð %ô �j‰jœ¤Ò#8±CÓ#8Ó 8Ó9ÄÔE�GÜ/2±7¬|ŒR�V‰V‘E™'‘N¨Õ+ÄÇÁÈ!Ã�FÜ�WŠW”S™“Z¤tÔ,�FÜ
‰7„|Ø‰‰w‰Ü‘E—J’J“LÓ!¤D©Ó$7Ô7ˆØ ‰Œs�3‹xÒð 8ä�v‰v‘e™F‘m¨!Ô,�HÚ49ŒB�F‰F”4™Ÿš›Ó'¨aÕ0¼r¿x¹xÈ»{�EÜ”"—)‘)—.‘.¡Ó'Ó(�EÜ”b—i‘i—n‘n¡VÓ,Ó-�Iô �V‰V‘E Ô"�FÙˆt‚|Üœ"Ÿ)™)Ÿ.™.©Ó0±5Ñ8¹5Ñ@ÓA‰	Üœ"Ÿ)™)Ÿ.™.©±%©Ó8¹5Ñ@Á5ÑHÓI‰	Üœ"Ÿ)™)Ÿ.™.©Ó2±UÑ:¹UÑBÓCŠ	à,0Ð0‰	Ð0‘I¡	áÚ+1Ó2©6 aœ˜q�¨6Ñ2Ú',Ó-¡u !”U˜1•X uÑ-á%äœrŸy™yŸ~™~©fÓ5Ó6Ù(Ù!¨Ð-ÒB±)¸sÑ2Bô "¤"§)¡)§.¡.±Ó":Ó;Ù"Üœ™W›Ó&ò#�Jô> �8‰8”C™“J¤dÔ+�DØ�Mó ‰ˆ‰RÙ�‹6Ø`d‰D”—‘—‘¡¬¯
©
°2´uÓ(=Ñ =ÀA�ÓFÉ"É}ÑJ\Ñ\Ò]ð ô �h‰h”s™5“z¬Ô.�GÜ
‰7„|Ø‰‘ÑÜ‘E—J’J“LÓ!¤D©Ó$7Ô7ˆØ ‰”�C“Òð 8áñ 	•¡¨´±E³
Ó;Ñ;‰Ù‰G�O�DÜ‰t�x‰x‹z‹?�Dô �x‰xœ™E›
¬$Ô/�HÙ&Ò,¨"Ò,‰‰‰d�BØ!‰”‘S“ÑÜ™–(ˆBØ&*‰H”S™˜b™“]Ò#ñ ð -ô ‘X—\‘\“^Ó$�JÚÙ•¡¨%´±U³Ó<¹xÑGÑG‰Ü‘—‘“
‹O™dÑ"�Eô ÒE 8§<¡<±Ó#=Ò#CÀÐ#CÓEÓE�GØ�LÚÜˆBÜ�2—6‘6˜) RÓ(Ó)©WÒ4Ø*.‘�R˜‘X˜b ™hÐ'Ù Ñ!’ð ô ‘—‘“‹_™tÑ#¡eÑ+�Fä‘��{‰{‹}Ó�DÙ”eœC¡›JÓ'Ñ'©%Ñ/�Hñ œC¡¤C©£J±Ñ$5Ó6Ñ6�MÚÜ�x‰x™˜d¡BÓ'‰Ü”B—I‘I™d“OÓ$Šä”B—I‘I™b“MÓ"‰ä™$Ÿ(™(›*“o©tÄÁxÐQRÓASÙ¡±6Ù$±lÙ&Üœ3ÒLÁÓLÓLÓMÜ‘}Ó%ò�Iò +8Œb�h‰h‘t˜T¡2Ô&¹R�GÜ�JŠJ‘wÓ¡ " Ñ%�EØ”s˜4Ÿ8™8›:©Ñ,©cÓ2€L�D‰&ÜˆÜ‰t‹9˜Š>ÙÙ�1‰:˜Š>ÙÜ×JÐJÂTÓJÕJÙ�K‰Kœ˜A›Õð ò Ü”B—I‘I™b“MÓ"Ð#‰ô ‰u‹:�DÜ”—	‘	™"“Ó�EÜ”—	‘	™$“Ó �EÙ�‰G�Eð �HÚ�Y &Ó(ª[Ø�D‘	�OÑ+‰ÜˆAØ Ñ"ØÙ�a˜
‘mÑ$ˆAÜ7:¸1¿5¹5ÀÈbÓ;QÔ7R��8‘˜Q˜{™^Ñ,ªQ°°°¨UÒ3ÐX\‰BÙˆz¤¡R¤ØÝ$¡U©BÓ/‰BÙ�QŠwØÙœ"Ÿ)™)¡B›-Ñ(×-Ñ-°1Ð-Ó5‰Eà˜4™ ! D¡'‘$‰DÜ—‘˜!“‰BÜ—‘˜!“‰BÙ"Ÿ[™[ž]‘	‘‘cÙ™4Ô&¡$Ö&Ù™#‘I‘BÙœ"Ÿ(™(¡5©¡;±Ñ#6¹Ó<Ñ<’Bð +ô ô W¡Ió Wó W‰Fä�y‰y�~‰~™bÓ! DÒ(ÙØ™rÑ!ˆBØ™r Q™wÑ&©Ñ,‰BÜœŸ	™	Ÿ™¡rÓ*¨RÑ/Ó0‰CÙ46¸²F”%œŸ	™	Ÿ™¡rÓ*©RÑ/Ô0À‰CÜ�Ÿš¡3¨!¡8¨c±C¸1±H©nÑ#<Ó=Ó>‰DÙ ‘{‰GÙ�O‰OábÙ! ! C¡&™M¨)Ñ4±e¸A¸c¹F±mÀKÑ6PÙ! !¡C¡&™M¨)Ñ4±e¸A¹c¹F±mÀKÑ6PÙ ð-ñ-ñ —l‘l“nÜ ¤§¡§¡±Ó!3Ó4Ú02Ó3±¨1œe A�h°Ñ3Ü#¤B§I¡I§N¡N±2Ó$6Ó7Ü"'¨¯©¨l¸AÓ(>Ò(CÀ!Ó"DÙ¨kÙ©SÙ $´5¹³<Ü™T¡E™\©EÑ1Ó2Ü ¡›MÚ '™ñ Vò#ö ð; ðl �IØ�FÒ™{²8ñ}‰	ð �IØŠ˜BŠˆØ�f‰f�ZÓ ‰Ùˆ;œc¡#œhØÙ�B�s‘G‰n˜YÑ'©¨r°*©~Ñ)>¸yÑ)IÐJˆÜ Ÿf™f¡U©3¡Z°aÔ8Ø)+¯©°Ó)?Ü%'§Z¡Z±´R·X±XÓ%>Ü!¤#¡c£(›m°[òB‰	�"Šð ô “—‘™ZÓ(Ò.¨BÒ.‰Ù�g‰g�jÓ!‰Ùˆ;œc¡#œhØÜ‘#�c‘(‹mœS¡ S¡›]Ð+ˆØ‘‰?˜r !™u b¨¡e˜n±	Ñ9ØÜ Ÿf™f¡U©3¡Z°aÔ8Ù),¯©°Ó)@Ü%'§Z¡Z±´R·X±XÓ%>Ü!¤#¡c£(›m°Xò?‰	�"Šð /ð[Ø—,‘,Ð2Ó3ò 9Ø—\‘\ .Ó1ò9Ù58ñ 	å):Ù�5™"™f¡f©d°F¸A¸rÀ2Ù�:™x©´5¹³=ó*BÑ&‰	‘9™hð\Ùˆdð\á�&ð\ñ 	¸&ÁKÒ:OÒ6ÙJð	\ð
 	�ð\ñ 	˜ð\ñ 	”| LÓ1ð\ñ 	ÑYeÓfÑYeÐTU 1 T¡7°A±f±IÀaÈÁhÓOÐYeÑfÜ! -Ò"5°2Ó6ñ7ð\ñ 	œ˜]Ò0¨bÓ1ð\ñ 	˜X¨s±6©{ÀQÈbÐ\^Ò_ð\ð 	œ#œc¡%›j›/´s¼3¸u»:³ÐPUÒbÐYaÐbð\ñ 	ˆgð\ñ  	ÒTY”Uœ2Ÿ9™9Ÿ>™>¬"¯&©&´±e·l²l³nÓ1EÈAÔ*NÓOÔPÐ_bð!\ñ$ 	”u˜W“~ð%\ñ& 	”U˜8“_ð'\ñ* 	‘Jð+\ñ, 	‘j¡Ñ.ð-\ñ. 	™JÑ'9Ñ:ñ/\ñ2 	œ˜]Ó+ð3\ñ4 	˜˜Q™¨¨a©¸$¸q¹'ÒBð5\ñ8 	‘yð9\ñ> 	™ð?\ñ@ 	œ%¤¡jÓ 1°1Ó5ðA\ñF 	‘iðG\ñN 	™yðO\ñP 	™8ðQ\ñR 	ô !&¡b©¡h£Ù$¡T™{×1Ñ1Ó3Ü$¡U©4¡[±5Ñ%8Ó9Ù57¹±XÀ²\œU 2©©4©¡=Ô1ÀtÚ!.’X±Hä!&¡r©%¡yÓ!1Ù %¡e¡× 3Ñ 3Ó 5Ü$)©%±©,¹Ñ*>Ó$?Ù;=¹e¹9Àqº=¤%¨©R±©Y©Ô"7ÈdÜ ¡¡e¡Ó-Ù ¡™<×.Ñ.Ó0âCGóIÙCG¸añ !& a¡§¡Ó 1¼%ÁÀ1Á»,Ü!&¡u¨Q¡x±%Ñ'7Ó!8ô:ØCGñIò
ðS\ðv 	‘ðw\ñx 	‘Yðy\ñz 	�Yð{\ñ| 	”U™4 “^ð}\ð~ 	�Hð\ñD 	Ú(ô 68·V±V¹EÄ&ÉÓBWÑ<XÐ_`Õ5aÓbÑ5a°œœu Q›x¨Õ+Ð5aÒbØ.2ðG\ñL 	à-;×-AÑ-AÔ-Cõ!Já-C¡T Q¨Áqñ #*¨A¡+Ü13·±¹¼fÄSÈÃV»nÑ8MÐTUÕ1Vó1XÙ1Vð IJ´´u¸Q³xÀÕ1CØ1Vñ1Xñ #Xà-Có!JðM\ñV 	"à0=×0CÑ0CÔ0Eô$Lá0E©¨¨1Éñ &-¨q¡[´3´s¸1¿7¹7»9Ú?Mô8OØOPñ8Ró 4Sñ &Sà0Eò$LñW\ñ\ 	ÙŸ™ Q›×/Ñ/°Ó3×:Ñ:Ó<Ù™e‘m×*Ñ*¨1Ó-×4Ñ4Ó6á—J‘J˜q“M×)Ñ)¨"Ó-×4Ñ4Ó6ÙŸ™ ›×*Ñ*Ó,ñ —K‘K¤§¢Ó)×0Ñ0Ó2ô —h‘hœrŸ{š{©6Ó2±F¸DÓA×GÑGÈÓJ×QÑQÓSØ—|‘| BÓ'×.Ñ.¬sÓ3×:Ñ:Ó<ò
ñ]\�Cò~ ›)ªHÙ u±dò LQóRáKPÀRð  " )™}°b¸±oØ! $™x¨r°$©xØ!# F¡°R¸±ZôAàKPñRð ,¹Ü¡›-ò)ˆð $¨!°2ÀØ)¸	Ø)°gØ)ò+‰ð	HÝ¡	¨2©s¼#¸nÓ:MÐTYÕZ‰Dñ ‰‰G‰ô ‰CÙ™‘I�;±C·G±G¹HÓ4EÒ4KÈÐ4KÓ!MÑ4K¨a !¡D£'Ð4KÑ!MÑM‰DÙ™<Ô(‘Üõ UÚOSóUõ Uá#&‘C™‘LÜ24·+²+ÜŸ
™
¡3¡t¡9¬eÓ4ÜŸ
™
¡3¡t¡9¬eÓ4¹4ö3A©$ñ ;>¹dº)ÓD¹)°Qœe¤E¨!£H¨aÕ0¸)ÑDñ ™Ò&ñ	 )ð ñ á#(°5Á$ÑQVÙ "©Dò
 /4ó	$5ñ /4¨ð	 ,.¨i©=À"À[Á/Ø+-¨d©8¸2¸d¹8Ø+-¨d©8¸2¸d¹8Ø-/°©ZÀÀFÁô%Mð /4ñ	$5ð
 )8ÁYÜ&+©F£mò5‰‰I‰ñ Ø‰‰I‰ñ €Jô 	�‰�b¨Õ-Ù€JùóA- <ùô Uùô
 @ùÚ:ùòH (Tùô DùÚ>øôv ò Ø×#Ñ#©5°«:¼vÀjÐRUÓ?VÜ,<¸SÀ%ÈÁ)ÈRÓ,Pñ%Rô Såûðüóv#IùòN QùòH =ùÚ,ùò$ "<ùò2 Yùò  :ùâ:ùòn &>ùò8 3ùóR %Tùô $7ùò: %9ùò. +Oùò* )Mùò (Eøô ò ;ÙÙÐ4°rÑ9Ô:ÿùð;üò/ùò !>ùÚ3ùò	DùóLùóPùâ9ùÚ9÷ <Ñ;ûô
 ó DÙÚºDÐBÔCÿýðDüò =ùòH4Gùò` 3ùÚ-ùò| 4øôz ó [Ø! 2‘9‰	Û½tÁD»z×?RÕ?RÒTXÐYÐZ�‰ýð[üò gùò\Iùò cùò1Xùô !Jùó
$Lùò,Røô ó 	HØ‰DÝ-1±$«Z×-@Õ-@Â$Ð!G‰C‘×Ñýð	Hüò "Nùò Eùò
$5sÚ  ÈDe<É%DfÊ!Df	Ë DfÏ'
DfÏ2DfÒ.DfÓDf!ÖIDf&ÁD&.Dg0ÁL;Dg6ÁMDg6ÁVDg;ÁV'Dh ÁV8Dh Á\DhÁe=+Dh
Ág>Dh
ÁiDh
Â@Dh
ÂFDhÂJDh)ÂJ6Dh#ÂKDh#ÂK	Dh)ÂP9Dh0ÂR
B(Di ÂT2Dh5ÂUEDi ÂZ&Dh:
ÂZ;A Di Â[;Dh?Â\ADi Â^,Dj Â^?BDi(ÂaDj Âa$Di-Âa9Dj Âa?Di2
ÂbB#Dj Âd4DDi7Âh:(Dj Âi"9Di< ÂjBDj Âl#DjÂmDj ÂmDjÂm% Dj ÂnDjÂnD8Dj Âs	DjÂs"<Dj Âv )Dk	ÃA-&DkÃ^DkÃ^ DkÃ~9DkÄHADk" ÄJDl)ÄS>Dl. ÄUDl3
ÄV>Dl=ÄW
Dl8ÄW&Dl=ÄX:DmÄ^'#Dm

Ä_-Dm Ä`:DnÄcDnÄd+DnÄf&	Dg-Äf/3Dg(Äg(Dg-Äh#Dh)Äh5Di Äi	Di%ÄiDi Äi Di%Äi(*Dj ÄjDjÄjDj Äj
DkÄj)Dj?Äj?DkÄk"
Dl&Äk,+DlÄlDl&Äl8Dl=Äm
DnÄm'DnÄnDnc                 óX   — |||f|||ffD ]  }|D ]  }|j                  | |   «       Œ Œ y rï   ©rç  )r‘   rO   rP   rQ   r.  rz  r¹   rá   s           r3   Ú_quadrâ  ë  s7   € Ø�!�Qˆi˜!˜Q ˜Ó#ˆÛˆAØ�J‰J�s˜1‘vÕñ ñ $r5   c           
      ó  — g d¢| ddg| |dgd|dgdd|g| d|g| ||gd||gg}g }t        |dddd|«       t        |dddd	|«       t        |dddd|«       t        |dddd|«       t        |ddd	d|«       t        |dddd	|«       |S )
N)r   r   r   r   r   r   r   rw   rß  r¥   rà  )râ  )rg   rP   r¹   rQ   r×   s        r3   Ú
make_platerä  ñ  s¸   € Ú	�Q˜˜1�I  1 a˜y¨1¨a°¨)Ø
ˆQ�ˆ�Q˜˜1�I  1 a˜y¨1¨a°¨)ð	5€Aà
€AÜ	ˆ!ˆQ��1�a˜ÔœU 1 a¨¨A¨q°!Ô4Ü	ˆ!ˆQ��1�a˜ÔœU 1 a¨¨A¨q°!Ô4Ü	ˆ!ˆQ��1�a˜ÔœU 1 a¨¨A¨q°!Ô4Ø€Hr5   c                 óR   — |||f|||ffD ]  }|D ]  }| j                  |«       Œ Œ y rï   rá  )r×   rc   rd   re   rš   rb   rh   s          r3   Ú
_emit_quadræ  û  s2   € Ø�R˜�˜r 2 r˜lÓ+ˆÛˆAØ�H‰H�Q�Kñ ñ ,r5   c                 óú  — |d|z  z
  |d|z  z
  }}dt        | «      }}d„ } |||«       |||«      }
}	g }t        d«      D �]7  }|dz   dz  }t        |||	|   d   |	|   d   g||	|   d   |	|   d   g||	|   d   |	|   d   g||	|   d   |	|   d   g«       t        |||
|   d   |
|   d   g||
|   d   |
|   d   g||
|   d   |
|   d   g||
|   d   |
|   d   g«       t        |||	|   d   |	|   d   g||	|   d   |	|   d   g||
|   d   |
|   d   g||
|   d   |
|   d   g«       t        |||	|   d   |	|   d   g||
|   d   |
|   d   g||
|   d   |
|   d   g||	|   d   |	|   d   g«       �Œ: |S )u:  ê°�íŒŒì�´í”„(ì§�ê°� ëª¨ì„œë¦¬, ì†� ë¹”). H=ì¶¤(í•˜ì¤‘ ë°©í–¥ z), B=í�­(y), t=ë‘�ê»˜.
    êµ¬ì„±: ë°”ê¹¥ ì˜†ë²½ 4ìž¥ + ì•ˆìª½ ì˜†ë²½ 4ìž¥ + ì–‘ ë�� ì‚¬ê°� ë§�(ë�„ë„›) â€” ë��ë©´ì�€ ë§‰ì§€ ì•ŠëŠ”ë‹¤.
    â€» ë°”ê¹¥ì�€ ë²•ì„ ì�´ ë°”ê¹¥, ì•ˆìª½ì�€ ë²•ì„ ì�´ ì•ˆìª½(=êµ¬ë©� ìª½)ì�„ í–¥í•´ì•¼ ë‹«ížŒ ì†”ë¦¬ë“œê°€ ë�œë‹¤.r=   r>   c                 óV   — |  dz  | dz  f| dz  | dz  f| dz  |dz  f|  dz  |dz  fgS )Nr   rÅ  )rP   re  s     r3   Úrectzmake_rhs_tube.<locals>.rect  sK   € Ø��a‘˜!˜˜a™Ð  1 q¡5¨1¨"¨q©& /°A¸±E¸1¸q¹5°>ÀQÀBÈÁFÈAÐPQÉEÀ?ÐSÐSr5   rw   r   r   )r!   r  ræ  )rg   ÚHr7  r¹   r&  ÚbiÚx0Úx1ré  ÚOÚIr×   rÆ  rÇ  s                 r3   Úmake_rhs_tuberð    s2  € ð ��q‘‰[˜!˜c A™g™+ˆ€BØ”%˜“(ˆ€BòTñ ��1‹:‘t˜B “|€q€AØ
€AÜ�1�XˆØ�‰U�a‰Kˆä�1�r˜1˜Q™4 ™7 A a¡D¨¡GÐ,¨r°1°Q±4¸±7¸A¸a¹DÀ¹GÐ.DØ˜1˜Q™4 ™7 A a¡D¨¡GÐ,¨r°1°Q±4¸±7¸A¸a¹DÀ¹GÐ.Dô	Fô 	�1�r˜1˜Q™4 ™7 A a¡D¨¡GÐ,¨r°1°Q±4¸±7¸A¸a¹DÀ¹GÐ.DØ˜1˜Q™4 ™7 A a¡D¨¡GÐ,¨r°1°Q±4¸±7¸A¸a¹DÀ¹GÐ.Dô	Fô 	�1�r˜1˜Q™4 ™7 A a¡D¨¡GÐ,¨r°1°Q±4¸±7¸A¸a¹DÀ¹GÐ.DØ˜1˜Q™4 ™7 A a¡D¨¡GÐ,¨r°1°Q±4¸±7¸A¸a¹DÀ¹GÐ.Dô	Fä�1�r˜1˜Q™4 ™7 A a¡D¨¡GÐ,¨r°1°Q±4¸±7¸A¸a¹DÀ¹GÐ.DØ˜1˜Q™4 ™7 A a¡D¨¡GÐ,¨r°1°Q±4¸±7¸A¸a¹DÀ¹GÐ.Dö	Fð ð €Hr5   c                 ó@  — t        j                  | d   d   «      j                  dd«      }t        j                  | d   d   «      }t        j                  |dd…df   |z
  «      |k  }|j	                  «       rt        ||   j                  «       «      S t        d«      S )	u  ê¸¸ì�´ì¶•(x) íŠ¹ì • ë‹¨ë©´ ê·¼ì²˜ ì ˆì �ë“¤ì�˜ ìµœëŒ€ von Mises.
    â˜… ê³ ì •ë‹¨ ë°”ë¡œ ì˜†ì�€ êµ¬ì†�ì—� ì�˜í•œ ì�‘ë ¥ì§‘ì¤‘(ìˆ˜ì¹˜ íŠ¹ì�´ì �)ì�´ë�¼ ë‹¨ë©´ êµ½íž˜ì�‘ë ¥ê³¼ ë¹„êµ�í•˜ë©´ ì•ˆ ë�œë‹¤.
      ê·¸ëž˜ì„œ ê³ ì •ë‹¨ì—�ì„œ ì¶©ë¶„ížˆ ë–¨ì–´ì§„ ë‹¨ë©´ì—�ì„œ ë¹„êµ�í•œë‹¤.rÙ  r(   r   r   rÛ  Nr   rL  )r   r^   r"   rH   r˜   r!   r·   )rT  Úx_atrô  rh   rÈ  rû  s         r3   Ú_section_stressró     s„   € ô 	�‰��5‘˜+Ñ&Ó'×/Ñ/°°AÓ6€AÜ	�‰�!�E‘(˜:Ñ&Ó	'€BÜ
�&‰&�’1�a�4‘˜4‘Ó
  DÑ
(€CØ#&§7¡7¤9Œ5��C‘—‘“ÓÐ>´%¸³,Ð>r5   c                 óf  — |d   }||dz  z  d|z  |z  z  }	|d   d   }
|
|	z
  |	z  dz  }|||z
  z  |z  |z  }t        ||t        |dz  d«      «      }||z
  |z  dz  }t        d	| z  «       t        d
|d   z  «       t        d|d   |d   |d   |j                  dd«      |j                  dd«      |j                  dd«      fz  «       t        d|z  «       t        d|
|	|fz  «       t        d||||fz  «       t        d|d   |j                  dd«      fz  «       t	        |«      t	        |«      fS )u`   ì²˜ì§�(ì „ì²´) + ë‹¨ë©´ êµ½íž˜ì�‘ë ¥(ê³ ì •ë‹¨ì—�ì„œ ë–¨ì–´ì§„ ê³³) ë‘� ê°€ì§€ë¡œ ì�´ë¡  ëŒ€ì¡°.rÖ   r   r¯  rR  rS  r�  rZ  g       @z  %su       ë°©ì‹�      : %sr¸  ud       ë©”ì‹œ      : %s %dê°œ / ì ˆì � %dê°œ (ë²½ë‘�ê»˜ì¶”ì • %.2fmm, ë²½ë‹¹ %.2fìš”ì†Œ, ìš”ì†Œ %.2fmm)r¢  rN  r¬   rB   r   rm  rl  u(       ë‹¨ë©´2ì°¨ I : %.0f mm^4 (ì†�ê³„ì‚°)u<       ì²˜ì§�      : FEM %.4f / ì�´ë¡  %.4f mm      â†’ %+.2f%%uK       êµ½íž˜ì�‘ë ¥  : FEM %.2f / ì�´ë¡  %.2f MPa  (x=%gmm ë‹¨ë©´) â†’ %+.2f%%u,       í’€ì�´ì‹œê°„  : %.1fì´ˆ (ì „ì²´ %.1fì´ˆ)rg  Ú_total)ró  r·   ÚprintrÜ   rH   )ÚtitlerT  rï  rQ   rg   r*   r   Úx_chkrÊ   Úth_dÚfdÚedÚth_sÚfsigÚess                  r3   Ú_checkrÿ  *  ss  € à	ˆ&‰	€AØˆq�A‰v‰:˜˜q™ 1™Ñ%€DØ	
ˆ8‰�]Ñ	#€BØ
ˆt‰)�tÑ	˜eÑ	#€BØ��E‘	‰?˜QÑ Ñ"€DÜ˜1˜e¤S¨¨T©°3Ó%7Ó8€DØ
�‰+˜Ñ	 Ñ	%€BÜ	ˆ&�5‰.ÔÜ	Ð
  1 [¡>Ñ
1Ô2Ü	Ð
pØˆv‰Y˜˜*™ q¨¡z°1·5±5¸ÀAÓ3FØ�U‰U�> 1Ó% q§u¡u¨^¸QÓ'?ðAñAô Bô 
Ð
4°qÑ
8Ô9Ü	Ð
HÈBÐPTÐVXÈ>Ñ
YÔZÜ	Ð
WØ�4˜ Ð#ñ$ô %ä	Ð
8¸A¸k¹NÈAÏEÉEÐRZÐ\]ÓL^Ð;_Ñ
_Ô`Üˆr‹7”C˜“GÐÐr5   c                  óŒ   — t        j                   «       }t        di | ¤Ž}t        t        j                   «       |z
  d«      |d<   |S )Nr   rõ  rÅ  )rž  rŸ  r$   )rÄ  rÈ  rT  s      r3   Ú_timedr  @  s8   € Ü	�‰‹€BÜ‰�"‰€AÜœŸ	™	› bÑ(¨!Ó,€A€h�KØ€Hr5   c                  óÂ  — g } d}t        d|z  «       d\  }}}t        t        |||«      |d¬«      }|d   d   }t        d|||d	z  z  d
z  |dz  ||||dz  «      \  }}|dkD  s|d   dk7  r| j	                  d|z  «       d\  }	}
}}|
d|z  z
  |d|z  z
  }}|
|d	z  z  ||d	z  z  z
  d
z  }||
d	z  z  ||d	z  z  z
  d
z  }t        d|
|||	|fz  «       t        d«       t        d||||
d	z  z  d
z  fz  «       t        t        |	|
||«      |d¬«      }t        d|||dz  |	||d   d   d«      \  }}|dkD  s|d   dk7  r| j	                  d|z  «       t        d«       t        t        |	|
||«      |dd¬«      }||	d	z  z  d|z  z  }t        d|d   d   |fz  «       t        d ||d   d   z  |d   d!   |d   d!   fz  «       t        d"| sd#nd$t        | «      z   «       | sd%S d&S )'Nrî  uR   
[ê²€ì¦� 1] íŒ�ìž¬ ì™¸íŒ”ë³´ 300 x 40 x 6 mm, ë��ë‹¨ %gN (ìž�ë�™ ì™¸íŒ”ë³´ ì¡°ê±´))r‹  r  r:   r   )r(   rx  ry  ry  r½  u   íŒ�ìž¬(ì†� ì°¬ ë‹¨ë©´)r   g      (@r   r7   r±  rÊ  ró  u   íŒ�ìž¬ ì²˜ì§� %.1f%%)rî  r�  g      I@g      @uD   
[ê²€ì¦� 2] ê°�íŒŒì�´í”„(ì†� ë¹”) %gx%gx%gT, ê¸¸ì�´ %gmm, ë��ë‹¨ %gNuJ            â€» 1ë‹¨ê³„ ì™¸ê³½ìƒ�ìž� ë°©ì‹�ì�´ ê°€ìž¥ í�¬ê²Œ í‹€ë¦¬ë�˜ í˜•ìƒ�uS            ì†�ê³„ì‚° I: ì•½ì¶• %.0f / ê°•ì¶• %.0f mm^4 (ì†� ì°¬ ìƒ�ìž�ì˜€ë‹¤ë©´ %.0f)r   u   ê°�íŒŒì�´í”„(ì•½ì¶• êµ½íž˜)g      y@u   ê°�íŒŒì�´í”„ ì²˜ì§� %.1f%%u`   
[ë¹„êµ�] ê°™ì�€ ê°�íŒŒì�´í”„ë¥¼ 1ë‹¨ê³„(ì™¸ê³½ìƒ�ìž�=ì†� ì°¬ ê²ƒìœ¼ë¡œ ë´„) ë°©ì‹�ìœ¼ë¡œ í’€ë©´T)r(   rx  ry  r{  g    °Ä"Au=       ì²˜ì§� %.4f mm  â†�â†’ ì‹¤ì œ ê°�íŒŒì�´í”„ ì�´ë¡  %.4f mmrR  rS  ul       â†’ 1ë‹¨ê³„ëŠ” ì�´ ë¶€ìž¬ë¥¼ %.1fë°° íŠ¼íŠ¼í•œ ê²ƒìœ¼ë¡œ ìž˜ëª» ë´¤ë‹¤(ì�‘ë ¥ %.1f â†’ ì‹¤ì œ %.1f MPa).rU  u   
íŒ�ì •:ÚPASSzFAIL r   r   )rö  r  rä  rÿ  rß   rð  rO  )Úfailsr*   rg   rP   r¹   rT  r   rû  rþ  r  rê  r7  Út2r&  rë  ÚI_weakÚI_strongr°  Úed2Úes2r±  Ú	th_hollows                         r3   Úselftestr  G  sŽ  € Ø€EØ€Aô 
Ð
_ÐbcÑ
cÔdØ�G€A€qˆ!Üœ A q¨!Ó,°QÀÔI€AØ	ˆ*‰�gÑ€AäÐ,¨a°°Q¸!±V±¸cÑ1AÀ1ÀqÁ5È!ÈQÐPQÐSTÐWZÑSZÓ[�F€BˆØ	ˆB‚w�!�H‘+ Ò,Ø�‰Ð+¨bÑ0Ô1ð )�L€Bˆˆ1ˆbØ��R‘‰Z˜˜Q ™V™ˆ€BØ�!�q‘&‰j˜2  a¡™<Ñ'¨3Ñ.€FØ�A˜‘F‘
˜R "¨¡'™\Ñ)¨SÑ0€HÜ	Ð
QÐUVÐXYÐ[]Ð_aÐcdÐTeÑ
eÔfÜ	Ð
VÔWÜ	Ð
_Ø�X˜q 1¨¡6™z¨CÑ/Ð0ñ1ô 2ä	œ-¨¨A¨q°"Ó5¸aÈ)Ô	T€BÜÐ3°R¸ÀÀQÁÈÈAÈrÐR\É~Ð^eÑOfÐhlÓm�H€CˆØ
ˆR‚x�2�h‘< ;Ò.Ø�‰Ð1°CÑ7Ô8ô 
Ð
mÔnÜ	œ-¨¨A¨q°"Ó5¸aØ"¨dô
4€Bà�B˜!‘G‘˜{¨VÑ3Ñ4€IÜ	Ð
IØ�‰\˜-Ñ(¨)Ð4ñ5ô 6ä	Ð
xØ˜˜H™ mÑ4Ñ4Ø�‰\Ð,Ñ-¨r°(©|Ð<NÑ/OðQñQô Rô 
ˆ+¡U‘v°¼#¸e»*Ñ0DÔEÙˆ1Ð ˜qÐ r5   c            
      óŒ  — ddl } t        j                  j                  t        j                  j	                  t
        «      «      }t        t        j                  t        j                  j                  |ddd«      d¬«      «      }t        dt        |«      z  «       | j                  «       }g }|D �]ñ  }g g }}	 t        |d	¬
«      D ]Ì  }|j                  «       }	|	sŒ|	d   dk(  r9|j                  t        |	d   «      t        |	d   «      t        |	d   «      g«       ŒW|	d   dk(  sŒ`|	dd D �
cg c]"  }
t!        |
j                  d«      d   «      dz
  ‘Œ$ }}
t#        dt        |«      dz
  «      D ]"  }|j                  |d   ||   ||dz      g«       Œ$ ŒÎ 	 t        |«      dk  rK|dxx   dz  cc<   |j                  t        j                  j'                  |«      dt        |«      z  f«       �Œ?t)        j*                  |«      }|t)        j*                  |t         ¬«         j-                  d«      }t/        |«      \  }}t1        ||«      }|d   r|dxx   dz  cc<   �Œ¯|dxx   dz  cc<   |j                  t        j                  j'                  |«      d|d   z  f«       �Œô t        dt3        |«      «       |r-t        d«       |dd D ]  \  }}t        d |dd! d"›d#|›�«       Œ yc c}
w # t$        $ rK}|dxx   dz  cc<   |j                  t        j                  j'                  |«      d|z  f«       Y d}~�ŒŽd}~ww xY w)$uS   ì œí’ˆ OBJ ì „ìˆ˜ ì¡°ì‚¬ â€” ë‹«ížŒ ì†”ë¦¬ë“œ ë¹„ìœ¨ê³¼ ì‚¬ë©´ì²´ ë©”ì‹œ ì„±ê³µë¥ .r   NÚ
fab_modelsz**z*.objT)Ú	recursiveu   ì¡°ì‚¬ ëŒ€ìƒ� %dê°œ
rl   ru   r›   r   r   r   ra   rØ  u   ì�½ê¸°ì‹¤íŒ¨zread: %srw   u	   ë©´ë¶€ì¡±u	   ë©´ %dê°œr   r   r?   u   ë‹«íž˜u   ì—´ë¦¼u   ì—´ë¦°ì—£ì§€ %dê°œrC   u   ê²°ê³¼:u   
ë¬¸ì œ í˜•ìƒ� (ìµœëŒ€ 15ê°œ):é   z   é.   Ú46Ú )Úcollectionsrx   r`   ÚdirnameÚabspathÚ__file__r  rz   ry   rö  r#   ÚCounterr\   rƒ   rß   r!   rN   r  r²   Úbasenamer   r^   r"   r4   rX   rœ  )r  r³  Úfilesr¢  rœ   rÂ  ÚVlÚFlr“   rh   ré   r*  rá   rU   r0   r¼  ÚVwÚFwrÊ   r+   rZ   s                        r3   Úsurveyr  r  sÊ  € ãÜ�7‰7�?‰?œ2Ÿ7™7Ÿ?™?¬8Ó4Ó5€DÜ”4—9‘9œRŸW™WŸ\™\¨$°¸dÀGÓLÐX\Ô]Ó^€EÜ	Ð
!¤C¨£JÑ
.Ô/Ø×ÑÓ €DØ
€CÜˆØ�RˆBˆð	Ü˜2 i×0�Ø—H‘H“J�ÙØØ�Q‘4˜3’;Ø—I‘Iœu Q q¡T›{¬E°!°A±$«K¼¸qÀ¹t»ÐEÕFØ�q‘T˜S“[Ø<=¸a¸b¹EÓB¹E°qœ#˜aŸg™g c›l¨1™oÓ.°Ó2¸E�BÐBÜ" 1¤c¨"£g°¡kÖ2˜ØŸ	™	 2 a¡5¨"¨Q©%°°A¸±E±Ð";Õ<ñ 3ñ 1ô ˆr‹7�QŠ;Ø�Ó Ñ"ÓØ�J‰JœŸ™×(Ñ(¨Ó,¨k¼CÀ»GÑ.CÐDÔEÙÜ�H‰H�R‹LˆØ”—‘˜"¤CÔ(Ñ)×1Ñ1°"Ó5ˆÜ˜4“‰ˆˆBÜ˜˜RÓ ˆØˆXŠ;Ø�‹N˜aÑ�Nà�‹N˜aÑ‹NØ�J‰JœŸ™×(Ñ(¨Ó,Ð.BÀQÀ{Á^Ñ.SÐTÖUð; ô< 
ˆ)”T˜$“ZÔ Ù
ÜÐ/Ô0Ø˜˜“H‰DˆAˆqÝ 1 S b£6©1Ð-Õ.ð àùò3 Cøô ò 	Ø�Ó  AÑ%Ó Ø�J‰JœŸ™×(Ñ(¨Ó,¨j¸1©nÐ=Ô>Ýûð	ús3   Â9A,K/Ä&K/Ä-'K*ÅAK/Ë*K/Ë/	MË8A L>Ì>Mc                  ó  — ddl m} m}  G d„ d| «      }t        j                  t
        d¬«       t        dt        z  «       t        dt        «       t        d	t        «       t        d
t
        «        |dt        f|«      j                  «        y )Nr   )ÚBaseHTTPRequestHandlerÚThreadingHTTPServerc                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)úserve.<locals>.Hc                 óp   — | j                  dd«       | j                  dd«       | j                  dd«       y )NzAccess-Control-Allow-OriginÚ*zAccess-Control-Allow-HeadersúContent-TypezAccess-Control-Allow-MethodszPOST, GET, OPTIONS)Úsend_header©Úselfs    r3   Ú_corszserve.<locals>.H._cors§  s6   € Ø×ÑÐ:¸CÔ@Ø×ÑÐ;¸^ÔLØ×ÑÐ;Ð=QÕRr5   c                 óf   — | j                  d«       | j                  «        | j                  «        y )NéÌ   )Úsend_responser*  Úend_headersr(  s    r3   Ú
do_OPTIONSzserve.<locals>.H.do_OPTIONS¬  s#   € Ø×Ñ˜sÔ# T§Z¡Z¤\°4×3CÑ3CÕ3Er5   c                 óT  — t        j                  |d¬«      j                  d«      }| j                  |«       | j	                  dd«       | j	                  dt        t        |«      «      «       | j                  «        | j                  «        | j                  j                  |«       y )NF)ra  r`  r&  zapplication/json; charset=utf-8úContent-Length)rø  ÚdumpsrK  r-  r'  rO  r#   r*  r.  Úwfiler]   )r)  r¼  ÚobjÚbodys       r3   Ú_jsonzserve.<locals>.H._json¯  s{   € Ü—:‘:˜c°Ô6×=Ñ=¸gÓFˆDØ×Ñ˜tÔ$Ø×Ñ˜^Ð-NÔOØ×ÑÐ-¬s´3°t³9«~Ô>Ø�J‰JŒL˜$×*Ñ*Ô,Ø�J‰J×Ñ˜TÕ"r5   c                 ó”  — | j                   j                  d«      r^| j                  ddt        j                   j	                  t
        «      t        j                   j	                  t        «      t        dœ«       y | j                   j                  d«      r| j                  ddt        t        dœ«       y | j                  ddd	d
œ«       y )Nz/api/fea/pingéÈ   T)r2   ÚccxÚtetgenÚportz/api/fea/materials)r2   ÚdefaultÚ	materialsé”  Fú	not found©r2   rH  )
r`   r…   r6  rx   r   rü  r~   ÚPORTrç  ræ  r(  s    r3   Údo_GETzserve.<locals>.H.do_GET·  s‡   € Ø�y‰y×#Ñ# OÔ4Ø—
‘
˜3 t´B·G±G·N±NÄ7Ó4KÜ+-¯7©7¯>©>¼*Ó+EÌtñ!Uõ Và—‘×%Ñ%Ð&:Ô;Ø—
‘
˜3 t¼ÌiÑ XÕYà—
‘
˜3 u°{Ñ CÕDr5   c                 óš  — | j                   j                  d«      s| j                  ddddœ«       y 	 t        | j                  j                  d«      xs d«      }t        j                  | j                  j                  |«      j                  d«      «      }	 t        j                  t        d	¬
«       t        t        j                   j                  t        d«      dd¬«      5 }t        j                   ||«       d d d «       t%        |j                  d«      xs g ft'        |j                  dd«      «      |j                  dt(        «      |j                  d«      |j                  d«      |j                  d«      |j                  d«      |j                  d«      t+        |j                  d«      «      |j                  d«      xs dt'        |j                  d«      xs d«      |j                  d«      |j                  d«      t+        |j                  d«      «      t+        |j                  dd	«      «      t        |j                  d «      xs d«      d!œŽ}| j                  d"|«       y # 1 sw Y   �ŒtxY w# t"        $ r Y �Œƒw xY w# t"        $ r7}| j                  d"dt-        |«      j.                  ›d#|›�dœ«       Y d }~y d }~ww xY w)$Nz/api/fear>  Fr?  r@  r1  r   r`  Tr7  zlast_request.jsonrZ   r-  r(   rx  rî  ry  r   r   r;  r/  rz  r{  r|  rï  r}  r>   r  r›  rB  rC  rí  )rx  ry  r   r   r;  r/  rz  r{  r|  r}  r  r›  rB  rC  r�  r8  rG  )r`   r…   r6  rN   ÚheadersrÜ   rø  r2  ÚrfileÚreadÚdecoderx   rA  rì  r\   ry   rù  r²   rŸ  r!   rç  rL   r¢  r£  )r)  r+   rg  Ú_lfrÚ  rU   s         r3   Údo_POSTzserve.<locals>.H.do_POSTÀ  s*  € Ø—9‘9×'Ñ'¨
Ô3Ø—
‘
˜3 u°{Ñ CÔDÀfðZÜ˜Ÿ™×(Ñ(Ð)9Ó:Ò?¸aÓ@�Ü—J‘J˜tŸz™zŸ™¨qÓ1×8Ñ8¸ÓAÓB�ð
Ü—K‘K¤	°DÕ9ÜœbŸg™gŸl™l¬9Ð6IÓJÈCØ'.õ0Ø36ÜŸ	™	 ! SÔ)÷0ô
 ˜aŸe™e KÓ0Ò6°Bð NÜ%*¨1¯5©5°¸6Ó+BÓ%CØ'(§u¡u¨Z¼Ó'AØ !§¡ c£
¨q¯u©u°T«{Ø)*¯©¨|Ó)<Ø*+¯%©%°Ó*>Ø*+¯%©%°Ó*>Ü(,¨Q¯U©U°;Ó-?Ó(@Ø()¯©¨kÓ(:Ò(D¸fÜ*/°·±°mÓ0DÒ0KÈÓ*LØ)*¯©¨|Ó)<Ø)*¯©¨|Ó)<Ü+/°·±°nÓ0EÓ+FÜ(,¨Q¯U©U°;ÀÓ-EÓ(FÜ-0°·±°~Ó1FÒ1KÈ!Ó-LòN�ð —
‘
˜3 Õ$÷)0ñ 0ûô !ò Úðûô$ ò ZØ—
‘
˜3 uÄ4ÈÃ7×CSÓCSÑUVÐ7WÑ X×YÑYûðZúsV   ³A%J
 ÂAI: Ã$I-Ã;I: ÄE)J
 É-I7É2I: É:	JÊJ
 ÊJÊJ
 Ê
	K
Ê-KËK
c                  ó   — y rï   rÅ  )r)  rO   s     r3   Úlog_messagezserve.<locals>.H.log_messageä  s   € Ør5   N)	r£  Ú
__module__Ú__qualname__r*  r/  r6  rB  rI  rK  rÅ  r5   r3   rê  r#  ¦  s%   „ ò	Sò
	Fò	#ò	Eò"	ZóH	r5   rê  Tr7  u:   êµ¬ì¡°í•´ì„� ì„œë²„ ì‹œìž‘ â†’ http://localhost:%d/api/feaz
  ccx    :z
  tetgen :u     ìž‘ì—…í�´ë�”(ASCII ì „ìš©):z	127.0.0.1)Úhttp.serverr   r!  rx   rA  rì  rö  rA  rü  r~   Úserve_forever)r   r!  rê  s      r3   ÚserverP  £  sh   € ßGô?Ð"ô ?ôB ‡K�K”	 DÕ)Ü	Ð
FÌÑ
MÔNÜ	ˆ,œÔ Ü	ˆ,œ
Ô#Ü	Ð
)¬9Ô5Ù˜¤dÐ+¨QÓ/×=Ñ=Õ?r5   Ú__main__r7  z
--selftestz--survey)g-Cëâ6?)NiX  )rt  rï   )r¶   Nr§  F)r   r   r   r   r   r   r   )rá  )é   )NNN)rá  gü©ñÒMbp?)r   NN)”Ú__doc__rz   rø  rÿ  rx   rú  rð  r|   ÚsysÚtempfilerž  ré  Únumpyr   rü  r~   r`   ry   rö  rÜ   Ú
gettempdirrì  rA  ræ  rç  rþ  rª  r¬  r«  rî  rï  ry  ró  rí  rM  rJ  r4   rX   ri   r–   r�   r§   r®   r³   rº   rË   rØ   rë   r  r  rR  r  r   r!  r  r  r,  r3  r`  rŠ  r‘  r’  r�  r”  r™  r¦  r¡  rÁ  rÏ  rÞ  rå  rí  r  r  r1  rA  r  rJ  rt  ÚWELD_SEED_PITCH_MMr   r¡  r{  r‚  rŒ  r¬  r‡  rå  ÚFINE_PART_NODE_CAPr·  r¼  rÈ  r  r  r  r  r"  r   r%  r?  rE  rT  rW  ro  rq  r¬  r­  rs  rx  r{  r‹  rÜ  rí  rñ  r÷  rù  rþ  r  r  r  rš  r¡  ÚLOCAL_BUDGETSr˜  r�  r   r  r  r™  r¤  r¥  r  rí  rŸ  râ  rä  ræ  rð  ró  rÿ  r  r  r  rP  r£  rA  ÚargvÚexitrÅ  r5   r3   Ú<module>r]     s¢  ðñ"óF Û Û Û 	Û Û Û Û 
Û Û Û ã ð S€ØQ€
ð �G‰G�L‰L˜Ÿ™Ÿ™¨Ð8K¸×8KÑ8KÓ8MÓNØ ó,€	à€ð
 ?ÀWÐTXÐ`dÐmtÑuØ>ÀWÐTXÐ`dÐmtÑuØ>ÀwÐVZÐbfÐovÑwØ:ÀgÐUYÐaeÐnuÑvØ@ÀwÐVZÐbfÐovÑwØ2À&ÐQUÐ]aÐjqÑrñ€	ð €ð €ð
 €ð Ð àÐ ð €
Ø€Ø
€Ø?€ð Ð ð �w‰w�|‰|˜I ~Ó6€Ø€
ó
òBò" ó$(òV ò ?€ò
-ó@ò	<ò7òZòò<=ò4	;ð €ð  Ð Ø€Ø€ð Ð òò&^ò&ò:`BóF@FðV €Ø€Ø€Ø€óDFðN 15Ø):ÀTóRðj JNØ;@óY@ò~1ò(1ò0òHÐ ò"ò&=ó8	0ð %)óG.òT"*òJ$#óN#"òLHðV Ð Ø€ØÐ ò4ó"Só:ð> &8ó OðD Ð ØÐ ð  Ð Ø)€ð 3EÈ4ó ó:ð. $(Ð1BØ#óAòHPò>òH 9€	Ú`€	ò ò9ð HLØ*.ó4%òn!ò,#ò^ò"'"òT=ð* Ð Ø€ò
Zòò(òð< IJØ %ózó@CòL$ò
ò:òò(SòòðB €ð Ð Ø€ð €ð Ð Ø€ð Ð à€ØÐ Ø€Ø€òRó
}ð@ %¨w¸$À4Ø¨¸4Ø %°dØ¨#¸$ÈØ¨!¸4È4Ø¨$¸Ø¨a°tØ¨1ókòb/òòòò>?òò,ò(!òV+òbI@ðX ˆzÒØ€B‡K‚K�	 DÕ)Ø�s—x’xÑØˆ�Š‘“ÔØ�S—X’XÑØˆ�Š‘“ÔÙ	…Gð r5   