ó
    ã fi‡„  ã                   óþ  • 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SKJr  SSK	r	SSK
r
SSKrSSKrSSKJrJrJrJrJr  SSKJrJr  SSKJrJrJrJrJrJrJr  SSKJr  SSK J!r!  SSKJ"r"  SS	K#J$r$  SS
K%J&r&  SSK'J(r(  SSK)J*r*  \+" SS/S9r,\\\\\S.r- \.  \!" \"" S5      5      \Rb                  " \,S9S 5       5       r2\2Rg                  \$5        \2Rg                  \&5        \2Rg                  \(5        \2Rg                  \*5        \2Ri                  5       \Rj                  " SSSS9\Rl                  " SS\Rn                  " SS9S9\Rl                  " SS\Rp                  " \-Rs                  5       5      S9S 5       5       5       5       r:\2Ri                  SS 9\Rl                  " SS!S"9\Rj                  " S#S$S%S&SS'9\Rj                  " S(S)S*S&SS'9\Rj                  " S+S,S-S&SS'9\Rj                  " S.S/S0SS9S1 5       5       5       5       5       5       r;\2Ri                  5       \Rl                  " S2S3S"9S4 5       5       r<\2Ri                  5       \Rl                  " S5S6S7S89S9 5       5       r=\2Ri                  5       \Rj                  " SS:S\0S;9\Rj                  " S<S=S>\>S;9\Rl                  " S?S@S"9\Rl                  " S5S6S7S89SA 5       5       5       5       5       r?\2Ri                  5       \Rj                  " SBSCSD\Rp                  " SDSE/5      S;9\Rj                  " S+SFS&SS'9\Rj                  " SGSHSISS9\Rj                  " S(S)SJS&SS'9\Rl                  " SKSLS"9SM 5       5       5       5       5       5       r@\2Ri                  5       SN 5       rA\2Ri                  5       \Rj                  " SOSSP9\Rj                  " SSSQS9\Rj                  " SRSSSTSSU9\Rj                  " SGSHSVSW9\Rj                  " SXSYSZS9\Rl                  " S[S\\Rn                  " SS9S7S]9S^ 5       5       5       5       5       5       5       rB\2Ri                  5       \Rj                  " S_S`SS&SaSb9Sc 5       5       rC\2Ri                  5       \Rj                  " SOSSP9\Rj                  " SSdSQS9\Rj                  " S<SeSf\>S;9\Rj                  " SXSYSZS9\Rl                  " S5S6S7S89Sg 5       5       5       5       5       5       rD\2Ri                  5       \Rj                  " S<ShSi\>S;9\Rj                  " SjSkSlS9\Rj                  " SGSHSmSS9\Rl                  " S5S6S7S89Sn 5       5       5       5       5       rE\2Ri                  5       \Rj                  " SoSpSq\0S;9\Rj                  " SSSQS9\Rj                  " SXSYSZS9\Rj                  " SrSsS\0S;9\Rj                  " StSuS\0S;9\Rj                  " SvSwS\0S;9\Rj                  " SxSyS\0S;9\Rj                  " SzS{S\0S;9\Rj                  " S|S}S\0S;9\Rj                  " S~SS\0S;9\Rj                  " S€S�S\0S;9\Rj                  " S<S=S7\>S;9\Rj                  " S‚SƒS„\>S;9\Rj                  " S…S†S\>S;9\Rj                  " SOSSP9\Rj                  " S‡SˆSS‰9SŠ 5       5       5       5       5       5       5       5       5       5       5       5       5       5       5       5       5       rF\2Ri                  5       \Rj                  " SjS‹SŒ\0S;9\Rj                  " SGSHS�SS9\Rj                  " S(S)SŽS&SS'9\Rl                  " S5S6S7S89S� 5       5       5       5       5       rG\2Ri                  5       \Rl                  " SKS�S"9S‘ 5       5       rH\2Ri                  5       S’ 5       rI\2Ri                  5       S“ 5       rJ\KS”:X  a  \2" 5         gg! \/ a    \0r. GNåf = f)•aš  
Shodan CLI

Note: Always run "shodan init <api key>" before trying to execute any other command!

A simple interface to search Shodan, download data and parse compressed JSON files.
The following commands are currently supported:

    alert
    convert
    count
    data
    download
    honeyscore
    host
    info
    init
    myip
    parse
    radar
    scan
    search
    stats
    stream
    trends

é    N)ÚCsvConverterÚKmlConverterÚGeoJsonConverterÚExcelConverterÚImagesConverter)ÚSHODAN_CONFIG_DIRÚCOLORIZE_FIELDS)Úasync_spinnerÚget_api_keyÚescape_dataÚtimestrÚopen_streaming_fileÚget_banner_fieldÚmatch_filters)Ú
HOST_PRINT)Úwith_plugins)Úiter_entry_points)Úalert)Údata)Úorg)Úscanz-hz--help)Úhelp_option_names)ÚkmlÚcsvzgeo.jsonÚimagesÚxlsxzshodan.cli.plugins)Úcontext_settingsc                  ó   • g )N© r   ó    ÚT/home/gothic/public_html/Scylla/venv/lib/python3.13/site-packages/shodan/__main__.pyÚmainr"   Q   s   € ð 	r    z--fieldszList of properties to output.)ÚhelpÚdefaultÚinputz<input file>T)Úexists)ÚmetavarÚtypeÚformatz<output format>c                 ó²  • Sn[         R                  U5      nU (       a[  [        US5      (       d  [        R                  " S5      eU R                  S5       Vs/ s H  oUR                  5       PM     snUl        [        R                  R                  U5      nUR                  SS5      R                  SS5      nSR                  Xb5      n[        US	5      n[        R                  " 5       n	[        R                   " ["        U	4S
9n
U
R%                  5         U" U5      nUR'                  U/U5        U	R)                  5         U
R+                  5         US:X  aC  [        R,                  " [        R.                  " SR                  UR0                  5      SS95        g[        R,                  " [        R.                  " SR                  U5      SS95        gs  snf )z±Convert the given input data file into a different format. The following file formats are supported:

kml, csv, geo.json, images, xlsx

Example: shodan convert data.json.gz kml
r   Úfieldsz0File format doesnt support custom list of fieldsÚ,ú.json.gzÚ z.jsonz{}.{}Úw)ÚtargetÚargsr   z/Successfully extracted images to directory: {}Úgreen©Úfgz"Successfully created new file: {}N)Ú
CONVERTERSÚgetÚhasattrÚclickÚClickExceptionÚsplitÚstripr+   ÚosÚpathÚgetsizeÚreplacer)   ÚopenÚ	threadingÚEventÚThreadr
   ÚstartÚprocessÚsetÚjoinÚechoÚstyleÚdirname)r+   r%   r)   Ú	file_sizeÚconverter_classÚitemÚbasenameÚfilenameÚfoutÚfinished_eventÚprogress_bar_threadÚ	converters               r!   ÚconvertrT   ^   ss  € ð €Iä —n‘n VÓ,€OÞÜ�¨×1Ñ1Ü×&Ò&Ð'YÓZÐZØ;A¿<¹<ÈÔ;LÓ!MÒ;L°4§*¡*¦,Ñ;LÑ!MˆÔô —‘—‘ Ó&€Ið �}‰}˜Z¨Ó,×4Ñ4°W¸bÓA€Hð �~‰~˜hÓ/€Hô �˜#Ó€Dô —_’_Ó&€NÜ#×*Ò*´-À~ÐFWÑXÐØ×ÑÔñ   Ó%€Ià×Ñ�u�g˜yÔ)à×ÑÔØ×ÑÔà�ÓÜ�
Š
”5—;’;ÐQ×XÑXÐYb×YjÑYjÓkÐpwÑxÕyä�
Š
”5—;’;ÐD×KÑKÈHÓUÐZaÑbÕcùò= "Ns   ÁGÚdomain)Únamez<domain>)r'   z	--detailsz-Dz9Lookup host information for any IPs in the domain resultsF)r#   r$   Úis_flagz--savez-SzRSave the information in the a file named after the domain (append if file exists).z	--historyz-Hz*Include historical DNS data in the resultsz--typez-Tz-Only returns DNS records of the provided typec                 óˆ  • [        5       n[        R                  " U5      n UR                  R	                  XUS9n0 n	U(       a¯  US    V
s/ s H  oªS   S;   d  M  U
S   PM     nn
[        U5      nSnU(       a'  SR                  U 5      n[        R                  " U5      nU HL  n UR                  U5      Xž'   U(       a.  Xž   S    H!  nSU;  d  M  [        R                  " XÏ5        M#     ML  MN     U(       aI  S	R                  U 5      n[        R                  " U5      nUS    H  n
[        R                  " XÊ5        M     [        R                  " US
   R!                  5       SS9  [        R"                  " S5        US    HØ  n
[        R"                  " SR                  [        R$                  " U
S   SS9[        R$                  " U
S   SS9U
S   5      SS9  U
S   U	;   aa  XšS      n[        R                  " SR                  SR'                  [)        US   5       Vs/ s H  n[+        U5      PM     sn5      5      SSS9  [        R"                  " S5        MÚ     g! [        R
                   a%  n[        R                  " UR                  5      eSnAff = fs  sn
f ! [        R
                   a     GM  f = fs  snf )z+View all available information for a domain)Úhistoryr(   Nr   r(   )ÚAÚAAAAÚvaluez{}-hosts.json.gzÚplaceholderú
{}.json.gzrU   r2   r3   r.   z{:32}  {:14}  {}Ú	subdomainÚcyanÚyellowF©Únlz
 Ports: {}z, ÚportsÚblue)r4   rc   )r   ÚshodanÚShodanÚdnsÚdomain_infoÚAPIErrorr8   r9   r\   rF   r)   ÚhelpersÚ	open_fileÚhostÚwrite_bannerÚsechoÚupperrH   rI   rG   ÚsortedÚstr)rU   ÚdetailsÚsaverY   r(   ÚkeyÚapiÚinfoÚeÚhostsÚrecordÚipsrP   rO   ÚipÚbannerrm   Úports                     r!   ri   ri   �   sd  € ô ‹-€CÜ
�-Š-˜Ó
€Cð,Ø�w‰w×"Ñ" 6ÀÐ"ÐFˆð
 €EÞØ-1°&ª\Ó]ª\ 6ÀF¹^È}Ñ=\‹ˆv�gŒ©\ˆÐ]Ü�#‹hˆàˆÞØ*×1Ñ1°&Ó9ˆHÜ×$Ò$ XÓ.ˆDãˆBð	ØŸH™H R›L�‘	ö Ø"'¡)¨FÔ"3˜Ø(°Õ6Ü#×0Ò0°Ö>ó #4ñ ñ ö Ø ×'Ñ'¨Ó/ˆÜ× Ò  Ó*ˆà˜6”lˆFÜ× Ò  Ö.ñ #ô 
‡K‚K��X‘×$Ñ$Ó&¨7Ò3ä	‡J‚Jˆr„NØ�v”,ˆÜ�
Š
Ø×&Ñ&Ü—’˜F ;Ñ/°FÑ;Ü—’˜F 6™N¨xÑ8Ø�w‘óð
 ò	
ð �'‰?˜eÓ#Ø ™Ñ)ˆDÜ�KŠK˜×,Ñ,¨T¯Y©YÌfÐUYÐZaÑUbÔNcÓ7dÒNcÀd¼¸D¾	ÑNcÑ7dÓ-eÓfÐkqÐv{Ò|ä�
Š
�2Žò øôK �?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,üò ^øô" —?‘?ó Ûðüò4 8esA   ¢I" ÁJÁ	JÂ((J#ÃJ#È#J?É"JÉ6 JÊJÊ#J<Ê;J<ru   z	<api key>c                 ó   • [         R                  R                  [        5      n[         R                  R	                  U5      (       d   [         R
                  " U5        U R                  5       n  [        R                  " U 5      nUR                  5         US-   n[!        US5       nUR#                  U R                  5       5        [        R$                  " [        R&                  " SSS95        SSS5        [         R(                  " US5        g! [         a&    [        R                  " SR                  U5      5      ef = f! [        R                   a%  n[        R                  " UR                  5      eSnAff = f! , (       d  f       N•= f)	z"Initialize the Shodan command-linez;Unable to create directory to store the Shodan API key ({})Nz/api_keyr/   zSuccessfully initializedr2   r3   i€  )r<   r=   Ú
expanduserr   ÚisdirÚmakedirsÚOSErrorr8   r9   r)   r;   rf   rg   rw   rj   r\   r@   ÚwriterH   rI   Úchmod)ru   Ú
shodan_dirrv   rx   ÚkeyfilerP   s         r!   Úinitrˆ   Ó   s"  € ô
 —‘×#Ñ#Ô$5Ó6€JÜ�7‰7�=‰=˜×$Ñ$ð	yÜ�KŠK˜
Ô#ð
 �)‰)‹+€Cð,Ü�mŠm˜CÓ ˆØ�‰Œ
ð
 ˜:Ñ%€GÜ	ˆg�sÔ	˜tØ�
‰
�3—9‘9“;ÔÜ�
Š
”5—;’;Ð9¸gÑFÔG÷ 
ô ‡H‚HˆW�eÕøô# ó 	yÜ×&Ò&Ð'd×'kÑ'kÐlvÓ'wÓxÐxð	yûô �?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,ú÷
 
Õ	ús1   Á	D Á0&E Â'A	E?Ä0E ÅE<Å E7Å7E<Å?
FÚqueryz<search query>éÿÿÿÿ)r'   Únargsc                 óˆ  • [        5       nSR                  U 5      R                  5       n U S:X  a  [        R                  " S5      e[
        R                  " U5      n UR                  U 5      n[        R                  " US   5        g! [
        R                   a%  n[        R                  " UR                  5      eSnAff = f)z*Returns the number of results for a searchÚ r.   úEmpty search queryNÚtotal)r   rG   r;   r8   r9   rf   rg   Úcountrj   r\   rH   )r‰   ru   rv   Úresultsrx   s        r!   r�   r�   ð   sŸ   € ô ‹-€Cð �H‰H�U‹O×!Ñ!Ó#€Eð �ƒ{Ü×"Ò"Ð#7Ó8Ð8ô �-Š-˜Ó
€Cð,Ø—)‘)˜EÓ"ˆô 
‡J‚Jˆw�wÑÕ øô �?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,ús   ÁB ÂCÂ B<Â<CzNSpecify the list of properties to download instead of grabbing the full banner)r#   r$   r(   z--limitzQThe number of results you want to download. -1 to download all the data possible.éè  rO   z
<filename>c           	      óÂ  • [        5       nSR                  U5      R                  5       nUS:X  a  [        R                  " S5      eUR                  5       nUS:X  a  [        R                  " S5      eUR                  S5      (       d  US-  nU b.  U R                  S5       Vs/ s H  oUR                  5       PM     n n[        R                  " U5      n UR                  U5      S   nUR                  5       n[        R                  " S
R                  U5      5        [        R                  " SR                  U5      5        [        R                  " SR                  US   5      5        [        R                  " SR                  U5      5        X:”  a  UnUS::  a  Un[        R                  " US5       n	Sn
 UR!                  USU S9n[        R"                  " X±S9 nU H%  n[        R$                  " X�5        U
S-  n
X¡:¼  d  M%    O   SSS5        X¡:  a+  [        R                  " [        R&                  " SS5      5        [        R                  " [        R&                  " SR                  X¢5      S5      5        SSS5        gs  snf ! [         a    [        R                  " S	5      ef = f! , (       d  f       Nª= f! [         a     N¹f = f! , (       d  f       g= f)z@Download search results and save them in a compressed JSON file.r�   r.   rŽ   zEmpty filenamer-   Nr,   r�   zEThe Shodan API is unresponsive at the moment, please try again later.zSearch query:			{}zTotal number of results:	{}zQuery credits left:		{}Úunlocked_leftzOutput file:			{}r   r/   F)Úminifyr+   )Úlengthé   z/Notice: fewer results were saved than requestedra   zSaved {} results into file {}r2   )r   rG   r;   r8   r9   Úendswithr:   rf   rg   r�   rw   Ú	ExceptionrH   r)   rk   rl   Úsearch_cursorÚprogressbarrn   rI   )r+   ÚlimitrO   r‰   ru   rM   rv   r�   rw   rP   r�   ÚcursorÚbarr}   s                 r!   ÚdownloadrŸ     sj  € ô ‹-€Cð �H‰H�U‹O×!Ñ!Ó#€Eð �ƒ{Ü×"Ò"Ð#7Ó8Ð8à�~‰~Ó€HØ�2ƒ~Ü×"Ò"Ð#3Ó4Ð4ð ×Ñ˜Z×(Ñ(Ø�JÑˆð ÑØ+1¯<©<¸Ô+<Ó=Ò+< 4—*‘*–,Ñ+<ˆÐ=ô �-Š-˜Ó
€CðlØ—	‘	˜%Ó  Ñ)ˆØ�x‰x‹zˆô
 
‡J‚JÐ&×-Ñ-¨eÓ4Ô5Ü	‡J‚JÐ-×4Ñ4°UÓ;Ô<Ü	‡J‚JÐ*×1Ñ1°$°Ñ2GÓHÔIÜ	‡J‚JÐ%×,Ñ,¨XÓ6Ô7àƒ}Øˆð �ƒzØˆä	×	Ò	˜8 SÔ	)¨TØˆð
	Ø×&Ñ& u°UÀ6Ð&ÐJˆFÜ×"Ò" 6Ò8¸CÛ!�FÜ×(Ò(¨Ô6Ø˜Q‘J�Eà•~Ùñ "÷ 9ð ‹=Ü�JŠJ”u—{’{Ð#TÐV^Ó_Ô`Ü�
Š
”5—;’;Ð?×FÑFÀuÓWÐY`ÓaÔb÷# 
*Ð	)ùò1 >øô ó lÜ×"Ò"Ð#jÓkÐkðlú÷( 9Õ8ûô ó 	Ùð	ú÷ 
*Õ	)úsm   Â#JÃ$J Æ6KÆ:%K Ç$J/ÈJ/ÈK ÈA*KÊ!J,Ê/
J=	Ê9K Ê<KÊ=K Ë 
KË
KËKËKË
Kz--formatzMThe output format for the host information. Possible values are: pretty, tsv.ÚprettyÚtsvz&Show the complete history of the host.z
--filenamez-OzDSave the host information in the given file (append if file exists).zSSave the host information in the a file named after the IP (append if file exists).r|   z<ip address>c                 ó  • [        5       n[        R                  " U5      n UR                  XAS9n[        U    " XqS9  U(       d  U(       a}  U(       a  SR                  U5      nUR                  S5      (       d  US-  n[        R                  " U5      n[        US   S S9 H!  n	SU	;  d  M  [        R                  " X‰5        M#     gg! [        R                   a%  n
[        R                  " U
R                  5      eSn
A
ff = f)	z0View all available information for an IP address)rY   r^   r-   r   c                 ó   • U S   $ )Nr~   r   )Úks    r!   Ú<lambda>Úhost.<locals>.<lambda>j  s   € ¸Q¸vºYr    )ru   r]   N)r   rf   rg   rm   r   r)   r˜   rk   rl   rq   rn   rj   r8   r9   r\   )r)   rY   rO   rt   r|   ru   rv   rm   rP   r}   rx   s              r!   rm   rm   M  sã   € ô ‹-€CÜ
�-Š-˜Ó
€Cð,Ø�x‰x˜ˆxÐ,ˆô 	�6Ò˜4Ò1ö –tÞØ'×.Ñ.¨rÓ2�ð ×$Ñ$ Z×0Ñ0Ø˜JÑ&�ô ×$Ò$ XÓ.ˆDä   f¡Ñ3FÔG�Ø ¨Õ.Ü×(Ò(¨Ö6ò Hð øô �?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,ús   ¢BC
 Â.C
 Ã
DÃ C>Ã>Dc                  ó6  • [        5       n [        R                  " U 5      n UR                  5       n[
        R                  " SR                  US   US   5      5        g! [        R                   a%  n[
        R                  " UR                  5      eSnAff = f)z,Shows general information about your accountNz=Query credits available: {0}
Scan credits available: {1}
    Úquery_creditsÚscan_credits)
r   rf   rg   rw   rj   r8   r9   r\   rH   r)   )ru   rv   r‘   rx   s       r!   rw   rw   q  s~   € ô ‹-€CÜ
�-Š-˜Ó
€Cð,Ø—(‘(“*ˆô 
‡J‚Jð ç‰ˆw�Ñ'¨°Ñ)@ÓAõCøô �?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,ús   ¢A ÁBÁ3 BÂBz--color/--no-color)r$   zip_str,port,hostnames,dataz	--filtersz-fz=Filter the results for specific values using key:value pairs.)r#   ÚmultiplezDSave the filtered results in the given file (append if file exists).)r#   z--separatorz;The separator between the properties of the search results.Ú	Ú	filenamesz<filenames>)r'   r(   r‹   c           	      óÎ  • UR                  S5       Vs/ s H  ofR                  5       PM     nn[        U5      S:X  a  [        R                  " S5      e[        U5      S:„  nSnU(       aN  U(       d  [        R                  " S5      eUR                  S5      (       d  US-  n[        R                  " U5      n[        R                  " U5       GH  n	Sn
U(       a  [        X’5      (       d  M  U(       a  [        R                  " X‰5        [        U5       H¬  u  p¼Sn[        Xœ5      nU(       a…  [        U5      nU[        :X  a  SR                  U5      nO-U[         ["        4;   a  S	R%                  U5      nO['        U5      nU (       a*  [        R(                  " U[*        R,                  " US
5      S9nUS:”  a  X¤-  n
X­-  n
M®     [        R.                  " U
5        GM     gs  snf )z1Extract information out of compressed JSON files.r,   r   ú+Please define at least one property to showNzPOutput file specified without any filters. Need to use filters with this option.r-   r.   Ú;ú{}Úwhiter3   )r:   r;   Úlenr8   r9   r˜   rk   rl   Úiterate_filesr   rn   Ú	enumerater   r(   ÚlistrG   ÚintÚfloatr)   r   rI   r	   r6   rH   )Úcolorr+   ÚfiltersrO   Ú	separatorr¬   rM   Úhas_filtersrP   r}   ÚrowÚiÚfieldÚtmpr\   Ú
field_types                   r!   ÚparserÁ   €  s•  € ð (.§|¡|°CÔ'8Ó9Ò'8˜t�j‰jŽlÑ'8€FÐ9ä
ˆ6ƒ{�aÓÜ×"Ò"Ð#PÓQÐQä�g“, Ñ"€Kð €DÞæÜ×&Ò&Ð'yÓzÐzð × Ñ  ×,Ñ,Ø˜
Ñ"ˆHÜ× Ò  Ó*ˆä×'Ò'¨	×2ˆØˆö œ}¨V×=Ñ=Ùö Ü× Ò  Ô.ô " &Ö)‰HˆAØˆCÜ$ VÓ3ˆEÞÜ! %›[�
ð ¤Ó%ØŸ)™) EÓ*‘CØ¤C¬ <Ó/ØŸ,™, uÓ-‘Cä% eÓ,�Cö ÜŸ+š+ c¬o×.AÒ.AÀ%ÈÓ.QÑR�Cð �1‹uØÑ �Ø‰JŠCñ+ *ô. 	�
Š
�3�òG 3ùò' :s   ”G"z--ipv6z-6zTry to use IPv6 instead of IPv4)rW   r$   r#   c                 ó6  • [        5       n[        R                  " U5      nU (       a  SUl         [        R
                  " UR                  R                  5       5        g! [        R                   a%  n[        R                  " UR                  5      eSnAff = f)zPrint your external IP addresszhttps://apiv6.shodan.ioN)r   rf   rg   Úbase_urlr8   rH   ÚtoolsÚmyiprj   r9   r\   )Úipv6ru   rv   rx   s       r!   rÅ   rÅ   Ã  sj   € ô ‹-€Cä
�-Š-˜Ó
€Cö Ø0ˆŒð,Ü�
Š
�3—9‘9—>‘>Ó#Õ$øÜ�?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,ús   °.A ÁBÁ3 BÂBz1List of properties to show in the search results.zCThe number of search results that should be returned. Maximum: 1000éd   c           	      ó*  • [        5       nSR                  U5      R                  5       nUS:X  a  [        R                  " S5      eUS:”  a  [        R                  " S5      eUR                  S5       Vs/ s H  ofR                  5       PM     nn[        U5      S:X  a  [        R                  " S5      e[        R                  " U5      n UR                  XBS	US
9nUS   S:X  a  [        R                  " S5      eSn
US    H¶  nSnU H¤  nSn[        X½5      nU(       a‰  [        U5      nU[        :X  a  SR                  U5      nO-U[        [         4;   a  SR#                  U5      nO[%        U5      nU (       a*  [        R&                  " U[(        R*                  " US5      S9nXÎ-  nXÃ-  nM¦     X¬S-   -  n
M¸     [        R,                  " U
5        gs  snf ! [        R                   a%  n	[        R                  " U	R                  5      eSn	A	ff = f)zSearch the Shodan databaser�   r.   rŽ   r’   z,Too many results requested, maximum is 1,000r,   r   r®   F)rœ   r•   r+   Nr�   úNo search results foundÚmatchesr¯   r°   r±   r3   Ú
)r   rG   r;   r8   r9   r:   r²   rf   rg   Úsearchrj   r\   r   r(   rµ   r¶   r·   r)   r   rI   r	   r6   Úecho_via_pager)r¸   r+   rœ   rº   r‰   ru   rM   rv   r‘   rx   Úoutputr}   r¼   r¾   r¿   r\   rÀ   s                    r!   rÌ   rÌ   Õ  sæ  € ô ‹-€Cð �H‰H�U‹O×!Ñ!Ó#€Eð �ƒ{Ü×"Ò"Ð#7Ó8Ð8ð ˆtƒ|Ü×"Ò"Ð#QÓRÐRð (.§|¡|°CÔ'8Ó9Ò'8˜t�j‰jŽlÑ'8€FÐ9ä
ˆ6ƒ{�aÓÜ×"Ò"Ð#PÓQÐQô �-Š-˜Ó
€Cð,Ø—*‘*˜U¸Àf�*ÐMˆð
 ˆwÑ˜1ÓÜ×"Ò"Ð#<Ó=Ð=ð €FØ˜)Ô$ˆØˆó ˆEØˆCÜ$ VÓ3ˆEÞÜ! %›[�
ð ¤Ó%ØŸ)™) EÓ*‘CØ¤C¬ <Ó/ØŸ,™, uÓ-‘Cä% eÓ,�Cö ÜŸ+š+ c¬o×.AÒ.AÀ%ÈÓ.QÑR�Cð ‘
�ØÑŠCñ) ð. 	˜‘+ÑŠñ7 %ô: 
×Ò˜Õ ùò_ :øô �?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,ús   Á5GÃG ÇHÇ- HÈHz The number of results to return.é
   z--facetsz%List of facets to get statistics for.zcountry,orgz4Save the results in a CSV file of the provided name.c           
      ó@  • [        5       n[        R                  " U5      nSR                  U5      R	                  5       nUS:X  a  [
        R                  " S5      eUR                  S5      nU Vs/ s H  ofU 4PM     nn UR                  X1S9nUS    Hã  n[
        R                  " SR                  [        US   U   5      U5      5        US   U    H‰  n	S	R                  U	S
   5      n
[
        R                  " [
        R                  " SR                  U
5      SS9SS9  [
        R                  " [
        R                  " SR                  U	S   5      SS95        M‹     [
        R                  " S5        Må     SnU(       GaS  UR                  S5      (       d  US-  n[!        US5      n["        R$                  " U["        R&                  S9nUR)                  SU/5        UR)                  / 5        / nUS    H%  nUR+                  U5        UR+                  S5        M'     UR)                  U5        SnSnU(       a˜  [-        [        US   5      S-  5       Vs/ s H  nSPM     nnSnSnUS    H:  nUS   U   n[        U5      U:”  a  SnUU   S
   UU'   UU   S   UUS-   '   US-  nM<     U(       a  UR)                  U5        US-  nU(       a  M—  gggs  snf ! [        R                   a%  n[
        R                  " UR                  5      eSnAff = fs  snf )z0Provide summary information about a search queryr�   r.   rŽ   r,   ©ÚfacetsNrÒ   zTop {} Results for Facet: {}r°   r\   z{:28s}r`   r3   Frb   z{:12,d}r�   r2   z.csvr/   )ÚdialectÚQueryr   Té   r—   )r   rf   rg   rG   r;   r8   r9   r:   r�   rj   r\   rH   r)   r²   rI   r˜   r@   r   ÚwriterÚexcelÚwriterowÚappendÚrange)rœ   rÒ   rO   r‰   ru   rv   Úfacetr‘   rx   rM   r\   rP   rÖ   r¼   ÚcounterÚ	has_itemsr½   ÚposÚvaluess                      r!   Ústatsrà     sá  € ô ‹-€CÜ
�-Š-˜Ó
€Cð �H‰H�U‹O×!Ñ!Ó#€Eð �ƒ{Ü×"Ò"Ð#7Ó8Ð8à�\‰\˜#Ó€FÙ*0Ó1ª& �e‹n©&€FÐ1ð,Ø—)‘)˜E�)Ð1ˆð
 ˜Ô"ˆÜ�
Š
Ð1×8Ñ8¼¸WÀXÑ=NÈuÑ=UÓ9VÐX]Ó^Ô_à˜HÑ% eÔ,ˆDà—L‘L  g¡Ó/ˆEä�JŠJ”u—{’{ 9×#3Ñ#3°EÓ#:¸vÑFÈ5ÒQÜ�JŠJ”u—{’{ :×#4Ñ#4°T¸'±]Ó#CÈÑPÖQñ -ô 	�
Š
�2Žñ #ð €DßØ× Ñ  ×(Ñ(Ø˜ÑˆHÜ�H˜cÓ"ˆÜ—’˜D¬#¯)©)Ñ4ˆð 	�‰˜ %Ð(Ô)ð 	�‰˜Ôð ˆØ˜XÔ&ˆEØ�J‰J�uÔØ�J‰J�rŽNñ 'ð 	�‰˜Ôð ˆØˆ	Þä$¤S¨°Ñ):Ó%;¸aÑ%?Ô@ÓAÒ@˜!“2Ñ@ˆCÐAàˆCØˆIØ  Ô*�Ø  Ñ*¨5Ñ1�ô �v“; Ó(Ø $�IØ% g™¨wÑ7�C˜‘HØ#)¨'¡?°7Ñ#;�C˜˜a™‘Là�q‘’ñ +ö Ø—‘ Ô$ð �q‰LˆG÷- Šið- ùò/ 2øô
 �?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,üòT Bs$   Á1KÂK ÉLËLË3 LÌLz
--streamerz?Specify a custom Shodan stream server to use for grabbing data.zhttps://stream.shodan.ioz	--datadirzDSave the stream data into the specified directory as .json.gz files.z--asnz/A comma-separated list of ASNs to grab data on.z--alertzQThe network alert ID or "all" to subscribe to all network alerts on your account.z--countriesz4A comma-separated list of countries to grab data on.z--custom-filtersz8A space-separated list of filters query to grab data on.z--portsz0A comma-separated list of ports to grab data on.z--tagsz/A comma-separated list of tags to grab data on.z--vulnsz:A comma-separated list of vulnerabilities to grab data on.z--compresslevelzIThe gzip compression level (0-9; 0 = no compression, 9 = most compressioné	   z	--timeoutz[Timeout. Should the shodan stream cease to send data, then timeout after <timeout> seconds.z--quietz2Disable the printing of information to the screen.)r#   rW   c           	      ó:	  ^"• [        5       n[        R                  " U5      m"U T"R                  l        UR                  S5       Vs/ s H  nUR                  5       PM     nn[        U5      S:X  a  [        R                  " S5      e/ nU(       a  UR                  S5        U(       a  UR                  S5        U(       a  UR                  S5        U(       a  UR                  S5        U	(       a  UR                  S5        U
(       a  UR                  S	5        U(       a  UR                  S
5        [        U5      S:”  a  [        R                  " S5      eSnU(       a9   UR                  S5       Vs/ s H  n[        UR                  5       5      PM     nnU(       a(  UR                  " 5       nUR                  " 5       S:w  a  UnU(       a  UR                  S5      nU(       a  UR                  S5      nU	(       a  U	R                  S5      nU
(       a  U
R                  S5      nU(       a  Un[        U5      S:X  a  US   nOSnU"4S jnU" UUUS9nSnSn[        5       nSnU(       a  [        UUU5      nU(       GdH   U GH4  nUS:”  a  US-  nUU:”  a  Sn  GO U(       aE  [        5       nUU:w  a  UnUR!                  5         [        UU5      n["        R$                  " UU5        U(       a  Mo  SnU H§  nSn['        UU5      nU(       aŠ  [)        U5      n U [*        :X  a  SR-                  U5      nO-U [        [.        4;   a  SR1                  U5      nO[3        U5      nU(       a*  [        R4                  " U[6        R8                  " US5      S9nUU-  nUU-  nM©     [        R:                  " U5        GM7      U(       d  GMG  ggs  snf s  snf ! [         a    [        R                  " S5      ef = f! [<        R>                  R@                   a    [        R                  " S5      e[B         a    Sn N{[        RD                   a%  n![        R                  " U!RF                  5      eSn!A!f[H         a!    [J        RL                  " S5        U" UUUS9n NÛf = f)zStream data in real-time.r,   r   r®   rd   Ú	countriesÚasnr   ÚtagsÚvulnsÚcustom_filtersr—   z}Please use --ports, --countries, --custom, --tags, --vulns OR --asn. You cant subscribe to multiple filtered streams at once.NzInvalid list of portsÚallc                 óª  >• TR                   R                  US9TR                   R                  XS9TR                   R                  XS9TR                   R	                  XS9TR                   R                  XS9TR                   R                  XS9TR                   R                  XS9TR                   R                  XS9S.R                  U S5      $ )N©Útimeout)rè   r   rä   rã   rç   rd   rå   ræ   rè   )
ÚstreamÚbannersr   rä   rã   Úcustomrd   rå   ræ   r6   )rV   r1   rë   rv   s      €r!   Ú_create_streamÚstream.<locals>._create_streamÔ  s½   ø€ à—:‘:×%Ñ%¨gÐ%Ð6Ø—Z‘Z×%Ñ% dÐ%Ð<Ø—:‘:—>‘> $�>Ð8ØŸ™×-Ñ-¨dÐ-ÐDØ!Ÿj™j×/Ñ/°Ð/ÐFØ—Z‘Z×%Ñ% dÐ%Ð<Ø—J‘J—O‘O D�OÐ:Ø—Z‘Z×%Ñ% dÐ%Ð<ñ	
÷ ‰#ˆd�EÓ
ð		r    rê   FTr.   r¯   r°   r±   r3   zConnection timed out)'r   rf   rg   rì   rÃ   r:   r;   r²   r8   r9   rÙ   r¶   Ú
ValueErrorÚlowerr   r   Úcloserk   rn   r   r(   rµ   rG   r·   r)   r   rI   r	   r6   rH   ÚrequestsÚ
exceptionsÚTimeoutÚKeyboardInterruptrj   r\   r™   ÚtimeÚsleep)#Ústreamerr+   rº   Údatadirrä   r   rã   rç   rd   rå   ræ   rœ   Úcompresslevelrë   r¸   Úquietru   rM   Ústream_typeÚstream_argsrï   rì   rÜ   ÚquitÚ	last_timerP   r}   Úcur_timer¼   r¾   r¿   r\   rÀ   rx   rv   s#                                     @r!   rì   rì   v  sô  ø€ ô( ‹-€CÜ
�-Š-˜Ó
€Cð #€C‡J�JÔð (.§|¡|°CÔ'8Ó9Ò'8˜tˆd�j‰jŽlÑ'8€FÐ9ä
ˆ6ƒ{�aÓÜ×"Ò"Ð#PÓQÐQð €KÞØ×Ñ˜7Ô#ÞØ×Ñ˜;Ô'Þ
Ø×Ñ˜5Ô!ÞØ×Ñ˜7Ô#ÞØ×Ñ˜6Ô"ÞØ×Ñ˜7Ô#ÞØ×ÑÐ+Ô,ä
ˆ;Ó˜!ÓÜ×"Ò"ð  $có  dð  	dà€Kö ð	@Ø9>¿¹ÀSÔ9IÓJÒ9I°œ3˜tŸz™z›|Ö,Ñ9IˆKÐJö Ø—’“ˆØ�;Š;‹=˜EÓ!ØˆKæ
Ø—i‘i “nˆæØ—o‘o cÓ*ˆæØ—j‘j “oˆæØ—k‘k #Ó&ˆæØ$ˆô ˆ;Ó˜1ÓØ! !‘n‰àˆõ
ñ ˜K¨¸gÑF€Fà€GØ€DÜ“	€IØ€DæÜ" 7¨I°}ÓEˆçð:	OÜ �à˜1“9Ø˜q‘L�Gà “Ø#˜Úö Ü&›y�HØ 9Ó,Ø$,˜	ØŸ
™
œÜ2°7¸IÓF˜Ü×(Ò(¨¨vÔ6÷ �uØ�Có "(˜Ø!˜Ü 0°¸Ó ?˜Þ Ü)-¨e«˜Jð  *¬TÓ1Ø&*§i¡i°Ó&6¡Ø!+´´U¨|Ó!;Ø&+§l¡l°5Ó&9¡ä&1°%Ó&8 ö  %Ü&+§k¢k°#¼/×:MÒ:MÈeÐU\Ó:]Ñ&^ ð   3™J˜CØ˜yÑ(šñ) "(ô, —J’J˜s—Oò[ !÷ ‹dùòs :ùò> KøÜó 	@Ü×&Ò&Ð'>Ó?Ð?ð	@ûôR ×"Ñ"×*Ñ*ó 	?Ü×&Ò&Ð'=Ó>Ð>Ü ó 	ØŠDÜ�‰ó 	0Ü×&Ò& q§w¡wÓ/Ð/ûÜó 	Oä�JŠJ�qŒMñ $ K°ÀgÑNŠFð	OúsV   ÁO
Å O Å3#OÆO ÊO8 ÊAO8 Ë3C
O8 ÏO Ï!O5Ï8?RÐ9RÑ Q,Ñ,+RÒRz^List of facets to get summary information on, if empty then show query total results over timer.   z@Save the full results in the given file (append if file exists).zRSave the full results in the a file named after the query (append if file exists).c                 ó   • [        5       n[        R                  " U5      nSR                  U5      R	                  5       nUR	                  5       nUS:X  a  [
        R                  " S5      e/ nUR                  S5       Hi  nU(       d  M  UR	                  5       R                  S5      n[        U5      S:”  a  UR                  US   US   45        MU  UR                  US   5        Mk      UR                  R                  X6S9n	U	S
   S:X  a  [
        R                  " S5      e/ nU	R                  S5      (       a  [        U	S   R!                  5       5      nU (       d  U(       Ga  U (       d"  SR#                  UR%                  SS5      5      n OU R'                  S5      (       d  U S-  n [(        R*                  " U 5       n[-        U	S   5       Hg  u  pÞU(       a"  0 US'   U H  nU	S   U   U   S   US   U'   M     [.        R0                  " U5      S-   nUR3                  UR5                  S5      5        Mi     S	S	S	5        [
        R6                  " [
        R8                  " SR#                  U 5      S5      5        SnU(       aý  [-        U	S   5       Hê  u  pÞU[
        R8                  " US   S-   SS9-  nUS   S:”  a—  U H�  nU[
        R8                  " SR#                  U5      SS9-  nU	S   U   U   S    HS  nUSR#                  [
        R8                  " US   SS9[
        R8                  " SR#                  US   5      SS95      -  nMU     M‘     MÃ  US R#                  [
        R8                  " S!SS95      -  nMì     Og[-        U	S   5       HU  u  pÞUS"R#                  [
        R8                  " US   SS9[
        R8                  " SR#                  US   5      SS95      -  nMW     [
        R:                  " U5        g	! [        R                   a%  n
[
        R                  " U
R                  5      eS	n
A
ff = f! , (       d  f       GN	= f)#z!Search Shodan historical databaser�   r.   rŽ   r,   Ú:r—   r   rÑ   Nr�   rÉ   rÒ   z{}-trends.json.gzÚ-r-   rÊ   rß   rË   zutf-8zSaved results into file {}r2   Úmonthr3   r�   z  {}
r`   z    {:60}{}
r\   T)Úboldz{:20,d}z{}
zN/Az{:20}{}
)r   rf   rg   rG   r;   r8   r9   r:   r²   rÙ   ÚtrendsrÌ   rj   r\   r6   rµ   Úkeysr)   r?   r˜   rk   rl   r´   ÚjsonÚdumpsr„   ÚencoderH   rI   rÍ   )rO   rt   rÒ   r‰   ru   rv   Úparsed_facetsrÛ   Úpartsr‘   rx   Úresult_facetsrP   ÚindexÚmatchÚlinerÎ   Úbuckets                     r!   r  r  (  sû  € ô ‹-€CÜ
�-Š-˜Ó
€Cð �H‰H�U‹O×!Ñ!Ó#€EØ�\‰\‹^€Fð �ƒ{Ü×"Ò"Ð#7Ó8Ð8ð €MØ—‘˜cÖ"ˆÞÙà—‘“×#Ñ# CÓ(ˆÜˆu‹:˜‹>Ø× Ñ  %¨¡(¨E°!©HÐ!5Ö6à× Ñ  %¨¡(Ö,ñ #ð,Ø—*‘*×#Ñ# EÐ#Ð@ˆð
 ˆwÑ˜1ÓÜ×"Ò"Ð#<Ó=Ð=à€MØ‡{�{�8×ÑÜ˜W XÑ.×3Ñ3Ó5Ó6ˆö —4ÞØ*×1Ñ1°%·-±-ÀÀSÓ2IÓJ‰HØ×"Ñ" :×.Ñ.Ø˜
Ñ"ˆHô ×Ò˜xÔ(¨DÜ )¨'°)Ñ*<Ö =‘�æ Ø&(�E˜(‘OÛ!.˜Ø18¸Ñ1BÀ5Ñ1IÈ%Ñ1PÐQYÑ1Z˜˜h™¨Ó.ñ "/ô —z’z %Ó(¨4Ñ/�Ø—
‘
˜4Ÿ;™; wÓ/Ö0ñ !>÷ )ô 	�
Š
”5—;’;Ð<×CÑCÀHÓMÈwÓWÔXð €Fö Ü% g¨iÑ&8Ö9‰LˆEØ”e—k’k %¨¡.°5Ñ"8¸WÑEÑEˆFØ�W‰~ Ó!Û*�EØœeŸkšk¨)×*:Ñ*:¸5Ó*AÀfÑMÑM�FØ")¨(Ñ"3°EÑ":¸5Ñ"AÀ(Ô"K˜ØÐ"2×"9Ñ"9¼%¿+º+ÀfÈWÁoÐ\`Ñ:aÔch×cnÒcnÐoy÷  pAñ  pAð  BHð  IPñ  BQó  pRð  W^ñ  d_ó  #`ñ  `šó #Ló +ð
 ˜'Ÿ.™.¬¯ª°UÀÑ)FÓGÑG’ò :ô & g¨iÑ&8Ö9‰LˆEØ�l×)Ñ)¬%¯+ª+°e¸G±nÈ4Ñ*PÔRW×R]ÒR]Ð^h×^oÑ^oÐpuÐv}Ñp~Ó^ð  ELñ  SMó  Nñ  NŠFñ :ô 
×Ò˜Õ øôy �?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,ú÷& )Ö(ús%   Ã-P ÇA:P>ÐP;Ð P6Ð6P;Ð>
Qz<IP address>c                 ó   • [        5       n[        R                  " U5      n UR                  R	                  U 5      nUS:X  a*  [
        R                  " [
        R                  " SSS95        OYUS:”  a*  [
        R                  " [
        R                  " SSS95        O)[
        R                  " [
        R                  " SS	S95        [
        R                  " S
R                  U5      5        g! [         a    [
        R                  " S5      ef = f)z*Check whether the IP is a honeypot or not.g      ð?zHoneypot detectedÚredr3   g      à?zProbably a honeypotra   zNot a honeypotr2   z	Score: {}zUnable to calculate honeyscoreN)r   rf   rg   ÚlabsÚ
honeyscorer8   rH   rI   r)   r™   r9   )r|   ru   rv   Úscores       r!   r  r  ˆ  sÃ   € ô ‹-€CÜ
�-Š-˜Ó
€CðEØ—‘×#Ñ# BÓ'ˆà�C‹<Ü�JŠJ”u—{’{Ð#6¸5ÑAÕBØ�S‹[Ü�JŠJ”u—{’{Ð#8¸XÑFÕGä�JŠJ”u—{’{Ð#3¸Ñ@ÔAä�
Š
�;×%Ñ% eÓ,Õ-øÜó EÜ×"Ò"Ð#CÓDÐDðEús   ¢C	C, Ã,!Dc                  ó>  • [        5       n [        R                  " U 5      nSSKJn   U" U5        g! [        R
                   a%  n[        R                  " UR                  5      eSnAf[         a*  n[        R                  " SR                  U5      5      eSnAff = f)z3Real-Time Map of some results as Shodan finds them.r   )Ú
launch_mapNr°   )r   rf   rg   Úshodan.cli.worldmapr  rj   r8   r9   r\   r™   r)   )ru   rv   r  rx   s       r!   Úradarr  ž  ss   € ô ‹-€CÜ
�-Š-˜Ó
€Cå.ð4Ù�3�øÜ�?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûÜó 4Ü×"Ò" 5§<¡<°£?Ó3Ð3ûð4ús!   ¨1 ±BÁ A%Á%BÁ2%BÂBc                  óV   • [        [        R                  " S5      R                  5        g)zPrint version of this tool.rf   N)ÚprintÚpkg_resourcesÚget_distributionÚversionr   r    r!   r!  r!  ®  s   € ô 
Œ-×
(Ò
(¨Ó
2×
:Ñ
:Õ;r    Ú__main__)LÚ__doc__r8   r   r<   Úos.pathr  rf   Úshodan.helpersrk   rA   rô   rø   r
  Úshodan.cli.converterr   r   r   r   r   Úshodan.cli.settingsr   r	   Úshodan.cli.helpersr
   r   r   r   r   r   r   Úshodan.cli.hostr   Úclick_pluginsr   r   Úshodan.cli.alertr   Úshodan.cli.datar   Úshodan.cli.organizationr   Úshodan.cli.scanr   ÚdictÚCONTEXT_SETTINGSr5   Ú
basestringÚ	NameErrorrr   Úgroupr"   Úadd_commandÚcommandÚoptionÚargumentÚPathÚChoicer	  rT   ri   rˆ   r�   r¶   rŸ   rm   rw   rÁ   rÅ   rÌ   rà   rì   r  r  r  r!  Ú__name__r   r    r!   Ú<module>r;     s	  ðñó8 Û 
Û 	Û Û Û Ý  Û Û Û Û ÷ oÕ n÷ C÷ F÷  Fñ  FÝ &õ 'Ý +õ #Ý  Ý 'Ý  ñ ¨4°Ð*:Ñ;Ð àØØ ØØñ€
ðÙñ ÑÐ 4Ó5Ó6Ø‡‚Ð.Ñ/ñ	ó 0ó 7ð	ð
 × Ñ �Ô Ø × Ñ �Ô Ø × Ñ �Ô Ø × Ñ �Ô ð ‡�ƒØ‡‚ˆjÐ>ÈÑMØ‡‚� °e·j²jÈÑ6MÑNØ‡‚�Ð"3¸%¿,º,ÀzÇÁÓGXÓ:YÑZñ+dó [ó Oó Nó ð+dð\ ‡��8€ÐØ‡‚� *Ñ-Ø‡‚ˆk˜4Ð&aÐkpÐz~ÑØ‡‚ˆh˜Ð#wð  BGð  QUñ  VØ‡‚ˆk˜4Ð&RÐ\aÐkoÑpØ‡‚ˆh˜Ð#RÐ\`Ñañ:ó bó qó Vó @ó .ó ð:ðz ‡�ƒØ‡‚�˜{Ñ+ñó ,ó ðð6 ‡�ƒØ‡‚�Ð!1¸Ñ<ñ!ó =ó ð!ð* ‡�ƒØ‡‚ˆjÐoÐy}ð  EHñ  IØ‡‚ˆiÐqÐ{ð  GJñ  KØ‡‚�
 LÑ1Ø‡‚�Ð!1¸Ñ<ñ>có =ó 2ó Kó Ió ð
>cðB ‡�ƒØ‡‚ˆjÐnð  yAð  HM÷  HTò  HTð  V^ð  `eð  Ufó  Hgñ  hØ‡‚ˆkÐ HÐRWÐaeÑfØ‡‚ˆl˜DÐ'mÐw{Ñ|Ø‡‚ˆh˜Ð#xð  CHð  RVñ  WØ‡‚�˜nÑ-ñ,ó .ó Wó }ó gó hó ð,ð< ‡�ƒñCó ðCð ‡�ƒØ‡‚Ð"¨DÑ1Ø‡‚ˆjÐ>ÐHdÑeØ‡‚ˆk˜4Ð&eÐptÑuØ‡‚ˆl˜DÐ'mÑnØ‡‚ˆmÐ"_ÐinÑoØ‡‚� ]¸¿ºÈ4Ñ9PÐXZÑ[ñ9ó \ó pó oó vó fó 2ó ð9ðx ‡�ƒØ‡‚ˆh˜ d°EÐ@aÑbñ,ó có ð,ð  ‡�ƒØ‡‚Ð"¨DÑ1Ø‡‚ˆjÐRÐ\xÑyØ‡‚ˆiÐcÐmpÐwzÑ{Ø‡‚ˆmÐ"_ÐimÑnØ‡‚�Ð!1¸Ñ<ñ?!ó =ó oó |ó zó 2ó ð?!ðD ‡�ƒØ‡‚ˆiÐ@È"ÐSVÑWØ‡‚ˆjÐFÐP]Ñ^Ø‡‚ˆl˜DÐ']ÐgkÑlØ‡‚�Ð!1¸Ñ<ñQó =ó mó _ó Xó ð
Qðh ‡�ƒØ‡‚ˆlÐ!bð  mGð  NQñ  RØ‡‚ˆjÐ>ÐHdÑeØ‡‚ˆmÐ"_ÐimÑnØ‡‚ˆkÐ fÐptÐ{~ÑØ‡‚ˆgÐMÐW[ÐbeÑfØ‡‚ˆiÐqÐ{ð  GJñ  KØ‡‚ˆmÐ"XÐbfÐmpÑqØ‡‚Ð Ð'aÐkoÐvyÑzØ‡‚ˆiÐPÐZ^ÐehÑiØ‡‚ˆhÐNÐX\ÐcfÑgØ‡‚ˆiÐZÐdhÐorÑsØ‡‚ˆiÐqÐ{}ð  EHñ  IØ‡‚ÐÐ&qÐ{|ð  DGñ  HØ‡‚ˆkÐ }ð  HIð  PSñ  TØ‡‚Ð"¨DÑ1Ø‡‚ˆiÐRÐ\`Ñañ^Oó bó 2ó Tó Hó Ió tó hó jó {ó ró Kó gó @ó oó fó Ró ð"^OðB ‡�ƒØ‡‚ˆjÐð  JLð  SVñ  WØ‡‚ˆl˜DÐ'iÐswÑxØ‡‚ˆh˜Ð#wð  BGð  QUñ  VØ‡‚�Ð!1¸Ñ<ñX!ó =ó Vó yó Wó ð
X!ðv ‡�ƒØ‡‚�˜nÑ-ñEó .ó ðEð( ‡�ƒñ4ó ð4ð ‡�ƒñ<ó ð<ð
 ˆzÓÙ…Fð øðS ó ØƒJðús   Â]0 Ý0]<Ý;]<