Ë
    }�j13  ã                   óê   — 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mZ ddl	m
Z
 ddlmZ dZdZdZd	Zd
ZdZdZddddœZg 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(  r e«        yy)u¾  
Crawler for ä¸Šé¥¶ç»�æµŽæŠ€æœ¯å¼€å�‘åŒº - å…¬å‘Šå…¬ç¤º
CMS: UCAPCONTENT inside #zoomcon (custom CMS by æ±‰é€šç§‘æŠ€)
List: <ul id="doclist"><li><a href="..." title="å®Œæ•´æ ‡é¢˜">æ ‡é¢˜(æˆªæ–­)</a><span>æ—¥æœŸ</span></li>
Pagination: zfxxgk.shtml (page1), zfxxgk_{N}.shtml (page N), 20/page, ~50 pages

Usage:
    python3 crawl_srkfq_gggs.py             # Full crawl (up to 50 pages)
    python3 crawl_srkfq_gggs.py --max-pages 1  # Incremental
é    N)Údatetime)ÚBeautifulSoup)Úurljoinz/root/search.dbu(   ä¸Šé¥¶ç»�æµŽæŠ€æœ¯å¼€å�‘åŒº-å…¬å‘Šå…¬ç¤ºu   é€šçŸ¥å…¬å‘Šu   æ±Ÿè¥¿zhttp://www.srkfq.gov.cnz.http://www.srkfq.gov.cn/srkfq/035/zfxxgk.shtmlé2   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Language)u   ã€�æ‰“å�°æœ¬é¡µã€‘u   ã€�å…³é—­çª—å�£ã€‘u   æ‰“å�°æœ¬é¡µu   å…³é—­çª—å�£u   è½¬è½½åˆ†äº«ï¼šu   æµ�è§ˆé‡�ï¼šu   ç›¸å…³é™„ä»¶ï¼šu   ç›¸å…³ç¨¿ä»¶ï¼šu   æ‰«ä¸€æ‰«åœ¨æ‰‹æœºæ‰“å¼€u	   é™„ä»¶ï¼šu   ç´¯è®¡æ¬¡æ•°ï¼šu	   å­—å�·ï¼šc                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)Ústr)ÚtableÚargsÚkwargss      ú%/root/gov_crawler/crawl_srkfq_gggs.pyÚtable_to_mdr   +   s   € äˆu‹:Ðó    c                 óê  — g }| j                   D �]Q  }t        |t        «      r%|j                  «       }|sŒ'|j	                  |«       Œ9|j
                  dk(  rp|j                  dd«      j                  «       }|j                  d¬«      }|r'|r%t        ||«      }|j	                  d|› d|› d�«       Œ£|sŒ¦|j	                  |«       Œ¸|j
                  d	k(  rU|j                  d
d«      }|sŒÜ|j                  dd«      }	t        ||«      }
|j	                  |	r	d|	› d|
› d�nd|
› d�«       �Œt        |d«      s�Œ*|j                  dd¬«      }|s�ŒA|j	                  |«       �ŒT dj                  |«      S )NÚaÚhrefÚ T©Ústripú[ú](ú)ÚimgÚsrcÚaltú![ú![](Úget_textú )ÚcontentsÚ
isinstancer	   r   ÚappendÚnameÚgetr   r   ÚhasattrÚjoin)Úp_tagÚ
detail_urlÚpartsÚelemÚtr   ÚtextÚfullr   r   Úfull_srcs              r   Úrender_paragraphr/   /   sK  € Ø€EØ—‘ó  ˆÜ�dœCÔ Ø—
‘
“ˆAÚØ—‘˜Q•Ø�Y‰Y˜#ÒØ—8‘8˜F BÓ'×-Ñ-Ó/ˆDØ—=‘= t�=Ó,ˆDÙ™Ü˜z¨4Ó0�Ø—‘˜q   b¨¨¨aÐ0Õ1ÚØ—‘˜TÕ"Ø�Y‰Y˜%ÒØ—(‘(˜5 "Ó%ˆCÚØ—h‘h˜u bÓ)�Ü" :¨sÓ3�Ø—‘¹˜r #  b¨¨
°!Ñ4À4ÈÀzÐQRÐASÖTÜ�T˜:Ö&Ø—‘˜c¨�Ó.ˆAÛØ—‘˜Q–ð- ð. �8‰8�E‹?Ðr   c           	      óâ  ‡— g }t        «       }| j                  ddg«      D ]  }|j                  «        Œ | j                  D �]š  }|j                  €Œ|j                  j                  «       }|dk(  r:t        ||«      Š‰sŒ?t        ˆfd„t        D «       «      rŒX|j                  ‰«       Œj|dk(  rA|j                  d¬«      }t        |«      dk  rŒ�t        |«      }|sŒž|j                  |«       Œ°|d	k(  r}t        |«      |v rŒÃ|j                  t        |«      «       |j                  d
d«      }	|	sŒò|j                  dd«      }
t!        ||	«      }|j                  |
r	d|
› d|› d�nd|› d�«       �Œ2|dv �r)|j                  g d¢d¬«      D �]  }t        |«      |v rŒ|j                  t        |«      «       |j                  dk(  rL|j#                  d«      rŒMt        ||«      Š‰sŒ\t        ˆfd„t        D «       «      rŒu|j                  ‰«       Œ‡|j                  dk(  rA|j                  d¬«      }t        |«      dk  rŒ·t        |«      }|sŒÅ|j                  |«       Œ×|j                  d	k(  rU|j                  d
d«      }	|	sŒû|j                  dd«      }
t!        ||	«      }|j                  |
r	d|
› d|› d�nd|› d�«       �Œ;|j                  dk(  s�ŒL|j#                  d«      s|j#                  d«      r�Œp|j                  dd¬«      Š‰s�Œ‡t        ˆfd„t        D «       «      r�Œ¡d}t%        |«      D ]I  \  }}‰|v rt        ‰«      t        |«      k  rd} n'|‰v sŒ*t        |«      t        ‰«      k  sŒB‰||<   d} n |r�Œþ|j                  ‰«       �Œ �Œ`t        ||«      Š‰s�Œpt        ˆfd„t        D «       «      r�ŒŠ|j                  ‰«       �Œ� dj'                  |«      S )z1Extract content from UCAPCONTENT or #zoomcon div.ÚscriptÚstyleÚpc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w©N© ©Ú.0ÚskÚtxts     €r   ú	<genexpr>z"extract_content.<locals>.<genexpr>Z   ó   øè ø€ Ò>¨R˜r SœyÑ>ùó   ƒr
   Tr   é   r   r   r   r   r   r   r   r   )ÚdivÚsectionÚcenterÚucapcontent)r3   r
   r   Úspan)Ú	recursivec              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr5   r6   r7   s     €r   r;   z"extract_content.<locals>.<genexpr>y   ó   øè ø€ Ò&F°R r¨S¤yÑ&Fùr=   rC   r   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr5   r6   r7   s     €r   r;   z"extract_content.<locals>.<genexpr>�   rF   r=   Fc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr5   r6   r7   s     €r   r;   z"extract_content.<locals>.<genexpr>Ÿ   r<   r=   ú

)ÚsetÚfind_allÚ	decomposeÚchildrenr#   Úlowerr/   ÚanyÚ
SKIP_TEXTSr"   r   Úlenr   ÚidÚaddr$   r   Úfind_parentÚ	enumerater&   )Úcontent_divr(   r)   Ú	processedÚsÚchildÚtnÚall_textÚmdr   r   r.   ÚsubÚis_dupÚiÚexistingr:   s                   @r   Úextract_contentra   K   s…  ø€ à€EÜ“€Ià×!Ñ! 8¨WÐ"5Ó6ò ˆØ	�‰�ðð ×%Ñ%ó M"ˆØ�:‰:ÐØØ�Z‰Z×ÑÓˆà�Š9Ü" 5¨*Ó5ˆCÚœ3Ó>´:Ô>Õ>Ø—‘˜SÕ!à�7Š]Ø—~‘~¨D�~Ó1ˆHÜ�8‹}˜rÒ!ØÜ˜UÓ#ˆBÚØ—‘˜RÕ à�5Š[Ü�%‹y˜IÑ%ØØ�M‰Mœ"˜U›)Ô$Ø—)‘)˜E 2Ó&ˆCÚØ—i‘i  rÓ*�Ü" :¨sÓ3�Ø—‘¹˜r #  b¨¨
°!Ñ4À4ÈÀzÐQRÐASÖTàÐ>Ò>Ø—~‘~Ò&CÈt�~ÓTó ).�Ü�c“7˜iÑ'ØØ—‘œb ›gÔ&Ø—8‘8˜s’?à—‘ wÔ/Ø Ü*¨3°
Ó;�CÚ¤3Ó&F¼:Ô&FÕ#FØŸ™ SÕ)Ø—X‘X Ò(Ø"Ÿ|™|°$˜|Ó7�HÜ˜8“} rÒ)Ø Ü$ SÓ)�BÚØŸ™ RÕ(Ø—X‘X Ò&ØŸ'™' %¨Ó,�CÚØ!Ÿg™g e¨RÓ0˜Ü#*¨:°sÓ#;˜ØŸ™Á r¨#¨¨b°°
¸!Ñ%<È4ÐPXÈzÐYZÐI[Ö\Ø—X‘X Ô'à—‘ sÔ+¨s¯©¸wÔ/GÙ ØŸ,™, s°$˜,Ó7�CÛ¤3Ó&F¼:Ô&FÖ#Fà!&˜Ü+4°UÓ+;ò &™K˜A˜xØ" h™´3°s³8¼sÀ8»}Ò3LØ)- Ù %Ø'¨3š´3°x³=Ä3ÀsÃ8Ó3KØ+.  a¡Ø)- Ù %ð&ó  &Ø!ŸL™L¨Ö-òS).ô\ # 5¨*Ó5ˆCÛœ3Ó>´:Ô>Ö>Ø—‘˜SÖ!ð[M"ð^ �;‰;�uÓÐr   c                 ó„  — g }t        «       }| j                  dd¬«      D ]�  }|d   }t        j                  d|t        j                  «      sŒ.t        ||«      }|j                  d¬«      xs& |j                  d«      d   j                  d	«      d
   }||vsŒy|j                  |«       |j                  ||dœ«       ŒŸ |S )Nr   T)r   r   z&\.(pdf|doc|docx|xls|xlsx|rar|zip|txt)$r   ú/éÿÿÿÿú?r   )r#   Úurl)
rJ   rK   ÚreÚsearchÚIr   r   ÚsplitrS   r"   )Úsoupr(   ÚattsÚseenr   r   Úfull_urlr#   s           r   Úextract_attachmentsro   §   s²   € Ø€DÜ‹5€DØ�]‰]˜3 Tˆ]Ó*ò =ˆØ�‰yˆÜ�9‰9Ð>ÀÄbÇdÁdÕKÜ˜z¨4Ó0ˆHØ—:‘: D�:Ó)ÒN¨T¯Z©Z¸«_¸RÑ-@×-FÑ-FÀsÓ-KÈAÑ-NˆDØ˜tÒ#Ø—‘˜Ô"Ø—‘ T°(Ñ;Õ<ð=ð €Kr   c                 ó¬  — 	 t        j                  | t        d¬«      }d|_        t        |j                  d«      }d}|j                  d	d
di¬«      }|r$|j                  d«      r|d   j                  «       }|sL|j                  d«      }|r9|j                  d¬«      }t        j                  dd|«      j                  «       }|}d}|j                  d	d
di¬«      }|r'|j                  d«      r|d   j                  «       d d }|j                  dd¬«      }	|	r|	j                  d«      }
|
r|
}	t        || «      }|	rt!        |	| «      }nd}t#        |j                  «       «      dk  r�d| › d|› d�}|j%                  d«      }g }|D ]U  }|j                  dd«      }|sŒt'        | |«      }|j                  dd«      }|j)                  |r	d|› d|› d �nd!|› d �«       ŒW |r|d"d"j+                  |«      z   z  }|r|D ]  }|d#|d
   › d|d$   › d �z  }Œ ||||fS # t        $ r1}t        d| › d|› �t        j                  ¬«       d d d g fcY d }~S d }~ww xY w)%Né   ©ÚheadersÚtimeoutúutf-8z  fetch_detail error ú: ©Úfileúhtml.parserr   Úmetar#   ÚArticleTitle)ÚattrsÚcontentÚtitleTr   u<   \s*[-_â€”|].*(?:å…¬å‘Šå…¬ç¤º|ä¸Šé¥¶ç»�æµŽæŠ€æœ¯å¼€å�‘åŒº).*$ÚPubDateé
   r?   Úzoomcon©rR   ÚUCAPCONTENTz<p><a href="z">z</a></p>r   r   r   r   r   r   r   rI   u   

é™„ä»¶ï¼š[rf   )Úrequestsr$   ÚHEADERSÚencodingÚ	ExceptionÚprintÚsysÚstderrr   r,   Úfindr   r   rg   r]   ro   ra   rQ   rK   r   r"   r&   )rf   ÚrÚerk   r~   ÚmtÚtagr+   Údate_strrV   ÚucapÚattachmentsr}   ÚimgsÚ	img_linesr   r   r.   r   r   s                       r   Úfetch_detailr•   ·   s“  € ð$Ü�L‰L˜¤g°rÔ:ˆØˆŒ
ô
 ˜Ÿ™ Ó/€Dð €EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆÙØ�i‰i˜Ó ˆÙØ—‘ 4�Ó(ˆAÜ—‘ÐVÐXZÐ\]Ó^×dÑdÓfˆAØˆEð €HØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔØ�i‘=×&Ñ&Ó(¨¨"Ð-ˆð —)‘)˜E i�)Ó0€KáØ×Ñ Ó.ˆÙØˆKä% d¨CÓ0€KáÜ! +¨sÓ3‰àˆô ˆ7�=‰=‹?Ó˜bÒ Ø    R¨ w¨hÐ7ˆØ�}‰}˜UÓ#ˆØˆ	Øò 	YˆCØ—'‘'˜% Ó$ˆCÚÜ" 3¨Ó,�Ø—g‘g˜e RÓ(�Ø× Ñ ¹C 2 c U¨"¨X¨J°aÑ!8ÀtÈHÈ:ÐUVÐEWÕXð	Yñ Ø�v §¡¨IÓ 6Ñ6Ñ6ˆGáØò 	AˆAØ˜¨¨&©	 {°"°Q°u±X°J¸aÐ@Ñ@‰Gð	Að �(˜G [Ð0Ð0øôs ò $ÜÐ% c U¨"¨Q¨CÐ0´s·z±zÕBØ�T˜4 Ð#Õ#ûð$ús   ‚#H È	IÈ"&IÉIÉIc                 ó$   — | dk(  rt         S d| › d�S )Né   z)http://www.srkfq.gov.cn/srkfq/035/zfxxgk_z.shtml)ÚLIST_URL)Úpage_nums    r   Úget_list_urlrš   ù   s   € Ø�1‚}ÜˆØ6°x°jÀÐGÐGr   c                 óJ  — t        | «      }	 t        j                  |t        d¬«      }d|_        |j                  dk7  r-t        d| › d	|j                  › �t        j                  ¬«       g S t        |j                  d
«      }|j                  dd¬«      }|sg S g }|j                  d«      D ]»  }|j                  d«      }|j                  d«      }	|r|j                  d«      sŒ9|d   j                  «       }
|j                  dd«      j                  «       xs |j                  d¬«      }t!        ||
«      }|	r|	j                  d¬«      nd}|sŒ¥|sŒ¨|j#                  |||f«       Œ½ |S # t
        $ r-}t        d|› d|› �t        j                  ¬«       g cY d }~S d }~ww xY w)Nrq   rr   ru   z  Error fetching rv   rw   éÈ   ú  Page z: HTTP ry   ÚulÚdoclistr‚   Úlir   rC   r   r~   r   Tr   )rš   r„   r$   r…   r†   r‡   rˆ   r‰   rŠ   Ústatus_coder   r,   r‹   rK   r   r   r   r"   )r™   rf   rŒ   r�   rk   rŸ   Úitemsr    r   rC   r   r~   Úpage_urlr�   s                 r   Úextract_list_pager¤   ÿ   sz  € Ü
�xÓ
 €CðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
ð
 	‡}�}˜ÒÜ�˜�z ¨¯©¨Ð8¼s¿z¹zÕJØˆ	ä˜Ÿ™ Ó/€DØ�i‰i˜ ˆiÓ+€GÙØˆ	à€EØ×Ñ˜tÓ$ò 6ˆØ�G‰G�C‹LˆØ�w‰w�v‹ˆÙ˜Ÿ™˜fœØà�‰y�‰Ó ˆà—‘�g˜rÓ"×(Ñ(Ó*ÒD¨a¯j©j¸t¨jÓ.DˆÜ˜3 Ó%ˆÙ04�4—=‘= t�=Ô,¸"ˆâ’XØ�L‰L˜% ¨8Ð4Õ5ð6ð €Løô; ò ÜÐ! #  b¨¨Ð,´3·:±:Õ>Ø�	ûðús   �#E, Å,	F"Å5"FÆF"ÆF"c                  ó|   — t        j                  t        «      } | j                  d«       | j                  d«       | S )NzPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)Úconns    r   Úinit_dbr«   &  s/   € Ü�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kr   c                 ó‚  — |r|n|}t        j                  dd|«      j                  «       }|rt        j                  |d¬«      nd}	 | j                  dt        |||j                  «       |||t        |t        f
«      }|j                  dkD  S # t        $ r(}	t        d|	› �t        j                  ¬	«       Y d }	~	yd }	~	ww xY w)
Nz\s+r   F)Úensure_asciiz[]zÍINSERT OR IGNORE INTO gov_raw
               (site_name, source_url, page_url, title, publish_date, summary, content, category, attachments, group_name)
               VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)r   z  DB error: rw   )rg   r]   r   ÚjsonÚdumpsr©   Ú	SITE_NAMEÚCATEGORYÚGROUPÚrowcountr‡   rˆ   r‰   rŠ   )
rª   r~   r£   Úpublish_dater}   r’   ÚsummaryÚatt_jsonÚcurr�   s
             r   Úsave_articler¸   -  s®   € Ù ‰g e€GÜ�f‰f�V˜S 'Ó*×0Ñ0Ó2€GÙ>IŒt�z‰z˜+°EÕ:Èt€HðØ�l‰lð8ô ˜ (¨E¯K©K«M¸<Ø�gœx¨´5ð:ó	
ˆð �|‰|˜aÑÐøÜò Ü�˜Q˜CÐ ¤s§z¡zÕ2Üûðús   ÁAB Â	B>ÂB9Â9B>c            
      óÄ  — t         } t        t        j                  «      dkD  r	 t	        t        j                  d   «      } t        dt        › d| › �t        j                  ¬«       t        «       }d	}d	}t        d| dz   «      D �]K  }t        |«      }|s"t        d
|› d�t        j                  ¬«        �n|t        |«      z  }|D ]Ø  \  }}}|r*|dk  r%t        d|› d|d d › �t        j                  ¬«       Œ3|j                  d|f«      }	|	j                  «       rŒWt!        |«      \  }
}}}|
xs |}|xs |}|xs	 d|› d|› d�}|xs g }t#        ||||||«      r.|dz  }|dk  r$t        d|› d|d d › �t        j                  ¬«       t%        j&                  d«       ŒÚ t        d
|› dt        |«      › d|› d�t        j                  ¬«       �ŒN |j)                  «        |j+                  «        t        d|› d|› �t        j                  ¬«       y # t
        $ rÃ t        j                  d   j                  d«      r?	 t	        t        j                  d   j                  d«      d   «      } nm# t
        $ r Y nbw xY wt        j                  d   dv rIt        t        j                  «      dkD  r-	 t	        t        j                  d   «      } n# t
        $ r Y nw xY wY �Œžw xY w)Nr—   z--pages=ú=)z--max-pagesz--pagesé   z	Scraping z, max pages: rw   r   r�   z: 0 articles (end)z
2020-01-01z  Skip old: r   é(   z)SELECT id FROM gov_raw WHERE page_url = ?r   r   r   é   z  + r   g333333Ó?rv   z found, z newz
Done! Found: z, New: )Ú	MAX_PAGESrQ   r‰   ÚargvÚintÚ
ValueErrorÚ
startswithrj   rˆ   r°   rŠ   r«   Úranger¤   r©   Úfetchoner•   r¸   ÚtimeÚsleepÚcommitÚclose)Ú	max_pagesrª   Ú	total_newÚtotal_foundÚpnÚarticlesr~   r£   Údater·   Ú	det_titleÚdet_dateÚdet_contentÚdet_attsÚfinal_titleÚ
final_dateÚfinal_contentÚ
final_attss                     r   Úmainr×   A  s®  € Ü€IÜ
Œ3�8‰8ƒ}�qÒð	ÜœCŸH™H Q™KÓ(ˆIô 
ˆI”i�[ ¨i¨[Ð
9ÄÇ
Á
ÕKÜ‹9€DØ€IØ€Kä�A�y 1‘}Ó%ó WˆÜ$ RÓ(ˆÙÜ�G˜B˜4Ð1Ð2¼¿¹ÕDÚà”s˜8“}Ñ$ˆà%-ò 	Ñ!ˆE�8˜TÙ˜˜|Ò+Ü˜ T F¨!¨E°#°2¨J¨<Ð8¼s¿z¹zÕJØà—,‘,ÐJÈXÈKÓXˆCØ�|‰|Œ~Øä9EÀhÓ9OÑ6ˆI�x ¨hØ#Ò, uˆKØ!Ò) TˆJØ'ÒI¨Q¨{¨m¸2¸h¸ZÀqÐ+IˆMØ!š RˆJä˜D +¨x¸À]ÐT^Ô_Ø˜Q‘�	Ø ’>Ü˜D  ¨A¨k¸#¸2Ð.>Ð-?Ð@ÄsÇzÁzÕRä�J‰J�s�Oð)	ô, 	�˜�t˜2œc (›m˜_¨H°Y°K¸tÐDÌ3Ï:É:×Vð=Wð@ 	‡K�K„MØ‡J�J„LÜ	ˆO˜K˜=¨°	¨{Ð
;Ä#Ç*Á*ÖMøôg ò 
	Ü�x‰x˜‰{×%Ñ% jÔ1ðÜ #¤C§H¡H¨Q¡K×$5Ñ$5°cÓ$:¸1Ñ$=Ó >‘IøÜ!ò Ùðúä—‘˜!‘Ð :Ñ:¼sÄ3Ç8Á8»}ÈqÒ?PðÜ #¤C§H¡H¨Q¡KÓ 0‘IøÜ!ò Ùðýð
	úsY   ¤H È+KÈ?.I.É-KÉ.	I:É7KÉ9I:É:4KÊ/KËKË	KËKËKËKËKÚ__main__)!Ú__doc__r„   rg   r®   r¦   rÅ   Úosr‰   r   Úbs4r   Úurllib.parser   r¨   r°   r±   r²   ÚBASE_URLr˜   r¾   r…   rP   r   r/   ra   ro   r•   rš   r¤   r«   r¸   r×   Ú__name__r6   r   r   ú<module>rß      s«   ðñ	÷ 2× 1× 1Ó 1Ý Ý Ý  à
€Ø6€	Ø€Ø€Ø$€Ø;€Ø€	ð DØOØ0ñ€ò€
òòò8Wòxò =1òDHò"òNòò(8Nðv ˆzÒÙ…Fð r   