Ë
    ¡Š£jD4  ã                   óè   — 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mZ  ej                  dd«      Z
ddiZdZd	Zd
ZdZdZeez   dz
  ez  ZdZh d£Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u1  
æ²³åŒ—å”�å±±å�—å ¡ç»�æµŽå¼€å�‘åŒº - é€šçŸ¥å…¬å‘Š
https://www.nanpu.gov.cn/news/18/
portal-saas (fastbuilder/å‡¡ç§‘) CMSï¼ŒAPIé©±åŠ¨
Usage:
  python3 crawl_nanpu.py               # é»˜è®¤5é¡µ
  python3 crawl_nanpu.py --pages 10
  python3 crawl_nanpu.py --full         # å…¨é‡�(18æ�¡/é¡µ, 1557æ�¡çº¦87é¡µ)
é    N)ÚBeautifulSoupÚ	SEARCH_DBz/mnt/data/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36zhttps://www.nanpu.gov.cnÚ
nanpu_gsggÚ1628181411606835200é   i  é   é   >)   ÚpÚddÚdlÚdtÚh1Úh2Úh3Úh4Úh5Úh6ÚhrÚliÚolÚtdÚthÚtrÚulÚdivÚnavÚpreÚformÚmainÚasideÚtableÚtbodyÚtfootÚtheadÚcenterÚdialogÚfigureÚfooterÚheaderÚhgroupÚaddressÚarticleÚcaptionÚdetailsÚsectionÚfieldsetÚ
blockquoteÚ
figcaptionc                 óÒ   ‡‡‡— | €yddl }ddlmŠ g Šˆˆˆfd„Š ‰| «       dj                  ‰«      }|j	                  dd|«      }|j	                  dd	|«      }|j                  «       S )
ul   å�—çº§è¾¹ç•Œå‡ºæ�¢è¡Œã€�è¡Œå†…èŠ‚ç‚¹ç›´æŽ¥æ‹¼æŽ¥ã€�<br> å‡ºæ�¢è¡Œï¼ˆâ‰ˆ æµ�è§ˆå™¨çœ‹åˆ°çš„æ�¢è¡Œç»“æž„ï¼‰ã€‚NÚ r   )ÚNavigableStringc                 óF  •— | j                   D ]‘  }t        |‰«      r‰j                  t        |«      «       Œ*t	        |dd «      dk(  r‰j                  d«       ŒLt	        |dd «      t
        v r+‰j                  d«        ‰|«       ‰j                  d«       ŒŠ ‰|«       Œ“ y )NÚnameÚbrú
)ÚchildrenÚ
isinstanceÚappendÚstrÚgetattrÚ_BLOCK_TAGS)ÚnodeÚchr5   ÚoutÚwalks     €€€ú /root/gov_crawler/crawl_nanpu.pyrC   zbody_text.<locals>.walk-   s„   ø€ Ø—-‘-ò 
	ˆBÜ˜"˜oÔ.Ø—
‘
œ3˜r›7Õ#Ü˜˜V TÓ*¨dÒ2Ø—
‘
˜4Õ Ü˜˜V TÓ*¬kÑ9Ø—
‘
˜4Ô Ù�R”Ø—
‘
˜4Õ á�R•ñ
	ó    z[ \t\r\f\v]*\n[ \t\r\f\v]*r9   ú\n{3,}ú

)ÚreÚbs4r5   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr5   rB   rC   s      @@@rD   Ú	body_textrP   %   sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrE   c                 óÒ  — t         › d�}t        dddddddt        dd	œ	g| d
z
  t        z  g t        dœ}	 t        j                  ||i t
        ¥t         › d�ddœ¥d¬«      }|j                  «       }|j                  d«      dk(  r*|d   j                  dg «      |d   j                  di «      fS g i fS # t        $ r,}t        d|z  t        j                  ¬«       g i fcY d}~S d}~ww xY w)u   é€šè¿‡APIèŽ·å�–åˆ—è¡¨æ•°æ�®z,/fwebapi/cms/lowcode/60003/18505/list?cate=0z$DETAIL_ES.es_multi_category_6d5k7017Ú1Úcategory_6d5k7017Úpagezarray[category]ÚandÚin)	ÚesFieldÚgroupEndÚfieldÚ
sourceTypeÚdataTypeÚlogicÚ
groupBeginÚvalueÚoperatorr   )ÚsizeÚqueryÚfromÚsortÚ	_detailIdz	/news/18/z!application/json, text/plain, */*)ÚRefererÚAccepté   )ÚjsonÚheadersÚtimeoutÚstatusÚ200ÚdataÚlistz  API ERROR: %s©ÚfileN)ÚDOMAINÚ	PAGE_SIZEÚCATEGORY_IDÚrequestsÚpostÚHEADERSrh   ÚgetÚ	ExceptionÚprintÚsysÚstderr)rT   ÚurlÚpayloadÚrrm   Úes         rD   Ú
fetch_listr€   @   s  € äˆHÐ@Ð
A€Cäà=ØØ(Ø Ø)ØØÜ Øñ

ð 
ð ˜‘œYÑ&ØÜ ñ€Gð"Ü�M‰M˜# Gð 6
Üð6
ä ˜ Ð+Ø9ò6
ð ô	ˆð
 �v‰v‹xˆØ�8‰8�HÓ Ò&Ø˜‘<×#Ñ# F¨BÓ/°°f±×1AÑ1AÀ&È"Ó1MÐMÐMØ�2ˆvˆøÜò ÜÐ !Ñ#¬#¯*©*Õ5Ø�2ˆv�ûðús$   ´A8B1 Â-B1 Â1	C&Â:!C!ÃC&Ã!C&c                 ó2	  ‡— 	 t        j                  | t        d¬«      }|j                  }t        |d«      }d}|j                  d«      }|r9|j                  d¬«      }t        j                  dd|«      }|j                  «       }d}|j                  d	«      }|rr|j                  d¬«      }	t        j                  d
|	«      }
|
r§d|
j                  d«      t        |
j                  d«      «      t        |
j                  d«      «      fz  }n_t        j                  d
|«      }|rGd|j                  d«      t        |j                  d«      «      t        |j                  d«      «      fz  }d}g }|j                  d«      }|�r»g }|j                  D �]Ý  }|j                  }|€.t!        |«      j                  «       }|sŒ.|j#                  |«       Œ@|dk(  r|j#                  t!        |«      «       Œ`|dv r_t%        |«      }|sŒrt'        |«      dkD  sŒ�dj)                  d„ |j                  D «       «      }|j#                  |j                  «       «       ŒÃ|dk(  rZ|j                  dd«      }|j                  dd«      }|sŒï|j+                  d«      r|nt,        |z   }|j#                  d|›d�«       �Œ"|dv rC|j/                  dd¬«      D ]+  }|j                  d¬«      }|sŒ|j#                  d|z   «       Œ- �Œi|dk(  s�Œp|j1                  d«      }|s�Œ…|j                  dd«      }|j                  dd«      }|s�Œ­|j+                  d«      r|nt,        |z   }|j#                  d|›d�«       �Œà d j)                  |«      }|j/                  d!d¬"«      D ]¥  }|d#   }t        j                  d$|t        j2                  «      sŒ.|j+                  d«      r|nt,        |z   Š|j                  d¬«      xs t4        j6                  j9                  |«      }t;        ˆfd%„|D «       «      rŒ’|j#                  ‰|d&œ«       Œ§ t        j                  d'd |«      j                  «       }|rt'        |«      d(k  rd| ›d)|xs d*›d+�}|||fS # t        $ r ddg fcY S w xY w),uA   èŽ·å�–è¯¦æƒ…é¡µå†…å®¹ï¼šä»ŽHTMLä¸­çš„e_richText-11æ��å�–å¯Œæ–‡æœ¬rg   )ri   rj   r4   úhtml.parserÚtitleT©rL   u>   [_\-â€”]\s*æ²³åŒ—å”�å±±å�—å ¡ç»�æµŽå¼€å�‘åŒºç®¡ç�†å§”å‘˜ä¼š.*$z.e_timeFormat-28.s_linkz(\d{4})-(\d{1,2})-(\d{1,2})z%s-%02d-%02dr   é   é   z.e_richText-11r!   ©r
   r   r	   c              3   ó~   K  — | ]5  }|j                   st        |«      j                  «       sŒ)t        |«      –— Œ7 y ­w©N©r7   r=   rL   ©Ú.0Úcs     rD   ú	<genexpr>z%get_detail_content.<locals>.<genexpr>•   s'   è ø€ Ò#\¨qÀ1Ç6Â6ÌSÐQRËVÏ\É\Í^¤C¨§FÑ#\ùó   ‚*=­=ÚimgÚsrcÚaltÚhttpú<p><a href="õ   ">æŸ¥çœ‹å›¾ç‰‡</a></p>©r   r   r   F©Ú	recursivez- r'   rG   Úa©Úhrefr›   z"\.(doc|docx|pdf|xls|xlsx|zip|rar)$c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w©r|   N© )rŒ   ÚattÚf_urls     €rD   rŽ   z%get_detail_content.<locals>.<genexpr>³   s   øè ø€ ÒF°3˜3˜u™:¨Õ.ÑFùó   ƒ©r|   rƒ   rF   é   ú">u   è¯¦æƒ…ú</a></p>)rt   rw   rv   Útextrx   r   Ú
select_oneÚget_textrH   rK   rL   ÚsearchÚgroupÚintr:   r7   r=   r<   rP   ÚlenrJ   Ú
startswithrq   Úfind_allÚfindÚIÚosÚpathÚbasenameÚany)Úpage_urlr~   ÚhtmlÚsouprƒ   Út_elrO   Úpub_dateÚdate_elr   ÚmÚdmÚcontentÚattachmentsÚrtÚpartsrM   Útagr¦   ÚtxtÚinnerr‘   r’   Úimg_urlr   r�   r™   r›   Úf_titler    s                                @rD   Úget_detail_contentrÆ   c   s  ø€ ðÜ�L‰L˜¬7¸BÔ?ˆØ�v‰vˆô ˜˜}Ó-€Dð €EØ�?‰?˜7Ó#€DÙØ�M‰M ˆMÓ%ˆÜ�F‰FÐTÐVXÐZ[Ó\ˆØ—‘“	ˆð €HØ�o‰oÐ7Ó8€GÙØ×Ñ DÐÓ)ˆÜ�I‰IÐ4°bÓ9ˆÙØ%¨¯©°«´S¸¿¹À»³_ÄcÈ!Ï'É'ÐRSË*ÃoÐ(VÑV‰Hô �Y‰YÐ5°tÓ<ˆÙØ%¨¯©°!«´c¸"¿(¹(À1»+Ó6FÌÈBÏHÉHÐUVËKÓHXÐ(YÑYˆHð €GØ€KØ	�‰Ð)Ó	*€BÚ	àˆØ—+‘+ó 	ZˆBØ—'‘'ˆCØˆ{Ü˜2“w—}‘}“�ÚØ—L‘L Õ&Ø˜’Ø—‘œS ›WÕ%Ø˜Ñ$Ü “m�Úœ3˜s›8 a›<ØŸG™GÑ#\°B·K±KÔ#\Ó\�EØ—L‘L §¡£Õ/Ø˜’Ø—f‘f˜U BÓ'�Ø—f‘f˜U BÓ'�ÚØ%(§^¡^°FÔ%;™cÄÈ#Á�GØ—L’LÊ7Ð!TÖUØ˜Ñ$ØŸ+™+ d°e˜+Ó<ò 1�BØŸ+™+¨D˜+Ó1�CÚØŸ™ T¨C¡ZÕ0ò1ð ˜”Ø—g‘g˜e“n�ÛØŸ'™' %¨Ó,�CØŸ'™' %¨Ó,�CÛØ),¯©¸Ô)?¡#ÄVÈcÁ\˜ØŸšÊwÐ%XÖYð?	ZðB —+‘+˜eÓ$ˆð —‘˜S t�Ó,ò 	IˆAØ�V‘9ˆDÜ�y‰yÐ>ÀÄbÇdÁdÕKØ $§¡°Ô 7™¼VÀd¹]�ØŸ*™*¨4˜*Ó0ÒJ´B·G±G×4DÑ4DÀTÓ4J�ÜÓF¸+ÔFÕFØ×&Ñ&¨u¸wÑ'GÕHð	Iô �f‰f�Y ¨Ó0×6Ñ6Ó8€GÙ”c˜'“l RÒ'øÚ2:¸EÒ<MÀXÑ<MÐNˆà�H˜kÐ)Ð)øôg ò Ø�2�rˆzÒðús   ƒ(R ÒRÒRc                 óŒ  — | syt        | d«      } |ddg«      D ]  }|j                  «        Œ g }|j                  D �]Ë  }|j                  }|€.t	        |«      j                  «       }|sŒ.|j                  |«       Œ@|dk(  r|j                  t	        |«      «       Œ`|dv rU|j                  d¬«      sŒwdj                  d	„ |j                  D «       «      }|j                  |j                  «       «       Œ¹|d
k(  rŒ¿|dk(  rZ|j                  dd«      }|j                  dd«      }|sŒë|j                  d«      r|nt        |z   }	|j                  d|	›d�«       �Œ|dv rC|j                  dd¬«      D ]+  }
|
j                  d¬«      }|sŒ|j                  d|z  «       Œ- �Œe|dk(  s�Œl|j                  dd«      }|j                  d¬«      }|s�Œ”|s�Œ˜|j                  d«      r|nt        |z   }|j                  d|›d|›d�«       �ŒÎ dj                  |«      }t        j                  dd|«      }|j                  «       }|S )u(   ä»Žrichtext HTMLä¸­æ��å�–çº¯æ–‡æœ¬å†…å®¹r4   r‚   ÚscriptÚstyler!   r‡   Tr„   c              3   ó~   K  — | ]5  }|j                   st        |«      j                  «       sŒ)t        |«      –— Œ7 y ­wr‰   rŠ   r‹   s     rD   rŽ   z,extract_content_from_html.<locals>.<genexpr>Ô   s&   è ø€ ÒX¨1¸q¿vºvÌÈQËÏÉÍ¤ A§ÑXùr�   r8   r�   r‘   r’   r“   r”   r•   r–   r   Fr—   z- %sr™   r›   r¤   r¥   rG   z\s*\n{3,}\s*)r   Ú	decomposer:   r7   r=   rL   r<   r¨   rJ   rw   r­   rq   r®   rH   rK   )Úrichtext_htmlr·   rÁ   Úcontent_partsrM   r¦   rÃ   r‘   r’   rÄ   r   rÂ   r›   r    r½   s                  rD   Úextract_content_from_htmlrÎ   ¾   s  € áØä˜¨Ó6€Dñ �X˜wÐ'Ó(ò ˆØ�‰�ðð €MØ�m‰mó RˆØ�g‰gˆØˆ;Ü�r“7—=‘=“?ˆDÚØ×$Ñ$ TÕ*Ø�GŠ^Ø× Ñ ¤ R£Õ)Ø�LÑ Ø�{‰{ ˆ{Õ&ØŸ™ÑX°·±ÔXÓX�Ø×$Ñ$ U§[¡[£]Õ3Ø�DŠ[ØØ�EŠ\Ø—&‘&˜ Ó#ˆCØ—&‘&˜ Ó#ˆCÚØ!$§¡°Ô!7™#¼VÀc¹\�Ø×$Ò$ÊwÐ%XÖYØ�LÑ Ø—k‘k $°%�kÓ8ò 7�Ø—k‘k¨�kÓ-�ÚØ!×(Ñ(¨°#©Õ6ò7ð �CŒZØ—6‘6˜& "Ó%ˆDØ—+‘+ D�+Ó)ˆCÛ›Ø $§¡°Ô 7™¼VÀd¹]�Ø×$Ò$ÂUÊCÐ%PÖQð=Rð@ �k‰k˜-Ó(€Gô �f‰f�_ f¨gÓ6€GØ�m‰m‹o€Gà€NrE   c                 ó^  ‡
— g }| s|S t        | d«      }|j                  dd¬«      D ]�  }|d   }t        j                  d|t        j                  «      sŒ.|j                  d«      r|nt        |z   Š
|j                  d¬«      xs t        j                  j                  |«      }|j                  ‰
|d	œ«       Œ’ |r|j                  d
g «      ng }t        |t        «      rÍ|D ]È  }t        |t        «      sŒ|j                  dd«      xs |j                  dd«      }	|	sŒ=|	j                  d«      r|	nt        |	z   Š
|j                  dd«      xs3 |j                  dd«      xs t        j                  j                  |	«      }t!        ˆ
fd„|D «       «      rŒµ|j                  ‰
|d	œ«       ŒÊ |S )u    ä»Žrichtextä¸­æ��å�–é™„ä»¶é“¾æŽ¥r‚   r™   Trš   r›   z&\.(doc|docx|pdf|xls|xlsx|zip|rar|txt)$r“   r„   r¢   Úattachment_j6q40145r|   r4   r‘   rƒ   r7   c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­wr�   rž   )rŒ   r™   r    s     €rD   rŽ   z&extract_attachments.<locals>.<genexpr>  s   øè ø€ ÒF°Q˜q ™x¨5Õ0ÑFùr¡   )r   r®   rH   r©   r°   r­   rq   r¨   r±   r²   r³   r<   rw   r;   rn   Údictr´   )rÌ   Ú	item_datar¾   r·   r™   r›   rÅ   Úattachment_datarŸ   r|   r    s             @rD   Úextract_attachmentsrÕ   ó   s~  ø€ à€KÙØÐô ˜¨Ó6€DØ�]‰]˜3 Tˆ]Ó*ò AˆØ�‰yˆÜ�9‰9Ð>ÀÄbÇdÁdÕKØ ŸO™O¨FÔ3‘D¼À$¹ˆEØ—j‘j t�jÓ,ÒF´·±×0@Ñ0@ÀÓ0FˆGØ×Ñ u°wÑ?Õ@ðAñ CL�i—m‘mÐ$9¸2Ô>ÐQS€OÜ�/¤4Ô(Ø"ò 	MˆCÜ˜#œtÕ$Ø—g‘g˜e RÓ(Ò>¨C¯G©G°E¸2Ó,>�ÚØ#&§>¡>°&Ô#9™C¼vÈ¹|�EØ!Ÿg™g g¨rÓ2Òb°c·g±g¸fÀbÓ6IÒbÌRÏWÉW×M]ÑM]Ð^aÓMb�GÜÓF¸+ÔFÕFØ#×*Ñ*°5À7Ñ+KÕLð	Mð ÐrE   c                  óÄ  — t         } dt        j                  v rt        } nht	        t        j                  «      D ]L  \  }}|dk(  sŒ|dz   t        t        j                  «      k  sŒ,	 t        t        j                  |dz      «      }  n t        | t        «      } dd l	}|j                  t        «      }|j                  d«       |j                  «       }d}t        d| dz   «      D �]  }t        d||dz
  t         z  fz  t        j"                  ¬«       t%        |«      \  }}	|s't        d|z  t        j"                  ¬«       |dk(  r �nµŒet        d	|t        |«      |	j'                  d
d«      fz  t        j"                  ¬«       |	j'                  d
d«      }
|D �]O  }|j'                  dd«      xs |j'                  dd«      }|sŒ-|j)                  d«      r|nt*        |z   }|j                  d|t,        f«       |j/                  «       rŒr|j'                  dd«      j1                  «       }|sŒ•|j'                  dd«      }|r|d d nd}t3        |«      \  }}}|r|s|}	 |j                  dt,        ||d d ||d d |dt5        j6                  |d¬«      f«       |dz  }t        d|d d |t        |«      t        |«      fz  t        j"                  ¬«       t;        j<                  d«       �ŒR |j?                  «        �Œ t        dt,        |fz  t        j"                  ¬«       |dkD  rg|j                  dt,        f«       |j                  d «      j/                  «       d   }|j?                  «        t        d!|z  t        j"                  ¬«       |jA                  «        y # t        $ r Y �Œ$w xY w# t8        $ r)}t        d|z  t        j"                  ¬«       Y d }~�Œ	d }~ww xY w)"Nz--fullz--pagesr   r   zPRAGMA journal_mode=WALu   ç¬¬%dé¡µ (from=%d)ro   u     ç¬¬%dé¡µ æ— æ•°æ�®u     ç¬¬%dé¡µ: %d æ�¡ (å…±%sæ�¡)Ú
totalCountú?Ú_hrefr4   Úlink_6W72508rr“   z7SELECT id FROM gov_raw WHERE page_url=? AND site_name=?Útext_2PVENH84ÚprePublishTimeé
   z˜INSERT INTO gov_raw (site_name, page_url, title, content, publish_date, source_url, status, attachments)
                       VALUES (?,?,?,?,?,?,?,?)iô  r£   ÚsyncedF)Úensure_asciiz     + %s (%s) body:%dB attach:%dé2   u       ! å…¥åº“å¤±è´¥: %sg333333Ó?u   
[%s] å®Œæˆ�! æ–°å¢ž %d æ�¡zóINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary)
                      SELECT rowid, title, site_name, substr(content,1,500) FROM gov_raw
                      WHERE site_name=? AND rowid NOT IN (SELECT rowid FROM gov_search)zSELECT changes()u!     gov_search å¢žé‡�æ›´æ–°: %d æ�¡)!ÚDEFAULT_PAGESrz   ÚargvÚ	MAX_PAGESÚ	enumerater¬   r«   Ú
ValueErrorÚminÚsqlite3Úconnectr   ÚexecuteÚcursorÚrangery   rr   r{   r€   rw   r­   rq   Ú	SITE_NAMEÚfetchonerL   rÆ   rh   Údumpsrx   ÚtimeÚsleepÚcommitÚclose)ÚpagesÚir™   rç   Úconnr�   Úall_newÚpgÚitemsÚ	page_infoÚtotal_countÚitr›   rµ   rƒ   Úraw_dater¹   r½   Údetail_dater¾   r   Ú	fts_addeds                         rD   r   r     s’  € Ü€EØ”3—8‘8ÑÜ‰äœcŸh™hÓ'ò 	‰DˆAˆqØ�I‹~ ! a¡%¬#¬c¯h©h«-Ó"7ðÜ¤§¡¨¨Q©¡Ó0�Eñ ð	ô �”yÓ!€EãØ�?‰?œ9Ó%€DØ‡L�LÐ*Ô+Ø�‰‹€Aà€GÜ�A�u˜q‘yÓ!ó 4ˆÜÐ" b¨2¨a©4´Ñ*:Ð%;Ñ;Ä#Ç*Á*ÕMÜ% b›>ÑˆˆyÙÜÐ(¨2Ñ-´C·J±JÕ?Ø�QŠwÚØäÐ-°´S¸³ZÀÇÁÈ|Ð]`ÓAaÐ0bÑbÔil×isÑisÕtØ—m‘m L°!Ó4ˆàó &	ˆBà—6‘6˜' 2Ó&ÒE¨"¯&©&°À"Ó*EˆDÙØØ#Ÿ™¨vÔ6‘t¼FÀT¹MˆHð �I‰IÐOÐRZÔ\eÐQfÔgØ�z‰zŒ|Øð —F‘F˜?¨BÓ/×5Ñ5Ó7ˆEÙØð —v‘vÐ.°Ó3ˆHÙ(0�x  ‘}°bˆHô 1CÀ8Ó0LÑ-ˆG�[ +Ù¡8Ø&�ð
EØ—	‘	ð3ä ¨%°°¨+°wÀÈÈ"ÀØ˜x¬¯©°KÈeÔ)TðVôð ˜1‘�ÜÐ8¸EÀ#À2¸JÈÔRUÐV]ÓR^Ô`cÐdoÓ`pÐ;qÑqÔx{÷  yCñ  yCõ  Dô �J‰J�sŽOðM&	ðP 	�‰Žði4ôl 
Ð
(¬I°wÐ+?Ñ
?ÄcÇjÁjÕQà�‚{Ø	�	‰	ð [ä]fÐ\hô	jð —I‘IÐ0Ó1×:Ñ:Ó<¸QÑ?ˆ	Ø�‰ŒÜÐ1°IÑ=ÄCÇJÁJÕOà‡J�J…LøôW "ò Úðûôt ò EÜÐ.°Ñ2¼¿¹×DÓDûðEús+   Á&NÉA5N-Î	N*Î)N*Î-	OÎ6OÏOÚ__main__)r   )Ú__doc__rz   r±   rH   rï   rh   rt   rI   r   Úgetenvr   rv   rq   rì   rs   rr   ÚTOTAL_ITEMSrã   rá   r?   rP   r€   rÆ   rÎ   rÕ   r   Ú__name__rž   rE   rD   ú<module>r     s§   ðñ÷ )× (× (Ý àˆB�I‰I�kÐ#8Ó9€	ØÐWÐ
X€Ø	#€Ø€	Ø#€Ø€	Ø€Ø˜9Ñ$ qÑ(¨YÑ6€	Ø€ò*€òó6 òFX*òv2òjò<Tðn ˆzÒÙ…Fð rE   