Ë
    ¸¬ujÅ3  ã                   ó<  — 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ZdZdZdZed	z   Zd
ZdZdZdZdZdZdZdZ ej2                  «       Zde_        ej8                  e_        ddddœZdd„Zdd„Z d„ Z!d„ Z"da#d„ Z$d„ Z%d„ Z&e'dk(  r e&«        yy) u-  åž¦åˆ©åŒºäººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š (col39604) çˆ¬è™«
CMS: Hanweb å¤§æ±‰ç‰ˆé€š (JPage dataproxy åŠ¨æ€�åˆ†é¡µ)
åˆ—è¡¨: /col/col39604/index.html  é¦–å±�å†…åµŒ <datastore> 45æ�¡(3ç»„Ã—15æ�¡/é¡µ)
     ç¿»é¡µ POST /module/web/jpage/dataproxy.jsp?startrecord=N&endrecord=M&perpage=15
     totalRecord=290, perPage=15 -> å…±20é¡µ (290/15=19.3)
è¯¦æƒ…: /art/YYYY/M/D/art_39604_{id}.html
     meta ArticleTitle / pubdate + div#zoom (ContentStart~ContentEnd) æ­£æ–‡
é™„ä»¶: æ­£æ–‡å†… <a href="/module/download/downfile.jsp?..."> (ç›¸å¯¹è·¯å¾„, urljoin è¯¦æƒ…é¡µURL)
é    N©Úurljoin)ÚBeautifulSoupu"   åž¦åˆ©åŒºäººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Šzcrawl_kenli_tzgg.pyu   å±±ä¸œzhttp://www.kenli.gov.cnz/col/col39604/index.htmlz/module/web/jpage/dataproxy.jspÚ39604Ú127350Ú274u   åž¦åˆ©åŒºäººæ°‘æ”¿åºœz/mnt/data/search.dbé   é-   FzkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.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-Languagec                 óæ  — t        |«      D ]‰  }	 t        j                  j                  | t        ¬«      }t        j                  j                  ||t        ¬«      }|j                  «       }t        |«      dk  r	d|d d v r y|j                  dd¬	«      c S  y# t        $ rN}||d
z
  k(  r't        d| › d|› �t        j                  ¬«       Y d }~ yt        j                  d«       Y d }~Œßd }~ww xY w)N)Úheaders©ÚtimeoutÚcontexti,  s   404éd   Ú úutf-8Úreplace©Úerrorsé   u     [WARN] è¯·æ±‚å¤±è´¥ ú: ©Úfileç333333ó?)ÚrangeÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚctxÚreadÚlenÚdecodeÚ	ExceptionÚprintÚsysÚstderrÚtimeÚsleep)Úurlr   ÚretriesÚiÚreqÚrespÚbodyÚes           ú%/root/gov_crawler/crawl_kenli_tzgg.pyÚhttp_getr4   )   sÖ   € Ü�7‹^ò ˆð	Ü—.‘.×(Ñ(¨´gÐ(Ó>ˆCÜ—>‘>×)Ñ)¨#°wÌÐ)ÓLˆDØ—9‘9“;ˆDÜ�4‹y˜3Š 6¨T°$°3¨ZÑ#7ÙØ—;‘;˜w¨y�;Ó9Ò9ðð øô ò 	Ø�G˜a‘KÒÜÐ.¨s¨e°2°a°SÐ9ÄÇ
Á
ÕKÝÜ�J‰J�s�O‰Oûð		ús$   �A0BÂBÂ	C0Â")C+ÃC+Ã+C0c           	      ó*  — t        |«      D ]ª  }	 t        j                  j                  |«      j	                  d«      }t        j
                  j                  | |i t        ¥t        ddœ¥¬«      }t        j
                  j                  ||t        ¬«      }|j                  «       j                  dd¬«      c S  y# t        $ rO}||dz
  k(  r't        d	| › d
|› �t        j                   ¬«       Y d }~ yt#        j$                  d«       Y d }~�Œd }~ww xY w)Nr   z!application/x-www-form-urlencoded)ÚRefererzContent-Type)Údatar   r   r   r   r   u     [WARN] POSTå¤±è´¥ r   r   r   r   )r   r   ÚparseÚ	urlencodeÚencoder   r   r    ÚLIST_URLr!   r"   r#   r%   r&   r'   r(   r)   r*   r+   )	r,   r7   r   r-   r.   r1   r/   r0   r2   s	            r3   Ú	http_postr<   :   sû   € Ü�7‹^ò ˆð	Ü—<‘<×)Ñ)¨$Ó/×6Ñ6°wÓ?ˆDÜ—.‘.×(Ñ(¨°4ð BEÜðBEÜ&.Ø CòBEÐ(ó FˆCô —>‘>×)Ñ)¨#°wÌÐ)ÓLˆDØ—9‘9“;×%Ñ% g°iÐ%Ó@Ò@ðð øô ò 	Ø�G˜a‘KÒÜÐ,¨S¨E°°A°3Ð7¼c¿j¹jÕIÝÜ�J‰J�s�OŠOûð		ús   �B%B:Â:	DÃ)DÃ2DÄDc                 ó  — | j                  dd«      j                  dd«      } | j                  dd«      j                  dd«      } t        j                  dd| «      } t        j                  dd| «      } | j                  «       S )u:   strip &middot;&nbsp; å®žä½“å‰�ç¼€ å’Œçœ�ç•¥å�·æˆªæ–­å�Žç¼€z&middot;r   z&nbsp;u   â€‹u   ï»¿u   ^[\s\xa0Â·\u00b7]+z\s*\.{3,}\s*$)r   ÚreÚsubÚstrip)Útitles    r3   Úclean_titlerB   K   sn   € à�M‰M˜* bÓ)×1Ñ1°(¸BÓ?€EØ�M‰M˜( BÓ'×/Ñ/°¸"Ó=€EÜ�F‰FÐ(¨"¨eÓ4€EÜ�F‰FÐ# R¨Ó/€EØ�;‰;‹=Ðó    c                 óæ  — g }t        j                  d| t         j                  «      D ]Æ  }|j                  d«      }t        j                  d|«      }|st        j                  d|«      }|sŒE|j                  d«      }t        |j                  d«      «      }t        t        |«      }t        j                  d|«      }|r|j                  d«      nd}	|sŒ®d|v sŒ³|j                  |||	f«       ŒÈ |S )	uM   ä»Ž <datastore><record><![CDATA[<li>...]]></record> æ��å�– (url, title, date)z&<record><!\[CDATA\[(.*?)\]\]></record>r   z)<a[^>]*href="([^"]+)"[^>]*title="([^"]*)"z)<a[^>]*href='([^']+)'[^>]*title='([^']*)'é   z <span>(\d{4}-\d{2}-\d{2})</span>r   Úart_)	r>   ÚfinditerÚSÚgroupÚsearchrB   r   ÚBASE_URLÚappend)
ÚhtmlÚitemsÚmÚcdataÚaÚhrefrA   r,   ÚdmÚdates
             r3   Úparse_datastore_recordsrU   T   sÐ   € à€EÜ�[‰[ÐBÀDÌ"Ï$É$ÓOò -ˆØ—‘˜“
ˆÜ�I‰IÐBÀEÓJˆÙÜ—	‘	ÐFÈÓNˆAÙØØ�w‰w�q‹zˆÜ˜AŸG™G A›JÓ'ˆÜ”h Ó%ˆÜ�Y‰YÐ:¸EÓBˆÙ ˆr�x‰x˜Œ{ bˆÚ�V˜s’]Ø�L‰L˜#˜u dÐ+Õ,ð-ð €LrC   c           	      óÄ  — | dk  r@t         €t        t        «      }|sg S t        |«      a t         }|| dz
  t        z  | t        z   S | dz
  dz  dz   }|dz
  t
        z  dz   }|t
        z   dz
  }dt        t        dz   t        dt        t        ddœ}t        t        t        z   d|› d|› dt        › �z   |«      }|sg S t        |«      }| dz
  dz  }||t        z  |dz   t        z   S )	u`   ç¬¬pageé¡µ (1-based) åˆ—è¡¨æ�¡ç›®ã€‚1-3é¡µåœ¨é¦–å±� datastore, 4+é¡µ POST dataproxy æŒ‰ç»„å�–ã€‚é   r   ú/r   )ÚcolÚwebidÚpathÚcolumnidÚsourceContentTypeÚunitidÚwebnameÚpermissiontypez?startrecord=z&endrecord=z	&perpage=)Ú_init_recordsr4   r;   rU   ÚPER_PAGEÚGROUP_RECORDSÚWEBIDrK   ÚCOLUMNIDÚUNITIDÚWEBNAMEr<   Ú	PROXY_URL)	ÚpagerM   ÚrecsrI   ÚstartÚendr7   ÚxmlÚidxs	            r3   Ú
fetch_pagero   k   s  € ð ˆq‚yÜÐ ÜœHÓ%ˆDÙØ�	Ü3°DÓ9ˆMÜˆØ�T˜A‘X¤Ñ)¨4´(©?Ð;Ð;à�A‰X˜!‰O˜aÑ€EØ�Q‰Yœ-Ñ'¨!Ñ+€EØ
”-Ñ
 !Ñ
#€Càœ5¬(°S©.Ü°1ÄÜ¨añ€Dô
 ”HœyÑ(¨]¸5¸'ÀÈSÈEÐQZÔ[cÐZdÐ+eÑeÐgkÓ
l€CÙØˆ	Ü" 3Ó'€DØ�!‰8�q‰.€CØ�”h‘  q¡¬HÑ 4Ð5Ð5rC   c           
      ó
  ‡‡"— d}t        j                  d| «      }|rt        |j                  d«      «      }d}t        j                  d| «      }|r|j                  d«      }t	        | d«      }|j                  dd¬«      }|s||dg fS d}t        j                  d	| «      }	t        j                  d
| «      }
|	rD|
rB|
j                  «       |	j                  «       kD  r!| |	j                  «       |
j                  «        }|j                  «       rt	        |d«      n|}g }|j                  dd¬«      D ]Ø  }|d   }|j                  d¬«      }t        j                  d|«      sHd|j                  «       v s6d|j                  «       v s$d|j                  «       v s|j                  d«      sŒxt        ‰|«      }|j                  d«      s|j                  d«      rd|z   n|}|r|n|j                  d«      d   }|j                  |||f«       ŒÚ |D ]±  \  }}}|j!                  d|d¬«      }||_        |j$                  �s|j$                  }d}t'        |j(                  «      D ]  \  }}||u sŒ|} n |�>t+        |j(                  d| «      D ]#  }t-        |dd«      dk(  sŒ|j/                  «        Œ% |j1                  |«       Œ³ |D ��ch c]  \  }}}|’Œ
 c}}Š"|j2                  D �cg c]  }t-        |dd«      sŒ|‘Œ }}g }|D �]  }|j4                  dk(  r|j                  t7        |«      «       Œ.|j4                  d v r |j                  dd¬«      }|s|j                  d«      sŒc|j                  d«      }t9        ˆ"ˆfd!„|j                  dd¬«      D «       «      }|s|s|j                  d«      r|j                  t7        |«      «       ŒÊ|j                  |«       ŒÜ|j                  dd¬«      }|sŒò|j                  |«       �Œ t;        «       }g }|D ]X  }t        j<                  d"dt        j<                  d#d|«      «      }|sŒ2||vsŒ7|j?                  |«       |j                  |«       ŒZ d$jA                  |«      } | jC                  d%d&«      }!|D ]  \  }}}|| vsŒ||!vsŒ| d'|› d(|› d)�z  } Œ t        j<                  d*d| «      } t        j<                  d+d$| «      j                  «       } ||| |fS c c}}w c c}w ),u/   æ��å�– (title, date, content_html, attachments)r   z/<meta\s+name="ArticleTitle"\s+content="([^"]+)"r   z5<meta\s+name="pubdate"\s+content="(\d{4}-\d{2}-\d{2})zhtml.parserÚdivÚzoom)Úidz!<meta\s+name="ContentStart"\s*/?>z<meta\s+name="ContentEnd"\s*/?>rQ   T)rR   rR   )r@   z>(?i)\.(pdf|doc|docx|xls|xlsx|zip|rar|wps|et|ofd|png|jpg)(\?|$)ÚdownloadÚattachr   u   é™„ä»¶)zhttp://zhttps://z//zhttp:rX   éÿÿÿÿÚ_blank)rR   ÚtargetNÚnameÚimgÚtable)	Úprq   Úh1Úh2Úh3ÚulÚolÚliÚ
blockquotec              3   óR   •K  — | ]  }t        ‰|d    «      ‰v xs |d    ‰v –— Œ  y­w)rR   Nr   )Ú.0ÚxÚattached_hrefsÚpage_urls     €€r3   ú	<genexpr>z!extract_detail.<locals>.<genexpr>Ë   s:   øè ø€ ò  6àô ˜ ! F¡)Ó,°Ð>Ò]À!ÀFÁ)È~ÐB]Ó]ñ 6ùs   ƒ$'ú\s+ú<[^>]+>z

z&amp;ú&z

<p><a href="z" target="_blank">z</a></p>u   æ‰“å�°æœ¬é¡µ[^\n]*z\n{3,})"r>   rJ   rB   rI   r   Úfindrk   rl   r@   Úfind_allÚget_textÚlowerÚ
startswithr   ÚsplitrL   Únew_tagÚstringÚparentÚ	enumerateÚcontentsÚlistÚgetattrÚ	decomposeÚreplace_withÚchildrenry   ÚstrÚanyÚsetr?   ÚaddÚjoinr   )#rM   rˆ   rA   ÚmtrT   ÚmpÚsouprr   Ú	body_htmlÚm_startÚm_endÚfragÚattachmentsrQ   rR   ÚtxtÚabs_urlry   Únew_ar|   Úidx_aÚciÚchildÚ_ÚelÚbody_elsÚpartsÚinner_tablesÚel_has_attachÚseenÚfinal_partsÚkeyÚcontentÚcontent_unescapedr‡   s#    `                                @r3   Úextract_detailr»   ‡   sË  ù€ ð €EÜ	�‰ÐEÀtÓ	L€BÙ	Ü˜BŸH™H Q›KÓ(ˆà€DÜ	�‰ÐKÈTÓ	R€BÙ	Ø�x‰x˜‹{ˆä˜˜}Ó-€DØ�9‰9�U˜vˆ9Ó&€DÙØ�d˜B Ð"Ð"ð
 €IÜ�i‰iÐ<¸dÓC€GÜ�I‰IÐ8¸$Ó?€EÙ‘5˜UŸ[™[›]¨W¯[©[«]Ò:Ø˜Ÿ™› u§{¡{£}Ð5ˆ	Ø6?·o±oÔ6GŒ=˜ MÔ2ÈT€DØ€KØ�]‰]˜3 Tˆ]Ó*ò 	3ˆØ�‰yˆØ�j‰j˜tˆjÓ$ˆÜ�I‰IÐWÐY]Ô^Ø §¡£Ñ-°¸T¿Z¹Z»\Ñ1IÈVÐW[×WaÑWaÓWcÑMcÐgj×guÑguÐv~ÕgÜ˜h¨Ó-ˆGØ×%Ñ%Ð&=Ô>Ø/6×/AÑ/AÀ$Ô/G˜' GÒ+ÈW�Ù‘3 7§=¡=°Ó#5°bÑ#9ˆDØ×Ñ  4¨Ð1Õ2ð	3ð (ò Ñˆˆ4�Ø—‘˜S w°x�Ó@ˆØˆŒØ�8‰8Ðà—‘ˆAØˆEÜ& q§z¡zÓ2ò ‘	��EØ˜A’:Ø�EÙðð Ð Ü! !§*¡*¨V¨eÐ"4Ó5ò *�EÜ˜u f¨dÓ3°uÓ<ØŸ™Õ)ð*ð 	
�‰�uÕðð  4?×?¡- ! Q¨’gÓ?€Nà!Ÿ]™]ÖH�r¬g°b¸&À$Õ.G’ÐH€HÐHà€EØó "ˆØ�7‰7�gÒØ�L‰Lœ˜R›Ô!ØØ�7‰7ÐTÑTØ—+‘+˜b¨�+Ó-ˆCÙ˜rŸw™w uœ~ØØŸ;™; wÓ/ˆLÜô  6àŸ™ S¨t˜Ó4ô 6ó 6ˆMñ ™}°·±¸´Ø—‘œS ›WÔ%ØØ�L‰L˜Õà—+‘+˜b¨�+Ó-ˆCÚØ—‘˜SÖ!ð'"ô, ‹5€DØ€KØò "ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÚ�3˜d’?Ø�H‰H�SŒMØ×Ñ˜qÕ!ð	"ð �k‰k˜+Ó&€GØŸ™¨°Ó5ÐØ'ò TÑˆˆ4�Ø˜'Ò! gÐ5FÒ&FØÐ)¨'¨Ð2DÀTÀFÈ(ÐSÑS‰GðTô �f‰fÐ*¨B°Ó8€GÜ�f‰f�Y ¨Ó0×6Ñ6Ó8€GØ�$˜ Ð,Ð,ùóW @ùâHs   ËS7Ë%S=Ë8S=c                  óŠ  — d} t         j                  dd  }d}|t        |«      k  ru||   }|j                  d«      rt	        |j                  dd«      d   «      } n,|dk(  r'|dz   t        |«      k  rt	        ||dz      «      } |dz  }|dz  }|t        |«      k  rŒut        j                  t        d¬«      }|j                  d«       |j                  d	«       |j                  «       }d}d}d}d}	t        d| dz   «      D �]Ô  }
t        |
«      }|s5|	dz  }	t        d
|
› d|	› d�t         j                  ¬«       |	dk\  r|
dkD  r �n“ŒFd}	t        d|
› dt        |«      › d�«       |D �]l  \  }}}	 |j                  d|f«       |j                  «       r|dz  }Œ2	 t'        |«      }|s|dz  }ŒFt)        ||«      \  }}}}|r1t        t+        j,                  dd|«      j/                  «       «      dk  r|dz  }Œ�|s|}|s|}t+        j,                  dd|«      d d }t+        j,                  dd|«      j/                  «       }d|v rdnd}	 |j                  d||||||t0        t2        t4        |df«      }|j6                  }|j                  d||t0        |f«       |j9                  «        |dz  }t        d|› d|d d › �«       t#        j$                  d#«       �Œo �Œ× |jC                  «        t        d$|› d%|› d&|› d'||z   |z   › �«       y # t        j                   $ r t#        j$                  d«       Y �ŒÌw xY w# t        j                   $ rá}d t;        |«      v rÄ|j=                  «        t#        j$                  d!«       	 |j                  d||||||t0        t2        t4        |df«      }|j6                  }|j                  d||t0        |f«       |j9                  «        |dz  }t        d|› d|d d › d"�«       n)# t>        $ r |j=                  «        |dz  }Y n	w xY w|dz  }Y d }~�Œgd }~wt        j@                  $ r	 |dz  }Y �Œ…w xY w)(Nr   r   z--pages=ú=z--pagesé<   )r   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALu     [WARN] ç¬¬u   é¡µæ— æ•°æ�® (fail_streak=ú)r   rE   u     ç¬¬u   é¡µ: æ‰¾åˆ° u    æ�¡z'SELECT id FROM gov_raw WHERE page_url=?rW   r‹   r   é
   éÈ   rŠ   ú z<tablezªINSERT INTO gov_raw (title, summary, content, page_url, source_url, publish_date, site_name, script_name, group_name, has_table, date_rank) VALUES (?,?,?,?,?,?,?,?,?,?,?)zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)z    [z] r
   Úlockedé   u    (é‡�è¯•æˆ�åŠŸ)gš™™™™™Ù?u	   
æ–°å¢ž: u
     é‡�å¤�: u     è¿‡çŸ­/404: u
     æ€»è®¡: )"r(   Úargvr$   r‘   Úintr’   Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorr   ro   r'   r)   ÚfetchoneÚOperationalErrorr*   r+   r4   r»   r>   r?   r@   Ú	SITE_NAMEÚSCRIPT_NAMEÚ
GROUP_NAMEÚ	lastrowidÚcommitr�   Úrollbackr&   ÚIntegrityErrorÚclose)Ú	max_pagesÚargsr.   rQ   ÚconnÚcÚ	total_newÚ	total_dupÚ
total_skipÚfail_streakri   rN   r,   rA   rT   ÚdhtmlÚd_titleÚd_dater¹   r©   ÚsummaryÚ	has_tableÚcurÚridr2   s                            r3   Úmainrå   ë   si  € Ø€IÜ�8‰8�A�Bˆ<€DØ	€AØ
Œc�$‹iŠ-Ø�‰GˆØ�<‰<˜
Ô#Ü˜AŸG™G C¨›O¨AÑ.Ó/‰IØ�)Š^  A¡¬¨D«	Ò 1Ü˜D  Q¡™KÓ(ˆIØ�‰FˆAØ	ˆQ‰ˆð Œc�$‹i‹-ô �?‰?œ7¨BÔ/€DØ‡L�LÐ,Ô-Ø‡L�LÐ*Ô+Ø�‰‹€AØ€IØ€IØ€Jà€KÜ�a˜ Q™Ó'ó AˆÜ˜4Ó ˆÙØ˜1ÑˆKÜ�L  Ð&@ÀÀÈQÐOÔVY×V`ÑV`ÕaØ˜aÒ D¨1¢HÚØØˆÜ��d�V˜<¬¨E«
 |°4Ð8Ô9Ø %ó 7	ÑˆC�˜ðØ—	‘	ÐCÀcÀVÔLØ—:‘:”<Ø ‘N�IØð  ô ˜S“MˆEÙØ˜a‘�
ØÜ4BÀ5È#Ó4NÑ1ˆG�V˜W kÙœc¤"§&¡&¨°R¸Ó"A×"GÑ"GÓ"IÓJÈRÒOØ˜a‘�
ØÙØ�ÙØ�Ü—f‘f˜Z¨¨WÓ5°d°sÐ;ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGØ%¨Ñ0™°aˆIðØ—i‘ið AØ˜g w°°S¸&Ä)Ì[ÔZdÐfoÐqrÐsóu�ð —m‘m�Ø—	‘	ÐpØ ¬°GÐ<ô>à—‘”Ø˜Q‘�	Ü˜˜f˜X R¨°°¨ ~Ð6Ô7ô, �J‰J�sŽOòo7	ðAðF 	‡J�J„LÜ	ˆJ�y�k ¨I¨;°nÀZÀLÐPZÐ[dÐenÑ[nÐoyÑ[yÐZzÐ
{Õ|øôi ×+Ñ+ò Ü—
‘
˜1”Úðûô8 ×+Ñ+ò $Øœs 1›vÑ%Ø—M‘M”OÜ—J‘J˜q”Mð(ØŸi™ið IØ$ g¨w¸¸SÀ&Ì)ÔU`ÔblÐnwÐyzÐ{ó}˜ð "Ÿm™m˜ØŸ	™	Ð"xØ#&¨´¸GÐ"DôFàŸ™œØ! Q™˜	Ü  f X¨R°¸¸°¨~¸_ÐMÕNøÜ$ò (ØŸ™œØ" a™š
ð(úð  !‘O�JÿùÜ×)Ñ)ò Ø˜Q‘“	ðúsV   Å-(LÉA8L4Ì(L1Ì0L1Ì4QÍ2P#Í:A9O4Ï3P#Ï4P	ÐP#ÐP	ÐP#Ð#QÑQÚ__main__)é   rW   )(Ú__doc__r(   r>   r*   rÇ   ÚsslÚurllib.requestr   Úurllib.parser   Úbs4r   rÎ   rÏ   rÐ   rK   r;   rh   re   rf   rd   rg   rÉ   rb   rc   Úcreate_default_contextr"   Úcheck_hostnameÚ	CERT_NONEÚverify_moder    r4   r<   rB   rU   ra   ro   r»   rå   Ú__name__© rC   r3   ú<module>ró      sß   ðñ÷ A× @× @Ó @Ý  Ý à0€	Ø#€Ø€
Ø$€ØÐ0Ñ0€Ø-€	Ø€Ø	€Ø€Ø
!€Ø
€Ø€Ø€à €c× Ñ Ó"€Ø€Ô Ø—-‘-€„ð @ØOØ0ñ€óó"ò"òð( €ò6ò8a-òHZ}ðz ˆzÒÙ…Fð rC   