
    9i|                     <   S SK JrJr  S SKJrJrJrJrJrJ	r	J
r
JrJrJrJrJr  S SK7  SSKJ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Jr  SSKrSSKr\R>                  S   S	:X  a  SS
K J!r!  SSK"J#r#  SSK$J%r%  OSSK&J#r#  SSK'J%r%  \" \(5      r) " S S\*5      r+g)   )get_recognizerget_text)group_text_boxget_image_listcalculate_md5get_paragraphdownload_and_unzipprintProgressBardiffreformat_inputmake_rotated_img_listset_result_with_confidencereformat_input_batchedmerge_to_free)*    )get_displayN)Image)	getLogger   )open)urlretrieve)Pathc                       \ rS rSr     SS jrS rS rS rS rS r	S	 r
     SS
 jr      SS jr          SS jr          SS jr           SS jrSrg)Reader   Nc                    Xl         Xpl        [        S-   U l        U(       a  X0l        [	        U R                  5      R                  SSS9  [        S-   U l        U(       a  X@l        [	        U R                  5      R                  SSS9  [        R                  R                  U R                  5        USL a$  SU l
        U
(       a  [        R                  S5        OUSL a  [        R                  R                  5       (       a  SU l
        O_[        R                   R"                  R                  5       (       a  S	U l
        O*SU l
        U
(       a  [        R                  S
5        OX l
        [$        U l        [&        U l        SS/U l        U4U l        Xl        U(       a  U R/                  U5      n0 nUS/[&        S    Vs/ s H  oPM     sn-   [&        S    Vs/ s H  oPM     sn-   ;   Ga.  U[&        S    Vs/ s H  oPM     sn;   a  [&        S   U   nSnUS   U l        GO9U[&        S    Vs/ s H  oPM     sn;   a  [&        S   U   nSnUS   U l        GO[3        U5      [3        [4        5      -
  nU[3        5       :w  a  [7        US5      eUS/:X  a%  U R9                  SUS/S5        [&        S   S   nSnGOSU;   a&  U R9                  SUSS/S5        [&        S   S   nSnGOuSU;   a&  U R9                  SUSS/S5        [&        S   S   nSnGOIS U;   a&  U R9                  S!US S/S"5        [&        S   S#   nSnGOS$U;   a&  U R9                  S%US$S/S&5        [&        S   S'   nSnGOS(U;   a&  U R9                  S)US(S/S*5        [&        S   S+   nSnGOS,U;   a&  U R9                  S-US,S/S.5        [&        S   S/   nSnGOS0U;   a&  U R9                  S1US0S/S25        [&        S   S3   nSnGOmS4U;   a&  U R9                  S5US4S/S65        [&        S   S7   nSnGOA[3        U5      [3        [:        5      -  (       a+  U R9                  S8U[:        S/-   S95        [&        S   S:   nSnO[3        U5      [3        [<        5      -  (       a+  U R9                  S;U[<        S/-   S<5        [&        S   S=   nSnO[3        U5      [3        [>        5      -  (       a+  U R9                  S>U[>        S/-   S?5        [&        S   S@   nSnO`[3        U5      [3        [@        5      -  (       a+  U R9                  SAU[@        S/-   SB5        [&        S   SC   nSnOSDU l        [&        S   SE   nSnUSF   U l!        [D        R                  RG                  U R                  USG   5      nU	(       Gam  [D        R                  RI                  U5      S:X  a  U R                  (       d  [K        SHU-  5      e[        R                  SI5        [M        USJ   USG   U R                  U
5        [O        U5      USK   :X  d   [P        5       e[        RS                  SL5        O[O        U5      USK   :w  a  U R                  (       d  [K        SMU-  5      e[        R                  [P        5        [D        RT                  " U5        [        R                  SN5        [M        USJ   USG   U R                  U
5        [O        U5      USK   :X  d   [P        5       e[        RS                  SO5        U RW                  X5        O[Y        [D        R                  RG                  U R                  USP-   5      SQSR9 n[Z        R\                  " U[Z        R^                  SS9nSTSTST5        WSU   (       a  USU   q0USV   nU R9                  XaU[c        U5      5        USW   U l!        USX-   n[D        R                  RG                  U R                  U5      nU RW                  UU5        0 nU H.  n[D        R                  RG                  [d        SYUSZ-   5      UU'   M0     U(       a  U Rg                  W5      U l4        U	(       aQ  US:X  a  S[S\S\S].nOUS:X  a  S[S^S^S].nOWS_   n[k        UUU RB                  UUUU R                  US`9u  U l6        U l7        gTgTs  snf s  snf s  snf s  snf ! , (       d  f       GNJ= f)aa  Create an EasyOCR Reader

Parameters:
    lang_list (list): Language codes (ISO 639) for languages to be recognized during analysis.

    gpu (bool): Enable GPU support (default)

    model_storage_directory (string): Path to directory for model data. If not specified,
    models will be read from a directory as defined by the environment variable
    EASYOCR_MODULE_PATH (preferred), MODULE_PATH (if defined), or ~/.EasyOCR/.

    user_network_directory (string): Path to directory for custom network architecture.
    If not specified, it is as defined by the environment variable
    EASYOCR_MODULE_PATH (preferred), MODULE_PATH (if defined), or ~/.EasyOCR/.

    download_enabled (bool): Enabled downloading of model data via HTTP (default).
z/modelT)parentsexist_okz/user_networkFcpuz7Using CPU. Note: This module is much faster with a GPU.cudampszdNeither CUDA nor MPS are available - defaulting to CPU. Note: This module is much faster with a GPU.craftdbnet18standardgen1gen2generation1model_scriptgeneration2zis not supportedenenglishz["en"]
english_g2ththaiz["th","en"]thai_g1ch_trachinese_traz["ch_tra","en"]	zh_tra_g1ch_simchinese_simz["ch_sim","en"]	zh_sim_g2jajapanesez["ja","en"]japanese_g2kokoreanz["ko","en"]	korean_g2tatamilz["ta","en"]tamil_g1teteluguz["te","en"]	telugu_g2knkannadaz["kn","en"]
kannada_g2bengaliz["bn","as","en"]
bengali_g1arabicz["ar","fa","ur","ug","en"]	arabic_g1
devanagariz["hi","mr","ne","en"]devanagari_g1cyrillicz-["ru","rs_cyrillic","be","bg","uk","mn","en"]cyrillic_g2latinlatin_g2
charactersfilename!Missing %s and downloads disabledzqDownloading recognition model, please wait. This may take several minutes depending upon your network connection.urlmd5sumzDownload complete.*MD5 mismatch for %s and downloads disabledzxRe-downloading the recognition model, please wait. This may take several minutes depending upon your network connection.Download completez.yamlutf8encoding)LoaderNimgH	lang_listcharacter_listz.pthdict.txtr   i   )input_channeloutput_channelhidden_size   network_params)devicequantize)8verbosedownload_enabledMODULE_PATHmodel_storage_directoryr   mkdiruser_network_directorysyspathappendre   LOGGERwarningtorchr!   is_availablebackendsr"   detection_modelsrecognition_modelssupport_detection_networkrf   cudnn_benchmarkgetDetectorPath
model_langsetall_lang_list
ValueErrorsetModelLanguagebengali_lang_listarabic_lang_listdevanagari_lang_listcyrillic_lang_list	characterosjoinisfileFileNotFoundErrorr	   r   corrupt_msginforemovesetLanguageListr   yamlload
FullLoaderr[   str	BASE_PATHinitDetectordetectorr   
recognizer	converter)selfr\   gpurj   rl   detect_networkrecog_networkrh   r   r   rg   rf   rx   detector_pathseparator_listmodelunknown_lang
model_pathfilerecog_configavailable_lang
model_file	dict_listlangrd   s                            O/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/easyocr/easyocr.py__init__Reader.__init__    so   ,  0'2X'=$"+B(T))*000M&1O&C#!*@'T(()//t/L334%<DKXYD[zz&&(($##0022##NN  $J  KK 0"4 +29)=&i, 00@M ZL?QRX?Y+Z?YeE?Y+ZZ  rD  EK  rL  ^M  rLhm^c  rL  ^M  M  M4Fv4N O4N54N OO*62=A -"'"76H6P"Q6PU56P"QQ*62=A -"'"7"9~M0BB35($\3EFF&)))YQ.v6|DE$1MY&))&)d4[-X.v6yAE$1M*))-XdOUfg.v6{CE$1M*))-XdOUfg.v6{CE$1MY&))*i$tm\.v6}EE$1MY&))(IT{MZ.v6{CE$1MY&))'9tDk=Y.v6zBE$1MY&))(IT{MZ.v6{CE$1MY&)))Yd][.v6|DE$1M^c*;&<<)))Y@QSWRX@XZlm.v6|DE$1M^c*:&;;))(I?OQUPV?VXtu.v6{CE$1M^c*>&??)),	CWY]X^C^`wx.v6GE$1M^c*<&==))*iASUYTZAZ*Y[.v6}EE$1M&-DO.v6zBE$1M"<0DNd&B&BE*DUVJ77>>*-600/0SV`0`aaNN $k l&uU|U:5FHdHdfmn(4hGTTGKK 45":.%/A00/0\_i0ijjNN;/IIj)NN $k l&uU|U:5FHdHdfmn(4hGTTGKK 34  2 bggll4#>#>w@VWbhimq#yydooF j F##F+)+6N!!-NCP^L_`)*:;DN&.Jd&B&BJOJ  L9	D ggll9fdVmLIdO   --m<DM-%&&)#&"
 -/%&&)#&" "..>!?.<]N9=9BJY]YdYdow/y+DOT^ o ,[  ^M O #Rx jis$   ?b#b(9b-0b2$b77
cc                    XR                   ;   Ga  Xl        U R                  S:X  a	  SSKJnJn  O$U R                  S;   a	  SSKJnJn  O[        S5      eX0l        X l        Sn[        R                  R                  U R                  U R                  U R                     S   5      n[        R                  R                  U5      S:X  a  U R                  (       d  [        S	U-  5      e[        R!                  S
5        [#        U R                  U R                     S   U R                  U R                     S   U R                  U R$                  5        ['        U5      U R                  U R                     S   :X  d   U5       e[        R)                  S5        U$ ['        U5      U R                  U R                     S   :w  a  U R                  (       d  [        SU-  5      e[        R!                  U5        [        R*                  " U5        [        R!                  S5        [#        U R                  U R                     S   U R                  U R                     S   U R                  U R$                  5        ['        U5      U R                  U R                     S   :X  d   U5       eU$ [        SR-                  SR                  U R                   5      5      5      e)Nr#   r   )get_detectorget_textbox)r$   zCUnsupport detector network. Support networks are craft and dbnet18.z+MD5 hash mismatch, possible file corruptionrQ   FrR   zoDownloading detection model, please wait. This may take several minutes depending upon your network connection.rS   rT   rV   rU   zvRe-downloading the detection model, please wait. This may take several minutes depending upon your network connection.z4Unsupport detector network. Support networks are {}.z, )rw   r   	detectionr   r   detection_dbRuntimeErrorr   rn   r   rj   ru   r   rh   r   rp   rq   r	   rg   r   r   r   format)r   r   r   r   r   r   s         r   ry   Reader.getDetectorPath   s   ;;;"0""g-@@$$3CC"#hii* ,GKGGLL)E)EtG\G\]a]p]pGqr|G}~Mww~~m,5,,+,OR_,_``  g h"4#8#89L9L#Me#TVZVkVklpll  WA  BL  WM  OS  Ok  Ok  mq  my  my  z$]3t7L7LTM`M`7abj7kkxmxxk/0  }-1F1FtGZGZ1[\d1ee,,+,X[h,hii{+		-(  g h"4#8#89L9L#Me#TVZVkVklpll  WA  BL  WM  OS  Ok  Ok  mq  my  my  z$]3t7L7LTM`M`7abj7kkxmxxk  U\\]a]f]fgk  hF  hF  ^G   H  I  I    c                 b    U R                  UU R                  U R                  U R                  S9$ )N)re   rf   rx   )r   re   rf   rx   )r   r   s     r   r   Reader.initDetector  s3      *.++,0MM373G3G ! # 	#r   c                 R    U R                  U5      nU R                  U5      U l        g )N)ry   r   r   )r   r   r   s      r   setDetectorReader.setDetector  s$    ,,^<))-8r   c                     Xl         [        U5      [        U5      -
  [        5       :w  a-  US:X  d  US:X  a  Sn[        UR                  5       S-   U-   5      eg )Nr1   r4   chinesez0 is only compatible with English, try lang_list=)rz   r{   r}   
capitalize)r   languager\   	list_langlist_lang_strings        r   r~   Reader.setModelLanguage  sW    "y>C	N*ce38#x8';$X0025ggjzz{{ 4r   c                     [         R                  R                  [        SU5      n[	        USSS9 nUR                  5       R                  5       nSR                  U5      nS S S 5        U$ ! , (       d  f       W$ = f)Nr   r	utf-8-sigrX    )r   rn   r   r   r   read
splitlines)r   fileName	char_file
input_filelistchars         r   getCharReader.getChar   sd    GGLLKB	)S;7:??$//1D774=D 8  87 s   0A++
A:c                 <   / U l         U Hr  n[        R                  R                  [        SUS-   5      n[        USSS9 nUR                  5       R                  5       nS S S 5        U =R                   W-  sl         Mt     UR                  S5      (       a  US   nOUR                  S5      (       a  US   nOSn[        U R                   5      R                  [        U5      5      U l         S	R                  U R                   5      U l         g ! , (       d  f       N= f)
Nr   z	_char.txtr   r   rX   symbolsr]   z+0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ r   )	lang_charr   rn   r   r   r   r   r   getr{   union)r   r\   r   r   r   r   	char_listsymbols           r   r   Reader.setLanguageList'  s    DYTK=OPIi='__.99;	 >NNi'N	 
 99Y9%FYY'((+,FDFT^^,223v;?0 >=s    D
D	c                 ~   U(       a  [        U5      u  nnU R                  U R                  UUUUUUSU R                  UUUUUS9n/ / nnU H  n[	        UUXXUS L 5      u  nnU(       a  U Vs/ s H)  n[        US   US   -
  US   US   -
  5      U:  d  M'  UPM+     nnU VVs/ s HQ  n[        [        U Vs/ s H  nUS   PM
     sn5      [        U Vs/ s H  nUS   PM
     sn5      5      U:  d  MO  UPMS     nnnUR                  U5        UR                  U5        M     UU4$ s  snf s  snf s  snf s  snnf )NF)canvas_size	mag_ratiotext_thresholdlink_thresholdlow_textpolyre   optimal_num_chars	thresholdbbox_min_scorebbox_min_sizemax_candidatesr   r      r   )r   r   r   re   r   maxr   ro   )r   imgmin_sizer   r   r   r   r   	slope_thsycenter_ths
height_ths	width_ths
add_marginreformatr   r   r   r   r   img_cv_greytext_box_listhorizontal_list_aggfree_list_aggtext_boxhorizontal_list	free_listics                               r   detectReader.detect7  s{    -c2C(($'2=095C5C/7+0-1[[8I095C4A5C ) &  .0]%H)7)8C8A9Jd9R*U&OY .= #:oaD1Q4K1!B.08B91o #:(1 R	1S*1!A$*+T2CA1Q42C-D6FHP6QQ		 R&&7  + & #M11#: +2CRs6   .&D*D*%D99D/D9D4&D97D9/
D9c                 	   U(       a  [        U5      u  nnU(       a1  SR                  [        U R                  5      [        U5      -
  5      nO\U	(       a  SR                  [        U	5      5      nO:SR                  [        U R                  5      [        U R                  5      -
  5      nU R
                  S;   a  SnUS :X  a  US :X  a  UR                  u  nnSUSU//n/ nUS:X  d  U R                  S:X  a  U(       d  / nU Hj  nU/n/ n[        UUU[        S9u  nn[        U R                  [        [        U5      U R                  U R                  UUXEXmXXpR                  5      nUU-  nMl     U Hj  n/ nU/n[        UUU[        S9u  nn[        U R                  [        [        U5      U R                  U R                  UUXEXmXXpR                  5      nUU-  nMl     O[        X#U[        S9u  nn[        U5      nU(       a#  U(       a  [        UU5      n[!        U[        5      n[        U R                  [        [        U5      U R                  U R                  UUXEXmXXpR                  5      nU(       aF  X#-   (       a=  [#        [%        [        U5      S-   5       V s/ s H  n UUU -  UU S-   -   PM     sn 5      nU R
                  S:X  a8  S	n!U V"s/ s H  n"['        U"5      PM     nn"U H  n"[)        U"S   5      U"S'   M     OS
n!U(       a  [+        UUUU!S9nU
S:X  a  U V"s/ s H  n"U"S   PM
     sn"$ US:X  aC  U(       a  U V"s/ s H  n"U"S   U"S   S.PM     sn"$ U V"s/ s H  n"U"S   U"S   U"S   S.PM     sn"$ US:X  a  U(       aY  U V"V#s/ s HI  n"[,        R.                  " U"S    V#s/ s H  n#['        [1        [        U#5      5      PM     sn#U"S   S.SS9PMK     sn#n"$ U V"V#s/ s HM  n"[,        R.                  " U"S    V#s/ s H  n#['        [1        [        U#5      5      PM     sn#U"S   U"S   S.SS9PMO     sn#n"$ US:X  a  [3        UU5      $ U$ s  sn f s  sn"f s  sn"f s  sn"f s  sn"f s  sn#f s  sn#n"f s  sn#f s  sn#n"f )Nr   )r2   r5   greedyr   r   r    )model_heightrH   rtlltr)x_thsy_thsmoder^   )boxestextr   )r   r   	confidentjsonF)ensure_ascii
free_merge)r   r   r{   r   r   rz   shapere   r   r[   r   intr   r   lenr   r   r   ranger   r   r   r   dumpsmapr   )$r   r   r   r   decoder	beamWidth
batch_sizeworkers	allowlist	blocklistdetailrotation_info	paragraphcontrast_thsadjust_contrast
filter_thsr   r   r   output_formatr   ignore_chary_maxx_maxresultbboxh_listf_list
image_list	max_widthresult0	image_lenr   direction_modeitemlsts$                                       r   	recognizeReader.recognizea  s    -k:C''#dnn"5c)n"DEK''#i.1K''#dnn"5c$..6I"IJK??;;xWT!	4&,,LE5 !5!U34OI 1_$++"6F'(6vv{cg(h%
I"4>>4YZ^ZhZhjt)7zYh%{{4 '! ( "(6vv{cg(h%
I"4>>4YZ^ZhZhjt)7zYh%{{4 '! " %3?{ko$p!J	JI2=*M
	40	dnndC	NDOOUYUcUceo%w:Ud!;;0F /"; 4BGMHZ]^H^B_`B_QVIaK	1Q38B_`b ??h&"N-34VTd4jVF4%d1g.Q  #N"6eN[FQ;(./DG//f$FLMfd$q'a9fMMV\]V\dd1gT!WaIV\]]f$ GM  N  GM  C

DQRG,TGST#c3--@G,T\`ab\c#dsxy  GM  N  N W]  ^  W]  OSDJJQ(Pc#sm)<(PX\]^X_lpqrlst  DI  J  W]  ^  ^l* 33M5 a 5 0 N] -U  N(P  ^sN   QQ%Q!Q&$Q+Q5/#Q0Q5+R #Q;+R 0Q5;R c                      [        U5      u  n n!U R                  U XUUUUUUUUUSUUUUS9u  n"n#U"S   U#S   n#n"U R                  U!U"U#X#UXVXxU	XUUUUSU5      n$U$$ )E
Parameters:
image: file path or numpy-array or a byte stream object
Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r!  )%r   imager  r  r  r	  r
  r  r  r  r  r   r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r  s%                                        r   readtextReader.readtext  s     *%0[%)[[<D<DWe?JXa=FVa>HU^>HUZ=FYgANao &1 	&3" &5Q%71_i 'J 'I} ) *E5%	P r   c                  
  ^,^- [        U5      u  n n!U R                  U XUUUUUUUUUSUUUUS9u  n"n#U"S   U#S   n#n"U R                  U!U"U#X#UXVXxU	XUUUUSU5      m-/ n$Sn%[        [	        T-5      5       H  n&U$R                  T-U&   S   5        M     S n'U,U-4S jn([        R                  " U%5       H  m,T,R                  S5      (       d  M  [        ST,-   S	S
S9 n)[        U)R                  5       R                  5       5      R                  SS5      n*[        [	        U$5      5       H<  n&U'" U*U$U&   5      n+U+S:w  d  M  T,SS S:X  d  T,SS S:X  d  M+  [        U(" U&5      5        M>     SSS5        M     g! , (       d  f       M  = f)r$  Fr%  r   zcharacters/r   c                 d    Sn[        [        U 5      5       H  nX   U:X  d  M  Sn  g   US:X  a  gg )NFTr   )r  r  )arrxgr   s       r   search#Reader.readtextlang.<locals>.search  s;    A3s8_619A % Ez r   c                 $   > TU    nUTSS 4-   nU$ )Nr   r    )r   abrQ   r  s      r   tupleadd%Reader.readtextlang.<locals>.tupleadd  s$    q	AXa]$$AHr   r_   rtrW   rX   
r   r+  r   r+   chN)r   r   r!  r  r  ro   r   listdirendswithr   r   r   r   replaceprint).r   r&  r  r  r  r	  r
  r  r  r  r  r   r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   	directoryr   r/  r5  myfilechartrsresrQ   r  s.                                               @@r   readtextlangReader.readtextlang  s    *%0[%)[[<D<DWe?JXa=FVa>HU^>HUZ=FYgANao &1 	&3" &5Q%71_i 'J 'I} ) *E5%	P !	s6{#AKKq	!% $		
 

9-H  ((=(24HF!&++-":":"<=EEd2NG"3t9-$WT!W5"9'!}d2hqmT6I %hqk 2	 . IH .HHs   AE3=E3E33
F	c"                 4   [        XU5      u  n"n#U R                  U"UUUUUUUUUUUSUUUU S9u  n$n%/ n&[        U#R                  5      S:X  a  U#/OU#n#[	        U#U$U%5       H5  u  n'n(n)U&R                  U R                  U'U(U)XEUXxXUXUUUUSU!5      5        M7     U&$ )z
Parameters:
image: file path or numpy-array or a byte stream object
When sending a list of images, they all must of the same size,
the following parameters will automatically resize if they are not None
n_width: int, new width
n_height: int, new height
Fr%  r   )r   r   r  r   zipro   r!  )*r   r&  n_widthn_heightr  r  r  r	  r
  r  r  r  r  r   r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   
result_agggrey_imgr   r   s*                                             r   readtext_batchedReader.readtext_batched  s    & 2%(K[-1[[<DWe<DWe?JXa=FVa>HU^>HUZ=FYgANao .9 	.3*] 
'*;+<+<'='B{m47EXZg4h0HoydnnX	,3
,3	S`,5_,6ue]	\ ] 5i r   )r   r   rx   r   ru   r   re   rh   r   r   r   rz   rj   rf   rv   r   rw   rl   rg   )TNNr#   r%   TTTTTF)   ffffff?皙?rN   
        ?皙?      ?rR  rR  rQ  TN皙?rS  r   r   )NNr      r   r   NNr   NFrQ  rR  ~jth?rR  rP  Tr%   )r   rT  r   r   NNr   NFrL  rQ  rR  rU  rM  rN  rN  rO  rP  rQ  rR  rR  rR  rR  rP  rQ  rS  rS  r   r   r%   ) NNr   rT  r   r   NNr   NFrL  rQ  rR  rU  rM  rN  rN  rO  rP  rQ  rR  rR  rR  rR  rP  rQ  rS  rS  r   r   r%   )__name__
__module____qualname____firstlineno__r   ry   r   r   r~   r   r   r   r!  r'  rB  rJ  __static_attributes__r2  r   r   r   r      s    DH=D<@9=05	IyV!F#9|1  KNDF@CSWZ[	(2T FJABLM38INISUn NOKLEGHMHK13BEIL\])"H RSKLEGHMHK13BEIL\])<3| >BHISTMOPUPS9;JMQTde'1)r   r   ),recognitionr   r   utilsr   r   r   r   r	   r
   r   r   r   r   r   r   configbidir   numpynpcv2rr   r   rm   PILr   loggingr   r   r   version_infoior   six.moves.urllib.requestr   pathlib2r   urllib.requestpathlibrV  rp   objectr   r2  r   r   <module>rk     s{    29 9 9 9    
  	 
    A!4*	8	eV er   