ó
    ÕÜjô  ã                   óÚ  • S r SSKrSSKrSSKrSSKrSSKrSSKrS\R                  S'   S\R                  S'   SSKr	\R                  R                  \R                  R                  \5      5      r\R                  R                  \SS5      r\R                  R#                  S\R                  R                  \S5      5        SqS rS.S	 jr0 rSqSSKr\R0                  " 5       rS
 rS rS rS rS/S jrS rS0S jr \!S:X  Ga%  \" 5       r"\" \"5      u  r#r$\" V VVs/ s H*  u    p\	RK                  U Vs/ s H  o"S   PM	     sn5      PM,     snnn r&\'" \" VV s1 s H  u  n  oiM
     sn n5      r(\)" S5       Vs/ s H  n\(USS2   PM     snr*SS/ sr+r,r-\* GH$  r.\/" \"5       VVV s/ s H  u  nu  n  o\.;  d  M  UPM     sn nnr0\/" \"5       VVV s/ s H  u  nu  n  o\.;   d  M  UPM     sn nnr1\" \0 Vs/ s H  n\#U   PM
     sn\0 Vs/ s H  n\&U   PM
     sn5      r2\1 H“  r3\ " \2Ri                  \#\3   5      5      r5\6" \	Rn                  " \55      5      r8\6" \	Rn                  " \&\3   5      5      r9\+\8\9:H  -  r+\,S\:" \&\3   5      -  -  r,\-Rw                  \<" \5R{                  5       5      \8\9:H  45        M•     GM'     \:" \"5      r>\?" \> S\:" \(5       S\:" \$5       S35        \?" S\+ S\> S\+\>-  S S\,\>-  S S3	5        S Hp  r@\- VVs/ s H  u  pVU\@:¼  d  M  UPM     snnrA\?" S \@S S!\:" \A5       S"\:" \A5      \>-  S S#\B" \A5       S\:" \A5       S\B" \A5      \=" \:" \A5      S5      -  S 35        Mr     \- VVs/ s H  u  pVUS$:¼  d  M  UPM     snnrA\B" \A5      \=" \:" \A5      S5      -  rC\CS%:¬  =(       a    \:" \A5      S&:¬  rD\" \#\&5      r2\RŠ                  " \2\$\D\C\:" \A5      \+\>-  S'.\F" \R                  R                  \S(5      S)5      5        \?" S*\D(       a  S+OS, S35        SqGS- rHgs  snf s  snnn f s  sn nf s  snf s  sn nnf s  sn nnf s  snf s  snf s  snnf s  snnf )1a†  teach.py -- a quick learned guess of which piece it will pick, from the turns it has already played (runs/*/cands.jsonl).
Ivy, Oct 23 2026: "we really need to attach a nn to every choice it makes so it can make snap decisions when very certain ... It should
be reasonably sure which pieces it's likely to choose so it can pretend to weigh them showing it deliberate and slow down."
Features per candidate: every number in its measurements, plus how well it matches the wish (asked-for kind, asked-for colour host,
left/right/up words in the wish vs where it sits, aimed or surprise). Target: Jev's probability. Tested by leaving whole builds out.é    NÚ ÚHIP_VISIBLE_DEVICESÚCUDA_VISIBLE_DEVICESú..Úrunsc                  ó  • [         c€  SS Kn [        [        R                  R                  [        SS5      5      R                  5       n[        R                  " SU[        R                  5      n[        UR                  S5      5      q [         $ )Nr   r   z
imagine.pyzKINDS = (\{.*?\})\né   )ÚKINDSÚimportlib.utilÚopenÚosÚpathÚjoinÚHEREÚreadÚreÚsearchÚSÚevalÚgroup)Ú	importlibÚsrcÚms      Ú3/home/ivy/projects/brick_reef/reef/teacher/teach.pyÚkindsr      s�   € ä�}ÛÜ”2—7‘7—<‘<¤ d¨LÓ9Ó:×?Ñ?ÓAˆÄrÇyÂyÐQgÐilÔnp×nrÑnrÓGsÀ1ô  ~Bð  CD÷  CJñ  CJð  KLó  CMó  ~NÐuzÜ€Ló    c           
      óv  • 0 nU =(       d    0 R                  5        H™  u  p4[        U[        5      (       a%  UR                  [	        XAUS S -   S-   5      5        M?  [        U[
        5      (       a  [        U5      X!US S -   '   Mi  [        U[        [        45      (       d  M†  [        U5      X!US S -   '   M›     U$ )Né   Ú/é(   )ÚitemsÚ
isinstanceÚdictÚupdateÚflatÚboolÚfloatÚint)ÚdÚpreÚoutÚkÚvs        r   r%   r%      s™   € Ø
€CØ—�b—‘Ö!‰ˆÜ�aœ×Ñ §
¡
¬4°¸¸3¸B¸±<À#Ñ3EÓ+FÖ GÜ˜œ4× Ñ ´e¸A³h #¨A¨c¨r¨F¡lÓ"3Ü˜œC¤˜<×(Ó(¼eÀA»h¨#°A°c°r°F©lÓ*;ñ "ð €Jr   c           
      ó\  • U  Vs/ s H  o[         ;  d  M  UPM     nnU(       aT  [           [        c  SSKJn  U" SSS9q[        U[        R                  USSS	95       H  u  pU[         U'   M     SSS5        U  Vs/ s H  n[         U   PM     sn$ s  snf ! , (       d  f       N-= fs  snf )
zZMiniLM sentence embeddings (the same local model the idea engine's taste net uses), cachedNr   )ÚSentenceTransformerzall-MiniLM-L6-v2Úcpu)ÚdeviceTé@   )Únormalize_embeddingsÚ
batch_size)Ú_EMBÚ_LOADÚ_MODELÚsentence_transformersr/   ÚzipÚencode)ÚtextsÚtÚneedr/   r-   s        r   Úembr>      sœ   € ñ Ó.’u�!¬¡�A‘u€DÐ.ÞÞÜ‰>ÝAÑL_Ð`rð  |Añ  MBÀ6Ü˜œfŸm™m¨DÀtÐXZ˜mÐ[Ö\‰DˆAÐhiÔ^bÐcdÓ^eÑ\÷ ñ #Ó#šU˜ŒD�ŒG™UÑ#Ð#ùò /ç�5üò $s   …B–B«ABÁ=B)Â
B&c                 ó¸  • U R                  S5      =(       d    0 oR                  S5      =(       d    0 n[        S UR                  5        5       S5      =(       d    Sn[        S UR                  5        5       S5      =(       d    SnUR                  SS5       SUR                  S	S5       S
US:  a  SO	US:”  a  SOS S
US:”  a  S S3$ US:  a  S S3$ S S3$ )NÚdescÚwherec              3   óZ   #   • U  H!  u  pUR                  S 5      (       d  M  Uv •  M#     g7f©zleft or rightN©Ú
startswith©Ú.0r,   r-   s      r   Ú	<genexpr>Úcand_text.<locals>.<genexpr>'   ó   é € ÐHšY‘T�Q¨!¯,©,°×*G�q‰qšYùó   ‚+¢	+r   c              3   óZ   #   • U  H!  u  pUR                  S 5      (       d  M  Uv •  M#     g7f©ÚheightNrD   rF   s      r   rH   rI   '   ó=   é € ð  ^QÒluÑdhÐdeÐyz÷  zFñ  zFð  GO÷  zP×^_Ñ^_ÒluùrK   Údescriptionr   z It joins the ú	joins thez, g…ëQ¸Õ¿zon the leftg…ëQ¸Õ?zon the rightzin the middleg…ëQ¸å?zup highzdown lowz
halfway upÚ.)ÚgetÚnextr!   )Úcr)   ÚwÚlrÚhts        r   Ú	cand_textrY   %   s9  € Ø	�‰ˆf‹×˜€A§¡ w£×!5°2˜QÜ	ÑH˜QŸW™WœYÓHÈ!Ó	L×	QÐPQ€BÔX\ñ  ^QÐlm×lsÑlsÔluó  ^Qð  STó  YU÷  YZð  YZÐSUØ�u‰u�] BÓ'Ð(¨°q·u±u¸[È"Ó7MÐ6NÈbØ " U£
‰}À"ÀtÃ)±ÐQ`ÐaÐacÐqsÐvzÓqzÐdmð  dkð  klðmð nð OQð  TXó  OXð  AKð  dkð  klðmð nð ^jð  dkð  klðmð nr   c           	      ó  ^• UR                  S5      =(       d    0 n[        UR                  5        VVs0 s H  u  p4US:w  d  M  X4_M     snn5      nU R                  S5      =(       d    SR                  5       m[	        U R                  S5      =(       d    S5      R                  5       n[	        U R                  S5      =(       d    S5      R                  5       nUR                  S5      =(       d    0 n[        S UR                  5        5       S	5      =(       d    S	n	[        S
 UR                  5        5       S	5      =(       d    S	n
[        [        UR                  SS5      5      5      US'   [        [        U5      U R                  S5      =(       d    SU R                  S5      =(       d    S/5      u  p¼n[        X¼-  5      US'   [        X½-  5      US'   [        UR                  S5      [        5       R                  U5      =(       d    / ;   5      US'   [        U=(       a,    U[	        UR                  SS5      5      R                  5       ;   5      US'   [        ST;   5      U	* -  US'   [        ST;   5      U	-  US'   [        [        U4S jS 5       5      5      U
-  US'   [        [        U4S jS 5       5      5      SU
-
  -  US'   [        ST;   5      [        UR                  S5      [        5       R                  S5      =(       d    / ;   5      -  US '   [        [        U4S! jS" 5       5      5      [        UR                  S5      [        5       R                  S#5      =(       d    / ;   5      -  US$'   U$ s  snnf )%Nr@   rP   rT   r   Ú
want_pieceÚwant_onrA   c              3   óZ   #   • U  H!  u  pUR                  S 5      (       d  M  Uv •  M#     g7frC   rD   rF   s      r   rH   Úfeatures.<locals>.<genexpr>.   rJ   rK   r   c              3   óZ   #   • U  H!  u  pUR                  S 5      (       d  M  Uv •  M#     g7frM   rD   rF   s      r   rH   r^   .   rO   rK   ÚaimedTÚmight_beÚsim_wishÚsim_ideaÚnameÚ
kind_matchrQ   Úcolour_matchÚleftÚ	wish_leftÚrightÚ
wish_rightc              3   ó,   >#   • U  H	  oT;   v •  M     g 7f©N© ©rG   ÚxÚwishs     €r   rH   r^   5   s   øé € ÐNÒ0M¨1 $žYÒ0Mùó   ƒ)ÚtopÚupÚhighÚtallÚwish_upc              3   ó,   >#   • U  H	  oT;   v •  M     g 7frl   rm   rn   s     €r   rH   r^   5   s$   øé € ð  phò  DgÐ~ÐuyÖpyò  Dgùrq   )ÚunderÚlowÚbottomÚbelowr	   Úwish_lowÚlongÚ	wish_longc              3   ó,   >#   • U  H	  oT;   v •  M     g 7frl   rm   rn   s     €r   rH   r^   7   s   øé € ÐOÒ3N¨a T¦	Ò3Nùrq   )ÚsmallÚtinyÚlittler€   Ú
wish_small)rS   r%   r!   ÚlowerÚstrrT   r'   r&   r>   rY   r   Úany)ÚturnrU   r)   r,   r-   ÚfÚ	want_kindr\   rV   rW   rX   ÚctÚwtÚmtrp   s                 @r   Úfeaturesr�   *   sC  ø€ Ø	�‰ˆf‹×˜€A¤¸¿¹¼	Ô&Xº	±°ÀQÈ-ÑEW£t q¢t¹	Ò&XÓ!Y˜QØ�H‰H�VÓ×" ×)Ñ)Ó+€D¼¸T¿X¹XÀlÓ=S×=YÐWYÓ9Z×9`Ñ9`Ó9b¨YÔnqÐrv×rzÑrzð  |Eó  sF÷  sLð  JLó  oM÷  oSñ  oSó  oUÐdkØ	�‰ˆg‹×˜"€AÜ	ÑH˜QŸW™WœYÓHÈ!Ó	L×	QÐPQ€BÔX\ñ  ^QÐlm×lsÑlsÔluó  ^Qð  STó  YU÷  YZð  YZÐSUÜ”t˜AŸE™E '¨4Ó0Ó1Ó2€A€g�JÜ”i “l D§H¡H¨VÓ$4×$:¸¸D¿H¹HÀZÓ<P×<VÐTVÐWÓX�J€BˆBÜ˜"™'“N€A€j�M´E¸"¹'³N A j¡MÜ˜AŸE™E &›M¬e«g¯k©k¸)Ó.D×.JÈÑKÓL€A€l�OÜ˜g×X¨'´S¸¿¹¸{ÈBÓ9OÓ5P×5VÑ5VÓ5XÑ*XÓY€A€nÑÜ˜6 T™>Ó*¨r¨cÑ2€A€k�NÄeÈGÐW[ÉOÓF\Ð_aÑFa°A°l±OÜœÔNÑ0MÓNÓNÓOÐRTÑT€A€i�LÔfkÔloô  phñ  Dgó  phó  mhó  gið  mnð  qsñ  msñ  gtÐVWÐXbÑVcÜ˜6 T™>Ó*¬U°1·5±5¸³=ÄUÃWÇ[Á[ÐQWÓEX×E^Ð\^Ñ3_Ó-`Ñ`€A€k�NÜœCÔOÑ3NÓOÓOÓPÔSXÐYZ×Y^ÑY^Ð_eÓYfÔkpÓkr×kvÑkvÐw~Ók÷  lFð  DFñ  ZGó  THñ  H€A€l�OØ€Hùó 'Ys   ´N 
ÁN 
c            
      óH  • / n [        [        R                  " [        R                  R	                  [
        SS5      5      5       GH=  n[        R                  R                  [        R                  R                  U5      5      n [        R                  " [        [        R                  R	                  [        R                  R                  U5      S5      5      5      R                  S5      (       a  M±   [        U5       H|  n[        R                  " U5      oDS    Vs/ s H  oUR                  S5      c  M  UPM     nnUR                  S5      (       a  MX  [        U5      S:¼  d  Mi  U R!                  X$U45        M~     GM@     U $ ! [        [        4 a     N¤f = fs  snf )	NÚ*zcands.jsonlz
state.jsonÚ	unwrittenÚ
candidatesÚpÚforcedé   )ÚsortedÚglobr   r   r   ÚRUNSÚbasenameÚdirnameÚjsonÚloadr   rS   ÚOSErrorÚ
ValueErrorÚloadsÚlenÚappend)ÚTÚfnÚrunÚlr<   rU   Úcss          r   r›   r›   9   s  € Ø
€AÜ”T—Y’YœrŸw™wŸ|™|¬D°#°}ÓEÓF×GˆÜ�g‰g×ÑœrŸw™wŸ™¨rÓ2Ó3ˆð	+Ü�yŠyœœbŸg™gŸl™l¬2¯7©7¯?©?¸2Ó+>ÀÓMÓNÓO×SÑSÐT_×`Ñ`ÑbjÐ`ä�b–ˆAÜ—
’
˜1“ˆA°,²Ó$Z²¨1Ç5Á5ÈÃ:§Q±˜rÐ$ZØ�u‰u�X�‰¡Ü�2‹w˜!�|˜QŸX™X s¨r lÖ3ô ñ Hð €Høô œÐ$Ó*¡dÐ*üâ$Zs   ÂA.F	Ä!FÄ:FÆ	FÆFc                 ó2  • [        U  VVVVs/ s H  u  p#oD  H  n[        U5      PM     M     snnnnU  VVs/ s H  u  p#o#R                  S5      =(       d    SPM!     snn-   U  VVs/ s H  u  p#o#R                  S5      =(       d    SPM!     snn-   5        U  VVVVs/ s H!  u  p#oD Vs/ s H  n[        X55      PM     snPM#     nnnnnUc1  [	        U VVV	s1 s H  ow  H  oˆ  H  o™iM     M     M     sn	nn5      nU VVV	s/ s HK  n[
        R                  " U VV	s/ s H$  o� V	s/ s H  o˜R                  U	S5      PM     sn	PM&     sn	n5      PMM     n
nnn	X¡4$ s  snnnnf s  snnf s  snnf s  snf s  snnnnf s  sn	nnf s  sn	f s  sn	nf s  sn	nnf )NrT   r   ra   ç        )r>   rY   rS   r�   r•   ÚnpÚarray)r¡   ÚcolsÚ_r<   r¥   rU   ÚFr‡   rˆ   r,   ÚXs              r   Úmatrixr®   E   sk  € Ü¡aÖ4¢a™(˜! ³¨AŒ�1Ž±‰¡aÔ4Ñ[\Ô7]Ò[\ÑPWÐPQÐVW¿¹¸f»×8KÈÒ8KÑ[\Ò7]Ñ]ñ  IJô  aKò  IJñ  ~EÐ}~ð  DE×afÑafÐgqÓar×axÐvxÒaxñ  IJò  aKñ  	Kô  LÙ67Ö8²a©(¨!° "Ó	%¢"˜QŒ(�1Ž.¡"Ô	%±a€AÓ8Ø�|œF±!Õ#M²!¨$»T¸Ë1Àa¢AÉ1¡A¹T¡A±!Ó#MÓN�TÙMNÕOÊQÀTŒ�Š¹$Ô?º$°Q¨4Ó0ª4 a—E‘E˜!˜S–M©4Ô0¹$Ò?Ö	@ÉQ€AÒOØˆ7€Nùõ	 	5ùÓ7]ùó  aKùÚ	%ùÕ8ùÜ#MùÚ0ùÓ?ùÔOsX   �!E¸&E'Á(&E-ÂE8
Â+E3Ã E8
ÃF ÄFÄ!	FÄ*FÅFÅFÅ3E8
ÆFÆFc                 ó˜   • SSK Jn  U" SSSSS9nUR                  [        R                  " U 5      [        R
                  " U5      5        U$ )Nr   )ÚHistGradientBoostingRegressoréÈ   g¸…ëQ¸®?é   é
   )Úmax_iterÚlearning_rateÚmax_leaf_nodesÚmin_samples_leaf)Úsklearn.ensembler°   Úfitr¨   ÚvstackÚconcatenate)ÚXsÚysr°   r   s       r   r¹   r¹   K   s:   € Ý>Ù%¨sÀ$ÐWYÐlnÑo€AØ‡E�EŒ"�)Š)�B‹-œŸš¨Ó+Ô,°Q¨hr   c                 ó¨   • [         R                  " U 5      U-  o U R                  5       -
  n [         R                  " U 5      o"UR	                  5       -  $ rl   )r¨   ÚasarrayÚmaxÚexpÚsum)ÚzÚtempÚes      r   ÚsoftmaxrÆ   O   s>   € œrŸzšz¨!›}¨tÑ3˜1¸Q¿U¹U»W¹°QÌ"Ï&Ê&ÐQRË)ÀaÐ`a×`eÑ`eÓ`gÑ\gÐUgr   Ú__main__r’   é   r§   r	   z turns from z	 builds, z	 featuresz"left-out builds: guessed its pick r   z = z.0%z	 (chance Ú))g      à?gffffffæ?ç333333ë?z  when its guess is >= z sure: z turns (z	), right rÊ   gÍÌÌÌÌÌì?r²   )Úmodelrª   ÚsnapÚprec85Ún85Útop1úteacher.pklÚwbz"saved teacher.pkl (snap decisions ÚONÚoffc                 ód  • [         R                  R                  [        S5      n[        b*  [        S   [         R                  R                  U5      :w  a?  [         R                  R                  U5      [        R                  " [        US5      5      4q[        S   o1 Vs/ s H  n[        X5      PM     nn[        R                  " U VVs/ s H'  ocS    Vs/ s H  ovR                  US5      PM     snPM)     snn5      n[        US   R                  U5      5      U4$ s  snf s  snf s  snnf )zsprobabilities for each candidate from the saved model, or None. cands_desc: [{'desc':..., 'name':..., 'aimed':...}]rÐ   r   Úrbr	   rª   r§   rË   )r   r   r   r   Ú_LOADEDÚgetmtimeÚpickler›   r   r�   r¨   r©   rS   rÆ   Úpredict)	r‡   Ú
cands_descr’   ÚMrU   r¬   rˆ   r,   r­   s	            r   ÚguessrÜ   e   sì   € ô 	�‰�‰”T˜=Ó)€AÜ�œ' !™*¬¯©×(8Ñ(8¸Ó(;Ó;ÌÏÉ×HXÑHXÐYZÓH[Ô]c×]hÒ]hÔimÐnoÐquÓivÓ]wÐGx¸WÜ�‰
€A°JÓ?²J¨qœ $Ö*±J�AÐ?Ü
�Š¹aÔ@ºa¸¨Fª)Ó4ª) Q—5‘5˜˜C–=©)Ô4¹aÒ@ÓA€AÌ'ÐRSÐT[ÑR\×RdÑRdÐefÓRgÓJhÐjkÐJkÐCkùò @ùÚ4ùÓ@s   Â!D"ÃD,
ÃD'Ã4D,
Ä'D,
)r   rl   )g{®Gáz´?)IÚ__doc__rš   r–   r   r   ÚsysrØ   ÚenvironÚnumpyr¨   r   r™   ÚabspathÚ__file__r   r   r—   Úinsertr
   r   r%   r5   r7   Ú	threadingÚLockr6   r>   rY   r�   r›   r®   r¹   rÆ   Ú__name__r¡   r­   rª   r©   Úyr•   r   ÚrangeÚfoldsÚhitsÚchanceÚ	conf_hitsÚfoldÚ	enumerateÚtrÚter   ÚirÙ   Úprr(   ÚargmaxÚgÚtruthrŸ   r    r'   rÀ   ÚnÚprintÚthÚselrÂ   ÚprecrÌ   Údumpr   rÖ   rÜ   )r«   r¥   rU   Úrrñ   r’   Úhs   0000000r   Ú<module>rþ      sÎ  ðñH÷
 '× &× &Ø$&€‡
�
Ð Ñ !ÈR¨¯
©
Ð3IÑ(JÛ Ø	‡w�w‡��r—w‘w—‘ xÓ0Ó1€¸"¿'¹'¿,¹,ÀtÈTÐSYÓ:Z°4Ø ‡�‡���2—7‘7—<‘<  dÓ+Ô ,Ø€òôð 
€�Dˆ6Û ˜)Ÿ.š.Ó*�%ò	$ònò
òôò7ô hØˆzÔÙ‹€A™& ›)‘��4ÑYZÕ)[ÒYZÉXÈQÐPQ¨"¯(©(ÁBÓ3GÂB¸q°c´FÁBÑ3GÖ*HÑYZÓ)[ QÙ¡AÔ&¢A™˜˜A˜q’1¡AÒ&Ó'€DÁeÈAÄhÓ1OÂhÀ°$°q°t¸!°t´*ÁhÑ1O¨Ø  bÐ€Dˆ&�)ÜˆÙ$-¨a¤LÕB¢L‘L�A‘y˜˜1˜a¸T±M�a¡LÓBˆÑ`iÐjkÔ`lÕIzÒ`lÑP\ÐPQÑS\ÐTUÐWXÐZ[ÐuyÑpyÏ!Ñ`lÓIzÀBÙ™rÓ"šr˜!��1”™rÑ"±2Ó$6²2¨a Q q¤T±2Ñ$6Ó7ˆÛˆAÙ˜Ÿ™ 1 Q¡4›Ó)ˆB©s°2·9²9¸R³=Ó/A¨1É3ÈrÏyÊyÐYZÐ[\ÑY]ËÓK_À5Ø�A˜‘JÑˆD ¨!©c°!°A±$«i©-Ñ 7 ¸×9IÑ9IÉ5ÐQS×QWÑQWÓQYË?Ð\]ÐafÑ\fÐJgÖ9hô ñ ñ 	ˆA‹€A‘˜˜˜<©¨D«	 {°)¹CÀ»I¸;ÀiÐPÔQÙ	Ð.¨t¨f°A°a°S¸¸DÀ1¹HÀS¸>ÈÐSYÐ\]ÑS]Ð^aÐRbÐbcÐ
dÔeÛˆÙ&Ô2šY‘T�Q¨!¨r©'�q™YÒ2ˆÙÐ'¨¨3 x¨w±s¸3³x°jÀÉÈSËÐTUÉÐVYÐHZÐZcÑdgÐhkÓdlÐcmÐmnÑorÐsvÓowÐnxÐx{Ñ|ð  ADó  }Eñ  HKñ  LOð  PSó  LTð  VWó  HXñ  }Xð  Y\ð  |]ð  ^ö  	_ñ ñ #Ô
0š‘� a¨4¡i�1™Ò
0€C¹¸S»ÁCÉÈCËÐRSÓDTÑ9T°$Ø�3‰;×)™3˜s›8 r™>€DÙˆAˆq‹	€A�6—;’;¨°DÀ$ÐRVÑ_bÐcfÓ_gÐquÐxyÑqyÑzÙ# B§G¡G§L¡L°°}Ó$EÀtÓLôNÙOTÐWyö  CGÑz~ð  MRð  zSð  STð  VUô  PVà
€ólùò) 4HùÔ)[ùÛ&ùÒ1Oùô CùÔIzùÚ"ùÒ$6ùó 3ùã
0s`   ÄP7Ä7P2ÅP7ÅP>
Å=QÆ+Q	
Æ?Q	
ÇQ
Ç*Q
Ç;Q
ÈQÌQ!Ì Q!ÎQ'ÎQ'Ð2P7