ELF4$/4 (&#444y y  !4! ((( Qtd/lib/ld-linux.so.2GNU:"G7? [Q=9xTNH4 Y\\P.i gKZ3G kO~I1v7h1+%}iRvkpmw|yT=RWMjCt<\] m`ZF.i_)b1nf=$%ulJdkC<k$&?cg[a6598F #Jl# odl AlX^sQ* #n/s}w)@\~-uB3 c dzyPV^#`bQm+a0"cDdD]&8wL'ZkG^&C1>6'*{F$y3qgWRe(&{|* q2aT!f='oex}eeD+]Uu:~:|20 BvV0J%]2v-b O 9anP]7ExWC_d5x:ITjVwbg"j3EY.nYOB!`:s +A_5SpCzSI DV P ES (ns6Y48q?(MF{ M6=,DR!5Q4GJ/ |+,z} iA 9L ;-GfU'X#PVox/?r pXp;?5N()hm$<pHBIUZ^@L"KNb_`iz;LI'7c%4Ao,ruKtBh)yT{thgl-.N7 r`uQ~^S}F3HZ<jEA2|fM L;6,@[9a@\e;>RK-*{ojs2wv XtHMyhOfE_Yzq48Wq(>>![)@%X8O.rS[ !H>/0~*m0&NU",Ur/t1KcJ$W< @XIdK!"("M" @0@P!@)C:@  8i r ` 2 0@y4TaW qe$@( "@*J,`H4( J E " *0DX@CC(a   #hE x(@`2A@@$ "0B@lAH @)[D B)1" (  ̀,ABSQPBR51( H|LDP$ D`A`6b B*AP Ba Q%`ED H 5) @$ PߙX H bU @ r "@JGE ",$B B` @(A@!$c`U!!TDp9@+ %P RG/ @)б h DCD@$ h*@AP1H@4P@ 0"@E 4pDA@( " HA @ 6 ( B(" PT[  @` B@@HP0  hBD ($((@@@@I AAPa@B!!H!!@T  *3 0X$@~   HH*@!B@(-   !"$%&(*+,./024589;?@CDHKLNPRSVWXZ[]^_`bdgjklmnoquwx{}~     !"#%&'(+./124569;>?@ABDEHJKMORSTXZ^_`bdfghklmnopstuxz{}~     "$%'(),-/02368:=?@ABCDFGIJKLMNPQRSUWYZ[]^`abcdefjlnpqrvxz|}   "$'(,-012356789;<>?@CDGHIJLMOPRSUVWXY[]_acdfhjlmnqstvxz{|8(I)UguwyfUbPСĹ@9 Ims%8=T?bDXْ_k| ]Kxd}bN15丕N9`/Mu8=Œ $BdWSG'ŶyOYE mVxD)ھ}+eW>oǠ#>w9<٧@]R"2OAR Z Dg5 %z"SGdn]w lvZPbr楗~'V qبB)Nh6txB\N8{͜Pr`o !}̄ͱʵrR*p]t\꒑s/w<R4өApZ-[Ch}4dtEO!@MGCE9~kY9@ Rp6xVG @K`%ziޤtTtQLbߺKOL ,ex(UC\ $ş}RG3}reQ~I)~Eӧk@rAxl?dWq8]?QLǺ^/c7sLf&#/\{({5 ÃkquĿ*h*mK΀* 8]-RAnx*Hu?lZvqHvaTq : ƑԈ+|)YX?(3ܓ,Ꞌ!8[3ن=,vE3!^4FI 8 eۺu)'~§ _w3ԥ}6HIڬWZ`5ԟܚbl'= W,ۿ̰ɩ6;N%N(2 R[ANЬk:V,d|dk5y_2VNgUaTGt2h "QCZ\'i7`0(}lX fm:V;I ֌?`'a 15E$ <>Fwb7 p?YY~*UFkZ<@cՍNuao҃;τ[m aynqW%.e[G7iFzmW -!cy_kn I #/{s* (8fr 'U ?*M@GsqXg+b?QPҔF$H "!sN7NNS")P!5g%=LRha\F 38WI)YW.XBꁃ2XD+UZK䧽P:9+JZևLl7SQ1Op] )K/<'op--R*uoPd_(dqZ<]D8&CR+6;o {r6dHG} qsMZ v螮u5{)7\F.p] IV*9yU@]<ypeC[$:|?RźYԦ?"@YG~Z\ӝLZ!/UR1Zƛ d9ƨe)`5m eU\P{Q;j^ۨɓFw@qB 8!'`f%Vm {L ijGb-Kj]CEpQa2b(NOWq;2VJ9)Q2mvnr 'n$j))!k`Wۮ0{iZXmlA@z!jp>`-Gj5oRIiwh1'GKBoPI 3 49 &# +۵$=I /-MV[7y(GaP bѷͯ1d{-㞎07ɣgrO){UFg?%.IN "юzqX(6rKS\.|Xw,@z&?OQz)V]~ܪT8V{c`$(ut5:0q&շa!{t&w?o00!*E)vehsZ1KB® _t‰ K]4Dr }_oUG&~CA(+On%q_ey{q>6xlX3"Ġf5̌=F1y2\լ9 4>Ck89VX&3'/)kt# ^\|W}z` 63ņ"[oh!]̒,[(|i*Sr~LG~Z-gK/+I(C|y18P#i2z378ʮg'ۮ3iڼx]GXܘ-zV[ϝvԊ+}*Ms/KԔ Ut^`շWZB\rگJRqIsCK (rཞoQ/˳PHQV )Q9 +Ů)f:V&:K.M[QmF:ݪaaO|yZfak8xÕ:w-!!BsbO8#v YPa VñN-SYƠ[0V6,^d=7YqvAi_Ӎ]ēd&G@ɬ%d7d~T0& M sv2+EV])n8kH4}n[|΅CEcE`"0n*!\SwjGlwH#%%g/o! /Se΍Sj.\umjU@ X.Ylīsa rxyeӜ$<>G !ue*MZxKm1Ym[HUztO X:h&8hZyMa_hFKٷa?$Uq{8B+& }TQ5_a/d&j C]>!xqF Kfwu&xD'!5aJOaNj% !CfK+Z_yޢe}Nr wyTje]M e5^;65Y&1j mxNMX3Кv3bg ss&k;/NO29nHX); Ig8r54F1`v>-2k=XJ8Z  gFlg:<#yQv=8My~V23L2@B:0>r8*vikyZ)2@sFz>>p.T>)@8D2i;Z`Cg\:068Ck C:AFs>4d&:0p4E\'gv+" igLK: IU#kP_rc$!ZyjER%ZF:v8_ @v@S[IE%H%6Q +FIBF.F 1$Zb4BR::Wg>C:9Jt&[S4&TWW7nV98 :d   #$ !0 v q5 =!*BK'I  d #, 2  x3HA _  2  Z9] 0Ь L 3&  .0 >B2 t$3> MP5 3@ #<3-l3O6  k<S  \<p4 PM . ?T@ a }= k' M@,3 +   1= KP  "@  !@/  l `6o @x  KA_ 3,3/# S >B3Fpg  d)@  3@  C &r"P r.t y F %/3NN05p  !@ ,$ JLC UpU  -Pe ! C1.m E X!= )@  --A H z:I Kw T `y2% %LG"e <*    `~ `-,fwO`G ` . 8@u +9  ` *   g ;6 ,@py e L  &  DCh L Lp4 3p  AT 53qY w/" /% ''3`o A-%) |Lp  ;Pz P@ ; +!- T>(4  `z#%@C P u!0  (@2E+ 9@8#$&K3-4P  l  g JI@ pNP 5 1! ]1B40;z  U/0 B*s+" 3 ]0  `# JPW Y{ P30~ tF '  E0  . &; -G &`3~# x-K`u?@  O 4  P W M` [ K: Bp*J (  IЫ  J0?5 D233  m"0  u $rHp e DB_ ,2`S3  NP" ' C   K !{ K +5 %b2PU ~3$ 1`s } mA`YoF03v 4 o 9@ Hm x 3 9m2M  +y8R =A `*  94p+ B3p e E )@ G $@ RG)J  " > 3 _ FxpD0  j2~;P   mEgU 7@+s GP  0M@+$`2= , @2T 3;"  Dl & &i s&^+[\3 < Q@  !74 ) B   @# M #@  T029PI/ p#e N`#m9 p -K L 7:EP ~3E3l#  _ a?3' c D %  $}7 o F$3/OЄ  ,@G.{%%  ' +  '0 / @o 3B@#$33R }3L+- : :C 0  `:u2FQ w U '@ 3(t2- 3M @ -N5 k ,  <20" @`Z  9 p ~s  _D  : K< c  PW( (39P g :0 %)" @3S2` %  7k30]"Y2 \NP 3H  v:QTQ0 B ^>8 ?@u cP W 3"t * @L3G  P* D$ IG.)D` C3F  ~T ?s 4@ 0?`  #^ K23k$ 3J)  ++-  5@1 8 ^23g2@!q i7n3k   >  Q D 5p w " cz2k6 t @K HOP% C  +`T-(O`,Q C ;:g5E@ Q  d ~JC ?`  `@0/5! ! 5 >@" L H=x K ?'3  d U @:3,p~7^$S n3^> `.@u G|3 I24n  ZE. +t G 3c/` !Ml3C53U(P D S&@k ( 9+ K-w T P3U`5 t3  P'   (3A" j>  0& |_ Pж  &C 24} = MB )   '% u {(D cJ`= mJЏ t)P6 # >u .()Jw Ip%k ph   O . G`'' M 3@C/:Kl232*<" c-0 g +8,3<`  H8@)n0#`- 0Op I/ =` M  o@@q8   O!!&+P /6  3) *1 ' z39 8 p 5 8 ?c   y M 6pA; s$&Dc(.`0 G> 03&L gC437X  ` b   %  9W >" 3 0>0@  w( =' BG  p3  "" Ny a @!  ]k/ 37,O`#i`N " ;M 5;2a 5 S'+7` S ,  G2 [  0#.@ !P  :@ `p  I (K\Э NЅ PS $ 8 B *= _+X  ;0E DF@ o E0" Il2G0 [q^ 6> W-&: 1 (%$Bd  a0" L ~).sx3 G Lp b =`#%p7  *@0)PQ .@9] > >8 M,C7# ' 2 }  7<!  B`u  : " 06_ F B ) 0 ^ i I0[ \-# $ <  = 2 )& +R %0! R04@$V j4M w*Y *G2  2   wi( H;3:H m&. < 3#0 a i3 `\@ H 308@F ?&} MD3)  >@,*^ n  ,PT    Z   ^ `1 4 @2  } IМ ,`2&3=  O@1_  7+/1j.E u :P G )Q`. DP N@- K )]%p16 e  8] #`zH 0/e,h3`G 13wB  $@4  y3!@&b Q0hf p*c ,0q    0 I =N0  :Ap" iM  }1  P  8`y38I 2;` | F Q  p& k2G'.+;. ' A 6  P,  Hp  L| 8@ 2@ I B} 5Ч = 5:'O # &`e s ^;Pl/ |' 0 SAM N  /5" P&  D $ z2z3![` l Z G`  ! A@p  0DX  .  '@E} S3 # :`&QF aLИ R ]}>Bl    +!% ? B  )d3 p03#@  rQ@ g aBA S f=p 0 ;?Z E5 Io 4 (*  % b J g  l:32l`&51@. UM(3Tl ABB Hp :  4 /@b 3/@ t <P H 1vi 3Bd I2I`,3.! @o3<- d!GM l8`1 .39HЄ *<,35  .Q22 R # b I*0}   3  <'][ @  |   !" - F20M a G ,` s Л" (`iL 3,)~A@# ),"C  AD@& @ JQ:3~Kn# < G N2C r N  :L@ -   = 2K # Fye ?H b@9   5Г  6pq /`  70E z8R "  &K N"  / Y  A I@H DJ g !2A@ P~ t 0  -0 L  ^&3<7 >p y M Y@ $>_v  # `G)66`  5>  P@ 4ПF  3 @  /P  +  ,p* ] `.]#_' b 29@  DH/ 3p &  J 9 A D p; l/ N DPL 1< KP $%E%9 n (A@6} 5U dIP y )U u3|A m* I  Б H JK  C_585;2DE0 =  m , ~  D (. .`I :@; H1 y t #I* J0n  @vE3@J U)@73 -p } ~5@ D >7 E  " J |: H/  0{ P"  J  3MUPH3C&J l:k` 2 3wI <  3O$8  <** o ]48> P# w >,@ `" ܅>M@ - I@*" 1 0C0/. Px K #0;2,  1 H@h("'5C K?v*A/`" 3x2+Cs }   & "p  3   Ps  lCH t3wOM ( 5  P 7 ! t,3e#-!!6W ?  H , P Q` _3D i' 7 Ax _ ^'3N-6 !  ?2!}A`7 > T  P$ m^ 9L@ Pp- _9PY ',u C@ { bF@| ,> =!p J% : .dy4J2:i$G(B%@~  P@%E/e0  lK5} ++k   i1!o%0 x  w l3P N8   y  $;  TK" qG2: .(0 l~ " 0x O 1@24}(Xz#=* N0< !3 -`A ;  e , @. ]3 `%@ : Э  "0  ;0\     / c 8 F  &8:  $i, sI 2QCU .05 H`C O *B   34Px  70  |3 @=  %D`  I/  g 9..8] 18y  p.,j* "' < */ I E` / C 80 g J03O  b ! D(@ S ;p] F "\ Њ # . -E> 4 MM VЪ   | p  L 2 A3S7D v 3a   E N 'H@ ~ "` +g3T9  @0   P'_ 6) 2*Z*" w  99 i Q/k$ F 2P  @6  fG+(( e2@{  g $p 4  Br  /9 T?2  Q gOІ  k x   %=" 0 FPK l *F 3 7 >  0p /P $@G)pBu M4D36`8 7@j2"  - [ `  4% Ip3N  P% OP 'mCg p  :7K Fpf  #:m I `#S Y1P 4  5.0,#XO}  D`A NH G = B L:- (3*P` N%  M 4-# 8@b c = "L  =[ g W5@  PH) #@u;2$  ' 2E2L0q libpthread.so.0_Jv_RegisterClassessem_postsigactionpthread_attr_initsem_trywaitsem_initpthread_create__libc_current_sigrtmaxpause__errno_locationflockfileforkwaitpidpthread_attr_destroylseek64pthread_selfpthread_attr_setscopefunlockfilepthread_detachsem_wait__libc_current_sigrtminsem_destroysystemfsyncfcntllibdl.so.2__gmon_start__dlopendlsymdlerrorlibutil.so.1forkptyopenptylibm.so.6sinatan2modfhypotldexpcosfmodfrexplibc.so.6_IO_stdin_usedsetuidchrootfflushstrcpy__rawmemchrexecvsprintf_IO_putcsetlocalestrncmpgetpwentstrrchrtempnampipe__strdupsetregidperrorgetpwuidftruncate64closedirfchdirftellstrncpysetreuid__stack_chk_failunlinkmkdirreallocabortstdin_exitstrpbrkpopengetpidkillchmodrewindtmpnam_rendpwentisattylchownfeofsymlinkgetloadavgfdatasyncfgetsgetpwnamgetppidstrlenungetcsigemptysetmemsetlocaleconvstrstrrmdirfseekconfstrsetgroupsttynamedup2clearerrunsetenv__fxstat64_setjmpputenvstdoutfputcfseeko64getsidfputsfpathconfmemcpyfclosetcsetpgrp__strtol_internalmallockillpgstrcatumaskftello64realpathsetegidsetpgidgetgid__uflownl_langinfoopendir__xstat64getenv__ctype_b_locnicestderralarmseteuidgetlogingetgroupsgetuidreadlinkexecvegetegidgetpgid__xmknodstrncatfilenopclosefstatvfs64utimesgetcwdfwritefreadrenamegeteuidstrchrutimefdopenreaddir64qsort__strtod_internaltmpfile64__ctype_toupper_loc__ctype_tolower_locsetvbufsetsidunamememmovefopen64ctermidaccess_IO_getcsetgidmkfifosetbufstrcmpstrerrortcgetpgrp__libc_start_mainsetpwentferrorvfprintfsysconffree__environ__lxstat64PyList_InsertPyInt_GetMaxPyMember_SetPyCObject_SetVoidPtrM_distutils__spawnM_xml__dom__pulldomM_typesPyUnicodeEncodeError_GetEndPyModule_AddObjectPy_SetRecursionLimitM_macpathPyExc_ImportErrorPyErr_WarnExplicitPyOS_ascii_strtodPyArg_VaParsePyUnicodeEncodeError_GetReasonPyString_FiniPyParser_SimpleParseFilePySys_GetObjectPyUnicodeDecodeError_SetReasonPy_GetPathPyFloat_AsStringExPyImport_ImportModuleExPyString_AsDecodedStringPyDict_SetItemStringPyString_InternFromStringPyClass_IsSubclass_PyImport_FiniPyProperty_TypePy_IncRef_Py_MangleM_cookielibPyExc_UserWarning_PyUnicodeUCS4_IsLinebreak_Py_ZeroStructPyString_AsStringPy_NewInterpreterPyExc_StopIterationM_encodingsPyGen_Type_PyImport_InittabPyType_GenericNewM_tokenPyUnicodeUCS4_FromEncodedObjectPyFrame_NewPyImport_ImportPyExc_UnicodeTranslateErrorPyFunction_GetClosurePyEval_SetTracePyMapping_Size_PySequence_IterSearchPyBool_TypePyGrammar_LabelReprPyExc_OSErrorPyEval_GetFramePyArg_UnpackTupleM_getpassPyUnicodeUCS4_AsLatin1StringM_email__ParserPyObject_CmpPyThread_delete_keyPyMarshal_WriteObjectToStringM_newPyCFunction_CallPyObject_InitVarM_tracebackPyOS_StdioReadlinePyList_GetItem_PyGILState_InitiniterrnoinitimpPyUnicodeDecodeError_SetEnd__libc_csu_finiPyObject_PrintM_TkinterPyClass_TypePyFunction_GetModulePyFrame_TypePyCFunction_GetFlagsPyUnicodeUCS4_Concat_PyThreadState_GetFrame_PyImport_FindExtensionPyNumber_InPlaceRshift_PyUnicodeUCS4_IsTitlecaseM_gzipPyUnicodeUCS4_GetMaxPy_CompileStringFlagsPyImport_ExtendInittabPyObject_CallMethodPyOS_InterruptOccurredM_email__HeaderPyFrozenSet_TypePy_ReprEnter_PyEval_CallTracing_PyUnicodeUCS4_ToTitlecasePyIter_NextM_randomPyString_EncodePyExc_SystemExitPy_GetProgramFullPathPyNumber_Remainderinit_codecsM_xml__dom__domregM_htmllibPyModule_NewPy_SetPythonHomePyExc_ValueErrorM_disPyType_ReadyPyClassMethod_NewM_email__Charset_Py_CheckInterval_PyEval_SliceIndexM_nturl2pathM_email__UtilsPyLong_FromVoidPtrPyInt_AsUnsignedLongMaskM_apport__packaging_implPyWrapper_NewM_xml__dom__expatbuilderPyInstance_TypePyExc_AssertionErrorM_xml__dom__minidomPyErr_SetFromErrnoWithFilenamePyLong_AsVoidPtrM_BaseHTTPServerPyUnicodeUCS4_EncodeASCIIPyFile_SetBufSizePyFile_AsFileM__MozillaCookieJarPyUnicodeUCS4_FromObject_PyImport_DynLoadFiletabPyList_AsTuplePyEval_ReleaseThreadPyObject_Unicode_PyTrash_delete_nestingPy_NoSiteFlagM_copyPyUnicodeUCS4_TranslateCharmapM_xml__sax__expatreaderPySuper_TypePyParser_SimpleParseStringFlagsPyLong_FromUnsignedLongPyNumber_DivmodPyModule_AddStringConstantPyEval_ReleaseLockM_xml__sax___exceptionsPyObject_SelfIterPyLong_FromUnsignedLongLong_PyOS_ReadlineTStatePySys_SetArgvPyMem_FreePyNumber_InPlaceXorPyExc_SystemErrorM_cmdM_sre_compile_PyObject_GC_ResizePy_EndInterpreterPyObject_CallMethodObjArgsPyRun_AnyFileFlags_PyUnicodeUCS4_FiniPy_GetPythonHome_PyUnicodeUCS4_IsUppercasePyNumber_InPlaceOrPyInt_AsUnsignedLongLongMaskPyExc_IndentationErrorPyUnicodeUCS4_DecodeUTF16StatefulPyNumber_CoerceExM_xml__dom__minicompat_fp_hwPyGILState_ReleasePyBuffer_FromReadWriteMemoryPyCObject_FromVoidPtrPyDict_Contains_PyCodec_LookupM_mimetoolsPyExc_EOFErrorPyErr_ProgramTextPySys_SetPathPyBool_FromLong_PyString_EqPyUnicodeEncodeError_SetStartM_linecachePyObject_AsWriteBufferPyDict_ItemsM_htmlentitydefsPyMarshal_ReadObjectFromFilePyNumber_InPlaceRemainderPyUnicodeDecodeError_SetStart_PyImport_GetDynLoadFuncM_tempfile_PyTuple_ResizePyExc_PendingDeprecationWarningPyUnicode_DecodeUTF7PySequence_InPlaceConcatPyErr_NoMemoryPyThreadState_Clear_Py_ReleaseInternedStringsPyOS_ascii_atofPyParser_SetErrorPyEval_CallObjectWithKeywordsPyCodec_EncodePyList_TypePyComplex_ImagAsDoublePyInterpreterState_DeletePyImport_ExecCodeModuleExPy_GetPlatformPyString_InternInPlace_PyImport_ReInitLockM_formatter_PyObject_GetDictPtrM_xml__dom__xmlbuilderPyNumber_InvertPyObject_CallFunctionObjArgs_PyWeakref_GetWeakrefCountPyInterpreterState_NextM_problem_reportPyParser_SimpleParseStringFilename_PyImport_FindModuleM_xml__sax__handlerPyObject_IsTruePyBuffer_FromMemory_PyTrash_deposit_objectPy_OptimizeFlagM_apport__fileutilsM_ntpath_Py_c_prodPyFunction_GetDefaultsPyCodec_StreamReaderPyLong_FromDoublePyCodec_XMLCharRefReplaceErrors_Py_NotImplementedStructPyExc_TypeErrorM_unittestPy_InitializeExPy_AddPendingCallPyExc_UnicodeDecodeErrorPyMarshal_ReadLongFromFilePyList_SetSlicePyFloat_FromStringPyMem_ReallocPyMethod_ClassPyExc_ExceptionPyExc_UnicodeErrorPyClassMethod_TypeM_webbrowser_PyUnicode_DecodeUnicodeInternalPyFrame_BlockSetupPyObject_NotPyDict_TypePyErr_GivenExceptionMatchesM_email__IteratorsM_urllib2_PyLong_AsByteArrayPyCode_TypePyMarshal_ReadObjectFromStringPyThread_free_lock_Py_QnewFlagPyObject_AsFileDescriptorPyNumber_Lshift_PyUnicodeUCS4_ToUppercasePyParser_SimpleParseStringFlagsFilenamePyExc_KeyErrorPy_TabcheckFlagPyNumber_InPlaceMultiplyPyListRevIter_Type_PyObject_NewPyNumber_NegativeM_py_compilePyObject_HasAttrPySys_AddWarnOptionPy_FdIsInteractivePyString_ReprPyRun_InteractiveLoopM_sitePyInt_TypePyComplex_TypePyFloat_FiniM_base64PyExc_ReferenceErrorPyObject_StrPyNumber_PositivePyExc_FloatingPointErrorM_osPyOS_snprintfPyEval_GetCallStatsPyDict_MergePyObject_GetItemPyUnicodeUCS4_DecodePyBuffer_TypePyFunction_GetCodePyUnicodeUCS4_AsUTF16StringPyThread_allocate_lockPyString_DecodePyNumber_AbsoluteM_distutils__errors_PyWeakref_RefTypePyString_FromStringAndSizeinitpwdPy_DivisionWarningFlag_PyObject_SlotComparePyFloat_AsReprStringPy_FindMethodPyModule_Type_PyUnicodeUCS4_IsAlphaM_xml__sax__xmlreaderPyErr_SyntaxLocationPyDict_NextPyWeakref_GetObject_Py_HashDoublePySequence_InM_email__base64MIMEPyImport_AddModuleM_reprPyThreadState_DeletePyLong_AsLongM_distutils__utilPyObject_LengthM_emailPyNumber_InPlaceLshiftPyFrame_LocalsToFastPyString_Size_PyObject_GC_Malloc_PyUnicodeUCS4_ToNumericPyParser_ParseStringFlagsFilenamePyCell_SetPyUnicodeDecodeError_GetEncodingPyModule_AddIntConstantPyList_FiniM_mimetypesPyComplex_AsCComplexPyDict_UpdatePyExc_RuntimeWarningPyFPE_jbufPyUnicodeUCS4_AsCharmapStringPyCObject_Import_Py_c_negPyComplex_RealAsDoublePyErr_FormatPyFloat_FromDoublePyDictIterItem_TypePyFunction_NewPyNumber_PowerPyFunction_SetClosurePyBaseObject_TypePyNumber_And_PyFloat_Unpack4_PySys_Init_PyObject_DumpM_email__GeneratorPyUnicodeTranslateError_GetEndPyNumber_LongPyFrame_FastToLocalsinit_srePyDictIterKey_TypePyUnicodeUCS4_AsWideCharPyCode_NewPyArg_ParseTuplePyList_GetSlicePySequence_InPlaceRepeat_PyList_Extend_PyArg_NoKeywordsM_xml__domPyCallIter_TypePyNumber_InPlaceAddPyExc_ArithmeticErrorPy_SetProgramNamePyParser_AddTokenM_localePyFile_NamePyMapping_HasKeyPyObject_GetAttrPyErr_ExceptionMatchesPyEval_CallObjectPyErr_Occurred_PyModule_Clear_PyWeakref_CallableProxyTypeM_apport__reportM___future__PyDict_Copy_PyString_FormatLongPyTuple_GetSlicePyFile_WriteObjectPyUnicodeEncodeError_GetObjectPyObject_GenericSetAttrPyOS_ReadlinePyUnicodeUCS4_DecodeLatin1initposixPyNumber_InPlaceTrueDividePy_VaBuildValuePyUnicodeDecodeError_GetReason_PyFloat_Unpack8PyThreadState_DeleteCurrentPyUnicodeUCS4_SetDefaultEncodingPy_FindMethodInChainM_urlparsePyMarshal_ReadShortFromFilePyRun_SimpleFilePyThread_release_lockPyLong_AsDoublePyObject_IsSubclassM_SocketServerM_copy_regM_xml__saxPyEval_GetLocalsM_pprint_PyLong_FromByteArrayPyCodec_LookupErrorPyMapping_CheckPySys_GetFileM_distutils__dep_util_PyTrash_delete_laterPyDictIterValue_TypePyMethod_FiniM_difflib__data_startPyBaseString_TypeM_fnmatchPyExc_SyntaxError_PyInstance_LookupPyRun_InteractiveOnePy_UseClassExceptionsFlagPyArg_ParseTupleAndKeywordsPyNumber_DividePyNode_Compile_PyExc_InitPy_GetProgramNamePyEval_GetGlobalsPyFloat_TypePyDict_KeysPyUnicodeUCS4_DecodeUTF8StatefulM_picklePySequence_Index_PyParser_GrammarPyNumber_FloorDividePyComplex_FromDoublesPyOS_ascii_formatdM_email__ErrorsPyCell_NewPyExc_TabErrorM_xmlM_threadingPyMember_GetOnePyExc_EnvironmentErrorPyObject_AsReadBufferPyUnicode_EncodeUTF7Py_DebugFlagPy_FlushLinePyTuple_FiniPyParser_ParseFileM_bdbPyObject_DirM_apportPyExc_ZeroDivisionErrorPyExc_IndexError_PyObject_DelPySet_TypePyEval_InitThreadsPyErr_SetObjectPyRun_SimpleFileExFlagsPyNumber_MultiplyPyReversed_TypePyEval_RestoreThreadPySequence_ConcatM_heapqPyErr_WriteUnraisableM_popen2PyMarshal_WriteLongToFileM_xml__parsers__expat_PyObject_NewVar_PyUnicodeUCS4_AsDefaultEncodedStringPyRun_FileExFlagsPyUnicodeEncodeError_GetEncodingPyEval_EvalCodeExPyExc_LookupErrorPyUnicode_TypePyExc_MemoryErrorPyExc_DeprecationWarningPyUnicodeEncodeError_CreatePyRun_AnyFilePyTupleIter_TypePyObject_SizePyNumber_Float_Py_HashPointerPyCodec_BackslashReplaceErrorsPyThread_get_thread_identPyUnicodeDecodeError_GetObjectPy_FrozenFlagM_bisectPyEval_CallMethodPyUnicodeTranslateError_GetStartPyCObject_GetDescPySymtableEntry_NewM_subprocessPyUnicodeUCS4_GetDefaultEncodingM_encodings__aliasesPy_UniversalNewlineFread_Py_TrueStructPyUnicodeUCS4_DecodeCharmapM__threading_localPyRun_InteractiveLoopFlagsM_xml__parsersPyThreadState_NewPyString_FromString_PyObject_GC_NewM_xml__sax__saxutilsPySequence_DelItemPyString_FromFormatPyNumber_InPlaceAndPyErr_Display_PyUnicode_TypeRecordsPyMember_SetOnePySymtableEntry_Type_Py_CheckRecursionLimitPyTuple_PackPyString_ConcatPyInt_FromLongPyLong_FromStringPySymtable_FreeM_globPyEval_SaveThreadPySlice_GetIndicesExPy_VerboseFlagPyExc_UnboundLocalErrorM_doctestPyThreadState_GetPyLong_FromUnicodePyTuple_TypePyParser_ParseFileFlagsPyModule_GetFilenamePyEval_AcquireThreadPyRun_StringPyCodec_ReplaceErrorsPyBuffer_FromObjectPy_AtExitPyDict_SizePyOS_getsigM_apport_python_hookM_codecsM_email__Encoders_PyGC_DumpPyCallIter_New_PyFrame_InitPyModule_GetDictPyUnicodeTranslateError_GetReasonPyRun_FileFlagsPy_InteractiveFlag_PyLong_AsScaledDoublePySequence_GetItemPyErr_SetFromErrnoWithFilenameObjectPy_SymtableStringPyDict_GetItemPyRange_Type_PyImport_IsScriptPyErr_RestorePyEval_GetRestrictedPyDescr_NewWrapperPyObject_SetItemPyFile_TypePyInt_AsLongPyObject_GenericGetAttrPyToken_TwoCharsPyUnicodeUCS4_AsRawUnicodeEscapeStringPySys_WriteStdoutPyCObject_AsVoidPtrPyNumber_InPlaceFloorDividePyCell_GetPyOS_AfterFork_PyLong_NewPyString_AsDecodedObjectPyObject_RichComparePyGrammar_FindDFAM_email__MIMETextPyCFunction_NewExM_loggingPyCFunction_GetSelfPyInterpreterState_Clear_Py_cobject_hackPyLong_AsUnsignedLongLongMaskPyDict_ValuesPySequence_SizePyObject_GetIterPyUnicodeUCS4_TranslatePyExc_RuntimeErrorPyList_SizePyUnicodeUCS4_EncodePyImport_ImportFrozenModulePyNumber_Rshift_Py_c_quotPyStaticMethod_NewPyType_IsSubtypePyTokenizer_GetM_email__quopriMIMEPyInterpreterState_HeadPyType_TypePyUnicodeUCS4_SplitlinesPyOS_InitInterrupts__libc_csu_initPyExc_IOErrorPyObject_AsCharBufferPyUnicodeUCS4_EncodeUTF8PyFrame_BlockPopM__LWPCookieJarPyInterpreterState_NewinitthreadPyExc_MemoryErrorInst_PyImport_InitPyUnicodeTranslateError_GetObjectPyThread_init_threadPyDescr_NewMethod_PyFloat_Pack4M_sre_constants_PyParser_TokenNamesPySys_WriteStderrPyObject_InitPyTokenizer_FromFilePyEval_EvalCodePy_GetVersionPy_DecRefPyThread_get_key_valuePyNumber_AddPyErr_BadArgumentPyFPE_dummyM_FixTk_PyExc_FiniM_email__MIMEMultipartPyWeakref_NewProxyM_shutilPyNumber_CoercePyGILState_EnsurePyInt_Fini_Py_c_diffPyDict_DelItemPyList_SortPySequence_DelSlicePy_FileSystemDefaultEncodingPyObject_DelItemStringPyRun_InteractiveOneFlagsM_rfc822M_macurl2pathPyUnicode_AsDecodedObject_PyFloat_Pack8PyErr_WarnPyErr_NormalizeExceptionPyMethod_TypePyTraceBack_TypePyEval_EvalFramePyObject_CallObjectPyStaticMethod_TypePyUnicodeUCS4_FromOrdinalPyNumber_Xor_PyUnicodeUCS4_IsLowercase_PyTrash_destroy_chainPyUnicodeUCS4_EncodeUnicodeEscapePyObject_MallocPyUnicodeUCS4_EncodeDecimalM_xml__dom__NodeFilterPyErr_FetchPy_InitializePyModule_GetNamePyFile_GetLinePyUnicodeDecodeError_GetEndPyString_AsEncodedObjectPyUnicodeUCS4_DecodeRawUnicodeEscapePyImport_ReloadModulePyUnicodeUCS4_ResizePyObject_TypePyFloat_AsDoublePyCodec_DecoderPyParser_SimpleParseFileFlagsPyOS_GetLastModificationTimePyParser_ParseStringPyThreadState_GetDictPyWrapperDescr_TypePyEval_GetFuncNamePyUnicodeUCS4_JoinPySequence_FastPyRun_AnyFileExPyCell_TypePySeqIter_TypePyStructSequence_InitTypeM_atexitPySequence_CheckPyObject_HashPyFile_SoftSpacePyObject_ClearWeakRefsM_srePyUnicodeEncodeError_GetStartPyGC_Collect_PyObject_GC_TrackPyNode_AddChildPyEnum_TypePyTraceBack_PrintPyCodec_EncoderPyEval_SetProfilePyUnicodeTranslateError_SetReason_PyUnicodeUCS4_IsDigitPyNumber_InPlacePowerPy_BuildValuePyUnicodeUCS4_FromWideCharinitsignalPyNode_FuturePySlice_GetIndicesPyNumber_SubtractM_markupbasePySlice_NewPyFunction_GetGlobalsM_uuPyObject_GetAttrStringPyUnicodeEncodeError_SetReasonPyCFunction_GetFunctionPyOS_vsnprintfPyCObject_FromVoidPtrAndDesc__bss_startPyObject_IsInstancePyLong_TypePyExc_WarningPyRun_StringFlagsPy_GetRecursionLimitPyCodec_StrictErrorsPyMapping_HasKeyStringM_httplibM_pydocM_os2emxpath_PyObject_GC_NewVarPyCFunction_NewPyUnicodeUCS4_SplitPyInt_FromString_Py_EllipsisObjectPyExc_OverflowWarningPyMethod_FunctionPyMethod_Self_PyString_JoinM_TkconstantsPyCodec_RegisterErrorPyObject_SetAttrString_Py_NoneStructPyStructSequence_NewPyParser_SimpleParseStringPyUnicodeUCS4_EncodeCharmapPyExc_OverflowErrorPyUnicodeUCS4_CountPyWeakref_NewRefPyNumber_CheckPyString_FromFormatVPyUnicodeDecodeError_CreatePyErr_NewExceptionPyList_AppendM_quopriPyObject_SetAttr_PyUnicodeUCS4_ToLowercasePyEval_GetBuiltinsPyCFunction_FiniPyMember_GetPyErr_SetNonePyTokenizer_FromString_PyUnicodeUCS4_ToDecimalDigitPyUnicodeUCS4_DecodeUTF16PyFrame_FiniPyThreadState_SetAsyncExcM_sre_parse_Py_c_pow_PyLong_SignPyErr_CheckSignalsPyThreadState_SwapPyDict_GetItemStringPy_UniversalNewlineFgetsPyNumber_InPlaceDividePyLong_AsLongLongPyParser_NewM_sgmllibPy_FinalizePyUnicodeDecodeError_GetStartPySequence_TuplePyObject_CallPyThread_set_key_valuePyErr_PrintM_ttyPyTokenizer_FreePyExc_AttributeErrorPyUnicodeUCS4_AsEncodedString_PyImport_LoadDynamicModulePyUnicodeUCS4_EncodeLatin1M_stringPySlice_TypePyExc_StandardErrorPyLong_FromLongPyDescr_NewClassMethodPyLong_AsUnsignedLongLongPyOS_FiniInterruptsPyObject_ComparePyRun_AnyFileExFlagsM_inspectM_UserDictPyString_ConcatAndDelPyTraceBack_HerePyDict_DelItemStringPyNumber_Or_PyObject_GC_UnTrackPyOS_strtoulM_distutils__sysconfig_PyThreadState_CurrentPyGrammar_RemoveAcceleratorsPyThreadState_NextPyOS_setsigPyObject_DelItem_Py_SwappedOpPyMarshal_WriteObjectToFile_PyWeakref_ClearRefPyDescr_NewMemberPyNumber_InPlaceSubtractPyEval_MergeCompilerFlagsM_dummy_threadM_statPyArg_ParsePyLong_FromLongLongPyNode_NewPy_GetExecPrefixPyExc_NameErrorPyNode_CompileSymtablePyRun_SimpleStringFlags_PyUnicodeUCS4_IsWhitespacePyUnicodeUCS4_DecodeUTF8M_calendarPyOS_InputHookM_email__FeedParserPyUnicodeUCS4_ReplacePy_InitModule4PyMethod_NewPyUnicodeUCS4_Compare_PyInt_InitPyString_AsStringAndSizePyExc_FutureWarningPyEval_CallFunctionM_email__MIMENonMultipart_PyGC_generation0PyObject_FreePySequence_GetSlicePyTuple_SizePyImport_ImportModule_endPyMapping_GetItemStringM_email__MessageM_ftplibPyUnicodeUCS4_DecodeASCIIPyExc_KeyboardInterrupt_PyLong_NumBitsPySeqIter_New_PyLong_CopyPyInterpreterState_ThreadHeadPyErr_ClearM__xmlplusPyUnicode_RSplitPyGILState_GetThisThreadStatePyCodec_RegisterPy_GetCopyrightPyTuple_New_Py_CheckRecursiveCallPyCFunction_TypePyThread_create_keyPyMapping_LengthPy_GetBuildInfoPyNode_FreePyMarshal_Init_PyImport_FixupExtensionPyUnicodeUCS4_Tailmatch_Py_ReadyTypesPyUnicodeUCS4_GetSizePySequence_SetItemPySys_ResetWarnOptions_PyUnicodeUCS4_InitPy_GetPrefix_PyErr_BadInternalCallPyUnicodeUCS4_AsASCIIStringPy_MakePendingCalls_PyImport_FiletabPyImport_GetModuleDictPyCodec_IgnoreErrorsPyExc_NotImplementedErrorPyUnicodeUCS4_AsEncodedObjectPyBuffer_NewPyModule_GetWarningsModulePyImport_AppendInittabPyMapping_SetItemStringPyTuple_SetItemPyCode_Addr2LinePyExc_UnicodeEncodeErrorPyTuple_GetItem_PyString_ResizePyObject_RichCompareBoolPyCodec_StreamWriterPyErr_SetStringPySequence_ContainsM_tokenizePyStructSequence_UnnamedFieldPyNumber_TrueDividePyUnicodeUCS4_FindPy_FatalErrorPyDictProxy_NewPyMarshal_ReadLastObjectFromFileM_warningsPyString_InternImmortalPy_GetCompilerPyInt_FromUnicodePyThread_exit_threadPyUnicodeUCS4_AsUnicodeEscapeStringPyUnicodeUCS4_DecodeUnicodeEscapePyUnicodeUCS4_AsUnicodeM_rePyImport_GetMagicNumberPyToken_ThreeCharsM_getoptPyBuffer_FromReadWriteObjectPyList_SetItemPyObject_CallFunctionPyObject_Realloc_Py_abstract_hackPyThread_delete_key_valuePyList_ReversePyString_TypePySequence_CountM_weakrefPy_IgnoreEnvironmentFlagPy_CompileStringM___main__PyFunction_SetDefaultsinitgcPyEval_AcquireLockPyUnicodeUCS4_FormatPyUnicodeEncodeError_SetEnd_PyGILState_FiniPyUnicodeTranslateError_SetEndPyGen_NewPyImport_CleanupPyRun_SimpleStringPyClass_New_PyImportHooks_InitPyNumber_IntPyUnicodeUCS4_ContainsPyOS_ReadlineFunctionPointerPyUnicodeUCS4_FromUnicodePy_ExitPySequence_Length_edataPyRun_FileExPyListIter_Type_Py_c_sumPyImport_ExecCodeModulePyDescr_NewGetSetPyInstance_NewRaw_PyWeakref_ProxyTypePyFile_WriteStringPyArg_VaParseTupleAndKeywordsPyFile_SetEncodingPyGrammar_AddAcceleratorsM_socketPyThread__exit_threadPyObject_HasAttrString_PyObject_GC_DelPyComplex_FromCComplexPyUnicodeUCS4_AsUTF8StringPy_ReprLeavePyEval_ThreadsInitializedPyFile_FromString_PyType_LookupPyNode_CompileFlagsPySequence_RepeatPyUnicodeUCS4_EncodeUTF16PyRun_FileM_dummy_threadingPyCObject_TypeM_StringIOPyParser_ParseStringFlagsPyExc_SyntaxWarningPyLong_AsUnsignedLongMask_Py_PackageContextPyUnicodeTranslateError_CreateM_urllib_Py_TickerPyOS_strtolPyList_NewPyErr_SetFromErrnoPyType_GenericAllocPyMem_MallocPyObject_CheckReadBufferPyString_FormatPyCallable_CheckPyErr_PrintExM_email___parseaddrPyEval_ReInitThreadsM_opcodePy_IsInitializedPyDict_ClearPyString_AsEncodedStringM_email__MIMEBase_PyUnicode_XStripPyThread_start_new_threadPyDict_MergeFromSeq2M_distutils__text_file_PyUnicodeUCS4_IsNumericPyParser_DeletePyDict_SetItem_PyBuiltin_InitPyString_DecodeEscapeM_pdbPyFile_FromFilePyObject_ReprPySequence_SetSlicePyFloat_AsStringPyImport_FrozenModulesPyEval_GetFuncDescM_distutilsPySequence_ListPyErr_SetInterruptPyLong_AsUnsignedLongPyFunction_TypePyFPE_counterPyUnicodeUCS4_EncodeRawUnicodeEscapePyRange_NewPyDict_NewM_posixpathPyToken_OneCharPyInstance_New_PyUnicodeUCS4_ToDigitPyRun_SimpleFileExPy_UnicodeFlagPySys_SetObjectPyThread_acquire_lockM_distutils__logM_gopherlibPy_FrozenMain_PyUnicodeUCS4_IsDecimalDigitPyUnicodeTranslateError_SetStartPyCodec_DecodeGLIBC_2.0GLIBC_2.1GLIBC_2.2GLIBC_2.4GLIBC_2.3         ~ ii QO0ii Qii Q@ii Qii Qii Q ii Qii Qii Qii Qii Qii Q333 3 $(,04 8 < @ D HLPTX\`dhlptx| !"#$%&'(8)*+,-./0123456789:;<=> ?@ABC D$E(F,G0H4I8J<v@KDLHMLNPOTPXQ\R`dShTlUpVtWxX|YZ[\]^_`abcdefghijklmnopqrstuvwxy z{|}~ $(,048<@DHLPTX\`dhlptx|  $(,U 5 %%h%h%h% h%$h %(h(%,h0%0h8p%4h@`%8hHP%<hP@%@hX0%Dh` %Hhh%Lhp%Phx%Th%Xh%\h%`h%dh%hh%lh%php%th`%xhP%|h@%h0%h %h%h%h%h%h%h%h%h %h(%h0%h8p%h@`%hHP%hP@%hX0%h` %hh%hp%hx%h%h%h%h%h%h%h%hp%h`%hP%h@%h0%h %h% h%h%h%h%h% h%$h %(h(%,h0%0h8p%4h@`%8hHP%<hP@%@hX0%Dh` %Hhh%Lhp%Phx%Th%Xh%\h%`h%dh%hh%lh%php%th`%xhP%|h@%h0%h %h%h%h%h%h%h%h%h %h(%h0%h8p%h@`%hHP%hP@%hX0%h` %hh%hp%hx%h%h%h%h%h%h%h%hp%h`%hP%h@%h0%h %h% h%h%h%h%h% h%$h %(h(%,h0%0h8p%4h@`%8hHP%<hP@%@hX0%Dh` %Hhh%Lhp%Phx%Th%Xh%\h%`h%dh%hh%lh%php%th`%xhP%|h@%h0%h %h%h%h%h%h%h%h%h %h(%h0%h8p%h@`%hHP%hP@%hX0%h` %hh%hp%hx%h%h%h%h%h%h%h%hp%h`%hP%h@%h0%h %h% h%h%h%h%h% h%$h %(h(%,h01^PTRhvhvQVhPKUS[8y tX[ÐU=3t HҡHu3ÐUtt $ÐL$qUQA@1$D$Y]aÐUW1VS p3u d3$;h3t$E$$1x"tc'1ۅt&u蹯[^_]á3$$tء31D$p~$Ou[^_]$\~1Ít&\$ D$N~D$3$;$/~It 8p3$=~"83D$$L 3D$$73D$$"|U 1]ÐUS$$` ?\$D$ x~D$~~D$$ 3D$$ 3[]ÐU]Ít&'U1]ÍUE]@É'U(uu]}t1ۍ ޅuu1]u}]á`11Et uE 3tPT$ $2EUt`19 3tD$ET$${Et$U 3`1D$$R1? 1=L1UE]x&UVS ED$D$~E $] 1҅tR@1uuJ& t:t$$uKtGC $1)ЉD$Yƒ [^]á|3t$D$ȃ$4 1[^]á|3t$D$$ 1붍U%t#$3t;L1u?(3(3t22L1$22D$~3$ 1ÍUu]tK$3t{L19tFtR,zD$á$3$$M5L1(3]u]Ív(3]u]D$$3$Ju듍t&{$3o믍U522Í&U(ED$E D$~$[ 1҅t E$ɉÉ'UWVS$"to53ua& tQFD$ FT$$~D$it7D$<$Kx>uC $Pu[^_]Ët:1[^_]ËtuދC1$P뼋G<$P݋G<$1P뤍v'U1D$EEEEE$=hÍt&'USL3XCt C[]Ð$褗C[]Ít&'UWVS,L3@E܋@END$Ǣ$Et&@=@2kD$@2$SUD$:x$NE@=@2tD$@2$tgE$Jơ`1J1-`1D$24$D$d1h3tɉD$$~뷋ED$1x$EtR@=@2tD$@2$t4 h3OE$ UD$2D$1x$EEt&ED$EUT$ UT$$U:uЋE@= 2tD$ 2$tUB=@2tD$@2$bt]Ǣ s:x:u;x:Cu3fB$PАt&UWV1St&B  u=1EtB  uIE<1tP $Cv4t$D$$U3D$$T$q533t+t%t&ƿhumC u3t 1n [^_]$@XVvUWVSED$E D$r$R 1҅tE5`1}t@^vރt-D$<$euVt$ƒ[^_]1፶'UWVSӁ,UEMeE1ɉt$J=\$$$'t@=l2tXD$l2$uD|3D$d$ Džt&Ue3,[^_]Ã4$41ۅu9\$4$D$D$L$T$ $f)=2<22u2$2P눡2$2Pf9t\\$4$}D$2D$D$L$ $=222u댋u F4$PA= 2tdD$ 2$;uPB=l2D$l2$|3D$܄$ Dž7$}$D9E  $|D$$$f. $D$ $T$D@1t&C T$$u܋L$$Dž@1EDž'Dž1F4$PDž13D$$ Dž|3L$D$$ Dž$p@=l2tD$l2$$4 t&@=x2D$x2$|3D$8$ Dž`1Z D$$(u݋D$$LDž41|3D$$< Dž}|3D$$ DžY$ $DžDžDž{vD3D$ D$CD$C $mcÉ$yǍD;E t`9 D$$0@=@2XD$@2$@C= 2tD$ 2$t1J$xD$$$97 $/ \$$OU2tPD$iD$L$ $]/=2,22t|:/t:/L$$D$$D$?u%=@ 3/D$ $ua tNT$$=h3~$D$fB8Uu둋F4$Pt tzt@1ÅuXvS tKL$$0uT$ $TDž@1F4$Px$Io!2$2P#E|3L$D$$ Dž,$@ =0,у/ __inCit__C.pyD$$T$$o 3@u f,D$L$$js D$2\$$Dž3|3$ & 9L$$% \$D$$詂t2J \$L$$Ëu B$PF4$t&PDž.Dž1t tDž(1׋F4$PDž(1'UHeE1D$ D$E ]u}DžD$$F u!1ۋUe3]u}]Ë1ƅDž2!D$1D$ D$<$&tthD$ \@|$$D$EtZCD$CD$|$t$$D$ MtË F4$P221ۉ$GU$t$Uu]EUUM u] U$‹t$]Dt&UVS ED$E D$$D 1҅t>@1uu6& t&t$$uC$蜨ƒ [^]1鍶'UVS@3uL3XCt$C$ut@=@2t8D$@2$u$31ۉt$D$`$f [^]É$Uu 1ۃ[^]É$t҉D$E D$@3$ uC$P$螀Et@3 1딍vUL3}}]uXKtzs|$4$t@=@2tAD$@2$u-<$tD$|$4$nu6t؋u]}]ËC$P$ut1ƋC$1P빐&U@3}} ]uu1ۉ؋u]}]Ít&|$$tًE$tʉ$tt$$u5h3tE|$$D$@닍&'UVSD$$Jt [^]Ë`1u At8D$4$3uCtRh3u!S t'[^]Ã1[^]Ét$$͉t$4$vá|3t$D$$ U(ED$D$#E $@ u1ËEt&|u22ËE$kt̓fUWVSL3}XCe[E]$0$D$2Ɖ$<$ctx\$D$?4$tgt$t$E $t_ED$E$=[^_]1 E X0tfC$P뎐t& tB$P&IcD$24$D$ L3XCt^[E$D$u1ۃ[^_]$P|E$D$Ly$1*|%t&$|딋ED$D$|3$V UWVS@1uuv t$$#uC@{Etߡh3t$MHD$t$$Q芿|$C$k9txx`,3Ut4$tI$E4$bt0D$D$gE$eEEt*[^_]1҃[^_]É4$D$p\$tt*uF4$P뱸.C$Pˡ|3t$D$$ y3t$D$D$ ;G<$P&C$vP7vU(ED$D$yE $< u1ËE$|u22ËE$-tσÍt&U $]ˉu։});1$($79t-x`,3t8|3t$D$$ td1]u}]Ívh3uYt$\$<$'ƋuȋC$P뽡|3t$1D$$4 fC1$Pt&댉t$|$$pʼ두&UE D$D$E$Í&'UWVS<L$$eE1c; 4$DžÍ@=D$t$<$螏t$$ $N#yh3$D$D$$D$ $ D$1D$$k<D$$T$M<D$<$D$Z$Qh3 $$t&t$\$$ƋtUe3<[^_]ËC$Pؐt&h3t$ T$1묍\$$t$=3ƄD$o${t%$%;1@h3uK$vt$$D$ԹT$$諹띡3t$1D$$ $VD$D$$D$T$$5:$S$h3$2T$$ T$ڸ$-$9t-h3D$$Ѐ袸=h3uZ$64t9x`,3tfD$|3D$$ t+$1gt$T$$늋B$Pʉ$ h3D$$pT$÷&U(]]}lju΋M Cw, v2\$ 1|$D$D|3$ ]u}]Ít&$]щ}u]]щ}u][t$T$<$뤋]u}]t >f<$1dL3pF|$F$*|$ D$iD$b $Inv\$1D$3$ t&Ywti~|$ 1D$D$|3$= $q9D$>|31$p hwti~|$ D$D$|3$ 7v'USDED$ED$ED$ED$ED$ ED$D$YE $3 1҅tu]usE1=2tBPQ2t%D$Q2$EUMt{$h-MED$U$#ƒD[]tD$$˺GD$g$Y$D$ D$ƅD$ËB$Pt&|31ۉt$D$ć$ $4mlP$RB$PfP$Rm t&2D$D$|3$ CB1ۉ$P U8eE1L3}ω]uXC[|$$Mt)ËUe3]u}]Ðt&2DžDžD$g$6ىD$ D$$ƅD$ƋaD$F$҉tt$2ۉKB=@2tD$@2$莼$tt$$T$zt1h$pj9C$1PGP$R-C$P1ɉ$D$ D$ƅD$>|3$ _ 22t$D$$ |$$nft&'UWVSUEMD$g$<13E |$E$r3@= 2tD$ 2$譺k{*t\$E$tuC$P듍s4$E=EE.t$$+MEuB$PfD$E$tYD$Eډ$MEƋt"1҃[^_]ËC$PC$Pt& 3$ t [^_]á3D$$Z uC$P1[^_]á3D$$% Oōt&UWVS˃UED$.E$薼L@+UUMU E}9t.xE4+]D$E<$D$臼U MEF=2tt 2[^_]ÍvE9E22Et=2L3pVUD$2T$F$腽EUD$ET$$UEU G31D$$ 7U$蟿E22t#ED$D$|3$ 12$2P̡31D$$ 2$2PuC$1P$ev'UWVS,u E]eU1҉Džt&F=x2D$x2$r2T$$22tm t&tLD$؉$ƋuC$Pu1t+$3t!;L1(3(3Ue3,[^_]á<383<3ƅDž4$D$1@= 2tD$ 2$834$D$s CD$$ĽL3XCD$C$=32$ߋD$$]LC1$P>G<$1Pf,$L1詾J31D$$ t31D$~$ $g]I83C$P$J*"I<31oG<$Pt&G<$PffsD$.4$4¸2)\$t$$϶Ƅ$`Vv'UWVS43UHg103$D$UEtlF=x2tD$x2$>,34$D$43\$\$ D$ED$<$D$C^EttAt tBt t E[^_]ËG<$PE[^_]Ít&C$P봐t&F4$P&묡,34$D$}EAg,3D$3$A EE$F,3ulEQ D$ D$D$$ǢtʼnD$03$ށD$Pj1E$2xF03{D$ҁ$ځP43Ut&UE]u1$Et$Ƌt ]u]ËC$P]u]Ít&'U8]ӋueE1}Dž$h34$T$VDD$$Otf\$D$?$ to1u C$PvUe3]u}]Ð11؋\$$D$^=|$D$g$oD$$ ƅD$ D$taD$@$"Ƌ$薵t&G<$P&|3$I  t&U(ED$ ED$E D$$ 1҅t UEɉfUWVS 5h3$t)D$$觜Ƌ1l$@[$3B$ƋQt{D$W4$ËGd\$<$sƋ7nh3t$c4t&t5 [^_]8 h3t$=uҍ&G<$P [^_]蚳D$$pƋ${D$$1t&$dFC$PeC$Pt&F4$P&C$Pf& h3$C$P*'UWVS,EEEE]E ۉEt1ۍu䐃 ޅuu 1,[^_]á`11Et uE܍ 3tPT$ $GEUt`19 3tD$ET$$萲Et$Uܣ 3`1D$$g1Dt&UV1S0EED$ED$ ED$Q2D$D$E $ t.EUt1$tYUًEƋEt20[^]Ít&D$$茮uǡ3$- Ή$0[^]á31D$$ 뤐UV1S0EED$ED$ ED$Q2D$D$E $O t.EUt1$tYUًEƋEt20[^]Ít&D$$輭uǡ3$] Ή$/0[^]á31D$$ 뤐U(ED$ED$ ED$E ED$Q2D$$ 1҅t+Et($Nt D$ED$E$ɉ1ࡔ3D$$E 1ߐUWVSD$D$ D$1D$1$x;w$e$D$<$ÉD$oۉt:&$趟D$ł<$ÉD$0ۉt $wD$ς<$ÉD$ۉt$8D$ۂ<$ÉD$責ۉti$D$<$ÉD$sۉtu C$P%$赞D$<$ÉD$/ۉt_$vD$<$ÉD$ۉt0$7D$ <$ÉD$豫ۉtxl$D$<$ÉD$vۉtx1$ D$%<$ÉD$;t tQ[^_]Ít&C$PC$Pt&^C$PfC$PfC$Pf뢋C$Pt&ZC$PfC$PfC$PfU8]] }}u\$<$Ot]u}]D$.<$é}Et E}E\$<$D$ ED$vE uUD3EED3UED3_ q蒺|$$膲Et|E\$D$?$h7x}\$<$*h3u.EED$$D$|3$N \$|$$뼡31D$`$| fwUD$D$ D$D$1$)x7tD$D$6$6UVS0t@4$4$4$ ݧ4$ Ч ڃ[^]Ít&p;ptF9AAt@VFA 9At@^FA 9At"VFA [^]Éځ뎉ځ넁yU(EEEEÍvUuu]t"4$4$ ؋]u]ø9tf9t@]u] ИÉf ōt&'UeE1]u}}B;BtUBC|v43D$$O 1ue35 ]u}]$<$3D$ $ 1뺍&$눋{$觔|1T 9xu  ҉Y Dž6聧vtD$t$$贤tuC$P뛋$Ϥà D$ \$D$$覬9pH3ƄH3 $TH3$ݝ?ٽ f٭۝٭)ÉH3 $ƃ D$ t$D$$ϫ9H3Ƅ5H3 $}H3$ݝ?ٽ f٭۝٭)ËH3$D$D$D$ $/1&t&D$\$$g9uG2A220bQDžɉ‰D$D$ D$$)XG222=j1)Ɖ4$^X1H$蒡Ë$x …bfDw 9uB;B6fB랋$/9$ÃeD$ \$D$$ը9H3ƄH3p$胣H3$ݝ<ٽ f٭۝٭݅)ÉH3$D 1$ËƋ NjHl  DžtutptktZtKt<t-tt& u$|NjD$ t$D$<$ڥ9D$\$<$<$BJ|D$$teHqT$ |$D$ $I9t4҉*3DžD$ $ t$\D$B$A33mAA;P/@ OF4$PlJ;JJA ډAu ȡP$RG<$PB;BBF;FFcA $PrC$P}F4$PG<$PF4$fPB$fPA $fPF4$fPB$fPыRA)9~É\$T$<$X,P$RVF)9~Ɖt$T$ $谝p{VF)9~ƍt$T$$|pQދA)9~ƍt$T$$Hp3D$@$9 1 |$T$4L$0D$,t$T$(L$$D$ \$T$L$ D$T$ $u3D$Ɖ$ B;BY0Bq$3ۛ3D$$B 1H3$3衛|ĉft&QA)9~Í\$T$$˛X$3A"a&US$EE$EE EEEËE҉u EP$R؃$[]Ít&'US$E$EwEE|ËE҉u EP$R؃$[]Ð&US1ۃ4ED$D$E $ EPQ2tD$Q2$跒E$tE$E轵 tQ31D$)D$$D$ NE҉t؃4[]ËEP$R؃4[]ÍEuU u3D$Ɖ$ 먡3D$|$ 럍vU@]]ueE1}$Γt$$D$躝u| ~g&$Ë҉uP$RUe3 ]u}]Ãv=@t&&j|=vZ$XDǍ|T$\$ D$<$贝Dž$Ë҉t99| <$|׉‰pךP$R붍v'US1ۃDED$ ED$D$E $ u؃D[]ËEEEEE$E tG3D$)D$$D$ vE҉uEP$R؃D[]ÍEu腲 uǡ3D$Ɖ$< 밍v'UWVSӃt_D$‰$؛tfD$Ɖ$toD$$觛tuD$4$蒛[^_]ËB;BtwBuS;SBCuS;S BCuC;CC[^_]ËB n$l,ǍED$C $R(JCCC &$$,ljMC L$$ (CCC $+ljMC L$$'CCC $+ǍED$C $z't4CCHC 8ECňS C 8ECSC 8ECSC 8EC SfU(E UEEEEEDfUu։}lj]eE1B=B~/BnEe3#]u}]Í&2F;=3U2dG2sG2G=g2D$g2$讋G=u2D$u2$舋G=b2vD$b2$b^G=N2D$N2$<wG= 2{ D$ 2$c G=@2 D$@2$h G=`2D$`2$ʊG=l2D$l2$褊G=x2tD$x2$肊]9D$${,Dž\$ D$T$<$Du‰t&D$$0貖_D$$i萖~tjD$$NlctiD$$SQHthD$$.6-D$$FB;BNBB;BSBB;B.BF;FiFB;B0BD$$TvmD$$lW_O1)Åۉ0Dž$=D$É$tKD$lj$$9$$\G uF;FtF믋F;FtqF믋F t$&@! t€uҋ+ YT$$T$ \$D$$ڍ<$&$^-D$$>%! t€uҋ+ T$<$31ۃy&+T$$9uۋV;V+BFыB $9!ÍF |$$"!F F.V1ۃy&x+T$$h9YuۋV;V^+BFыF;FfFF;FFB $e ÍF |$$NMF FFVnFB $ ÍF |$$F FTVTF $ÍF 8L$$FFF 84FiV]F +Wl$@\XD$F $ FF)F;FxFFt W,D$$sK_@T$ \$D$$.؃Džy;9&T$)$Ҍ;u͋V;V)BFËF;FFC$P@F 8FlVF $ÍF LL$$~FF(oF $PtpD$F $0FFF;FFSF \XFWVC$P<$(,D$$u,R,҉T$ D$D$$,B$P1y.T$$v9guًV;VcBFϋF $ÍPD$F $FFF +$MD$F $-FFF $$ÍF `T$$wFFF;FsF|$$Qw$1p(D$$R(D$$(ш<$j1ۋD b9uF }$hdD$F $FFaF PF VF tpFoV$F e$GD$F $'FF"F LFfVF "$ÍF L$$FFF;F(FAF FVD$$[Ɔ_DžG Y;u}F;FuFKDžy=T$$09TuŋV;Vt:BF뿋F `FxV`F t$ÍF |$$NFFHF hdFVqF;FeRF=2D$AEC$P^/31D$D$$D$ Q}UD$)}B $NV$tC} މ׉t.E$D$U$ܦT$Åu}ED$|$$$mO|  P t tF4$P?B$PE$t&O9)gM$ܛL$ M$L$-M$L$7Ekt&7QC$PfaC$Pf2E22$2Pfi t&EEC$vPl3i zat&U(3tÍED$ED$E$i $#tD$|$T3tED$ED$E$g 3Ív'U3tËp3u$IÍ&US$ED$ED$E$`h  3$KU2zI2tZB=g2tD$g2$DU$8UËET$D$E$f h 4$hRD$$<~tkE҉te2ډ]qUt&1g /f3D$D$E$$-s6UWUEP$R덐t&UWVS<3$} )}u]|$t$$f |$t$$Yj E}$!wUbELT$ D$E$D$>ED$D$$OMЅtUЋUtUtUt t<[^_]ËEP$R<[^_]dD$$z1E$D$1E$D$y1t&B$P&/EP$RcEP$R$/!_+f;c覧4kfD$/3ʏ3~333 3$E3$E[]sb vB$Pf&C$Pf3$x t$$m0t&'U%E$VLv'U$s|ttËB$Pɐ$ch3uD$$LIa D$$(3$Ðt&UW.VSL$it?$(}@= 2tD$ 2.$=t 4$s$m.t?$|@= 2tD$ 2$N=.t $‹MMAD$E؋M D$E|$T$D$ D$/3L$$)t tXt t9uW} E t $G L[^_]1sC$P뼐t&F4$P&$1x"jt$gM <$L$ƋED$? <$ߕtut$t$$4ƋtMtTt{1҅Nk_ 1Bt&[_ EK_ .C$P$E$UF4$PwUE D$D$E$`Í&'UWVS,]}u t?$iNt;$m>tj\$t$<$ u,0[^_]Í]E$$iED$)EtUuB$P$D$mE܉D$)E܅lU܋ZB$PLUE D$D$E$Í&'UHuu܉]D$t$D$D$ED$/3D$ E D$E$t؋u]]f)؋u]]Í'UHuu܉]D$t$ E D$/3D$E$Kt ؋u]]É؋u]]ÍUHuu܉]D$t$ED$/3D$ E D$E$$t؋u]]fY؋u]]Í'UH]]u}tjCt_D$E}؉|$D$/3D$ E D$E$裖t1E \$4$D$*< 4$؋]u}]Ð1띉1UHEuu }}؉]D$ ED$|$D$/3t$$!t%t$$迅$蕑]u}]É1=t&'UVS@uD$t$ E D$/3D$E$otkD$D$ܛ$1; $1ۉt#ED$E4$D$/Ët@[^]Ðt&F4$P@[^]É@[^]Í&'UHE]] }}؉uD$ ED$|$D$/3\$$t-\$D$$g: 4$M؋]u}]É1vUWVS{U$4F4$P E܉$D$D$)tEt CU% C$PE $D$D$?U܉$u6xL"C$P3D$D$$xD$ {:VC$PkvUED$ D$E D$E$YÍ&U(]] Euu}}ۉEtn\$4$t.\$|$4$U҉u5؋u]}]ÍE}}] ]uuE]4$6닉'UE D$ D$D$E$ÍUHuu]}FD$E }؉|$ D$/3D$E$tnt$D$ܛ$2 $1ۉ蜈t#E4$D$ED$b'Ët؋u]}]Í1rF4$PىАt&U]] uutZ\$4$t\$4$D$]u]É\$4$D$ D$P]u]Í량'U(]] uu}}td\$4$t)\$D$4$u+؋u]}]É\$D$ |$4$Չ4$4ːt&땉'U(]] uu}}tT\$4$t}}] ]uu]|$ \$4$D$B]u}]Ðt&륉'UXE}}uu؉]D$ E D$t$D$D$D$/3D$<$t~Muu 1ۉ؋u]}]É<$3tvE D$$D$)0 $tE4$D$ED$$ËuF4$P돉pt&'UXE}} uu؉]D$ ED$t$D$D$D$/3|$$tkD$|$$g/ $1ۉKt#E4$D$ED$$Ët؋u]}]Ðt&F4$Pᐍt&Ӎ&USE;L3XuZPu];Cut"D$3D$$5C-A$z$][]qD$D$Ğ묍'U$1x]uXX$(VD$2É$8t ]u]$ǢytD$D$2$/t"D$3D$$-4h,uF4$PD$ʜƍUWVS 371$$n0CD$Ǣ$Ǣ Xtl$$UCt$D$:x$:xWuXL t.$]4$u<$4$1$ [^_]ÐD$:x$:xW먉$TC t3L$ CD$D$C $q.z \3WDM$Gw3D$<D$$2*UWVSL3p33[$$BZMjt&K$rv/FlD5g$vSFa k$SSF KD$:x$:xQTJ$tFD$D$F $ -%DpD$}$} TD$Ǣ$ǢScyEs\3|$4$J$|v3D$$/$4D$.$k/$1t 8|$$@/<$,L[^_]Ð$@*t 8p3 $*tB8t=h3D$ D$ D$$*‰9}Ѕh3p3$)83D$ D$ D$$t*‰9}Ѕm3LlhDžh$ (\$PED$$ +TDžP$'DžD$\$$+wa\3t&$A h$2-|$$]-<$*$&D$.D$Ɖ$$R@$BpD$.D$Ɖ$f1$Q5D3tm$*T[G `3D$ D$ D$$l(‰9}Ѕ`3-F4$PD3F 4$D$躋D$3D$$A-|%4$D$~ D$,‹C$PC$Pt&fF VF D$hvaD$TD$GD$:D$-D$0 D$\D$D$, U$ÐD3Ut E]零22]Í'UL3@P 1tE$D$0Ð&UE E] L3Ut@@ E]ut&]1Í<,3UE]O UL3H$ 1҅tED$E$ɉÍt&'US$3] (3,303 4383<32t"\$$[22[]D$$軩$$3R$ߴ(3A$tr,34$c觴tX03'$N荴t>43$Ust$83$aYt <31t&U($]uu }ωUEtdE$3tlC{ s<$x ED$\$$D$<$EEt.tE]u}]ËC$P吾2덉<$ UVSMu Uɋ^8tV(tEE $D$tl=2tAV(F(t t^(1[^]Ã1[^]ÍvB$Pݐt&22uӡ2$2P1D$$hV(t tF(녋F(P$Rv'US$L3XEED$D$jE $p 1҅t!E~t[ Etڃ$[]Ð3D$w$;I $1[]ÐU(ED$E D$$ 1҅tE~$軥22ɉá3D$$H 1fUSEM Y8t$u F4$Pɇ $Ѫt.xD$D$H$u F4$P8$萪t.D$xD$Q$`u F4$P8$Ot.xD$D$a$u F4$PF8$t.D$xD$\$u F4$Pu$- t.xD$D$h$u F4$P$ t.D$xD$o$\u F4$P$LE`1w`1]$KUD$$uuF4$P$ơeE$EUƋt.xt$D$z$u F4$PEL}t$`t.xD$D$$0u F4$PxD$G2D$$G2G2tu 3xD$D$$N6 Z1ۍt&OE$0aUB$P G2$G2PwF4$PG<$PB$fP F4$fP6F4$fPa$J 3!6B$PJt&'U]]u$$ut]u]Ð&US 3]ts@=l2tD$l2$t@$wtD$ 3$ st[]ËC]H[] 3t t$I 3u뾋B$Pސ&U 3tCB=l2tD$l2$&t% 3D$ BD$$D$kÍt&'UuU ]L3uҋ@X tT$t$$_‹]Ћu]Ðt$$1҅tu u]]]v'US$3] (3,30343 83<32t"\$$P]22[]D$$軙$蝥$3R$(3A$atr,34$cGtX03'$N-t>43$Ut$83$at <31t&UWVSÁ}eE1D$D$$ 2 L3@@ \$$$iy9|$ D$<$D$荮\$<$苧vQ\$$gt=1 t$ D$ D$$|$4$D$D$D$$/ Ee3u![^_]81 t$<$TNfU3ME E$nÍU 3ME E$B>ÍUL3]uu }D$Ǣ@@$2u22]u}]D$2D$$Ft1裚uL3@@ tD$B$u53D$$9 1닡3D$¢$k9 1oD$D$4$uD$<$\ct$D$$[E1USL3@P t?E$D$Kt*@=Q2tD$Q2$ t $vuE []fUWVS,@ME eU1҅ɉܿur4$CtS~O1D$\$$=9t.$՟uԋDžL31@@ tD$I$QNjFL3D$T$@@ $LtYܿE„҉ux1҉$T$J\$D$<$lru B$PEe3,@[^_]Åt:ul:Cu`:CuT:t$$tD$/$")؍PD$D$$~Ƅ/D$/$ [D$/$b\$$D$/$8T$$[1$1C$P:C:Cf$Ӣ迶L3@X D$$D$$B$P-$m$\fUWVSuD$:$ u$@Et{16)D$4$^tLD$|$E$W:;sD$:4$4 uD$4$.렋Uu B$P$8苵L3@X D$I$Et'D$I$eEt $N>Ut[^_]ËBUH[^_]ED$ID$L3@@ $T fUVSL3P4X8p<@4@8@<ttt|L3D$2D$f@@ $ L3D$2D$q@@ $ L3D$2D$}@@ $ 22[^]ËF4$PvfC$P&LB$Pf)U]]uu}} Ct t$$ׅu$S 1tu ]Uu}]ᐍt&]u}]ÍvUS]St t4S t tCC []ËC P$RދB$P&뺍&'UE D$1D$E$~ Í&'US]$)31U3St tZS t t8$)33ң3t~7[]É][]2fC P$RfB$P&딃[]2t&UWVS,uE eU1҅~@1$3@=g2tD$g2$w~$G$hD$suq1v@utPuL;~e@uHDžD$$,. Ue3,[^_]1ߋB @@4$t@B @@0$HTFD$$/D$D$D$T$ $D$ R $D$ Dž1ۅ ED$ D$D$$|t Et< uă9u < t< t< t$D$x$l$Y@⋅D$/$t $I@=l2tD$l2$$64$tDž   9D$$4@= 2tD$ 2$t$1ǍD=w$趝D$$$9bt=/t Ƅ=/D$$gD$$ $T$^D$ $$-D$& D$D$T$D$$T$ $D$̗" D$D$T$D$ $T$ 贞 $T$lNjTt&Uuu]}~8_0t4{@1t+D$h$7) ]Ћu}]Ív~e2u$@13EtͅtXXp F%tEE<[^_]Í&= ɈM\=NFtV҉U;U9M9u!y9Um9e9]uڍt&}et*}Et$}ft}Ft}gt&t}Gt&E\$ t$E D$E$3$;.U<+<-xDBut$\$<$._t34$tE܉t$$D$MDE<[^_]NF9ىMtE9Mu99t29ѐt-u}CFD$${‰D$F$OАUWVSLEgEԉ$EċEԀ8.*U< t< t< t< t< ft< t<+tn<-t&tf<0uj A< v.qUED$D$$]ȋE tEU EȃL[^_]Ã<0uBEEÍv'UWVS } uuJu4$v'u+tt2fuP1 [^_]uۉ4$wu tυt$K91 [^_]$B1 [^_]ÍvUXeE1l3uu }}]u l3]̉$D$$Eȉt$ |$\$$$-uEȉ$IEȋUe3u ]u}]XUl3t$vUWVSl3}u l3D$E`3u$Ad3u t&t ;su;{fu`3$u1tC [^_]$$፴&'UVS l3]u l3E`3uD$$d3t&d3 ыt9Zu;ru$`3$u [^]E$ [^]&UVSd3`3uD$$tt&9rt Ӌu`3$u[^]Ë$E$[^]t&'US`3th3h3[]ál3t6$tD$D$$u`3l3$9$1Wԉ'UWVSl3}u l37E`3uD$$d3u 4t&t*;su;{fu`3$]uA[^_]ËM t$tɉpxE C d3d3$$,[^_]ÐU(u1:/}׉]EEt$RuG<$D0v )0D$EE|$$E]u}]ËE|0/tw0/uv$Xu넍t&UWVS0eE1p3Džl $p7D$/t$ tD$$3D$$=3/tH=3/t9D$4$3=3. t$$3D$D$3$ED$t$$3thfƄ/Q$څt:/tJ ʀ:/Itu؉D$t$$[u$>څt:/tJ ʀ:/ItupDpD$$3D$D$:$3gtP13E36Džx$33t.3/ 3uvу9/t vu3D$D$3$$xƅr$!t'€:/tJ ʀ:/It u$t'€:/tJ ʀ:/It u$Ƅ2Ƅ4pN pD$:$5 D$D$$3P133Dž||d3l1tl$p$3Ǧxt&)؍tZD$:$1;/tu؍$$3x$nD0$Fhw llD$h$hD$`1$hD$h$PhD$`1$:DžǦMh+$\$4D$h$h0D$:$ Nj8/t,hD$3$hD$^1$bD$h$rhD$`1$\hD$3$Fh3x$33t03/3t!3t&р9/Rt u񹠢3$33t+3/3t3 р9/Rt u񹠢3=3|$3+3t+3/3t3 р9/Rt u3$33t+3/3t3 р9/Rt u3$33t+3/3t3 р9/Rt u3=3Ee3 Ĝ0[^_]D$t$$Dž|x"d33D$9D$$D$ D$^1$3d\$$33*D$D$3$u%=/D$$3ڀ.3$3(P1Ƹ33D$D$3$ju%=L$3=w\ 3@uD$$3D$D$3$u%=Ɔ3$3N3t03/ 3ut&у9/t vu3=3D$D$$3P13^3OD$D$3$-u%=$3=w\3@uD$$3D$D$3$u%=d3&D$D$$3P13pD$D$3$ƅDžxD$D$$)v\$t$$3Aƃ3t3D$D$3$u%=t>tGwD$:4$lD$t$$3|Iu3=3/h$@lD$^1$3A|,D$D$$3'D$D$$3\$$33D$D$3$du%= /]D$$3ڀ.3$3P1ø33D$D$3$u%=@ƃ3$33t+3/3t3 р9/Rt u3=3ED$D$$3P13.3D$D$3$u%=@d3#D$D$$33Dž|pD$$3D$=3/333D$*D$$4D$ 3D$!D$$`D$ c3ǦDžx\$$35,\$$3 /3D$:D$$D$ /bW3D$7D$$D$ Dž|\$$3xۦ3ަ33D$D$3$u%=tw$3;=53@uD$$3\D$D$3$nx%=bDžx$33t(3/ 3u у9/t u3Dž|dU3tɸ33Í&'U3tɸ3U3Í&'U3tɸ3%3Í&'U3t33ÐUS]C@U@t#t $ЅtSB~B1[]fU]]uu C@U@tt $Ѕt Kyt ]1u]ËASABFA1Ns]u]ÐU22]1Ðt&U22]1Ðt&USM ]Q~1;Y u9\ t 9u[1][]ÍUMAxtQ@@QAB]ÍvUSMY{tQCQAB1~1][]6USM] Q BR $Ѓ D$9t X[]Ã[]C vUuu]^{t $輈C1F1@C1X]u]Í&'UED$E $;ÍvUWVS$KtPEEE}싘1Ǡ19tC 9tD$4$=;u9uEE}u[^_]Ët 1[^_]ËF4$1P鍴&UWVS} $Et]G~Vt&\C@U@t5t $҅t"C@\tUD$$T$Ѕu9GE[^_]ËUtEE[^_]ËUB$Pt&'UWVS$tvEEEU1E19u X69utQ^ C9] @\t9tU D$$T$Ѕtω\$<$9yt$1[^_]ÃEE}u[^_]ËG<$1PUE ]vUSD$D$ D$1D$1$>xk33D$D$$iD$D$$kD$D$$jD$D$"$jxlD$D$6$jxPD$D$F$jx4D$ D$T$jxD$>D$b$ij[]Ív$3ܐt&U1$mD$ 1D$1D$cvÐ3UEE ]Hv&UE D$1D$ 1D$1D$s$F 1҅t 22ɉÉ'UE D$3D$$F 1҅t 22ɉÉ'1UE]ߪ U]]uu C@U@t%t $ЅtKAt8tv]1u]Ít&ASBFANs&A]1u]Í'UMAxtQ@@QAB]ÍvUWVSl3E3}9Ex]11Kǀ19uE~JU11ۍ41f119tFBAF0119}uɋM1u9ΉtB B9u9Ήt$C PD$D$$R\9uދ]]]]9t2CSMCPUS] 9u9ut9v6E܉EEE܋E;Eu&S 3B=I2.@Ut5t#CCBECE܉]f;uu];]t%vC PM܉L$D$М$R\;]uދE9E{E&9]tN3Ets t ~I2Ztԉt$ F@ D$$D$9]uE]ЉƉ]]ԉ];ut`V 6B@T@t@h<~t݉$C tKytASBEԉAEЉMԉCu;uuEu9ut]^ { \$D$<$~R;uuЃE9uuMMMu9uta3 ^ C@`t$ЋF F ;uuFB]FCF0su9uu]19]u T9]tM3ts t ~I2EtՉt$ F@ D$$D$9]u]3]t%E |$}$̨}|$3u܅(;utN3 ^ u&C=I2@Ut't3\$$1x6;uuU9U8]܉]]$t' 33$$  ~El[^_]ÍC PR\Ct$D$$ҋ3\$$0KC$P;uЍt&FBUBF0rmB$PC$Pt&3$D$j3$D$L<$E]CBFCSM]܋ABEA]]$ŧU<:}F@Et@= 2t:D$ 2$hu&%t$ D$D$$CM $lvϋFxtG= 2t:D$ 2$ u&%t$ D$D$$E0<$kՋE11$dD$$1119t 9uL$$u$-п}UD11E7E$m3$T{$b3@$D*{/$Чa3 U1 3tð33 U13u33E E}ClvUSE ${(@119У1~1t uC []Í& 3uuݡ1;1341;1%1;13뙃[] 0҉ߍt&Uuu]^{t $yC1F1@C1X]u]Í&'USMY{tQCQAB1~1][]p&Uuu}} ]VFЃ $&@119У1'C t xp]u}]Í&1tЅt̡3ueu1;1371;1(1;13s l0҉ܐt&UVSuF $&@119У1C t p[^]á1ttܡ3uuʡ1;1391;1*1;13놐t& z0҉-ڐU]]uu}} C t t$$ׅu4Ct t$$ׅu S1tu ]Uu}]ᐋ]u}]ÍvUS]StCtS tC tVStCt2StCt1[]ËB$P1[]ËB$PËB$Pt&뚋B$Pt&nt&'UVS $1D$D$ D$ 1D$1$ih[$D$D$$O(D$$3D$111D$1D$\$1D$1D$*4$7Yx [^]x [^]ÐUEPt@D$K 3$1 UE $1D$ED$Í&'US]D$C$CuC$22[]ËC$3D$e$1[]Ív'US]D$C$tC$E[]vE[]ߚ UVS u EED$D${4$W6 1҅u [^]SËED$E@${82t[{<2t ؃[]Ít&22tTC0C0C<Ր22tEC(C({82C4u22t0C,C,C8놡2$2P뛡2$2P몡2$2P뿐&UHED$$賯u#E\$E\$ E\$$ID$\3$1ÍUt&U(ED$E ED$$ 1҅tE$D$IɉÉ'U(ED$E ED$$9 1҅tE$D$-IɉÍ&U(ED$E ED$Ȱ$ 1҅tE$D$HɉÉ'U8ED$ ED$E ]u}D$ְ$ 1҅tKE1ۋME% ƉȋM0 M؋M؁˹ Ɖ4$a‹]Ћu}]U(ED$E D$$ 1҅t E 0 $ ɉÍU(ED$E D$$ 1҅t/E%  $譟ɉÍ&UE E EE]#&UWVSÃuUM@=g2D$g2$>C= 2tD$ 2$]tGE]9us+EU<ڋD$E${}ʉ9urա3D$|$1[^_]Ít&CU[^_]á3D$$v1ߋGU[^_]Í'U1EU E]t&U1EU E]t&U@1EU E]t&US4eE13D$̭$1҅x]$dt$\:‰ЋUe3u74[]D$D$$dyzED$3$i1 U(ED$ ED$E ]uEED$$ u1ۉ؋u]]á3D$$xًED$E$Tt$94$i릐t&UWVSLELUH} uEE8UU&[^_]cvVF4$PUD$D$$N)uED$D$$/)uUD$D$Ų$)hED$D$$(EUD$D$$("ED$D$N$(UD$D$!$(ED$D$)$a(UD$D$3$>(ED$D$<$(sUD$D$E$'PED$D$L$'-UD$D$U$' ED$D$`$'UD$D$i$l'ED$D$q$I'UD$D$y$&'~ED$D$$'[UD$@D$$&8ED$D$$&UD$D$d$&ED$D$$w&UD$@D$$T&ED$D$$1&UD$D$$&fED$D$IJ$%CUD$@D$ʲ$% ED$AD$Ӳ$%UD$BD$޲$%ED$CD$$_%UD$DD$$<%ED$ED$$%qUD$FD$ $$NED$GD$$$+UD$HD$!$$ED$ID$+$$UD$JD$8$j$ED$KD$A$G$UD$LD$M$$$|ED$MD$Y$$YUD$ND$c$#6E칸$@1Em$1zU{1$X3U졌3D$$D$!3u 譖32 11P82 1P@2 1PHD$1$`3o3`3D$`33ED$3$Z!D$1$ 31nU 3D$ 3D$$!t&U\$t$$M B$Pfut&'U(eE1D$E ]u}D$dz$61҅u ЋUe3ur]u}]Ðt&D$|$Ë$%$!xt$<$ 뛋D$3$Dgt&'U(ED$ E D$D$ҳ$x1҅t ُE$蘐$tɉÍ&'U8eE1D$ E u1]}D$D$ݳ$uUe3]u}]@ƋD$|$$xuuh$.T!=v;@D$$& t@D$\$$V@D$<$ @31$虸,ۖ US$ED$ED$ D$D$E $1҅u $[]f7ËED$E$͖u,t&vt0ED$3$1묍$蘃$[]‰á3$ѷ1냍'US$ED$ED$ D$D$E $ 1҅u $[]fwËED$E$蝔uu$$[]‰á3$71멍vUAt"D$ \D$D$$á3EUED$E ]u}D$$T1҅u]Ћu}]}|$ËE$"$1҅t 3$y뷐t&`r<뚐&U8ED$ ED$E ]u}D$$1҅u]Ћu}]ËE$輑ËE$译$|GD$t~XED$&|$$D$ED$ )$ՒuaU t$B D$3$ʍu't22PF4$Pzݐ&*t3$,1 F4$Pv'UVS@EEED$ED$ ED$D$,E $b1҅u @[^]ÍvƋE‰EEUD$ ED$E$D$V4$x2@[2^]á3$Z늍UVS EED$ ED$D$7E $1҅u [^]Ð+ƋED$E$4$Mx2 [2^]á3$dz멍vU(]uÍE$.$t3$至]u]ËED$E$BD$']u]É'UWVS1ۃ,EEED$ED$ ED$D$GE $tUD3D$ ۴<$D$諅<$D$Ue3u]u}]á3$轩U(]u}eE1 D$<$袈4$t(<$Ue3u#]u}]Í&3$3xU(ED$D$E $1҅u ɉÍE$Ax$tɉ‰á3$ƨfUWVS D$$蚈xa$pt9~51fG 9t"$tuދt1 [^_]ËG<$1P桌31$(ՍUS$EED$ D$D$$;t/t$E\$$BD$m$[]Í&+ա3$謧$[]ÍU(ED$ED$D$ D$$̄t3$_ËED$E$BD$ÐUSt#t ][]r臾][]r3E[]&U]u}jeE1<$4$xQnD$-D$D$ D$|$$Ue3u]u}]á3$R藄t&'U(ED$D$E $1҅u ɉÍE$x$qɉ‰á3$fUH{E$谆tGP$\$$E\$E\$E\$ E$\$á3$kÉ'U(]uEhÍE$}$ t!Et$$D$]u]á3$]u]Ít&US$EED$ ED$D$E $Q1҅u $[]ÍvËED$ED$E$E$ Ut!ET$$D$$[]‰á3$O$[]‰Ðt&UWVS,ED$D$E $u 1,[^_]ËE$RE$K5=\1VC=u2tD$u2$Tw$$mt`9ti|$E$I.I@=g2tD$g2$vo$juC$P9uD$$Sy2,[2^_]D$?3$cC$P13D$\$/1tD$'뮡3D$$ 1N3$U$dfUV1S0EED$ED$ D3D$D$E $eu 0[^]ƋED$E$d4$x E2$20[^]Ë]3\$$荋$賐됐UED$ D3]1ۉu}ED$L$$u؋u]}]Í}(ÍED$E$U$Lt3|$$<$릉<$1҃`r 뎍vDvUU ED$D$$`wÐUU ED$D$$ wÐUE ]u$)1x)<$j4$hx22]u]á3]uE]؉&UE ]u$1x)$d4$x22]u]á3]uE]hU(U]]u}E $$T„tuGtmt&t t]u}]fC]u]}H]\$t$E$at$\$U$`uF4$P덍'UVS D$D$ D$+2D$3$xJ $茇c1 ) D$D$4$_a ډ$ډ$2ډ$qxډ$*cډ$uNډ$-9ډ$3$ډ$=ډ$ډ$& ډ$ ډ$ډ$K"ډ$D'ډ$|-ډ$Wg4ډ$'R>ډ$i=Fډ$G(Mډ$BUډ$w]ډ$ dډ$(jډ$pډ$vډ$|ډ$Zډ$akډ$5Vډ$pAډ$`,ډ$\ډ$ډ$ ډ$Mډ$Iډ$jډ$7ډ$lډ$,oډ$PZډ$@E ډ$40ډ$ ډ$Hډ$!ډ$1)ډ$[4ډ$;ډ$Cډ$rLډ$dsUډ$v^]ډ$ Idډ$04kډ$Trډ$ zډ$Lډ$ډ$!ډ$6ډ$oډ$ډ$]wډ$bډ$cMډ$+8ډ$F#ډ$Eډ$yډ$/ډ$Jډ$ډ$Rډ$ډ$C{ډ$ff!ډ$nQ+ډ$<2ډ$'9ډ$z@ډ$<Gډ$9Oډ$8Wډ$O_ډ$fډ$lډ$#tډ$kj}ډ$YUډ$Q@ډ$%+ډ$xډ$gډ$eډ$tډ$?ډ$ ډ$Xډ$Vډ$nډ$"Yډ$SDډ$./ډ$hډ$bډ$_ډ$N&ډ$ -ډ$$:ډ$Aډ$UJډ$^rZډ$>]`ډ$;Hgډ$#3qډ$m~ډ$ ډ$ډ$sډ$$At [^]ÍvC$P [^]USD$D$ D$@-2D$-2$%xMtKD$.2$313D$3D$$tD$3D$$\[]ÍUVS$3:5$~C F$hCF$HCF $HCF$6CF$ C FtI$C$suL[^]C 22FpC22hC$22:stt11ۃ[^]C 22pC22GC$1Pč'UVS$܇tMZ\t9tPD$4$u,uыC$P\uu[[^]Ëu C$Pt 1[^]ËF4$1P'U(ED$D$E $п1҅u ɉÍE$a\t ɉ‰ËED$D$3$:y1뼍U(ED$D$E $`1҅u ɉÍE$Vt Lɉ‰ËED$D$3$x1뼐UEw]ÍUVS D$22@2d32@2$42@2D$ D$D$42$x$>y$)1Et#D$D$4$S$kEtD$D$4$RtH$ 52tD$D$>4$Rt [^]ËC$P [^]ËC$P뭍vC$P&dt&'UE E]'US]v؃[]Í=wW[]ÐU]U&US]St tGS t t'C҉u CP$R][]雧C P$RˋCP$R몍&'UXE܉D$ ED$ED$ED$ED$ ED$E ]u}EEEED$l2D$$Pu1]u}]ËE042@E442Ѓ$wUD$ 42T$$ЍtEЅG$~M1$>D(9ut5E@ C=g2tD$g2$Juʼn$ID(muFEEGEGEG EtEGE܅tE܉GG <$1t&UE U]u}D$T$$@72gpt؋u]}]fmu uUBZȋ} 3|$$v벍vU3D$x$v1ÐU3D$$v1ÐU(]E ]u}ED$\$$`52oEt ]u}]luuC[؉]ʋuҚtu u#C CE ]Eu}]u uCt[؉]TED$ 3$uE8t&U3D$$uu1ÐU3D$$Uu1ÐU8]É}׉uM܋@=@2tVD$@2$ HuBCpPttFtD$$Ѓt>3D$$t1C sEE܉7E]u}]ÍED$D$$Exd$ƋC= 2tFD$ 2$vGu29ut-9Et3D$#$Gt1끍vj3D$ $!t1Xv'USӃw$$@MX1[]Ãw wh Ճw ĉ$Q뺉$Q먉$P랉$P댉$@Or$&O`$FQP$Q@$Q01_%$N$|N f 1_   a$EP$P$Pk&KXMv'U8]u}EUFt+3D$$q1 22]u}]ËX p32\؃t32Ѓ$誠\$D$`32$1tEGUBBGG UB G$EU@EERUP+U}G(E+U}G,UZ 1EQT(tSL(tK+UN}D(ET(+U}D4U΃EE9B ~6&E^;X$~FD4D(UEE9B ыUBGBGB G t&|13D$$o1k&UɉuΉ}׉]u1ۉ؋u]}]É$pt$Et`EtċE|$$N|UNjtEtt$<$Ët6{F4$PmC$P땋B$vP뭋G<$Pf뽍&'US$]ED$E D$8$ܲ1҅t1E\$D$ C$D$h=Axƒ$[]Í'US]C t$ASt teSt tCSt t][]t&CP$R][]ǜ&CP$RfCP$Rt&뉍&'U]ӉuƋB=g2tD$g2$@ts]u]ËF@t\$$ t7@=g2tD$g2$x@tsuC$Pc돍&'U(ED$E ]]u}EG2D$I$u1ۉ؋u]}]ËUx;C$|31D$Q$l|,t($3t4$7tC <$7tC뉋xC$1PjUS$]EEG2D$D$_E $51҅u$[]Í&U6x;C$|3D$Q$l$1[]ËD,$D$$[]‰US$]EEG2D$D$fE $襯1҅u$[]Í&Ux;C$|3D$Q$xk$1[]ËD($D$Z$[]‰U8ED$E}}]uD$E E2D$ (72D$o$莦u1ۉ؋u]}]ËG$$1t݃$~׾$D,T$ $D$t'D9w$~O E2tT(yƃًuC$1Pv&'US$ED$ ED$D$E $81҅t%Eu+ uWEvDD$$ƒ$[]Ðt&]vJ\$$$[]‰fE$F$D$$[]‰Í=wHfUWVSE ux<$E0E1.D,T$ $D$ZUD 9E T 2;F$N 2t T(y22묺G2xU;F$}PN 2T(D,T$ $D$EE[^_]ËE P y3D$Q$thEE[^_]á3D$Q$MhUt+EE[^_]E2E2[^_]ËB$Pʉ'UWVSƋt_E]9_G 4trE]x8U;B$}0J 2tE؋D(E_끋C$P땡3D$Q$fu F4$Pu G<$PU܋B$PE~oG<$Pa'U8]E] u}E\$D$$62$_EtE]u}]H\ މu%UB xaE ]Eu}] މuFUBPt&MA xD$$Er[2E2ZމuUB tЃJ M/މuUBJM9u,:Cu :CuUBJM9u$:Cu:Cu :Ct4މu UB\$ 3$Edc}G}G$$*@G$~mE9}<$/tfC E$/tTCU\ MU9Q$~+UEMD,EL(M$*u%}wuu C$PF4$P&UXED$ED$ ED$E uu]}EED$$u1]u}]á22$HD$22$xEt͋MË} ED$\MD$EЉ$Q:UC$MC JEExM̋EM9~EȋE1Ʌx EM9~ESCECЉCCC {EȉKCFtǃX,}EĉpE t ǃX,ǃX+ЋME $z1vUE ]uD$E$Ru1ۉ؋u]]D$$NnƋt,tD$24$TËuF4$P뫋C$Pɍv'UVSu^ St tXHt$*:ǃHǃPǃLF҉u FP$Ru[^]hCP$R뚍v'UWVSlEU@ EPLS 9s9MHP Gw ]]W G:uJ NBDG ‹Z_ E$][$]_uF GTGt|~xLPuD29yNM 9}W]}H؋MH(D$L$$v:]PPW [EGtG~]PPMUWP P}tH ]<v;El[^_]øl[^_]ÍvuE)Ɖ9w$ |$MH$ 5UHL}uDWGGM*}tLOEv}&)E}t&W ‰G ]1OtG~U)ƍFPUy}uWGGUr}jGUTGLWD0MPPuG~)ÍCPm}GUTGGB$GB WOB@9r = MPLS 9s9fu}HM؃P uH0@WNjR P ]J}_UGB$GB W ooEB;G0O9Mv ;G4AGGGE9B~}ooGUB$GB W EG;BMGPLV 9s9}t M}H]P EHA W ϋA uAGU@ TG$4}:7WEC9EMW JG<E@$GMA GB=tE9GG]uPLS 9s 9Y}GM}H΃P ًEHA W ϋA ]?G]EHG9EE5 !W GG9EEwG9EE;GC‰G G9EE$UXËG $MX9G GW $17GWG B]WTB G@GTGuPLS 9s 9f}M}H΃P ًEHAqWEC9EuW J } HW OGO;B<E@$GMA G<DG CW)‹EE;P.UPLS 9s9x}t M}HuڃP EHB G ׃B ]G9EE0Ef1EEE$@G9EEs$]X_ Ef1EEċ$‰G +G9EE;"G9EE$]XËG $uX9.t&tЋMA ]C$9~"H9~D(@9uV$MGD(G W hMTGGW OB;HW uPLS 9s 9]}KM}H΃P ؋UH@YMTG.GOWA;PVuPLS 9s 9; }) M}H΃P ؋UH@G9EE;^%ME;A$ \(T,9s?O;M;t9ME;9ډOwكG W u;F$T(D,9C‰G m]E;C$Lt(D,E919)t&rG9Et&w# GG9uL9E$UXË$MX9t1w; $ SG)ЋU;BPLS 9s9 }t M}HuڃP EHB hEEE/W G‰G #EEEu;3r ;st&v;3t&tЃ1}E1}E멋t뚁fwUĉx =ES M %и,e];3r ;s1}E/XwU 0ES M %иFe];3x-1}E]CS E9ЉUB9Ev^1_E1;us1҃_19UE=MAE;A 91ۋE;p ,19봋UBE;B 91ۋM;q -19yU;rFER @E;p7MFQ 9 9Ec ];s LE~UBJ E99 F  9   9MAI E9l9 F  9   9,E;p UBJ E9ȉM9Ev^O 1_E1;usL 1҃_19UF$*} $*M F$*~ $e* GUW E (EBM}HGGGA$GA W C‰G Bw]3uPLS 9s 9O}=M}H΃P ڋEHG B B ]3]C$GC GA TuPLS 9s 9} M}H΃P ڋEHG BB ]@9rn=tguB PTLS 9s9 }t M}HuڃP EHG BB ]E];Bt s$uwC G~{EuPLD29F 9ىEt}Q]}MHH(L$D$$']PPuPL9s9}t M}HW]PHPWBuPLS 9s 9P}M}H΃P ؋UH@FEEE :]}HW ;BGGw9u[G  t$UH$3! UHLU\$UH$ J UHLMPEuGuEw9u*6Z Ef1EЉEԋw$P1}E̋u̅W u뾁wUԉu 띋EЍS M]%иve]M;3uaf1}E1;3r ;sAUE t$MH$\PUHL t$MH$ UHLCu t$UH$&UHLu t$UH$}UHLu t$UH$0UHL^;B]Ht$ ǃHudžPdžL]ENM\$H$!UHL"/EME\$UH$xUHLMP>u t$UH$"UHLl t$UH$UHLku{111n1J t$UH$sUHLu t$UH$&UHLb B]PL V 9s9G}t M}H]P EHA!WOɉM~+])ЍJ($L$D$x_]UEP$GMA W iwu~IuMPH(T$)ÍCD$ $"GPPGEUMJ$GB GWG]W \$H$5)UHL$!$! $/">_$t&k!$!$!y>_2eF$t&!jF$X!WF$!D~_ v2EXXvgEXvGXF$Z pF$ ]F$ J~_f9wut&uHt$džHEǀPǀL \$UH$taUHLx t$H$UHLXMH$3]ǃHt&UWVSLEUp@ E:iM1҉EE9]Ѕ ;uso&>]Ef1M؉E܋w7$1}EԋEԅtUr2UEu9uw1L[^_]Ë%u뛋 SMM؅%иte]K;;u_v1}E.;;r ;{>t&wU܉ 뎉ыRA MMv)ȃ9ƉEYM]EIM@| MM}EEIDE;uEUUM‰Eĉ+EPUD1҉E; u<&9 t&uEE9uQ; uڃ;Uu֋EUPMEUċEE8EE9uw;uYt9u;fuEp0UEEtEft MMЋMALMFEtn;uva;uȍvTE0pUEt8.ME;vt 9uw UFrUWVSӃ,E؋x 0)9~ t<;w$0&M;9vȉ0| uU؋),[^_]9 u9w9[wt&9v$UX9u9C;vu;&t9w9[wt&9v$MX9tk9Cvd;t^;P9vwB9v>]]EEf1EEE $M؉+,[^_]1}E܋E܅9w̍t&UVu؃랁}wMM u xEUSuqEMEиne]-U;uV1}EE;r ;C5붍&'UWVS|EU@ EPLS 9s9MHP Gw ]]W G:uJ NBDG ‹Z_ E$][$]_uF GTGt|~xLPuD29NM܍ 9w}]}H؋MH(D$L$$f]PPW EGtG~]PPMUWP P}tH ]<v0E|[^_]ø|[^_]ÍvuE)9w$t& |$MH$jUHL }u;WGGM1}tCVE}=9E}t&W ‰G UGtG~U)ƍFPEy}uWGGU}jGUTG\WD0MPPEcG~)ÍCPm}GUTGGB$GB WOB@9r = MPLS 9s9Iu}HM؃P uH0@WNjR P ]Z}_UGB$GB W ooEB;G@O9Mv ;GAGGGE9B~ }ooGUB$GB W EG;BMGPLV 9s9_}t M}H]P EHA W ϋA uPGU@ TG$}I6WEC9E,MW JzG<YE@$GMA GB=tE9GG]uPLS 9s 9}M}H΃P ًEHA W ϋA ]OG]EXW9UEEx .BW G*G9EE W G G9EE;GC‰G G9EE$UXËG $MX9G GW $GWG B]WTB G@GTGuPLS 9s 9}QM}H΃P ًEHA_WEC9EuW J 6}HOW GO;B<E@$GMA G<vDGG+C]E;C7uPLS 9s 9}M}H΃P ڋEHB G ׃B ]G9EE0Ef1EEa$G9EEx$]X_ Ef1EE9$0‰G /G9EE;&G9EE$]XËG $uX92tЋMA ]C$9~"H9~D(@9uV$MGD(G W oMTGGW OB;H uPLS 9s 9I}7M}H΃P ؋UH@PMTGGOWA;PuPLS 9s 9t }b M}H΃P ؋UH@G9EEBT+&ME;A$ ˋL(T,9&sH_;]:E)؍49E:9щ_uكG W M;A$ T(D,9C‰G [uE;F$:t(D,( 9t&tO9Mt&E#t&OO9uE9M$MX$UX9t1w; $UG+C;BPLS 9s9 }t M}HuڃP EHB KEEEW G‰G EMEut&1}E묋u!wUw UC ҉M и6e];3u!&1}E;3r ;s~;3r ;sv;31}E1}EtwU QES M) %и[e]MFQ 9 9E%MAY E9؉] 9Ev*FEEXu 1}_E1;us$6Xu 1Ҁ_1;UEE;p ދUBJ E9ȉMd9Ev*^]REXu 1}_E1;us%6#Xu _19UUUBE;B 91ۋM;q 19];s E t&]CE;C n9w1ۋE;p 19U;rFEy)t&E;prUBJ E99: F.  9   9 MAI E99 F  9   9$Hu F$* 6$  'F$ mGUW E +EM}HGGGA$GA W &C‰G nBw]3uPLS 9s 9}xM}H΃P ڋEHG B B ]]C$GC GA TuPLS 9s 9o}]M}H΃P ڋEHG BB ]M@9rn=tguB PTLS 9s9}t M}HuڃP EHG BB ]];Bt s$uwC G~{EuPLD29F 9ىE}]}MHH(L$D$$]PPuPL9s9}t M}HW]PHPWBuPLS 9s 9}M}H΃P ؋UH@ FE܋E5E (]}HW ;BtGGWw9u+G  t$UH$UHL\$UH$zUHLMP;uECGuEw9u0r Ef1ẺEЋw$1}EȋMȅW Pu뾁wUЉٸu 뜋U̍F҉M؉иueu[;uo1}EA;r ;^Q,t&[/Et&uv t$UH$%UHL;Bu t$UH$UHLGu t$UH$;zUHLr t$MH$taUHLu t$UH$UHLL]Ht$,ǃHudžPdžLENM"\$H$UHL, t$UH$UHL)\$UH$}UHLMPEM,Eu t$UH$MUHL1 t$UH$UHLu@ui t$UH$tUHL 111W1Ґt&+[ F]PL V 9s9}t M}H]P EHA_`OɉM~+])ЍJ($L$D$_]UEP$GMA W swu~IuMPH(T$)ÍCD$ $GPPGEUMJ$GB GWG]W \$H$,UHL_F$A"F$}F$~_e&$t&s$(`$eM>_ t&;F$t&AF$-F$~_M $t&K$$>_t&wut& \$UH$taUHL t$H$GUHLuMMH6$P]ǃHHt$,džHEǀPǀLt&U}}]u_ HC$C ǃTt$ǃHC{ǃPǃLG t)W؃(躹1҅t-]Ћu}]ËW؃(j1҅u׍t&GډDt;CtCfCC멍UWVSEEED$ED$ED$D$ \62D$ED$E $/Uu Ĝ1[^_]ËE荕]}쉅$D$\D$ UDžMDžt1x E9'1ɅxE䋍9EЉUBE܀,]U(tE̅t$vEEEEUĜ[^_]è t5E,\vU(XbE+'P$RhUWVSLEUpu@ E:VM1҉EE9.M̅;uslt&>]Ef1MԉE؋w6$@1}EЋEЅtUr2UEut&9uw1L[^_]Ëu뜋UԍC ҉Mиue][;;uof1}E?;;r ;{O*t&wU؉# 돉ыRA MMv)ȃ9ƉEGM]EIM@| MM}EEIDE;uEUUME‰E+EȍPDU1҉EvE 0; u9 uEEEE)9EuN;uYBtt&9ut&"9uEp0UEztEt MM̋MALMMFEt;uvt&;uĐt&E0pUEt;UEUPMEuUETE8?ME9t ;uuUFr'U}}]u_ HC$C ǃTt$ǃHC{ǃPǃLG t)W؃( 1҅t-]Ћu}]ËW؃( 1҅u׍t&Gډtt;CtCfCC멍UWVSӁ$pl9xDž|$D$\D$qlMUDžDž`ME䉝!ʉ؉lpBoE,$kt E1t&Et E;EPEDžDžEt$EEEp(=))ÉE9މh}b|xÁ2t+t\$$oEƋRE;hEE;E9tEЅt$ExEEptXB D$D$$"&D$$s$ItC \$<$OpƋ#B$Pv&3D$$EtftEЅt$$EEExC1Ĝ[^_]è E,l\$t$$赗VD$t$BƋ+|>fpjD$$ZxD$$nËt}p(A;hE;C$PC$Pt&G<$PfsF4$PfXM؍U}Uf8\u닅p\$$D$xx $2|E+B$PlD$t$$赕VD$t$@Ƌ&P$R@xDž|LU~܃8\uD$D$$ƅE Et$$D$~xG<$PjB$PNB1$Pu G<$PP$RvB$Pf$tB 0)B$Pxtgt toEЅ$13D$$ qC$P0G<$fPB$fP댋C$PfP$Rt&9t&'U8ED$ED$ED$EED$ ,62D$D$E $E1҅tEUMD$$EɉÍt&U8ED$ED$ED$EED$ <62D$D$E $E1҅tEUMD$$EJɉÍt&UWVSED$ED$EED$ 62D$D$E $DuDžttĜ[^_]ËuD$\D$$MUDžDž|tME䉝!ʉ؉UBE,u$tDžxEt 9xEDžDžEt$EEEU(;))ΉډD$D$E$h.tD$ $;ƋDž|Dž|ըլ<$))ΉډD$D$t\$ $;ƋtOx^U|;B  }|2t;>22뒋C$PyttEЅ$Džt;U( u E++E,C$PFB$PXxP$RE+D$D$E$tD$ $_9ƋtEЅ$t tAEЅfэvC&tWt^3D$$T/P$R뮋C$Pt&MP$RZf3D$$UWVSED$ED$ED$EEED$ 62D$E D$$?uDžppĬ[^_]ËE荕]$}D$\D$U؍MDžDžt1x E91ɅxE䋍9EЉMArE܀,]$ pv;EDžDžEt$`EEEU(.:UB $MA KDžtDž|tŤŨ++ʉƉxD$t$ $JtDM|9Q Et=2xt|;O11떋}2++ʉƉ<$D$t$腉p|$$4Ëxk;&)ډ)ډD$D$E$nptE̅$DžpU(nG<$P{G<$Pm uE+"E,k11}B$P0P$R5t tiE̅/$"vt΃tXth3D$$t t(E̅뢋P$R nP$Rǡ3D$$!CUWVSED$ED$ED$EEED$ L62D$E D$$?9u 1Ĝ[^_]ËE荕]$}D$\D$U؍MDžDžt1x E91ɅxE䋍9EЉUBE܀,]U(譻ËtE̅t$EEEEٍq t7E,m t&U(HfE+7P$R_UWVSӃ,0ű@ E)9~t Mԃ;w $t&E;vډ|u),[^_]9u4t&x  u;uu[]Ћ]9w 9t$X9Eu9uԋ[9M9t9u[]]9w9y$X9Ety9uԋ[vvn9ugM f9@9uJ9uvE]]EUEf1҉UE$UԐt&+,[^_]1}E؋E؅;uuѐUuڃ렁}wMUu zCUU܅uiEMЃxe]7E;u`1}EE;r ;C?뷐UD$D$ D$D$<2$x`ÍU(ED$E D$$<1҅t E$ɉÉ'U(ED$ ED$D$E $<u1ËED$E$u22Í'UVS@ED$ED$ED$ ED$E ]EEE\$D$$<u 1ۃ@[^]Ã}UM\$ !‹EMT$L$D$E$tEt$$D$ ED$jËuF4$P댍vU8ED$E uu]}Et$ D$ 2D$$a;u1ۉ؋u]}]ËED$$iet؉EXP$D$\$b\$4$ZdxE$Khut$ƽtp <$t%Cn_F4$PQ@C$1P2'U(ED$ED$ ED$E EED$$D:1҅t"EtED$ED$E$nɉ3E׍&'U(ED$ED$ ED$E EED$$91҅t"UtED$ED$E$>ɉE׍&'U(ED$E D$$`91҅t E$ɉÉ'U(ED$D$E $ 9u1ËE$u22Ít&'U8ED$ED$ ED$E ]u}ED$$8u1ۉ؋u]}]ËE}D$D$ D$E|$$t$Btp <$qtC뜋uF4$P놋uC$1PgvU8ED$ED$ ED$E ]u}EED$/$7u1ۉ؋u]}]1}2!EE$i\t̉ExE|$D$ ED$B $t]$>t5p <$mt@CE҉oEP$R^uҋF4$P1ËuC$1P뫐U8ED$ ED$E ]u}ED$C$6u1ۉ؋u]}]ËE$i[tމExE|$D$B $tC$Et5p <$ttt$蒫tp <$tC묋uF4$P떋uC$1P{&U8ED$ED$ ED$E ]u}ED$<$"(u1ۉ؋u]}]ËE}D$E|$$t$ªtp <$tC묋uF4$P떋uC$1P{&U8ED$ED$ ED$E ]u}ED$$R'u1ۉ؋u]}]ËE}D$E|$$t$tp <$!tC묋uF4$P떋uC$1P{&UHED$ED$ED$ ED$E ]u}EEED$$m&u1ۉ؋u]}]Ã}U܋M!ED$ EM܉T$L$D$E$t}$tp <$ tC됋uF4$PwfC$1PX UHED$ED$ED$ ED$E ]u}EEED$$]%u1ۉ؋u]}]Ã}U܋M!ED$ EM܉T$L$D$E$t}$tp <$tC됋uF4$PwfC$1PX UHED$ED$ED$ ED$E ]u}EEED$$M$u1ۉ؋u]}]Ã}U܋M!ED$ EM܉T$L$D$E$t}$Ѧtp <$tC됋uF4$PwfC$1PX UHED$ED$ED$ ED$E ]u}EED$$D#u1ۉ؋u]}]Ã}UM!‹EMT$ L$D$E$t}$ϥtp <$tC뗋uF4$P끋pC$1PbU8ED$ED$ ED$E ]u}ED$$b"u1ۉ؋u]}]ËE}D$E|$$tt$tp <$1tC묋uF4$P떋uC$1P{&U8ED$ ED$E ]u}ED$$!EP@2tD$@2$胰t?E]{$7teX <$ftlF]u}]ÍED$EUT$$ru#E}D$E|$$Zut&1뭋uC$P뗋uۋF4$1P|UD$[D$dD$ D$pD$2$3O3ÐUWVS E@xExGEG _~%1Ct$ C9w ߃EE9Et [^_]ÐUWVSu1 fEt<"tf3]Ã=u]Ã=)uv=*uԍt&Ӄ*$tɃ='u=%vu뱃=&uf룃/0t=(u됃=vzz=l>#fZZ=,G&@=+v**t&UEU M/t6~!t&u>u=.u]Ã*t8&]3Ã/u=1u]Ãk}<"}t*F;Fs $c*V9EtE[}T(n)YFhFdCۃY$$cT*}=f/Ee*tM}ft*F;Fs $c*V9EtEFhFd}*u}=u/҃u}>t&u}=u.v몃}/n}=d1t&늿E}<?}=5-]<f0&f f f f2 f !|fpf\fP F3<{t&t}t ]F4FF}=+}=t,}>#}=,t&{?E}=&S}/t2}=(t&5}=0E.Vj*J xtFXft?CЃ{F4FF$c&HËDXu}=)T}=*t&;}*t*}='!}=%xf $EdUUB@Pt%t@tD$$Ƀ1Ít&UEt&@P0tJHt]1zP]Ív]1ÍUSEP$Rpt؃[]zt3$Yt谚׍&'USMAP@tAE $D$E D$҅t؃[]u3D$$ͣ؋@ 1D$D$3$M븍t&'USÃd3tYd3$D$荮t[@=`2tD$`2$]vt؃[]Ët1C$1P$/+ d3u1á 3$/t膙륍&'UWVSÃ9ЉUB=`2tdD$`2$uuP@1E~19]tD Utt:[^_]ËEP~1;Y u.&M;\ t9fu뀋G<$P[^_]þ[^_]E떍UWVS˃Eh3UUB= I2v=@2D$@2$turUB=`2tD$`2$tqE1@E~Y{19]tJET EVt[^_]ÍUB;EtU$T$&tt[^_]áh3D$U$E;XtC=@2tuD$@2$sua1uC$P뚋Et& tdh3D$E$蒫tUU롋U$T$_s뎋UzI2zED$B$NB$P둍&蛖13D$$$ h3u3D$H$诟v'U$t$u] 8ڋ$t$]svUE D$D$E$Í&'UUt3B=I2t-P8t"RtP4t 1zÍt&1D$$Ív'UUt#B=I2t@4tH ɅÐt&1D$$\Ív'U$]u։}itT4$yitXD$D$$oNjt)t]u}]ËF4$P1C$vPɋuC1$P뼍vUWVSEUMHA0tATulEUB9t X0t@Tu^}1ۅtgtL$$p?uUT$4$U=2[^_]ÍUE됐t&};9]t}ut-E4$D$=2u22cuF@TtE@@T ED$E$1ɃgUB@0] E$D$щËE҉Eً҉EP$R22uED$E$=222tcu1ۋUE҉u EP$R2[2^_]á2$2Pu2$2P댡2$2PuEP$REP$Rot&U1ɉ(]] uu}ډ`=2t ]u}]ËFx422tZt!Ot] }u]u]፶C@ D$F@ D$D$D$ 3$o1$22P땍v'U@(]] uuډ=2t ]u]á22t5C@ D$F@ D$QD$D$ 3$ݗ1밡2$2P뺐&UWVSӃEP$Ru-u]܋C@ D$ F@ D$D$3$̓EuF@0tQMtGE܉4$D$2D$ҋuE2$2PuEP$REP$R&2$2PuEP$REP$Rt&US]U MC@Tt*@0t#@ptE 1Ep[]t&E 1E[]'UEU ME 5E]U]ˉu։}NjA=g2tQD$g2$gu=C=u2tD$u2$gtC$u諊1҅u v$H[É\$4$׉‹]Ћu}]á3D$8$71؍vU(]]}} uCP0t@Tu1ɉ=2tI]u}]ËB\tډ|$$=2uܡ22u$22P먍v2Sr42t2tBBTuNt5} u]}]]t&N u$22PS뺋G@ D$B D$AD$D$ 3$Ő1%&'U(]] uu}ډ=2t ]u}]ËFx4C@4E22t7tGىt]u}]Et!UBt$22P븋C@ D$F@ D$DD$D$ 3$1S'US]CxTy-Plt&$҅t@xTygPpt`؃[]Ív=I2t@4t(H t!][]鞅D$$~uߡ31D$F$裑؃[]Ë@ D$\D$3$t 1ۉ؃[]ËC$1P덶'UWVS˃Ex I2tEG=`2tD$`2$ct}GۉEu1~!s19]tT Ett[^_]Áz I2t19Uu߉T$E$P?΋B$Pt&etZtE[^_]bB$P3D$$2hSt6Tt&;u顬3D$$(3D$$ӏ 'U$t$u] Xڋ$t$]CvU(]]uu }CP0t@Tu"m=2tF]u}]ËBdt׉t$$=2uܡ22u$22P륋FS@4z4E22t)txSBTt3G$t,ڋ]u}]$22PƍGu͋F@ D$B D$2D$D$ 3$1}tUBtى녋S믐&U(]Éu@֋P0t@Tu M4=2tF]u]Ív tىt$$=2uܡ22u2$2P맡22t7F@ D$C@ D$D$ E D$3$61r2$2P븍&'UlEU EE b]&'UEU EE f]&'UEU EE e]&'UhEU E E f]n&'U`EU EE i]>&'UxEU E4E l]&'UtEU E0E p]&'U|EU E8E t]&'UEU E<E w]~&'UEU E@E z]N&'U(]] uuډ=2t ]u]á22t5C@ D$F@ D$~D$D$ 3$轈1밡2$2P뺐&U(]] uuډ=2t ]u]á22t5C@ D$F@ D$}D$D$ 3$-1밡2$2P뺐&U(]] uuډ`=2t ]u]á22t5C@ D$F@ D$7D$D$ 3$蝇1밡2$2P뺐&U(]] uuډ=2t ]u]á22t5C@ D$F@ D$D$D$ 3$ 1밡2$2P뺐&U (]] uuډ@=2t ]u]á22t5C@ D$F@ D$~D$D$ 3$}1밡2$2P뺐&U0(]] uuډ=2t ]u]á22t5C@ D$F@ D$D$D$ 3$1밡2$2P뺐&U4(]] uuډ =2t ]u]á22t5C@ D$F@ D$D$D$ 3$]1밡2$2P뺐&U8(]] uuډ=2t ]u]á22t5C@ D$F@ D$D$D$ 3$̈́1밡2$2P뺐&U(]] uuډ=2t ]u]á22t5C@ D$F@ D$D$D$ 3$=1밡2$2P뺐&U<(]] uuډp=2t ]u]á22t5C@ D$F@ D$3D$D$ 3$譃1밡2$2P뺐&UWVSu] E EǍEE1ۍEƒHuU$tLۉt|uWttUBP@D$t$E$҅tUt [^_]ËF4$P[^_]1҃GD 9Q{tr1ۃ[^_]<{u3D$$닐@ 1D$D$3$rhm$K31D$$蔄4 UWVS,UE D$$eE]EEǍEE1ۍEƒHuU$Jۉu|UBP@D$t$E$҅tiUu"B$P,[^_]y1ۃ,[^_]1ҐGD 9h$+JUF4$P댋UuB1ۉ$P롋@ 1D$D$3$谀C31D$$by3D$$͂&U(E]] }}u\$$Lv$芨t ?$)IÅC=`2tD$`2$5U9FP@D$\$4$҅tyuF4$Pt&]u}]Ðwtx1v31D$ $詁Ǎ&EED$<$0&C$Py@ 1D$D$3$~K31D$$8S^w"3D$$ 31\$$$G\$D$$At&'U(uu]U }t :$JGÅC=`2tD$`2$VSFP@tj4$D$\$҅tst]u}]ÍvC$P㐍t&EED$$ovtJ1븋@ 1D$D$3$\}uvu3D$$g3D$$X$>Ft\$D$$?nt&USUE t3t/$D$蟞Hut []ËE1[]'uuߡ3D$$~ȍ&UUt2B@8t tUD$3$~ɸtuD$3$s~ِUWVSE} $EEG<$PpD$D$E $6Ƌt>t}tY}t&tu}tx}t&u}E닋C$PfsEE[^_]Ëuu[uG<$PE[^_]E؁}u3D$$B}EEl3D$$}EE{v+st3$ u4su΃}K3D$,$|E*-sš3D$$|E3D$$u|E'UE D$D$E$Í&'USU] B@Tt@4tHt []ᐍt&\$D$$|[]ÍUE D$D$E$PÍ&'USU] B@Tt@4tHt []ᐍt&\$D$$[]ÍUuu]tR$聆tt$$迺t^t؋u]]fB$P؋u]]&qt1ۋu؋]]D$31ۉ$z뭋u΋C$1P땍vUHEuu}} ]UBX4tSCtLEȈUt,uNED$ t$|$$S]u}]Ät΍3D$T$zˋU$Ѕx}tǀ}t딸pu3D$$y뀉'UXE uu}}]EċEEFX4tSStLEEȉ}Et/ukE}}uuEEĉE K]]፶tˋX8ېt&tCuMD$|3$ y؋u]}]É4$ЅxT}tEĀ}xqEĉ@t)E|$4$D$SËuG<$P딻nvuD$3$txb U}}uu ]tpGX4tCKtmuD$3$v΍vUXuuE }}]EFX4tIStBEEȉ}Et%u^Eĉ}}uuE K]]ftՋX8ېt&tCuCD$31ۉ$Pv؋u]}]É4$ЅxK}t&u<}t녋Eĉt'D$4$SËuG<$PE1lfuD$31ۉ$urfUuu}} ]t?FX4tcK t\x} }uK u]]t4$Ѕx#kuD$3$Iu]1u}]D$3$%uڍvU]]uu }]CP4t*@TuJtu }]u]]J$u=I2ftrz tk4$?CP0@TBdt$$=2tJtz2u(22tqD$31$5t]u}]á22u$22P{F4$Pfv$22P{1D$$sZiuD$31$sFt&'Uuu ]]t,u(CP4tG@Tu3Jt:u u]]]Ti1҅A]Ћu]ËJ uĐt&=I2ҍvB t ~I2F@4@ CP0tC@Tt=B\t6t$$=2n22u$22P1ɉm=2622u$22PD$*3$r]1ҋu]D$$轘D$4$裘&D$3$q1'UVS]u SB4tHtu ][^]I2ta@ tZ4$l<tw¹XËtQ2t [^]á22u2$2P31D$$p[^]ËF4$P1D$$苗_뷐fuء3D$$pj'U]] uut&u"VB4t7Ht0] ]uu]zf1҅]Ћu]Ít&I2t`@ tYt {I2C@4t>@ t71ɉډ=2u22u$22PvD$*3$o]1ҋu]D$4$MlD$$3tD$3$To1 'UUt2B@4t tUD$3$oɸ,euD$3$nِUVS]C=b2D$b2$AC= 2tRD$ 2$Au>C@0t4@Pt-$Ѕt@=b2tD$b2$SAtE$D$ Ã[^]Ã؃[^]Ít&C$É[^]ËF1ۋ@ D$D$3$kuF4$P뚍vcu3D$$mt'UUt0B@0t H$tUD$G3$gm1cuD$3$Em܍vUUt0B@0t H,tUD$b3$m1.cuD$3$l܍vUUt0B@0t H tUD$3$l1buD$3$l܍vUUt0B@0t HtUD$3$Gl1nbuD$3$%l܍vU(uu}} ]{UttFXPt;E&؋u]}]ÐC=@2D$@2$];C@0@L$Ѕt@=g2tD$g2$;uC=u2uD$u2$:]C@ D$D$3$ne1($кD$ CD$C $?3D$$sg룍ED$ED$$;u }u31D$$5g[]3D$$gyC$1Pi'U(]]u}C=g2t|D$g2$9,C= 2tD$ 2$9tK{sED$ D$4$It>;E&؋u]}]ÐC=@2D$@2$-9C@0@H$Ѕt@=g2tD$g2$8uC=u2uD$u2$8]C@ D$TD$3$>c1(C$0D$ CD$C $vK3D$4$:e뚍ED$ED$$u }u31D$|$d"[3D$$dpC$1Pt&[t&'UEt PɉZ1҅u3D$$yd1ؐt&UUt2B@4t tUD$3$8dɸ\ZuD$3$dِUUt2B@8t tUD$3$cɸYuD$3$cِUSUtGZC4tt U[]C8tu顬3D$$fc[]Yu졜3D$$=cՍt&'U8]]u};C=`2t4=l2tD$l2$5t$igÉ؋u]}]Ã$E$'<$v)EECf;},W 9E\$$i*ߋUEt UU܋B$PpuhXt3$GoJXUt tkU܋t1B1ۉ$PXt&3D$$aKnuF4$P냋EP$R뇡3$nu 3$naW ;}"U܋t0]PWf ED$E$)‹B$P뿍&'U]]uC=l2tO=`2tH$tI$Ët ؋u]]ËF4$P؋u]]Ít&؋]u]á31ۉ$mtE D$3$J`sVuD$3$)`낍&U]g&Uuu]] }VB8t!Ht] u]u}]፶B4tYC=g2D$g2$2ulC=u2D$u2$y2F@4@ D$3$K_tUf]1u}]É$&NjFX4tMC tFxE uK (t4$Ѕxމ$t&ktXFX4uD$3$^vD$3$^\D$3$^BTt&0딐&UE D$E$8t&tɉËB$PɉT1vUE ]utR$tMD$E$Ƌt]u]Í&C$P]u]St1]u]D$31$}]먍t&'UVSE tU$ teD$E$4ƋtYtEut떐&UL$]Ӊu}$]\$$tUD$D$4$߯Njt%t]u}]ËF4$PC$Pt&̋t1ȋF14$Pf 3$\t*F22땍U8}NjEUU ]uMEUI2t22؋u]}]á33<$D$;ZE$D$ND$D$4$谮EnE}2/}2"UB=`2tD$`2$!E$ZD$E$D$U$ƋC;GPL3P P ;8,3T}\$4$UáL3h UB$PUt.D$(31ۉ$M^t1LB$PNjF4$vP0Ut5MU]u}]F4$PC$PgB$P 3$MZzC$31$t$Uf=I2M؉d$1ZfUE D$2D$E$0Í&'UE D$2D$E$`Í&'Uuu}} ]^CUtCtj|$$l-t'@@Ut=t3F$t$D$щ"} F]u}E]Vt&]Ћu}]É$u1҅y፴&'Uu։}ω]f?tDD$J*$4Xts@= 2tDD$ 2$Tu0tt&]u}]ÍvC$P名t&C|$D$4$ "D>uˋ]u}]jAv'UWVS<UE] eU1ҋp x@($z ~ s .DžnothDžing$茨$蜴t$1|$T$\$ D$PD$3$GUe3<[^_]É|$4$B!D$ 4$qVع $R Ǎ@$5tdp ~1ɐt&T tT9uË\$D$$ƋC$P1v붋C$Pt&W&K?^Uuu]F t$"OÃu]u]$2O܋F$Nt1Ґ&UWVS,EP UXD$J*@$T@= 2tD$ 2$FE1E%tXD$J*$T@= 2D$ 2$D1E%EE$ W@= 2tD$ 2$gCUD$ E$T$D$Ettu G<$PE,[^_]Í1E%vtJE됋EWUEU$D$T$!E]F4$PbC$PE:G<$PC$fPF4$fPW 3$KSu.E 3$.St<E%Xt<E%&UU MB 9A t]ËBE AE]6eUS]CP@CCCPCt$C҉tJS t tJSt t3C 3[]fCP$RfCP$Rt&뤋C P$Rf릍&'U]á3}׉u=3$D$O|$$EtuD$D$4$KNjtqt[tP2|22u2$2P]Ћu}]Ët(ߋF4$P뚋C$PuߋF4$P뮉<$ Ëttb|Sf녋G<$P 3$Pt:Z$0W3V29t&t顬3D$$IC Uuu]}D$<4$OtnL3P P ;8,3DE$D$E D$輞ǡL3h u C$P]u}]$81Уu먡 31$Ot9F@$TD$D$ 3$?뜉'U(EU ]]u}EU$ E8_tD}GpEU]u]E }B E]~x_u}<$ Ex_ux_uuK p聪t&C=x2D$x2$wD$$3$UAfvUBp6\$ UT$}$|$ÅED$UB $#x؋u]}]ËED$ }G@D$D$ 3$O>}|$E$D$3u4$D$\$8Ƌt*Tt1dF1ۉ4$PTC$Pˋu  t { I2tJD$x3$?EP X rB1ۉ$PEPXD$3$?D$L3$s?&'U(}}]uD$)G $ ËGt#P 2D$ 2$uo%tKC= 2tD$ 2$t-$|$ t$$XD$X]u}]É|$t$$E7ݐt&G$u뇐UVSE D$E$?ukMyI2E xI2URE҉t[E ҉u E P$R[^]ÐEE MyI2t(E xI2tE҉uEP$R뗋U NjE҉E ҉ut[^]ËE҉t,E ҉tMFE P$REP$RƉD$ $\ƋE҉tZE ҉t;53st&EP$R2E P$Rv봋EP$Rf떍&'U3tB $3P43uÍt&US]CP@CCCPC҉C ҉twStSt~St t^St t ][]3CP$R][]3C P$RxCP$RvVCP$R딋CP$RpCP$RIv'U(]]u}D$)C $stRF= 2tD$ 2$t4tG= 2t:D$ 2$ u&]u}]É]u]}]\<$4$EDD$$3EtR$dE<$Y\$D$U$R].4$8MS$L$D$.u[1TvUExJ2u@D$$le81ÐUExJ2u@ D$$l581ÐUExJ2u@D$$l81ÐUWVS u} 4$_3C 3CJ2]Cst{ UtEEsC~t $\F1C1@F01pE [^_]D$$l97E$J2AEtÉET U]]uu}} K t؋u]}]ËCttD$4$蘨| tАuu} C}]E]1 U8EE$D$Iu1ÍED$ED$ED$D$ D$D$E $ItE$]tPU2tt!ET$D$E$E1ҋEuD$3$a71D$3$H71Ít&U}}uu ] I2F=x2tD$x2$ $I2@@p px~t $F1C1@F01p؋]u}]ÍvD$$l41D$$l41t1뱋F4$P1뤍t&K01덍'U(ED$ED$ E E2D$ I2D$$y1҅t=E=2t:Px2tD$x2$t&ED$E$YɉÍv1Eݡ3D$$p51ՍUhT$]Ӊ}ωuE@ $+EtEE]u}]ËUB$E~EEUD$B$>\$E@ $]UB$EEEUD$B$\$Eċ@ $}UċB$WEEEUĉD$B$\$EЋ@ $.UЋB$EHEEȋUЉD$B$Q\$E܋@ $UU܋B$EEEԋU܉D$B$\$E@ $UB$jEEEUD$B$\$E@ $AUB$E~319ut'Ut$B$ftىEEE9EuEU9UEE9EEU9U`EE9EEU9UqU됋U뉋U܉낋UЉxUĉnUd'UWVS<3UЅ3G@<$D$/=ÅۉE$D$D$D$4$袑Njt(t <[^_]ËF4$P<[^_]ËC$Pf\$G $~Yi'%22<[^_]EآEܩEEEE$ã3E؉$ٙ3 E܉$輙C3StpE$衙C3CtUE$膙C 3C t:E$kC3CtE$PC3B01uF14$P 3$]=t&t&GM@@UG|$4$D$҉ËF4$P&U]]uu }}{I2t"~I2tM22]u}]É=2u22u2$2P몋 2ډ=2u22u2$2Pw'U8E ]u}$Ɵ8_t5M }L$G $tX]u}]Àx_uŸK މ  މuUBr뫋UMBU tJ@@UtzMAL$4$D$҉EuR6$u)}\$ G@D$D$ 3$y+UBX 3$:u!1苖uiUB r $}M $|$L$tD$D$$ƋG<$P31D$H$'-IF4$Pt&UVS53tY3D$E$tXD$D$$茌ƋttH[^]fC$P$E1g3uѡ31D$$u,븡3$9t"렍t&'UVS3u 334$D$D$D$$趋ƋtOtFxTyPpt [^]Ë@ D$|D$3$P)t1[^]ËC$P릋F4$1Pt&$B3<1뾡 3$t8t!34$D$:tFt.u[^]$ߓ31XB$Pfš31D$F$*fUVS3u34$D$D$D$$EƋtXF=g2tD$g2$V4$&Ët)[^]ÍvC$P띐t&F4$P&$’3-t&[^]Ít& 3$6t: 334$D$ 3$6tHft3D$$P)F4$P֡3D$$&)$3V&'UVS3ta3D$E$t\D$D$$mƋt[^]Í&C$P[^]$B3u1[^]Í&'Ux3uu }}]x3<$D$t$$t_D$D$$詇Njt^tEt:<$e(Ët؋u]}]ËG<$Pt+ԋF4$Pv뭋C$Pu܋C$P렡 3$k4tD$t$<$辨o$x3v'UWVS]}3A3<$D$D\$ ED$E $WD$裙ÅtbD$\$4$INjtltTtA1҃t[^_]ÍG<$P1[^_]Ë|[^_]ËC$PfF4$Pu݋ |38|3<$D$ED$E $BD$跘F4$Pf;$9_3Q 3$2<33<$D$EUE P\$$RD$t 3$(2{3ty3<$D$UE $5D$軗$x|3j$FZ3'L$)<3n.v'U]]uu}} 334$D$ƅ\$|$$mÅtYD$\$4$蒃NjtWt?t41҃t]Ћu}]ËG<$P1tiҋC$Pf봋F4$Puݡ3tg34$D$>'&|$$ /F4$P]$Fʋ3f$)謋3uL&'U3]]u}3$D$E$BD$E D$lÅtXD$\$4$Njt%t]u}]ËC$PF4$P&ɋt1ŋF14$P$]越381뛡 3$.t?3t93$D$tUE $5D$脔$A3u1'U3]u}ty3D$E$4t~E $jD$twD$D$$NjtHt]u}]ËF4$P$蓉3n1ËC$Pv몋uC1$P띍U]]uu}} 334$D$Bƅ\$|$$ÅtYD$\$4$NjtWt?t41҃t]Ћu}]ËG<$P1tiҋC$Pf봋F4$Pu݋3tf34$D$m&|$$/F4$P]$F3f$)܇3uL&'U 3]u}ty3D$E$t}E $D$JtvD$D$$P~NjtGt]u}]ËF4$P$"3nt&1ċC$Pv뫋uC1$P랍U]3u}t.3D$E$u+؋u]}]$荆3uD$D$$Z}NjtMtG=g2tD$g2$ot=<$CxKvG<$PhC$P&롡3D$$뵡3D$n$랍t&'UVS3u34$D$D$D$$e|Ƌt[F=g2tD$g2$vtB4$JtZt [^]ËF4$P[^]ËC$Pf3D$$u뺋u$辄3 [^]f 3$(t:334$D$t8t3D$$qB$Pvӡ 3$q(i3t]34$D$*u 3$7(/u[^]$36$0袃3ut&U(3uu]}tT34$D$tVD$D$$6zƋu C$P]u}]$3u1ء 3$K'tFXD$)@ $yۉC= 2tD$ 2$tn$蹊ÅtG= 2t/D$ 2$ut$\$$1:<$rt$ \$$D$ %땍UVS3utN34$D$;tPD$D$$xƋu C$P[^]$i3u1ޡ 3$%tOu[^]UVS3ta3D$E$t\D$D$$=xƋt[^]Í&C$P[^]$3u1[^]Í&'UVS3t`3D$E$t[D$D$$wƋt[^]ÍC$P[^]$r3u1[^]Í&'UVS 3t`3D$E$Zt[D$D$$vƋt[^]ÍC$P[^]$3u1[^]Í&'UVS3t`3D$E$t[D$D$$\vƋt[^]ÍC$P[^]$23u1[^]Í&'UVS53t`3D$E$t[D$D$$uƋt[^]ÍC$P[^]$~3u1[^]Í&'UVS3ta3D$E${t\D$D$$uƋt[^]Í&C$P[^]$ }3u1[^]Í&'UVS3ta3D$E$t\D$D$$}tƋt[^]Í&C$P[^]$R}3u1[^]Í&'UVS3ta3D$E$;t\D$D$$sƋt[^]Í&C$P[^]$|3u1[^]Í&'UWVS,}GE@UBWWGBGt<$ED$ED$E$ 3Y53t$G $/uD$D$4$rED$ED$E$uu]j$22Pʉ'UG]]uu D$$؉!=2t ]u]á22t%E ډE]Ru]ڨ$22Pʉ'U^]]uu D$$؉葨=2t ]u]á22t%E ډE]fu]J$22Pʉ'Uo]]uu D$$؉=2t ]u]á22t%E ډE]wu]麧$22Pʉ'U]]uu D$$؉q=2t ]u]á22t%E ډE]u]*$22Pʉ'U]]uu D$$p ؉=2t ]u]á22t%E ډEp ]u]隦$22Pʉ'U(Euu]}EE 2ED$E$Qt$E$D$RD$D$$TUNjt't]u}]ËF4$PfC$P&D$¹$pYE蠥=2u22tkD$ $pYUEg=2n22UEE ]EpYu}]$22P넋t1 C1$P 3$tEu]u}E EE]$22PY&'U]]uu D$$؉a=2t ]u]á22tZD$$"=2u22t6E ډE])u]$22P$22P빍vU]]uu D$$؉董=2t ]u]á22tZD$^$R=2u22t6E ډE]fu]$22P$22P빍vU]]uu D$$@؉=2t ]u]á22tZD$o$@肢=2u22t6E ډE@]wu]E$22P$22P빍vU]]uu D$$؉=2t ]u]á22tZD$$財=2u22t6E ډE]u]u$22P$22P빍vU]]uu D$$p؉!=2t ]u]á22tZD$$p=2u22t6E ډEp]u]饠$22P$22P빍vU]]uu D$$؉Q=2t ]u]á22tZD$6$=2u22t6E ډE]>u]՟$22P$22P빍vU]]uu D$$؉聟=2t ]u]á22tZD$G$B=2u22t6E ډE]Ru]$22P$22P빍vU]]uu D$$؉豞=2t ]u]á22tZD$$r=2u22t6E ډE]u]5$22P$22P빍vU]]uu D$$0؉=2t ]u]á22tZD$$0袝=2u22t6E ډE0]u]e$22P$22P빍vU]]uu D$$`؉=2t ]u]á22tZD$$`Ҝ=2u22t6E ډE`]u]镜$22P$22P빐UE EEEE$X]t&UE eEEe$X]t&UEE EX]&UEE E$EEX]t&UE]P፴&'UUBuzB ]]Ð&UE$D$]fU3D$L$1ÐU3D$x$1ÐU3D$$1ÐUS]EE E$Ewpٞr6te[[][[]댐t&z=![[]&US]C=N2tD$N2$蜼tC[]Ít&'Uuu ]]F=N2tD$N2$Tt%FF CFCFC ؋u]]4$#dCC ؐUS]C=N2tD$N2$t C[]É][]cfUS4H3H3t[E@\$@$޿EH3$].\}E fEm]mEE)ÉH3$d4[]$3t3D$$71H3lj'UVSӁpeE1B= 2tD$ 2$FCCt&ӋDP uݕDžݝDžDžDžDžDžDž JC7j4ыP u-&ЋDP uڋDžfC=@2tD$@2$耹 C=D$ t$D$C $91҅uV! t€p҃)ى63D$$1҉ЋUe3p[^]Ë u}݅YۅݝCC<+<-DžDž*.ttDž1ɋ);}D$$݅X݅X+-ɍv);XT3D$$s1D$D$$0zz3D$$31?DžufCC<+<-ЋDP :Dž~DžH3H35D$$輻H3$ݝVٽ f٭۝٭)ÉH3E҉E ҉224[]ËU B=N2tD$N2$tU E@]@]B]B]҉E ҉tvCE1EuzEE!G28uG24[]ËE P$R+EP$RE P$RyEP$RZ3D$l$1U@eE1uu}ω]$Q]ȋtC$P3D$0$C$P1EP$R)vUE@]@]$t@N2uEXEXUE]E]$Bt@N2EXEXm'UVSpH3H3UM ƋAD$A D$AD$AMD$ AD$A D$AD$ A$D$E؋H3EE܃EEEEEE$H}Eִ fEm]m֋E)ÉH3>!tzE]E]$2tW@N2EXEXe[^]$3.3D$w$1H3"뻡3D$$k1뢍&US4H3H3EH3@@E @@Eˉ$]]G$}E fEm]mEE])EH3]!tV@N2EXEX4[]$3W3D$$1H3US4H3H3EH3@E `E@E `E$]]F$}E fEm]mEE])EH3];tV@N2EXEX4[]$38a3D$$1H3,뼍v'US4H3H3EH3@E @E@E @E$]]E$}E fEm]mEE])EH3]KtV@N2EXEX4[]$3Ha3D$$1H3<뼍v'U(uu }}]Pg2D$g2$ZPu2D$u2$1Pb2tD$b2$ $K$];@N2@@EXE$薗$@N2@@S$X1҃]Ћu}]Ív$v]Ett$t#@N2@@EX뎋@=N2tD$N2$n1҃]zHrt&UExN2t>@]@]$t'@N2EXEXÍ&t&UE@]@]$t#@N2uEXuEXfUVS}2H3H3b)E @@-'}E fEmUmUR$:]]EUD$ED$ED$EĉD$ MAD$A D$AD$ A$D$jEEȋEE̋EEЋEEԍEȋH3$A}E fEm]mEE)H3wٞwEڞ؋""EݝxEݝp$@N2݅xX݅pXe[^]Ð؋MBd=AA8Ʌt9J >"!D$P3$19&$3D$3$G1H3D$3$e1[^]f]]؋E؉EȋE܉E̋EEЋEE]E]]EUED$ED$ED$ED$ ED$ED$ED$ E$D$2}غt҅~59|1i]]EU؉D$ED$ED$E$D$ D$D$D$ D$D$3$1!E]E]$!t~@N2EXEXe[^]$33D$$1H3f3D$$+1҅딡3D$$11xUS3]tED$$t&3B B2B<2B@[]$l,1҅3u UE ]uu$6,1tF<҉t^<]u]ËFx9M|~ ])Ѓ딍vC$豙b9EY&΍&'USÃt@t2$贒UT$$D$蝜uE%=@t؃t[]$vD$D$RD$ 3$<ÉD$3$6u1밋uC$1P똍UWVSÃE U}EC ҉C҉C<҉s <$c$CECCD$b<$?C CD$U<$C4C8C02KC<2tdEC[^_]oC P$RC҉>CP$RC<҉1fCD$g2${u*C=u2tD$u2$]t'$ $%|…[^]É$D$D$D$$Ƌ}F=g2t@D$g2$͇u,F=u2tD$u2$诇4$/4$u{Ëڃ?F4$P/C$Pu3D$$O 3T$D$$±3D$$uF4$Pt&Uuu}1]t'F=Q2tD$Q2$讆tE ~F]u}]fD$4$@@=g2tD$g21$Zt $.zNjtFE $F~tID$D$4$\u*hC$PZC$Pfiύ&[5K1농&U(]] uu}|@tKtoF1$\$F,$SF,\$ |$F,D$F$蒏]u}]ËF1ۉ$ӋF,$F,볍vF $觋뇉'UWVSUEu ]҉EUEEt>B=Q2tD$Q2$ɄEP0‹@4ER8U$f},fME  tOC;CCt5Età uMC;CCu1EE$詏EtZEUB4EB89}E[^_]ËU]u U[^_]$E E뚃MtC;CC t\$$I뇄^MU$讇Ed薅EME}$j$[z&UE]u}XN#UB$$Ɖg!EH8u 4$|$@]u}]Í&PB;BstB tt‹UB $D$뮋UB8뜡3D$k$1돡3$fUB$Ċ1m$E뉐t&UHE]u}EpED$E D$ D$D$$u1]u}]σUNjB$詈$E؉UE#E܃t}EU؋M܅UЉMtAPu2tD$u2$E$EЉU(bkUËB$a$t"3$MA$x1 MƋA$薂UЋMԉT$L$$Њ4$*uUD$ T$UËE؉D$B$衅$\22f3D$k$1hE$sEЉM'UWVS,EE@ED$D$E $E|$$ E跁EE ËEUT$ BD$+E܉D$EE܉$$u;}EE5D$ǍE$y1,[^_]á3D$$豫,1[^_]ËE13D$k$聫,1[^_]ËUB$u29}tU܍E$T$E,[^_]ËUB$ӋUB$E܅tE8 t3$iE҉'EP$R1t&U]]uCt5E ƋC$$輄4$fu]]]RD$k3$耪]1u]Ít&U}}]uGt` G$ƃ4$u22]u}]á3$fG$Dž1ס3D$k$1뾍&'UE@t$~EtD$k3$蚩1ÍUEPtD$k3$f1fUWVSD$ $)ډT$Pt\ڍX)ЉD$$kD$$Ƌ҉uP$Rv\$D$$褀~9s/9DžG$軂1P$R҉uP$RtcDžѥtMD$$xB$PDž#$D$PD$T$${D$$p~G1҉D$$su C$PD$$Ë҉uP$Rg3$}G${E3D$$+vUS$]ECtXED$D$E $1҅tUt|Mƒ$[]$.A$[]‰Í&3D$k$k$1[]1E먍U(]]uu } C=Q2tD$Q2$rC ‰EuЋ]u}]Åt^B= 2tD$ 2$q1UBJ3ED$$聞UttB=@2tD$@2$\quUaUBJ u33ED$$U!| :fD$ $}ËE҉ډ]J| A:D$ $GƋE҉u UEP$RÅD$\$<$E( UZB= 2D$ 2$oUB=@2D$@2$oE҉%3ED$$wUw3D$k$Z1fEP$RD$E$pU9D$$t1 U EP$RC$PG<$PD$E$ U@$boEP$R1uG<$P1EP$Rft&'U8uƉ]}UM@ F$^()tj|$D$ $zzuzF MF EEMEdU|$\$D$uM $jU$T$EEE]u}]fxE)ىȉD$$ME\$TF($D$9u;~$~(uF t$F 닉 $%F joFt$ D$ED$F $$tF ljF(~$EF$Bztա3$F$fuF tƉ$;F EU$E&UEPt01ҹ tJtËt#1ÍD$k3$1ËB$P1Ív'U8}}]uOG t$dG ED$ ED$E ED$$uu1]u}]ËEPu2tD$u2$TkE$E؉UfumEU܉D$ E؉T$D$G$lp4$uOG822[3D$k$ŗ1?E$^E؉Uh3$G$Ws1t&UWVS }G@t<$jwt*_t#ËG$W$G,$ٛW t tkWt tKWfU(]] }}uC=Q2t_D$Q2$9iC=Q2t=D$Q2$iu)3D$k$]u}]Ës[,$R PE,$ x E |t $T$8_}y<[^_]ÍU8M }E]utU؃֍8 z˃ :1R P,$ t P$T$^}y]u}]Ðt&UWVS]EEt EEEE$D$fٞrLٞE1ٞzt 鍂E}1E fEm}m֋ERP,$ m}m֋EȉȉֈEȉEEMUE ȋM UEUEMEUljEEEM1Č[^_]ÍQugщ1M11EMUoUUpɁٍ$D$\EE=E~=3D$$HČ[^_]Eʍ&111EEEEء3D$$tfUWVS\uE]Et EEXE$D$cٞrٞ#E1ٞzt BE }E fEm}m֋EȉuEЉEUE ȈM  UȈ1\[^_]ËE=EE11E밍vUU&Ƀ}uٍB~$D$ZE<ء3D$$S\[^_]ÍEء3D$$OtfUS$]C=b2ttD$b2$Wu`C@0tf@Pt_$Ѕti@=b2tD$b2$WtdCuC$]PE &C$[]Í&3D$$K$[]Zš3D$$Ѝt&'U(E$ED$$,\Eٞv w $EÍv}E fEm$mNÍvUE$$Ðt&US3E]t'3P3@b2EX[]$`tB3ىB9É3vʍJ9ȉJrA1ۉ3u芏鍶UWVS53eE133DžTDžXDž\T1ɍV1ۉ&>txb2u8>uۋ>tx31ɉ353f>Btzb2u2t>u3\kh3u,Ue3C[^_]É4$hX뻡3D$D$$D$ ^\Tiu.\iu.T$TD$ \D$<T$X)TTD$3T$$+^=h3'3҉``DžPPP>b2utڍED$ lD$HD$ $UЍlG\$ T$D$d$vVl-tu9Z tbDBu썕lT$|$D$lD$ 3$(]PP>3``.F0F뛍ml3$ D$]DžTDžXDž\?]vUSE@3]t+3P3@b2uEX[]$\tA3ىB9É3vʍJ9ȉJrA1ۉ3u蔋f獴&'USE@3]t+3P3@b2eEX[]$ \tA3ىB9É3vʍJ9ȉJrA1ۉ3uf獴&'USExb2t=@3]t73P3@b2EX[]Í&[]$G[tJ3ىB9É3vt&ʍJ9ȉJrA1ۉ3oÍt&፴&'UWVS] Pg2t}D$g2$7PugPu2D$u2$P@=b2tD$b2$OtcU1҃[^_]Ë$Cǡ33P3@b2W$XU1҃[^_]Ë$]E33P3@b2EX$YtM3B93st&ʍJ9ȉJrA153:cƐ$.Ytg3B9Ɖ3vʍJ9ȉJrA153qft&ۇ뾍&UWVS\E eU1ҋ]tC= 2tD$ 2$M5CCTmӋDP uڡH3H3D$$RH3$ݝٽ f٭۝٭)ÉH3EO;9u$ЋDP u9݅H3H3n$?TH3$ݝٽ f٭۝٭)ÉH33݅ݝ3P3@b2݅XC=@2tD$@2$KC=D$ t$D$C $PuT! t€҃)ىI3D$$x1Ue3&\[^_]É3D$$w1D$D$$ 3D$$w1넉\$ D$D$$3\$$Ww1J$3QD$$3$'w1H33D$$v1$3_Q~D$띐wTL$ <$2TtE3Z9É3sʍJ9ˉJrA3c፴&'UVS0uM UEG2b2tpT$L$$b2tH4$D$tCXt0[^]Ðt&C$P0[^]10[^]ÍvED$D$ c2D$T$ $tˋEP 2tD$ 2${HtED$$4oE$r]t&'UWVSu]eE1lD$ D$HD$ $]F\$ \$D$d<$Jl-tWtCN&t)DBu<$TUe3u Ĭ[^_].F0FԍmRvUWVSu]eE1lD$ D$HD$ $F\$ \$D$d<$Jl-tWtCM&t)DBu<$Ue3u Ĭ[^_].F0FԍmOQvUWVSE eU1ҍ]ЋuD$HlD$ `E$ D$ F\$ \$D$d<$)Il-t^tJLf t5DBu싅`<$D$H1Ue3u Ĭ[^_].F0FȍmaPt&UWVSL}]Ћu eE1$D$ D$HD$ F\$ \$<$D$dXH1?-t1L tDBuEe3uL[^_].G0GOt&UWVSL}]Ћu eE1$D$ D$HD$ #F\$ \$<$D$dG1?-t1nK tDBuEe3uL[^_].G0GOt&UWVSL}eE1E]Ћu $D$HD$ D$ tF\$ \$<$D$dF1?-t1J tDBuEe3uL[^_].G0GQNt&UVS0]u C=b2tD$b2$xCC]F=b2tD$b2$PCF]СH3H3lEЍEEH3$]3}E fEm]mEE)Å҉H3]3P3@b2EX0[^]ÐC=g2D$g2$BC=u2D$u2$lB22뜍F=g2tkD$g2$6BuWF=u2tD$u2$Bt4$,]Ee1҅&F]C][t&$30I3D$$n1H3$螽Ud1҅v$t&KtL3Z9É3st&ʍJ9ˉJrA1҅3/zt&፴&'UVS0]u C=b2tD$b2$@C]F=b2tD$b2$@F]EH3H3lEЍE}H3$] 3}E fEm]mEE)ÅɉH3]3P3@b2EX0[^]ÐC=g2D$g2$?C=u2D$u2$?22뜍F=g2tkD$g2$V?uWF=u2tD$u2$8?t4$L]E:b1҅&F]~C]Kt&$3PF3D$$k1H3$辺Ua1҅v3D$a$Pk1o$HtN3Z9É3s &ʍJ9ˉJrA1҅3wt&፴&'UVS0]u C=b2tD$b2$=C]F=b2tD$b2$=F]СH3H3lEЍEMH3$]}E fEm]mEE)ÉH33]؅3P3@b2EX0[^]ÐC=g2D$g2$<C=u2D$u2$<22뜍F=g2tkD$g2$f<uWF=u2tD$u2$H<t4$\]EJ_1҅&F]C][t&$3`C3D$$h1H3$ηU^1҅v$t&EtL3Z9É3st&ʍJ9ˉJrA1҅3/tt&፴&'UVS0]u C=b2tD$b2$:C]F=b2tD$b2$:F]СH3H3lEЍEmH3$]53}E fEm]mEE)ÅH3]3P3@b2EX0[^]ÐC=g2D$g2$9C=u2D$u2$922뜍F=g2tkD$g2$9uWF=u2tD$u2$x9t4$茵]Ez\1҅&F]C][t&$3@3D$($e1H3$U[1҅v$t&CtL3Z9É3st&ʍJ9ˉJrA1҅3/qt&፴&'UVS`]}2u KC=b2tD$b2$7C]F=b2tD$b2$7F]EH3H3EH3EE?$}E޴ fEm]mދEE)á3H3]3P3@b2EX`[^]EEmM9EH3H3E\$E$:EH3]$LU}E޴ fEm]mދE)ÉH3Eٞ!؋U"3C=g2)D$g2$26C=u2D$u2$ 622vF=g2D$g2$5F=u2tD$u2$5t4$ı]EX1҅Uv`E-3<3P3@b2@@ `[^]C]!F]>$]E X1҅3D$8$a`1[^]Ã"3$``1[^]}EfEmEm]EE EICEٞzhpzE }EfEmpMm]EUE ]ȡ3l3P3@b2EX\$3:3D$$V`1H3"3E]Ѕk3P3@b2EX$3i:uEsmU]$=93Z9؉3vfʍJ9ˉJrA3 1&3D$$4_1 3D$|$_1$<3Z9؉3vʍJ9ˉJrA3nf$&<3Z9É3sʍJ9ˉJrA3?16jt&js$t&;tL3Z9؉3vt&ʍJ9ˉJrA391tjt&ijWt&UVS`]u C=b2tD$b2$0C]ȋF=b2tD$b2$p0F]EH3H3>E\$E$f2EuzEEE8t%t&ڞz}EfEmm]EUpڞv]t&ٍEH3]$ $G}E޴ fEm]mދEE\$ )EH3\$/ƒ`[^]Ít&E,%C=g2D$g2$.C=u2D$u2$.22vvF=g2tkD$g2$.uWF=u2tD$u2$h.t4$|]EjQ1҅F]C]t&Mu]$3n53D$@$Z1H3$ܩ]EP1҅c33D$1$pZ1<'USE D$E$t=2tX t ڃ[]ËB$Pt&UVS@]u C=b2tD$b2$, C]ȋF=b2tD$b2$,XF]EGH3H3E\$E$.Uz|uz؍EH3$}E fEm]mEE)á3H3]؅3P3@b2EX@[^]Ðt&EEE8e]_t&C=g2D$g2$+C=u2D$u2$|+22evF=g2tkD$g2$F+uWF=u2tD$u2$(+t4$<]ESM*N1҅9F].C]t&$3@203D$R$W1H3$讦]EM1҅df3D$L$@W1;$4tN3Z9É3s &ʍJ9ˉJrA1҅3tct&፴&'UVS0]u C=b2tD$b2$)C]F=b2tD$b2$p)F]Ѓ=x3E*H3H3EЍE}H3$]}E fEm]mEE)á3H3]؅3P3@b2EX0[^]Ðt&C=g2D$g2$(C=u2&D$u2$l(22똍F=g2tkD$g2$6(uWF=u2tD$u2$(t4$,]EK1҅"y=x3F]s3D$Y$MV1t&C] t&$3/M3D$$gT1H3$nU]J1҅ev3D$a$T1;$i1tN3Z9É3s &ʍJ9ˉJrA314`t&ᐐUE@(t]ø2]Ít&UWVS UB tU$T$U |UBtU$T$U ]UBtU$T$U >UBtU$T$U UBtU$T$U UB(tU$T$U UB,tU$T$U UB0tU$T$U UB4tU$T$U E@<Dx-1LtU$T$U uB9uߋUB$t/Z 9v(tU$T$U u E9X$w1 [^_]Ít&UWVS EP,tMQ0A,t/EP4@0tMQ(A4tE@<D@(x=1PC9t Stu݋CP$RϋMQ$tDA 9v=XCE9p$v&SޅtuڋCP$R̍t& [^_]ËUB,P$RA(P$R%UB4P$RA0P$Rvt&'UVSE u^(tKF(FMA9‰41;4K D 4;4~29|؉D$3D$$TL[^_]Ã4t̍ED$ED$@B$JMEI< 8<,ED$PD$$%DD$PD$$%]ۉ$1E11Dž,Dž0<.W,9tR]9S {g2utCT$ \$D$D$3$cRu‹?u<[^_]á3$ D$ p.EEE. U]]uChwt3]u]Ðt&@3t(@3P@3@g2X]u]$tDD3B9ƉD3vʍJ9ȉJrA15@3uj@f䍴&'U]]u}u0D$3$3؉]u}]ËC=g2D$g2$C=u2D$u2$C@0v@Hk$Ѕq@=g2ttD$g2$Lu`G=u2<$zËփtbN)! CƉ]u]}]XzGƉËG<$PG<$PD$u2$dt D$HG<$Pt&'U]]uu-D$3$C2؋u]]Í&C=g2D$g2$C=u2D$u2$C@0y@Hn$ЅtN@=g2tnD$g2$uZF=u2y4$ËtW'/%[u؋]]É]u]]H^F4$PF4$fPD$u2$ otD$H3$0F4$P֍&'UVS.@3P@3X@g2t3dte@3u$ tVD3B9ƉD3vʍJ9ȉJrA5@3w1[^]Ã[^]<ԉ'U]]uu }C=g2t1D$g2$u22]u}]Ít&F[=g2tD$g2$t ^Chw t3뷡@3t @3P@3@g2X$ tDD3r9D3vʍJ9ΉJrA1=@3u8;f䍴&'U]]uu }C=g2t1D$g2$u22]u}]Ít&F[=g2tD$g2$st3^Chw t3뷡@3t @3P@3@g2X$ tDD3r9D3vʍJ9ΉJrA1=@3u8t:f䍴&'U]]uu }C=g2t1D$g2$u22]u}]Ít&F[=g2tD$g2$St#^Chw t3뷋@3t @3P@3@g2X$~ tDD3r9D3vʍJ9ΉJrA1=@3u7S9ǐ却&'UE]uXӍChwt3]u]Ë @3t(@3P@3@g2X]u]$ tDD3B9ƉD3vʍJ9ȉJrA15@3un8Ɛ却&'UE]uxg2tDXChv25@3t<@3P@3@g2X]u]Ët3]u]$tJD3B9ƉD3vt&ʍJ9ȉJrA15@3j7ƍt&፴&'UE]u@xZލFhv5@3ty@3PÉ@3@g2p؋u]]Ët3É؋u]]Ðu$~t|$ËuʋF4$P$t&tLD3Z9؉D3vt&ʍJ9ˉJrA@3+1\6t&፴&'UWVSEU EEUUEB=g2t(D$g2$u22[^_]ËEUXB=g2tD$g2$]tŋEp}2UB=g2tD$g2$!tExE]@MEɅtʉ};EUȉӉUz]t UMӅɉUt}96ut$UU)5UEhUt3MEɅtʉ};E]M]t$UEӅUd}9uK}2vEUE2EU c2H[^_]@3@3P@3@g2UPEEEUEEU Eu2뒉]11А3D$$&1o3D$$&1S$KtHD3Z9D3sʍJ9ˉJrA15@33␍&Uuu}} ]F=g2t1D$g2$Au22]u}]Ít&G^=g2tD$g2$t‹Ot^ډ)t>1xnChv05@3t|@3P@3@g2Xrvt3`yu} ]uu2u}H]D$$3$Q%1$tHD3r9D3vʍJ9ΉJrA1=@3/1⍴&U}E }]uEG=g2t.D$g2$u22]u}]ÐUwB=g2tD$g2$pt‹EXx3t\lj)t1xtGhw t3낡@3@3P@3@g2xRyuU}]u}U u2H ]፴&D$3$vE1D$$3$#1$tGD3Z9ÉD3sʍJ9ˉJrA@31/t&'Uuu}} ]F=g2t1D$g2$u22]u}]Ít&G^=g2tD$g2$t‹Ot^ډƉ)t1xlFhwt3f@3tn@3P@3@g2pct&yu} ]uu2u}H ]D$$3$!1$YtOD3Z9߉D3v &ʍJ9ˉJrA1=@36#.ǐ፴&'U]]}} uC=g2t1D$g2$Au22]u}]Ít&Gs=g2tD$g2$t‹GЉUV$$$Ez|uz؉Ѓh@3$(;D3Z9؉D3vfʍJ9ˉJrA@3uL1,ڞrNEhv1@3tj@3P@3@g2UPfUt3} u]u2]}H]oq$t5D3Z9؉D3ʍJ9ˉJr,ft&'U]]uu }C=g2t1D$g2$!u22]u}]Ít&F{=g2tD$g2$t‹F)1׉UxPEhwUt3릍&@3tG@3P@3@g2UPp3Exu }]u2]uH]$tHD3Z9މD3vʍJ9ˉJrA15@3d*⍶'U]]uu }C=g2t1D$g2$u22]u}]Ít&F{=g2tD$g2$t‹F1׉UxJEhwUt3맋@3tF@3P@3@g2UPw3Eyu }]u2]u]$xtND3Z9މD3vʍJ9ˉJrA15@3_C)Ɛ፴&'UWVS,E eU1ҋuEt>}83D$ $C1Ue3,[^_]Í}$t'v&t DB uC҉u >0UD$4$T$bNj9zCBt(DB uwЋDP tku䋅tGhvk @3@3P@3@g2xt$ D$DD$$@3\$$1t3xD$D$4$O_D$4$D$ u5U4$T$D$t$tID3ىB9؉D3sʍJ9ȉJrA1ۉ@3&Ð፴&'U(uu ]}tF$13t@D$ED$ t$$7uED$$D$lj$H]u}]fU8}}]M uUEg2EsT$L$$g2d@=g2tD$g2$tBs<$D$tpt]u}]ËC$P$8eutC1$P벍ED$ED$D$ g2D$T$ $SE}s@= 2tXD$ 2$uDUB=@2tD$@2$tlUED$BD$B $ED$D$E$#1t3$螰31D$h$pt&'U]]}} uC=g2t1D$g2$1u22]u}]Ít&Gs=g2tD$g2$t‹Oft#t~~x`3뚁{g2tQ[Chv7@3@3P@3@g2XV&t3@6Chv@3u$D3r9D3vʍJ9ΉJrA@3R1t&3D$$1$4t0D3r9D3vfʍJ9ΉJr"낍t&'U]]}} uC=g2t1D$g2$Au22؋u]}]fGs=g2tD$g2$t‹OEftbt^E9Eh@3@3PÉ@3@g2EC[{g2tTsFhv8@3@3PÉ@3@g2pt3Ut3C$(hG$hD$4$ËG<$P~31D$$b$D3Z9؉D3vʍJ9ˉJrA@31F4$P\uF1ۉ4$P$}tQD3Z9؉D3vʍJ9ˉJrA@31O`Et&֍&'UE]u}pxGxg2tUFhvf @3@3PÉ@3@g2p"9thGhw0t3É؋u]}]Ðt&t3ލ&@3@3PÉ@3@g2x묉<$ety$*ËuF4$P{$D3Z9؉D3vʍJ9ˉJrA@31$tRD3Z9؉D3vʍJ9ˉJrA@31tt&iڐUEM U@ t U E]t&]1ÍU]]uu}} Ct t$$ׅu$S 1tu ]Uu}]ᐍt&]u}]ÍvU1҉S]C u[]É$͠t+C!ؐt&U}}]uGu1ۉ؋u]}]Í$tD$D$G$wkËD$G $D$4ttkwWtGW OG 9B1ۉ$P+F4$P&eC$Pf눡3$DWtGt@W G B$PB$Pv:B$Pf볍&'US]CP@CCCPSt tES t t][]C P$R][]&CP$RfUS]CP@CCCPS t t ][]HC P$R][]/ Uuu}1]^ tF$D$ftF]u}]á3$ twtF ǡ3$u봋C$P&ҍ&'U$k2]]u}} 1tG^^~ {t $覍C1F1@C1X]u}]ÍvUVS]$=muD$$e 1[^]$@j2 1tF^ ^{t $C1F1@C1X[^]ÐUE]@Ðt&UWVS }_4G 0tU$T$U u y1 [^_]Ít&'UEM U@ t U E]t&]1ÍUuu]1ۋN tV;Q}A BF؋u]]Ët 1F ދA $Pt&U1҉MA t@+A!]Í&'UEM U@ t U E]t&]1ÍUS]SK xP;Q|'CC t%1Ƀ[]Ít&A BC[]ËA $P1Cu1'UEP HtA;B]Í]1ÍUS]CP@CCCPS t t ][]C P$R][] U$3t!$3@3$$3uÍ&'U3D$$Í&'US]St t][]'7&CP$R][]7&US]St tDS t t][]6t&C P$R][]6&CP$RfUWVS Ex tLp@ @@\xtuP$Rډ<$16 1[^_]Í&U(ED$ED$D$ D$D$.E $I1҅t8E@= o2t6D$ o2$&u"D$3$ 1ɉÍ&EP o2tD$ o2$tED$ @D$E@D$E@$Āɉ‰Í&'U]] uu}}C= o2tD$ o2$nt uCu]E G}E]#D$3$5]1u}]ÍUWVSEu} EF=l2t(D$l2$u22[^_]ËG=l2tD$l2$t΋NW9tE~`1ۅ<vtb9^~B9_vD$G D$F $*}1[^_]ËNWȃ}wM$F9~;9_f~4}}tKEEG E F E[^_]*"W멋N빃}G2tG2[^_]ÃG2G29ЅҸG2uӸG299999뾃G2G2v1ۉ)&'U1WVS1ۃ u} 9^~D$F <$D$9)tڃ [^_]Í'U($]uƉ}׉Mu]u}]Ãp xD$ED$$s_Ƌt>tF=g2tD$g2$ht64$<Ët녋C$P뷋F4$Pt&ߋt3D$$AF4$P։'UWVS˃,u E܋E…EUM E|pu}߻+}EvU 1EEM E|%AD9lj]!ſ,[^_]Ë}EM 1EtHUM )‹E܋|fDo9lj]M뽐t&UD$)‹D$E܉$&KD9lj]뭋UD$D$E܉$&u D9lj]~뽉]9߉}UUNjEr+E9EE u @9M )0EEuэs͍s9qU)0D$D$E܉$%=tĉÉ9,U}+})X9]~]93U}+})*D$U܉D$$J%Yt&UWVS˃,E܋E‰EE U֋M U܋|}EtE 1E UM )‰ЋU܋|%5D9lj]뻿,[^_]É߻+}EE 1Et;UM U|sD|9lj]SŋE܋UD$D$$#a(D19lj]fE܋UD$D$)‹$# u D9lj]~뵉]9߉U}+})‹u+uur9E u D9U)M 0Utэs΍s9t&yU)0ED$D$$"Euߍ&뷉]9.}UUH]9~]9!}UU֋UD$T$$Q"BUWVSuE} F~.1ېD$|$F $"~E9^ՋEE[^_]t1[^_]Í&UWVS,}EGEED$ED$ED$D$ D$D$E $?@toME;M}\;O}W4uB9]~D9_~S t t ][]OC P$R][]6UVS]C=l2tD$l2$;tc$l2[1tHF^ ^{t $AxC1F1@C1X[^]D$ $- 1፶UWVSu} 4$yEt4|'|$ D$D$$][EE[^_]É|$$[)N~j1 f9^~\~ |$ D$D$$cD$|$F $ t4$>EE[^_]É|$$]4$E[^_]É'UWVS }<$<313w tH_G 4G x&0tuG P$RG ҉$#$3O l2t>G<$33ۣ3t~( [^_]É} [^_]v<@3$3뽃 [^_]y'U]]u}&<9t]u}]%t&$34@3$3uZF ^^^{t $xuC1F1@C1X]u}]Ðt&t*$nF t/|$D$$s낐t&$?F uыF4$P $l21u"D$[$-1St&UWVS } ]x)s΅tt,ʉ9t [^_]E [^_]Q $IEU1tOE{H tKs E~2vC~t&DЃ;C|E;}uыE [^_]ËC ~1҉9uۍUWVSu ]F=l2tD$l2$WFCy [^_]$sE}1toC }E }C~"}ʋD}DC9NE~ X ~vDʃD9VE[^_]ËF@ D$D$3$11Ս'UWVS1ۃ U Mx ]C9Y19EP9K)މ4$1t+ ]K _ ~1ҍv9u [^_]É룉뱍&'UUSB~#J \9s9r22[] UWVSE]JDEDtE|E>\X9EhUT$$]UGEx)ƉuuEEČ[^_]ËU]܍U]܉ECEGT$$UCE~9EC]EU[];P \Ë@ü9t$KEX@ u4$UB]Z U]Bt$U$T$:EU@׃tuԍsE̋C]}]EUUEЋEEEet&]ԋMЋmEE9EE뵍B]UTDTD*]UE[];B ~FBӁü9t$ EX@ U܉$DUB]Z U]܋B\$U$T$]U[]]މEE]E\$E4$D$EČ[^_]fnmEU9UED$D$Uԋ$u]ԋm}]EE9ElE멋Uԋm}UE]9]5E}}UUE1EtzEMm9]{Em9]LED$UD$$qu]m}](EE9E1뮋Um}UE]9]1EȃE1U})E]EЉZD$E؃$]ԋM؋UCU)‰UUԋm}U]Љ\$E$MŰ6])unmtU}QHEUEȉB))ƉD$GD$F$])]TE)E)ƋUԍND$ $T$)]}tEYfE؉))ÉD$GD$C$UԋE8EEED$])ƍV$\$EE1U})E]EZD$$MUEt>&\$U4$މT$]])]}EsmE$D$]MWEt'4$މ\$|$~E)EtnߋUm}Ut(}}]E]X]|$4$\$UEEEUӉUE<UB9t$:EX@ ESUWVS<U EEE1}2P1#U}2U!Et(u$`n2XEEUM]@R ICC C]DžCf$ o2Xp 9b4ED$t$$9auxdw19tNC= o2tD$ o2$C uC$P9uDžMqYy A \Qu9x)tuP$Rڃv\<$Utt <[^_]á3D$$1M샽t u4,Dž8Dž<Dž0m1ɋ?~vЃ ?ы Ӊ9Dž QC|^19gDž9S}DžEtr~h1 9tYC= o2tD$ o2$@C uC$P9uMyt)t3D$p$Džt ]v4;t$^4Dž83D$$~1EDžD$CD$$t9wʸt( \9s9r9s9щ~ы ] 9‰ t9  ҉u9 )Qu΍svȋEP$Rf9"Džf;S}1;sʋBJ9Ήr9< @<D<\t&<@JqD9>9}{,P[<~߃u@HB;A~ŋ) uÉ g&s9)D$$D$tĉf\9rt&9rU\96ы9r<;L}S,*5<ڃtED$ED$ED$ED$ @n2D$f$D$*DžEDžD$CD$$lu9w1Dž2D$ CD$B$DžUS]tbC=l2tD$l2$許tDD$D$$t1Ƀu B$P1Ƀ[]ÐD$c$-[] UWVS,ED$ ED$D$E $!1҅tpEUEEU܋pEU^B9~D|uE1P ;|E?P v21҃,[^_]9|Z)uD$$γtNjUB Zz}܅xe]9~EN9ًx |TB9}U22,[^_]á3D$0$1VE!‰UD$$-1(&U8]] uu}C=g2tgD$g2$聯uSC=u2tD$u2$c~$(;^}F F -Sxh9V0 3tg 3D$3$1ҋ]Ћu}]ËF F {2tY3D$$1Vy$ERC 3^Et&]ED$ED$ED$ ED$F$D$xaE$y5$j#~ p EMD؃M;E|1t&UWVS Uu }B=l2tD$l2$购tx1ۅx UB9\19~B4$1t*U _ J ~1f9u [^_]ËEP9~Љ)몉19D$$-1UWVS EptpE ] UދB9c9|]ZE} X E~4t&1҅ ~&9u׃EU9U uЋEE [^_]É| |E?P w.uD$$躯tUB ZzP 1[^_]ËUz t\BB BxtuP$Rډ<$w2E1P fUWVS\E9EoD$$wE@=l2D$l2$j]U[]B=l2][ ]u 1ۅxU] B9~;]]EUBU9‰UsE)؉EȋU+UȉUĉЋUBMt]FE1ۋx p@ @@\HtuP$R֋]CU=l2RUD$l2$HE E1ۋU9Ut$EtUu B$Pf\[^_]Íuȋz  ?4$REUEԉE]t$D$]$蒱}IE]ċU@ÉE̋B9 9tE1P <$1\[^_]ËEP1҉p!)$VtEw P ~1ɍ9u|$ UT$] \$E$ËG<$P\[^_]ÍEԉEEEtE?P uD$$ƫUB Zr]EЋ{ )E̋ED$UЍD$Eč$RE~*]f]Tt;MuEȃU1E\9utuP$REEEEC$P +Z UB+ED$]ЍD$Eč$eE]X‹@99|Z]{ ttftE?P w@uD$$2t#UB ZrOUԉUo:늻vE1P 몍UWVSu} F~p1uZ9^~\D$|$F $\~׍CD$ D$\$4$Lu2[2^_]Ã1[^_]á3D$$1[^_]Ít&'USU ]Mx<;S}7tUC 1ɋu/B$P1[]f3D$$[[]ÍBD$ D$T$$s UuE u]]}}EF=l2tD$l2$t E]]}}uuE ]D$$-]u}]Í&'UX]] uu}}C=g2tnD$g2$^uZC=u2tD$u2$@$taxk9_f~nG 0,vS9W~@G 0tC12_yt&3D$$]u}]ËB$P1{2tR3D$$^&WR&뎍BD$ D$T$<$c닍ED$ED$ED$ ED$G$D$vE9W1҉p!)$Ep W ~1ɋ9uU܉UԋMԋA=l2D$l2$bMԋA]9u$謬MԉE̋ }؋A=l2#D$l2$ Eԃ EȋEu~iM؋}ً̍D}ȋDu9M؋E~59]~&ỦD҉uM̋DP$Rҋ}̉<$UUԋBCD$ D$\$<${2UEt$ <$D$ED$]D$P4$mEz]}ԋ }UEu$:E];]}dEE4MЋUEG 0 OE9|)كMUG T$P+ET$$菫]E9]EUEG9}"4G ك+M0G9ËG+]9É_9}St 't?W uD$$#G _wE~29]~#}ЉD҉uDP$RՋEЉ$1}ԋG=l2thD$l2$>uTMԋAD$3\$ D$x$}ԋG<$P\f@UԋB몋EUE]UTUW 1H&'Uuu]}F=l2tD$l2$dtBM t;F=EËF9~D|Eu=V 1ND$$-j]u}]9|^6|?V w>uD$$0t F ^~U F M1럍t&;돡3D$0$pt&UWVS UB=l2tD$l2$J'}EpS(U^B9Z9|TZ] t&] 9~EN9ًx |TB9}U1 [^_]É|~ E?P v`= [^_]ÅuYE1P D$$ߟt͋UB Zz] XE !‰U Bu봍|E?P {D$$-g73D$0$D$$-*U8]] Euu}EED$D$ D$D$$vEt,Pg2tD$g2$LE@EF%U913D$$ Et&E]u}]ËN ]X9tPEBD$ D$T$4$뽍ED$D$$ cE땐t&F99}n|?1ۺu0T$ $ʝt;F ^~L…҉U|?wu^f 3D$$Ev'UWVS] C=l2=`2;]$z4E@@pE$bsUr09B99ZEpU$Ut(Ex‹@9}]B 4BU$UuO3$*U1[^_]Í_9|D9|>EX1ۋUB 4AUueTUDEE}?P w0EuD$$讛tUB ZEBimF4$P^$D$d@=l2tD$l2$Η{EU@4EB9 9wTUEP ED$$Ԛ UB rEBC=l2D$l2s $0MUJ ~1ҍ9u2[2^_]ËEP Ex3D$0$|E1P D$$ UB ZzֹEX@9}_9}Yt WtE?P 5uD$$jUB ZrUB$P|E?P wW)"DEE}?P w6E s GC$PpTLC$P1>rUB$P#3$&u 3$t-l\f{E1P UB$P1fUWVS,EED$D$ o2D$8ED$E $tgEx tLp@ @@\xtuP$Rډ<$Eu1,[^_]Ã,[^_]ÉD$E$tދuɋB$P1fUS]E $D$tt ڃ[]ËB$P荴&'U]&U}}]uG=EËG919|+_U G M22]u}]Ét~?W v71хu:W 1D$$0tىG _w덐t&uհѐtW ?wޡ3D$0$y1efUWVS,E$<EUB9$1tE.]CP9Z]܋UC 1ۉ4E҉ ]EE9CU]؋B $;ƉEU܋B=l2tD$l2$葑]܋[] U܃B9I| |E܁?P uD$$芔tlU܉B Zz$r%ËE$@,[^_]ÍEP$R1ۋU܋uU܋B$PIt&D$$-E1P A3D$0$QP$$EiU܋B ED$E${8]܋ES E9$a$E SC DL$EE$08EKS DE$c\$E\$$)ËE҉EP$R~$]$k1dUEP1t]ÍUE]P፴&'U t$u |$}$F_9t/t#)ƒ|$t$|$]Åu11)t&xLW DV f9t)…y륍UVS]Sx21x 1DK uƃt [^]ھ[^]UE]@Í'UE]Ðt&UWVS,UE }REE҉UzMEu TEE؅u11EEuuEDF u܉EЅt5E%uE ËE9Ev,;}E9UwEEu9uutG;}vbu܅t ÃEU]9}s1+MU9u1AE;}u҅ft̋Mt+U9Etա3D$$蔹,[^_]ËuE9EuE9Et'+M]t ډUEEg}vѡ3D$$놐t&UVS1ۃUB3J)~<tJ )ȍXA9t#3D$$趸[^]Ãtfuv荴&'U(]]u}u,D$j1$迶]u}]ËC=u2tD$u2$4tKx[E11x11t&DK 1׃uEE]UMΉٍ<oE롍vUS4]Eu+D$P$4[]Í&C=u2tD$u2$ftD$EUD$T$$D$ ;x EU4[]É뗍t&U]]uu }tGC=u2tD$u2$t)Cu;v]u}]ÍvD$w$ ԍt&PDS P$~+8HDS P$~؉W$ؿ묍&U]G&US4]EVC=u2tmD$u2$uYC=g2D$g2$ۈunC@0t@Hu|D$3$豵4[]ÐD$UED$D$$T$ yxEU4[]É$A|4[]øۉ$Ѕt@=g2t]D$g2$%uIC=u2tD$u2$te$EUqC$Pc$t&{ED$$ /t D$C$Pt&'Uuu]u%D$$該]ȋu]ËF=u2tBD$u2$u.F=g2tD$g2$t4$zx 먋^y3D$$г1t&уnT^ 9tܡ3D$$至9'UWVS utDF=u2t[D$u2$FuGF=g2D$g2$$D$$h [^_]ËNxT1Ӄx8TN 9t3D$L$蹲 [^_]Åx%؃ [^_]ٿ룉u [^_]cyyuf뺍&'US]C=g2tD$g2$<t[tڃ[]Í$?1҅u׍&U]]uu#D$2$9]u]ËC=u2tD$u2$谄t6Sxb1x1t&DK u뢋C=g2tD$g2$\g]u]]~ھ뚍v'US]u2u2Ѓ$W\$D$u2$[]Í'UVS0utF=u2tGD$u2$跃u#D$$0[^]fF=u2fF[urE1E蹅Ét$E$bٞzt;"t"ٞwwtXD^ P$~+8HD^ P$~Q$U~3D$t$]zE؃0[^]D$u2$`D$w$褭U]cE؅tك0[^]Ð{{عff؉)UE$]EtE$A+ɉz1҅uUWVSE]M@3K)9щ~)ًu2u2MЃ$uD$u2t$$u2u2Ѓ$e\$D$u2$E4] t$$ \$ĈEW \$$D$謈_1)~+Qf|W t…tBf|G t9txwWE8UZ1)~4֍Qf|V t"…tuBf|F t9t x%EPUE1[^_]Ã[^_]ËEډPډW녋u׋G<$P뿍'UVSuF1)Ӌu2u2Ѓ$\$D$u2$Tt FڃAxDV fDQ u[^]Ðt&UV1S]t uu2u2Ѓ$tt$D$u2$tۉptP f%fu[^]Ít&UWVS}Ex1t uu2u2Ѓ$t$D$u2$Bt$Eu'qtQ f%fu[^_]EsUWVS|EUM@=u2tD$u2$}xMAY11)Ã}]~EE}+E|4)9U~3D$ $w1|[^_]9݉t$$E|0EtLUE-z0E}[}g} t5G#gfffMmE))ȃ0}  }t ]U9t*uME$)ʉT$E|[^_]D$)$ȧ|1[^_]EEEo]UEӉuڋUEӉtEu2u2Ѓ$KUD$u2T$$褾E‹ME ]UM˃ ɃM̉]v]41E˃‰U1ufЋMUEE)9Euˉ΋UMf| u]]@,3@,3@,3E]ą։}E(€ D7űE EM]EE~ EEM1]EE؈MӉ]EEEU܋M]DQ M 9U3t&U! D7M]]uՃE]9]u ։}fEʉE(€ D7f}uUB$PB0E0Gx01<,3@,3Y8Uu B$PE҉uEP$R11])]]E!< ƒT7؈M]9E~]]UE]v'UE]v'U1ɉ E]m'U E]Jv'UWVSLEt%}3D$$E1L[^_]Ã}$ۋE~ZrDA u+/-Eu Rt&‰uDA uE0E u2$D$D$u2$?=UEU<940E؋E؅M9Mv}GW1)‰ӃUȋu2u2Ѓ$[\$D$u2$跹EE1ɉ]܉‹EȅZ}DO EЉffTK ƒ9MuًEȋ{fTC 1)~0Qf|S t#f…tBf|C t9t SUE܅M܃M<9<`WEغ)ډUЋu2u2Ѓ$3UD$u2T$$茸EE E1ۉEE9UwB<9K0 E~EMf%fm9UMvt}Ef}U+UЉ9E~$M&Ѓf9EM}_1)~8Qf|W t +&…t}Bf|G t9t yڋEP9ut_}ԅy}Gt؉G"ٞ$ZEP$R~fQEP$fRtvpDs P$~+8HDs P$~Q$]ء3D$\$01ع3D$<$1&'USE$U MEu2[2]ËUEUËE@3Bx?t&E҉t؃[]ËEP$REP$R̅ۍvt[U벍UWVS\E$U MEcu22\[^_]ËEExuFE1;}E|EEuEƉ}܉E܋E܋u2u2Ѓ$UD$u2T$$WE11҅']DN f+DK ]f)ЉffTK ƒf9u9}~:?\ uԍL E1)f)Љffƒf9u݋E̅luԋ^1)~Qf|V E҉E҉EP$R\[^_]Í]D~ T{ f9tf9EwEEuƃ}…t}ԍBf|G t9EԉPƋE҉PEP$R?uV҉U9}ĉ}p]ċu2؃u2Ѓ$\$D$u2$uEE11҅&}fDN fDO ffTK ƒf9Mu׋E9E~91t L E+E؉Evff%ff;}u}؋ufTs s1)~.Qf|S t!…tBf|C t9t \S}G؉G19ljE&]Ћu2؃u2Ѓ$\$D$u2$@Et11҅ЋUfDN ]fDJ ffTK ƒf9u9}~=]ȍ?t L E1)Et&ff%ff;]uߋ]fT{ uȋ^1)Qf|V t…t}ȍBf|G t98$EȉƉPUZEuƉ}ЉEEUĉu}ĉƉUz)uy19ӉUE|7uƉ؉EEEu2u2Ѓ$UUD$u2T$$讐E11҅ۉE}DN f+DO }f)ЉffTO ƒf9u9]~:}t L E1)؉f)Љffƒf9u݋Eu^1)^Qf|V t Nt&…t}Bf|G t9-EP}D^ T_ f9tf9EwEEuƃ]u2$D$D$u2$Uڐt&uE1t&UZ=1u21$}D$D$u2$ՎE#%t&UWVSLE$U MEu22L[^_]ËEEP҉UzuFE9EH]؋u2؃u2Ѓ$Ƨ\$D$u2$"]11҅U]fDN fDK ffTO ƒf9Mu׋E9E~<\ 1L E+E܉Evff%ff9uuMM܋w]܉1)fT_ ~3Qf|W t&v…tBf|G t9t WE҉E҉EP$RL[^_]ɋEuƋE܉U܉Eu^\M9ˉM58؋]EEċu2u2Ѓ$;UD$u2T$$蔌E:11҅}DN f+DO }f)ЉffTO ƒf9u9]~?}ȍt L E1)؉Ðt&f)Љffƒf9u݋EMȋ]ȋq1)Qf|S t …t]ȍBf|C t9}ȉWRP}D_ f9D^ tEEuƉ؉]fEP$R19]E|3EuEƋE܉]܉Ëu2u2Ѓ$茤\$D$u2$Et}11҅f}DN f+DO }f)ЉffTO ƒf9Mu;]~8E܋}+]L 1t f)Љffƒf9u݋u̅UЋrӉ1)Qf|S t…t]ЍBf|C t9}ЉWm}U܋MDV f9DQ tEE]EX`bEEuEƋE9ډUԉ]| uƉ]ԉӉUu2u2Ѓ$\$D$u2$@EE11҅z]fDN }fDK ffTO ƒf9MuԋE9E~5]1t L ]+]ff%ff9u]ԋE}ԋpfTx 1)~8]Qf|S t(…t}Bf|G t9tE։P]UމӉrUZAu2$D$D$u2$W]]1ېEt&8uEESEuEEb}1ҋuЉ>Č[^_]ËEȋu2u2uЃ^ $}D$u2|$$GE1ExWEۋUE| 1ҍt t&‰U1fӋMEE)9E؉u͉΋UZ1)~<׍Qf|W t -&…t}Bf|G t9t2EP1t uu2u2Ѓ$t$D$u2$@~t%1tޅqtQ f%fuM}MWA1t][uF]CE@ML$]$Nju2u2$D$D$u2$o}JCfC ]]\$E$3,]Eu}XUNB$P@G<$PڐMЋu2AY1)É]+]]u2Ѓ$ \$D$u2$||EEE}u+u}u19}~E\x @,3@,3@,3mMċuDN f9EۍO1҉MLH  EE̍UMTPEU|yU})ljE9s:MU}) t&EʍHEM 9w}U9U1E }9uthMTq UMЉۉEDy M)ЋUEf%fDz )9uMuU9U~MDQ EfDQ u }]uf|^ Emx}t}jM%EX1)~6uQf|V t&…t}Bf|G t9tUEPUЋBJu21)u2MЃ$ē]D$u2\$$zEExQ‹EuЋ]E| t 1҃‰U1fӋMEE)9Eu͋UԋZ1)~6֍Qf|V t 't&…t}ԍBf|G t9t x}EԉP]ЋűU-M1ҋA $P1}G.؉G$|C$P:116EUMfDQ ]9U11M;]}D_ }TO Љ‰ffTO 9]uF4$PfC$PfC$Pf#C$Pf1EfEEUEMA $P<,3@,3z|UEEUGEELB jUtUEE3D$<$aaB$PG<$PMA $PPEЅUЋB$P1EucF4$PUB$P&US$E$U MEu22؃$[]ËUME]$$%'t^ED$$D$ ED$$D$q E҉tLE҉uEP$R؃$[]ËE҉t*E҉uEP$R릋EP$R릋EP$RȋE҉tE1ۋ҉낋EP$R܉'UE$U MEu22Ít&UME $1}!EE҉tE҉tEËEP$RߋEP$Rߐ&UE$U MEu22Ít&x3u>UME$!EE҉tLE҉t.ED$/3$$WyE뽍&EP$RfEP$Rt&뢍&'UE$U ME&u22Ít&UME$!EE҉tE҉tEËEP$RߋEP$RߍUVSu2u2$诌D$D$u2$st9@f@ D$E$%Ƌtt ^[^]Ã1[^]ËC$P܍t&UWVSEEM$U EhD$D$$?4UB=u2tD$u2$/k}E@DžLt4G DžL]s@u2u2$_D$D$u2$qDžP@f@ M쉅PQ|`LQ @1fV\PL$ $EPtPMEPtLE1ɉ$P|PtPMEPVGED$P$EqPtPDMEPE1ɉ$PPtPMEP``M싕`_MA=g2D$g2$,}2<E҉ E҉u EP$R22ļ[^_]ËLtIPPt<|$$'E%P MEPEx~=&!t'dtuB$P!uًE҉E҉tuUtNPļ[^_]á3D$$XDžP8B$PB$P^B$PPP/DžPEP$R5EP$RExDžX1t uu2u2Ѓ$t$D$u2$bmXqtQ f%fuEP$RG<$P}hhZ]E^t5E1ɉ$^t t[EEFE9BED$$EyVtzB$PlC$Pv뗋B$Pt&(93D$$^VDžPf u2$聅D$D$u2$kt@PPA $P^E1ɉ$'DžP~E҉EEEy1"MqLq \\ًPHT$$iEPtP:EEPtFU1ɉ$\PtP MEPPL$ $EcPtP^MEPtLE1ɉ$PPtP UEPPD$$7EPtPMEPtLE1ɉ$P$wPtP~UEPPD$$E+PtPFMEPtLE1ɉ$PPtPUEPPD$$EPtPMEPtLE1ɉ$P?PtPjMEPHusME҉OE҉,UT$M L$E$c2PPA $PhD$P$EnPtPMEP2E1ɉ$PPtPMEPB$PB$Pt&B$PfB$Pf6DžX1DžPB$PËu2ۉu2Ѓ$\$D$u2$TfGڃAxDW fDQ uM}E_DžLA $PA $PnA $PfB$PfEP$REP$REP$RB$PEP$RG<$PBB$Pf;EDžP.B$P&UWVSU Pg2taD$g2$7"uHU @=u2tD$u2$"UU 1҃[^_]ËU xE1t uu2u2Ѓ$}t$D$u2$Mdt*EutU뒋E`E1ۉD$3$ .K31D$}$7/Uuu }}]~ 2u2F t*D$t$<$WXt'؋u]}]Ív4$1>uǐܡ3t$$m-ɍt&'U]] uu{ 2u5C t-\$4$D$V]puE]Sv$=uƋ]1u]Í&US]St tDSt t][]Uet&CP$R][]7e&CP$RfUWVS9EtCU;u93tŋU$T$uu!F;3uUuu룋Mtu[^_]ËU$T$Audݍ&UWVS ]} C=x2tD$x2$tCx=s[9$IT0u/ B u 9}A1 [^_]à 1[^_]ÍA]t IUD}tʍIUD [^_]É'UVSu] F=x2u:{ 2t'$g8tG<$33ۣ3t~( [^_]É} [^_]J0<33뽃 [^_]M0'US]tC=x2t0D$x2$huD$W$,1[]É][]Kt&'US]t'C=x2tD$x2$t C []D$9$G,[]ÍUVSu] F=x2tD$x2${ 2u{C tsD$\$4$V‹@3ZJBBn tM1҃t[^]Í&C$P1[^]É$3wčt&A $P&D$j$:+듡3\$$"x&UE ]u$DtD$E$Ƌt]u]ÍC$P]u]Ít&'UWVS|}G=x2tD$x2$GEG9EEEwE]D$`$D$ED$`D$$NGG EGG؉]X St tK ~#StuҋCP$RċEt E$Y|[^_]Í&CP$R맋ED$`D$$GG EGGEO UE$1Ít&'UE$_22ÐUWVSt~y9|7Č[^_]Ðt&~⋅tt@UEtBv<u$M|u2뗐‹@UEM9M=Eʿ`|tFQA$|$D$JtP@ ҉U@| vOɉxGtEWUqY!IPt UvL!ȍ@xu拕tmBMHUxHt@ E lU9Ut9| $vW1oWt΃muGP$R1DtB;B t]`D$`L$$fU|U}E}uu ]EG=x2tD$x2$+~ 2uxN tdE_ $:O 9}6WGRD9|%1ҁP]‹uT}]-1]u}]É4$&.됉4$.xD$;$%벍'US$E $t7EE$wED$ED$E$ËE҉t؃$[]ÍEP$R؃$[]ÍU8ED$ED$E }}]uE2D$ D$D$$8tTUz 2u6B t.D$T$<$WXۉt-؋u]}]Ív$,tU1؋uE<$t$D$uu븍v'UEMU tEU M]]v'U]3u}3433NuO_G r {t $輦C1G1@C1X]u}]Í^D$`D$$FF ^Fy$x25.tUXD$`D$$~GG _G-$i31Mt&UWVS utLF=x2tD$x2$vt.f^ $/t1;^ t6uߋA $PD$C$"1Ƀ [^_]ËFVx1Z1EtCQ  ;uu [^_]ÍvUWVS utLF=x2tD$x2$t.f^ $.t1;^ t6uߋA $PD$M$!1Ƀ [^_]ËFVx1Z1Et A  ;uu [^_]ÍUWV1S1ۃ UB=x2tD$x2$t8x4UJB9|'Pu'P fЋxR u 9}1 [^_]ËUxT$@$U uE<$D$U uЃ j'UWVS,E$<&CUB c$1u-EX$w ΉEVUB=x2tD$x2$t>x:]KS9|-vzGB ‹Z@ 29}$XEUB ED$E$]ES }$ESC DL$EE$蘜KS EDutg$cȈEtT\$$5ËE҉u:EP$R,&$脈ËE$$,[^_]1ۋUM܅tЋU܋u‹B$P뷋z]B$/U܉$T$ECl<$/$D$诛t\Et]D$$TËE҉tAY~>$谇2UB$P?G<$P뙋EP$R1&US]$`y2*51t"ZC BB C BBЃ[]Ív'UVSu$z24tGpF CC F CD$2D$2$څCt[^]Ã1[^]ËuC$P1ԉ'US]$ z2J41t"ZC BB C BBЃ[]Ív'UE ]uu}1$!t+F=x2t1D$x2$QutDf]u}]Ð{ 2t7$$t4D$\$4$VxuC$P볍vC u뿍[1늍&U(}}]uG=x2t+D$x2$u2]Ћu}]ËU B=x2tD$x2$ltȋE2wU G ;B t11G2}9tG2뗋GEEr&4$#D$E t$$P@D$D$$AƋtoEE E9GEGXtߋpU B=x2tD$x2$ut.~ 2TF YCC$PC1$P1fst&'UWVS,UMEEH*EEvD$\$E$@U9Wt&GULtUB=x2D$x2$PEtUHEtU]uEE E9G|TEGPtXu"GU_&uC$PEE E9G}EU܉E,[^_]Á{ 2tt$!t}D$\$E$P@D$D$4$?t`F4$P C u$ uB$P]uB$PC$vP뒋tUUt0EtUt&EEE,[^_]ËB$PŋB$P΋C$Pf랋ttEu덋C$PۋF4$Pt&֍&'U(uu ]]}F 9C |~]u}]ÍMEEډMD$E$8uE1tD$E$7ǐt&UtLt tYUt t9UO@EP$R/UB$P릋EP$R빋C$Pfu1X4vUWVSUlUB=x2tD$x2$GE <] C=x2tD$x2$__E 9EH ]ʋCSDR9VE @1EoUsB=x2tD$x2$te~ 24$TD$t$E$P@t/v] EE9C|SU ZCtߋEwCCCS$ E볋* ut1[^_]ÐD$$[^_]ËF H4$7} tD$D$]U $uK ؍ 3${Njbt<$q!EurUB=x2tD$x2$`tQ{ 2$t1D$\$E$PptuC$P{ \$E $D$\$U$EtVt>]%G<$PPC K9F4$fP뵋C$Pf띋u G<$PtC$PC$PG<$Pt&'UVSutQF=x2tD$x2$t3tD$t$$u/[^]Í&D$)1$[^]Ët1‹C$1P뵐t&U]W&UE D$D$E$Í&'UWVSE $EED$l2$%CEE(&UB=x2tD$x2$ 2<$D$|$E$PH2EE$mYD$.$:U@=l2tD$l2$CeSl2tD$l2$SC 8l2C @EEE|$D$U$9 t$Uth[^_]f{ Svt&F4$PfC$P&G <$qyEB$P[^_] 1ۅcfa3$%U졬3D$T$$:D$ ED$D$3$F4$Pt&C$P&UVSÃ0ED$E$ED$ D$D$!t^E1ҹt2D$]$6uLED$$D$ttD$t$$ƒ0[^]Í&ED$$D$u̍UEU ME]&UU ME$1҃t 22ɉÐUS]CP@CCCPS t t5St t3C 3[]ËCP$RސC P$Rt&빍&'U]]uu}} C t t$$ׅu$S1tu ]Uu}]ᐍt&]u}]ÍvUvuE@ tf2D$3$ 1UE@E]\uUE@@ tE]7u&22]fUuu]1ۋF t$tF@$[ u؋u]]1Ãuv'UUB t%D$ @@ D$B$PD$mËB$D$VÍt&USU MB 9A tr1[]ËY1ɋRC;Bt$T$(yϹ͐U3tB $3 3uÍt&U(]]uU}u CHM@{ w$X D$p$ V ]1u}]Å$CD$D$3$Q 빅t $suϋFF E Ut $NuFE 1Mu ]}uU}]t$iu M}]u}]Ft !֋v щD$ CD$D$3$D$ CD$xD$3$`t&'UEx2u@@D$8$ Ít&'UEx2u@ D$.$ 1ÐUEx2u@@ÍD$$$ l1Ð&U]3uu }C ߣ3C2ECts EtEEsC~t $ъF1C1@F01p]u}]$21t߉ljzvUWVS}EU }EU_E}V:uET$$uՋ3C 3C2]sUtEUsCS ~t $踉F1C1@F01pE[^_]Ë}}*ED$ 3$$EE[^_]À_u%  t8uҁUB@XE[^_]lo}1ۅt!M0t‹BuIu$E.MtD1Et*Ӊ$ot$D$U$ Cu؋}}u_tOUt)EE$22tÉEJB$PEE}<$(Ex'U(EEEED$E D$E$TfU]3uu }tvC ߣ3C2ECts sC~t $qF1C1@F01p]u}]$21 t߉lj뉐UEM U@t U E]t&]1ÍUVS0uEE2E2D$ED$D$ 2D$| ED$E $@tH^tOED$J*$D$x&ED$ҁ$D$1҅x 0[^]Ã0[^](tF롍'UWVS,EXEfED$ MEL$D$$t~}2t֋EP 2tD$ 2$tE$Yu8_ux_t=h3~D$$ ED$2$D$i,[^_]EML$ EMD$L$$=tЁ}2t֋EP 2tD$ 2$tE$tE8_t8=h3~E$ D$ED$2$D$8iƸ 2R믍v'US]$Ct$_C҉tC][]CP$RUS]C=@2tD$@2$teCt4D$?$Qt@= 2t1D$ 2$u3D$ $1[]É][]ss 䍶US]C=@2tD$@2$\teCt4D$J*$t@= 2t1D$ 2$!u3D$ $1[]É][]r 䍶Uuu]4$ItI4$t\$D$$ 3]u]\$$ ]u]%뫍&'US]C=@2tD$@2$<tCt[]FC[]D$0$ i1Ԑt&UVS$@2 t3E$hFu#t tfto1[^]Åt\$D$J*$2uD$2D$ҁF$ut-4$맋C$PuF4$P1놋C$PȐUEt]ÐUUt t]ËBU]H፶'UE]Ð&U$]t$KAUu 1$t$]Ët|3C1)ЋQAЃ܉'UE]Ðt&UMG2t*G2tG2t?QB0t@(t $Ѕ~ËB8tuB4tuf1ÍUuu}} ]B;CtO@0t@Dt |$4$Ѕ~#C@0t@Dt t$<$Ѕ~]u}]Ít&@Tu1U3UB]3Ív'U 3t+APA3 $3ҋ 3-3uÍvUE% ]eUEA ]eUE4 ] U]Éu։}@ϋR9tD$$C@T tH@dtA|$t$$=2t ]u}]á22u2$2PF@T t#Pdt2\$4$D$뭍22fF@T fPd[2\$4$D$=2`22'2$2PC'UVSu0rtkD$F $tU@=l2tD$l2$lt7Kx(C 9uAD$ D$L$$*[^]Ív'UWVS }q1t>D$F 4$gtFS &xC 9u [^_]É|$$%0 1[^_]$uɉD$D$F 4$xzC$Pl'U])&U])&UE UtE U]&E U]nfUEt E]iE]^fU$@2%$ 2$$F2$$ 2$$l2$$ 2$$2$x$ {f$N t{$ 2h$n$f T{$F2H$b$ 4{$ 2($V$ {$l2$J$ z$ 2#>$ z- UEPJu3F4$P(UBT$4$D$ӉNjt͋U u B$P[^_]Ë} G=@2tD$@2$E 1D$D$$'E 맅uE }D$ G 1D$ D$ 3$Z@@U}G|$4$D$Ӊ <$1^!4U}B1)ЋWGЃq31D$ $'UWVSE uP^ 2tfD$ 2$uOE P@2tD$@2$qE D$D$$I&t@E E E $FSLtHED$E D$4$҉NjE ҉t [^_]ËE P$R[^_]Ðt&S$tED$E 묋E ҉tXC u{HtwME t D$T$ C D$| D$3$[^_]ËE P$R뚡3D$ $<2uE t D$T$ C D$L D$3$fU(]] uu}C~= 2tD$ 2$tOHtW] u]u}]C=@2tD$@2$t4$D$&u]1u}]ËO tCE D$ 3$8ˍCD$ G D$ D$ 3$릐UE D$E$t&tɉËB$PɉG1vU(]]uU }uCH$t]u}]$X\Et't$D$$Eu G<$PE]u}]Ít&U]]uU }CH t]u}]$1[t"D$$Nju F4$P]u}]fUSÃ$uC؃$[]ÍCvRED$ED$E$3D$ $Dx'ED$ED$E$b랻뗋Uҍt&t tsUt tSUtʋuEP$RG3D$ $x؍\EP$R럋EP$Rt&xt&'Uu։}lj]@;B=@2tD$@2$jt&t$<$uD؋u]}]ËF=@2tD$@2$&u2tu2u$뼡3$tp̉<$.1LuGX 4$L.uFP T$$`| uG;FsL9rؐ1cG@T XdU u=2=G2t:=G2=2PB0u@(j$Ѕ~G@T $pd{U  =2=G2t:=G2=2PB0@(w$Ѕ~JU 1~ U r ¡L3h  [^_]ËM QBT tJdtۋ BT SrdfAD$ $  [^_]ËP(`M <$L$ҁI2X] SBT Rdyt&)U B@T XdiC$Pf1t&K22Y2$2PGE] SI2sB8t B4pv1vB8t B4C$P&@1*22;2$2PG'C$PB8t xB4xci222$2Pk$ <7l&'UUG2t_G2t[2tSJA0t%@(t$Ѓ~?ɅÐt&A8tuՋA4t uȍ1ɸÐt&}ÍUVSMU E9utuf1tmD$T$ $tRPF2tw=G2t'=G2te=2t^B0t7@(t0$Ѕ~u C$P[^]ÍvB8tuËB4tNju뿍t&1=G2 U1҉]]utC=I2t1҃x@‹]Ћu]áJ2t<$D$<ЉÅt uȋC$P1$<;Bt$D$iËuF4$P띐UVS]U C@ tO$T$ЉÅt0t [^]ËC$P[^]d1[^]É$At$D$ËuF4$P늍&UWVSӃEB@ L$$ЉDžG=l2t1D$l2$WuEtvE[^_]ËG~E1G C= 2tD$ 2$tD$2\$E$腯Ex9wuG<$PE[^_]2EE[^_]É $h@tۉD$$NjF4$P&UWVSEB@  D$K$ЉÅvF@ !D$/+4$ЉEEU$gE1 xA9}tp|$E$at$‹ESƋuȋC$PyU [^_]1҃[^_]U1҅uUB$P1[^_]$K>D$4$(ËG<$P$/+>kD$4$EC$P\$E$HNjt kC$Pt&B$Pt&'UWVS EUB=@2UD$@2$+7UB=@2D$@2$UB= I2@ UD$K$ЉÅC=x2tD$x2$誧E$ƋtsU x`U% xMUB@ D$ $ЉÅZډƋyt&1ۅtu G<$P [^_]ËUB@ UD$K$ЉDžtG=x2tD$x2$諦<$tC=l2tD$l2${$UDC$1P6t&[!Uy1$K1;D$E$NjF4$P3D$ $[31D$ $>:t$D$1D$]$O11OifV$K:tۉD$E$Ë1F4$P#C$PTV(C$Pfm$ :tΉD$E$ËLF4$P>C$PfPU$t$UtWѡ3Y9sN3+4w [^_]ËEC=2uMW!‹E띍&붍fD$g2$`tC 농&D$g2$@tCt&D$g2$ ]CE;8JU1@6M U$2]]uu}} <1҅t t2t;tD‰Xpx ]Ћu}]Í&2uɍt&2ut&2뵉'U8E]u}EEED$$Vu1]u}]ÍED$ED$ED$E D$ D$D$^$tMt>EuË}$2,tt>t0t"pXx rEEE1봿2׻2ɾ2뻐UE]@Ðt&U |$}$t$G t$t$|$]Ðt&_wWx1iCB119u1ЃtG 뵰t&UU tE@]Í&US1ۃt& 3t! 3tߋuԋB$Pɋ 3t t 3[]ËB$P 3[]Ít&'UEPD$$T$6Ít&'U3D$H$1ÐUE Mu EQAD$t3$Í&U3D$$uÍ&'UU Mu EQAD$t3$.Í&UWVS uF^tptY419s;Ӝ1ҋu@9޺vAuu19w} [^_]jfuE [^_]jpVDPE [^_]j&UVSuF^tVt8419s>'1ɋt&u9vBtE[^]RjM[^]GjޛVDPE[^])j'UVSuF^tVt8419s>藛1ɋt&u 9vBtE[^]iM[^]iNVP E[^]i&UWVS u~^t=t&4;9sD t&9v/DBuE [^_]tu$t&C][]$ha2$U2Ӎv$3\$$)t$D)2맍&UWVS$3Px2tD$x2$诃tx$3$t@=l2tcD$l2$~uO[^_]$3$$3$3[^_]á3D$D$$D$ GE~1+t9t$"1fC9u_G CuǃڃՋG<$PHB$P[&U}}]utxC= 2t.D$ 2$^tZ{ 2t]u}]ÍvCu5$3tU\$$3$}t]҉t7봍t&$40{ 2u멋P$R7$3u]u}];\$\$$3$Fxփ+CCvUS]$xt @[]Ít&U8}} ]uu! 3É؋u]}]ËE ˆUupG$Ux@ 2@ @DtZ}tE$]&ME 3dM 3NvEEcvE$]E 3t&UC|$$T$&bй'UWVS,]ED$E ED$$uEE܃,[^_]ÍCE{$Et11Ʌ~ыEv< < 9)ȉD$Eȉ$D$E܉$tb9|9\E)|$$U܉D$$ugC$P&C$P&댍FƉЋU92F9~U|2 uى֋u C$PU܋U܋B$PE U(u]!ΉEE!Ӊ ډ}EuMy 2UB$D$Et4ExuRMUMAT$$D$軅uE]u}]ËEXEt$$D$=E]\$<$D$$땍M뭐&UVS ]ED$D$E $;1Ʌt$CU9|1{ 2tD$C$ [^]Ãك [^]É1)Ɖ؉$0t͍T0<+t<-uA0붍&US$]ED$ ED$E E D$ $1҅t9SE9| { 2t.)щ!E)щ$ƒ$[]ÃvUS$]ED$ ED$E E D$$1҅t'CU9| { 2t)E1ɉ$ƒ$[]Ãt&US$]ED$ ED$E E D$!$1҅t'CM9| { 2t)E1҉$&ƒ$[]Ãt&UWVS,]ED$E ED$+$3Eu E܃,[^_]Í{[19]v]EE&11 < t9Mv>< t< u111< < < 9MwڍD$$MEj9}؉_1< tE< tA9]7< uڋM~)υtՉ 9u1뾉ډ}E)[1Rv'UWVSӃEEExEt2~#轀 E;}tMu1DB uۉt-Et89]~DP uC9‹Muu+ED$EE$ [^_]ËUz 2u׃UWVSӃ<4EЍEED$t$ $E}=2rP 2D$ 2$xumE@=@2tD$@2$x@MЉ $pt+E\$4$D$7Ëu F4$P1ۃ<[^_]ËEUЋMЃUPyU܋@EEt:0vE;}t$M؉L$UԋM D$E܉$胄uӅtaUt9] M؉L$D$E܉$Hu؍C9ljt!+}ԉ|$EEԉ$Z<É[^_]Ë]ԅu؋UЁz 2ũEЉw<É[^_]ÍF1ۉD$3D$$&UM EQu]%t&]t&UM EQu]1]1UM EQu]t&]t&UWVS<]EsEE2D$ ED$D$9E $wMUCEԁ2rB= 2tD$ 2$PvGUEEBEE$VE+]uyUԋ}:uEE9uՋMAɉE~[)]ЋM)MЋEЉD$ $It~D$D$U؉$NjxR]+]xMЉL$Eԉ$t,D$D$U؉$ƋyM؋wEE؃<[^_]ËUB=@2tD$@2$tUE$T$D$VTE؋E؃<[^_]ËF4$P/EvE}E$ìElxvxmUM: u~])؉D$D$D$D$M؉ $t 뜋F4$P؃D$Eԉ$~D$D$U؉$Mt@C$PwA $PE{C$PP^C$PP3D$D$GE/F4$PED$ED$E$5}$)Et&yEEԉDC y΅FD$Uԉ$,t3D$D$M؉ $u C$PU؋.B$PE UԉDC uy9[)L$UЃỦ$tD$D$M؉ $[\u C$PEŰDC ufUWVSL]CEE2EȍED$ ED$D$TE $yESUԋU2B= 2tD$ 2$pIUEEBEE]$EE]EE fEE9E|~uű}:u9ۉuًUB҉E~XE+EЉD$EEЉ$t~D$M؉ $ƋxZE̋]EEЉE9E}U)UȋMȉL$EЉ$t$D$E؉$EƋyU؋qEE؃L[^_]ËUB=@2tD$@2$o-UE$T$D$qRE؋E؃L[^_]ËC$P'EE}E$aEo]1҅~r19u~fEM: 0u~V)ЉD$EЉ$|D$U؉$33t 렋C$P9U)UȋMȉL$EЉ$D$E؉$C$PB$PEC$PV}$KEYE1~.t1EUԉDC 9M;u)uȋUȉT$E$ID$M؉ $.C$P3D$D$VEED$ED$E$0VvEԉȉEĉDC u 9u9()ȉD$Uĉ$D$M؉ $77u C$P9uEUԋMȋv9DC u9ut&UE Ux ;B}T 3t"Ít&D$^3$1E U&UVSE Uu!!ЋV9‰~…u9t!9ʉ|)ȉE DE[^]Sv~ 2uփ[^]Ív'UUz 2tBD$B$ ɉ‰ÍÉ'U(}}]u<$RstyC$eXP@ 2@ @CD$|$$rtVu,E$u0E 3 3tƉ]u}]Ív 3u]Eu$E 3ƃ뵡31D$$@뜍&'UE$1҅tEE${UɉÍt&U8uu]M }UE 2tT$L$$ 2tax4$|$t&HSGD$T$ $|qC FF t]u}]ËC$P1ED$D$ 2D$xT$ $tՋEt $脨$.UWVS9Mu\S9wEC+]CD$E$8E,[^_]\Ct뤐\Cn\Cr$D$D$JflwGED$'$t$oE؉t$D$"$oE"E"t&UED$$WÐt&Uuu ]]}}C= 2tD$ 2$bt"CtTC1҉]Ћu}]ÍvC=@2tD$@2$btH$D$u볉$j1;Ct3D$$q눋C@ D$D$3$_D$$荍AvUS$]C= 2tD$ 2$at C$[]ÍED$ED$$#E US$]C= 2tD$ 2$at C$[]ÍED$ED$$I E؍'Uuu]] }}F= 2tD$ 2$.at't}}] ]uu]~eݍv]1u}]ÍUuu]] }}F= 2tD$ 2$`t't}}] ]uu]̀dݍv蛔]1u}]ÍUWVS\]CEȍEsEED$ED$ED$D$ D$D$E $UB= 2tD$ 2$_UBEBEM9uE*MEE)EME]EE9]~'Euȋ}މ9u&EE؉9]̉EًEЉ$UW\[^_]ÍCÉE뷍ED$ED$E$!If1\[^_]ÅQE8UB=@2tD$@2$^tUED$ ET$$D$_1뚋E)E̋EM!‰U1E&UWVS<}EwEED$ED$ED$D$ D$D$E $ UB= 2tD$ 2$]UBEBEM9uEMU])9|=9|9)9}‰E)9&t}9$2<[^_]f$2<[^_]ÍED$ED$E$# \<1[^_]ÐeELUB=@2tD$@2$]tUD$ED$ ET$<$D$t$ 2K҉U1E1Et&'UWVSE@EEED$E؉D$ E܉D$D$E $<U܋B= 2tD$ 2$'\OU܍BEBEU؋B= 2D$ 2$[U؋B=@2tD$@2$[zU؋ET$D$ E܉D$u4$R$ČÉ[^_]ÍED$ED$E܉$Zbf1ہČ[^_]ÐU؍BEBEEUuEEUЋUuuEEUuuEuE_}0ED$U$u4$~Č[^_]ÐU܋B=@2tD$@2$ZU܋ED$ E؉T$D$U$;#ČÉ[^_]ËE R9UI}EuUuU+EEU1ۋu|ЈU|9]E|8uߋu}M9u̓t\UE)ExMEċE덋Ex 2t&UT$u4$O:C1ې-#uuuЅx E9E~E]LE+EEEEu$ctE,$ctMEU\UuEUȉuEU+UUE1E9]|pUȍU8uu}M9u؃tK\$EȉD$U$`u3E)EE]D$U$T$m`]m]lETut$EȉD$U$9`6ED$ED$E؉$u1EűuED;mU;T$U$T$_mE}̅ˋUD;t$$T$_uE]uȉE6&Uuu]] }t5t B= 2tID$ 2$gWu3tvt t;]u}]Ít&$\$rNj҉t$>uŋC]u]}H]P$R>ϋP$RzUVSu] F= 2tD$ 2$VE\$4$1D$ttg@=@2tD$@2މ$aVt)D$D$$EƋt;tF= 2tD$ 2$Vt2[^](1[^]ËC$PfYLF@ D$D$3$et1렋F4$1P듉'UV1SE D$E$$t#ED$E$D$Ƌt [^]fC$P[^]Í&'UVSu] F= 2tD$ 2$UE\$4$1D$#utg@=@2tD$@2މ$Tt)D$D$$襱Ƌt;tF= 2tD$ 2$zTt2[^]興1[^]ËC$Pf[XLF@ D$PD$3$~t1렋F4$1P듉'UV1SE D$E$t#ED$E$D$Ƌt [^]fC$P[^]Í&'U8ED$ ED$E }}]uEED$$?Gu]= 2tD$ 2$'Stkۉtot$D$<$Mst<@= 2t2D$ 2$RuC=@2tD$@2$Rt$؋u]}]1ӆ1ېV늋C@ D$D$3$(}uC$1PU8ED$ ED$E }}]uEED$$Gu]= 2tD$ 2$Rtkۉtot$D$<$}ot<@= 2t2D$ 2$QuC=@2tD$@2$Qt$؋u]}]1賅1ېU늋C@ D$D$3$|uC$1PUWVS-<EЋE)E Eu"}o}x}Xt&U9U}X4}xCE0EUԉẼ<[^_]ËB@0$PXEB1ۉ$PDEED$ED$Ẻ$uUԉT$$>EaE~ 1ې9u]M+M؅~1҃09uˋE؅~19Mu]ŰE܋uEmUxUЍxx@XEԅ11B<wB 19MuED$ED$Ẻ$iEUUƋE)Uԅ-} mD$W$yB$Pt&UWVS\EEEED$E܉D$D$ D$D$E $辌EU܉B= 2tD$ 2$MU܋E܃EBE}U؅B= 2D$ 2$@ME؋@=@2tD$@2$M3D$$yDž\[^_]ËE܋@=@2D$@2$LED$ED$E܉$#Dž\[^_]ËU؋E؃EBEu}F= 2t>D$ 2$LLu*EЉD$EԉD$4$UЃ ЉuvD$$ÉEZ@= 2tB$P|&<(ƒh<)uۃ9ɋx؋$\$&ÅC=g2tD$g2$7$b+yC<*Dž=DžDa0QDZu9DB!DCЉu)ȃD$ $Tt\$$-0DžDžDž0P$Rtxt X,B,BA, tK,,@B,CÃ(!3D$$a$D$ D$ $# S?9lx$T$"ÅUC=g2tD$g2$U4r$(!ÃI}C$P\f؉s҉,1(^d0$L$0)؍^cA $Pg w]3D$$:`Dž(Džd+;V3D$L$_DžfDž*.݅K5wK4$,`&-iDž.8.txXD$T$UD$?L$D$ D$@$<wt9ۉ\$ 4]\$D$x$4! t€u҃+ɉ(?Dž4D$D$$PvDž9~tu B$P0)$\$0U4\$ T$D$x $D$UD$D$1D$@L$D$ $dud3D$$]DžDžxtXt oDžRt3D$$\w3D$$\|tu B$PA=`2tD$`2$R/X+$"t5ڃx&LD D u䉵UDž3D$$[0҉toKh0)0$T$twDžA3D$$F[0P$Rf{3D$$[A $PD$ D$+A$)ЉD$:F$D$Ƌu C$P0t$$> Ë0҉u0P$Ru F4$PB$Pt&U]]uu C= 2t*D$ 2$,u22]u]Éu u]]]6UWVS,]C$E؉D$.E@= 2tD$ 2$i,}܃u؅~[+3s1EEtlEE9Et,MXuu1҃EE9EuԋE܃,[^_]Åt=w47뙍=w1xM܍ED$ED$ $b#}*t&UWVSy9u)؋U$D$T$I[\}|$E$D$ɆE܋E܅)U܋B= 2t D$ 2$)}܋GU= 2tD$ 2$b)tqE܋XډT$UT$}ĉ<$߉(1U܉}ċJB$P;]AE+E9EE<[^_]ËC$P6ED$ED$}܉<$l]bED$ED$}܉<$otEGEU܉EB}"}U'U|CHЍB<wLЍB<UĈ UCE\E2EE!EEU UE EU U} }} }3D$$TE҉<1[^_]ÍED$ED$4$!U!ЉE*D$E$p%‹UăLЈ U4AuuzAɉEFLu LtRUċ]̈ UuU3D$T$$8QvL먍A넋EP$R1o3D$$]S&UWVS,]C$E؉D$ΤE@= 2tD$ 2$ &xU܃UԋE؅~Q,s‰EUԈ\;}t1UDXtߍ=vEԈT;}uАE܃,[^_]0܍ED$ED$E܉$@E!‰Uf&'UWVS,E UEEEF~<%uts% +ӋDPt܀li&~#s,xfpu%EE뉀cd%<$,EԋE$D$1C]C= 2tD$ 2$I$]܋UU(U܈EU܉E؉ƒUUB<%u*M18tBYDGu.M t %tDGuEEuvlict&d&%UE܉T$$;,U܉$`+E܋E)E܋E܉D$E$fE,[^_]Ã>dEEE1EDG!t&EtBЋU DGuEU؀:dLU ] D$D$E܉$'%] U܉$*UE]sxNpU D$ D$E܉$$UB-E0@xU܃E $*UEEEU ] D$D$E܉$K$U܉$)U؉] EU U܈E U܋U؃E `E 8<$)~9~U܃E \$$|$1)U]%ED$ED$$E!‰UU ] D$|-D$E܉$#U܉$)U؉] EU ] D$D$E܉$Q#] %E%U؃EUBE$(E\Bx}t&UE ED$E$ÐUE]@Ðt&UWVS,E H2EEv9E]Eمu+E4 ED$D$2$'U UB U BUBXrBtC$ *EU1~d21۾ E ExUU ;Et!BrB D9BE;]uŋ]U]Sx$@vxlU EB $D$2$D$n$E$D$Ұ2$D$O$U$D$۰2$D$0$,[^_]þ 1EE&'UWVS E MU!ƋA9~9})E$1t%9~MT u1ɋD 9u؃ [^_]UWVS,}D$Ұ2G$;,$E_D$۰2G$,$|$bE$EE~1ҋD D MD 9u]E9E~GU)1+UUED D$G@xD$M $";uuЋED$ UT$G$D$޼MËt7Ut ,[^_]ËB$P,[^_]1ۃ,[^_]ËA $P뾋UuۋB1ۉ$P뱐UU Mx;Q} D D D$3$9I1Ðt&UWVS uD$Ұ2F${*$~219t'T tuD P$R9uىu [^_]\wU]]u$^D$2Ƌ$)$YF]u]Ív'UWV1S }G!É$t~1fD D 9u΋E 4$D$}Ëu F4$P [^_]Í'UWV1S }G!É$t~1fD D 9uΉ4$WËu F4$P [^_]Ít&UHED$ED$E]u}D$E EED$ 2D$ $裂u1]u}]ËED$0$ tډEEt"@=x2tD$x2$fEPl2tD$l2$EMpD$2$($h UD$Ұ2Ë$'$E MD$۰2E؋$'$! ;]؉9|;uM $[UD$2E܋$n'$ M܅AE~M1E@ U܉D 9t+EPl2tD$l2$uċED ĉuM9M~_E܍t )18&MAx$D$&tE؃+E9tUuȸ2ڋE҉tcE;uM؋Ut$L$ B D$D$3$BE҉EP$R1vEP$R돋Ut$\$ B D$|D$3$+B롋M؋Ut$L$ B D$D$rUB D$PD$3$A[vUWV1S }G!É$ t~1fD D 9u΋E4$D$E D$&aËu F4$P [^_]ÍUWVS }G!É$p Et.~1ҋD D 9u4$IEt E [^_]ËF4$PE [^_]ÍUWV1S }G!É$ t~1fD D 9u΋E 4$D$=Ëu F4$P [^_]Í'UWVS }G!É$p Et5~1ҋD D 9uE 4$D$ux ;~t&|9t tV3D$X$ ?뱍vC$P늍P X t t1뇋B$P1wC$P럍&'Uuu]] F=`2tD$`2$t>x;^|'D$3$b>1]u]ÍD ]u]D$d$%<1ʍv'US]C=`2tD$`2$t C[]D$Y$%;<ߍt&UVS]C=`2tD$`2$tc$ 2F1tHF^ ^{t $豾C1F1@C1X[^]D$"$%;1፶U(}E }U]uEUG=`2t-D$`2$u22]u}]ËMA=`2tD$`2$tƋ_Eۋp~ME~BD$UMD D$D $a|t E;]f^}vh1yE;]~;u~}}tHUM]uUUD E D }E]CYv;ue묐t&E$G2G219…ҸG2uG21919191919뽃G2G2v'UWVSUBEMs5xQEZ xV4ECBEVBE1NjM}9Mt%u$Auָ[^_]Í|u'UWVSu} $(|$F~a1F9~M~ |$ D$D$$cnD$|$D $jOt[^_]Ãt|$$) 1[^_]É|$$,Ԑ&UWVS u~4$1313~5t(T tuD P$Ru؃~/F4$33ң3t~P [^_]Ë3~`2u@3F B34@3먍t&u [^_]: [^_]:t&UVS]4@3F ,3@31D 9u^{t $C1F1@C1X[^]á@3t,[^]Í9t [^]DB ~\$$`2v@1tQ35@3UD$ $%n61닍v'U(E}} ]u{`2tHUt(D$$%6]Ћu}]ËC$P͐S҉Ut;vu9}t,Mu)<$+Ut1랍CP@CCCP9}~Bt EEE)9Ettu؋P$Rˉ|$$.9}|SE^0{t $C11҉F1@C1XC$P M+}D$T D$$ yM$-wfU8uu]M }UE`2tqT$L$$`2u1]u}]Ëx4$|$tۅ~1fD D 9uuC$P뫍ED$D$ 2D$>T$ $ptEt$"n$[&U]]E u}s!u*t%9ȉtH]u}]|A{`2ttE]u}]؋]u}]É<$mEU1t߅~:M1 t&C~t&DЃ9C9uӋE뜍&'UWVSu ]F=`2tD$`2$FCy [^_]@$E}1tU}C ~!t&DʃDC9N~DʃD9VE[^_]ËF@ D$|D$3$ 11Ս&UWVS E M!ƋEP9ʉ~9Ɖ}u9tD)$1t(EۍO t ~1ҍ9u [^_]ËEx`2uEfU(}}]uwu$_[É؋u]}]É4$1`Ett&12[]Ët.J~19Z u t&9\ t 9u[1][]9uf9t싀fu렍U]]uu}} t t$$ׅugt t$$ׅuPt t$$ׅu9t t$$ׅu"1tu ]Uu}]]u}]Í'UEtǀt1Ít&B$P1ÍvUE]@T%U1]É'UE]P፴&'UUBH,tU]U ] UEP@] UEME]UED$E D$E$U1҅x 22ɉÍ'UUM B+Au )i·m۶]fUS]CP@CCCPS t tWSt t3St tC][]CP$RߋCP$Rt&뻋C P$Rf뙍&'U]]uu}} C t t$$ׅu4Ct t$$ׅu S1tu ]Uu}]ᐋ]u}]ÍvU])&UUB@httÐ2D$ 3$$)1U(ED$ ED$E D$$l1҅tED$ED$E$UɉÍU(ED$E D$$l1҅tED$E$UɉÍt&US]CUuCXt E[]D$ҁ$ t(@t3\$$D$Ѓ[]‰Ã2[2]Ít&[]Ðt&UEtE]ף&22]fUEU @Uttt tC][]ᐍt&P$R׋P$R뱋P$R뀋P$RWP$R*t&P$RP$R&B$P&t&'U(]E ]u}ESC4CU@4$!Džt$D$<$QCUs_CU@t9_{t $輛C1G1@C1X]u}]É4$IDžn]u}]&EGut&sbUWVS1}tW;VtHF;t0;Ght;Gu;CuE%;Chu݃v;uȃËO;NuE;uGhE;FhuGT%@EFT%@9Ex9t9Sk9KaU9RE9ChFCT%@;E5K'UWVSEEPUBU@untM $ЋE0~ [^_]fMQp uȋPp tE$ҋUuBUH[^_]$313>Exp uxp tUZhE싐] {t $C1UB1@C1X$ME~A=33t-3[^_]ËHhjM $ZCMCQQABEXǁp u|WUt`G@~X\81 9utE{uCuMKMtڋE9uu&_p tU싂t6u,M $ttGU@t?u ~t $nF1UB1@F01pM $ӋUrB$PdB$PM $PWfGB$PfIt&'UWVS8EVEu҉UvɉMۉ]fEgkm2ta‹KMċBEC+z!ChEtzhu 9Etu 9EE9EJE2 2]CS][EXhtE@ht&E䋘tE苀f9u UURv]CKm][_EXhtE@hQ&EtE䋀f9u UUJvGW][_htE@huC9RtEu C9#9u }Wt&]CKO_DEXhtGhu C9EtuC99 E8[^_];MVUЋF{yFhEt{hu 9uE؉EЋEtu9EuEԉE9M@]KM܋CO^DEXhtFhu C9u]܋Etu C9Eu]9U]CS][EXhtE@hu C9uދE싘tEu C9u9]CK][EXhtE@h &E苘tE싀f9UUJ9uM;AzUURl9;FuN9;G}E8[^_]Ð9xM;Al]&9U;Bft&9XM;AfJ9t&9U;Bft&229;CSt&E2 2NE22E22JE2 222Y 22C9C9C9IBC9C9%ލvC9R#f;BNffẺEĐt&(EȉE?UWVSӃlT$E$膑:[]S҉UEEU\ E\$$C[]CEVEUE\ U\$$[]S҉UEEU\ E\$$轐q^[]CEEUE\ U\$$z.;[]S҉U]EEU\ E\$$7[]ċCE EUȋEċ\ U\$$[]ЋS҉UEEԋUЋ\ E\$$豏|i[]܋CE~lEUE܋\ U\$$v|.{wv~(19tT Eyl[^_]ÃEU9UuEE9ESEU9UEE9EEU9UZEE9EEU9UEE9E^1uvE\$$A?.Qt&U\$$!?E1t&E\$$?ht&U\$$>t&E\$$>t&U\$$>t&U\$$>3t&E\$$a>qE\$$E>&U&UWVSl3ol3UEBtPOɉM~F1't&U$T$[uC9]tD x I2uЋ@ ы l3MED$ 3$.1[^_]Ë@E $t`$t:x D$D$4$dNjtyuF4$P녋u G<$PgXF14$PJMA4$L$D$҅E C$Pt&t$pl3x'UWVSEM t`MU MBtYOɉM~O1(t&U$T$u@9ut#D x I2uЋ@ щ$cpUu1tG[^_]Ë@t#MA$L$D$҅tǃ[^_]Ã؃[^_]ËUD$ 3$"[^_]Ð&U3E ]uu]Ћu]ËE$D$E D$bƋtitȁ2t<3D$$$gu"uF4$P됍&1҃xF4$P1hC$P댍t&U(3]]u} tw$1t!D$D$4$aNjt%t]u}]ËF4$PC$Puߍ&$3zt*t]u]}]5B$PD$F31$Cg&'U}׋3],3ىutz|$1$t!D$D$4$`Njt+t]u}]ÐF4$P名t&C$Pu22뷍&U]]uu }}Cxd t%Fxd tM22]u}]É=2u22u2$2P맋 2ډ=2u22u2$2Pw&UX3<VSEtrL3P P ;8,3LED$E $D$D_ơL3h t[^]Ðt&C$P[^]$8Rdt1[^]ÍvUd3庋VSuu~i`3u M0\3t'3D$ $[^]Ít&B$Pΐt&D$D$$bƋtBt4$Ët/uSu4$-܋C$P볋F4$Pt&&'Uh3庨VSut@D$D$$faƋt [^]ËC$P[^]t$F@ $# D$[Ɖ^]Ít&Ul3uui] tJD$D$$`Ƌt ]u]ËC$P]u]Ít&[]uu]v'U3uֺ0]}u]Ћu}]Ðt$1$t!D$D$$4\NjtMt72uF22u2$2PuC$P뾋F4$P맅tC<$&Ëu G<$Pt|  t f Ut$u$] Fx( t&Cx( t*9޸r$t$]Éډr¸|Ѓōt&'UWVSE=3@E3EUt=~~61 U$T$u99tD x I2uӋ@ ԋE쁸 tOUE[^_]Ë] tLutGUxJ~19r t 9t;t uM؃[^_]Ë=@2uE9xGUu[92<$URf9ut&9uҐtfJC1;r u]&;t L9u;u#U9 u9&9u$ 1b3(Ft&'US$E]E$*D$ u $[]ÍED$ED$ E D$@2D$*$D>tȋU2t1Ʌu$EECEKC 11E܋E#tEƐt&U(uu ]]}t2tC t؋u]}]ÍS2tt$ CD$$D$xCu1D$D$$2\2tًCCӉr zBnvUWVS,EU EU܋HɉMB= 2t8@UJ~& 21;Z t 9t;\ uE܃x U䋒҉UJɉMEMP1;Q u&M;T t ;EuEEU9U}m1EM\ s@2FUt1tpJ~1z @2u m| @2tc9u I2E+E9uM܋EM E,[^_]= 2ut=@2uU܉$T$t@t3UB ;B҃!ЋUD$$T$щƋtC,[^_]ËC 뙸 2=2emƿ  #PC$PvEfUWVSÃEUM$D$хۉ]S҉UE6vx2=2E4$D$toEE9EUB Ux2tًt>F=x2t@Utt]J~x21;Z u;\ t9fuU$MU v[^_]Í=x2Eu뺠x22u)1[^_] UWVS,EԉЋRcUaMԋQ4MdʉU|EEEEEԉ}䋘{1&U$T$9tvD x I2u͋@ ΃};xt,[^_]Åt;uu E@E؋AU@ ;Bu1}ԋYGU9t2u]܅t};yu\IM܋}G9E})M܉tjUucM܋U ,[^_]Ë@=n3tm=2(MIME롁}Ww3MUԁMR0M؋U ,[^_]Ë}ԋMW8X^}_;3t>233t$2 Bt9uBu3115}-dW4tt8t Ƌ3l@=cw=Wv }-XW8=UvR0-뤋Ax E迺)pUԋUQEԋt-r91;Z u;\ 9u9]fUԋ9ufUVuS] tSu[1^]Ð&UWVS uU4$T$U T$Ѕt?@2_CUt*t*J~19r uD9t t>9vu [^_]9t&t9tu2űt‹U<$T$U T$Ѕy1똍U B=`2tD@UJ/`219Z tt&9;\ uE xE)UB=x2t<@UtkJx21;Z t9;\ uE$st =`2uq`2=2ajt<=x2u몋G<$1PzF 1D$D$3$Wx2=2gUWVSD$E$EX 2t\CUBzJ~1z 2u 0| 2t&9uUEt&UBU1tqUE2BUtnEtuEǢ EUB D$E$*D$蜡ƋUtE[^_]ÍvEEiuUB D$E$*D$EƋuC$P[^_]Ðt& 2=2UBUZ D$.$tX$VtZ= 2uB$P.CD$ UT$E$ *D$蕠ytE$SZ 2=28QUWVSE} @U=_ 2twCUte؅J~ 219r uL;t tF9uC D$ UB D$<D$3$[^_]ø 2=2u_$>;GuTU҉t)EX 1[^_]Ët9= 2u밋UP$Rá3D$$T뵸 2=21k@ D$$*D$3$zUB D$:*D$3$Q'UWVSEtCUB=@2tB@Ut0J~@219Z u;\ t9u$l!mM A=`2tp@Ut^J~`21;Z uG;\ tA9uU1B D$D$3$[^_]Ív`2=2uƋ] [ۉ]~M y w@2t{FUt2tXJ~@21;Z uT;\ tN9t&uF 1D$ ]C D$D$3$[^_]Ët=@2uGUiJ]19Z t9]9\ uBUu]1D$\$E $XhE\$<$D$UƋ@C$P2=`2u=@2u9}P}2v@E1P G D$T$D$D$ 3T$$:[^_]ËM;B 1D$G D$ A D$D$3$d9}uXfH9Eu`2=2jvUhED$E ]u}ED$S*$,u1]u}]ËED$%$hVUD$ $KD$%$1Ƌ2D$%$Ë9t/D$<$HƋCG<$P5}3u$RyP33$ED$*D$*$D$ED$ WYƋC$PC$fPF4$fPvKG<$Pf;MD$  $EAED$<$]D$$pGNjbG=`2@UDzJ~%1z `2ux| `2j9u롬3D$@$`EEEEEEEEM1tE܅tU܋EЅtMЋ}؅tU؋]ԅtMԋM̅tŰUȅtMȋEątUċE}MkA $P]=`2uUD$d*$D$$uEE؋`MEEEXl2CUF_J~,1z l2u]&| l2H9u2E2x2[CU.J~%1z x2u,| x29u2E233$3EEED$*$jE"_C$aE^UۉP ~1ҋD M܉D9uEȋŰM$D$E܉T$UL$ D$T$ֱ=l2uU$PEMYC=x2uED$.D$>$ `EEEE|G1<$Pt&^`2=2Dl2=2,A $PG<$P$C$PHB$P A $fP)B$fP2A $fP;B$fPDA $fPMB$fPVx2=2$RfC$PEEEEEMD$K $EUB=@2t]@Ut,tEX 2tVCU.J~1z 2u *| 2t 9uUrEUBU1teuUǢ UED$UB $# D$ƋUt [^_]ËC$P[^_]ø 2=23UBULZ D$.$8tX$B2t= 2uB$PgED$ CD$U$*T$:-ED$UB $# D$E$S 2=2^rfU]]uE }uz t]uE }]]xuSt׋F=x2t9@UtctjJ~x219z t9t;| uv4$舫tD$( 3$]1u}]øx2=2tSt=x2u묍UVSEu $zF=x2tm@Ut[J~%1z x2uE| x2t59u3D$$$[^]øx2=2uӋ҉3t t 1[^]fB$P1[^]Ët =x2u뺋뻸x2=2y뤐t& 3D$)$K뛍t&UWVS D$J*$s 2t?FUtHtTJ~ 21;z u;| t9ut:1ۃ [^_]Ðt& 2=2u؃ [^_]Ët= 2uȉ$1fV뼸 2=2u4$t&F돍&'U8ED$ED$E }}]uD$ D$D$.$ u1]u}]ËE$ϝt*x-Et$<$D$Ut^22u7G@4t4t.<$Ѕ4xut&zv뜾ސt&X뒍&'USE ]Mx`2uNPt/3T$ D$D$*$1[]ÍE@ ]E []ᡜ3D$L $1[]ÍUWVS,EPT1>M QT EH M E9t3M_22G&M-dQ4t#ttC<$D$CC tC=cw=Wv M-XQ8=UvR0-뒋t@2uUC9u<UBTπBT1,[^_]ËUtD$)$譵]CtM[  t$E$TÅ\$D$M $zVCT$]$tF@tًFu vD$D$4$rt*$mË\G<$PSMaT,[^_]Ë\$D$E$&btΉD$C<$D$蝪xF4$P21҅t02$;Cu뀶2iӷm۶D$ p{ D$T$$2轨t37]Cxt{to StaT$<$貳u\$E$ObD$<$D$質uF4$PSuUB|{to StaT$<$)u\$M $FaZD$<$D$*@uF4$PSuE|$]{PEX4aEXTATڃ9tUB0E@4)Ex0UAru@u AU@%ATt2E]SsuACUBT@ATt Bh]CT%ATtwEEPU~_Mt F=@2@Ut7J~"@21;Z u~;\ t9u9}u]CT%D=Du= D$ҁM$M]t5s0;EH4 ]C8E@PM_ۉ]1D P@2BUkY1ҁy @2ub&| @2M9u9uuvRC$Pft$U$<]$ O=@2u]S0N0{0!ËBnB7B J B B[ B$ B  B$ B( J,H B0 B4 B8 B<l B@5 BD JH BL BPY BT" BX B\ B`} JdF Bh BlBpBtjBx3B| FTt>MQ0A~MQ4N4t}{4!ËGBBB BkB4BJB B$^MQ8t7^8t0y8!BrBMQPtB^Pt;yP!ZBB uE@]C]C EP$V]C,%][@]SD]CT FTC( ]CT%FTtCl ]Cpu ]CT%FTd ]' ]utt;t U] ] ] ]FTST%@@9(M ǁt&C(F(t ;A(vUB(2"22ǁ2\$$&]‹CBFD2t ;AD%UBDF@t ;A@UB@F,t ;A,UB,@LF$UB$FLBLCHrF C FHCHaFHt ;A;UB0Ft ;A UBi[t ;KU=F8XWt A8;XGZ?FPX }t AP;X mZ fcFPXJt AP;X:Z]SP,FPXt AP;XZEPPt AP;]SPF8Xt A8;XpZEP8bMt A8;>]S81F0tC0; F0tC0;EP0F4H$t C4;H$J$|F4H ct C4;H SJ EP4EF4H,t C4;HJMQ4F4Ht C4;HJEP4F4Ht C4;HJMQ4F4Ht C4;HwJEP4iF4H Pt C4;H @J MQ42F4Ht C4;H JEP4F4Ht C4;HJMQ4 t C4; EP4F0H|t C0;H|J|MQ0F0Hxt C0;HxJxEP0F0Htt C0;HtxJtMQ0jF0HpQt C0;HpAJpEP03F0Hlt C0;Hl JlMQ0F0Hht C0;HhJhEP0F0Hdt C0;HdJdMQ0F0H`ut C0;H`eJ`EP0WF0H\>t C0;H\.J\MQ0 F0HXt C0;HXJXEP0F0HTt C0;HTJTMQ0F0HPt C0;HPJPEP0{F0HLbt C0;HLRJLMQ0DF0HH+t C0;HHJHEP0 F0HDt C0;HDJDMQ0F0H@t C0;H@J@EP0F0H<t C0;H<vJJ~)@21;Z u;\ 9u$rt^|$$7|>1 9T yDžMe3 %L[^_]ËB=@2u닇$ 8tB 49$7H~(P Dž;A <$t$% [t‰$[Džz19u苅@ DžDž 9;P}Ë@ 14JX9~ @ 94t fB9t99ut$$1ɋ@ ;P} @ ;4f9̐t&|$4$J&F4$P&=$C <9xYDž19É F ;H}D$2@ D$$y  $`AB$P-C$PDž $脁D$!D$$"DžƋD$ T$L$$|tp@D$ )D$D$g$s"Ƌt.oF=aƄ5,ƄJC$PǸ)D$D$ %D$g$"똡3t$$臮.F4$P]t&1ۉ$*;Bփ9 B$PVF4$PDžH&B[ z4$mA $PF9>8tq@D$3D$*$u C$Pu B$P`G<$PDžR3D$%D$*$脪fU}lj]ux@23+裤tMD$$- ƋtBt,4$TIËt1]u}]fF4$P׋C$Pt&륐t&UWVSU䋀E@EEHt$E$UUxjEU9UtyUB Ux2t݉x[\$|$$zƋkC$Pb[^_]ËF4$Pm1[^_]É[^_]Í&'UE]t&UWVSlE@UE G} _`2~CUtl؅J~`219r u Sf;t tK9uC D$ UB D$!D$3$ EEl[^_]ø`2=2u] []z'tI2E%EU] | O I2i@2AUt:ȅtlZ~'@21;r uXt&;t J9ÐuA D$ }G D$d"D$3$8EEl[^_]Ít=@2utE@2uGUtgJ~"E;B tX1]9\ tE9uE}9}E Eaf9}t }2u¡3D$$ͨEEl[^_]Ë=`2uR@28EjI2 JQ1z @2u| @29uE}9}&9}Eu-9Eu`2=2]@ D$+D$3$oE2}G D$,"D$3$DE]C D$+D$3$EU/+XR} EU}EEUU }E)8$5"‹E1Eu C$P]sxb}\ C=@2@Ut?J~*1z @2uXt&| @2E9uuE XxeU D P@2BUtAq~,1ҁy @2u&| @29uut3L21҅2 ${Cu$ &֍=@2hu@24ujt&ED$ED$D$ D$D$.C $E҉*EU쉐E$葫9|u C$P}҉uP$REu B$P]9UtuP$RE}U]E&U舂 E2S C }9xuT$$+EP$R뀶2iӷm۶D$ p{ D$T$$2yt322t3wue21҅t02$$ Cu뀶2iӷm۶D$ p{ D$T$$2Myt32Uąt2 vt ;puUąt-]ȁ2Jw =2vB;HtSu֋Eąt]Ĺ $E腫}u G<$PUu B$P]C$P$ ^#'UWVSEMU e5u11ɉZt $s@2t9؃tO3D$9+$衡1Me3 Ĝ[^_]Ãu…uP BBȋD$ D$D$x2D$`2D$D$ 2D$W+T$ $~ 1vD p I2t3CU9t%2tFU9t 29u9n= W$L$t$] 5 D$J*$襁 D$D$)$x1eJ~!19Z uIv;\ <9u3D$"$蹟1ft-J1;r u;t 9u9v9u9uf|9u @U. D$b+$A1Džyhu1y=G= 2=@UJ~$ 219Z u ;\ 9u$: Iɉ WX1B@4@t F=@2@UJ~"@21;Z u;\ w9u9u9tH DžDžDž\ C= 2X@U>&J~%1z 2u)| 29u롬3D$l+$菜҉NB$P1= 2u닅$D$j=@2u닅9D$4$ g\ C= 2tu 2=2{sf1$tBU92E D$ +D$D3D$6D$<$=2kM A;G\2272$2P#S{1;K u f;L t9vu[U >ZKDM |$D$ +D$@3D$> $=22122$2P9t9puv'UWVSE,EEt]MU MBtYOɉM~O1%fU$T$7uG9]t&D x I2uЋ@ ыE $Uu_1,[^_]Ë@MA4$L$D$҅tMtM9u`$90ÅtD$\$4$/Njt"{F4$P,[^_]ËC$PӋE $D$뛋U1D$ 3$^-Y'UEMU tST$D$D$ +D$3D$+ $E…ҹt 1ɃtɉËB$P1ɉÉT$D$ +D$3D$+ $fUED$ _D$ 3D$E$Ðt&UEMU tST$D$D$ +D$D3D$N $…ҹt 1ɃtɉËB$P1ɉÉT$D$ +D$H3D$Z $6fUE D$ +D$T3D$+D$E$Í&'UE D$ +D$p3D$D$E$Í&'UE D$ +D$t3D$D$E$Í&'UE D$ +D$3D$D$E$@Í&'UE D$ +D$3D$D$E$Í&'UE D$ +D$3D$D$E$Í&'UE D$ +D$3D$D$E$Í&'UE D$ +D$3D$jD$E$@Í&'UE D$ +D$3D$D$E$Í&'UE D$ +D$3D$D$E$Í&'UE D$ +D$3D$D$E$Í&'UE D$ +D$3D$D$E$@Í&'UE D$ +D$3D$D$E$Í&'UE D$ +D$3D$D$E$Í&'UED$ _D$3D$$Ðt&UED$ _D$3D$$WÐt&UED$ _D$3D$$'Ðt&UED$ _D$3D$$Ðt&UED$ _D$3D$$Ðt&UED$ _D$3D$ $Ðt&UED$ _D$3D$$gÐt&UED$ _D$3D$$7Ðt&UED$ _D$3D$$Ðt&U(U]]uu }2t2C@0t xC 22]Ћu}]ËKV9tVB0tOxC EA0t xC tg}t\$D$ +D$3D$4$E븉T$t$D$ +D$ 3D$ $YEtBUuz92t$D$ +D$3D$ $a=2F;C22&2$2PW~19O t9s;L uAW\$D$ +D$3D$4$=2^2E2 2$2PE9zuf9uRt&UEMU tST$D$D$ +D$H3D$F $u…ҹt 1ɃtɉËB$P1ɉÉT$D$ +D$L3D$) $&fUE D$ +D$P3D$D$E$Í&'US$E]M Ut_T$D$L$D$ WD$X3D$9$…ҹt 1Ƀt$[]ËB$P$1[]ÉT$L$D$ BD$\3D$$B룍&'UEMU tST$D$D$ mD$`3D$F $…ҹt 1ɃtɉËB$P1ɉÉT$D$ jD$d3D$) $fUED$ BD$h3D$]D$E D$E$iÍ&UVSD$ _D$p3D$E$5t_$W$Ƌt=t x[^]Su.3D$n$9][^]ËC$Pf[^]Ít&UWVS,E@EL3P3zL3EU싰tC~~<1&vU$T$*EuY9tD x I2uЋ@ ыE@H> U ED$ +D$T3T$D$+$Ã,[^_]ËP3EUtF~~?1 U$T$*u|9tD x I2uӋ@ ԁx ucE UD$$bÅu 3$hm=RE UD$D$ ET$$@xn3tU D$$T$ UT$$+.P3m1$BL3@1v'UU z`2u.Bt?D$ D$D$*3$X1ÐD$L 3$Z1D$B D$E$Ux221É'USE x`2u]@t+D$ 31D$D$*$W؃[]ËE$UugPuࡄ3$Wэt&31D$L $ Z؃[]ÐUSE ]Mx`2uNPt/3T$ D$D$*$^W1[]ÍE@ ]E []ᡜ3D$L $Y1[]ÍUSE MUx`2uW@u $҃ta][]G$&D$ 3D$D$*$V1[]Í&3D$L $X1[]Ou딐&USU M]z`2Bt+D$ 3D$D$*$*V1[]fAR ut&t @Ufu;XLuHD$T$ $Ӆx/2[2]á3D$L $X1[]1뉋@ D$ZD$(D$ 3$U1^U(E}}]uEE x`2Pt0T$ D$D$*3$/U]1u}]Ë@ Ep;~(tgEFUHu69tW2tOA V D$$D$ T$D$3$T뢐tgZ~1;J t 9t;L uED$E$׉%M^]u]}]!D$L 3$V09tK9tu8v'UU z`2u^Bt'D$ D$D$*3$S1ɉD$B D$E$Ut-22ɉfD$L 3$ V1ɉ0L1҅uƐ&USE ]Mx`2uWPt/3T$ D$D$*$NS1[]Í@ $D$уt*][]3D$L $kU1[]Kuː&U(U }}]uz`2uuBt0D$ 3D$D$*$R1]u}]ËB $txۉx>D$t$<$Utq22붡3D$L $T1띋G@4t<t6<$Ѕ4x!uvJt1iJtþfۉJvt1@&U(UE ]]u}UPtPx`2t$D$L 3$S]1u}]ÉT$ D$D$*3$oQ΋@ $tMxM} u]}]]C@4t6t0$Ѕ<xuIqItǿ؍v'UE UMx`2u8@t%D$ D$D$*3$P1ÉU፶D$L 3$R1Í&US$U z`2u3BtJD$ 31D$D$*$BP؃$[]á31D$L $R؃$[]ËB EED$E$U|0t22$tEC EC1늋E҉u EP$RE҉^EP$RM U(E uu}}]x`2Pt3T$ D$D$*3$2O1]u}]Ív@ ENATu1@@UtHthZ~C19J t9t59L uvMu ]uM}]፴&9t܁2tԃ22svt9ufD$L 3$P1BfU(E uu}}]x`2Pt3T$ D$D$*3$"N1]u}]Ív@ ENATu1@@UtHthZ~C19J t9t59L uvMu]uM }]፴&9t܁2tԃ22svt9ufD$L 3$O1BfUSE ]Mx`2uGPt/3T$ D$D$*$M1[]Í@ ]E []ᡜ3D$L $KO1[]ÍvUSE MUx`2uW@u $҃ta][]G&D$ 3D$D$*$L1[]Í&3D$L $N1[]Du딐&USE MUx`2uW@u $҃ta][]w&D$ 3D$D$*$K1[]Í&3D$L $N1[]>Du딐&USE ]Mx`2uNPt/3T$ D$D$*$^K1[]ÍE@ ]E []ᡜ3D$L $M1[]ÍUSE ]Mx`2uNPt/3T$ D$D$*$J1[]ÍE@ ]E []ᡜ3D$L $L1[]ÍUSE ]Mx`2uNPt/3T$ D$D$*$>J1[]ÍE@ ]E []ᡜ3D$L $dL1[]ÍUSE ]Mx`2uNPt/3T$ D$D$*$I1[]ÍE@ ]E []ᡜ3D$L $K1[]ÐU1Utt&Ru]Ít&UEM U@ t U E]t&]1ÍUSUeE1XBD$@@ T$ D$43D$D$$腾$ͲUe3u [](vUS]C t$BSK 2t6BPh;t_SC2tCBCtPCCttC ][]PBA $Pᐍt&C뚉'U(ED$D$E D$ D$D$ $,\ɅfUSM}U t22[]ÐA;BuY2tB=2tEE ][]g9ѸG2tG2븍UED$ 3D$3D$E $1҅t EPɉÐt&Uuu]^t ؋u]]ËF=2t$OÉF؋u]]D$43$I뺍vUVS0ueE1F=2D$J*$U5@= 2D$ 2$uuFD$D$@@ t$ D$X3D$D$4$һtu C$P4$Ue30[^]ËVBH ؃tWt$ D$T$L$D$|3D$4$Z늉t$ D$4D$4$6wt$ D$T$L$D$X3D$4$,>t&2%US]t/C= 2tHD$ 2$Xu4C=2t*=2t#D$K$44E1[]Í&C[]Í&U8ED$ED$E uu]}ED$ D$D$)$X1҅UB@T@Hh}2Xht B 1ҋED$4$1҅tKUEA҉AtQ }t p AAtH ʋ]Ћu}]Ë@ D$3D$3$C1с 2aYEB"1z 2!$ 2aAAlj1Ɓx 2t>V2t/2t'/BQABtHJ'ߋptV tÉ묍v'UWVS}u G@T@PhUt Z 12$ 2Mtw@xts $<<$jC2UP 11BSCBtXZ[^_]1c@ D$3D$3$A1[^_]ÍvC2lt&z 2P22xHW tR18ɉ@CCtXE;t׋t7"x 2tW221C$P뾋BBH 52vU(}}uu ]G@T@PhUt Z 1ҁ2$ 2Kt^@xts $:UH 11҅BSCBtXZ؋]u}]1w&@ D$3D$3$?11z 2!PDžpJ tR1`trt\mMCCtXUHx 2tJ221C$P뙅CCtXEUS]M UC=2tF=2t?A=2t]=2tVtB=2tU=2tNUM ][]醠[2u3D$3$@1[]ËI2u֋R2uɍ&'UEP2t2t ER@=2uD$33$,@1Ð&UMU A=2t*=2t#B=2t==2t6U MJI2uD$33$?1ËR2t܉U MJt&UE@=2t ETD$33$o?1Ít&'UEM U@=2t#tUM Ett&M ED$33$?Ð&UMU A=2t*=2t#B=2t==2t6U MI2uD$33$>1ËR2t܉U Mut&UE@=2t ED$33$O>1Ít&'UE@=2t EtD$33$>Ð&UE@=2t ED$33$=Ð&USE@=2t E[]3D$3$=[] UE@=2t EdD$33$?=1Ít&'UE@=2t E=D$33$<Ð&UMU A=2t*=2t#B=2t==2t6U MI2uD$33$<1ËR2t܉U M鵰t&UMU A=2t*=2t#B=2t==2t6U MFI2uD$33$<1ËR2t܉U Mt&UMU A=2t*=2t#B=2t==2t6U M閯I2uD$33$;1ËR2t܉U MUt&UMU A=2t*=2t#B=2t==2t6U M鶮I2uD$33$;1ËR2t܉U Mut&UMU A=2t*=2t#B=2t==2t6U MfI2uD$33$:1ËR2t܉U M%t&US]M UC=2tF=2t?A=2t]=2tVtB=2tU=2tNUM ][]鶤[2u3D$3$91[]ËI2u֋R2uɍ&'UMU A=2t*=2t#B=2t==2t6U MI2uD$33$`91ËR2t܉U Mիt&UMU A=2t*=2t#B=2t==2t6U M&I2uD$33$81ËR2t܉U Mt&UMU A=2t*=2t#B=2t==2t6U MI2uD$33$`81ËR2t܉U M鵨t&UMU A=2t*=2t#B=2t==2t6U MVI2uD$33$71ËR2t܉U Mt&UMU A=2t*=2t#B=2t==2t6U MVI2uD$33$`71ËR2t܉U Mt&UEP2t2t E;@=2uD$33$61Ð&UEP2t2t E@=2uD$33$61Ð&UEP2t2t E@=2uD$33$\61Ð&UMU A=2t*=2t#B=2t==2t6U MfI2uD$33$51ËR2t܉U M%t&UMU A=2t*=2t#B=2t==2t6U MI2uD$33$p51ËR2t܉U Mծt&UMU A=2t*=2t#B=2t==2t6U MvI2uD$33$41ËR2t܉U M5t&UMU A=2t*=2t#B=2t==2t6U MfI2uD$33$p41ËR2t܉U M%t&UMU A=2t*=2t#B=2t==2t6U MVI2uD$33$31ËR2t܉U Mt&UEP2t2t Ek@=2uD$33$31Ð&UEP2t2t E@=2uD$33$<31Ð&UEP2t2t E+@=2uD$33$21Ð&UEP2t2t E;@=2uD$33$21Ð&US]M UC=2tF=2t?A=2t]=2tVtB=2tU=2tNUM ][]6[2u3D$3$21[]ËI2u֋R2uɍ&'UMU A=2t*=2t#B=2t==2t6U M6I2uD$33$11ËR2t܉U Mt&UMU A=2t*=2t#B=2t==2t6U MI2uD$33$11ËR2t܉U Mթt&UMU A=2t*=2t#B=2t==2t6U MVI2uD$33$01ËR2t܉U Mt&UMU A=2t*=2t#B=2t==2t6U MI2uD$33$01ËR2t܉U M՜t&UMU A=2t*=2t#B=2t==2t6U MƥI2uD$33$/1ËR2t܉U M酥t&UMU A=2t*=2t#B=2t==2t6U M鶓I2uD$33$/1ËR2t܉U Mut&UMU A=2t*=2t#B=2t@=2t9U M&NI2uD$33$.ËR2tىU MMfUE@=2t E7D$33$/.Ð&UMSQY A 2t6BPh; t2QA2tABAtPAAY []ËAǐUS]SK 2t6BPh;t^SC2tCBCtPCCttC 1[]Ít&A $P␍t&C뛉'US]$$SK 2t6BPh;tfSC2tCBCtPCCttC C][]ᐋA $Pڐt&C듉'UWVS,Ut B@T@uD$m$44*,[^_]Ë@h~݋ u׍tB "Ӊ1t&@uQ"ESs C 2t:BPh9SC2tCBCtPCCtA\$D$4$uNu F4$Pu܅ED$ED$E$] 6$ E?wSC2tCBCtPCCE9utWEK\ UC DSC 2t̋BPh;uC돋/G<$P!1;ut׋\tD D$$D$趩t>uNjB$P뼋C^ED$ED$E$g $&늋J2AHh;JB2tBABtHBBbB J2qAHh;JB2tBABtHBBۉ/}܅ED$ED$E$|B$PB$4$%BkU]ÍU3]ÍUE]U u}H M@z R~?~;19u ~'~#M\L9t9˸} 9]u}]fUVSuFt[^]ËV ^x1iCB39u1؃tF[^]ðt&UE]@Ðt&UU t E@]Ít&UVS3t133t!3tuԋB$Pɋ3uL$Vvt=C 3t$USt׋űCP$R$Uu33[^]ËB$P9&US]{@2t>C $rUSt tC][]CP$R߁=3{3Stt9uEvG$uډ$uΉ$/tuE [^_]419uwEE [^_]$tU [^_]$|1҅tڍt&UWVS EPp ~@td<9Er B9v;$}u?$u3Eu؉$t̃9EwŋEE [^_]ZE [^_]G$E [^_]&UWVS EPp ~@td<9Er B9v;$mu?$Qu3Eu؉$t̃9EwŋEE [^_]E [^_]$]E [^_]n&'UWVS Ex@ E~)X1C$s;Ct CE9u܋E [^_] UWVS EXp Eu E [^_]Ë$Eu;{~19t΋D$5tD$DEЋ$E밍vUWVS Ex@ E~cX1C$1CE9t=C$uҋC$t؋C$AC9EuËE [^_]Ðt&UWVS Ex@ E~)X1C$;Ct CE9u܋E [^_] UWVS EX @tw<9sc1"4$F4$,t(9v=ҋ3u؉4$4$u؉4$ủ4$1҅u9wø [^_]Ë$1;t [^_]Ít&U1ɉWVS] }u~1ҍ1<9u1D$$hEtEEtEE]Wf1ہ~Ɂ ܀؋u1EtU mEE[^_]A@T'UWVSu }$D$g#@EE\AUAAAA AAЃAA ~cn~F \AuAAЃAA띍vE+M$L$dE[^_]É'UWVS,DU܉M؉D$$f1҅M؍PE5p@]\BUBBBB BBȃBB E؋tE@9tc\t^S~Z \BuBBȃBB낍&\Jmf   A^ :E؅t E@E)ET$$蒀U,[^_]@uEE܅~)]܉7'uA'tru'UU)ȃ\Bx0BB\Btz\Bnk\Br\"t B"tu"ut&'UE]P@ I'U1ɉEU ]/ UWVS} EeU1ҁ,0Dž<@f1 t&9~90v~Ѓ?ȀA9Nj<Y)느&U8]ӉuΉ} }EM D$ ED$ED$E$u1]u}]Ít&D$D$$Jtы@=`2tD$`2$EU D$ t@D$@2$T$D$Nt'U xy9E}PD$3D$7$`NC$P1@$8&EtEC$PEzzt@D$3$ut&U$]u։}%4$D$Ƌ2F=g2tCD$g2$u/F=@2tD$@2$th71]u}]ËFx=~ᡬ3D$D$8$t8붋C$PTf12뜡3D$D8$! 뽋F4$Pq3$tu1N&UVS$4$D$訨Ƌ2tut&D$D$$Ht@=`2tD$`2$ED$ED$ |@D$@24$D$H U 9Uv"EH MM(xE)9E}7U9}ЉD$E$$M$M(B U,EMEE U E M,U\$T$$-M,1ۋE(8`vMUL$MU D$M؉T$D$ E $D$6]4$,F7F4$P)U҉U3T$D$7$*뵡|@D$3$ 땐&UWVS\E EE&M …E@ EEljE܋E} M ɉM}t }EEU9׉vK)ЃE̋] U (=EU܃E9׉wEt]ȋMEtE+UUME+B $D$U؅tAUԅtU\[^_]Ã} ~']S E9+U4BE+EEUM܋E+B UEED$$ED$ ED$EԉD$ED$EL$D$ M L$E5$D$EyrE҉*U؅tZUԅt1\1[^_]ÉڃUEEEt&EJ+U+E4UE=wMEE Ӎ$V=Uw=U ٍU+U4BEUл4+EPUE~UEUEE6EP$REԋP$RE؋P$REԋP$R1E؋P$Rvt&'UED$D$ ED$E D$E$"UWVS\E E}EU E@ EE EE̋M9Mv&ӃEEM9M̉Ewڋ]tE)UE+B D$E$"U܅tU؅t)uE؋P$R}t EE\[^_]@19EudE )M4EUE+B UEED$$ED$ ED$ED$E؉D$ED$ED$ E $85|$D$EU܅t*U؅tE҉\1[^_]Àw $=ȹ8)EE,ȹ5)EEȹ5)EEQ%ȹ+5)EEQ%ȹ+5)EEQ%t(ȹ+5)EEE܋P$RAE%uAE%u؃?e? eЋUăe?E=v*ȹ4)EE؃?v^EuEAE% ؃?e? Ewȹ4)EEȹ4)EE~EP$R12E؋P$RE܋P$RUED$ D$E D$E$Í&UWVSlEEEEE EM …@ } }E&]9v#\twE҉ECE]9w݋UME+B $D$U܅tU؅tUl[^_]É؉+EEE\9։EUO \tۉ)ب;93ut U%M1MM:uE̍BEE+H EEEEDMčBЈE} D ЉEvB<T UvL ɉMăEMȍF9M̉EuMDXu+uEUuD$$ED$ ED$E؉D$ED$ET$U܉D$ M L$E=5$N5D$EfUtU܅t tiU؅uDl1[^_]ËE؋P$RKE܋P$R$EUĉEEuE؋P$R1 E܋P$R눋EP$Rfct&'UWVS,] uD$$I,[^_]ËU $D$I1tڋM UU11EMԋEȉM1ɉEfE؅ҋ0+F~wzA<to}t<te}u[EEԃEE9E )ȉ?8C-C+ED$E$dE<u ?+8C?8CmF~wuA<tj}t<t`}t<tV)ȉ?8pu+t /t-fu-11҃1 vv?8wEM9M EM܋tF~BA<3Mt<$Mt<pu+t/t 1҃--1҃+C-,-+EYUWVSlEEEEE GM …gE@ 1ۋU UEEEUEE9EuąUME+B UEE EED$$ED$ ED$E؉D$ED$EL$D$ M L$E5$5D$E ;u9uT>ɉMЉ<-t-MЃ}+‹H EĉɅM<+EЃ~UЀAEEEUE+B U$D$U܅txU؅tQUl[^_]þ|5EUME+B UEE+EEED$$ED$ ED$E؉D$ED$EL$D$ E D$M4$L$E5E5?/t}`EЃGe EȃFEwEEEv}̃uEȉЍ$=wȾ_5E_5EE>zF|5E+EEF9EEv ~-E1EM}@~uEЃA+U܅tu E܋P$RU؅tu E؋P$RE҉thl1[^_]ËE9EwEEЃ8-uE-EEEFEE+EMEP$R1E؋P$RE܋P$Rt&st&'UWVSlEEEEEE EM …X M M]MċM9Mv)t&\txE҉XAEM9Mĉ]w܋UME+B $D$QU؅tUԅtUl[^_]É+EQEAEAU t%t}}] ]uu]\30]1u}]ÐUS]C=@2tD$@2$ܺtS1ɋC []1[]É'UWVSLU EuEÉE@=@2tD$@2$W[^E] ]@ Et&E9EU=3+M)ȃF)Mعh6)EE}+P EUU܉D$$ED$ ED$E؉D$ED$E|$D$ E $x6t$D$ERUt U܅tU؅L1[^_]ËU}E+B <$D$fxU܅tu E܋P$RU؅tu E؋P$REL[^_]ËE߉))MA:Et&BEAEoQ;E؋P$R1듍E܋P$R EP$Rvt&'U8ED$ ED$E }}]uEED$$(Gu]=@2tD$@2$׷tkۉtot$D$<$t<@= 2t2D$ 2$蝷uC=@2tD$@2$t$؋u]}]11ې3늋C@ D$D$3$uC$1PU8ED$ ED$E }}]uEED$$'Gu]=@2tD$@2$跶tkۉtot$D$<$-t<@= 2t2D$ 2$}uC=@2tD$@2$_t$؋u]}]1c1ې3늋C@ D$D$3$uC$1PUWVS ]C=@2tD$@2$ڵs1ɋ{ ~1ҍt&1<9uDD$$54Etq@@teÃ5 ܀؉ˆSCK~%CDEE [^_]fUWVSL}EEoUE 9‰Es]UEfu Eu}9}v7Uċ$u׉$xV}0E}}9}wɋEUtfUt:1L[^_]ÍC=wEEEg]ă9]J}V}t&}@EčU_7+E+]]̉EȍE}D$u̍Et$}ȉD$ |$u t$}$(:|$EE%‹@E܋z ~\Eu uEE9Et;$軽u׉$蟲IU0EE9E܉UuŋEUu؍Eċ?F4$P1$X$6B=w҃}uu۴u;]v U?U]E}}`;]v!uċD$6D$}<$Ŵlj}]EUEP$RL1[^_]ËEP$RC=uulu]ED$ (:E+]\$U)U}uĉѺ_7t$} <$Et$#UtUL[^_]É]mu6E}؋u G<$PD$ (:ẺD$UȍET$u _74$MVEPieEP$RDEP$R2t&t&'UWVSl}EUME̡6E$tE̻6E6EEE$D$.E\]MUEM9UUM&]E]fUU}؋E9E}؋9Eى+MM9]v};;~}}/}E}D$+EML$ M̍UD$E|$ $MȉD$ED$EfME})lj}ԋFEE)E‹E9UUN E~39U}EQ9U]9É]uE}E؋F4$PMu۴uyE9vv}?9؉}r]E_ŰME]T$ UȉL$MD$E$rEt$u F4$PUtu EP$RUtu EP$RUt31l[^_]Ã}A}E1ɋU);]؉Uv)U 9v ~c39wE)E9E}*M؋}<$D$6D$zElj};]w։]Eu]EU̍E+]MT$ Uȉ\$]L$M$E$UEĉ9|0E\$$qFVE]ăE;]a̋u6E=='t&=~O=?B yEU);U|4Ut t3Ut t/E5ET$$E뻋EP$R뿋EP$RËEP$R1Uĉ9}֍Et$$KEDEuăE܉E &UEU ME]g&UEU ME]G&US]C=@2tD$@2$|tS1ɋC E[]z1[]fUS]C=@2tD$@2$,tS1ɋC E[]*1[]fUWVSUEMe=}1҉EUMEEEERE $D$?(Er} EE}9} ~P}UUċMȉ$UE=2t{EMuA $P먋EȋU9P^UtvUtNEȐt&Ue3Č[^_]Ë]9] ~`uv9] ~KUF0=222uġ2$2P9] }}4}}E} D$EML$ U6\$|$D$E$6D$E,EtuP҉Up  1;}MċU $Mt!=2Ru‹B$P뷋}u G<$P22u2$2PUȅtu EȋP$RUt tPUu$1"B$PuыEP$R1&EP$RUtƃ}M EUD$ 6\$ $MT$6E $%U $kutu۴tu>E;]~p1}؃+E9tWUEĉ$Mȸ?t=2t8u‹B$P뷋U]u B$P]Y22t8M UD$ 6\$ $MT$6E2$2P뷋UY22ME6} D$ 6\$L$M<${Es{uE8u6E8tE;]}}ED$6D$Eω$Eτtcu FtSU$UM\=2uB$P붡2$2PE+E;Eg6vB$P&bEȉT$$=_EP$REP$Ry&U]]uu C=@2t%D$@2$Du[]1u]Ått$D$ CD$C $ ]u]ÍvU(EU]] u}EU@=@2tD$@2$Ȣ:(EvuvUB=@2tD$@2$|ME]u}AE A E]6E\$D$U$貿t"@= 2tD$ 2$؋u]}]$uUB=@2tD$@2$轡t3MQA E]1ɋu}]631냋UB=@2tD$@2$`t֋MQA E롋C@ D$D$3$t1C$1P'UED$D$$Í'U]]uu Ct ]u]Ét$D$$tޅuډCՍUSE ]uKt-EQA[]á3D$7$BD$D$$#tK뫍vUWVS 3$5@  3EtP Et$$D$m\$D$uԉ4$u C$PEԃL[^_]Ã蓣tAEV D$E$D$u F4$PUԋfEEԃL[^_]ËF4$PEvuȋF EE̋p Ű]J ;u]ą~nlj)E3É\$D$Uԉ$Fƃmv]̍p{ ~3ut&u C M]P D$E$D$c;C$P[iC$P[U= 3=[ 335Z]ԋG3D$D$EZE̋xK4ŰB 0$tdy߅yԅs]̋{ t h訠RP D$|$$x4 tŰB $\t9oEąhẺލ)]X ڃUt}up3tpÉ\$D$Eԉ$"xw] tgŰB $¡um蓟=E܅yS D$u܉$t$WC$Ppv=t&{ 30Cl=a 3C$PB$PEt& 豞[@ SC 34膞0u@  3S@  3*@ SC 3'UWVS\ɉEUMH$EEE@E0E][EE]+]ډ] EU9UEMUX y 4;u؋I9uˋE~pUu+u<4#3É\$M $E(]]EUm9UEdM9ME΋]+u{ tMnu@fx8=1 3J9U|luЍM)y u_tP D$|$$Û\$E$8uju C$PE\[^_]ÃjtIP D$|$$YC$Pu C$PUiEE\[^_]ËUMB 1ҋEԋIɉM1 9u]MԋC ; uM)׍҉UtMu;3t@É\$U$JtPm둃u ]؋yٚ)E؅tS D$E؉$D$7뎋C$PE=v~ 3~K=v 31"3M3D$D$蟾EE@EE.1}ȋMA $ΛtEU9U܋}ȋ]9ƉE 9tUB 0$腛t9}MEM]E+uC E3É\$U$$9M;}ĉ}ȉM}9učvE;ut'UB $ӚuߋM}ȉM9}]9]EȋUu+uz f= 3_9ttE̅S D$Ẻ$D$藗C$P3tWÉ\$M $u C$P]C$PE著t̅tP D$|$$끋Ű= 3A $PB$PE \@  33@  3Y躖]̋@  3T莖@  3e@  3UVSuF-1t*FK V  $T$D$蕕$at ؃[^]Ít&~@2utڋC$P͐&UWVSUMu ER UIMX PEt;~+}Mҋt19u;9fuEtMuEEԉ} 9]nUM؍9uuԋ}܋M9uՃE]σ}0EgtP Et$$D$̎؃\[^_]ËUz}M_A ۋ0G ~-;0Ku$B9u}@2EE둋UB+EEE躎EH uEMЋ~7u1ۅs11 9t&uЉEuЋ}MWA)9EuEx q ;u뭍vUB }ЋuFV D$T$}Љ<$艍Fm<}uMAQ )D$T$uЉ4$REȃ\[^_]ELUBR D$T$uЉ4$}G4EuЋ@mME MEQ+UA T$D$4$ӌE= 3u tB@  3\[^_]҉!UB 8ӌu \1[^_]ËH $EPH T$L$0S؅Y1v9SDC ;0um,8ؐ&UWVSUEMe]1ۅ҉EUMEEE U EȅU} <}@ 9EEsMEEM}2EM9M@]MEUu2hF=g2tD$g2$MuUFUUtdEP$R}2XM9MMwZ}2uKE}9}v?]MUK7Ut uEP$R}2t}9}iq}}vUE+UD$6T$U)U}M $M JEą]D$D$$(@=`2tD$`2$褁=x@ED$ED$ D$@2|$$dE9E EkEEUȋpE+E]+Z R9B}1҅M_ ~9uM ME]}EkG<$P]&uF=@2tD$@2$茀du^tMȋ}E+E+y U );TA9GF \$D$E$]?t&}})EȋU+P ;P}EȉT$$.Uątu EċP$Rut]u C$PEȋUe3Č[^_]ËF MME ED$3D$7$u C$PUȅtUąt]n1W 9D$Eȉ$"E}uP ׉}|}l}U9UM+MMM]ύ}ϋ$D$6D$]ȋu+s <$聆SE9FEύUτtMMBuE]9]rEEEEiu۴QuE9Ev&}?;E}rUEU=}UB$P1fxEċP$R]M빋EȋP$RUą$u(EEE9}ЉD$Eȉ$4EuP UC$P9}ЉD$Eȉ$E]P Ӊ]UE)U}M)U}]L$M D$6$ĢEą$EE}<$ՓEt&UEP$Ru60E1EEfWx@D$3$2=U?B$P1'UUE D$ D$BD$B $6Ít&UWVSL} uEEcE@ ]EE҉EEE9y܋U)EEEM+B UEED$$ED$ ED$E؉D$ED$EL$6D$ |$t$$6ErtUtu EP$RU܅tu E܋P$RU؅1҃L[^_]=E~f9t̋P EԉL[^_]ËEU+P ;P|KU܅t taU؅t t?UL[^_]Ë 3tgL[^_]ÍET$$蔗yE؋P$fR뱋E܋P$R둋E؋P$R1a@ UԉEԉ 3nU(]] uu}uL=E~)t+P Eȋ]u}]f 3t91ۉӀttɋO ~9u뭸袀t@ UE 3룐&U}}uu ]tu3t3vtkDt~tP D$|$$E$D$ED$Ƌu C$P]u}]Ðt&x= 3t 롐1ȸt@  3ҍv'U8]] uu}C=g2D$g2$vu|C=u2tD$u2$v$_9^^ uBt&~tP jC;F}C^ tËx= 3-kuv^t&n31D$^$؋u]}]Ít&{2t:31D$l$Fct&1'~u1몍ED$ED$ED$ ED$F$D$x͋E~v uu$uU~"E1ɍEfډ9utuH3tÉ<$ x}tFtP D$|$$|ƃu΋x=f 3t41뜸}@  3X|tË@  3몍'UWVS\]EEEۉE1E |E}M …@ U UEEUD$g2$s 2F=@2tD$@2$sG~~n9}}FM+Eȋ]Q ẺUЍUA$D$ˑEEȋE+]ЃX ]F \$D$E$={])}ȋt|EE9Ev~$9kgD$E$@ƋF=g2VEEuF4$PvEU+P ;PU܅tU؅tU\[^_]ËC$P`3$j轕225V EE} =E<Rzt{P Eԉ\[^_]á22u2$2PU܅tu E܋P$RU؅tu E؋P$RU\1[^_]ËUME+B UEE+EEEED$$ED$ ED$E؉D$ED$EL$6D$ E D$E$6D$E222$2P 3\[^_]Ë"EP$R13D$D8$kF4$P3D$:$9̋E x} H ~UE 9uET$$&=!E؋P$RSE܋P$R, x2@ UԉEԉ 3U8]]u}u5EU D$ D$ET$$贜É؋u]}]Ív$uU} JU=E~%KwP ˋE룐t& 3V6u*UE T$UD$$`W3E UD$$}E\$4$D$萎tL@=@2t`D$@2$0nuLC@ D$:D$3$識u0F1ۉ4$PvF4$P1ېE vt} oH ~UE v9uHC$Pmut@ UE 3t&US$]EC=@2t]D$@2$ muIC= 2tD$ 2$ltrCECEUu83$[]Í3D$:$諙1҃$[]ÐED$ E T$D$E$$[]‰ÍED$ED$$C/t3$r1҅tC@ D$;D$3$͖1D$$4u1e&'UWVSt&*Dž0 wkx\0 vG&Ѓ0 w+DBЉuf.~hCl6L)%9||lx$D$>Åtk%Sw$??P _)׋GD$3T$ L$D$D$yUtw1Ue3Ĭ[^_]ÍDž%Dž%DžDž11Dž ;}t)9}mx+tT2dЉtxQET$$lxpEP tp)pt. tpp1t9)ƋtxX;~ . ]p\$D$$UFp)t9|'pt 9p~ً9|%3D$|$zB$Pt3D$ $y@pt9p|q\A $PND$$4w1Hwt&=)(…֋)3Ëtl \$$Ull=Dž|DžDž6|9 ɋlx$D$.9ÅwC=g2tD$g2$J$>.-*10 yЃ0 v$t&ȃ0 tBu-RP D$|$$QE$dxxT$gxEpP )pctl3UDlA=`2D$`2$HlF|9 lx$T$6ÅC=g2tD$g2$DH$ <!ƃ` t2pApApFƃt!ltlA $P1`fB$P@EP$Rtppxt XppBApCIOAP t$$D$N 3D$$s?C$Pv;؉F_$bݝ݅fDgu.]T$t$D$ D$dD$$C\$D$x$݅\$ H$Mƃx"(1ۍ9u!Dž0Dž-0+'+U F00=C=@2D$@2$DC= 2tD$ 2$D{&C11DžDžDž DžiaC=u2tD$u2$BD|ED$Et$D$T$ L$$EZL.U1Ʌ~UC U9C 3C SDž0=Dž .C=@2{D$@2$[Ccs$B=@2D$@2$CuwA= 2tD$ 2$BD$ ۴D$BD$Ѓ$0Ë4I @9T=I 3{3D$$o1+sJ{AC A $P6Dž Dž7D$۴D$$*3F gw)3D$$1nKdvDžfDžd݅xF5wx$4Ð>Dž."Fw.txX|D$t$uT$D$?D$ D$@4$:ۉt$ $\$ D$xQ$G‰ƃx"(1ۍ9uGDž0JF4$P.t$ $\$ D$x$[G‰ƃz1ۍ9uS6bt&udFGA $PtP D$|$$3>U ]B=@2Ov֋MA=@2t~D$@2$6FEP x҉UM=3t&]t&ˋEى$EiUNjtktTu C$P[^_]É=ZtP D$|$$ =F4$P렋B$Pt&녉W=tVMKP D$E$D$<)t&D$۴D$U$eM1[^_]á3,&3E= 3MD$۴D$E $UYB1$PiF14$PYD$۴D$$[E1A $P;@  3=;Y@  3;zM@ 3C'UWVSLd@EEUED$\$ $谣E=2P@2D$@2$2EP 2tD$ 2$]2EË@=@2{D$@2$22{ s3É]ME}I Mȋ@Es CEt6M~(U̅Mȋt19uz;q9uUtF}MȍZ]܃9}!M܅t;t1 ;y9uG9EEu}̅u]{@2E̋Uȋu+u̍<:3ËE҉EP$RM]}I Mԋ{Et1 E;}tUЋMԋ$&;uut,]ԍt;]|$:uC9lj‹]ЅutEx@2\UЉM+uЍ<58tMtKP |$D$$ 8L[^_]É$D$۴D$ÉE1ۃL[^_]ËEUM}R UIMċP pEt9~)]E t1; u; 9u}tPEċ]H D$|$ $U D$۴D$$?E 3D$$Z5f3oUU=J 3tNM pD$۴D$$踚tEtM t] tX#EU@ 20 3뉸t@  3@C$P}U]]u}C=@2D$@2$0{ st]uP3tPÃ{tv3D$<$31҃u C$P1ҋ]Ћu}]Ãt~tP D$|$${uC E uC$P덍L$D$۴D$*3D$;$!31AO=D 3t Ft@  3ԍ&'UWVS,UB=@2D$@2$Ex pud3`E@ UERU$=EIMEEvE]uÉNj$ 9uuƋUE+u<63É\$U$fIEUE9d9~R׋U)Ǎ43É\$E$eGUXE,[^_]Ãa tP D$|$$ ؉]m( P D$|$$ uËx= 38; t,FEU EhaC$PvF9EE~ϋU|: uōFE뽋u C$PUu B$PUEE,[^_]ÃEbB$PE,[^_]à t>P D$t$$d a=t&R 3ȉM  @  3d=Y 3C$PB$vPED$۴D$U$fE9 @  3! N@  3RvU(ED$E ED$$ r1҅tED$E$AɉÐUCM#J[CBu=~-]ÐUCU%ЁJ[C@tP ]Ðt&UCU%ЁJ[C@tP ]Ðt&UU{!$b&02(&@80t&2t(0&)0t& B]vÁZ!vj!t&r!~&n!t&bl!F&~]Á$`:t&]@BÁq$fu$6&3~$t&s$f}$~]0BÁvv t& &t&_t&ot&gC%ЁJ[C@]Ám$k$&]DBv]BÁ$$r']XBvÁb!yv*^!t&\!]&]BvÁ'kvo$t&$6&]HBvÁIvzt&Tsx&T]BvÁi$v!t&K!t&{}!t& ~F]B]BÁx!q;y!az!v]2f-t& t& t&ttW]xBÁW!v|{X!Y!<]B]B]$B]B]pB]B]BÁ$($],B]B]B]B]p]B]lB]B]hB](B]BÍvUCU%ЁJ[C@]ÍUCU%ЁJ[C@] UCM"J[C@=~-]Ð&UCM"J[C=~-]É'UCU%ЁJ[C@]ÍUCU%ЁJ[C@]ÍUCU%ЁJ[C@]ÍUCU%ЁJ[C@]ÍUCU#ЁJ[ 1At]Í&'UCU#ЁJ[ 1At]Í&'UU!S!]Á'vt)0fZ!0t&}΁'tƁ0tC%ЁJ[C@E]Á ~`|{Hrf|y21뾁$f}$ M   fD $$'ft&@ P$80:0h T@ vt&+U(D$]u}D$ D$2D$2$Ǣu؋u]}]É$D$2D$A Ɖ$~y1D$2D$,4$^xD$2D$% 4$BxD$G2D$4$&xD$G2D$4$ xD$`2D$4$lD$F2D$4$LD$i3D$4$,D$~3D$4$ D$N2D$c4$nD$x2D$4$ND$`y3D$4$.D$b2D$4$D$3D$4$lD$@o3D$B4$LD$g2D$ѡ4$,D$l2D$4$ D$u2D$4$nD$2D$4$ND$ z3D$4$.D$3D$4$D$2D$^4$lD$3D$4$LD$ 2D$!4$,D$2D$*4$ D$`2D$4$nD$@2D$i4$ND$3D$ 4$.D$Q2D$4$D$Q2D$/4$lD$@2D$74$L1=3$RD$4$ljD$x%G<$PG1ۉ<$Pt&'UWVS,} <$L1EfUx;E}E9D $蘶y֡3$W'HE E$X%E4$EtW1fUD 9D $袇uޡ3$&U7UEE,[^_]ËEUE IE,[^_]$E4$t1D 9UD $tuAtUE1ۋU6U9U*D$ T$ED$U$zFE9E}#UB U؃$[]~t ؃$[]2 u١3D$$¡3D$@$U(ED$E D$'$Z1҅t E$KɉÉ'USE $βx ][]{ t1[]Ív'US] C= 2tD$ 2$,t)CtPD$3D$$1[]ËC=@2tD$@2$t"CuC fCE[]C@ D$pD$3$@뗍&'USU tBB@0t8@Tt1$Ѕt@= 2tD$ 2$Lt'؃[]á31D$$)؃[]ËC@ D$ D$3$t1뫋C$1P랍USU B@0t<@Xt5$Ѕt@= 2tD$ 2$t+؃[]Ít&31D$8$y؃[]ËC@ D$dD$3$t1맋C$1P뚍U8ED$ED$E ]u}ED$ D$D$0$%u1]u}]ËE$蛁tE@=`2tD$`2$t-3D$$uG<$P1댋E&tBute<$nt8D$E$wƋE҉uEP$R볋C$P3 tE҉tEEtEG<$P$t&Eb$EP$R뭍'UWVS<] }EEt@ED$ED$ED$ED$D$ `2D$4|$$ME$ĖEt|D$$$D$D$|$D$4$mNjtVt;t]u G<$PE<[^_]ÍEE<[^_]ËF4$PuC$PuڋUuB$PE뗋Ut uF4$PEiB$Pԍ&'U(ED$ED$D$ D$D$AE $"u1D$ED$E$uރ22Ðt&U8ED$ED$ED$D$ D$D$IE $B"u1ËED$ED$E$au߃22 U(ED$ ED$E ED$Q$S1҅M1)‰Ѓ10Bt&9u؅xWE]EٞrI}EfEmpm]xIE]E$ɉE]}EfEm%pm]yM]ft&'UE E]aUE E]! UWVS,ED$ED$ED$E ED$ D$D$[$ EtE$;|v$%~$tz<$iED$D$4$D\$D$4$0ED$t$$mEstUt ti1,[^_]É]-F4$P3vuME먋EP$Ru&F4$P&PG<$P1c3D$Ĝ$ UA2EP$R1!G<$PfF4$Pf<3D$$v -U(ED$E D$b$@P1҅t"E=wEED$$]ɉá3D$h$ 1t&'UWVS,E$&$BD$ D$D$ÍED$E $+D$$WuW4$FIt($:It4$.I$b$ZufEuCD$4$kÃ,[^_]É\$$Gwtv1ۃ,[^_]Ít&D$\$$|tt1։$H$$yE$H4$vHD$.\$$aƅ>u631ۉ$4$ 963D$$R 4$avD$4$[볉$$zE$G4$GU\$T$$ aƋU؋uB$P맋E$1fEEE҉E҉UtM}؅tU؋u܅tM܋EE܃<[^_]f3D$ܝ$EEE҉KEP$RE҉?EP$R.A $PvEEP$R"B$P>EEEEEMMf3D$$EEUB$PE$VEv4E@@ D$D$3$BEE E@@ D$ D$ɋE@@ D$TD$벋UًEdNj C$PA $PEt&E҉tJE҉tcE҉tGMt.U؋B$PEP$R먋A $PNjEP$R뫋EP$R돍&'U8ED$ED$ED$E E2D$ D$D$$;1҅tED$ED$E$lɉÍUWVSÃ,҉UEuE$]E1$nt&<$H\t9ft#E܉t$$D$%~dtI<$\ufu{G<$P,[^_]Ít&F4$Ppu_C$PQu C$Pu F4$PtM1,[^_]ÅtuύED$D$ D$E$D$볋G1<$P먋ED$D$3$vUE ]? U1҉E ]"fUWVSE eU1҉|$E|D$$5UU=2E}EE$,E]EvUEDDEU9u1Ef9E}EE9|wt$$胿É$kUDZ$by3$! u 3$ [cy |D$$ $REEE$E"EU$DM122D;]t*ETu݋D$XtXD;]uօ} E9E|[U\$$S1ƋQxQEFt&E2D2SEU\$D$$1yUbEE~C;]t.ETtuUDP$R;]uҋE$*EUe33Č[^_]ËUD$t$$[ËtZCG]D$ D$2D$E$n3\$$E$C$PF4$P뛋teE9ED$UED$ T$$)F4$PUB$PF4$P됡3D$$EEp_EEUE $ E֢U(EED$ED$D$ D$D$E $R 1҅t*EtEE$J tED$E$tɉD$$3$ 1㐍t&E$gɉ‰ U(ED$ED$D$ D$D$E $ u1ËED$E$ix$áf U(ED$ED$D$ D$D$E $9 u1ËED$E$Yx$Sf US$]\$D$E $<1҅tEx 2u$2IU$[]Í&3D$D$$1[]ÐUatÍU8E u]}D$E$Ou]u}]ÍED$D$&4$C<E  t|a_D$2<$EXtm]$Eb`E\$|$D$D$ E$PËtSF4$PBE mR_D$2<$D$r1 UE E]@UE $t E!1ÍU(ED$ED$D$ D$D$DE $EP@2tD$@2$tED$$(tYEEP 2tD$ 2$gteED$E$a‰Et7tG2G21ËEP$RG2G2G2G2D$d3$1Ðt&US4EED$ED$ED$D$ D$D$LE $t~EP@2tD$@2$xtED$$'tEEEP 2tD$ 2$tًE4$D$YtËuF4$P봐UWVSɉEU$};EE7E-]ED$<$D$ttUD$$T$D$D$E$&EtC$PkF4$P]bUt E[^_]ËB$PE[^_]EE[^_]ËuF4$P뫍vUWVSt&/C$PfӍ&'UVS] uC=`2tD$`2$stWtF=x2tD$x2$rtKEt$\$$Ƌu C$P[^]á31D$$螟ޡ3D$`$臟t1뺋C1$P$/fL1듐UE D$D$E$Í&'US$B=PtD$$u1[]É\$$- []Ðt&U L3D,3A 9 8,31ÃA ED$D$3$+Ít&US$-td3t$|؃[]$US]t.$9t $Vd3E[]{$Ȯ8čUd3${Ít&'US]t8d3D$$|$etEH[][]$뺍Ud3D$$U|ÍvU(]Éuu}ωEU8t/;}ED$E$U]Ћu}]f<}<Ƌu}C$P,[^_]Åt@F=g2t6D$g2$mu"F=u2tD$u2$m`EEED$$ u",[^_]ÉD$<$,@[ED$4$tˋMt!ED$ ED$E<$D$^ 먋ED$E<$D$TUSh3u}t3t3`3l3p39tfB Մ3Հ3Ѓ)Уl3 $Ӆyt3`3[]>x;h3r1[]t31[]Ð&UE]u}Et<=d3ttn0D$<$x3E]u}E] $x붍'Ud3t$vD$d3$wrwh3Ít&'Ud3tvd3D$$ew0wh3É'USL3$P31t $WC[]fUL3$P3t@ÍvL3@@ÍvUL3]u}$P3X8S{sCt7CE D$D$E$z{s]u}]Í&1{뾐t&UL3uu]1ۉ$P3Åt@H t ʻ؋u]]ÍvUL3$P31҅tPDɉ UL3$P31҅tPɉ U8EED$EuΉD$E]}׉$ь^8Ct'ED$ED$E$~]u}]ÐCCE t$<$D$ ED$UKɉ¸tVk҉CtUt tDUt t@UtyEP$Rh1{럋EP$R뮋EP$R뱍&'UUB=J2tP^RB=J2uQRB=J2uDRB=J2u7RB=J2u*RB=J2uRB=J2uRB=J2tv= ~3t!=2t= I2t=I2t$@ ]ËB]ËBE]BE]B@E]UWVSÃ,UM$诀EEutu}mEMBBrZE\$$LbMt$\$ $kNjuC$PuF4$PtvUEE,[^_]ËC$P1mE$UEB=J2= ~3=2= I2tk=I2tZ@ MD$3|$ D$L$$t0F4$P"C$Pؿ=2tV= I2tq=I2uUB@$yB$PEM_A$L_UB:B_$%MA$uUWVS\uL3Dž ‹@ B ;8,3~ L3D,3A 98,3]YY ]EU[Ls 0{ 4<s,2B<Ez$B$DžDžDžDž Dž$Dž(@,3@,3@,3uEU+,B<qYZ$q$9$HyL9 9(|u^8KDžE,M@<‰(UA$t A$uu1Y~E}GW4w$UB2E2H1AtuQ$^8K 'G>MW Y8s*CCL$$D$ 2D$ЋKɉ¸u 1{k҉CDž-At7%@%u MW$D$$B*uS ^8{CC$D$t$|$ ЋKɉ¸=k҉CZL'FDž(F4$PG<$P=G2n,=G2HuRX$VEu C$PM0HMJ];]wCS]4P$RpEGM<}uFVE4  ɉpaA $PSEP$REP$R22i2E2;y6|$}4$|$}EUM䋵EUMVB,(EQ4q8yXۋ53<$,D$D$t4$i<\MAQM4]}G=`2=l2E$c- UDžXUĉ+X;X<$ura(X X ҉uP$R֋U0R\ ҉U\$$ۋ53$D$D$74$:h0D uvu]*~x2}\$D$<$ u0Z:|$D $D$RsC$P {]ȋvu@EЋG=x2tD$x21ۉ$< D$)<$K uEЉ|$D$t$ D$$Eu C$PE(MUȉJu G<$P]u C$PuЋ}ȅF4$PEȉ0D$D $D$qC$PA0\ { 2u\$F$@6E"}8T1Yt$$34$2sE  1ۋ}W  9uދ)‰4$Y.Ex-}D u)ÉU\U0B\ <&xx2\$$E}>4t u3b7_t$$y2ZD$2t$$m^$Eu C$PEGWLZ$uEC$Pz_$vfu C$P $G2@G2DžZ$Z=G2=G2$eA$DžHx{g2Q F$ܶ3_{g2t$$E1_C=g2}= 2`t$$E"RUQA ]QAY0\ \$B$nE "]^$O1Yt$$1_{l2t$$9E/7_t$$=3S1Yt$$U+B \$$D$ E+,D$n ɉM A $P0_D $D$qmFwEF=@2tD$@2$|&Džt4$Ft(MƍED$D$4$ Džbt&3D$p$ SDž9~g2CN)1U$EY|A xAHX EU@L$ M\$Ӊ|$|D$$)Íx)‰L$\$T$ D$t$<$EEX =PUp҉u P$RpwˋI5L3Q UAl[ h1)FVFN X8{ hD$$lEFUwVN Z8{CCuT$D$ $t$ Ћs¸u 1{k҉C}EL3$P3t7Xt8C=x2tD$x2$#t$D$)2Å I2_ F҉u FP$R^8<$ȫ3D$o$ PM;q[A T1ɋD9u}<};wVt$]D Au}4UB$P4$'4$Pٌ$!EơL3$P3Ut@H t$P\$|$ D$4$ANV ]$\$twt ;s11hD$$lE:tt3;|$ D$xD$3$KEE^zVFN X8KtYh|$$lEFtU@VN Z8sqG<$PcCCMD$D$L$ $ҋKɉ¸u 1{k҉CUE눋h|$ $lEm|$ D$D$3$J2L3$P3U@H  ʉUED$E\$ |$D$$eËtu F4$PTucYDžC$PDžmE\$ |$D$$yo}D$<$눃{Cc=L3x\$D$ <$T$EU~#1)‹L9u$EG u C$Po 51ZCC} $D$D$|$ ҋKɉ¸u 1{k҉CJG<$PECCuT$ $D$t$ ЋKɉ¸u 1{k҉CUXB$PENV ]$\$ɳ<$Ldt%xE䋝dPU@D uFNFV X8{dUD$D$$=EFt}FVN Z8sddlA $P^C$Pv*CC}$D$D$|$ ыKɉ¸u 1{k҉C,EfdUD$D$$u G<$P]ĉ]F(P~C3D$ı$GDžUBD$2<$D$L \$D$$D$ D$D$D$D$D$ |$4$ =v/v=t&t3$QTN=M\$A$Et&] 1(SM\$A$Eu}2tf3D$$FED$ED$E$;@ED$ED$E$;MDžZJ22u2$2PUUBE뜡3D$p$>]z2E2EP$R`EP$Rt&4 L3Q4u2UA8҉EAپ3$M\ED$ED$E$6E@= 2tD$ 2$it9E$D$tE҉u EP$R]ED$ED$E$#5$OD$0D$3$= A $PŹt$B$)111MA $PE閽=2t:= I2t=I2iG@$%YG$I_G:G_$%G_$\3D$$> 3$Ku6Dž]C$PE黼5$D$KAKtED$D$]$裻Nju C$PyDž` 3$IKU|3D$$ >Dž)Ɖt$F($63 $谮D$D$$T;3D$լ$=DžET3t3$J3u C$Pu]_H3D$$=Dž$=~uDžt&t&'UWVSM]E }MM]] UMM$]](MM,]L3M]T$ 1ۉD$|$Eȉ$WELE<MEċGEGo_9]]MM̋E̅~E1&9]t2UMtu׋B$P9]uGE6E0PEUF= 2tD$ 2$mG1ۅ.9_~ D$G$D 4$D$a`~W1uy9_#MЅ}Uԉt$T$MЉ $E]9]~ً]4ˋDEKG41ۉ$襫D$D$3$L81ۋUȃB MEȃh Č[^_]GoEiEu.Eu&G4$UT$Mt$L$ỦT$D$3\$ 1D$Գ$7OUMԃB$PA $fPEWG]^OB$PA31D$$A9Č[^_]G EsG41ۉ$UUD$xT$ D$3$6BE+Ẻ$(G]0t t@E9EM̋]+]1ɋD 9uE.B$P뵋G9E+u9u}3]EEMÍB9u]1)9u!ËE]9}eUMEE4EE+E9Et4ut؋u͋B$P‹EU@H_]܋Gƒɉ]EEG,U؋MD 9M܉EGȉG$X ;u&D$E$uًU$>ME؋]<uUEE9@~ M9McE]9@]t&UEE9@~F$袨UE؋]<tuB$P먋MDt-~+1ɋ]ʋD ]@]ĉE9DG sMQ tu B$P]C ]Č[^_] 4$裦ËG4$薦\$ 1D$`D$3$734$jËG4$]\$ 1D$(D$3$2EiEEuE.GE. EuE&G4$\$UT$Mt$L$]u$/UE؋]<B$PEE$E.+t&U(ED$$D$ D$D$E D$D$D$D$ED$ $YÐUWVSE@E$thE~a1=t&D$ 2$tNCD$C$ZtU\ 9ut E\ C= 2u\ 9uu[^_]ËC@ D$D$3$0t 1[^_]ËG<$1P볍t&'U(uu]}F4$9u]u}]ËF$o9t܋F$]9EtɋF $J9EtF$$79EtF($$9EtF,$9zE3]13E13F 1]V1UV1U3ETMt&UWVS]eE1s8 ƋC0t&@= 2D$ 2$C4t)@= 2tD$ 2$tS4\$T$ t$|$D$LD$$$?Ue3u[^_]Ë{0s&U]] uuC4D$F4$PuF+Ct]u]ËF +C uF+CuՋF8+C8uʋCD$F$ePuCD$F$OPuC D$F $9PuC$D$F$$#PyC(D$F($ P_C,]E F,uE]O&4US]S t tdSt tBSt t][]^vCP$R][]^&CP$RfC P$Rt&늍&'USÃtStStkS t@StStStStS t txS$t tVt t/t$M][]Í&P$RP$R뿋C$P$Rf뚋C P$RfuCP$RRCP$R+CP$RCP$R&C P$Rt&CP$RCP$R]'US]StPSt"S tS$tS(tS,tS0t t`S4t t>Sy9u+Eċ}D$D$<$'9D$D$$FSEMM $NjE$QE~21D;UD$ ;D$$D$}E9]ЋMA $P|ŰMD$T$ $&tl}D$$|$RƋC$PC$P 31Eo`U+UUz1KU܋uB1$P-&UWVS f= tN,f~bf=t&|f= }01 [^_]f=7*f=/}f=)|f=-fփz uЋRt&f=@tf=Lt&uffuRR$!Ƌ1mvR$!Ë1 [^_]Ãz RZ Rf: 1փf= tQ9u3r 1F4$PvhoC$PU(]Éu։}@{@ E\uxED$D$|$D$ (3t$$1҅x]Ћu}]á(3$,t&3t$$E<$D$F C믐t&UWVS,E؋BPEDE. $EEeD$ 2$Ouz\$E$ ƋE҉uEEE9G GMTEtdE@= 2rC= 2tD$ 2$dE$\$Eu1,[^_]ËC$P[UtދuӋEP$R1ŋEP$R:E,[^_]U(uu]}ωEUFt$$D$D$<$t5$Ƌt]Ћu}]ËC$PfE$e$E$Et3Ut$$RtBUuUB$Pu C$PE1҃@8pE\$<$D$uUu7B$Pu&UueE1F$}׉T$]$PtЋUe3u_]u}]ËF|$$u͋F |$$uF|$$t1=2ƒF$+xF$+|@@ $+@@$+x\$|$ D$T$$|D$D$^T$ D$$T$$ U]Éuu}tMt؋u]}]ÍFEvD$$ut$uʉ$i=E$ EtUC $D$T$u4$EET4$E6t$D$$QEIEE}4NwN_t1]u}]À~_u4$JE9sًUx_u x_ufÃ<_tft$EEE9w +}}M_E\$D$ȃ$UMt$D $YfUluƉ]}P EE]^f=f=C EE}{f=gf=G fEEEGEf=&pf=vE@ EEUEBEf=Qf=WE@ yEEUEBEf=6f=BE@ _EEUEBEf=W!f=(E@ EEUEBEf=f=EċH EEUċEBEf=f=ttE̋P ~SEEŰEBfft!t&uwẼEEU9P EăEEU9P gEEEU9P  EEEU9P EEEU9P Sv]u}]f=:t f=CK1f=:t f=CsEEE9F 1ff=:t f=CEEU9S f=:t f=CEEE9G *čt&f=:tf=CEEEU9P 9뷐f=:f=Cff=:f=Cf=:f=Cf:ffCt&5Qt&U($uu}׉]EML$:t@ui ‰$=UD$<$T$.uq1]u}]ÍtE$|D$ԷD$3$H UB@ D$B$ E@fEUD$B@$?{sC$PIEUD$B$t P$,tD$UED$B$xC$P1kC$P&UWVS ET$@ $t|$@ $ntR@uUtFV $ExHFH~$1ۋ@ PEx F9X1 [^_]ètt퐍t&렃 [^_]ÐUWVS5*B$P1B$Pv t&'UWVSӁ,eE1ȃDu :ND$ t$\$B $Qu]$ot+GP $Ët#Ue3u~,[^_]Í럋F4$PvϸA ։O3D$$B@ D$B$Gt&'UWVS`Ep EEEUPUf=bf=oEEEX <UPUf=\f=EEEH UPUf=f=uEEEP UPUf=sXf=EEEx  UPUf=f=EEEp hUPUf=Bf=BEEEX Eupf=f=EEN ~}t&]^f=-f=tYES 1~9Cfkftt&urEU9S ȃEEE9F UEEE9B 1UEEE9B ~=Et&f:tfCt&t9tƐtuYvUEEE9B ~cE;t&x Ofbf=:t&Rf=C=t&{ ۉ]1UEEE9B Ef=:f=C]&~ &'t&f=:&f=Cft&z ]vez )EEEU9P ~KEf=:E~ ~FfxG fxJf>7u Ff8w~  vv{V1ɋ ~ <f9~ Vf:~勅 ؋V 1ɸ1Dž1VzV@X0u}FX:~  V Vn9C҉2BHP SL$$]q~ FvF LFfxJF p[f;4F$vf>: V V<ViVV 11ۅ,rfP(Z(9~ KFx ЋP-ы 'VF 11ۅt&9~ Vf:~勅*؋_[f;HQzt\3{PJ$CQB4ZƃP3D$$+C5$BP8P8T$ $D$D$GXڹ^1ɋSS< { VAh8S1ɋnS<{ SSP=10V(SPict&UWVSEȃUMEf=8|Gf=ofvf=u*Ex ,@M@P>f=@~sf=LtwUB t[}}f=8uz (BfxGt)11t&EM(PE'U9Z ߃[^_]f=?Ex PUf=6f=7]EPfNf DfuZ lj3D$ $UBu }G@ D$UB$}G?UMBPE[^_]#f=9t~f=:v B }MW뾋} ~.(EPf:$tEGU9r ܋} G‰E} ~OGfxJ11ۋ}ڃM(EW9w aU@MP,G <11ۅv,U9r EPf:~ߋMEҋM@ 11ۅ}ڃM(EW9w WE6WE[^_]!UWVS1ۃ$(UM@@ $F腺F FxFFF EF$EFG$MFmF~[1V F$Ft t{Vt t'Vt tE4$1K[^_]ÐFP$RfV t‹uF P$R뗋FP$Rt&멋F P$Rfr3D$)$68U}E} ]u1$|$=t‹E;t]u}]É$~ 獶UVSZf;J\rC(Xf;JXS{ =C(Xf;J-S{ C(Xf;JS{ C(Xf;JSn{ C(Xf;JSC{ C(Xf;JS{ ujC(Xf;Jt^S{ uGC(Xf;Jt;S{ u$CX8f;JtS{ [^]Éډ[1^] 'UWVSӃ &8{ u8C1X`f;Ju1S1ɉuNjS<9{ tˍv [^_]ËS{ uS [^_](UVSÃB K$诰C8@0DV؃"V;tSC҉u CP$RSJB C$L$cFP$[^]Jً31DžG0tPDžOW 4$NDžӋ@xDžfF4$PaZ1A ։;h{t$B $袣z@t$G$$wuN~T1MHP 4$t$B$.@Džf}1|1藲t&'UWVS EBf8t}F@f8uqpF t\ËEUC;~F ~11ۋEڃV(y9~  [^_]ËHE\U~ [^_]ǂ [^_]ÍUWVS\EeE1r ABf11f$E@f8t&E҉\$ D$˿D$$FES9~-Of<Z9~ftf$uE_ff$EECf8t:E|M*U;~EM9~;Wf<tQ9ΉM~$ftf$tECf8u뻋Me3 u\[^_]ÍSMt&'U8ueE1}]ˉD$ |$L$$tY$:tQNV $豳NjtDt&Ee3u0]u}]Åut&F8Őt&C$P뵐t&7t&'UWVSeE1Dftf=t5HMe3 [^_]ËB EΉDžDžQ9t.^|$$蜬D$$\(9J ~VƋB|<$耫;v3t1t&UWVSF8Uf-fGw $3$Č[^_]G@$8 NV$Zd;~ Gfx(1ɉfd;~G_P$=$'kE;C҉CP@ CT$C$RVE U]NVËE$Hd;~1ɺgUB(P9Xdž1ɉ8@9F4 F4DYF4GHoMu A $PfČ[^_]ËW1ɉ$跃ՁČ[^_]2Č[^_]Gfx<(@9F4W F4DzF4‰U@9 DBF4@9F4 F4DF4 DLzW(@9F4 F4DWF4~ |Lzt V8?  DLXNV$2dY;~EV4U‹E+EU ZBuDuGt:)EE+EUUJBtˋ3ĢG GXSb@9F4 F4DXF4~ |LXt ~8 r s_ ]EN81ۅt#HEM9O 8V8*Wf: u։͐t&Č[^_]mW< (E=F4MȋLF4E(E9G ډW<GE@f|t3>E@9F4|D$4$/7lF8vČ[^_]K7Č[^_]5Č[^_]F<~"1~Lzuv|Lz9uWQ@9F4 F4DVF4W: sEE(=vF4\F4?EE(M9O &UW9GUDftft3负@9F4vD$4$5`F8fČ[^_]:Č[^_]19 W*M@9F4F4D F4WČ[^_]EČ[^_]Č[^_]NČ[^_]{._  Sۉ|~$E1ۉډW(aEU9W 勍|fs|9)‰Č[^_]OČ[^_]>Č[^_]6<WLČ[^_]1Č[^_]鞝WG E1ۉډW(~EG ;EČ[^_]Č[^_]4}f?WUJ EEM]Y]NV$2d;~EkHDUz RJ::A:Az (~"ىJi(EP9z ދJ,aM MEE(]9Y nFD>@9F4F4DPF4@_ ?SۉE~$E1ۉډW(EE9G MfE9>džEEEF4DoF4‹E1ۉUEt+EEЋ@92\BF4@9F4F4]Ћ\F4@9F4F4DF41UE(UUWHEM;O @9F4)D$4$0F8V4H~ |Lx]Yۉx!|Lxuf|Lx|u3*D$4$/0F8D$4$0tUF8D$4$/F8dždž5džV4_EE~4U+EJBuNut&o)EU+EU ZBtȋ3D$4$ /F833@9LLAOXu(f&LLA.XF9|>X F8D$4$ gF8V4mD$4$F8 džD$4$F8D$4$tXF8vD$4$2F8~48D$4$jF8M؉MV4V4,[^_]ËEԋMЍQ(EEt&UVSÃR~ V؃<~ @9C4*C4DC4;@9C4C4DUC4ǃ[^]ÐK؋S$2輒d;A~ ;vV؃d@9C4dt&D$$IC8U&[^]Ét&D$$C8UVSӃz ~R{ @S 9~dž[^])؉[^]ÐS<{ ~Sd랍&'UVSÃ@<C0 t~ ~]3D蛆~ ~EV؃H@9C4}~C4DSC4[^]ËK؋S$2̐d;~@9C4|&D$$lC8xǃ[^]Í&3讅'UWVSÃz LBEEfx#U4C4DC4;~W@9C4C4DC4@9C4}kC4DIC4~qE(G ;E~rU@9C4SD$$=C8DD$$tC8ǃ(EG ;EWf| EB@9C4C4DJC4[^_]D$$C8W@9C4},C4DGC4:D$$tƒC8̋Et@9C4}cC4DC4Cǃ[^_]EJ WD$$+C8D$$ u뉋@9C4}|C4DHC4[^_]Ã(E‰;~O gWEfz< ED$$rnC8NUWVS 3Ut[^_]ËR@9F4V4zDp~4@9F4DF4@9F4F4DF4@9F4F4DF4t;~EP ~EP<ٺ$9džEF4UE)JBuAuDt7)NjEU) ZBt΋3蛀@9F4}GF4DF4[^_])؉PD$4$nAF8~4ED$4$LtF8D$4$1]F8dD$4$ F8'D$4$F8dž.vUWVS,EUM܋B EEEupVff n~ WEEM;N }Vf:*EHP$2諉dEU䋂;~M9N XPEEM9N ~a؃Fx uՋEHP$2dEpU䋂;~EM9N E21M䋑9ǁUEB E(;Ey~3XEfMS9)ЋU䉂}ܾ=^U@9B4_UB4ы\A4U䋂9),[^_])‹E䉐FfzUJЋR$2ЇdE!U䋂;EEHP$2vdEU䋂E;bEPEXEM9N Ef5ǂ,[^_]Ã}Ec(M䋁;~U@9B4UB4ыDA4U䋂UEU@9B4JUM܋B4LUB4M䋁M@9A4U<B4ыDA4U@9B4D$$JMA8ǁJZS2f t{ dfz YK f|>F}L}wEܿ2lf EXEcvU䋂;~M@9A4MUB4ыDA4U䋂MUEU@9B4UM܋B4LUB4M䋁UM@9A4zUB4ыDA4U@9B49UB4ыD)A4U䋂Mff<ESE(U@9B4UB4 WTMA4U䋂M(/2UU䋂>M3D$ $E<@8D$$tMA8D$$R3MA8z@9F4F4D F4yBEfz ^x @fxGX1ۍEڃ(PU?;B |O_g9)؉ډ:wNV$xNjdR}ku֍BEfziX ƒ@fxJ7S11Et&Eڃ(PU9z Mf4E9)‰fF8+D$4$ HF8EP`1ɻD$4$F8D$4$wF8~D$4$F8 dž1C$Pbr1ɺf.1ɺg ]D$D$$D$ 1ɉgɸ@9F4F4DF4;~ٺ耻~aEH$QJdٺL2iD&D$4$FcF8jdž뜍SۉE11'UWVSӃ R{{ C(Ef8$uIt&ftpftu3jEE9C ~>CWf8$tU׋Pf u$EE9C ƒ [^_]ÍJi{띃E둍Pc@9F4}+F4DF4~) [^_]D$4$tÃF8dž [^_]Ít&U(uƉ}]URà vXuTf5f@9F41F4DF4]u}]ËEx ufz5Juy uAf86ux v{@Ef87j@Ef8Zf .fU]u}]Dt&]}u]J@9F4}F4D F4*D$4$dtكF8&@9F4}-F4D F4D$4$D$4$u뿋UB$k$2-MAD$C$llUB$MYEPEeEtR$#NV$qEu C$Pu G<$PËMd;~t&+NV<$[qE뇋@E80)tM.<$P3.f@9F4}/F4DF4-E멋E|D$4$M빍vUWVSÃRk EE(lf3ؾe@9C4C4LC4EE(E9G UWGUDftqftf0fb@9C4yD$$LcC8pfEEǃE(9G mf[^_]ËC0% UWVSÃ,U؋zW EE(MBDf"t!f#f?t3ܻؾrb@9C4}CC4LC4~HE؃EE(U9P ,[^_]D$$'tC8ǃ뵉'UWVSÃ,U؋rV~ (E5C4MLC4~}(EE9F ~~VFE@f|8t3ZaE@9C4|D$$KtC8E(Eǃ9F U؃z sEE(M؉؋uqV ~ (EBt&C4MLC4(EE9F VFE@f|8t3S`E@9C4|D$$DlC8{E(Eǃ9F zUؾAMBf|!t3f_@9C4}CC4LC4~HE؃EE(U9P ,[^_]D$$tC8ǃ뵐&UWVSÃLUBEp؋V_~ (E5C4MĈLC4~}(EE9F ~~VFE@f|8t3^E@9C4|D$$tC8E(Eǃ9F Uz eEE(M؋uqVf~ (E5C4M̈LC4~}(EE9F ~~V FE@f|8t3]E@9C4|D$$tC8E(Eǃ9F UAMBf|!t3f?]@9C4C4LC4EEE(U9P My EEE(UP؉UԋrV~ (E5C4M܈LC4~}(EE9F ~~VFE@f|8t3A\E@9C4|D$$2tC8E(Eǃ9F Uԃz EE(Mԉ؋uqV~ (E=C4MLC4(EE9F VFE@f|8t3@[E@9C4|D$$1lC8{&E(Eǃ9F svUԾAMBf|!t3fZ@9C4C4LC4EԃEE(U9P MBUAf|t35f;Z@9C4}~C4LC4EEE(U9P L[^_]D$$.C8;ǃ5D$$lC8yǃsD$$~5C8BǃMF4E Z$)EEE Z+EBtNj3L[^_]TJBf8:@Ef8PEMQ:$ GMA$;C҉CP@ CT$C$NV<$'TÉٺdEk;~UtYM8G(P9dž9E~#džL[^_]ËMߕ+E܋@ EUȋzf1f$E|S9U~f] NZ9]Bf1f$u&F8BG<$fP)ЉCP$RRfv1ET 蹠S9UMȍy Y3,GE'UWVSӃ,}M܋@HE@9F4V4DxUV4@;EF4DF4@9F4F4DF4sDLxe1҉8;lF4FHu@9F4F4D]F4Nj@9qDBF4@9F4F4DF4;~S$V%{ U܉r@9F4F4DVF4`NHqޒEFHEF4UE) ZBuAuDt7)NjEU)JBt΋3gED@9F4kF4DWF4~ |Lxt ~8E~4)EU+EU ZBtȋ3,[^_]DS<`@9F4F4DDF4CP`f=Jf=K3SCDA,[^_]D$4$89V4qD$4$:F8~4@D$4$TF8[D$4$F83CD$4$F4F8E@;E D$4$uF8@9F4D$4$MF83CdžD$4$F8F8vAD$4$3F8$M܉džM܉F&U(uƉ]}URpUf-fEw $3\]u}]*BF@MQf:tӚF4;NV$2LdҎ;@9F4+F4DSF4n@džwEH$QNV$2Kd6;~@9F4(F4DSF46]u}]ËUJ*Bt@1)Z MA A=3XNV$2 Kډ2V4; @9F4DRBF4džnENVX$2Jf;EP(@9F4D$4$F8MQă=3UE@ ~/11ۋMQft ftQE9x ՋF4; UB эB@A R=3TNV$2IUB BPԃf:F<MQ Q蓗F<DdžD$4$+F8HD$4$F8]Rz  Rf-fK$z ORf-fK;$ z TRf-fK@$<dž$z ftZ Rf: tJ1f: Iz9uz ftz Rf: uJ1f: I^9uz Z ۍvRf: J1f: I9uBf8fKF:NV<$IGEMd舉;~ҁZڒFBf8jE NV$FC$PvBf87E%NV$aFNjd袈;~ҁZ~9V4ډ+MQvB$PA $PC$PGG<$PUB$PA $PD$AD$ D$D$,$@D$BD$ D$ؼD$,$||$$D$4xT$(L$ \$D$0T$L$D$,D$D$ tD$D$$lWP$RP$Rf]D$BD$A UWVSӃ U R$K#؉$;qC҉/CP@ CT$C$tNV<$É0ds;1ɺrUBP$<(@9F4F4DDF4ru G<$P [^_]Í1ɺbrrۉtvRF8 [^_]ËCP$RD$4$@NF8UCvdž_UWVSӃUT$T$M $!t}ȃG8wEȃ@8 A Ɖ3hE!#EUȃB8cUHEȋE]ˉu։}EIf-*f"w$lt&3Eȋ]u}] ~ V뵋V ~FfxJ`0SEEUV$E>EE(M9N 3dvf f  f3u0Vf:7~ 9EuxE.ff3EEEx};~  EFf8$Pf u$Eȃw뵃ۋNEȺoUȋh]u}]f~V[3O*VUf~ ~eMQ ~AfxGEP ~E1M(Q$Ex}EE9G Z3EȺ]u}]nE1ҋNnUȋ;~EȋUvMȋ@9A4UȋB4ы\A4}ȋ1NEmMȋB4EȺ\Yj}ȍF;3bA E׹D۹hu{3TEȍJi2t]3(D$ $ϲ}ȃG8EȃǂLJǁt3VTf ft8ft3:43d rUȋ@9B4}ȋG4DG4Uȋ;~EȉirEȋU_tMȋ@9A4>UȋB4ы\A4}ȋ UȃMȋ@9A4UȋB4ыDA4Eȉ_xr}ȋUȃ t&EȃUѺ\gUȋE;~N hEԉك]u}EEȉ]њ~ Vf-*f"$3Vf:7P~ ~v~vf1f~@3ljV ~D$$MȃA8ŰB8NM̺`EqMȋ9#})ЉLJD$ $胯}ȃG8(LJD$ $R}ȃG8M̺_Enpct&UWVSLU@9G4 G4DyG4‰U@9 DBG4@9G4 G4DG4a DLyEP(7q@9G4 G4DWG4~ |Lyt G8o @9G4G4DnG4‰Uȋ@9nDBG4@9G41G4DG4ËU]ЋE+EʃMJBuLtQMӉt7)EЋU)ʃrBt̋3JEx X]@9C4}dC4DC4~y,[^_]É빋RUf=Gt9f=HtX3؃,[^_]fD$$tC8딉u؃,[^_]&ǃ,[^_]ËEP؃~\@9C4S4DoU܉S4@;EC4DC4@9C4C4DC4@9C4gC4DC44$U؉M@9C4C4DnC4Nj@9DBC4@9C4C4DC4 E+E܃ʃU܉M rBuNщuOt:)E܋E+E܋UU܃2JBtɋ37@9C4C4DC4ME)U2JBuLuщu)NjEU) rBtȹpD$$蘗C8S4UD$$s2C8K48D$$QfC8C4jD$$/C8-D$$C8{4D$$C8D$$ϖFC8MD$$谖 C8ǃTS4&UMEU M1]Y'UWVSE9&fUE E]1UVS ]$3$D$dy3$D$Kyu^3$D$6yt9ut$$auOEt$D$$D$ 蠋 [^]É 1[^]Íut$$Jot1 [^]Íut$$]t1UE E]!UExI2tD$ 3$1Ðt&D$@$1Í'UE xI2tD$ 3$1Ðt&D$@$ 1Í'U8L3]u}pFt1ҋ]Ћu}]Ð$"F|FtFEEE@/3t&ED$D$$ dE@/3EL3xG$<3D$$E]EEE}]NVFD$ D$D$$ {x2B$P1E\$D$G$EIC$P]@v$0,*E$X8$0ؖ|3$" 1ft&'UL3uu]}xGtQt+t$G$t؋u]}]Ít&۴Ρ3t$D$x$I1ۅtv뻍&'UL3uu ]XCtL4$:t$Et$D$C$0‹]Ћu]á3D$$mtȍUWVSL3@EЋ@E$7D$$eEEt.1U- t0ӋU9uԋE܉EE$dED$UЋB$tkE҉t <[^_]ËEP$R<[^_].1<[^_]á31D$7$1<[^_]$Et‹EB UЋB$E`1t& 9}|$UЋB$pD$Uԉ$T$artz=2u"22u2$2P딋@=`2tD$`2$Xt {3D$$5u C$PUԋUԋB$P}1q3D$$뺋ED$KD$3$_9}t݉\$EމD$UЋB$=Uԋ z1fU(Eu}} ]$Etl@}E$t~x UtE$xtNCED$\$$pEtUtE]u}]ËF4$Pu C$PEu͍&C$Pu밍v'US1ۃE$tXt ؃[]ËB$PfUS1ۃE$tX t ؃[]ËB$PfUL3]]upNtUtE$5t\$F$3D‹]Ћu]á3D$`$t뻍UWVSE u$ x }$p utE$vteCD$\$<$ntHF=`2tD$`2$t ~3D$$tSt#EE[^_]fC$PҐt&B$P&F4$PuŐt&F EtFt0uF4$P{G<$fPEdG<$PŋC$P믍t&'U(Eu}} ]$SEtl@}E$Ot~x }tE$utNCED$\$$mEtUtE]u}]ËF4$Pu C$PEu͍&C$Pu밍v'UWVSE }$Yp}$Ix EtE$tCD$\$4$kEt@@=`2tD$`2$t Ex3D$4$ t{tTEu 1[^_]ËUuB1$Pۋu C$PEuF4$P롋B$PvC$Pfux t<t U[B$PMF4$PϋC$Pt&봐UEU]uEE ҉}L3Etz@1t1ҋEK(s,{0C(EɉS0C,t tWt t8t t ]u}]ËG}]u}H]ᐍt&F4$P뽐t&A $P&뗋B$Pt&[t&'UUE ttD$D$$áL3U]@(ÍvL3UEJ(E J,EJ0B(B,B0]Ð&UD$D$$nÍUWVS EeU1҅t%U ~D$1$u$1Ue3u} [^_]Ív9u t8ED$ \$D$<$VtEt< uЃ9u uȉ$t&< t< t< t$6pw't&'U8$|]uu}}*t-$D$$Et+Mu/E $D$i1ҋ]Ћu}]ËC$PʅtH&tEEt$|$$D$ED$ED$ E D$zu뚋=3밾2봉D$ED$$;gƋt%t‹1҃RF4$P1BC$PЍ&'U]]}} u&t$D$$ju!|$$D1ҋ]Ћu}]Åt!\$|$$}yű3׉4$D$D$RfƋtt̋1҃uF4$P1녋C$P׍UWVS&E] 83.1ہ~I2w I2Qt|$$躴2F=`2tD$`2$DD$\$<$keEEt|L3E]B(ɉ] B,]B0B(B,B03A $PE] 83[^_]ËF4$PvG<$P\C$PE9tuuE8] 3[^_]Í&^22a&t$$Å $fًF4$P9{tߋE8] 3fG<$Pv'UWVSEEL3P0p(x,U@(@,@0$D$$otDD$\$4$mt,2t$\$$w oD$\$<$l\$$}oD$\$E$l\$$VoD$D$$t tKt t/EtUt[^_]ËBUH[^_]G<$PfF4$P&룍&'UEtD$D$$xÍUVS uEED$E $ttCD$\$4$,t 1[^]ËC$P 1[^]Í4$D$D$ 1[^] U3D$ $EÍvUE D$0D$ ED$3$Ðt&U(]uu}} tc۸uftn\$|$ D$$*tÅt)tD$\$4$t?]1u}]uv$u\$D$$Rs딋C$Pv볍&'UED$$Ðt&UE uu]tO$h4$D$ۉt t]u]Í&C$P]u]Éu]E u]vUE ]uu$gtt@D$\$4$t ]u]ËC]u]H]4$D$D$]u]Í&UWVSL3eE1uJ(B,B0B(B,B0D$D$$E $3D$D$_$ rtT4$\f D$D$`$ E D$2D$Ǜ$ ; 3t>D$Û$$D$$$tD $D$D$Ee3[^_]Í&D$2D$$ tD$D$$yD$D$$[ C$PD$D$$,P$iD$D$Û$% tC$P4$1D$T>ED$ \$D$<$nJt Et< uЃ9u uȉ$< t< t< t$t&cD$D$Λ$WC$PD$D$$^C$PE [D$D$$D$D$$E D$D$$]kD$D$$<fU(]E]uu }ED$.$!hU~ I2t]u]}]vbEED$)U$ EtRG$5btt$$ti\$U$T$VNjuKF4$P@)؉D$$KEtD$D$)E$x1ۍ1EtUtOt t5EtUt]u}]ÍB$PC$PB$P륋5353$\!att\1D$\$4$[wC1$PgGEftEh1ED$1D$4$$'UVS53$v`tt=D$\$4$t 1[^]ËC$P1[^]É4$D$D$t1[^]Ít&'UWVSLEU EUC;B=`2tD$`2$oE$޹EEUET ҉UB=`2tD$`2$Ẻ$芹EEUċE̋T ҉UpB=`2tD$`2$iAE؉$6E8EUЋE؋T ҉U B=`2tD$`2$E$EEU܋ET ҉UB=`2tD$`2$E$莸E~tEUEt tSF=`2D$`2$tExI2 x I29EE9EuEE9E3EE9EEE9EkEE9EvL1[^_]Í4$踷~19tD D$U$dtL[^_]ËExI2sx I2>;EuɃEE9EyAt&ExI2x I2V;EuEE9EExI2x I2k;EBEE9EJExI2-x I2;EEE9EUzI2z I2tiU19UL[^_]Á~ I2t$$ @Uz I2T$$&@Ex I2uE UL[^_]麢B‰EcUz I2T$$葢@tÚz I2T$$hv@U؁z I2T$$<}&@X&U3D$L3@($u-3t'3tD$T$$ 1á3t$D$D$1Ít&UWVS L3p(tkUtdUB=`2tD$`2$tME$x~219t'UD 4$D$$t [^_]Ív1 [^_]Á~I2t3~ I2t1;u [^_]ËEx I2uD$4$ܠ뼋vȐUHu։]}EԉMf-f@w$8Vf= t)f= t#FMԉA1]u}]Ã~ u#fV밋vuf>FUԉB1ƋF tӅ11EE&(9~ Vf: uMЋE*E܅E뾋F 11낐9^ rVf: uMЋE֋UԃztVf: ;Ff8tFUԉB1Mԋu1^xC$p C;}PtG\$|$ D$3D$8$\6;}Zt\$UT$ ˸.p.벸.ې&U8]] uu}ljeE1ztUe3]u}]Åt3\$$̅6t$ D$cD$$B_! t€u҉˃+)…T$$|$ D$m^$Ë+S1D$ )Љ$D$yD$^$DË~{v+~$D$D$ )ЉD$9^ӺT$$D$^$É+; Uu։}lj] tOD$<$^tKD$$uH1҃u C$P1ҋ]Ћu}]$Lu<$Љ<$uC$P U]ˉ}ljUuPUB<8w $<2A tG@ D$D$ E UD$D$$\E]u}]ËBG2=b2tD$b2$H 3D$p$+ 2A tG@ D$D$ U MD$T$ $!\jBE$|$$2A tG@ D$D$ !BG2=b2tD$b2$M[3D$p$>2A tG@ D$D$ )BG2=b2tD$b2$3D$p$2A tG@ D$D$ ,BG=g2 D$g2$qG=u2 D$u2$K 2A tG@ D$D$ DP<$E0!Ѓ Ept&EMEMP<$$\]L2A tG@ D$D$ BG2=b2tD$b2$ͳ;3D$p$2A tG@ D$D$ BG=@2t<$趭t(Ct2A tG@ D$D$ <$rf<$Wtft2A tG@ D$D$ <$be ~3D$ $N<$!a 2A tG@ D$D$ <$ݥ2A tG@ D$D$ <$虥=v3D$$g<$v{<$1҉Sg2A tB D$D$ B҉U<G= 2tD$ 2$EFUEȀ:#B( UċS Mȃ; u F4$P2A tG@ D$D$ t&G$<$N9a2A tG@ D$D$ pRG 3GPPMpG= 27D$ 2$G=@2D$@2$rGXP CD$<$кP 2A tG@ D$T$ PP0@EЋG=@2cD$@2$)KGXPCD$<$кP2A tG@ D$T$ W@T&V VD$<$҃ 2A tG@ D$D$ P2PUPp0G= 2D$ 2$#G=@2yD$@2$aGXPSD$<$҃GPD<$"A<$(2A tP T$D$ x{<$*CEt$D$$K ỦƋbF= 23D$ 2$2A tG@ D$D$ G GMЉEUGGEECECEC EE2B<$J뗡3D$$K2A tG@ D$D$ G,UGGA52A tG@ D$D$ BB2GZt$$蹫xV 3D$$2A tG@ D$D$ JD$<$ N^$T9EE2A tG@ D$D$ BB Z<$х2A tG@ D$D$ G2A tG@ D$D$ BB B<$D$х2A tG@ D$D$ Ghn_2A tG@ D$D$ =.2A tG@ D$D$ 2A tG@ D$D$ ȭ@2A tG@ D$D$ !UD$<$T$VU:#gP~D$<$gqM@BRU.M4MȃEăEFL$D$$ǰUȉF4$PG@ D$ D$B$P]D$<$M@B}tEȃ$˲UąNUF2A tG@ D$D$ $2A tG@ D$D$ ,oF4$P2A tG@ D$D$ U$u F4$P2A tG@ D$D$ p}tEȃ$ʱMą U42A tG@ D$D$ Uu F4$P2A tG@ D$D$ 2A tG@ D$D$ ,EċEȉ\$$D$iED$<$D$V EPUF4$P=t]2A tG@ D$D$ t$D$<$GUF4$PF4$P뒋ED$<$D$x;ED$<$D$GyF4$Pt&IGG&'UW1VS18Dž8#x,e,$01B$P.Dž8(HD$$PD$DžhTlXh4$\$!tV~~1ۋF $ 3$9uu%F4$P1]3D$$A1AHD$D$h$PD$ D$tu B$P!$L?s`„һ.ui`u\\&9`t.uT_D$T\$|$ L$T$D$ D$D$$U1X@L谗ӋDP(|:;L3D$t$$!2{~1C $0$9uC$P15.DžT\DžhXCTL$h$`~V1ېt&F $?0$G9uv*.DžTV.T_tTD$D$\$ 6.DžTԍ&UEMU $EEOÍ'UEU EEM$Í'UEU EEM$ÐU]ÐUxE $蛐UT$$D$脚 EÐU)]ÐUWVS }ut G"t t DB unEE踔 EEEuJCS9EǍ )1;EtE=MUZtS9t=w謘늍=w 蓘fCwbS9~[EǍ )Ӻgfff);UtEMUZtS9uCvU tE 0Eth "EE [^_]À0 t t14B$P1$G=g2tD$g2$t<$}f1G=g2tD$g2$O<$}1G= 2tD$ 2$赉<$'f <$r'1xG=g2D$g2$bG=b2tD$b2$@<$011G=g2D$g2$ G=b2tD$b2$N<$01jG=g26D$g2$計G=u2tD$u2$膈<$1_<$E|P1$G<$-|P1$/3D$|$(&'UWVS,E }ta&tM|$$臕u]FEFEF EEED$ED$E$2,[^_]á 3|$$艴,[^_]ÍU]] uuC u8S{v#D$e31$6]u]ËC$tD$431$ȋE]u]~]]u]X02듉U]u]h1RP],$]u]EE ]Uu]2u2딋tE]g22D$ 3$)t&U W VSuVtM:uމL$$詍u΋E)E뤋EtA 9tM냋MUt@ eE UMD$T$ L$F$ukUME@Cpt@8u;B U9Eum8u'A M;Et[U P@BXuԸ 뗡3D$D$$D$ Ԉt&US]x$h][]Kt&'U(}}]u_tw$|1tStƋE $BÉxtztE <$D$oF9t1BHXB]u}]Ív<$|3D$D$$D$ ʇ뺉4$1rf묐U(uơ3]Ӊ}υtE|$\$4$1҅t]Ћu}]É<$AuE8u,3$" xtfUWVSE] }E$d{$yt3<$D$3u$TMdE4$Ą| u3fM}߉uz<$菄ÐtwE| tcsuD$E$t6y3D$$(떃t EfE$1[^_]ÃtCE EE[^_]K UWVS ,3;L3]u 033L3,3 D$ǡ3$o$s}$ku>E$t$D$(É<$3$,3 [^_]É4$!}$tE$t$D$03뫐03?3=31D$$軧뒐US$UBuJt.T$BD$B\$L$$D$ Y$[]fT$BD$ B \$$lD$Y$[]Ð&US]St t][]&CP$R][]&US]xUC $t<@i3@@ B ZBBB[]Ã[]3D$$h1Սt&Uuu}}]^M VtuBXPD$$SujVtP|$D$F$҅x F9~^t)9})ˉ؋u]}]ËS뭋F ^ӡ3D$$葥¡3D$$u릡3D$$Y늍&U8E]u}EED$$$谶u1]u}]ÍED$ED$ ED$E D$-$tŋ]}uSBPt{tu@tni3fxgi3$D$i3$q]X@ xp@@93D$9$>13D$$"1KcCt)!ƒt9| s=3D$$ѣ1v'US] |Ri3$D$i3$脹1t'BEZBBB B[]á3D$$J1[]fU]]uu }}SBPH@txi3xvi3$)D$i3$蹸1҅t#‰X@ xp@@]Ћu}]Ð3D$9${1׍&3D$$[1뷍&KQCt)!ƒt9| s+3D$$1_ US] |Ri3$$D$i3$贷1t'BEZBBB B[]á3D$$z1[]fU]]uu }}SBP@tyi3fxvi3$YD$i3$1҅t#‰X@ xp@@]Ћu}]Ð3D$9$諠1׍&3D$$苠1뷍&KPCt)!ƒt9| s*3D$$61_ U(E uu]}VBXPD$$S~t[}|$D$F$҅x(F9~^t;9})ˋUE؋u]}]ËS뢍t&F E^Րt&3D$$B븡3D$$&뜍t&U(uu]}VBXPD$$SFtb}|$D$F$҉x1F9~VtF9})ڋE t,E ]u}]ËS뛋F EE VuԸא붡3D$$GU(uu]}VBXPD$$SzFt_}|$D$F$҉1x/F9~Vt99})ڋET$$O]u}]fS랋F EV҉á3D$$w1čvUWVS}_t [^_]fGWBpPD$$VGtut$D$G$҅xG9~_tb9} )ˍ&u1xiCB119u1Ӄt _؃[^_]ËV{G E_봳܉뚡3D$$g3D$0$M&UWVS,]} SVBpPD$$VKut$D$C$҅C9~[]9})ʉUWBXPD$$SW]\$D$G$҅}G9~ _9})ˋU9~څ~4u9҉ы}(t|-,[^_]ËV9]|,[^_]Ðt&,[^_]ÍvC E[]WG E_rS%vӉUE3D$$tbv'UE uu}}]VtyBXPD$$SutFtP|$D$F$ҹx F9~Nt3 9})ً]ȋu}]ËS뭍t&F Nލɡ3D$$藙븡3D$${뜍t&UWVS}Gu.UBpPFD$U$Ѓ%WnBXPD$$SO]\$D$G$҅G9~ _9})ˍED$D$E$xzU 1Ʌx M 9~1;M U9~)91҅t2MD$E $D$s1[^_]Í;[^_]ËS*t&[^_]ÉJ3D$$՗븡3D$$蹗뜡3D$T$蝗뀋G E_&UWVSuFsVBXPD$$SFtz}|$D$F$҅F9~V9})ڍvE x9U |)3D$$ϖ[^_]fS냋EtTUBXPtGtACt:D$M $ЃtL3D$$p[^_]Ív{[^_]ËF EVP;ED$D$E$y [^_]Ãu5EM E1,3D$$ 3D$$•&UWVSuVBXPD$$SV}|$D$F$҉1xSF9~Nt^ 9})ًEU #E#U 9~9})UD$$[^_]Ðt&SyF EN뭉랡3D$$Ĕ1U(uu]}VBXPD$$S~tq}|$D$F$҉1xCF9~Vti9})ڋM x9U |43D$P$1]u}]ËS댋F EVEE E D$$ȍv듡3D$$Ǔ1먍vUWVS,uV*BXPD$$SF]\$D$F$EF9~ vu]9})ʉU} E$#} ljD$EtLEt<1E$D$ED$m]9uU܍GEUЉE܋]E؃,[^_]ËS&Ub3D$$舒ENjF EvuB&'U8]] }}uC@PE@D$$ЃWBpPD$$VuvGtjut$D$G$҅xxG9~t_99} )ϐt&uS&諘1ۉ؋u]}]ËV듡31D$$^ӋG E뱉1U܍ED$D$$ExE؉D$$|$ƍXE$D$kE$D$ED$kUDN&U(uu]}Vt|BXPD$$SurNtW}|$D$F$Һx#F9~Vt.9})ڍv]Ћu}]ÐS릋F EVΡ3D$$UEM U@t U E]t&]1ÍUS]St tC1[]Ðt&CP$R1C[]Ðt&UUBt D$ @@ T$$D$AÉT$$AÍ&'UEU HtRtU M]阮z]Í&'US]CP@CCCPSt t ][]鈆CP$R][]o Uuu]] ~k3u6Vt tt^1]u]ËFP$RD$#$苌͍t&UUzk3uBtBD$$K1Í&UVS]$k31tEۉ^t^{t $C1F1@C1X[^]ÐUS]StC tD$C$҉][]߻C$҉][]ʻv'UUt zl3tD$(3$1ÐBuߋE BÍUEtxl3t*D$P3$襌Ђ1҅tɉÍP ɉD$t3$t1UEtxl3t*D$3$Ep1҅tɉÍPɉD$3$1US] tBl3$ED$l3$ա1tEBEZ BЃ[]Í3D$$請1[]ÍvUl3$ݺD$l3$m1tEBE B BÍ&'UEu}1]$ĭtTE 4$D$ߗt4xl3tP31D$$$tTt3t]u}]ËF4$Pxu͋C$Puѡ3D$$臊땐UEM U@t U E]t&]1ÍUEM U@t U E]t&]1ÍU]]uu}} Ct t$$ׅu$S 1tu ]Uu}]ᐍt&]u}]ÍvUS]CP@CCCPSt twS t tUSt t3St tC][]CP$RߋCP$Rf뽋C P$Rf뛋CP$Rfvt&'U]]uu}} Ct t$$ׅuGC t t$$ׅu3Ct t$$ׅuS1tu ]Uu}]]u}]US]CP@CCCPC҉u CP$R][]US]CP@CCCPSt tES t t][]C P$R][]w&CP$RfUE@@@t E]$t&22]fUE@@E]'UE@@tE]&22]fUE@@ tE]&22]fUE@@tE]w&22]fUE@@ tE]G&22]fUS4]ED$ED$ED$ED$EEEED$E ED$ p3D$<$tx1}2P1#U}2U!E1}2!EtEtEtUtUECEC ES1҉C4[]ÍvUUEM t}@ tGtwT$ L$D$+$…ҹt 1ɃtɉËB$P1ɉÅҸKtbD$ 3$ɉÍ&@끉L$D$+$7닍vUU Et"2t@tUE +ED$v 3$蔄1U$ p3]]u}} 蟍tEXXx {t $C1F1@C1X]u}]Ðt&UVS]$p3)t?XX{t $C1F1@C1X[^]Ít&'U(uE u]]}EVBH M~ @t]C=x2tDD$x2$NVu0F@D$dD$3$ɀ1]u}]É$TuċVMB]}uM ME}]\$ BD$E<$D$fUS]$^z31U3St tZS t t8$Pz33ң3t~7[]É][]fC P$RfCP$Rt&딃[]ԃt&UED$D$My@$<Ív'UED$D$>@$ Ív'UED$D$3@$Ív'UED$D$*@$Ív'UED$D$B@$|Ív'UED$D$7@$LÍv'UED$D$]@$Ív'U(ED$ED$E E2D$ D$D$$蒒1҅t.ED$+D$D$ED$ E@$ɉÍv'UE@E]F&'UE D$E@$Ex EH(1Ít&UE@E]&'UE@E]&'UE@E]~&'UE@E]Μ&'UE@E]Α&'UE@E]Ξ&'UE ]uu}8D$$ s3d1҅t!ts<$C tE ډC]Ћu}]Ë1҃uC$P1׍vUV1SED$PT$@$tt#ED$E $D$=Ƌt[^]Í&C$P[^]Í&'UVS]Cp C t?@= 2tD$ 2$Qt!C t$D$$0[^]ø%fUVS]Cp C t?@= 2tD$ 2$Pt!C t$D$$ 0[^]ø%fU(]] uu}SF9tyD$$MPuiCx FX F t@= 2tlD$ 2$PuX%|$\$ D$D$3$z1]u}]ÍvF}]u]E ]VF 륃U(uu }}]FE^ G$D$uwCp GX G tV@= 2tD$ 2$JOt8G D$3t$1\$ D$ $y]u}]ø%Ǎ&D$\$G$qtiED$4$D$LE\$<$D$oƋtvG<$PhC$P1VGX G t@= 2t=D$ 2$LNu)%D$31\$ D$$xG ԋuG1<$PU(uu]] }}F$D$)t(FH@u} }]]E]Cx FX F t@= 2tLD$ 2$pMu8%|$\$ D$D$T3$w]u}]ËF ŋFX F t@= 2t8D$ 2$Mu$%\$ D$D$3$w뗋F ِt&U(]]uE }utVC=@2tD$@2$LF$D$Lt/] }EF]uE]^oX띐F{ X F tT@= 2tD$ 2$&Lt6F |$\$ D$D$X3$v]1u}]ø%ɋCx FX F t@= 2tdS t tt.$1t|E~F ]u}]Ít&F ҉t F҉u‹FP$R1빋F P$vRϋuG1<$P됍vUtpG<$PbB$PؐUEM E E@E]ᐍ&UL3uu]}~ ^K$BtBC F $@F S ҉tC tn2t]u}]ÐC$u22uL21$2PŐt&31D$$Ii맍&B$P2u1눐&US]CP@CCCPCt$XÉE1}EfC\$D$ |$U$`.u܋EU X$"\$$UT$ U؉T$T$U܉D$T$E D$ D$ UB D$B$ $ËE܉$]L[^_]ÍS U؉$"Et!+m1ʍ&US]C$K\$$vD$[]ÐUS]CP@CCCPS$t$3C҉C ҉S(tC҉|StStS tSt t ][];WCP$R][]"WfCP$RsC P$Rv7CP$RCP$RiCP$RBC P$R]&C(P$Rt&t&'UVSu] ~ ~3u]2tQC=`2tD$`2$1tRVt t^1[^]fFP$Rf1D$$\ȡ3D$$^묐t&UEx ~3u@D$$E\1ÐUVSu] ~ ~3u~2trtC=`2t5D$`2$0u!3D$$][^]ÃVt t ^1[^]ËFP$R1D$k$[UEx ~3u@D$a$e[1ÐUEx ~3u@(D$W$5[1ÐUEx ~3u@ D$M$[1ÐUEx ~3u@D$C$Z1ÐUWVS ]$ ~3e@$XE F C4FFF{2<$~4D$<$MË@= 2tD$ 2$.^F F( 33D$E $)tF(^{t $C1F1@C1X [^_]Í 1[^_]ÍC=@2YD$@2$".A27$J*3@uF4$P1 UVSPEE2E2E2D$(ED$$ED$ ED$ED$x2D$D$`,3D$ `3D$ED$E $ޕE=2t"@= 2tD$ 2$2-E=2t"@=`2tD$`2$-EM@(pA=`2tKD$`2$,u4}23D$D$YP1[^]ÐM1ہ2tY9t<\$t$ E@4D$lD$3$WP[^]ÃP1[^]ft0~.A 1ҋ@=k3tt&D @=k3u|9uED$E$tE=2tC҉ECE=2tCE=2tCP[^]Á}2닋@ D$D$3$*V#3D$$pX13D$$TX1CP$RW3D$$&X1 US]uC t*C S []á3D$D$W111҅C uύUVSu] }2tUtYC=`2tD$`2$o*t@V҉^t t 1[^]ËB$P1[^]ËV1̐Vơ3D$$W뾡3D$D$V뢍vUS]u%Ct C[]Ã2[2]á3D$D$V1 UVSu] ]u}t=C= 2tD$ 2$[)tV1Ƀ^t1[^]á3D$$#V[^]Ðt&B$P1[^]á3D$D$UU(]] uu}覾ust {`,3t)3D$$U]ȋu}]ËC(1@EFtx;}u?V1Ƀ^uB$P1봡3D$D$:U똋F$U|$ D$@T$D$3$R_v'US]uCC[]á3D$D$T1ᐐUE]@Ðt&UU]B+BfU]]u{3t D$$RR1]u]$`3i1tS K[FCډV^N ]u]Ðt&US]{3tD$$RIR1[]Ð$`3Ti1tBCB C BCB[]Ít&'UMQ;Q|]1ÉЃAA QE]USU MxA9|3D$$CS1[]ÉÉQ QU[].&'UMQu0A tKD$ AT$$D$iÍ&A uЉAT$$wD$?ËA$kD$*Ð&U}uu}}]t%3D$$`R1]u}]Ð$3gtGE t7E E~2p)9Eu5{E s C릍t&11땍v;)9Eǡ3D$$QuȋC$P1Q US$EE] EED$$bu 1$[]f$8ED$ED$ ED$D$D$tUEM9+1$3|ftEZBEB $[])ȉу1Xyš3D$$P1IED$D$$艔k"EM9t)ډу1X뛡3D$p$WP1UEM U@t U E]t&]1ÍUE@E]޽&'UE D$G2D$E@$}'1҃t 22ɉÍU]] uu}C=3t=3tD$3$"tD$3C$avU(Uu]}B$# ED$1$@EtIED$K$@QU|$ \$B$D$EtLt/t tE]u}]ËG<$P名t&F4$P&뿋C$Pt&i:22b&U3D$$CÍ&'U3D$$CÍ&'UWVS,u EF=3t=3tD$3$<trUB$ËF$9=^}uED$ |$t$UB$#tE$D$ũG2G2,[^_]D$3F$s3/1ۅtljD$E$ËuF4$P렻G2G2؃,[^_]Ív'U]] uu}C=3t=3tD$3$tu }]u]]D$3C$u҉ڸ3l1t"D$4$xNju C$P]u}]ÍvU1҉WVS,]u CE@EF{=3t=3tD$3$RvF=x2D$x2$)~x24$ܮf$舜Et=D$<$ E҉uϋEP$R$KEuËg6U܅t_1҃,[^_]É4$F<$<9CƁ~x2=E]荴&EUD$ T$\$4$V E<$D$tD$G2ED$U$uU܋Pt&D$G2ED$E$VU܋txE҉EP$R1U܃,[^_]D$3F$KC$Pt&U܋B$P1B$PzC$P]t&'UVSu] F=3t=3tD$3$tmC=3t=3tD$3$t] u[^]&D$3C$muу2[2^]ÍD$3F$=twt&UE@E]&'UE D$E$t E*1ÍUS]C$1C []ÍUS]C$[2C 2[]fUSE]$D$Nu1[]Í&[1]fUS$]ES3t#3tD$3$ SED$D$ D$B D$E $Nu $[]ËC$~C Eu$1[]ÉD$$t‹uۋB$P1D$3C$k_덐U(EE$D$Mu1ÍED$D$ D$UB D$E $ Nt̋Ut z3t EÃEÍUWVS,uEF t,[^_]ËF}$ iMr#t&E$B5M[1i4?1ӍED$ ED$|$F$ui 6t F ,[^_]ø8#&'U}}]uG$su1ۉ؋u]}]É$tJƋt9t֍FD$G@ $D$VËuF4$P룋C$Pt&뷍&'UWV.S,UE] }B@ D$$D$dEUD$ T$|$UB$ht94$c\$OD$\$E$ Ot,[^_]É\$ D$D$$,1[^_]ÐUS]$^1Kt$ St tC][]CP$RߍUS]C$+ u31D$$@9؃[]D$D$"C1ۉ$[tՋX uċB$P؃[]ÍvUuu ]]}}F=3t=3tD$3$ t*v22]u}]Ðt&$D$3F$v uG2G2fu ]}u}]G$ ËF$ 9~3u ]}u}]G$ ËF$ 9|G2G27]F]uE G}E]TD$3$71'UWVS ]E 9u&C$2 2C 2 [^_]É$t^{4$Ȓt3\$<$V tAu֋C$P4$蕒u͋t=-t# 1[^_]Ð3$Ct#J-맃22XF4$P븋tuC$P1'F4$Pڍt&'UVS] uC=3t=3tD$3$A t=\$4$1tt[^]fB$P琍t&D$3C$u22t&'UUB=3t]J]ÍvUWVS,] EC=x2tD$x2$UB1EtB@}uEE$D$*t,UED$ |$t$B$YűE܃,[^_]ËEUD$G2D$$ uEfC=3t=3tD$3$t[HD$3C$uUB1Eq\$$tPB$PBU܋ZB$PEUVSu] F=3t=3tD$3$tmC=3t=3tD$3$t] u[^]'&D$3C$uу2[2^]ÍD$3F$twt&USUBt8E $D$t+t؃[]ËB$P퐍t&1[]ËuC$P1U]] }}u\$G$u22]u}]á3$?C=3t=3tD$3$3$?u1(1Ҹ3stPt@tgs\$<$%ƋHC$P:(D$3C$\hB$P&뇍&'U]] }}u\$G$u22]u}]ËC=3t=3tD$3$\3$g>u1'1Ҹ3stPt@u B$Pvs\$<$.ƋQC$PCD$3C$`1!'UVS]u C=3t=3tD$3$qF=3t=3tD$3$HtECt$$dtwt ؃[^]ËB$PD$3F$u2[2^]Ðt&D$3C$tKt&1[^]ËuC$P1{U]Ít&'UWVS^M;E)E}Ut+1ƍED$E D$E$9}u߃[^_]Ë$ÐUS E ى$D$ED$p []ÐUS E Ù$D$ED$ []ÐUSt Ћu[]US[4Y[_codecs_sreerrnoimpposixpwdmarshal__main__sysgcBaseHTTPServerFixTkSocketServerStringIOTkconstantsTkinterUserDict_LWPCookieJar_MozillaCookieJar__future___threading_local_xmlplusapportapport.fileutilsapport.packaging_implapport.reportapport_python_hookatexitbase64bdbbisectcalendarcmdcookielibcopycopy_regdifflibdisdistutilsdistutils.dep_utildistutils.errorsdistutils.logdistutils.spawndistutils.sysconfigdistutils.text_filedistutils.utildoctestdummy_threaddummy_threadingemailemail.Charsetemail.Encodersemail.Errorsemail.FeedParseremail.Generatoremail.Headeremail.Iteratorsemail.MIMEBaseemail.MIMEMultipartemail.MIMENonMultipartemail.MIMETextemail.Messageemail.Parseremail.Utilsemail._parseaddremail.base64MIMEemail.quopriMIMEencodingsencodings.aliasesfnmatchformatterftplibgetoptgetpassglobgopherlibgzipheapqhtmlentitydefshtmllibhttplibinspectlinecachelocaleloggingmacpathmacurl2pathmarkupbasemimetoolsmimetypesntpathnturl2pathos2emxpathpdbpopen2posixpathpprintproblem_reportpy_compilepydocquoprirandomreprrfc822sgmllibshutilsitesocketsre_compilesre_constantssre_parsesubprocesstempfiletokenizeunittesturlliburllib2urlparseuuwarningsweakrefwebbrowserxmlxml.domxml.dom.NodeFilterxml.dom.domregxml.dom.expatbuilderxml.dom.minicompatxml.dom.minidomxml.dom.pulldomxml.dom.xmlbuilderxml.parsersxml.parsers.expatxml.saxxml.sax._exceptionsxml.sax.expatreaderxml.sax.handlerxml.sax.saxutilsxml.sax.xmlreader__hello____phello____phello__.spamPYTHONINSPECTPYTHONUNBUFFEREDPython %s %s __main__ not frozen2.4.4%.80s (%.80s) %.80ss:get_frozen_objectnot holding the import locks:new_modulessi# clear __builtin__._ # clear sys.%s # restore sys.%s # cleanup __main__ # cleanup[1] %s # cleanup[2] %s # cleanup sys # cleanup __builtin__ .pyc.pyos:is_builtinmodule name is too longmeta_pathsOpath_hookspath_importer_cache# trying %s rbNo module named %.200ss|O:find_moduleOs(ssi)s:is_frozenimport %s # builtin s:init_builtin__builtins____file__ packageimport %s # frozen%s __path__s:init_frozenBad magic number in %.200sNon-code object in %.200s# %s has bad magic # %s has bad mtime # %s matches %s import %s # from %s wb# can't create %s # can't write %s # wrote %s import hook without loadersOs(ssi):load_moduleinvalid file open mode %.200sbad/closed file object__all__Module name too longEmpty module name__doc__[s]{OO}OOOOimport %s # directory %s [O]ss:load_package# installing zipimport hook zipimport# can't import zipimport zipimporter# installed zipimport hook ss|O!:load_compiledss|O!:load_sourcess|O!:load_dynamicSEARCH_ERRORPY_SOURCEPY_COMPILEDC_EXTENSIONPY_RESOURCEPKG_DIRECTORYC_BUILTINPY_FROZENPY_CODERESOURCEIMP_HOOKget_magicget_suffixeslock_heldacquire_lockrelease_lockps1ps2exitfunclast_typelast_valuelast_traceback__stdin____stdout__stderr__stderr__No such frozen object named %.200sExcluded frozen object named %.200sPyImport_GetModuleDict: no module dictionary!Can't intiialize import file table.sys.meta_path must be a list of import hooksfull frozen module name too longNo frozen submodule named %.200ssys.path must be a list of directory namessys.path_hooks must be a list of import hookssys.path_importer_cache must be a dict_PyImport_FixupExtension: module %.200s not loadedimport %s # previously loaded (%s) Cannot re-init internal module %.200sLoaded module %.200s not found in sys.modulesimport: deleting existing key insys.modules failedfrozen object %.200s is not a code objectimport %s # precompiled from %s unable to get modification time from '%s'file object required for import (type code %d)Purported %s module %.200s not found%s module %.200s not properly initializedDon't know how to import %.200s (type code %d)load_module arg#2 should be a file or Nonereload() argument must be modulereload(): module %.200s not in sys.modulesreload(): parent %.200s not in sys.modulesItem in ``from list'' not a stringinitializing sys.meta_path, sys.path_hooks or path_importer_cache failed# can't import zipimport.zipimporter 7Neyvhdynamic module does not define init function (init%.200s)dynamic module not initialized properlyimport %s # dynamically loaded from %s bad marshal dataatofNULL object in marshal dataO:loads#|i:loadsOO|i:dumpunmarshallable objectO|i:dumpsEOF read where object expectedcannot unmarshal code objects in restricted execution modemarshal.load() arg must be fileXXX readobject called with exception set marshal.dump() 2nd arg must be fileobject too deeply nested to marshal,)fT:5PyModule_AddObject() needs module as first argPyModule_AddObject() needs non-NULL valueInterpreter not initialized (version mismatch?)module functions cannot set METH_CLASS or METH_STATICstring too long for Python stringNULL object passed to Py_BuildValuebad format char passed to Py_BuildValuemodule '%s' has no __dict__unmatched paren in formatUnmatched paren in format                                                    F !   F[ P           o      F  FF [F           oPPPPPPPPWPPPPPPPPPPPPPPPPPPPPPPWPPWPPWPPPWPPPPPPPPPPPPPWPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPo````````g``````````````````````g``g``g```g`````````````g```````````````````````````````````````````````````````````````@@@@@@@@F@@@@@@@@@@@@@@@@@@@@@@F@@F@@F@@@F@@@@@@@@@@@@@F@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@````````f``````````````````````f``f``f```f`````````````f```````````````````````````````````````````````````````````````PyThreadState_Get: no current threadPyThreadState_Delete: NULL tstatePyThreadState_Delete: NULL interpPyThreadState_Delete: invalid tstatePyThreadState_DeleteCurrent: no current tstatePyThreadState_Delete: tstate is still currentPyThreadState_Clear: warning: thread still has a frame Couldn't create autoTLSkey mappingCan't initialize threads for interpreterCouldn't create thread-state for new threadPyInterpreterState_Delete: invalid interpPyInterpreterState_Delete: remaining threadsauto-releasing thread-state, but no thread-state for this threadThis thread state must be current when releasing???Fatal Python error: %s unexpected EOF while parsingexpected an indented blockunexpected indentinvalid syntaxinvalid tokenunknown decode errorerror=%d unknown parsing errorexpression too long(sO)unexpected unindentlost sys.stderr print_file_and_lineO(ziiz)msgoffsettext File "", line ^ modulesPYTHONHOMEexcepthookError in sys.excepthook: Original exception was: sys.excepthook is missing Error in sys.exitfunc: >>> ... Bad magic number in .pyc fileBad code object in .pyc filecan't create __main__ modulePYTHONDEBUGPYTHONVERBOSEPYTHONOPTIMIZECannot set codeset of stdinCannot set codeset of stdoutpythonEOF while scanning triple-quoted stringEOL while scanning single-quoted stringinconsistent use of tabs and spaces in indentationunindent does not match any outer indentation leveltoo many levels of indentation'import site' failed; traceback: 'import site' failed; use -v for traceback python: Can't reopen .pyc file Py_EndInterpreter: thread is not currentPy_EndInterpreter: thread still has a framePy_EndInterpreter: not the last threadcan't add __builtins__ to __main__Py_NewInterpreter: call Py_Initialize firstPy_Initialize: can't make first interpreterPy_Initialize: can't make first threadPy_Initialize: can't init framesPy_Initialize: can't init intsPy_Initialize: can't make modules dictionaryPy_Initialize: can't initialize __builtin__Py_Initialize: can't initialize builtins dictPy_Initialize: can't initialize sysPy_Initialize: can't initialize sys dict{(((((''))])m)})* *(OOO)i:setdlopenflagsi:setcheckintervalOO:call_tracingc_callc_exceptionc_return|i:_getframecall stack is not deep enoughi:setrecursionlimits:setdefaultencoding|O:exit is a directory__displayhook____excepthook__hexversionfinaliiisiversion_infoapi_versioncopyrightplatformexecutableexec_prefixmaxintmaxunicodebuiltin_module_nameslittlebyteorderpydebugwarnoptions... truncatedlost __builtin__no mem for sys.argvcan't assign sys.argv-cno mem for sys.path insertionsys.path.insert(0) failedcan't create sys.pathcan't assign sys.pathcallstatsexc_infoexc_cleargetdefaultencodinggetdlopenflagsgetfilesystemencodinggetrefcountgetrecursionlimitgetcheckintervalsetprofilesettracerecursion limit must be positive../Python/traceback.ctracebacklimittb_nexttb_frametb_lastitb_linenoTraceback (most recent call last): File "%.500s", line %d, in %.500s 'l%./%-.255sinit%.200sdlopen("%s", %x); unknown dlopen() errormodule.sosem_postsem_destroysem_initsem_waitsem_trywaitbuffer overflow in getpath.c's joinpath()Could not find platform independent libraries Could not find platform dependent libraries Consider setting $PYTHONHOME to [:] Not enough memory for dynamic PYTHONPATH. Using default static PYTHONPATH. PYTHONPATHos.pyModules/Setup/usrlib/python00.ziplib/lib-dynload:plat-linux2:lib-tk..LibGC object already trackedgarbageDEBUG_STATSDEBUG_COLLECTABLEDEBUG_UNCOLLECTABLEDEBUG_INSTANCESDEBUG_OBJECTSDEBUG_SAVEALLDEBUG_LEAK(iii)i|ii:set_thresholdi:set_debug__del__ %ldgc: %.100s <%.100s %p> uncollectablegc: done. garbage collectionenabledisableisenabledget_debugget_thresholdcollectget_objectsget_referrersget_referentsgc couldn't allocate "__del__"gc: collecting generation %d... gc: objects in each generation:gc: %.100s <%.100s instance at %p> gc: done, %ld unreachable, %ld uncollectable. gc couldn't create gc.garbage listunexpected exception during garbage collectionthread.errorLockTyperelease unlocked lock|i:acquireno current thread identcan't allocate lockOO|O:start_new_threadfirst arg must be callable2nd arg must be a tuplecan't start new thread thread.local.%pthread._localThread-local datastart_newallocate_lockallocateexit_threadinterrupt_mainget_identthread.lockreleaselocked_locklockedLocal-data dictionaryoptional 3rd arg must be a dictionaryUnhandled exception in thread started by Initialization arguments are not supportedCouldn't get thread-state dictionary(iO)SIG_DFLSIG_IGNNSIGdefault_int_handlerSIGHUPSIGINTSIGQUITSIGILLSIGTRAPSIGIOTSIGABRTSIGFPESIGKILLSIGBUSSIGSEGVSIGSYSSIGPIPESIGALRMSIGTERMSIGUSR1SIGUSR2SIGCLDSIGCHLDSIGPWRSIGIOSIGURGSIGWINCHSIGPOLLSIGSTOPSIGTSTPSIGCONTSIGTTINSIGTTOUSIGVTALRMSIGPROFSIGXCPUSIGXFSZSIGRTMINSIGRTMAXi:getsignalsignal number out of rangeiO:signali:alarmpausesignal only works in main threadsignal handler must be signal.SIG_IGN, signal.SIG_DFL, or a callable objectLoad averages are unobtainableunrecognized configuration nameconfiguration names must be strings or integerstmpnam is a potential security risk to your programtempnam is a potential security risk to your programstrerror() argument out of rangesetgroups argument must be a sequenceunable to determine login nameexecv() arg 2 must be a tuple or listexecv() arg 2 must contain only stringsexecve() arg 2 must be a tuple or listexecve() arg 3 must be a mapping objectet;execve() arg 2 must contain only stringsexecve(): env.keys() or env.values() is not a lists;execve() arg 3 contains a non-string keys;execve() arg 3 contains a non-string valueutime() arg 2 must be a tuple (atime, mtime)SC_THREAD_DESTRUCTOR_ITERATIONSCS_XBS5_ILP32_OFFBIG_LINTFLAGSCS_XBS5_LPBIG_OFFBIG_LINTFLAGSinteger time of last modificationi:WSTOPSIGi:WTERMSIGi:WEXITSTATUSii:makedevi:minori:majorunexpected NULL from tmpnam_r|zz:tempnams:statvfsi:WIFEXITEDi:WIFSIGNALEDi:WIFSTOPPEDi:WCONTINUEDi:WCOREDUMP|i:stat_float_timesi:strerrors:unsetenviO:ftruncatei:isattyetet:symlinketet:renameetet:linket:removeet:rmdiret:chrootet:chdiri:_exits:systemeti:accessF_OKR_OKW_OKTMP_MAXWNOHANGWUNTRACEDO_RDONLYO_WRONLYO_RDWRO_NDELAYO_NONBLOCKO_APPENDO_DSYNCO_RSYNCO_SYNCO_NOCTTYO_CREATO_EXCLO_LARGEFILEO_DIRECTO_DIRECTORYO_NOFOLLOWEX_OKEX_USAGEEX_DATAERREX_NOINPUTEX_NOUSEREX_NOHOSTEX_UNAVAILABLEEX_SOFTWAREEX_OSERREX_OSFILEEX_CANTCREATEX_IOERREX_TEMPFAILEX_PROTOCOLEX_NOPERMEX_CONFIGconfstr_namessysconf_namesposix.stat_resultposix.statvfs_resultenvironpathconf_namess:readlinkO&:sysconfO&:confstrsO&:pathconfiO&:fpathconfw+bi:fstatvfsss:putenv%s=%ss|ii:mknods|i:mkfifo(ii)i|siinvalid file mode '%s'is#:writeii:readiOi:lseekii:dup2i:dupi:closeii:tcsetpgrpi:tcgetpgrpii:setpgidi:ttynamei:umaski:nicestricti:getpgid(sssss)i:getsiddddddii:waitpidO:setgidtoo many groupsgroups must be integersgroup id too bigi:setgidi:setuids|si:popenwtii:killpgii:killetO:execvetOO:execvei:fstateti|ietO:utimeet|i:mkdirU:listdiret:listdiretii:lchownetii:chowneti:chmodet:lstatet:statctermidgetcwdgetcwduunameunlinkforkopenptyforkptygetegidgeteuidgetgidgetgroupsgetpidgetppidgetuidgetloginseteuidsetegidsetreuidsetregidsetgroupssetsidfdopenpipefchdirfsyncfdatasyncWIFCONTINUEDtmpfiletmpnamabortgetloadavgPC_ASYNC_IOPC_CHOWN_RESTRICTEDPC_FILESIZEBITSPC_LINK_MAXPC_MAX_CANONPC_MAX_INPUTPC_NAME_MAXPC_NO_TRUNCPC_PATH_MAXPC_PIPE_BUFPC_PRIO_IOPC_SOCK_MAXBUFPC_SYNC_IOPC_VDISABLESC_2_CHAR_TERMSC_2_C_BINDSC_2_C_DEVSC_2_C_VERSIONSC_2_FORT_DEVSC_2_FORT_RUNSC_2_LOCALEDEFSC_2_SW_DEVSC_2_UPESC_2_VERSIONSC_AIO_LISTIO_MAXSC_AIO_MAXSC_AIO_PRIO_DELTA_MAXSC_ARG_MAXSC_ASYNCHRONOUS_IOSC_ATEXIT_MAXSC_AVPHYS_PAGESSC_BC_BASE_MAXSC_BC_DIM_MAXSC_BC_SCALE_MAXSC_BC_STRING_MAXSC_CHARCLASS_NAME_MAXSC_CHAR_BITSC_CHAR_MAXSC_CHAR_MINSC_CHILD_MAXSC_CLK_TCKSC_COLL_WEIGHTS_MAXSC_DELAYTIMER_MAXSC_EQUIV_CLASS_MAXSC_EXPR_NEST_MAXSC_FSYNCSC_GETGR_R_SIZE_MAXSC_GETPW_R_SIZE_MAXSC_INT_MAXSC_INT_MINSC_IOV_MAXSC_JOB_CONTROLSC_LINE_MAXSC_LOGIN_NAME_MAXSC_LONG_BITSC_MAPPED_FILESSC_MB_LEN_MAXSC_MEMLOCKSC_MEMLOCK_RANGESC_MEMORY_PROTECTIONSC_MESSAGE_PASSINGSC_MQ_OPEN_MAXSC_MQ_PRIO_MAXSC_NGROUPS_MAXSC_NL_ARGMAXSC_NL_LANGMAXSC_NL_MSGMAXSC_NL_NMAXSC_NL_SETMAXSC_NL_TEXTMAXSC_NPROCESSORS_CONFSC_NPROCESSORS_ONLNSC_NZEROSC_OPEN_MAXSC_PAGESIZESC_PAGE_SIZESC_PASS_MAXSC_PHYS_PAGESSC_PIISC_PII_INTERNETSC_PII_INTERNET_DGRAMSC_PII_INTERNET_STREAMSC_PII_OSISC_PII_OSI_CLTSSC_PII_OSI_COTSSC_PII_OSI_MSC_PII_SOCKETSC_PII_XTISC_POLLSC_PRIORITIZED_IOSC_PRIORITY_SCHEDULINGSC_REALTIME_SIGNALSSC_RE_DUP_MAXSC_RTSIG_MAXSC_SAVED_IDSSC_SCHAR_MAXSC_SCHAR_MINSC_SELECTSC_SEMAPHORESSC_SEM_NSEMS_MAXSC_SEM_VALUE_MAXSC_SHARED_MEMORY_OBJECTSSC_SHRT_MAXSC_SHRT_MINSC_SIGQUEUE_MAXSC_SSIZE_MAXSC_STREAM_MAXSC_SYNCHRONIZED_IOSC_THREADSSC_THREAD_ATTR_STACKADDRSC_THREAD_ATTR_STACKSIZESC_THREAD_KEYS_MAXSC_THREAD_PRIORITY_SCHEDULINGSC_THREAD_PRIO_INHERITSC_THREAD_PRIO_PROTECTSC_THREAD_PROCESS_SHAREDSC_THREAD_SAFE_FUNCTIONSSC_THREAD_STACK_MINSC_THREAD_THREADS_MAXSC_TIMERSSC_TIMER_MAXSC_TTY_NAME_MAXSC_TZNAME_MAXSC_T_IOV_MAXSC_UCHAR_MAXSC_UINT_MAXSC_UIO_MAXIOVSC_ULONG_MAXSC_USHRT_MAXSC_VERSIONSC_WORD_BITSC_XBS5_ILP32_OFF32SC_XBS5_ILP32_OFFBIGSC_XBS5_LP64_OFF64SC_XBS5_LPBIG_OFFBIGSC_XOPEN_CRYPTSC_XOPEN_ENH_I18NSC_XOPEN_LEGACYSC_XOPEN_REALTIMESC_XOPEN_REALTIME_THREADSSC_XOPEN_SHMSC_XOPEN_UNIXSC_XOPEN_VERSIONSC_XOPEN_XCU_VERSIONSC_XOPEN_XPG2SC_XOPEN_XPG3SC_XOPEN_XPG4CS_LFS64_CFLAGSCS_LFS64_LDFLAGSCS_LFS64_LIBSCS_LFS64_LINTFLAGSCS_LFS_CFLAGSCS_LFS_LDFLAGSCS_LFS_LIBSCS_LFS_LINTFLAGSCS_PATHCS_XBS5_ILP32_OFF32_CFLAGSCS_XBS5_ILP32_OFF32_LDFLAGSCS_XBS5_ILP32_OFF32_LIBSCS_XBS5_ILP32_OFF32_LINTFLAGSCS_XBS5_ILP32_OFFBIG_CFLAGSCS_XBS5_ILP32_OFFBIG_LDFLAGSCS_XBS5_ILP32_OFFBIG_LIBSCS_XBS5_LP64_OFF64_CFLAGSCS_XBS5_LP64_OFF64_LDFLAGSCS_XBS5_LP64_OFF64_LIBSCS_XBS5_LP64_OFF64_LINTFLAGSCS_XBS5_LPBIG_OFFBIG_CFLAGSCS_XBS5_LPBIG_OFFBIG_LDFLAGSCS_XBS5_LPBIG_OFFBIG_LIBSst_modeprotection bitsst_inoinodest_devdevicest_nlinknumber of hard linksst_uiduser ID of ownerst_gidgroup ID of ownerst_sizetotal size, in bytesinteger time of last accessinteger time of last changest_atimest_mtimetime of last modificationst_ctimest_blksizeblocksize for filesystem I/Ost_blocksnumber of blocks allocatedst_rdevdevice type (if inode device)f_bsizef_frsizef_blocksf_bfreef_bavailf_filesf_ffreef_favailf_flagf_namemax$tIB& .>errorcodeENODEVENOCSIEHOSTUNREACHENOMSGEUCLEANEL2NSYNCEL2HLTENODATAENOTBLKENOSYSEPIPEEINVALEOVERFLOWEADVEINTREUSERSENOTEMPTYENOBUFSEPROTOEREMOTEENAVAILECHILDELOOPEXDEVE2BIGESRCHEMSGSIZEEAFNOSUPPORTEBADREHOSTDOWNEPFNOSUPPORTENOPROTOOPTEBUSYEWOULDBLOCKEBADFDEDOTDOTEISCONNENOANOESHUTDOWNECHRNGELIBBADENONETEBADEEBADFEMULTIHOPEUNATCHEPROTOTYPEENOSPCENOEXECEALREADYENETDOWNENOTNAMEACCESELNRNGEILSEQENOTDIRENOTUNIQEPERMEDOMEXFULLECONNREFUSEDEISDIREPROTONOSUPPORTEROFSEADDRNOTAVAILEIDRMECOMMESRMNTEREMOTEIOEL3RSTEBADMSGENFILEELIBMAXESPIPEENOLINKENETRESETETIMEDOUTENOENTEEXISTEDQUOTENOSTREBADSLTEBADRQCELIBACCEFAULTEFBIGEDEADLKENOTCONNEDESTADDRREQELIBSCNENOLCKEISNAMECONNABORTEDENETUNREACHESTALEENOSRENOMEMENOTSOCKESTRPIPEEMLINKERANGEELIBEXECEL3HLTECONNRESETEADDRINUSEEOPNOTSUPPEREMCHGEAGAINENAMETOOLONGENOTTYERESTARTESOCKTNOSUPPORTETIMEEBFONTEDEADLOCKETOOMANYREFSEMFILEETXTBSYEINPROGRESSENXIOENOPKGstruct_pwents:getpwnamI:getpwuidgetpwuid(): uid not found: %dgetpwallpwd.struct_passwdpw_nameuser namepw_passwdpasswordpw_uiduser idpw_gidgroup idpw_gecosreal namepw_dirhome directorypw_shellshell programgetpwnam(): name not found: %sMAGICCODESIZEOiO!|iOOpatterncannot copy this match objectgroupindexexpected string or bufferbuffer has negative sizebuffer size mismatchO:expand_expand|O:spanno such group|O:end|O:start|O:groups|O:groupdictlastindexlastgroupregsendposO|ii:scannerO|ii:matchjoinNi_subxOO|i:subnOO|i:subO|i:splitO|ii:findallO|ii:search_sre.SRE_Scanner_sre.SRE_Match_sre.SRE_Patterngetcodesizegetlowerfinditer__copy____deepcopy__maxsplitreplcannot deepcopy this match objectcannot deepcopy this pattern objectcannot copy this pattern objectmaximum recursion limit exceededinternal error in regular expression engineJ2[2o2333A3Y3w3%22222223,3FKKKM3RR F GP G GPDQQN^NNNNN&OOPKL G G_LM GJGGHrHGHTHJ}IIGHGGSRRRRRRRRSSTRRRRRRRiTRRRRRRvTSSRRRRRRRR)S8SbSRRRRRRRRRRRRRR SRUsUUV`VUUVVTU8U#\:\:\:\:\:\:\:\:\B\T\u\:\:\:\:\:\:\:\\:\:\:\:\:\:\\\eeeeeeeeeevfeeeeeeeeDfeeeeeePfaf0i0iYivj0i0i0i0i0i0i0i0i0i0i0i6j0i0i0i ji0i0i0iiijxixixixixixixixijjjxixixixixixixi4kxixixixixixi@kQklqqqs_xGxl0mv0m0mvfww!tittttt4uuvq$r0m0mqrs0mp%mmnrnmnTnp}oomnmmyxxxxxxxxy3y[yxxxxxxxyxxxxxxyyzxxxxxxxx z2zZzxxxxxxxyxxxxxxyy||||G}z9|g{u{zp|{ɂ,5Fю$epppȫppppppppppppppW%pppªܫ9|  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~s:lookup_errorsO:register_errort#|zii:utf_16_ex_decodeOiiO!|z:escape_encodeO|ss:decodeO|ss:encodes:lookupO:registers#|z:escape_decodeO|zO:charmap_encodeO|z:ascii_encodeO|z:latin_1_encodeO|z:raw_unicode_escape_encodeO|z:unicode_escape_encodeO|z:utf_16_be_encodeO|z:utf_16_le_encodeO|zi:utf_16_encodeO|z:utf_8_encodeO|z:utf_7_encodeO|z:unicode_internal_encodet#|z:charbuffer_encodes#|z:readbuffer_encodet#|zO:charmap_decodet#|z:ascii_decodet#|z:latin_1_decodet#|z:unicode_escape_decodet#|zi:utf_16_be_decodet#|zi:utf_16_le_decodet#|zi:utf_16_decodet#|zi:utf_8_decodet#|z:utf_7_decodeO|z:unicode_internal_decoderaw_unicode_escape_decodet#|z:raw_unicode_escape_decode21:03:11Apr 12 2007#%d, %.20s, %.9sno mem to build parser accelerators XXX too high nonterminal number!no mem to add parser accelerators XXX too many states!XXX ambiguity!NT%d%.32s(%.32s)no mem for new parser no mem for next token !(18AHQXahqx"2ETbucs_%/9EOYeoyutf-8utf-8-iso-8859-1iso-latin-1iso-8859-1-iso-latin-1-with BOMencoding problem: %stok_backup: begin of bufferTab size set to %d ENDMARKERNAMENUMBERSTRINGNEWLINEINDENTDEDENTLPARRPARLSQBRSQBCOLONCOMMASEMIPLUSMINUSVBARAMPERLESSGREATERPERCENTBACKQUOTELBRACERBRACEEQEQUALNOTEQUALLESSEQUALGREATEREQUALTILDECIRCUMFLEXLEFTSHIFTRIGHTSHIFTDOUBLESTARPLUSEQUALMINEQUALPERCENTEQUALAMPEREQUALVBAREQUALCIRCUMFLEXEQUALLEFTSHIFTEQUALRIGHTSHIFTEQUALDOUBLESTAREQUALDOUBLESLASHDOUBLESLASHEQUALtab-width::tabstop=:ts=set tabsize=Non-ASCII character '\x%.2x' in file %.200s on line %i, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details%s: inconsistent use of tabs and spaces in indentation NULL result without error in PyObject_Callisinstance() arg 2 must be a class, type, or tuple of classes and typesunsupported operand type(s) for %s: '%s' and '%s'unsupported operand type(s) for ** or pow(): '%s' and '%s'unsupported operand type(s) for pow(): '%s', '%s', '%s'can't multiply sequence by non-intiter() returned non-iterator of type '%.100s'issubclass() arg 1 must be a classissubclass() arg 2 must be a class or tuple of classesnull argument to internal routinecall of non-callable attributesequence.index(x): x not in sequenceobject doesn't support slice deletionobject doesn't support slice assignmentobject doesn't support item deletionobject does not support item assignment__float__ returned non-float (type %.200s)expected a writeable buffer objectexpected a single-segment buffer objectexpected a readable buffer objectexpected a character buffer objectnull byte in argument for long()__long__ returned non-long (type %.200s)long() argument must be a string or a numbernull byte in argument for int()__int__ returned non-int (type %.200s)int() argument must be a string or a numbersequence index must be integerobject does not support item deletion'%s' object is not callable__class__nest level of tuple too deep**=** or pow()+=*iteration over non-sequence%=//=-=>>=<<=&=^=|=//<<>>len() of unsized objectiterable argument requiredcount exceeds C int sizeindex exceeds C int sizeunsliceable objectunindexable objectobject can't be repeatedobject can't be concatenatedbad operand type for abs()bad operand type for unary ~bad operand type for unary +bad operand type for unary -unsubscriptable objectTrueFalse|O:bool__coerce__ after coercion__cmp__ in __call__../Objects/classobject.cinstancemethodO!|O:instance__lt____le____eq____ne____gt____ge__instance has no next() method__iter____nonzero____len____abs____contains____delslice____delitem__(N)__setslice____setitem__(NO)(iiO)__getslice__(i)__len__() should return >= 0__hash__unhashable instance__repr__<%s.%s instance at %p>__oct____float____long____hex____pos____invert____neg____int____init__() should return None__getattr____setattr____delattr__SOO__ilshift____lshift____rlshift____iand____and____rand____mul____rmul____sub____rsub____floordiv____rfloordiv____divmod____rdivmod____xor____rxor____pow____rpow____truediv____rtruediv____add____radd____rshift____rrshift____mod____rmod____div____rdiv____or____ror____ipow____itruediv____imod____idiv____imul____isub____iadd____irshift____ifloordiv____ixor____ior__classobjbasesim_classim_funcim_selfcoercion should return None or 2-tupleunbound method %s%s must be called with %s instance as first argument (got %s%s instead)comparison did not return an int%.200s instance has no __call__ method__dict__ not accessible in restricted mode__dict__ must be set to a dictionary__class__ not accessible in restricted mode__class__ must be set to a class%.50s instance has no attribute '%.400s'first argument must be callableunbound methods must have non-NULL im_classinstance() second arg must be dictionary or Noneinstance.__dict__ not accessible in restricted mode__iter__ returned non-iterator of type '%.100s'__nonzero__ should return an int__nonzero__ should return >= 0__len__() should return an int__hash__() should return an intthis constructor takes no argumentsclasses are read-only in restricted modea __bases__ item causes an inheritance cycle__name__ must not contain null bytes__bases__ items must be classes__name__ must be a string object__bases__ must be a tuple object__dict__ must be a dictionary objectclass %.50s has no attribute '%.400s'class.__dict__ not accessible in restricted modePyClass_New: name must be a stringPyClass_New: dict must be a dictionaryPyClass_New: bases must be a tuplePyClass_New: base must be a classthe class associated with a methodthe function (or other callable) implementing a methodthe instance to which a method is bound; None for unbound methods(D)complex_abscomplex() arg is not a stringstrtodfloat() out of range: %.150s%%.%ig%%+.%ig(%s%sj)|OO:complex__complex__complex_divcomplex_mulcomplex_subcomplex_addcomplex modulocomplex_powcomplex exponentiaioncomplex divmod()complex remainderclassic complex divisioncomplex_classic_divrealimagconjugate__getnewargs__can't convert complex to float; use abs(z)can't convert complex to long; use long(abs(z))can't convert complex to int; use int(abs(z))complex() literal too large to convertcomplex() arg is an empty stringcomplex() arg contains a null bytecomplex() arg is a malformed stringno ordering relation is defined for complex numberscomplex() can't take second arg if first is a stringcomplex() second arg can't be a stringcomplex() argument must be a string or a numberfloat(r) didn't return a float0.0 to a negative or complex powercomplex divmod(), // and % are deprecatedthe real part of a complex numberthe imaginary part of a complex number? (ss) (sss)Unknown newlines value 0x%x (is)rUinvalid mode: %sI/O operation on closed filew#filenosoftspace|l:reads#t#|l:readlines|i:readline../Objects/fileobject.cEOF when reading a lineO|i:seekclose failed: [Errno %d] %s writeobject with NULL fileet|si:fileO|si:filebufferingtellreadintoxreadlineswritelinesflushfile namefile encodingTrue if the file is closednewlinesuW9line is longer than a Python string can holdfile() constructor not accessible in restricted mode<%s file u'%s', mode '%s' at %p><%s file '%s', mode '%s' at %p>fileno() returned a non-integerargument must be an int, or have a fileno() method.file descriptor cannot be a negative integer (%i)requested number of bytes is more than a Python string can holdwritelines() requires an iterable argumentwritelines() argument must be a sequence of stringsobject.readline() returned non-stringnull file for PyFile_WriteStringflag indicating that a space needs to be printed; used by printfile mode ('r', 'U', 'w', 'a', possibly with 'b' or '+' added)end-of-line convention used in this file(d)richcomparefrexp() result out of rangea float is required# cleanup floatsempty string for float()|O:floatdividemultiplysubtractfloat divmod()divmod(dd)float moduloclassic float division?@314MKKό      ??Afloat too large to pack with d formatfloat too large to pack with f formatnb_float should return float object: %d unfreed float%s in %d out of %d block%s # Unicode float() literal too long to convertfloat() argument must be a string or a numberinvalid literal for float(): %.200snull byte in argument for float()pow() 3rd argument not allowed unless all arguments are integers0.0 cannot be raised to a negative powernegative number cannot be raised to a fractional powerlineno must be an integerXXX block stack underflowXXX block stack overflowf_backf_codef_builtinsf_globalsf_lastif_restrictedf_exc_typef_exc_valuef_exc_tracebackf_localsf_linenof_tracef_lineno can only be set by a trace functionline %d comes before the current code blockline %d comes after the current code blockcan't jump to 'except' line as there's no exceptioncan't jump into or out of a 'finally' blockcan't jump into the middle of a block(l)(ll)-0x%lx-0%loan integer is required# cleanup intsclassic int division|Oi:intnegative shift countinteger division or modulo by zeronb_int should return int object: %d unfreed int%s in %d out of %d block%s # pow() 2nd argument cannot be negative when 3rd argument specifiedpow() 3rd argument cannot be 0int() base must be >= 2 and <= 36invalid literal for int(): %.200sint() can't convert non-string with explicit baseB../Objects/iterobject.ccallable-iteratorlist objects are unhashableexpected a sortwrapperobjectO|O&O&:indexlist.index(x): x not in list../Objects/listobject.clist index out of range[...], |OOi:sortlist modified during sortiO:insertlist indices must be integerscan only assign an iterablelist.remove(x): x not in list|l:poppop from empty listpop index out of rangeargument must be iterable|O:listlistiteratorlistreverseiteratorreversecmpwrappersortwrapper__reversed__appendextendn      comparison function must return intlist assignment index out of rangecan only concatenate list (not "%.200s") to listcannot add more objects to listmust assign iterable to extended sliceattempt to assign sequence of size %d to extended slice of size %dcan't convert negative long to unsignedlong has too many bits to express in a platform size_tcan't convert negative value to unsigned longlong int too large to convert to intlong int too large to convert to floatlong() arg 2 must be >= 2 and <= 36long string too large to convertinvalid literal for long(): %.200slong() can't convert non-string with explicit baselong division or modulo by zerolong/long too large for a floatcannot convert float infinity to longlong too big to convert../Objects/longobject.cinteger conversion failedlong int too large to convertlong is too large to format|Oi:longclassic long divisionGfromkeysdict objects are unhashablepop(): dictionary is empty{...}../Objects/dictobject.csetdefault{}{dictionary-keyiteratordictionary-valueiteratordictionary-itemiteratorhas_keypopitemiterkeysitervaluesiteritemsdictionary changed size during iterationpopitem(): dictionary is emptycannot convert dictionary update sequence element #%d to a sequencedictionary update sequence element #%d has length %d; 2 is requiredmethod.__self__ not accessible in restricted mode%.200s() takes no arguments (%d given)%.200s() takes exactly one argument (%d given)%.200s() takes no keyword arguments../Objects/methodobject.c__methods__builtin_function_or_method__self__9 Ԛ       q S|O:module.__init__# clear[1] %s # clear[2] %s module filename missingnameless module../Objects/moduleobject.cNotImplementeddeallocating NonePy_ReprCan't initialize 'type'Can't initialize 'weakref'Can't initialize 'bool'Can't initialize 'str'Can't initialize 'list'Can't initialize type(None)unhashable typeattribute name must be stringassign to<%s object at %p>__unicode__print recursionNULL object : NULL in cmpnumber coercion failed../Objects/object.c__members__Expected keys() to be a list.NoneTypeNotImplementedTypeCan't initialize type(NotImplemented)'%.50s' object has no attribute '%.400s''%.100s' object has no attributes (%s .%.100s)'%.100s' object has only read-only attributes (%s .%.100s)tp_compare didn't return -1 or -2 for exceptiontp_compare didn't return -1, 0 or 1__repr__ returned non-string (type %.200s)__str__ returned non-string (type %.200s)'%.50s' object attribute '%.400s' is read-only type : %s refcount: %d address : %p module.__dict__ is not a dictionaryeHO;     9 Ellipsisslice(slice step cannot be zeroslice()sliceellipsisindicesstopstep(s#)O|O&O&:startswithsubstring not foundrepeated string is too long\%c\t\n\r\x%02xreleasing interned strings |i:splitlinesi:zfilli|c:centeri|c:rjusti|c:ljust|i:expandtabs|Oi:rsplitempty separator|Oi:splitstring index out of range|O:str../Objects/stringobject.cO|O&O&:countO|O&O&:endswithOO|i:replacetranslateformat requires a mappingincomplete format key* wants intincomplete formatint argument required%s0%c%%.%dl%c%s%%%s.%dl%cfloat argument required%%%s.%d%cc;%c requires int or charb;%c requires int or charTrailing \ in stringinvalid \x escapeignore%ibasestring|O:lstrip|O:rstrip|O:stripislowerisupperisspaceisdigitistitleisalphaisalnumcapitalizeswapcaseThe basestring type cannot be instantiatedaccessing non-existent string segmentCannot use string as modifiable bufferO|O&O&:find/rfind/index/rindex'in ' requires string as left operandcannot concatenate 'str' and '%.200s' objectsdeletion of interned string failedImmortal interned string died.Inconsistent interned string state.PyString_InternInPlace: strings only please!%s arg must be None, str or unicodestring is too long for a Python stringsequence expected, %.80s foundsequence item %i: expected string, %.80s foundjoin() is too long for a Python stringstring is too large to make reprexpected string or Unicode object, %.200s foundexpected string without null bytesencoder did not return a string object (type=%.400s)decoder did not return a string object (type=%.400s)decoder did not return a string/unicode object (type=%.400s)encoder did not return a string/unicode object (type=%.400s)deletions are implemented differently for unicodetranslation table must be 256 characters longstring indices must be integersnot enough arguments for format string%s argument has non-string str()formatted integer is too long (precision too large?)formatted float is too long (precision too large?)unsupported format character '%c' (0x%x) at index %inot all arguments converted during string formattingdecoding error; unknown error handling code: %.400s n  a T  ) ( ( ( ( ( ( ( ( ( ( ( 1) ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 1) ( ( ) < 0: 0: < 0: 0: 0: 0: 0: 0: 0: < 0: < 0: 0: < 7  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ; = = =  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ; "@  ;  ;  ;  ;  ;  ;  ;  ;  ;  ; = "@ = = =  ; "@  ;  ;  ;  ;  ; "@  ;  ; @ \?  ; "@  ;  ; "@ CN N N N N N N N N N N N N N N N N N N N N N N N P N N N N P N N N N N N N N P P P P P P P P N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N Q N N N N Q "Q N N N 3Q N N N N N N N DQ N N N UQ N fQ N wQ N xN (,* E(O(OO))tuple index out of rangeO|O:structsequnnamed field__reduce__constructor requires a sequence%.500s() takes a dict as second arg, if any%.500s() takes an at least %d-sequence (%d-sequence given)%.500s() takes an at most %d-sequence (%d-sequence given)%.500s() takes a %d-sequence (%d-sequence given)../Objects/tupleobject.c|O:tuple,)tupleiteratortuple assignment index out of rangecan only concatenate tuple (not "%.200s") to tupletuple indices must be integerszj j j hj qj Kj This object has no __weakref____get__(None, None) is invalidcan't apply this %s to %s object, <%s object>>%s assignment: '%s' deallocator differs from '%s'%s assignment: '%s' object layout differs from '%s'super(type, obj): obj must be an instance or subtype of typecannot create '%.100s' instancescan only assign string to %s.__name__, not '%s'__new__() called with non-type 'self'%s.__new__(): not enough arguments%s.__new__(X): X is not a type object (%s)%s.__new__(%s): %s is not a subtype of %s%s.__new__(%s) is not safe, use %s.__new__()__getnewargs__ should return a tuplecopy_reg._slotnames didn't return a list or Nonecan't delete __class__ attribute__class__ must be set to new-style class, not '%s' object__class__ assignment: only for heap typesdefault __new__ takes no parametersPyArg_UnpackTuple() argument list is not a tupleOut of memory interning slotdef namesmethod cannot be both class and statictype '%.100s' participates in gc and is a base type but has inappropriate tp_free slottype object '%.50s' has no attribute '%.400s'multiple bases have instance lay-out conflicta new-style class can't have only classic basesCannot create a consistent method resolution order (MRO) for basescan only assign tuple to %s.__bases__, not %scan only assign non-empty tuple to %s.__bases__, not ()%s.__bases__ must be tuple of old- or new-style classes, not '%s'metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its basestype '%.100s' is not an acceptable base typenonempty __slots__ not supported for subtype of '%s'__dict__ slot disallowed: we already got one__weakref__ slot disallowed: either we already got one, or __itemsize__ != 0can't set attributes of built-in/extension type '%s'__nonzero__ should return bool or int, returned %s__coerce__ didn't return a 2-tuple%s.__cmp__(x,y) requires y to be a '%s', not a '%s'x.__getslice__(i, j) <==> x[i:j] Use of negative indices is not supported.x.__setitem__(i, y) <==> x[i]=yx.__delitem__(y) <==> del x[y]x.__setslice__(i, j, y) <==> x[i:j]=y Use of negative indices is not supported.x.__delslice__(i, j) <==> del x[i:j] Use of negative indices is not supported.x.__divmod__(y) <==> divmod(x, y)x.__rdivmod__(y) <==> divmod(y, x)x.__pow__(y[, z]) <==> pow(x, y[, z])y.__rpow__(x[, z]) <==> pow(x, y[, z])x.__coerce__(y) <==> coerce(x, y)x.__getattribute__('name') <==> x.namex.__setattr__('name', value) <==> x.name = valuex.__delattr__('name') <==> del x.namex.next() -> the next value, or raise StopIterationdescr.__get__(obj[, type]) -> valuex.__init__(...) initializes x; see x.__class__.__doc__ for signaturedictionary for instance variables (if defined)list of weak references to the object (if defined)T.__new__(S, ...) -> a new object with type S, a subtype of Tmro() -> list return a type's method resolution order__subclasses__() -> list of immediate subclassesthe type of the instance invoking super(); may be Nonecan't set %s.__module__can't delete %s.__module__iiO__new__, NULL>This object has no __dict____get__O!|O:super<%s '%s.%s'><%s '%s'>can't set %s.__name__can't delete %s.__name__|i:__reduce_ex____getstate____slotnames___slotnames__newobj__(Oi)_reduce_ex<%s.%s object at %p>expected %d arguments, got %dbases must be typesduplicate base class %smrocan't set %s.__bases__can't delete %s.__bases__type() takes 1 or 3 argumentsSO!O!:type__slots____slots__ must be strings__slots__ must be identifiers__weakref__(O)__delete__(OO)__set____getattribute__The most base typex.__len__() <==> len(x)x.__add__(y) <==> x+yx.__mul__(n) <==> x*nx.__rmul__(n) <==> n*xx.__getitem__(y) <==> x[y]x.__contains__(y) <==> y in xx.__iadd__(y) <==> x+=yx.__imul__(y) <==> x*=yx.__radd__(y) <==> y+xx.__sub__(y) <==> x-yx.__rsub__(y) <==> y-xx.__mul__(y) <==> x*yx.__rmul__(y) <==> y*xx.__div__(y) <==> x/yx.__rdiv__(y) <==> y/xx.__mod__(y) <==> x%yx.__rmod__(y) <==> y%xx.__neg__() <==> -xx.__pos__() <==> +xx.__abs__() <==> abs(x)x.__nonzero__() <==> x != 0x.__invert__() <==> ~xx.__lshift__(y) <==> x< y< x>>yx.__rrshift__(y) <==> y>>xx.__and__(y) <==> x&yx.__rand__(y) <==> y&xx.__xor__(y) <==> x^yx.__rxor__(y) <==> y^xx.__or__(y) <==> x|yx.__ror__(y) <==> y|xx.__int__() <==> int(x)x.__long__() <==> long(x)x.__float__() <==> float(x)x.__oct__() <==> oct(x)x.__hex__() <==> hex(x)x.__iadd__(y) <==> x+yx.__isub__(y) <==> x-yx.__imul__(y) <==> x*yx.__idiv__(y) <==> x/yx.__imod__(y) <==> x%yx.__ipow__(y) <==> x**yx.__ilshift__(y) <==> x< x>>yx.__iand__(y) <==> x&yx.__ixor__(y) <==> x^yx.__ior__(y) <==> x|yx.__floordiv__(y) <==> x//yx.__rfloordiv__(y) <==> y//xx.__truediv__(y) <==> x/yx.__rtruediv__(y) <==> y/xx.__ifloordiv__(y) <==> x//yx.__itruediv__(y) <==> x/yx.__str__() <==> str(x)x.__repr__() <==> repr(x)x.__cmp__(y) <==> cmp(x,y)x.__hash__() <==> hash(x)x.__call__(...) <==> x(...)x.__lt__(y) <==> x x<=yx.__eq__(y) <==> x==yx.__ne__(y) <==> x!=yx.__gt__(y) <==> x>yx.__ge__(y) <==> x>=yx.__iter__() <==> iter(x)descr.__set__(obj, value)descr.__delete__(obj)__subclasses____basicsize____itemsize____flags____weakrefoffset____base____dictoffset____mro__helper for picklethe object's class__thisclass__the class invoking super()__self_class__cannot create weak reference to '%s' objectweakly-referenced object no longer exists:__call__weak object has gone away../Objects/weakrefobject.cweakproxyweakcallableproxy(u#)i|O&:ljustCan't initialize 'unicode'../Objects/unicodeobject.ctruncated dataunexpected end of dataillegal UTF-16 surrogateillegal encodingutf16unexpected code byteinternal errorinvalid datautf8rawunicodeescapetruncated \uXXXXcode pairs are not supportedunexpected special characterutf7unterminated shift sequencetruncated \uXXXX escapetruncated \UXXXXXXXX escapetruncated \xXX escapeillegal Unicode characterunicodedataucnhash_CAPImalformed \N character escape\ at end of stringtruncated inputunicode_internalxmlcharrefreplace&#%d;ordinal not in range(256)ordinal not in range(128)asciicharmapcharacter maps to i|O&:centeri|O&:rjust|Oss:unicodeO|O&O&:rindexO|O&O&:findO|O&O&:rfind0123456789abcdefisdecimalisnumericcannot use unicode as modifiable bufferaccessing non-existent unicode segmentcan't resize shared unicode objectsposition %d from error handler out of boundscharacter mapping must be in range(0x%lx)character mapping must return integer, None or unicodecharacter mapping must be in range(256)character mapping must return integer, None or strunsupported Unicode code rangeABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/partial character in shift sequencenon-zero padding bits in shift sequenceend of string in escape sequenceunknown Unicode character name\N escapes not supported (can't load unicodedata module)illegal code point (> 0x10FFFF)invalid decimal Unicode stringunichr() arg not in range(0x110000) (wide Python build)character mapping must be in range(65536)decoder did not return an unicode object (type=%.400s)decoding Unicode is not supportedcoercing to Unicode: need string or buffer, %.80s foundsequence item %i: expected string or Unicode, %.80s found%c arg not in range(0x110000) (wide Python build)%s arg must be None, unicode or strThe fill character cannot be converted to UnicodeThe fill character must be exactly one character longO!i;encoding error handler must return (unicode, int) tupleO!i;translating error handler must return (unicode, int) tupleO!i;decoding error handler must return (unicode, int) tuple  ʨ   õ                             m                                              U       ǹ     ۹     ն               % U  i N0 @( @( r0 @( @( @( @( @( @( @( Z0 @( f0 @( @( ~0 * t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) 2 2 2 t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) t) 4 t) t) t) t) t) t) t) t) t) t) 4 4 2 2 2 t) 4 t) t) t) t) t) 4 t) t) 5 5 t) 4 t) t) 4 L7@<|<<L7AB>> AzD@F0A@APA`ApAAAAAA@@@?>A@ B@ ?HBC@E@pB@`?BABUUUUUU??UUUUUU?UUUUUU??333333??? 0   yy  9 Oaa 88 A ~.. 22 33 66 55 11 // -- ++ ** && '' %% TT&%@? P0  JJ VV dd pp ~~ A A  A (   !"#$%&'()*+,-./0123456789:;<<  !"!#$%&&&''()*))))+,-+,-+,-.+,-/0123445647899:;<<<==>))))))))))))))))))))))))?)@AAABCCDEEEFGHHIJKKKLMNO.PQRRRRRRRRRRRRRRRROOOOOOOOOOOOOOOOKSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS)TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))) ))))))))))))))))))))))))))))))))))))))))))))))))))))) ))))))))))))))))))))))))))))))))))))))))))))))))))) ))))))))))))))))))))))))))))))))))) ))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))) ))) ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ))))))KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))  )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))UVVVVVVVVWWWWWWWWVVVVVVWWWWWWVVVVVVVVWWWWWWWWVVVVVVVVWWWWWWWWVVVVVVWWWWWWVVVVWWWWVVVVVVVVWWWWWWWWXXYYYYZZ[[\\]]VVVVVVVV^^^^^^^^VVVVVVVV^^^^^^^^VVVVVVVV^^^^^^^^VV_WW``ab_ccccaVVWWddVVeWWffg_hhiia  KKKKKKKKKKKKKKKjKklKKKKK))))KKKmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnopqrstuvwopqrstuvwopqrstuvwxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyzopqrstuvwopqrstuvwopqrstuvwopqrstuvw))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))){{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||||KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK     )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))classmethodfrozensetreversedstaticmethodxrangevars(): no locals!?l:unichrsumO|OOi:sorteddelattrsetattrd|i:roundreducel:chrchr() arg not in range(256)[raw_]input[raw_]input: lost sys.stdin[raw_]input: lost sys.stdout[raw_]input: input too longmin%s() arg is an empty sequenceissubclassisinstanceS:interns;embedded '\0' in input linehasattrgetattrfilters|O!O:execfilelocals must be a mappingevalglobals must be a dictOss|ii:compileexecsinglecompile(): unrecognised flagscoerceapplys|OOO:__import__hashhexlenoctraw_inputreloadzip argument #%d must support iterationvars() argument must have __dict__ attributeord() expected string of length 1, but %.200s foundord() expected a character, but string of length %d foundoct() argument can't be converted to oct__oct__ returned non-string (type %.200s)hex() argument can't be converted to hex__hex__ returned non-string (type %.200s)sum() can't sum strings [use ''.join(seq) instead]reduce() arg 2 must support iterationreduce() of empty sequence with no initial valuerange() integer start argument expected, got %s.range() integer end argument expected, got %s.range() integer step argument expected, got %s.range() step argument must not be zerorange() result has too many itemsmap() requires at least two argsiter(v, w): v must be callablecan't intern subclass of stringhasattr(): attribute name must be stringgetattr(): attribute name must be stringcan't filter str to str: __getitem__ returned different typecan't filter unicode to unicode: __getitem__ returned different typefilter(): unsubscriptable tupleglobals must be a real dict; try eval(expr, {}, mapping)eval must be given globals and locals when called without a framecode object passed to eval() may not contain free variableseval() arg 1 must be a string or code objectcompile() expected string without null bytescompile() arg 3 must be 'exec' or 'eval' or 'single'apply() arg 2 expected sequence, found %sapply() arg 3 expected dictionary, found %sl;range() requires 1-3 int argumentsll|l;range() requires 1-3 int argumentsreasonO:__str__[Errno %s] %s: %s[Errno %s] %sOO:__getitem__Exceptionss#iissu#iis%.200s attribute must be int%s (%s, line %ld)%s (%s)%s (line %ld)O!O!O!O!O!%.200s attribute must be strStopIterationStandardErrorTypeErrorSystemExitKeyboardInterruptImportErrorEnvironmentErrorIOErrorOSErrorEOFErrorRuntimeErrorNotImplementedErrorNameErrorUnboundLocalErrorAttributeErrorSyntaxErrorIndentationErrorTabErrorAssertionErrorLookupErrorIndexErrorKeyErrorArithmeticErrorOverflowErrorZeroDivisionErrorFloatingPointErrorValueErrorUnicodeErrorUnicodeEncodeErrorUnicodeDecodeErrorUnicodeTranslateErrorReferenceErrorSystemErrorMemoryErrorUserWarningPendingDeprecationWarningSyntaxWarningOverflowWarningRuntimeWarningFutureWarningunbound method must be called with instance as first argumentexceptions bootstrapping error.Base class `Exception' could not be created.Standard exception classes could not be created.An exception class could not be initialized.Module dictionary insertion problem.Cannot pre-allocate MemoryError instance %.200s attribute must be unicodecan't translate character u'\x%02x' in position %d: %.400scan't translate character u'\u%04x' in position %d: %.400scan't translate character u'\U%08x' in position %d: %.400scan't translate characters in position %d-%d: %.400s'%.400s' codec can't encode character u'\x%02x' in position %d: %.400s'%.400s' codec can't encode character u'\u%04x' in position %d: %.400s'%.400s' codec can't encode character u'\U%08x' in position %d: %.400s'%.400s' codec can't encode characters in position %d-%d: %.400s'%.400s' codec can't decode byte 0x%02x in position %d: %.400s'%.400s' codec can't decode bytes in position %d-%d: %.400s3%33`"3333"3A3"3K33#3@#3V3`#3h|3#3t3#3$3330$333F$33]$33v$3 33$33$3ɢ33%3ۢ 30%33E%3`%3 33%333%33%33%3+33&36332&3`&3?3&3O33&3]33'3o33@'33'333'3$33'3'333(3@(333p(3(3֣3(33 )33)3H33)333 *333`*3 33*3#(33+3133@+3A33+3P33+3 constructorargument list must be a tupleceval: tstate mix-upceval: orphan tstatelost sys.displayhookbad RAISE_VARARGS opargno locals'finally' pops bad exception__metaclass__name '%.200s' is not definedno locals when deleting %stoo many values to unpackunpack non-sequenceno locals when loading %s__import__ not foundcannot import name %.230sXXX lineno: %d, opcode: %d unknown opcodenon-keyword at mostexactlyat leastslice indices must be integers or Nonekeyword list must be a dictionarymaximum recursion depth exceeded%sPyEval_SaveThread: NULL tstatePyEval_ReleaseThread: NULL thread statePyEval_ReleaseThread: wrong thread statePyEval_AcquireThread: NULL new thread statePyEval_AcquireThread: non-NULL old thread statePyEval_RestoreThread: NULL tstate%.200s%s got multiple values for keyword argument '%.200s'local variable '%.200s' referenced before assignmentinvalid argument to DUP_TOPX (bytecode corruption?)raise: arg 3 must be a traceback or Noneraising a string exception is deprecatedinstance exception may not have a separate valueexceptions must be classes, instances, or strings (deprecated), not %sglobals and locals cannot be NULLexec: arg 1 must be a string, file, or code objectexec: arg 2 must be a dictionary or Noneexec: arg 3 must be a mapping or Nonecode object passed to exec may not contain free variablesError when calling the metaclass bases %sno locals found when storing %sneed more than %d value%s to unpackglobal name '%.200s' is not definedfree variable '%.200s' referenced before assignment in enclosing scopeno locals found during 'import *'from-import-* object has no __dict__ and no __all__%s%s argument after ** must be a dictionary%s%s argument after * must be a sequenceerror return without exception setPyEval_EvalCodeEx: NULL globals%.200s() takes %s %d %sargument%s (%d given)%.200s() keywords must be strings%.200s() got an unexpected keyword argument '%.400s'%.200s() got multiple values for keyword argument '%.400s'#% %?4#43dB@*@??$?j?CBADABzBc$=#.8.8.8.8e7e7e7e76666N655}5Z5444_4...S(z (' .-Q-,c.@.)/),,,^+y&Q&&]%1<;;Q:=;C= 39AD?>>>CCAC!Br @E $=D3C3C3C38!gCr31 1i0*)).3/3/3/;+dde ee`a%a/a9aCa1A1AMaVaname tuples must contain only strings, not '%.500s'unknown scope for %.100s in %.100s(%s) in %s symbols: %s locals: %s globals: %s duplicate argument '%s' in function definitionInvalid syntax. Assignment to None.code: argcount must not be negativecode: nlocals must not be negativename '%.400s' is a function parameter and declared globalname '%.400s' is assigned to before global declarationname '%.400s' is used prior to global declarationfrom __future__ imports must occur at the beginning of the fileimport * only allowed at module levellookup %s in %s %d %d freevars of %s: %s can not delete variable '%.400s' referenced in nested scope'continue' not properly in loop'continue' not supported inside 'finally' clause'yield' not allowed in a 'try' block with a 'finally' clausetrailing comma not allowed without surrounding parenthesestoo many statically nested blockscom_backpatch: offset too largecom_arith_expr: operator not + or -com_node: unexpected node type'return' with argument inside generatorcom_atom: unexpected node typecom_apply_trailer: unknown trailer typecom_term: operator not *, /, // or %com_shift_expr: operator not << or >>com_comparison: unknown comparison opnon-default argument follows default argumentcompile_node: unexpected node typeencoding declaration in Unicode stringcontains a nested function with free variablesimport * is not allowed in function '%.100s' because it %sunqualified exec is not allowed in function '%.100s' it %sfunction '%.100s' uses import * and bare exec, which are illegal because it %snon-keyword arg after keyword arglambda cannot contain assignmentkeyword can't be an expressionassign to generator expression not possibleaugmented assign to generator expression not possibleaugmented assign to tuple literal or generator expression not possibleaugmented assign to list literal or comprehension not possiblecan't assign to list comprehensiondefault 'except:' must be last0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzglobal(ziOO)../Python/compile.cstring to parse is too longutf-16-be\u%02x%02x.%dnon-string found in code slotiiiiSO!O!O!SSiS|O!O!:code_[%d]can not assign to __debug__lost exception[outmost-iterable]com_make_closure()assignment to Nonedeleting Nonedotted_name too long'break' outside loop'yield' outside function(s)asbad block popcom_and_expr: operator not &'return' outside functioncom_xor_expr: operator not ^com_expr: expr operator not |invalid gen_iter node typeis a nested functionlost syntax errorduplicate keyword argumentmore than 255 argumentscan't assign to operatorcan't delete function callcan't assign to function callunknown trailer typecan't assign to ()can't assign to []can't assign to literalcan't assign to lambdacom_assign: bad nodecom_augassign: bad operatorinvalid list_iter node typeco_argcountco_nlocalsco_stacksizeco_flagsco_codeco_constsco_namesco_varnamesco_freevarsco_cellvarsco_filenameco_nameco_firstlinenoco_lnotab&ČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČČAČČČČČČČČČ]ČČČČČČDՎČČČČČ]]ČČDČČ]]]]ČČČČČČČČČČČČČČČČČČČČO`;Ŷx%۴hԹдm2rfOBBBBb<BOh{pBBBBBBB*<B)BBUbBBBBBBBu@@B^BBBBBBBB@ J =                   u %*%%%%%%%%%%%%%%%%%%))%%%%%%))**&;=|=;;=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; =;;;;;;;;i<;;(@)>)>)>)>)>)>)>)>????)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>@????)>????????A)>)>)>)>)>)>)>)>?)>)>)>)>)>)>)>)>)>)>)>??========E?E?E?;?===========================?;?;?;?;?=;?;?;?;?;?;?;?;?PA========;?===========;??<<<<<<<<m?m?m?c?<<<<<<<<<<<<<<<<<<<<<<<<<<<?c?c?c?c?<c?c?c?c?c?c?c?c?g@<<<<<<<<c?<<<<<<<<<<<c?\\\\\\\\\\\\{]G]\\7]\\\\\\\\\\\\\\\\\\bbbb\bbbbbbbbc\Ac7]\\\\AcAc\\\\\\\\\\\Acuutttuututkuttttttttttttututttttttttttttttttttttttttttttttutttttttttttttttttttttttttttttu#uphPPPPPPPPPPwPPPPPPPPPPPPPPPPPhhhhPhhhhhhhh]PPPPPPPPh../Python/getargs.cat least at most %.200s() argument %d, item %d %.256sintegermust be %.50s, not %.50sintegerintegerintegerintegerintegerintegerintegerlongintegerfloatfloatcomplex(unicode conversion error)(unspecified)string or read-only bufferstring without null bytesstring or None(buffer is NULL)(encoding failed)(buffer_len is NULL)(memory error)(cleanup problem)(buffer overflow)read-write bufferimpossibleexpected %d arguments, not %dis not retrievablekeywords must be stringsexcess ')' in getargs formatmissing ')' in getargs format%.200s%s takes no argumentsbad format string: %.200s%s does not take keyword arguments%s expected %s%d arguments, got %dunpacked tuple should have %s%d elements, but has %dinteger argument expected, got floatunsigned byte integer is less than minimumunsigned byte integer is greater than maximumsigned short integer is less than minimumsigned short integer is greater than maximumstring or single-segment read-only bufferstring without null bytes or None(unknown parser marker combination)string or unicode or text buffer(encoder failed to return a string)(encoded string without NULL bytes)single-segment read-write bufferinvalid use of 't' format characterstring or read-only character bufferexpected %d arguments, not %.50smust be %d-item sequence, not %.50smust be sequence of length %d, not %dmore argument specifiers than keyword list entriestuple found in format when using keyword argumentsmore keyword list entries than argument specifierskeyword parameter '%s' was given by position and by name%.200s%s takes %s %d argument%s (%d given)'%s' is an invalid keyword argument for this functiontoo many tuple nesting levels in argument format string%.200s%s takes at least one argumentold style getargs format uses new featuresnew style getargs format but argument is not a tuple%.150s%s takes %s %d argument%s (%d given)޼dDo¿HY0 wazz 22222 [GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)]linux2single_inputfile_inputeval_inputdecoratordecoratorsfuncdefparametersvarargslistfpdeffplistsimple_stmtsmall_stmtexpr_stmtaugassignprint_stmtdel_stmtpass_stmtflow_stmtbreak_stmtcontinue_stmtreturn_stmtyield_stmtraise_stmtimport_stmtimport_nameimport_fromimport_as_namedotted_as_nameimport_as_namesdotted_as_namesdotted_nameglobal_stmtexec_stmtassert_stmtcompound_stmtif_stmtwhile_stmtfor_stmttry_stmtexcept_clausesuiteand_testnot_testcomparisoncomp_opxor_exprand_exprshift_exprarith_exprtermfactorpoweratomlistmakertestlist_gexplambdeftrailersubscriptlistsubscriptsliceopexprlisttestlisttestlist_safedictmakerclassdefarglistlist_iterlist_forlist_ifgen_itergen_forgen_iftestlist1encoding_declbreakcontinueyieldraiseassertelifelsewhilefinallyexceptnot( > r`I( > r`I `I 0 ( > r`I  > `I> r @  > `I `I `I I @ (@`I  0`I"readonly attributerestricted attributebad memberdescr type for %sbad memberdescr typecan't delete numeric/char attributeqqRQqZR""5"hWHLLL@Lsymtable entrysymbolschildrenoptimizednesteds_push: parser stack overflow input line too longcan't re-enter readlineread-writesize must be zero or positivebuffer is read-onlybuffer()O|ii:bufferbuffer object expectedbuffer index out of range<%s buffer ptr %p, size %d at %p><%s buffer for %p, size %d, offset %d at %p>accessing non-existent buffer segmentsingle-segment buffer object expectedoffset must be zero or positivewritable buffers are not hashableright operand length must match slice lengthbuffer assignment index out of rangeright operand must be a single byte../Objects/cellobject.ccellInvalid call to PyCObject_SetVoidPtrPyCObject_GetDesc with non-C-objectPyCObject_GetDesc called with null pointerPyCObject_AsVoidPtr with non-C-objectPyCObject_AsVoidPtr called with null pointerPyCObject_FromVoidPtrAndDesc called with null descriptionPyCObject|OOOO:propertycan't delete attributecan't set attributeunreadable attributewrapper_descriptorfgetfdelmethod-wrapperdictproxygetset_descriptormember_descriptorclassmethod_descriptor__objclass__D.keys() -> list of D's keyswrapper %s doesn't take keyword argumentsdescriptor '%s' for '%s' objects doesn't apply to '%s' objectdescriptor '%.300s' of '%.100s' object needs an argumentdescriptor '%.200s' requires a '%.100s' object but received a '%.100s'descriptor '%.200s' for '%.100s' objects doesn't apply to '%.100s' objectattribute '%.300s' of '%.100s' objects is not writabledescriptor '%s' for type '%s' needs either an object or a typedescriptor '%s' for type '%s' needs a type, not a '%s' as arg 2descriptor '%s' for type '%s' doesn't apply to type '%s'attribute '%.300s' of '%.100s' objects is not readableD.has_key(k) -> True if D has a key k, else FalseD.get(k[,d]) -> D[k] if D.has_key(k), else d. d defaults to None.D.values() -> list of D's valuesD.items() -> list of D's (key, value) pairs, as 2-tuplesD.iterkeys() -> an iterator over the keys of DD.itervalues() -> an iterator over the values of DD.iteritems() -> an iterator over the (key, value) items of DD.copy() -> a shallow copy of DO:enumerateargument to reversed() must be a sequencegenerator already executinggeneratorgi_framegi_runninguninitialized staticmethod objectfunction attributes not accessible in restricted modefunction's dictionary may not be deletedsetting function's dictionary to a non-dictuninitialized classmethod objectarg 3 (name) must be None or stringarg 4 (defaults) must be None or tuplearg 5 (closure) must be None or tuple%s requires closure of length %d, not %darg 5 (closure) expected cell, found %sfunc_defaults must be set to a tuple objectfunc_name must be set to a string objectfunc_code must be set to a code object%s() requires a code object with %d free vars, not %d../Objects/funcobject.cnon-tuple closurenon-tuple default argsO!O!|OOO:functionarg 5 (closure) must be tupleargdefsfunc_closurefunc_docfunc_globalsfunc_codefunc_defaultsfunc_dictfunc_name../Objects/rangeobject.cxrange(%ld)xrange(%ld, %ld)xrange(%ld, %ld, %ld)integer additionxrange()rangeiteratorxrange object index out of rangePyRange_New's 'repetitions' argument must be 1l;xrange() requires 1-3 int argumentsll|l;xrange() requires 1-3 int argumentsxrange() arg 3 must not be zeroxrange() result has too many itemsset objects are unhashablefrozenset()%s(%s)%s([])pop from an empty setcan only compare to a setdiscardintersectionintersection_updateissubsetissupersetsymmetric_differencesymmetric_difference_updateunioncannot compare sets using cmp()nmGnGnmnO~ { wHo Q 8tt(osooi2{B{R{b{r{{{{{{{{{||"|2|B|R|b|r|||||||||}}"}2}B}R}b}r}}}}}}}}}~~"~2~B~R~b~r~~~~~~~~~"2BRbr"2BRbr€Ҁ"2BRbrҁ"2BRbr‚҂"2BRbrƒ҃"2BRbr„҄"2BRbr…҅"2BRbr†҆"2BRbr xx +xxx%x'֬i`)xx1xǢ:x}>x0Ax JQPx ]Vx`zHcx@+lx6 xx@xTx`Sxx 1xoxZx` xx%x &8x_58x@ yy:$y B*+ymC/yU 6y@#?y5 xK`Cy@vMy@G.Ry@u[ycyvgyNqyS y]y`. yy@q8y *y5;yp~7y`Yyz`z;2#z2zJ ?z )Pz5:'`z]4mz}zzz%z@z &rz`\z-#zP 3z{! {*{ <{ D{CN{ ;:gU{`\{ d{i{s{`6x{@ 3(~{F {_ F{@ `{2!}{@!q {!{]"kU{`#%{-# {@8#${]#_{`z#%@I# {#.{`# `#L@ $>_|i$G(|$82 %L|%$|@%E/#|%E%*|$&Dc9|`&D|`&QJ|']Q| (K\@h("X|i( ]|}(Xzd|(4l|,)~s|`G)6x| ~).x@)n0|),|*|!*BK m* v*A|* o|'+7z^+[.+|+(( ++@,**#, |-,fw|,C|`T-(|-!|..|'.+|G.)|p.,}.}. }.}. .}.dyC}@C/V} U/0f}`@0/v} p03}@0}0 }0-}0}04} 0/}/1j.}]1Bc@sdZdZddgZdkZdkZdkZdkZdkZdZdZ dei fdYZ dei fdYZ e e d d Zed jo endS( s HTTP server base class. Note: the class in this module doesn't implement any HTTP request; see SimpleHTTPServer for simple implementations of GET, HEAD and POST (including CGI scripts). It does, however, optionally implement HTTP/1.1 persistent connections, as of version 0.3. Contents: - BaseHTTPRequestHandler: HTTP request handler base class - test: test function XXX To do: - log requests even later (to capture byte count) - log user-agent header and other interesting goodies - send error log to separate file s0.3t HTTPServertBaseHTTPRequestHandlerNs Error response

Error response

Error code %(code)d.

Message: %(message)s.

Error code explanation: %(code)s = %(explain)s. cCs(|iddiddiddS(Nt&s&ts>(thtmltreplace(R((t$/usr/lib/python2.4/BaseHTTPServer.pyt _quote_html\scBstZdZdZRS(NicCsHtii||iid \}}ti||_ ||_ dS(s.Override server_bind to store the server name.iN( t SocketServert TCPServert server_bindtselftsockett getsocknamethosttporttgetfqdnt server_namet server_port(R RR((RR cs (t__name__t __module__tallow_reuse_addressR (((RR_sc BstZdZdeiidZdeZdZ dZ dZ e dZ eZe dZd Zd Zd d d Zd ZdZdZdZdZdddddddgZe dddddddd d!d"d#d$g Zd%Zd&ZeiZhd'd<d*d<d-d<d0d<d3d<d6d<d9d<d<d<d?d<dBd<dEd<dHd<dKd<dNd<dQd<dTd<dVd<dYd<d\d<d_d<dbd<ded<dhd<dkd<dnd<dqd<dtd<dwd<dzd<d}d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd where is a (case-sensitive) keyword such as GET or POST, is a string containing path information for the request, and should be the string "HTTP/1.0" or "HTTP/1.1". is encoded using the URL encoding scheme (using %xx to signify the ASCII character with hex code xx). The specification specifies that lines are separated by CRLF but for compatibility with the widest range of clients recommends servers also handle LF. Similarly, whitespace in the request line is treated sensibly (allowing multiple spaces between components and allowing trailing whitespace). Similarly, for output, lines ought to be separated by CRLF pairs but most clients grok LF characters just fine. If the first line of the request has the form (i.e. is left out) then this is assumed to be an HTTP 0.9 request; this form has no optional headers and data part and the reply consists of just the data. The reply form of the HTTP 1.x protocol again has three parts: 1. One line giving the response code 2. An optional set of RFC-822-style headers 3. The data Again, the headers and data are separated by a blank line. The response code line has the form where is the protocol version ("HTTP/1.0" or "HTTP/1.1"), is a 3-digit response code indicating success or failure of the request, and is an optional human-readable string explaining what the response code means. This server parses the request and the headers, and then calls a function specific to the request type (). Specifically, a request SPAM will be handled by a method do_SPAM(). If no such method exists the server sends an error response to the client. If it exists, it is called with no arguments: do_SPAM() Note that the request name is case sensitive (i.e. SPAM and spam are different requests). The various request details are stored in instance variables: - client_address is the client IP address in the form (host, port); - command, path and version are the broken-down request line; - headers is an instance of mimetools.Message (or a derived class) containing the header information; - rfile is a file object open for reading positioned at the start of the optional input data part; - wfile is a file object open for writing. IT IS IMPORTANT TO ADHERE TO THE PROTOCOL FOR WRITING! The first thing to be written must be the response line. Then follow 0 or more header lines, then a blank line, and then the actual data (if any). The meaning of the header lines depends on the command executed by the server; in most cases, when data is returned, there should be at least one header line of the form Content-type: / where and should be registered MIME types, e.g. "text/html" or "text/plain". sPython/is BaseHTTP/c Csd|_d|_}d|_|i}|ddjo|d }n |ddjo|d }n||_|i}t |djo-|\}}}|d d jo|i d d |t Snyf|id dd}|id }t |djo tnt|dt|df}Wn1ttfj o|i d d |t SnX|djo|idjo d|_n|djo|i dd|t Sq7n}t |djoB|\}}d|_|djo|i d d|t Sq7n(|pt Sn|i d d|t S||||_|_ |_|i|id|_|iidd}|idjo d|_n1|idjo|idjo d|_ntS(s'Parse a request (internal). The request should be stored in self.raw_requestline; the results are in self.command, self.path, self.request_version and self.headers. Return True for success, False for failure; on failure, an error is sent back. sHTTP/0.9iis is iisHTTP/isBad request version (%r)t/t.iisHTTP/1.1isInvalid HTTP Version (%s)tGETsBad HTTP/0.9 request type (%r)sBad request syntax (%r)t Connectionttcloses keep-aliveN(ii(ii(tNoneR tcommandtrequest_versiontversiontclose_connectiontraw_requestlinet requestlinetsplittwordstlentpatht send_errortFalsetbase_version_numbertversion_numbert ValueErrortintt IndexErrortprotocol_versiont MessageClasstrfiletheaderstgettconntypetlowertTrue( R R#R*R4R RR%R'R+((Rt parse_requestsd        $             # cCs|ii|_|ipd|_dSn|ipdSnd|i}t||p|i dd|idSnt ||}|dS(sHandle a single HTTP request. You normally don't need to override this method; see the class __doc__ string for information on how to handle specific HTTP commands such as GET and POST. iNtdo_isUnsupported method (%r)( R R1treadlineR"R!R7RtmnamethasattrR(tgetattrtmethod(R R:R=((Rthandle_one_request#s    cCs3d|_|ix|ip|iqWdS(s&Handle multiple requests if necessary.iN(R R!R>(R ((Rthandle8s    cCsy|i|\}}Wntj od\}}nX|djo |}n|}|i d|||i hd|<dt |<d|<}|i |||idd|idd |i|id jo.|d jo!|djo|ii|ndS(sSend and log an error reply. Arguments are the error code, and a detailed message. The detailed message defaults to the short entry matching the response code. This sends an error response (so it must be called before any output has been generated), logs the error, and finally sends a piece of HTML explaining the error to the user. s???scode %d, message %stcodetmessagetexplains Content-Types text/htmlRRtHEADiii0N(s???s???(ii0(R t responsesR@tshorttlongtKeyErrorRARRBt log_errorterror_message_formatRtcontentt send_responset send_headert end_headersRtwfiletwrite(R R@RARFRJRERB((RR(@s   . *cCs|i||djo/||ijo|i|d}qId}n|idjo$|iid|i ||fn|i d|i |i d|i dS(sSend the response header and log the response code. Also send two standard headers with the server software version and the current date. iRsHTTP/0.9s %s %d %s tServertDateN( R t log_requestR@RARRDRRNROR/RLtversion_stringtdate_time_string(R R@RA((RRKas   $cCs|idjo|iid||fn|idjoD|idjo d|_q|idjo d|_qndS( sSend a MIME header.sHTTP/0.9s%s: %s t connectionRis keep-aliveiN(R RRNROtkeywordtvalueR5R!(R RVRW((RRLus cCs(|idjo|iidndS(s,Send the blank line ending the MIME headers.sHTTP/0.9s N(R RRNRO(R ((RRMst-cCs)|id|it|t|dS(sNLog an accepted request. This is called by send_response(). s "%s" %s %sN(R t log_messageR#tstrR@tsize(R R@R[((RRRs cGs|i|dS(sLog an error. This is called when a request cannot be fulfilled. By default it passes the message on to log_message(). Arguments are the same as for log_message(). XXX This should go to the separate error log. N(R RYtargs(R R\((RRHs cGs1tiid|i|i||fdS(sLog an arbitrary message. This is used by all other logging functions. Override it if you have specific logging wishes. The first argument, FORMAT, is a format string for the message to be logged. If the format string contains any % escapes requiring parameters, they should be specified as subsequent arguments (it's just like printf!). The client host and current date/time are prefixed to every message. s%s - - [%s] %s N(tsyststderrROR taddress_stringtlog_date_time_stringtformatR\(R RaR\((RRYscCs|id|iS(s*Return the server software version string.t N(R tserver_versiont sys_version(R ((RRSsc Csgti} ti| \ }}} }}}}} }d|i || |i|||||f}|S(s@Return the current date and time formatted for a message header.s#%s, %02d %3s %4d %02d:%02d:%02d GMTN(ttimetnowtgmtimetyeartmonthtdaythhtmmtsstwdtytzR t weekdaynamet monthnamets( R RnRlRsRiRmRkRpRhRoRfRj((RRTs  *-c Cs]ti} ti| \ }}} }}}} }}d| |i |||||f}|S(s.Return the current time formatted for logging.s%02d/%3s/%04d %02d:%02d:%02dN(ReRft localtimeRhRiRjRkRlRmtxRoRpR RrRs( R RpRlRsRiRmRkRhRoRuRfRj((RR`s  *#tMontTuetWedtThutFritSattSuntJantFebtMartAprtMaytJuntJultAugtSeptOcttNovtDeccCs |id \}}ti|S(sReturn the client address formatted for logging. This version looks up the full hostname using gethostbyaddr(), and tries to find a name that contains at least one dot. iN(R tclient_addressRRR R(R RR((RR_ssHTTP/1.0idtContinues!Request received, please continueiesSwitching Protocolss.Switching to new protocol; obey Upgrade headeritOKs#Request fulfilled, document followsitCreatedsDocument created, URL followsitAccepteds/Request accepted, processing continues off-lineisNon-Authoritative InformationsRequest fulfilled from cacheis No responses"Request fulfilled, nothing followsis Reset Contents#Clear input form for further input.isPartial ContentsPartial content follows.i,sMultiple Choicess,Object has several resources -- see URI listi-sMoved Permanentlys(Object moved permanently -- see URI listi.tFounds(Object moved temporarily -- see URI listi/s See Others'Object moved -- see Method and URL listi0s Not modifieds)Document has not changed since given timei1s Use ProxysAYou must use proxy specified in Location to access this resource.i3sTemporary Redirectis Bad requests(Bad request syntax or unsupported methodit Unauthorizeds*No permission -- see authorization schemesisPayment requireds"No payment -- see charging schemesit Forbiddens0Request forbidden -- authorization will not helpis Not FoundsNothing matches the given URIisMethod Not Alloweds,Specified method is invalid for this server.isNot Acceptables&URI not available in preferred format.isProxy Authentication Requireds8You must authenticate with this proxy before proceeding.isRequest Time-outs#Request timed out; try again later.itConflictsRequest conflict.itGones6URI no longer exists and has been permanently removed.isLength Requireds#Client must specify Content-Length.isPrecondition Faileds!Precondition in headers is false.isRequest Entity Too LargesEntity is too large.isRequest-URI Too LongsURI is too long.isUnsupported Media Types"Entity body in unsupported format.isRequested Range Not SatisfiablesCannot satisfy request range.isExpectation Faileds(Expect condition could not be satisfied.isInternal errorsServer got itself in troubleisNot Implementeds&Server does not support this operationis Bad Gateways,Invalid responses from another server/proxy.isService temporarily overloadeds8The server cannot process the request due to a high loadisGateway timeouts4The gateway server did not receive a timely responseisHTTP Version not supportedsCannot fulfill request.(Rs!Request received, please continue(sSwitching Protocolss.Switching to new protocol; obey Upgrade header(sOKs#Request fulfilled, document follows(RsDocument created, URL follows(Rs/Request accepted, processing continues off-line(sNon-Authoritative InformationsRequest fulfilled from cache(s No responses"Request fulfilled, nothing follows(s Reset Contents#Clear input form for further input.(sPartial ContentsPartial content follows.(sMultiple Choicess,Object has several resources -- see URI list(sMoved Permanentlys(Object moved permanently -- see URI list(Rs(Object moved temporarily -- see URI list(s See Others'Object moved -- see Method and URL list(s Not modifieds)Document has not changed since given time(s Use ProxysAYou must use proxy specified in Location to access this resource.(sTemporary Redirects(Object moved temporarily -- see URI list(s Bad requests(Bad request syntax or unsupported method(Rs*No permission -- see authorization schemes(sPayment requireds"No payment -- see charging schemes(Rs0Request forbidden -- authorization will not help(s Not FoundsNothing matches the given URI(sMethod Not Alloweds,Specified method is invalid for this server.(sNot Acceptables&URI not available in preferred format.(sProxy Authentication Requireds8You must authenticate with this proxy before proceeding.(sRequest Time-outs#Request timed out; try again later.(RsRequest conflict.(Rs6URI no longer exists and has been permanently removed.(sLength Requireds#Client must specify Content-Length.(sPrecondition Faileds!Precondition in headers is false.(sRequest Entity Too LargesEntity is too large.(sRequest-URI Too LongsURI is too long.(sUnsupported Media Types"Entity body in unsupported format.(sRequested Range Not SatisfiablesCannot satisfy request range.(sExpectation Faileds(Expect condition could not be satisfied.(sInternal errorsServer got itself in trouble(sNot Implementeds&Server does not support this operation(s Bad Gateways,Invalid responses from another server/proxy.(sService temporarily overloadeds8The server cannot process the request due to a high load(sGateway timeouts4The gateway server did not receive a timely response(sHTTP Version not supportedsCannot fulfill request.(!RRt__doc__R]R R$Rdt __version__RcR7R>R?RR(tDEFAULT_ERROR_MESSAGERIRKRLRMRRRHRYRSRTR`RqRrR_R/t mimetoolstMessageR0RD(((RRks. f  H         -  sHTTP/1.0cCstidottid}nd}d|f}||_|||}|i i }dG|dGdG|dGdGH|i dS( sTest the HTTP request handler class. This runs an HTTP server on port 8000 (or the first command line argument). ii@RsServing HTTP oniRs...N(R]targvR-Rtserver_addresstprotocolt HandlerClassR/t ServerClassthttpdR Rtsat serve_forever(RRRRRRR((Rttest)s  t__main__(RRt__all__R]ReR RR RRR RtStreamRequestHandlerRRR( RRRR RRR]RReRRR ((Rt?s3         c@sdkZdkZeiieidZeiieo{eiidpkxheieD]SZ e i do=eiiee Z eii e oe eid - socket type: - SOCK_STREAM (reliable stream, e.g. TCP) - SOCK_DGRAM (datagrams, e.g. UDP) For request-based servers (including socket-based): - client address verification before further looking at the request (This is actually a hook for any processing that needs to look at the request before anything else, e.g. logging) - how to handle multiple requests: - synchronous (one request is handled at a time) - forking (each request is handled by a new process) - threading (each request is handled by a new thread) The classes in this module favor the server type that is simplest to write: a synchronous TCP/IP server. This is bad class design, but save some typing. (There's also the issue that a deep class hierarchy slows down method lookups.) There are five classes in an inheritance diagram, four of which represent synchronous servers of four types: +------------+ | BaseServer | +------------+ | v +-----------+ +------------------+ | TCPServer |------->| UnixStreamServer | +-----------+ +------------------+ | v +-----------+ +--------------------+ | UDPServer |------->| UnixDatagramServer | +-----------+ +--------------------+ Note that UnixDatagramServer derives from UDPServer, not from UnixStreamServer -- the only difference between an IP and a Unix stream server is the address family, which is simply repeated in both unix server classes. Forking and threading versions of each type of server can be created using the ForkingServer and ThreadingServer mix-in classes. For instance, a threading UDP server class is created as follows: class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass The Mix-in class must come first, since it overrides a method defined in UDPServer! Setting the various member variables also changes the behavior of the underlying server mechanism. To implement a service, you must derive a class from BaseRequestHandler and redefine its handle() method. You can then run various versions of the service by combining one of the server classes with your request handler class. The request handler class must be different for datagram or stream services. This can be hidden by using the request handler subclasses StreamRequestHandler or DatagramRequestHandler. Of course, you still have to use your head! For instance, it makes no sense to use a forking server if the service contains state in memory that can be modified by requests (since the modifications in the child process would never reach the initial state kept in the parent process and passed to each child). In this case, you can use a threading server, but you will probably have to use locks to avoid two requests that come in nearly simultaneous to apply conflicting changes to the server state. On the other hand, if you are building e.g. an HTTP server, where all data is stored externally (e.g. in the file system), a synchronous class will essentially render the service "deaf" while one request is being handled -- which may be for a very long time if a client is slow to reqd all the data it has requested. Here a threading or forking server is appropriate. In some cases, it may be appropriate to process part of a request synchronously, but to finish processing in a forked child depending on the request data. This can be implemented by using a synchronous server and doing an explicit fork in the request handler class handle() method. Another approach to handling multiple simultaneous requests in an environment that supports neither threads nor fork (or where these are too expensive or inappropriate for the service) is to maintain an explicit table of partially finished requests and to use select() to decide which request to work on next (or whether to handle a new incoming request). This is particularly important for stream services where each client can potentially be connected for a long time (if threads or subprocesses cannot be used). Future work: - Standard classes for Sun RPC (which uses either UDP or TCP) - Standard mix-in classes to implement various authentication and encryption schemes - Standard framework for select-based multiplexing XXX Open problems: - What to do with out-of-band data? BaseServer: - split generic "request" functionality out into BaseServer class. Copyright (C) 2000 Luke Kenneth Casson Leighton example: read entries from a SQL database (requires overriding get_request() to return a table entry from the database). entry is processed by a RequestHandlerClass. s0.4Nt TCPServert UDPServertForkingUDPServertForkingTCPServertThreadingUDPServertThreadingTCPServertBaseRequestHandlertStreamRequestHandlertDatagramRequestHandlertThreadingMixInt ForkingMixIntAF_UNIXtUnixStreamServertUnixDatagramServertThreadingUnixStreamServertThreadingUnixDatagramServert BaseServercBshtZdZdZdZdZdZdZdZdZ dZ d Z d Z RS( s9Base class for server classes. Methods for the caller: - __init__(server_address, RequestHandlerClass) - serve_forever() - handle_request() # if you do not use serve_forever() - fileno() -> int # for select() Methods that may be overridden: - server_bind() - server_activate() - get_request() -> request, client_address - verify_request(request, client_address) - server_close() - process_request(request, client_address) - close_request(request) - handle_error() Methods for derived classes: - finish_request(request, client_address) Class variables that may be overridden by derived classes or instances: - address_family - socket_type - allow_reuse_address Instance variables: - RequestHandlerClass - socket cCs||_||_dS(s/Constructor. May be extended, do not override.N(tserver_addresstselftRequestHandlerClass(RRR((t"/usr/lib/python2.4/SocketServer.pyt__init__s cCsdS(sSCalled by constructor to activate the server. May be overridden. N((R((Rtserver_activatescCsx|iqWdS(s,Handle one request at a time until doomsday.iN(Rthandle_request(R((Rt serve_foreverscCsy|i\}}Wntij o dSnX|i||o?y|i||Wq|i|||i |qXndS(s&Handle one request, possibly blocking.N( Rt get_requesttrequesttclient_addresstsocketterrortverify_requesttprocess_requestt handle_errort close_request(RRR((RRs cCstS(snVerify the request. May be overridden. Return True if we should proceed with this request. N(tTrue(RRR((RRscCs!|i|||i|dS(sVCall finish_request. Overridden by ForkingMixIn and ThreadingMixIn. N(Rtfinish_requestRRR!(RRR((RRscCsdS(sDCalled to clean-up the server. May be overridden. N((R((Rt server_closescCs|i|||dS(s8Finish one request by instantiating RequestHandlerClass.N(RRRR(RRR((RR#scCsdS(s)Called to clean up an individual request.N((RR((RR!scCs2ddGHdG|GHdk}|iddGHdS(stHandle an error gracefully. May be overridden. The default is to print a traceback and continue. t-i(s4Exception happened during processing of request fromN(Rt tracebackt print_exc(RRRR&((RR s   ( t__name__t __module__t__doc__RRRRRRR$R#R!R (((RRs &       cBsktZdZeiZeiZdZe Z dZ dZ dZ dZdZdZdZRS( sBase class for various socket-based server classes. Defaults to synchronous IP stream (i.e., TCP). Methods for the caller: - __init__(server_address, RequestHandlerClass) - serve_forever() - handle_request() # if you don't use serve_forever() - fileno() -> int # for select() Methods that may be overridden: - server_bind() - server_activate() - get_request() -> request, client_address - verify_request(request, client_address) - process_request(request, client_address) - close_request(request) - handle_error() Methods for derived classes: - finish_request(request, client_address) Class variables that may be overridden by derived classes or instances: - address_family - socket_type - request_queue_size (only for stream sockets) - allow_reuse_address Instance variables: - server_address - RequestHandlerClass - socket icCsFti|||ti|i|i|_|i|i dS(s/Constructor. May be extended, do not override.N( RRRRRRtaddress_familyt socket_typet server_bindR(RRR((RREs   cCsA|io |iititidn|ii|idS(sOCalled by constructor to bind the socket. May be overridden. iN(Rtallow_reuse_addressRt setsockoptt SOL_SOCKETt SO_REUSEADDRtbindR(R((RR-Ms  cCs|ii|idS(sSCalled by constructor to activate the server. May be overridden. N(RRtlistentrequest_queue_size(R((RRWscCs|iidS(sDCalled to clean-up the server. May be overridden. N(RRtclose(R((RR$_scCs |iiS(sMReturn socket file number. Interface required by select(). N(RRtfileno(R((RR6gscCs |iiS(sYGet the request and client address from the socket. May be overridden. N(RRtaccept(R((RRoscCs|idS(s)Called to clean up an individual request.N(RR5(RR((RR!ws(R(R)R*RtAF_INETR+t SOCK_STREAMR,R4tFalseR.RR-RR$R6RR!(((RRs )       cBs>tZdZeZeiZdZdZ dZ dZ RS(sUDP server class.i cCs.|ii|i\}}||if|fS(N(RRtrecvfromtmax_packet_sizetdatat client_addr(RR=R>((RRscCsdS(N((R((RRscCsdS(N((RR((RR!s( R(R)R*R:R.Rt SOCK_DGRAMR,R<RRR!(((RR|s    cBs,tZdZeZdZdZdZRS(s5Mix-in class to handle each request in a new process.i(cCsx|iot|i|ijo ti}nd}ytid|\}}Wnti j o d}nX|pPn|ii |qWdS(s+Internal routine to wait for died children.iN( Rtactive_childrentlent max_childrentostWNOHANGtoptionstwaitpidtpidtstatusRtNonetremove(RRHRGRE((Rtcollect_childrens   cCs|iti}|oB|idjo g|_n|ii||i|dSnQy!|i ||ti dWn,z|i ||Wdti dXnXdS(s-Fork a new subprocess to process the request.Nii(RRKRCtforkRGR@RItappendR!RR#Rt_exitR (RRRRG((RRs"    (R(R)R*RIR@RBRKR(((RR s  cBs&tZdZeZdZdZRS(s4Mix-in class to handle each request in a new thread.cCsLy!|i|||i|Wn$|i|||i|nXdS(sgSame as in BaseServer but as a thread. In addition, exception handling is done here. N(RR#RRR!R (RRR((Rtprocess_request_threadscCsSdk}|id|id||f}|io|idn|i dS(s*Start a new thread to process the request.Nttargettargsi( t threadingtThreadRRORRtttdaemon_threadst setDaemontstart(RRRRRRT((RRs  (R(R)R*R:RUROR(((RR s  cBstZRS(N(R(R)(((RRscBstZRS(N(R(R)(((RRscBstZRS(N(R(R)(((RRscBstZRS(N(R(R)(((RRscBstZeiZRS(N(R(R)RR R+(((RR scBstZeiZRS(N(R(R)RR R+(((RR scBstZRS(N(R(R)(((RRscBstZRS(N(R(R)(((RRscBs2tZdZdZdZdZdZRS(sBase class for request handler classes. This class is instantiated for each request to be handled. The constructor sets the instance variables request, client_address and server, and then calls the handle() method. To implement a specific service, all you need to do is to derive a class which defines a handle() method. The handle() method can find the request as self.request, the client address as self.client_address, and the server (in case it needs access to per-server information) as self.server. Since a separate instance is created for each request, the handle() method can define arbitrary other instance variariables. cCsN||_||_||_z"|i|i|iWddt_ XdS(N( RRRtservertsetupthandletfinishRItsyst exc_traceback(RRRRX((RRs     cCsdS(N((R((RRYscCsdS(N((R((RRZscCsdS(N((R((RR[s(R(R)R*RRYRZR[(((RRs   cBs,tZdZdZdZdZdZRS(s4Define self.rfile and self.wfile for stream sockets.iicCsF|i|_|iid|i|_|iid|i|_dS(Ntrbtwb(RRt connectiontmakefiletrbufsizetrfiletwbufsizetwfile(R((RRY.s cCs<|iip|iin|ii|iidS(N(RRetclosedtflushR5Rc(R((RR[3s  (R(R)R*RbRdRYR[(((RR s   cBs tZdZdZdZRS(s6Define self.rfile and self.wfile for datagram sockets.cCsFdk}|i\|_|_|i|i|_|i|_dS(N(tStringIORRtpacketRRcRe(RRh((RRYAs cCs#|ii|ii|idS(N(RRtsendtoRetgetvalueR(R((RR[Gs(R(R)R*RYR[(((RR:s  (R*t __version__RR\RCt__all__thasattrtextendRRRR R RRRRR R RRRRR(R RRRRmRR RlRRR R\RR RRRCRRRR((Rt?xs0    'j//c@s}dZydklZWnej o dZnXdgZdZdfdYZdZedjo endS( s File-like objects that read from or write to a string buffer. This implements (nearly) all stdio methods. f = StringIO() # ready for writing f = StringIO(buf) # ready for reading f.close() # explicitly release resources held flag = f.isatty() # always false pos = f.tell() # get current position f.seek(pos) # set current position f.seek(pos, mode) # mode 0: absolute; 1: relative; 2: relative to EOF buf = f.read() # read until EOF buf = f.read(n) # read up to n bytes buf = f.readline() # read until end of line ('\n') or EOF list = f.readlines()# list of f.readline() results until EOF f.truncate([size]) # truncate file at to at most size (default: current pos) f.write(buf) # write at current position f.writelines(list) # for line in list: f.write(line) f.getvalue() # return whole file's contents as a string Notes: - Using a real file is often faster (but less convenient). - There's also a much faster implementation in C, called cStringIO, but it's not subclassable. - fileno() is left unimplemented so that code which uses it triggers an exception early. - Seeking far beyond EOF and then writing will insert real null bytes that occupy space in the buffer. - There's a simple test set (see end of this file). (sEINVALitStringIOcCs|o tdndS(NsI/O operation on closed file(tclosedt ValueError(R((t/usr/lib/python2.4/StringIO.pyt_complain_ifclosed&scBstZdZddZdZdZdZdZddZd Z d d Z e d Z dd Z e dZdZdZdZdZRS(sclass StringIO([buffer]) When a StringIO object is created, it can be initialized to an existing string by passing the string to the constructor. If no string is given, the StringIO will start empty. The StringIO object can accept either Unicode or 8-bit strings, but mixing the two may take some care. If both are used, 8-bit strings that cannot be interpreted as 7-bit ASCII (that use the 8th bit) will cause a UnicodeError to be raised when getvalue() is called. tcCs`t|tpt|}n||_t||_g|_d|_t|_ d|_ dS(Ni( t isinstancetbuft basestringtstrtselftlentbuflisttpostFalseRt softspace(R R((Rt__init__6s    cCs|S(N(R (R ((Rt__iter__AscCs5|io tn|i}|p tn|S(s_A file object is its own iterator, for example iter(f) returns f (unless f is closed). When a file is used as an iterator, typically in a for loop (for example, for line in f: print line), the next() method is called repeatedly. This method returns the next input line, or raises StopIteration when EOF is hit. N(R Rt StopIterationtreadlinetr(R R((RtnextDs    cCs'|ipt|_|`|`ndS(s Free the memory buffer. N(R RtTrueRR (R ((RtcloseRs  cCst|itS(s_Returns False because StringIO objects are not connected to a tty-like device. N(RR RR(R ((RtisattyYs icCst|i|io(|idi|i7_g|_n|djo||i7}n|djo||i7}nt d||_dS(sSet the file's current position. The mode argument is optional and defaults to 0 (absolute file positioning); other values are 1 (seek relative to the current position) and 2 (seek relative to the file's end). There is no return value. RiiiN( RR RR RtjointmodeR R tmax(R R R((Rtseek`s     cCst|i|iS(s#Return the file's current position.N(RR RR (R ((Rttellss icCst|i|io(|idi|i7_g|_n|djo |i}nt |i ||i}|i|i |!}||_ |S(sERead at most size bytes from the file (less if the read hits EOF before obtaining size bytes). If the size argument is negative or omitted, read all data until EOF is reached. The bytes are returned as a string object. An empty string is returned when EOF is encountered immediately. RiN( RR RR RRtnR tnewpostminR R(R RRR((Rtreadxs      cCst|i|io(|idi|i7_g|_n|iid|i}|djo |i }n |d}|dj o)|i||jo|i|}qn|i|i|!}||_|S(s$Read one entire line from the file. A trailing newline character is kept in the string (but may be absent when a file ends with an incomplete line). If the size argument is present and non-negative, it is a maximum byte count (including the trailing newline) and an incomplete line may be returned. An empty string is returned only when EOF is encountered immediately. Note: Unlike stdio's fgets(), the returned string contains null characters ('') if they occurred in the input. Rs iiN(RR RR RRtfindR tiR RtlengthtNoneR(R R$R#RR((RRs         cCswd}g}|i}xX|oP|i||t|7}d|jo |jnoPn|i}qW|S(s'Read until EOF using readline() and return a list containing the lines thus read. If the optional sizehint argument is present, instead of reading up to EOF, whole lines totalling approximately sizehint bytes (or more to accommodate a final whole line). iN(ttotaltlinesR RtlinetappendR tsizehint(R R*R'R(R&((Rt readliness  cCst|i|djo |i}n>|djottdn||ijo ||_n|i| |_ ||_ dS(sTruncate the file's size. If the optional size argument is present, the file is truncated to (at most) that size. The size defaults to the current position. The current file position is not changed unless the position is beyond the new file size. If the specified size exceeds the file's current size, the file remains unchanged. isNegative size not allowedN( RR RtsizeR%R tIOErrortEINVALtgetvalueRR (R R,((Rttruncates      cCsrt|i|pdSnt|tpt|}n|i}|i }||jo2|i i ||t ||_ |_dSn||jo"|i i d|||}n|t |}||jom|i o|idi|i 7_n|i| ||i|g|_ d|_||jo |}q\n|i i ||}||_ ||_dS(sGWrite a string to the file. There is no return value. NtR(RR RtsRRR R tsposR tslenR R)RRR(R R2R4R3R((Rtwrites6            cCs(|i}x|D]}||qWdS(sWrite a sequence of strings to the file. The sequence can be any iterable object producing strings, typically a list of strings. There is no return value. (The name is intended to match readlines(); writelines() does not add line separators.) N(R R5titerableR((R R6R5R(((Rt writeliness  cCst|idS(s"Flush the internal buffer N(RR R(R ((RtflushscCs9|io(|idi|i7_g|_n|iS(s Retrieve the entire contents of the "file" at any time before the StringIO object's close() method is called. The StringIO object can accept either Unicode or 8-bit strings, but mixing the two may take some care. If both are used, 8-bit strings that cannot be interpreted as 7-bit ASCII (that use the 8th bit) will cause a UnicodeError to be raised when getvalue() is called. RN(R R RR(R ((RR/s   (t__name__t __module__t__doc__RRRRRRRR!R%RR+R0R5R7R8R/(((RR*s            ! c Csdk}|ido|id}nd}t|di}t|di}t}x|d D]}|i |qlW|i |d|i |jo tdn|i}dG|GH|it|d|i |d|iddGt|iGHd G|iGH|i}d Gt|GH|it| d|it|}||jo td n|it|d|i}|d }|i|it||i}||jo td ndGt|GdGHdG|iGH|i|jo tdn|i|d|idddG|iGH|i|djo tdn|idS(Nis /etc/passwdRis write faileds File length =is First line =s Position =s Second line =sbad result after seek backis#bad result after seek back from EOFtReads more liness bad lengthisTruncated length =struncate did not adjust length(tsystargvtfiletopenR+R'R!ttextRtfR(R5R7R/t RuntimeErrorRR$RR treprRtline2tlistR0R( RBRAR'RER=RFR$R?R(((RttestsV                 t__main__N( R;terrnoR.t ImportErrort__all__RRRGR9(RKRRGRR.((Rt?s    - c@sdZZZdZZZdZdZdZdZ dZ dZ dZ d Z d Zd Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#d Z$d!Z%d"Z&d#Z'd$Z(d%Z)d&Z*d'Z+d(Z,d)Z-d*Z.d+Z/d,Z0d-Z1d.Z2d/Z3d0Z4d1Z5d2Z6d3Z7d4Z8d5Z9d6Z:d7Z;d8Z<d9Z=d:Z>d;Z?d<Z@d=ZAd>ZBd?ZCd@ZDdAZEdBZFdCZGdDZHdEZIdFZJdGZKdHZLdIS(Jiitntstwtetnwtswtnetsetnstewtnsewtcentertnonetxtytbothtleftttoptrighttbottomtraisedtsunkentflattridgetgroovetsolidt horizontaltverticaltnumerictchartwordtbaselinetinsidetoutsidetsels sel.firstssel.lasttendtinserttcurrenttanchortalltnormaltdisabledtactivethiddentcascadet checkbuttontcommandt radiobuttont separatortsingletbrowsetmultipletextendedtdotboxt underlinetpieslicetchordtarctfirsttlasttbuttt projectingtroundtbeveltmitertmovetotscrolltunitstpagesN(MtNOtFALSEtOFFtYEStTRUEtONtNtStWtEtNWtSWtNEtSEtNStEWtNSEWtCENTERtNONEtXtYtBOTHtLEFTtTOPtRIGHTtBOTTOMtRAISEDtSUNKENtFLATtRIDGEtGROOVEtSOLIDt HORIZONTALtVERTICALtNUMERICtCHARtWORDtBASELINEtINSIDEtOUTSIDEtSELt SEL_FIRSTtSEL_LASTtENDtINSERTtCURRENTtANCHORtALLtNORMALtDISABLEDtACTIVEtHIDDENtCASCADEt CHECKBUTTONtCOMMANDt RADIOBUTTONt SEPARATORtSINGLEtBROWSEtMULTIPLEtEXTENDEDtDOTBOXt UNDERLINEtPIESLICEtCHORDtARCtFIRSTtLASTtBUTTt PROJECTINGtROUNDtBEVELtMITERtMOVETOtSCROLLtUNITStPAGES(MRRoRRuRbR\RRRhRwRlRR}RURNReRIRRZRWRiRVR`RERRQRgRzRRRRSRRsRORaR_RRGRfRqRdRmRRRKRrRyRLRRpRRMRYRXRTRvRxRjRRJRtR]RFRkR^RPRnR~R|RR{RHR[RcRRR((t(/usr/lib/python2.4/lib-tk/Tkconstants.pyt?sc@sdZdZdkZeidjo dkZny dkZWn(ej oZeeednXeZ ei Z dk Tdk Tydk Z e Z[ Wnej o eZnXdZeeiZeeiZeiZeiZeiZy eiWnej oee_nXy eiWnej oee_nXdZy eiZWnej onXdZy eiZWnej onXd fd YZdaea d Z!d Z"d dZ#da$dfdYZ%de%fdYZ&de%fdYZ'de%fdYZ(de%fdYZ)ddZ*e+Z,eZ-dZ.dfdYZ/dfdYZ0d fd!YZ1d"e/e1fd#YZ2eed"dd$Z3d%fd&YZ4d'fd(YZ5d)fd*YZ6d+e/fd,YZ7d-e7e4e5e6fd.YZ8d/e7e1fd0YZ9d1e8fd2YZ:d3Z;d4Z<d5Z=d6Z>ed7Z?d8e8fd9YZ@d:e8fd;YZAd<e8fd=YZBd>e8fd?YZCd@e8fdAYZDdBe8fdCYZEdDe8fdEYZFdFe8fdGYZGdHe8fdIYZHdJe8fdKYZIdLe8fdMYZJdNe8fdOYZKdPe8fdQYZLdRfdSYZMdTeGfdUYZNdVfdWYZOdXeOfdYYZPdZeOfd[YZQd\ZRd]ZSd^e8fd_YZTd`e8fdaYZUdbe8fdcYZVdde:fdeYZWdfe:fdgYZXdhZYeZdijo eYndS(js2Wrapper functions for Tcl/Tk. Tkinter provides classes which allow the display, positioning and control of widgets. Toplevel widgets are Tk and Toplevel. Other widgets are Frame, Label, Entry, Text, Canvas, Button, Radiobutton, Checkbutton, Scale, Listbox, Scrollbar, OptionMenu, Spinbox LabelFrame and PanedWindow. Properties of the widgets are specified with keyword arguments. Keyword arguments have the same name as the corresponding resource under Tk. Widgets are positioned with one of the geometry managers Place, Pack or Grid. These managers can be called with methods place, pack, grid available in every Widget. Actions are bound to events by resources (e.g. keyword argument command) or with the method bind. Example (Hello, World): import Tkinter from Tkconstants import * tk = Tkinter.Tk() frame = Tkinter.Frame(tk, relief=RIDGE, borderwidth=2) frame.pack(fill=BOTH,expand=1) label = Tkinter.Label(frame, text="Hello, World") label.pack(fill=X, expand=1) button = Tkinter.Button(frame,text="Exit",command=tk.destroy) button.pack(side=BOTTOM) tk.mainloop() s$Revision: 39220 $Ntwin32s&, please install the python-tk package(t*icCsff}xY|D]Q}t|ttfjo|t|}q |dj o||f}q q W|S(sInternal function.N(tresttupletitemttypet TupleTypetListTypet_flattentNone(RRR((t$/usr/lib/python2.4/lib-tk/Tkinter.pyRCs cCst|tjo|Snt|ttfjo|Snh}xst|D]e}y|i|WqOt t fj o9}dG|GHx)|i D]\}}|||R?((R ttrace_variablescCs3|iidd|i|||ii|dS(sDelete the trace callback for a variable. MODE is one of "r", "w", "u" for read, write, undefine. CBNAME is the name of the callback returned from trace_variable or trace. R;tvdeleteN(R*R-R@R0RAR?R+t deletecommand(R*RAR?((R t trace_vdeletescCs4t|ii|ii|iidd|iS(s&Return all trace callback information.R;tvinfoN(tmapR*R-tsplitt splitlistR@R0(R*((R t trace_vinfos(RRRR2R R3R5R6R1R:RBR;RERJ(((R R&s       t StringVarcBs)tZdZdZedZdZRS(s#Value holder for strings variables.R'cCsti||dS(sKConstruct a string variable. MASTER can be given as master widget.N(R&R3R*R)(R*R)((R R3scCs7|ii|i}t|to|Snt|S(s#Return value of variable as string.N(R*R-R9R0R8t isinstancet basestringtstr(R*R8((R R:s (RRRR2R R3R:(((R RKs  tIntVarcBs2tZdZdZedZdZdZRS(s#Value holder for integer variables.icCsti||dS(sMConstruct an integer variable. MASTER can be given as master widget.N(R&R3R*R)(R*R)((R R3scCs0t|tot|}nti||S(s;Set the variable to value, converting booleans to integers.N(RLR8tbooltintR&R1R*(R*R8((R R1scCst|ii|iS(s/Return the value of the variable as an integer.N(tgetintR*R-R9R0(R*((R R:s(RRRR2R R3R1R:(((R ROs   t DoubleVarcBs)tZdZdZedZdZRS(s!Value holder for float variables.f0.0cCsti||dS(sLConstruct a float variable. MASTER can be given as a master widget.N(R&R3R*R)(R*R)((R R3scCst|ii|iS(s,Return the value of the variable as a float.N(t getdoubleR*R-R9R0(R*((R R: s(RRRR2R R3R:(((R RSs  t BooleanVarcBs)tZdZdZedZdZRS(s#Value holder for boolean variables.tfalsecCsti||dS(sNConstruct a boolean variable. MASTER can be given as a master widget.N(R&R3R*R)(R*R)((R R3scCs|ii|ii|iS(s+Return the value of the variable as a bool.N(R*R-t getbooleanR9R0(R*((R R:s(RRRR2R R3R:(((R RUs  cCstii|dS(sRun the main loop of Tcl.N(RR,tmainlooptn(RY((R RXscCstii|S(s1Convert true and false to integer values 1 and 0.N(RR,RWts(RZ((R RW%stMisccBstZdZeZdZdZedZdZdZ dZ ddZ e Z ed Z ed Zdd d Zdd ZeZeZdZdZeZdZdZdZdZdZdZdZedZdZ dZ!ddZ"dZ#dZ$dZ%dZ&d Z'd!Z(d"Z)ed#Z*ed$Z+d%Z,d&Z-ed'Z.d(Z/d)Z0d*Z1d+Z2d,Z3d-Z4ed.Z*ed/Z5e5Z6ed0Z7dd1Z8dd2Z9d3Z:d4Z;d5Z<d6Z=dd7Z>d8Z?d9Z@d:ZAd;ZBd<ZCd=ZDdd>ZEd?ZFd@ZGdAZHdBZIddCZJdDZKdEZLdFZMdGZNdHZOdIZPdJZQdKZRdLZSdMZTdNZUdOZVdPZWdQZXdRZYdSZZdTZ[dUZ\dVZ]dWZ^dXZ_dYZ`ddZZad[Zbd\Zcd]Zdd^Zed_Zfd`ZgdaZhdbZidcZjddZkdeZledfZmdgdhZneeediZoedjZpeeedkZqdlZreeedmZsdnZtddoZudpZvdqZwdrZxdsZydtZzeduZ{dvZ|e|Z}edgdwZ~e~ZdxZdZdieZdZdZdZedZeZdZeZdZdZdZdgZedZeZdZeZdZeeeedZeZdZhdZeZdZedZhdZeZdZeZeedZdZdZdZedZdZdZRS(sRInternal class. Base class which defines methods common for interior widgets.cCsE|idj o1x!|iD]}|ii|qWd|_ndS(skInternal function. Delete all Tcl commands created for this widget in the Tcl interpreter.N(R*t _tclCommandsR tnameR,RD(R*R]((R tdestroy1s  cCs>|ii|y|ii|Wntj onXdS(sDInternal function. Delete the Tcl command provided in NAME.N(R*R,RDR]R\tremovet ValueError(R*R]((R RD;s cCs"|ii|iidd|S(sSet Tcl internal variable, whether the look and feel should adhere to Motif. A parameter of 1 means adhere to Motif (e.g. no color change if mouse passes over slider). Returns the set value.R1ttk_strictMotifN(R*R,RWR@tboolean(R*Rb((R RaEscCs|iiddS(sDChange the color scheme to light brown as used in Tk 3.6 and before.t tk_bisqueN(R*R,R@(R*((R RcNscOs.|iidt|t|idS(s Set a new color scheme for all widget elements. A single color as argument will cause that all colors of Tk widget elements are derived from this. Alternatively several keyword parameters and its associated colors can be given. The following keywords are valid: activeBackground, foreground, selectColor, activeForeground, highlightBackground, selectBackground, background, highlightColor, selectForeground, disabledForeground, insertBackground, troughColor.t tk_setPaletteN(s tk_setPalette(R*R,R@RtargstkwR(R*ReRf((R RdQs cGsdS(s)Do not use. Needed in Tk 3.6 and earlier.N((R*Re((R t tk_menuBar^sR(cCs|iidd|dS(sWait until the variable is modified. A parameter of type IntVar, StringVar, DoubleVar or BooleanVar must be given.ttkwaitR<N(R*R,R@R](R*R]((R t wait_variableascCs4|djo |}n|iidd|idS(sQWait until a WIDGET is destroyed. If no parameter is given self is used.RhtwindowN(RjR R*R,R@t_w(R*Rj((R t wait_windowhs  cCs4|djo |}n|iidd|idS(sxWait until the visibility of a WIDGET changes (e.g. it appears). If no parameter is given self is used.Rht visibilityN(RjR R*R,R@Rk(R*Rj((R twait_visibilityos  t1cCs|ii||dS(sSet Tcl variable NAME to VALUE.N(R*R,tsetvarR]R8(R*R]R8((R RpwscCs|ii|S(s"Return value of Tcl variable NAME.N(R*R,tgetvarR](R*R]((R RqzscCs|ii|S(sPReturn a boolean value for Tcl boolean values true and false given as parameter.N(R*R,RWRZ(R*RZ((R RWscCs|iid|idS(sDirect input focus to this widget. If the application currently does not have the focus this widget will get the focus if the application gets the focus through the window manager.tfocusN(R*R,R@Rk(R*((R t focus_setscCs|iidd|idS(stDirect input focus to this widget even if the application does not have the focus. Use with caution!Rrs-forceN(R*R,R@Rk(R*((R t focus_forcescCs<|iid}|djp| odSn|i|S(sReturn the widget which has currently the focus in the application. Use focus_displayof to allow working with several displays. Return None if application does not have the focus.RrtnoneN(R*R,R@R]R t _nametowidget(R*R]((R t focus_gets cCsE|iidd|i}|djp| odSn|i|S(sReturn the widget which has currently the focus on the display where this widget is located. Return None if the application does not have the focus.Rrs -displayofRuN(R*R,R@RkR]R Rv(R*R]((R tfocus_displayofs cCsE|iidd|i}|djp| odSn|i|S(syReturn the widget which would have the focus if top level for this widget gets the focus from the window manager.Rrs-lastforRuN(R*R,R@RkR]R Rv(R*R]((R t focus_lastfors cCs|iiddS(sXThe widget under mouse will get automatically focus. Can not be disabled easily.ttk_focusFollowsMouseN(R*R,R@(R*((R RzscCs4|iid|i}|pdSn|i|S(snReturn the next widget in the focus order which follows widget which has currently the focus. The focus order first goes to the next child, then to the children of the child recursively and then to the next sibling which is higher in the stacking order. A widget is omitted if it has the takefocus resource set to 0.t tk_focusNextN(R*R,R@RkR]R Rv(R*R]((R R{s cCs4|iid|i}|pdSn|i|S(sHReturn previous widget in the focus order. See tk_focusNext for details.t tk_focusPrevN(R*R,R@RkR]R Rv(R*R]((R R|s cGso|p|iid|nNg}||||d}|i|}|i ||iid||SdS(sCall function once after given time. MS specifies the time in milliseconds. FUNC gives the function which shall be called. Additional parameters are given as parameters to the function call. Return identifier to cancel scheduling with after_cancel.taftercCsAz||Wdy|i|dWntj onXXdS(Ni(tfuncReR*RDttmptTclError(R~ReR*R((R tcallitsN( R~R*R,R@tmsRReRR=R]tappend(R*RR~ReRRR]((R R}s cGs|id||S(sCall FUNC once if the Tcl main loop has no event to process. Return an identifier to cancel the scheduling with after_cancel.tidleN(R*R}R~Re(R*R~Re((R t after_idlescCsoy?|iidd|}|ii|d}|i|Wntj onX|iidd|dS(sCancel scheduling of function identified with ID. Identifier returned by after or after_idle must be given as first parameter.R}tinfoitcancelN( R*R,R@tidtdataRItscriptRDR(R*RRR((R t after_cancelsicCs!|iid|i|dS(sRing a display's bell.tbellN(sbell(R*R,R@t _displayoft displayof(R*R((R RscKsB|idp|i|d|idp|i|dscCst|iidd|iS(siReturn the x offset of the virtual root relative to the root window of the screen of this widget.RtvrootxN(RRR*R,R@Rk(R*((R t winfo_vrootxDscCst|iidd|iS(siReturn the y offset of the virtual root relative to the root window of the screen of this widget.RtvrootyN(RRR*R,R@Rk(R*((R t winfo_vrootyIscCst|iidd|iS(s Return the width of this widget.RtwidthN(RRR*R,R@Rk(R*((R t winfo_widthNscCst|iidd|iS(sVReturn the x coordinate of the upper left corner of this widget in the parent.RRN(RRR*R,R@Rk(R*((R twinfo_xRscCst|iidd|iS(sVReturn the y coordinate of the upper left corner of this widget in the parent.RtyN(RRR*R,R@Rk(R*((R twinfo_yWscCs|iiddS(sEEnter event loop until all pending events have been processed by Tcl.RN(R*R,R@(R*((R R\scCs|iidddS(sEnter event loop until all idle callbacks have been called. This will update the display of windows but not process events caused by the user.Rt idletasksN(R*R,R@(R*((R tupdate_idletasks_scCsP|djo&|ii|iid|iSn|iid|i|dS(s,Set or get the list of bindtags for this widget. With no argument return the list of all bindtags associated with this widget. With a list of strings as argument the bindtags are set to this list. The bindtags determine in which order events are processed (see bind).tbindtagsN(ttagListR R*R,RIR@Rk(R*R.((R R-ds &icCst|tjo|ii|||fn|o^|i||i |}d|odpd||i f}|ii|||f|Sn?|o|ii||fSn|ii|ii|SdS(sInternal function.s"%sif {"[%s %s]" == "break"} break t+R'N(RR~RR*R,R@twhattsequenceR=t _substitutet needcleanuptfuncidRt_subst_format_strRRI(R*R0R1R~RR3RR4((R t_bindps $cCs|id|if|||S(sOBind to this widget at event SEQUENCE a call to function FUNC. SEQUENCE is a string of concatenated event patterns. An event pattern is of the form where MODIFIER is one of Control, Mod2, M2, Shift, Mod3, M3, Lock, Mod4, M4, Button1, B1, Mod5, M5 Button2, B2, Meta, M, Button3, B3, Alt, Button4, B4, Double, Button5, B5 Triple, Mod1, M1. TYPE is one of Activate, Enter, Map, ButtonPress, Button, Expose, Motion, ButtonRelease FocusIn, MouseWheel, Circulate, FocusOut, Property, Colormap, Gravity Reparent, Configure, KeyPress, Key, Unmap, Deactivate, KeyRelease Visibility, Destroy, Leave and DETAIL is the button number for ButtonPress, ButtonRelease and DETAIL is the Keysym for KeyPress and KeyRelease. Examples are for pressing Control and mouse button 1 or for pressing A and the Alt key (KeyPress can be omitted). An event pattern can also be a virtual event of the form <> where AString can be arbitrary. This event can be generated by event_generate. If events are concatenated they must appear shortly after each other. FUNC will be called if the event sequence occurs with an instance of Event as argument. If the return value of FUNC is "break" no further bound function is invoked. An additional boolean parameter ADD specifies whether FUNC will be called additionally to the other bound function or whether it will replace the previous function. Bind will return an identifier to allow deletion of the bound function with unbind without memory leak. If FUNC or SEQUENCE is omitted the bound function or list of bound events are returned.tbindN(R*R6RkR1R~R(R*R1R~R((R R7s%cCs8|iid|i|d|o|i|ndS(sWUnbind for this widget for event SEQUENCE the function identified with FUNCID.R7R'N(R*R,R@RkR1R4RD(R*R1R4((R tunbindscCs|id|||dS(sBind to all widgets at an event SEQUENCE a call to function FUNC. An additional boolean parameter ADD specifies whether FUNC will be called additionally to the other bound function or whether it will replace the previous function. See bind for the return value.R7talliN(sbindsall(R*R6R1R~R(R*R1R~R((R tbind_allscCs|iidd|ddS(s8Unbind for all widgets for event SEQUENCE all functions.R7R9R'N(R*R,R@R1(R*R1((R t unbind_allscCs|id|f|||dS(s=Bind to widgets with bindtag CLASSNAME at event SEQUENCE a call of function FUNC. An additional boolean parameter ADD specifies whether FUNC will be called additionally to the other bound function or whether it will replace the previous function. See bind for the return value.R7iN(R*R6RR1R~R(R*RR1R~R((R t bind_classscCs|iid||ddS(sYUnbind for a all widgets with bindtag CLASSNAME for event SEQUENCE all functions.R7R'N(R*R,R@RR1(R*RR1((R t unbind_classscCs|ii|dS(sCall the mainloop of Tk.N(R*R,RXRY(R*RY((R RXscCs|iidS(s8Quit the Tcl interpreter. All widgets will be destroyed.N(R*R,tquit(R*((R R>scCs.|o#ttt|ii|SndS(sInternal function.N(RRRGRRR*R,RI(R*R((R RscCs.|o#ttt|ii|SndS(sInternal function.N(RRRGRTR*R,RI(R*R((R t _getdoublesscCs|o|ii|SndS(sInternal function.N(RR*R,RW(R*R((R t _getbooleanscCs7|od|fSn|djod|ifSnfS(sInternal function.s -displayofN(RR R*Rk(R*R((R Rs  cCs|ot||f}n t|}f}x~|iD]p\}}|dj oW|ddjo|d }nt|o|i |}n|d||f}q<q<W|S(sInternal function.it_t-N( RfRRRRRRR tcallableR*R=(R*RRfRRR((R Rs    cCs|}|ddjo|i}|d}nx^|oV|id}|djo|| ||d}}nd}|i|}|}q4W|S(sPReturn the Tkinter instance of a widget identified by its Tcl name NAME.it.iR'N(R*twR]t_roottfindtittailR(R*R]RHRIRE((R t nametowidgets    cCst|||i}tt|}y |i }Wnt j onXy||i }Wnt j onX|i i |||o1|idjo g|_n|ii|n|S(sReturn a newly created Tcl function. If this function is called, the Python function FUNC will be executed. An optional function SUBST can be given which will be executed before FUNC.N(t CallWrapperR~tsubstR*t__call__tfR.RR]tim_funcRRR,t createcommandR3R\R R(R*R~RLR3R]RN((R R=s"  cCs%|}x|io |i}q W|S(sInternal function.N(R*RER)(R*RE((R RFs  s%#s%bs%fs%hs%ks%ss%ts%ws%xs%ys%As%Es%Ks%Ns%Ws%Ts%Xs%Ys%Dt cGst|t|ijo|Sn|ii}t}d}|\}}}}}}}}}}}}}} } } } } }t}|||_|||_y|||_ Wnt!j onX|||_"|||_#|||_$|||_%|||_&|||_|||_||_'y|||_(Wnt!j onX||_)|| |_*| |_+y|i,| |_-Wnt.j o| |_-nX|| |_/|| |_0y|||_1Wnt2j od|_1nX|fS(sInternal function.cCs,yt|SWntj o |SnXdS(s?Tk changed behavior in 8.4.2, returning "??" rather more often.N(RQRZR`(RZ((R t getint_event$s iN(3tlenReR*t _subst_formatR,RWRQRRRRtnsigntbRNthRRZRRERR)tAtEtKtNtWtTtXtYtDRtetserialtnumRrRRtkeycodetstatettimeR&tchart send_eventtkeysymt keysym_numRRvtwidgetRtx_rootty_roottdeltaR`(R*ReRRRWRURXRYR`RZR[R]R\R_R^RVRaRNRWRRRRZRRER)R((R R2sP  ?    cCsIdk}|i|i|i}}}|i}|i |||dS(sInternal function.N( tsystexc_typet exc_valuet exc_tracebacktexctvalttbR*RFtroottreport_callback_exception(R*RsRtRuRoRv((R t_report_exceptionWs   cCs>|ot||f}n|ot|}n|djokh}xZ|ii|iit|i |fD]+}|ddf|d||ddsRzN(RGR*R,RHR@Rk(R*((R tkeys~s cCs|iS(s+Return the window path name of this widget.N(R*Rk(R*((R R6st_noarg_cCsV|tijo&|i|iidd|iSn|iidd|i|dS(sSet or get the status for propagation of geometry information. A boolean argument specifies whether the geometry information of the slaves will determine the size of this widget. If no argument is given the current setting will be returned. tpackt propagateN(tflagR[RR*R@R,R@Rk(R*R((R tpack_propagates&cCs1t|i|ii|iidd|iS(sHReturn a list of all slaves of this widget in its packing order.RtslavesN(RGR*RvR,RIR@Rk(R*((R t pack_slavess cCs1t|i|ii|iidd|iS(sHReturn a list of all slaves of this widget in its packing order.tplaceRN(RGR*RvR,RIR@Rk(R*((R t place_slavess cCsdd|if}|dj o!|dj o|||f}n|dj o!|dj o|||f}n|i|i i |pdS(sReturn a tuple of integer coordinates for the bounding box of this widget controlled by the geometry manager grid. If COLUMN, ROW is given the bounding box applies from the cell with row and column 0 to the specified cell. If COL2 and ROW2 are given the bounding box starts at that cell. The returned integers specify the offset of the upper left corner in the master widget and the width and height. tgridtbboxN( R*RkRetcolumnR trowtcol2trow2RR,R@(R*RRRRRe((R t grid_bboxs c Cst|tjoS| oK|ddjo|d }n|d djod|}n|f} n|i||} | p|iid||i |}|ii |} h} xtdt| dD]f}| |d}| |d}|p d }n*d|jot|}n t|}|| |     % cKs|id|||S(sConfigure column INDEX of a grid. Valid resources are minsize (minimum size of the column), weight (how much does additional space propagate to this column) and pad (how much space to let additionally).tcolumnconfigureN(R*RRRRf(R*RRRf((R tgrid_columnconfigurescCs/|i|iidd|i||pdS(sReturn a tuple of column and row which identify the cell at which the pixel at position X and Y inside the master widget is located.RtlocationN(R*RR,R@RkRR)R (R*RR)((R t grid_locationscCsV|tijo&|i|iidd|iSn|iidd|i|dS(sSet or get the status for propagation of geometry information. A boolean argument specifies whether the geometry information of the slaves will determine the size of this widget. If no argument is given, the current setting will be returned. RRN(RR[RR*R@R,R@Rk(R*R((R tgrid_propagates&cKs|id|||S(sConfigure row INDEX of a grid. Valid resources are minsize (minimum size of the row), weight (how much does additional space propagate to this row) and pad (how much space to let additionally).t rowconfigureN(R*RRRRf(R*RRRf((R tgrid_rowconfigurescCs)|i|iidd|ipdS(s<Return a tuple of the number of column and rows in the grid.RtsizeN(R*RR,R@RkR (R*((R t grid_sizescCsf}|dj o|d|f}n|dj o|d|f}nt|i|ii|ii dd|i f|S(sHReturn a list of all slaves of this widget in its packing order.s-rows-columnRRN( ReRR RRGR*RvR,RIR@Rk(R*RRRe((R t grid_slavess   cGs'dd|f|}|ii|dS(sBind a virtual event VIRTUAL (of the form <>) to an event SEQUENCE such that the virtual event is triggered whenever SEQUENCE occurs.teventRN(tvirtualt sequencesReR*R,R@(R*RRRe((R t event_addscGs'dd|f|}|ii|dS(s-Unbind a virtual event VIRTUAL from SEQUENCE.RtdeleteN(RRReR*R,R@(R*RRRe((R t event_deletescKs`dd|i|f}x4|iD]&\}}|d|t|f}q"W|i i |dS(sGenerate an event SEQUENCE. Additional keyword arguments specify parameter of the event (e.g. x, y, rootx, rooty).Rtgenerates-%sN( R*RkR1ReRfRRRRNR,R@(R*R1RfReRR((R tevent_generates  cCs"|ii|iidd|S(suReturn a list of all virtual events or the information about the SEQUENCE bound to the virtual event VIRTUAL.RRN(R*R,RIR@R(R*R((R t event_info&scCs|iiddS(s*Return a list of all existing image names.timagetnamesN(R*R,R@(R*((R t image_names.scCs|iiddS(s?Return a list of all available image types (e.g. phote bitmap).RttypesN(R*R,R@(R*((R t image_types2s(s%#s%bs%fs%hs%ks%ss%ts%ws%xs%ys%As%Es%Ks%Ns%Ws%Ts%Xs%Ys%D(RRRR R\R^RDRaRcRdRgRitwaitvarRlRnRpRqRQRRtfloatRTRWRsRrRtRwRxRyRzR{R|R}RRRRRRRRRRRRRRRRRRRRRRtliftRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR R RRRRRRRRR!R#R%R'R(R*RR,R-R6R7R8R:R;R<R=RXR>RR?R@RRRJRvR=tregisterRFRTtjoinR5R2RxRyRztconfigR{t __getitem__R}RR6RRRRRRRRRRRRRRRRRRRRRRRR(((R R[*sB                                                                                        (             9            "        RKcBs tZdZdZdZRS(swInternal class. Stores function to call when some user defined Tcl function is called e.g. after an event occurred.cCs||_||_||_dS(s(Store FUNC, SUBST and WIDGET as members.N(R~R*RLRk(R*R~RLRk((R R3:s  cGsfy.|io|i|}n|i|SWn1tj o}t|n|iinXdS(s3Apply first function SUBST to arguments, than FUNC.N(R*RLReR~R#RRkRx(R*ReR((R RM?s  (RRRR3RM(((R RK7s  tWmcBstZdZeeeedZeZdZeZedZeZ dZ e Z edZ e Z dZeZedZeZdZeZed ZeZeeeed ZeZed ZeZed ZeZd ZeZedZeZedZ e Z!eedZ"e"Z#edZ$e$Z%eedZ&e&Z'eedZ(e(Z)edZ*e*Z+edZ,e,Z-eedZ.e.Z/eedZ0e0Z1edZ2e2Z3edZ4e4Z5edZ6e6Z7edZ8e8Z9dZ:e:Z;RS(sAProvides functions for the communication with the window manager.c Cs.|i|iidd|i||||S(sInstruct the window manager to set the aspect ratio (width/height) of this widget to be between MINNUMER/MINDENOM and MAXNUMER/MAXDENOM. Return a tuple of the actual values if no argument is given.twmtaspectN( R*RR,R@RktminNumertminDenomtmaxNumertmaxDenom(R*RRRR((R t wm_aspectNscGs&dd|if|}|ii|S(sThis subcommand returns or sets platform specific attributes The first form returns a list of the platform specific flags and their values. The second form returns the value for the specific option. The third form sets one or more of the values. The values are as follows: On Windows, -disabled gets or sets whether the window is in a disabled state. -toolwindow gets or sets the style of the window to toolwindow (as defined in the MSDN). -topmost gets or sets whether this is a topmost window (displays above all other windows). On Macintosh, XXXXX On Unix, there are currently no special attribute values. Rt attributesN(R*RkReR,R@(R*Re((R t wm_attributesZscCs|iidd|i|S(sVStore NAME in WM_CLIENT_MACHINE property of this widget. Return current value.RtclientN(R*R,R@RkR](R*R]((R t wm_clientpscGsRt|djo |f}ndd|if|}t|i|ii|S(sStore list of window names (WLIST) into WM_COLORMAPWINDOWS property of this widget. This list contains windows whose colormaps differ from their parents. Return current list of widgets if WLIST is empty.iRtcolormapwindowsN( RStwlistR*RkReRGRvR,R@(R*RRe((R twm_colormapwindowsus  cCs|iidd|i|S(sStore VALUE in WM_COMMAND property. It is the command which shall be used to invoke the application. Return current command if VALUE is None.RRN(R*R,R@RkR8(R*R8((R t wm_command~scCs|iidd|iS(sDeiconify this widget. If it was never mapped it will not be mapped. On Windows it will raise this widget and give it the focus.Rt deiconifyN(R*R,R@Rk(R*((R t wm_deiconifyscCs|iidd|i|S(sSet focus model to MODEL. "active" means that this widget will claim the focus itself, "passive" means that the window manager shall give the focus. Return current focus model if MODEL is None.Rt focusmodelN(R*R,R@Rktmodel(R*R((R t wm_focusmodelscCs|iidd|iS(sAReturn identifier for decorative frame of this widget if present.RtframeN(R*R,R@Rk(R*((R twm_framescCs|iidd|i|S(siSet geometry to NEWGEOMETRY of the form =widthxheight+x+y. Return current value if None is given.RRN(R*R,R@Rkt newGeometry(R*R((R t wm_geometrysc Cs.|i|iidd|i||||S(sInstruct the window manager that this widget shall only be resized on grid boundaries. WIDTHINC and HEIGHTINC are the width and height of a grid unit in pixels. BASEWIDTH and BASEHEIGHT are the number of grid units requested in Tk_GeometryRequest.RRN( R*RR,R@Rkt baseWidtht baseHeighttwidthInct heightInc(R*RRRR((R twm_gridscCs|iidd|i|S(s~Set the group leader widgets for related widgets to PATHNAME. Return the group leader of this widget if None is given.RtgroupN(R*R,R@RktpathName(R*R((R twm_groupscCs|iidd|i|S(sZSet bitmap for the iconified widget to BITMAP. Return the bitmap if None is given.Rt iconbitmapN(R*R,R@Rktbitmap(R*R((R t wm_iconbitmapscCs|iidd|iS(sDisplay widget as icon.RticonifyN(R*R,R@Rk(R*((R t wm_iconifyscCs|iidd|i|S(sVSet mask for the icon bitmap of this widget. Return the mask if None is given.RticonmaskN(R*R,R@RkR(R*R((R t wm_iconmaskscCs|iidd|i|S(sSSet the name of the icon for this widget. Return the name if None is given.RticonnameN(R*R,R@RktnewName(R*R((R t wm_iconnamescCs(|i|iidd|i||S(sSet the position of the icon of this widget to X and Y. Return a tuple of the current values of X and X if None is given.Rt iconpositionN(R*RR,R@RkRR)(R*RR)((R twm_iconpositionscCs|iidd|i|S(sgSet widget PATHNAME to be displayed instead of icon. Return the current value if None is given.Rt iconwindowN(R*R,R@RkR(R*R((R t wm_iconwindowscCs(|i|iidd|i||S(sSet max WIDTH and HEIGHT for this widget. If the window is gridded the values are given in grid units. Return the current values if None is given.RtmaxsizeN(R*RR,R@RkR&R(R*R&R((R t wm_maxsizescCs(|i|iidd|i||S(sSet min WIDTH and HEIGHT for this widget. If the window is gridded the values are given in grid units. Return the current values if None is given.RtminsizeN(R*RR,R@RkR&R(R*R&R((R t wm_minsizescCs%|i|iidd|i|S(sInstruct the window manager to ignore this widget if BOOLEAN is given with 1. Return the current value if None is given.RtoverrideredirectN(R*R@R,R@RkRb(R*Rb((R twm_overrideredirectscCs|iidd|i|S(sInstruct the window manager that the position of this widget shall be defined by the user if WHO is "user", and by its own policy if WHO is "program".Rt positionfromN(R*R,R@Rktwho(R*R((R twm_positionfromscCsEt|o|i|}n|}|iidd|i||S(sBind function FUNC to command NAME for this widget. Return the function bound to NAME if None is given. NAME could be e.g. "WM_SAVE_YOURSELF" or "WM_DELETE_WINDOW".RtprotocolN( RCR~R*R=RR,R@RkR](R*R]R~R((R t wm_protocols  cCs|iidd|i||S(syInstruct the window manager whether this width can be resized in WIDTH or HEIGHT. Both values are boolean values.Rt resizableN(R*R,R@RkR&R(R*R&R((R t wm_resizablescCs|iidd|i|S(sInstruct the window manager that the size of this widget shall be defined by the user if WHO is "user", and by its own policy if WHO is "program".RtsizefromN(R*R,R@RkR(R*R((R t wm_sizefromscCs|iidd|i|S(sQuery or set the state of this widget as one of normal, icon, iconic (see wm_iconwindow), withdrawn, or zoomed (Windows only).RReN(R*R,R@Rktnewstate(R*R((R twm_statescCs|iidd|i|S(sSet the title of this widget.RttitleN(R*R,R@RkR(R*R((R twm_titlescCs|iidd|i|S(s_Instruct the window manager that this widget is transient with regard to widget MASTER.Rt transientN(R*R,R@RkR)(R*R)((R t wm_transientscCs|iidd|iS(sWithdraw this widget from the screen such that it is unmapped and forgotten by the window manager. Re-draw it with wm_deiconify.RtwithdrawN(R*R,R@Rk(R*((R t wm_withdraws(<RRRR RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRReRRRRRR(((R RKsr                         tTkcBsetZdZdZeedddedZdZdZdZd Z d Z d Z RS( syToplevel widget of Tk which represents mostly the main window of an appliation. It has an associated Tcl interpreter.RDRiic Csd|_h|_d|_d|_|djobdk}dk} | i i |i d}| i i |\}}|djo||}qnd} ti|||| t||||_|o|in|i||dS(s@Return a new Toplevel widget on screen SCREENNAME. A new Tcl interpreter will be created. BASENAME will be used for the identification of the profile file (see readprofile). It is constructed from sys.argv[0] without extensions if None is given. CLASSNAME is the name of the widget class.iNs.pys.pycs.pyo(s.pys.pycs.pyo(R R*R)Rt _tkloadedR,tbaseNameRotostpathtbasenametargvtsplitexttextt interactivet_tkintertcreatet screenNameRt wantobjectstuseTktsynctuset_loadtkt readprofile( R*RRRR R R RoRRR((R R3s       'cCs)|ip|ii|indS(N(R*RR,tloadtkR (R*((R R(s  cCssd|_to.ttdotidd|in|iid}|t i jot dt i |fnt |iid}|t ijot dt i|fntdjot d t tn|idjo g|_n|iid t|iid t|iid |iid tot o |an|id |idS( Nit SchedParamsit tk_versions4tk.h version (%s) doesn't match libtk.a version (%s)t tcl_versions6tcl.h version (%s) doesn't match libtcl.a version (%s)f4.0s)Tk 4.0 or higher is required; found Tk %sttkerrortexittWM_DELETE_WINDOW(R*Rt_MacOSthasattrRRR,RqRRt TK_VERSIONt RuntimeErrorRNRt TCL_VERSIONt TkVersionR\R RPR!R%RRRRR^(R*RR((R R ,s,    cCsix!|iiD]}|iqW|iid|iti|t ot |jo da ndS(shDestroy this and all descendants widgets. This will end the application of this Tcl interpreter.R^N( R*RtvaluesRR^R,R@RkR[RRR (R*R((R R^Qs c BsQdk}|iido|id}n |i}|ii|d|}|ii|d|}|ii|d|}|ii|d|}hd|<} d| U|ii|o|iid|n|ii|oe|| n|ii|o|iid|n|ii|oe|| ndS(sInternal function. It reads BASENAME.tcl and CLASSNAME.tcl into the Tcl Interpreter and calls execfile on BASENAME.py and CLASSNAME.py if such a file exists in the home directory.NtHOMEs.%s.tcls.%s.pyR*sfrom Tkinter import *tsource(RtenvironRthometcurdirRRRt class_tcltclass_pyRtbase_tcltbase_pyR*tdirtisfileR,R@texecfile( R*RRR#R$R"R!RRR%((R R Zs&  cCsTdk}dk}|iid||_||_||_ |i |||dS(s6Internal function. It reports exception on sys.stderr.NsException in Tkinter callback ( t tracebackRotstderrtwriteRst last_typeRtt last_valueRutlast_tracebacktprint_exception(R*RsRtRuR(Ro((R Rwos   cCst|i|S(s3Delegate attribute access to the interpreter objectN(tgetattrR*R,tattr(R*R0((R t __getattr__ws( RRRRkR R3RR R^R RwR1(((R R s   %  cCst||||S(N(RRRRR (RRRR ((R tTclstPackcBs`tZdZhdZeZZZdZeZdZ e Z e i Z Z e iZZRS(sQGeometry manager Pack. Base class to use the methods pack_* in every widget.cKs0|iidd|if|i||dS(sPack a widget in the parent widget. Use as options: after=widget - pack it after you have packed widget anchor=NSEW (or subset) - position widget according to given direction before=widget - pack it before you will pack widget expand=bool - expand widget if parent size grows fill=NONE or X or Y or BOTH - fill widget if widget grows in=master - use master to contain this widget ipadx=amount - add internal padding in x direction ipady=amount - add internal padding in y direction padx=amount - add padding in x direction pady=amount - add padding in y direction side=TOP or BOTTOM or LEFT or RIGHT - where to add this widget. RRzN(R*R,R@RkRRRf(R*RRf((R tpack_configurescCs|iidd|idS(s:Unmap this widget and do not use it for the packing order.RtforgetN(R*R,R@Rk(R*((R t pack_forgetscCs|ii|iidd|i}h}xjtdt|dD]P}||d}||d}|d djo|i |}n|||dgD]3}|i|o||||d <||=q q W|iidd|if|i||dS(sPlace a widget in the parent widget. Use as options: in=master - master relative to which the widget is placed. x=amount - locate anchor of this widget at position x of master y=amount - locate anchor of this widget at position y of master relx=amount - locate anchor of this widget between 0.0 and 1.0 relative to width of master (1.0 is right edge) rely=amount - locate anchor of this widget between 0.0 and 1.0 relative to height of master (1.0 is bottom edge) anchor=NSEW (or subset) - position anchor according to given direction width=amount - width of this widget in pixel height=amount - height of this widget in pixel relwidth=amount - width of this widget between 0.0 and 1.0 relative to width of master (1.0 is the same width as the master) relheight=amount - height of this widget between 0.0 and 1.0 relative to height of master (1.0 is the same height as the master) bordermode="inside" or "outside" - whether to take border width of master widget into account tin_iRRzN( RRfRR*R,R@RkRR(R*RRfR((R tplace_configures cCs|iidd|idS(sUnmap this widget.RR5N(R*R,R@Rk(R*((R t place_forgetscCs|ii|iidd|i}h}xjtdt|dD]P}||d}||d}|d djo|i |}n|||RRzRR[RRRRR?R5R@RARRRRRRRRRRR(((R R=s           t BaseWidgetcBs>tZdZdZhhfdZdZfdZRS(sInternal class.cCsto)|ptp tant}q0n||_|i|_d}|i do|d}|d=n|pt t |}n||_ |i djod||_ n|i d||_ h|_|iii |i o|ii|i in||ii|i d9Z?d:Z@d;ZAd<ZBd=ZCd>ZDd?ZERS(@s?Canvas widget to display graphical elements like lines or text.cKsti||d||dS(sConstruct a canvas widget with the parent MASTER. Valid resource names: background, bd, bg, borderwidth, closeenough, confine, cursor, height, highlightbackground, highlightcolor, highlightthickness, insertbackground, insertborderwidth, insertofftime, insertontime, insertwidth, offset, relief, scrollregion, selectbackground, selectborderwidth, selectforeground, state, takefocus, width, xscrollcommand, xscrollincrement, yscrollcommand, yscrollincrement.tcanvasN(RIR3R*R)RRf(R*R)RRf((R R3s cGs!|ii|idf|dS(sInternal function.taddtagN(R*R,R@RkRe(R*Re((R RcscCs|i|d|dS(s*Add tag NEWTAG to all items above TAGORID.taboveN(R*RctnewtagttagOrId(R*ReRf((R t addtag_abovescCs|i|ddS(sAdd tag NEWTAG to all items.R9N(R*RcRe(R*Re((R t addtag_allscCs|i|d|dS(s*Add tag NEWTAG to all items below TAGORID.tbelowN(R*RcReRf(R*ReRf((R t addtag_belowscCs |i|d||||dS(sAdd tag NEWTAG to item which is closest to pixel at X, Y. If several match take the top-most. All items closer than HALO are considered overlapping (all are closests). If START is specified the next below this tag is taken.tclosestN(R*RcReRR)thalotstart(R*ReRR)RlRm((R taddtag_closestscCs |i|d||||dS(sLAdd tag NEWTAG to all items in the rectangle defined by X1,Y1,X2,Y2.tenclosedN(R*RcRetx1ty1tx2ty2(R*ReRpRqRrRs((R taddtag_enclosedscCs |i|d||||dS(sWAdd tag NEWTAG to all items which overlap the rectangle defined by X1,Y1,X2,Y2.t overlappingN(R*RcReRpRqRrRs(R*ReRpRqRrRs((R taddtag_overlappingscCs|i|d|dS(s)Add tag NEWTAG to all items with TAGORID.twithtagN(R*RcReRf(R*ReRf((R taddtag_withtagscGs-|i|ii|idf|pdS(s|Return a tuple of X1,Y1,X2,Y2 coordinates for a rectangle which encloses all items with tags specified as arguments.RN(R*RR,R@RkReR (R*Re((R RscCs;|ii|id||d|o|i|ndS(sbUnbind for all items with TAGORID for event SEQUENCE the function identified with FUNCID.R7R'N(R*R,R@RkRfR1R4RD(R*RfR1R4((R t tag_unbindscCs"|i|id|f|||S(s&Bind to all items with TAGORID at event SEQUENCE a call to function FUNC. An additional boolean parameter ADD specifies whether FUNC will be called additionally to the other bound function or whether it will replace the previous function. See bind for the return value.R7N(R*R6RkRfR1R~R(R*RfR1R~R((R ttag_bindscCs"t|ii|id||S(srReturn the canvas x coordinate of pixel position SCREENX rounded to nearest multiple of GRIDSPACING units.tcanvasxN(RTR*R,R@Rktscreenxt gridspacing(R*R|R}((R R{scCs"t|ii|id||S(srReturn the canvas y coordinate of pixel position SCREENY rounded to nearest multiple of GRIDSPACING units.tcanvasyN(RTR*R,R@RktscreenyR}(R*RR}((R R~ scGs2tt|ii|ii|idf|S(s8Return a list of coordinates for the item given in ARGS.tcoordsN(RGRTR*R,RIR@RkRe(R*Re((R Rsc Csut|}|d}t|ttfjo|d }nh}t|ii |i d|||i ||S(sInternal function.iRN(RReRRR RRRR*R,R@RktitemTypeRRf(R*RReRfR((R t_creates  cOs|id||S(s6Create arc shaped region with coordinates x1,y1,x2,y2.tarcN(R*RReRf(R*ReRf((R t create_arc"scOs|id||S(s%Create bitmap with coordinates x1,y1.RN(R*RReRf(R*ReRf((R t create_bitmap%scOs|id||S(s)Create image item with coordinates x1,y1.RN(R*RReRf(R*ReRf((R t create_image(scOs|id||S(s-Create line with coordinates x1,y1,...,xn,yn.tlineN(R*RReRf(R*ReRf((R t create_line+scOs|id||S(s)Create oval with coordinates x1,y1,x2,y2.tovalN(R*RReRf(R*ReRf((R t create_oval.scOs|id||S(s0Create polygon with coordinates x1,y1,...,xn,yn.tpolygonN(R*RReRf(R*ReRf((R tcreate_polygon1scOs|id||S(s.Create rectangle with coordinates x1,y1,x2,y2.t rectangleN(R*RReRf(R*ReRf((R tcreate_rectangle4scOs|id||S(s#Create text with coordinates x1,y1.ttextN(R*RReRf(R*ReRf((R t create_text7scOs|id||S(s+Create window with coordinates x1,y1,x2,y2.RjN(R*RReRf(R*ReRf((R t create_window:scGs!|ii|idf|dS(sDelete characters of text items identified by tag or id in ARGS (possibly several times) from FIRST to LAST character (including).tdcharsN(R*R,R@RkRe(R*Re((R R=scGs!|ii|idf|dS(s<Delete items identified by all tag or ids contained in ARGS.RN(R*R,R@RkRe(R*Re((R RAscGs!|ii|idf|dS(siDelete tag or id given as last arguments in ARGS from items identified by first argument in ARGS.tdtagN(R*R,R@RkRe(R*Re((R RDscGs-|i|ii|idf|pfS(sInternal function.RGN(R*RR,R@RkRe(R*Re((R RGHscCs|id|S(sReturn items above TAGORID.RdN(R*RGRf(R*Rf((R t find_aboveLscCs |idS(sReturn all items.R9N(R*RG(R*((R tfind_allOscCs|id|S(sReturn all items below TAGORID.RiN(R*RGRf(R*Rf((R t find_belowRscCs|id||||S(sReturn item which is closest to pixel at X, Y. If several match take the top-most. All items closer than HALO are considered overlapping (all are closests). If START is specified the next below this tag is taken.RkN(R*RGRR)RlRm(R*RR)RlRm((R t find_closestUscCs|id||||S(s=Return all items in rectangle defined by X1,Y1,X2,Y2.RoN(R*RGRpRqRrRs(R*RpRqRrRs((R t find_enclosed[scCs|id||||S(sLReturn all items which overlap the rectangle defined by X1,Y1,X2,Y2.RuN(R*RGRpRqRrRs(R*RpRqRrRs((R tfind_overlapping_scCs|id|S(sReturn all items with TAGORID.RwN(R*RGRf(R*Rf((R t find_withtagcscGs|ii|idf|S(s.Set focus to the first item specified in ARGS.RrN(R*R,R@RkRe(R*Re((R RrfscGs)|ii|ii|idf|S(s=Return tags associated with the first item specified in ARGS.tgettagsN(R*R,RIR@RkRe(R*Re((R RiscGs!|ii|idf|dS(sdSet cursor at position POS in the item identified by TAGORID. In ARGS TAGORID must be first.ticursorN(R*R,R@RkRe(R*Re((R RmscGs#t|ii|idf|S(s?Return position of cursor as integer in item specified in ARGS.RN(RRR*R,R@RkRe(R*Re((R RqscGs!|ii|idf|dS(sSInsert TEXT in item TAGORID at position POS. ARGS must be TAGORID POS TEXT.R[N(R*R,R@RkRe(R*Re((R R[tscCs'|ii|idf|d|fS(s9Return the resource value for an OPTION for item TAGORID.titemcgetRBN(R*R,R@RkRfR(R*RfR((R RxscKs|id|f||S(sConfigure resources of an item TAGORID. The values for resources are specified as keyword arguments. To get an overview about the allowed keyword arguments call the method without arguments. t itemconfigureN(R*RyRfRRf(R*RfRRf((R R|scGs!|ii|idf|dS(sJLower an item TAGORID given in ARGS (optional below another item).RN(R*R,R@RkRe(R*Re((R t tag_lowerscGs!|ii|idf|dS(s#Move an item TAGORID given in ARGS.tmoveN(R*R,R@RkRe(R*Re((R RscKs)|ii|idf|i||S(sPrint the contents of the canvas to a postscript file. Valid options: colormap, colormode, file, fontmap, height, pageanchor, pageheight, pagewidth, pagex, pagey, rotate, witdh, x, y.t postscriptN(R*R,R@RkRRRf(R*RRf((R RscGs!|ii|idf|dS(sJRaise an item TAGORID given in ARGS (optional above another item).RN(R*R,R@RkRe(R*Re((R t tag_raisescGs!|ii|idf|dS(s9Scale item TAGORID with XORIGIN, YORIGIN, XSCALE, YSCALE.tscaleN(R*R,R@RkRe(R*Re((R RscCs#|ii|idd||dS(s&Remember the current X, Y coordinates.tscantmarkN(R*R,R@RkRR)(R*RR)((R t scan_marksi cCs&|ii|idd|||dS(sAdjust the view of the canvas to GAIN times the difference between X and Y and the coordinates given in scan_mark.RtdragtoN(R*R,R@RkRR)tgain(R*RR)R((R t scan_dragtoscCs#|ii|idd||dS(sLAdjust the end of the selection near the cursor of an item TAGORID to index.tselecttadjustN(R*R,R@RkRfR(R*RfR((R t select_adjustscCs|ii|idddS(s,Clear the selection if it is in this widget.RRN(R*R,R@Rk(R*((R t select_clearscCs#|ii|idd||dS(s:Set the fixed end of a selection in item TAGORID to INDEX.RtfromN(R*R,R@RkRfR(R*RfR((R t select_fromscCs |ii|iddpdS(s(Return the item which has the selection.RRN(R*R,R@RkR (R*((R t select_itemscCs#|ii|idd||dS(s=Set the variable end of a selection in item TAGORID to INDEX.RttoN(R*R,R@RkRfR(R*RfR((R t select_toscCs |ii|id|pdS(s$Return the type of the item TAGORID.RN(R*R,R@RkRfR (R*Rf((R RscGsK|p#|i|ii|idSn|ii|idf|dS(s1Query and change horizontal position of the view.txviewN(ReR*R?R,R@Rk(R*Re((R Rs#cCs |ii|idd|dS(ssAdjusts the view in the window so that FRACTION of the total width of the canvas is off-screen to the left.RtmovetoN(R*R,R@Rktfraction(R*R((R t xview_movetoscCs#|ii|idd||dS(sTShift the x-view according to NUMBER which is measured in "units" or "pages" (WHAT).RtscrollN(R*R,R@RkRR0(R*RR0((R t xview_scrollscGsK|p#|i|ii|idSn|ii|idf|dS(s/Query and change vertical position of the view.tyviewN(ReR*R?R,R@Rk(R*Re((R Rs#cCs |ii|idd|dS(ssAdjusts the view in the window so that FRACTION of the total height of the canvas is off-screen to the top.RRN(R*R,R@RkR(R*R((R t yview_movetoscCs#|ii|idd||dS(sTShift the y-view according to NUMBER which is measured in "units" or "pages" (WHAT).RRN(R*R,R@RkRR0(R*RR0((R t yview_scrolls(FRRRR R3RcRgRhRjRnRtRvRxRRyRzR{R~RRRRRRRRRRRRRRRGRRRRRRRRrRRRR[RRt itemconfigRRRRRRRRRRRRRRRRRRRRRR(((R Ras                                                          t CheckbuttoncBsJtZdZehdZdZdZdZdZdZ RS(s7Checkbutton widget which is either in on- or off-state.cKsti||d||dS(sConstruct a checkbutton widget with the parent MASTER. Valid resource names: activebackground, activeforeground, anchor, background, bd, bg, bitmap, borderwidth, command, cursor, disabledforeground, fg, font, foreground, height, highlightbackground, highlightcolor, highlightthickness, image, indicatoron, justify, offvalue, onvalue, padx, pady, relief, selectcolor, selectimage, state, takefocus, text, textvariable, underline, variable, width, wraplength.t checkbuttonN(RIR3R*R)RRf(R*R)RRf((R R3s cCs|ii|iddS(sPut the button in off-state.tdeselectN(R*R,R@Rk(R*((R RscCs|ii|iddS(sFlash the button.RWN(R*R,R@Rk(R*((R RWscCs|ii|idS(s<Toggle the button and invoke a command if given as resource.RXN(R*R,R@Rk(R*((R RXscCs|ii|iddS(sPut the button in on-state.RN(R*R,R@Rk(R*((R RscCs|ii|iddS(sToggle the button.ttoggleN(R*R,R@Rk(R*((R Rs( RRRR R3RRWRXRR(((R Rs     tEntrycBstZdZehdZedZdZdZdZdZ dZ dZ d Z e Z d ZeZd ZeZd ZeZd ZeZdZeZdZdZdZRS(s1Entry widget which allows to display simple text.cKsti||d||dS(sConstruct an entry widget with the parent MASTER. Valid resource names: background, bd, bg, borderwidth, cursor, exportselection, fg, font, foreground, highlightbackground, highlightcolor, highlightthickness, insertbackground, insertborderwidth, insertofftime, insertontime, insertwidth, invalidcommand, invcmd, justify, relief, selectbackground, selectborderwidth, selectforeground, show, state, takefocus, textvariable, validate, validatecommand, vcmd, width, xscrollcommand.tentryN(RIR3R*R)RRf(R*R)RRf((R R3s cCs |ii|id||dS(s.Delete text from FIRST to LAST (not included).RN(R*R,R@Rktfirsttlast(R*RR((R RscCs|ii|idS(sReturn the text.R:N(R*R,R@Rk(R*((R R: scCs|ii|id|dS(sInsert cursor at INDEX.RN(R*R,R@RkR(R*R((R R scCst|ii|id|S(sReturn position of cursor.RN(RRR*R,R@RkR(R*R((R R scCs |ii|id||dS(sInsert STRING at INDEX.R[N(R*R,R@RkRR(R*RR((R R[ scCs |ii|idd|dS(s&Remember the current X, Y coordinates.RRN(R*R,R@RkR(R*R((R R scCs |ii|idd|dS(sAdjust the view of the canvas to 10 times the difference between X and Y and the coordinates given in scan_mark.RRN(R*R,R@RkR(R*R((R R scCs |ii|idd|dS(s9Adjust the end of the selection near the cursor to INDEX.RRN(R*R,R@RkR(R*R((R tselection_adjust scCs|ii|idddS(s,Clear the selection if it is in this widget.RRN(R*R,R@Rk(R*((R R scCs |ii|idd|dS(s*Set the fixed end of a selection to INDEX.RRN(R*R,R@RkR(R*R((R tselection_from scCs%|ii|ii|iddS(s,Return whether the widget has the selection.RtpresentN(R*R,RWR@Rk(R*((R tselection_present" scCs#|ii|idd||dS(s3Set the selection from START to END (not included).RRN(R*R,R@RkRmRY(R*RmRY((R tselection_range' scCs |ii|idd|dS(s-Set the variable end of a selection to INDEX.RRN(R*R,R@RkR(R*R((R t selection_to+ scCs|ii|id|dS(s1Query and change horizontal position of the view.RN(R*R,R@RkR(R*R((R R/ scCs |ii|idd|dS(sqAdjust the view in the window so that FRACTION of the total width of the entry is off-screen to the left.RRN(R*R,R@RkR(R*R((R R2 scCs#|ii|idd||dS(sTShift the x-view according to NUMBER which is measured in "units" or "pages" (WHAT).RRN(R*R,R@RkRR0(R*RR0((R R6 s(RRRR R3RR:RRR[RRRRRRRRRtselect_presentRt select_rangeRRRRR(((R Rs0                tFramecBstZdZehdZRS(sFFrame widget which may contain other widgets and can have a 3D border.cKst||f}f}|idod|df}|d=n,|idod|df}|d=nti||d|h|dS(sConstruct a frame widget with the parent MASTER. Valid resource names: background, bd, bg, borderwidth, class, colormap, container, cursor, height, highlightbackground, highlightcolor, highlightthickness, relief, takefocus, visual, width.RKs-classRRN( RRRfRGRRIR3R*R)(R*R)RRfRG((R R3< s  (RRRR R3(((R R: s tLabelcBstZdZehdZRS(s0Label widget which can display text and bitmaps.cKsti||d||dS(sConstruct a label widget with the parent MASTER. STANDARD OPTIONS activebackground, activeforeground, anchor, background, bitmap, borderwidth, cursor, disabledforeground, font, foreground, highlightbackground, highlightcolor, highlightthickness, image, justify, padx, pady, relief, takefocus, text, textvariable, underline, wraplength WIDGET-SPECIFIC OPTIONS height, state, width tlabelN(RIR3R*R)RRf(R*R)RRf((R R3N s(RRRR R3(((R RL s tListboxcBs"tZdZehdZdZdZdZedZedZ dZ dZ d Z d Z d Zd Zd ZeZedZeZdZeZedZeZdZdZdZdZdZdZdZdZedZ e Z!RS(s3Listbox widget which can display a list of strings.cKsti||d||dS(sConstruct a listbox widget with the parent MASTER. Valid resource names: background, bd, bg, borderwidth, cursor, exportselection, fg, font, foreground, height, highlightbackground, highlightcolor, highlightthickness, relief, selectbackground, selectborderwidth, selectforeground, selectmode, setgrid, takefocus, width, xscrollcommand, yscrollcommand, listvariable.tlistboxN(RIR3R*R)RRf(R*R)RRf((R R3d scCs|ii|id|dS(s"Activate item identified by INDEX.tactivateN(R*R,R@RkR(R*R((R Rm scGs-|i|ii|idf|pdS(svReturn a tuple of X1,Y1,X2,Y2 coordinates for a rectangle which encloses the item identified by index in ARGS.RN(R*RR,R@RkReR (R*Re((R Rp scCs"|ii|ii|idS(s2Return list of indices of currently selected item.t curselectionN(R*R,RIR@Rk(R*((R Ru scCs |ii|id||dS(s/Delete items from FIRST to LAST (not included).RN(R*R,R@RkRR(R*RR((R Rz scCsP|o,|ii|ii|id||Sn|ii|id|SdS(s4Get list of items from FIRST to LAST (not included).R:N(RR*R,RIR@RkR(R*RR((R R:} s,cCs:|ii|id|}|djodSnt|S(s+Return index of item identified with INDEX.RRuN(R*R,R@RkRRHR RR(R*RRH((R R s  cGs$|ii|id|f|dS(sInsert ELEMENTS at INDEX.R[N(R*R,R@RkRtelements(R*RR((R R[ scCst|ii|id|S(s5Get index of item which is nearest to y coordinate Y.tnearestN(RRR*R,R@RkR)(R*R)((R R scCs#|ii|idd||dS(s&Remember the current X, Y coordinates.RRN(R*R,R@RkRR)(R*RR)((R R scCs#|ii|idd||dS(sAdjust the view of the listbox to 10 times the difference between X and Y and the coordinates given in scan_mark.RRN(R*R,R@RkRR)(R*RR)((R R scCs|ii|id|dS(s"Scroll such that INDEX is visible.tseeN(R*R,R@RkR(R*R((R R scCs |ii|idd|dS(s-Set the fixed end oft the selection to INDEX.RtanchorN(R*R,R@RkR(R*R((R tselection_anchor scCs#|ii|idd||dS(s6Clear the selection from FIRST to LAST (not included).RRN(R*R,R@RkRR(R*RR((R R scCs(|ii|ii|idd|S(s+Return 1 if INDEX is part of the selection.RtincludesN(R*R,RWR@RkR(R*R((R tselection_includes scCs#|ii|idd||dS(smSet the selection from FIRST to LAST (not included) without changing the currently selected elements.RR1N(R*R,R@RkRR(R*RR((R t selection_set scCst|ii|idS(s-Return the number of elements in the listbox.RN(RRR*R,R@Rk(R*((R R scGsK|p#|i|ii|idSn|ii|idf|dS(s1Query and change horizontal position of the view.RN(R0R*R?R,R@Rk(R*R0((R R s#cCs |ii|idd|dS(sqAdjust the view in the window so that FRACTION of the total width of the entry is off-screen to the left.RRN(R*R,R@RkR(R*R((R R scCs#|ii|idd||dS(sTShift the x-view according to NUMBER which is measured in "units" or "pages" (WHAT).RRN(R*R,R@RkRR0(R*RR0((R R scGsK|p#|i|ii|idSn|ii|idf|dS(s/Query and change vertical position of the view.RN(R0R*R?R,R@Rk(R*R0((R R s#cCs |ii|idd|dS(spAdjust the view in the window so that FRACTION of the total width of the entry is off-screen to the top.RRN(R*R,R@RkR(R*R((R R scCs#|ii|idd||dS(sTShift the y-view according to NUMBER which is measured in "units" or "pages" (WHAT).RRN(R*R,R@RkRR0(R*RR0((R R scCs'|ii|idf|d|fS(s4Return the resource value for an ITEM and an OPTION.RRBN(R*R,R@RkRR(R*RR((R R scKs|id|f||S(s9Configure resources of an ITEM. The values for resources are specified as keyword arguments. To get an overview about the allowed keyword arguments call the method without arguments. Valid resource names: background, bg, foreground, fg, selectbackground, selectforeground.RN(R*RyRRRf(R*RRRf((R R s("RRRR R3RRRRR:RR[RRRRRt select_anchorRRRtselect_includesRt select_setRRRRRRRRRR(((R Rb s>                         tMenucBstZdZehdZdZdZdZdZdZ dZ dZ d Z d Z d Zd Zd dZdZhdZhdZhdZhdZhdZhdZhdZhdZhdZhdZhdZhdZedZdZedZ e Z!dZ"d Z#d!Z$d"Z%d#Z&d$Z'RS(%sPMenu widget which allows to display menu bars, pull-down menus and pop-up menus.cKsti||d||dS(sAConstruct menu widget with the parent MASTER. Valid resource names: activebackground, activeborderwidth, activeforeground, background, bd, bg, borderwidth, cursor, disabledforeground, fg, font, foreground, postcommand, relief, selectcolor, takefocus, tearoff, tearoffcommand, title, type.tmenuN(RIR3R*R)RRf(R*R)RRf((R R3 scCsdS(N((R*((R ttk_bindForTraversal scCs|iid|idS(Nt tk_mbPost(R*R,R@Rk(R*((R R scCs|iiddS(Nt tk_mbUnpost(R*R,R@(R*((R R scCs|iid|i|dS(Nttk_traverseToMenu(R*R,R@RkRg(R*Rg((R R scCs|iid|i|dS(Nttk_traverseWithinMenu(R*R,R@RkRg(R*Rg((R R scCs|iid|iS(Nttk_getMenuButtons(R*R,R@Rk(R*((R R scCs|iid|dS(Nt tk_nextMenu(R*R,R@tcount(R*R((R R scCs|iid|dS(Nttk_nextMenuEntry(R*R,R@R(R*R((R R scCs|iid|idS(Nt tk_invokeMenu(R*R,R@Rk(R*((R R scCs|iid|idS(Nt tk_firstMenu(R*R,R@Rk(R*((R R scCs|iid|idS(Nttk_mbButtonDown(R*R,R@Rk(R*((R R sR'cCs#|iid|i|||dS(s/Post the menu at position X,Y with entry ENTRY.ttk_popupN(R*R,R@RkRR)R(R*RR)R((R R scCs|ii|id|dS(sActivate entry at INDEX.RN(R*R,R@RkR(R*R((R R scKs0|ii|id|f|i||dS(sInternal function.RN(R*R,R@RkRRRRf(R*RRRf((R R scKs|id|p|dS(sAdd hierarchical menu item.tcascadeN(R*RRRf(R*RRf((R t add_cascade scKs|id|p|dS(sAdd checkbutton menu item.RN(R*RRRf(R*RRf((R tadd_checkbutton scKs|id|p|dS(sAdd command menu item.RN(R*RRRf(R*RRf((R t add_command scKs|id|p|dS(sAddd radio menu item.t radiobuttonN(R*RRRf(R*RRf((R tadd_radiobutton scKs|id|p|dS(sAdd separator.t separatorN(R*RRRf(R*RRf((R t add_separator scKs3|ii|id||f|i||dS(sInternal function.R[N( R*R,R@RkRRRRRf(R*RRRRf((R R[ scKs|i|d|p|dS(s$Add hierarchical menu item at INDEX.RN(R*R[RRRf(R*RRRf((R tinsert_cascade scKs|i|d|p|dS(s#Add checkbutton menu item at INDEX.RN(R*R[RRRf(R*RRRf((R tinsert_checkbutton scKs|i|d|p|dS(sAdd command menu item at INDEX.RN(R*R[RRRf(R*RRRf((R tinsert_command scKs|i|d|p|dS(sAddd radio menu item at INDEX.RN(R*R[RRRf(R*RRRf((R tinsert_radiobutton scKs|i|d|p|dS(sAdd separator at INDEX.RN(R*R[RRRf(R*RRRf((R tinsert_separator! scCs |ii|id||dS(s;Delete menu items between INDEX1 and INDEX2 (not included).RN(R*R,R@Rktindex1tindex2(R*RR((R R$ scCs |ii|id|d|S(s>Return the resource value of an menu item for OPTION at INDEX.t entrycgetRBN(R*R,R@RkRR(R*RR((R R' scKs|id|f||S(sConfigure a menu item at INDEX.tentryconfigureN(R*RyRRRf(R*RRRf((R R* scCs:|ii|id|}|djodSnt|S(s4Return the index of a menu item identified by INDEX.RRuN(R*R,R@RkRRHR RR(R*RRH((R R. s  cCs|ii|id|S(sRInvoke a menu item identified by INDEX and execute the associated command.RXN(R*R,R@RkR(R*R((R RX3 scCs |ii|id||dS(sDisplay a menu at position X,Y.tpostN(R*R,R@RkRR)(R*RR)((R R7 scCs|ii|id|S(s*Return the type of the menu item at INDEX.RN(R*R,R@RkR(R*R((R R: scCs|ii|iddS(s Unmap a menu.tunpostN(R*R,R@Rk(R*((R R= scCst|ii|id|S(sEReturn the y-position of the topmost pixel of the menu item at INDEX.t ypositionN(RRR*R,R@RkR(R*R((R R@ s((RRRR R3RRRRRRRRRRRRRRRRRRRR[RRRRRRRRt entryconfigRRXRRRR(((R R sJ                                  t MenubuttoncBstZdZehdZRS(s(Menubutton widget, obsolete since Tk8.0.cKsti||d||dS(Nt menubutton(RIR3R*R)RRf(R*R)RRf((R R3G s(RRRR R3(((R RE s tMessagecBstZdZehdZRS(sKMessage widget to display multiline text. Obsolete since Label does it too.cKsti||d||dS(Ntmessage(RIR3R*R)RRf(R*R)RRf((R R3L s(RRRR R3(((R RJ s t RadiobuttoncBsAtZdZehdZdZdZdZdZRS(sGRadiobutton widget which shows only one of several buttons in on-state.cKsti||d||dS(sConstruct a radiobutton widget with the parent MASTER. Valid resource names: activebackground, activeforeground, anchor, background, bd, bg, bitmap, borderwidth, command, cursor, disabledforeground, fg, font, foreground, height, highlightbackground, highlightcolor, highlightthickness, image, indicatoron, justify, padx, pady, relief, selectcolor, selectimage, state, takefocus, text, textvariable, underline, value, variable, width, wraplength.RN(RIR3R*R)RRf(R*R)RRf((R R3Q s cCs|ii|iddS(sPut the button in off-state.RN(R*R,R@Rk(R*((R R\ scCs|ii|iddS(sFlash the button.RWN(R*R,R@Rk(R*((R RW` scCs|ii|idS(s<Toggle the button and invoke a command if given as resource.RXN(R*R,R@Rk(R*((R RXc scCs|ii|iddS(sPut the button in on-state.RN(R*R,R@Rk(R*((R Rf s( RRRR R3RRWRXR(((R RO s    tScalecBsDtZdZehdZdZdZedZdZRS(s1Scale widget which can display a numerical scale.cKsti||d||dS(sConstruct a scale widget with the parent MASTER. Valid resource names: activebackground, background, bigincrement, bd, bg, borderwidth, command, cursor, digits, fg, font, foreground, from, highlightbackground, highlightcolor, highlightthickness, label, length, orient, relief, repeatdelay, repeatinterval, resolution, showvalue, sliderlength, sliderrelief, state, takefocus, tickinterval, to, troughcolor, variable, width.RN(RIR3R*R)RRf(R*R)RRf((R R3l scCsJ|ii|id}yt|SWntj ot|SnXdS(s*Get the current value as integer or float.R:N(R*R,R@RkR8RRR`RT(R*R8((R R:v s cCs|ii|id|dS(sSet the value to VALUE.R1N(R*R,R@RkR8(R*R8((R R1} scCs"|i|ii|id|S(sReturn a tuple (X,Y) of the point along the centerline of the trough that corresponds to VALUE or the current value if None is given.RN(R*RR,R@RkR8(R*R8((R R scCs|ii|id||S(scReturn where the point X,Y lies. Valid return values are "slider", "though1" and "though2".tidentifyN(R*R,R@RkRR)(R*RR)((R R  s( RRRR R3R:R1RR (((R Rj s    t ScrollbarcBsStZdZehdZdZdZdZdZdZ dZ RS(s?Scrollbar widget which displays a slider at a certain position.cKsti||d||dS(slConstruct a scrollbar widget with the parent MASTER. Valid resource names: activebackground, activerelief, background, bd, bg, borderwidth, command, cursor, elementborderwidth, highlightbackground, highlightcolor, highlightthickness, jump, orient, relief, repeatdelay, repeatinterval, takefocus, troughcolor, width.t scrollbarN(RIR3R*R)RRf(R*R)RRf((R R3 scCs|ii|id|dS(sxDisplay the element at INDEX with activebackground and activerelief. INDEX can be "arrow1","slider" or "arrow2".RN(R*R,R@RkR(R*R((R R scCs"t|ii|id||S(snReturn the fractional change of the scrollbar setting if it would be moved by DELTAX or DELTAY pixels.RnN(RTR*R,R@Rktdeltaxtdeltay(R*R R ((R Rn scCs"t|ii|id||S(sRReturn the fractional value which corresponds to a slider position of X,Y.RN(RTR*R,R@RkRR)(R*RR)((R R scCs|ii|id||S(sYReturn the element under position X,Y as one of "arrow1","slider","arrow2" or "".R N(R*R,R@RkRR)(R*RR)((R R  scCs|i|ii|idS(sZReturn the current fractional values (upper and lower end) of the slider position.R:N(R*R?R,R@Rk(R*((R R: scGs!|ii|idf|dS(siSet the fractional values of the slider position (upper and lower ends as value between 0 and 1).R1N(R*R,R@RkRe(R*Re((R R1 s( RRRR R3RRnRR R:R1(((R R  s      tTextcBs{tZdZehdZdZdZdZdZdZ dZ edZ ed Z d Z eed Zd Zed ZdZdZdZdZedZdZedZhdZdZdZdZedZdZdZdZdZ dZ!dZ"d Z#eeeeeeed!Z$d"Z%d#Z&ed$Z'ed%Z(d&Z)ed'Z*e*Z+d(Z,ed)Z-ed*Z.ed+Z/ed,Z0ed-Z1d.Z2ed/Z3d0Z4ed1Z5e5Z6hd2Z7d3Z8d4Z9d5Z:d6Z;d7Z<d8Z=d9Z>d:Z?RS(;s4Text widget which can display text in various forms.cKsti||d||dS(sConstruct a text widget with the parent MASTER. STANDARD OPTIONS background, borderwidth, cursor, exportselection, font, foreground, highlightbackground, highlightcolor, highlightthickness, insertbackground, insertborderwidth, insertofftime, insertontime, insertwidth, padx, pady, relief, selectbackground, selectborderwidth, selectforeground, setgrid, takefocus, xscrollcommand, yscrollcommand, WIDGET-SPECIFIC OPTIONS autoseparators, height, maxundo, spacing1, spacing2, spacing3, state, tabs, undo, width, wrap, RN(RIR3R*R)RRf(R*R)RRf((R R3 scGs-|i|ii|idf|pdS(sReturn a tuple of (x,y,width,height) which gives the bounding box of the visible part of the character at the index in ARGS.RN(R*RR,R@RkReR (R*Re((R R scCs|iid|i|dS(Nttk_textSelectTo(R*R,R@RkR(R*R((R R scCs|iid|idS(Nttk_textBackspace(R*R,R@Rk(R*((R R scCs#|iid|i|||dS(Nttk_textIndexCloser(R*R,R@RkR\RVR(R*R\RVR((R R scCs|iid|i|dS(Nttk_textResetAnchor(R*R,R@RkR(R*R((R R scCs+|ii|ii|id|||S(sReturn whether between index INDEX1 and index INDEX2 the relation OP is satisfied. OP is one of <, <=, ==, >=, >, or !=.tcompareN(R*R,RWR@RkRtopR(R*RRR((R R scCs%|ii|ii|id|S(sjTurn on the internal consistency checks of the B-Tree inside the text widget according to BOOLEAN.tdebugN(R*R,RWR@RkRb(R*Rb((R R scCs |ii|id||dS(s?Delete the characters between INDEX1 and INDEX2 (not included).RN(R*R,R@RkRR(R*RR((R R scCs"|i|ii|id|S(sReturn tuple (x,y,width,height,baseline) giving the bounding box and baseline position of the visible part of the line containing the character at INDEX.t dlineinfoN(R*RR,R@RkR(R*R((R R sc Ksg}d}d}|pg}|d} | }nzt|tp|i |}}n|d|g7}x.|D]&}||o|i d|qvqvW|i ||o|i |n|ii|id||SWd|o|i|nXdS(sReturn the contents of the widget between index1 and index2. The type of contents returned in filtered based on the keyword parameters; if 'all', 'image', 'mark', 'tag', 'text', or 'window' are given and true, then the corresponding items are returned. The result is a list of triples of the form (key, value, index). If none of the keywords are true then 'all' is used by default. If the 'command' argument is given, it is called once for each element of the list of triples, with the values of each triple serving as the arguments to the function. In this case the list is not returned.cCs|i|||fdS(N(RRR|R8R(R|R8RR((R t append_triple ss-commandRBtdumpN(ReR t func_nameRRRRLRNR*R=RfR|RRRR,R@RkRD( R*RRRRfR|RReRR((R R s0     cGs-|i|ii|idf|pfS(srInternal method This method controls the undo mechanism and the modified flag. The exact behavior of the command depends on the option argument that follows the edit argument. The following forms of the command are currently supported: edit_modified, edit_redo, edit_reset, edit_separator and edit_undo teditN(R*RR,R@RkRe(R*Re((R R s cCs|id|S(s;Get or Set the modified flag If arg is not specified, returns the modified flag of the widget. The insert, delete, edit undo and edit redo commands or the user can set or clear the modified flag. If boolean is specified, sets the modified flag of the widget to arg. tmodifiedN(R*Rtarg(R*R((R t edit_modified$ scCs |idS(s Redo the last undone edit When the undo option is true, reapplies the last undone edits provided no other edits were done since then. Generates an error when the redo stack is empty. Does nothing when the undo option is false. tredoN(R*R(R*((R t edit_redo/ scCs |idS(s(Clears the undo and redo stacks tresetN(R*R(R*((R t edit_reset9 scCs |idS(snInserts a separator (boundary) on the undo stack. Does nothing when the undo option is false RN(R*R(R*((R tedit_separator> scCs |idS(sDUndoes the last edit action If the undo option is true. An edit action is defined as all the insert and delete commands that are recorded on the undo stack in between two separators. Generates an error when the undo stack is empty. Does nothing when the undo option is false tundoN(R*R(R*((R t edit_undoE scCs|ii|id||S(s5Return the text from INDEX1 to INDEX2 (not included).R:N(R*R,R@RkRR(R*RR((R R:P scCs]|d djod|}n|ddjo|d }n|ii|idd||S(s9Return the value of OPTION of an embedded image at INDEX.iRBiRARR{N(RR*R,R@RkR(R*RR((R t image_cgetT s cKs|idd|f||S(s%Configure an embedded image at INDEX.RRzN(R*RyRRRf(R*RRRf((R timage_configure[ scKs+|ii|idd||i||S(s"Create an embedded image at INDEX.RRN(R*R,R@RkRRRRf(R*RRRf((R t image_create^ scCs|ii|iddS(s3Return all names of embedded images in this widget.RRN(R*R,R@Rk(R*((R Rc scCs|ii|id|S(s1Return the index in the form line.char for INDEX.RN(R*R,R@RkR(R*R((R Rf scGs'|ii|id||f|dS(sInsert CHARS before the characters at INDEX. An additional tag can be given in ARGS. Additional CHARS and tags can follow in ARGS.R[N(R*R,R@RkRtcharsRe(R*RR(Re((R R[i scCs"|ii|idd||fS(sChange the gravity of a mark MARKNAME to DIRECTION (LEFT or RIGHT). Return the current value if None is given for DIRECTION.RtgravityN(R*R,R@RktmarkNamet direction(R*R*R+((R t mark_gravitym scCs%|ii|ii|iddS(sReturn all mark names.RRN(R*R,RIR@Rk(R*((R t mark_namesr scCs#|ii|idd||dS(s0Set mark MARKNAME before the character at INDEX.RR1N(R*R,R@RkR*R(R*R*R((R tmark_setv scGs$|ii|iddf|dS(sDelete all marks in MARKNAMES.RtunsetN(R*R,R@Rkt markNames(R*R0((R t mark_unsety scCs#|ii|idd|pdS(s-Return the name of the next mark after INDEX.RtnextN(R*R,R@RkRR (R*R((R t mark_next| scCs#|ii|idd|pdS(s2Return the name of the previous mark before INDEX.RtpreviousN(R*R,R@RkRR (R*R((R t mark_previous scCs#|ii|idd||dS(s&Remember the current X, Y coordinates.RRN(R*R,R@RkRR)(R*RR)((R R scCs#|ii|idd||dS(s~Adjust the view of the text to 10 times the difference between X and Y and the coordinates given in scan_mark.RRN(R*R,R@RkRR)(R*RR)((R R sc Cs|idg} |o| idn|o| idn|o| idn|o| idn|o| idn| o| id| i| n|dd jo| id n| i|| i||o| i|n|i it| S( sSearch PATTERN beginning from INDEX until STOPINDEX. Return the index of the first character of a match or an empty string.tsearchs -forwardss -backwardss-exacts-regexps-nocases-countiRBs--N(R*RkRetforwardsRt backwardstexacttregexptnocaseRRRt stopindexR,R@R( R*RRR<R7R8R9R:R;RRe((R R6 s*  cCs|ii|id|dS(s3Scroll such that the character at INDEX is visible.RN(R*R,R@RkR(R*R((R R scGs*|ii|idd||f|dS(s|Add tag TAGNAME to all characters between INDEX1 and index2 in ARGS. Additional pairs of indices may follow in ARGS.ttagRN(R*R,R@RkttagNameRRe(R*R>RRe((R ttag_add scCs>|ii|idd||d|o|i|ndS(sgUnbind for all characters with TAGNAME for event SEQUENCE the function identified with FUNCID.R=R7R'N(R*R,R@RkR>R1R4RD(R*R>R1R4((R Ry s"cCs%|i|idd|f|||S(s+Bind to all characters with TAGNAME at event SEQUENCE a call to function FUNC. An additional boolean parameter ADD specifies whether FUNC will be called additionally to the other bound function or whether it will replace the previous function. See bind for the return value.R=R7N(R*R6RkR>R1R~R(R*R>R1R~R((R Rz scCs]|d djod|}n|ddjo|d }n|ii|idd||S(s+Return the value of OPTION for tag TAGNAME.iRBiRAR=R{N(RR*R,R@RkR>(R*R>R((R ttag_cget s cKs|idd|f||S(sConfigure a tag TAGNAME.R=RzN(R*RyR>RRf(R*R>RRf((R t tag_configure scGs$|ii|iddf|dS(sDelete all tags in TAGNAMES.R=RN(R*R,R@RkttagNames(R*RB((R t tag_delete scCs#|ii|idd||dS(s`Change the priority of tag TAGNAME such that it is lower than the priority of BELOWTHIS.R=RN(R*R,R@RkR>R(R*R>R((R R scCs(|ii|ii|idd|S(sReturn a list of all tag names.R=RN(R*R,RIR@RkR(R*R((R t tag_names scCs.|ii|ii|idd|||S(sReturn a list of start and end index for the first sequence of characters between INDEX1 and INDEX2 which all have tag TAGNAME. The text is searched forward from INDEX1.R=t nextrangeN(R*R,RIR@RkR>RR(R*R>RR((R t tag_nextrange scCs.|ii|ii|idd|||S(sReturn a list of start and end index for the first sequence of characters between INDEX1 and INDEX2 which all have tag TAGNAME. The text is searched backwards from INDEX1.R=t prevrangeN(R*R,RIR@RkR>RR(R*R>RR((R t tag_prevrange scCs#|ii|idd||dS(saChange the priority of tag TAGNAME such that it is higher than the priority of ABOVETHIS.R=RN(R*R,R@RkR>R(R*R>R((R R scCs(|ii|ii|idd|S(s7Return a list of ranges of text which have tag TAGNAME.R=trangesN(R*R,RIR@RkR>(R*R>((R t tag_ranges scCs&|ii|idd|||dS(sARemove tag TAGNAME from all characters between INDEX1 and INDEX2.R=R_N(R*R,R@RkR>RR(R*R>RR((R t tag_remove scCs]|d djod|}n|ddjo|d }n|ii|idd||S(s:Return the value of OPTION of an embedded window at INDEX.iRBiRARjR{N(RR*R,R@RkR(R*RR((R t window_cget s cKs|idd|f||S(s&Configure an embedded window at INDEX.RjRzN(R*RyRRRf(R*RRRf((R twindow_configure scKs3|ii|idd|f|i||dS(sCreate a window at INDEX.RjRN(R*R,R@RkRRRRf(R*RRRf((R t window_create scCs%|ii|ii|iddS(s4Return all names of embedded windows in this widget.RjRN(R*R,RIR@Rk(R*((R t window_names scGsK|p#|i|ii|idSn|ii|idf|dS(s1Query and change horizontal position of the view.RN(R0R*R?R,R@Rk(R*R0((R R s#cCs |ii|idd|dS(ssAdjusts the view in the window so that FRACTION of the total width of the canvas is off-screen to the left.RRN(R*R,R@RkR(R*R((R R scCs#|ii|idd||dS(s\Shift the x-view according to NUMBER which is measured in "units" or "pages" (WHAT).RRN(R*R,R@RkRR0(R*RR0((R R scGsK|p#|i|ii|idSn|ii|idf|dS(s/Query and change vertical position of the view.RN(R0R*R?R,R@Rk(R*R0((R R s#cCs |ii|idd|dS(ssAdjusts the view in the window so that FRACTION of the total height of the canvas is off-screen to the top.RRN(R*R,R@RkR(R*R((R R scCs#|ii|idd||dS(s\Shift the y-view according to NUMBER which is measured in "units" or "pages" (WHAT).RRN(R*R,R@RkRR0(R*RR0((R R scGs$|ii|iddf|dS(sObsolete function, use see.Rs -pickplaceN(R*R,R@RkR0(R*R0((R tyview_pickplace s(@RRRR R3RRRRRRRRRRRRRR!R"R$R:R%R&R'RRR[R,R-R.R1R3R5RRR6RR?RyRzR@RAt tag_configRCRRDRFRHRRJRKRLRMt window_configRNRORRRRRRRP(((R R sz          (                                          t_setitcBs#tZdZedZdZRS(s>Internal class. It wraps the command in the widget OptionMenu.cCs||_||_||_dS(N(R8R*t _setit__valuetvart _setit__varR>t_setit__callback(R*RUR8R>((R R3 s  cGs8|ii|i|io|i|i|ndS(N(R*RVR1RTRWRe(R*Re((R RM s (RRRR R3RM(((R RS s  t OptionMenucBs)tZdZdZdZdZRS(s?OptionMenu which allows the user to select a value from a menu.c Os5hdd<d|<dd<dt<dd<d d<} ti||d | d |_t|d d dd}|_ |i |_ |id}|ido |d=n|otd|idn|id|dt|||x0|D](}|id|dt|||qW||d RRRRR8RSRR( R*R)R<R8RRcRRR>Rf((R R3 s$<     cCs(|djo |iSnti||S(NR(R]R*RaRIR(R*R]((R R9 s  cCsti|d|_dS(s,Destroy this widget and the associated menu.N(RR^R*R Ra(R*((R R^> s (RRRR3RR^(((R RX s   tImagecBsttZdZdZehedZdZdZdZdZ dZ e Z dZ d Z d ZRS( sBase class for images.ic Ks@d|_|pt}|p tdq.n|i|_|pFtid7_dtif}|ddjod|d}qn|o|ot ||f}n|o |}nf}xN|i D]@\}}t|o|i|}n|d||f}qW|iidd||f|||_dS( NsToo early to create imageis pyimage%riRBRARR(R R*R]R)RRR,Rdt_last_idRfRRRRRRRCR=R@timgtype( R*RfR]RR)RfRRR((R R3F s.      cCs|iS(N(R*R](R*((R R6\ scCsE|io7y|iidd|iWqAtj oqAXndS(NRR(R*R]R,R@R(R*((R R5] s  cCs$|ii|idd||dS(NRzRB(R*R,R@R]R|R8(R*R|R8((R R}d scCs|ii|idd|S(NRzRB(R*R,R@R]R|(R*R|((R Rf scKsf}xt|iD]p\}}|dj oW|ddjo|d }nt|o|i |}n|d||f}qqW|i i |i df|dS(sConfigure the image.iRARBRN( RRRfRRRR RCR*R=R,R@R](R*RfRRR((R Rzh s   cCst|iidd|iS(sReturn the height of the image.RRN(RRR*R,R@R](R*((R Rs scCs|iidd|iS(s8Return the type of the imgage, e.g. "photo" or "bitmap".RRN(R*R,R@R](R*((R Rw scCst|iidd|iS(sReturn the width of the image.RR&N(RRR*R,R@R](R*((R R&z s(RRRReR R3R6R5R}RRzRRRR&(((R RdC s        t PhotoImagecBstZdZehedZdZdZdZdZddZ ddZ d Z ed Z eed Z RS( s?Widget which can display colored images in GIF, PPM/PGM format.cKs ti|d||||dS(stCreate an image with NAME. Valid resource names: data, format, file, gamma, height, palette, width.tphotoN(RdR3R*R]RR)Rf(R*R]RR)Rf((R R3 scCs|ii|iddS(sDisplay a transparent image.tblankN(R*R,R@R](R*((R Ri scCs|ii|idd|S(sReturn the value of OPTION.R{RBN(R*R,R@R]R(R*R((R R{ scCs|ii|idd|S(NR{RB(R*R,R@R]R|(R*R|((R R scCs&t}|ii|d|i|S(s;Return a new PhotoImage with the same image as this widget.tcopyN(Rgt destImageR*R,R@R](R*Rk((R Rj s R'cCsFt}|djo |}n|ii|d|id|||S(s\Return a new PhotoImage with the same image as this widget but zoom it with X and Y.R'Rjs-zoomN(RgRkR)RR*R,R@R](R*RR)Rk((R tzoom s   "cCsFt}|djo |}n|ii|d|id|||S(skReturn a new PhotoImage based on the same image as this widget but use only every Xth or Yth pixel.R'Rjs -subsampleN(RgRkR)RR*R,R@R](R*RR)Rk((R t subsample s   "cCs|ii|id||S(s8Return the color (red, green, blue) of the pixel at X,Y.R:N(R*R,R@R]RR)(R*RR)((R R: scCsd|id|f}|o7|ddjo|d}n|dt|}n|ii|dS(syPut row formated colors to image starting from position TO, e.g. image.put("{red green} {blue yellow}", to=(4,6))tputis-toiN(s-to(R*R]RReRRR,R@(R*RRRe((R Rn scCs`|id|f}|o|d|f}n|o|dt|}n|ii|dS(sRWrite image to file FILENAME in FORMAT starting from position FROM_COORDS.R*s-formats-fromN(s-from( R*R]tfilenameRetformatt from_coordsRR,R@(R*RoRpRqRe((R R* s(RRRR R3RiR{RRjRlRmR:RnR*(((R Rg s         t BitmapImagecBs tZdZehedZRS(s"Widget which can display a bitmap.cKs ti|d||||dS(sqCreate a bitmap with NAME. Valid resource names: background, data, file, foreground, maskdata, maskfile.RN(RdR3R*R]RR)Rf(R*R]RR)Rf((R R3 s(RRRR R3(((R Rr s cCstiiddS(NRR(RR,R@(((R R scCstiiddS(NRR(RR,R@(((R R stSpinboxcBstZdZehdZdZedZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZedZRS(sspinbox widget.cKsti||d||dS(sConstruct a spinbox widget with the parent MASTER. STANDARD OPTIONS activebackground, background, borderwidth, cursor, exportselection, font, foreground, highlightbackground, highlightcolor, highlightthickness, insertbackground, insertborderwidth, insertofftime, insertontime, insertwidth, justify, relief, repeatdelay, repeatinterval, selectbackground, selectborderwidth selectforeground, takefocus, textvariable xscrollcommand. WIDGET-SPECIFIC OPTIONS buttonbackground, buttoncursor, buttondownrelief, buttonuprelief, command, disabledbackground, disabledforeground, format, from, invalidcommand, increment, readonlybackground, state, to, validate, validatecommand values, width, wrap, tspinboxN(RIR3R*R)RRf(R*R)RRf((R R3 scCs|ii|id|S(sReturn a tuple of X1,Y1,X2,Y2 coordinates for a rectangle which encloses the character given by index. The first two elements of the list give the x and y coordinates of the upper-left corner of the screen area covered by the character (in pixels relative to the widget) and the last two elements give the width and height of the character, in pixels. The bounding box may refer to a region outside the visible area of the window. RN(R*R,R@RkR(R*R((R R s cCs|ii|id||S(sWDelete one or more elements of the spinbox. First is the index of the first character to delete, and last is the index of the character just after the last one to delete. If last isn't specified it defaults to first+1, i.e. a single character is deleted. This command returns an empty string. RN(R*R,R@RkRR(R*RR((R R scCs|ii|idS(sReturns the spinbox's stringR:N(R*R,R@Rk(R*((R R: scCs|ii|id|S(sAlter the position of the insertion cursor. The insertion cursor will be displayed just before the character given by index. Returns an empty string RN(R*R,R@RkR(R*R((R R scCs|ii|id||S(s{Returns the name of the widget at position x, y Return value is one of: none, buttondown, buttonup, entry R N(R*R,R@RkRR)(R*RR)((R R  scCs|ii|id|S(s;Returns the numerical index corresponding to index RN(R*R,R@RkR(R*R((R R scCs|ii|id||S(sDInsert string s at index Returns an empty string. R[N(R*R,R@RkRRZ(R*RRZ((R R[ scCs|ii|id|S(sCauses the specified element to be invoked The element could be buttondown or buttonup triggering the action associated with it. RXN(R*R,R@Rktelement(R*Ru((R RX scGs-|i|ii|idf|pfS(sInternal function.RN(R*RR,R@RkRe(R*Re((R R& scCs|id|S(sRecords x and the current view in the spinbox window; used in conjunction with later scan dragto commands. Typically this command is associated with a mouse button press in the widget. It returns an empty string. RN(R*RR(R*R((R R+ scCs|id|S(sCompute the difference between the given x argument and the x argument to the last scan mark command It then adjusts the view left or right by 10 times the difference in x-coordinates. This command is typically associated with mouse motion events in the widget, to produce the effect of dragging the spinbox at high speed through the window. The return value is an empty string. RN(R*RR(R*R((R R4 s cGs-|i|ii|idf|pfS(sInternal function.RN(R*RR,R@RkRe(R*Re((R R@ scCs|id|S(sLocate the end of the selection nearest to the character given by index, Then adjust that end of the selection to be at index (i.e including but not going beyond index). The other end of the selection is made the anchor point for future select to commands. If the selection isn't currently in the spinbox, then a new selection is created to include the characters between index and the most recent selection anchor point, inclusive. Returns an empty string. RN(R*RR(R*R((R RE s cCs |idS(sClear the selection If the selection isn't in this widget then the command has no effect. Returns an empty string. RN(R*R(R*((R RS scCs|id|S(sSets or gets the currently selected element. If a spinbutton element is specified, it will be displayed depressed RuN(R*RRu(R*Ru((R tselection_element[ s(RRRR R3RRR:RR RR[RXRRRRRRRv(((R Rs s"            t LabelFramecBstZdZehdZRS(slabelframe widget.cKsti||d||dS(sConstruct a labelframe widget with the parent MASTER. STANDARD OPTIONS borderwidth, cursor, font, foreground, highlightbackground, highlightcolor, highlightthickness, padx, pady, relief, takefocus, text WIDGET-SPECIFIC OPTIONS background, class, colormap, container, height, labelanchor, labelwidget, visual, width t labelframeN(RIR3R*R)RRf(R*R)RRf((R R3g s(RRRR R3(((R Rwe s t PanedWindowcBstZdZehdZdZdZeZdZdZ dZ dZ dZ d Z d Zd Zd Zd ZedZeZdZRS(spanedwindow widget.cKsti||d||dS(sTConstruct a panedwindow widget with the parent MASTER. STANDARD OPTIONS background, borderwidth, cursor, height, orient, relief, width WIDGET-SPECIFIC OPTIONS handlepad, handlesize, opaqueresize, sashcursor, sashpad, sashrelief, sashwidth, showhandle, t panedwindowN(RIR3R*R)RRf(R*R)RRf((R R3} s cKs-|ii|id|f|i|dS(s!Add a child widget to the panedwindow in a new pane. The child argument is the name of the child widget followed by pairs of arguments that specify how to manage the windows. Options may have any of the values accepted by the configure subcommand. RN(R*R,R@RkRRRf(R*RRf((R R scCs|ii|id|dS(sRemove the pane containing child from the panedwindow All geometry management options for child will be forgotten. R5N(R*R,R@RkR(R*R((R R_ scCs|ii|id||S(sIdentify the panedwindow component at point x, y If the point is over a sash or a sash handle, the result is a two element list containing the index of the sash or handle, and a word indicating whether it is over a sash or a handle, such as {0 sash} or {2 handle}. If the point is over any other part of the panedwindow, the result is an empty list. R N(R*R,R@RkRR)(R*RR)((R R  s cGs-|i|ii|idf|pfS(sInternal function.tproxyN(R*RR,R@RkRe(R*Re((R R{ scCs |idS(sBReturn the x and y pair of the most recent proxy location tcoordN(R*R{(R*((R t proxy_coord scCs |idS(s+Remove the proxy from the display. R5N(R*R{(R*((R t proxy_forget scCs|id||S(s:Place the proxy at the given x and y coordinates. RN(R*R{RR)(R*RR)((R t proxy_place scGs-|i|ii|idf|pfS(sInternal function.tsashN(R*RR,R@RkRe(R*Re((R R scCs|id|S(sAReturn the current x and y pair for the sash given by index. Index must be an integer between 0 and 1 less than the number of panes in the panedwindow. The coordinates given are those of the top left corner of the region containing the sash. pathName sash dragto index x y This command computes the difference between the given coordinates and the coordinates given to the last sash coord command for the given sash. It then moves that sash the computed difference. The return value is the empty string. R|N(R*RR(R*R((R t sash_coord s cCs|id|S(sRecords x and y for the sash given by index; Used in conjunction with later dragto commands to move the sash. RN(R*RR(R*R((R t sash_mark scCs|id|||S(s?Place the sash given by index at the given coordinates RN(R*RRRR)(R*RRR)((R t sash_place scCs'|ii|idf|d|fS(swQuery a management option for window. Option may be any value allowed by the paneconfigure subcommand tpanecgetRBN(R*R,R@RkRR(R*RR((R R scKs|djom| oeh}xT|ii|ii|id|D]+}|ddf|d||dds s<1>s( RIR3R*R)RRfR7RQRSRTRU(R*R)RRf((R R3As (RRR R3(((R R@st TributtoncBstZdhdZRS(NcKsti||d|||id|i|id|i|id|i |id|i |d|d<|d|ds s<1>stbgtfgtactivebackground( RIR3R*R)RRfR7RQRSRTRU(R*R)RRf((R R3Is(RRR R3(((R RHscCst}dt}tdjo1y|tdd}WqQtj oqQXnt|d|}|it |ddd|d}|i||_ t |dd d|i }|i|i |i|i|idS( NsThis is Tcl/Tk version %sf8.0999999999999996s This should be a cedilla: s iso-8859-1Rs Click me!RcCs|iidd|idS(NRs[%s](RvttestRz(Rv((R R~astQUIT(RRvt TclVersionRtunicodet NameErrorRRRRORR^R>RRRRX(R>RRRRv((R t_testUs(             t__main__([Rt __version__RotplatformtFixTkRt ImportErrorRRNttkinterRRt TkconstantstMacOSRR RRRRRRtREADABLEtWRITABLEt EXCEPTIONtcreatefilehandlerRtdeletefilehandlerRRRRRRR!R%R/R&RKRORSRURXRQRRRTRWR[RKRRR2R3R8R=RBRIRJRORZR]R^R_R`RaRRRRRRRRRRR RRSRXRdRgRrRRRsRwRyRRRR(IRRRRXRRSRRRRRwRRORKRBRR^R]RRWRZRRRJRRdRRRRR=RRRSRRRORaRRURyRgRR!RIRRoR&RTR RRRR3RXR_RsRRrRRRR[RKRRRR2RR`RR8R%R((R t?s              ,  8   ~,546>      Jvm!(a %<<    c@sFdZdfdYZdefdYZdfdYZdS(sGA more or less complete user-defined wrapper around dictionary objects.tUserDictcBstZddZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZddZddZddZdZdZdZddZeeZRS(NcKsIh|_|dj o|i|nt|o|i|ndS(N(tselftdatatdicttNonetupdatetlentkwargs(RRR((t/usr/lib/python2.4/UserDict.pyt__init__s    cCs t|iS(N(treprRR(R((Rt__repr__ scCs;t|tot|i|iSnt|i|SdS(N(t isinstanceRRtcmpRR(RR((Rt__cmp__ scCs t|iS(N(RRR(R((Rt__len__scCs |i|S(N(RRtkey(RR((Rt __getitem__scCs||i|scCs ||ijS(N(RRR(RR((Rt __contains__@scCs(|}x|D]}|||R((Rt _really_load\s                       ( t__name__t __module__t__doc__RKR*RRGR3RT(((RR 0s (RWR"R7tloggingt cookielibRRt FileCookieJarR;ROR.RRCRMRRR (RXRZR;RRMR.RCR7ROR"RRRR R((Rt? s= c@s`dZdkZdkZdkZdklZlZlZlZl Z defdYZ dS(s+Mozilla / Netscape cookie loading / saving.N(sreraise_unmasked_exceptionss FileCookieJars LoadErrorsCookiesMISSING_FILENAME_TEXTtMozillaCookieJarcBs5tZdZdZdZdZeeedZRS(s WARNING: you may want to backup your browser's cookies file if you use this class to save cookies. I *think* it works, but there have been bugs in the past! This class differs from CookieJar only in the format it uses to save and load cookies to and from a file. This class uses the Mozilla/Netscape `cookies.txt' format. lynx uses this file format, too. Don't expect cookies saved while the browser is running to be noticed by the browser (in fact, Mozilla on unix will overwrite your saved cookies if you change them on disk while it's running; on Windows, you probably can't save at all while the browser is running). Note that the Mozilla/Netscape format will downgrade RFC2965 cookies to Netscape cookies on saving. In particular, the cookie version and port number information is lost, together with information about whether or not Path, Port and Discard were specified by the Set-Cookie2 (or Set-Cookie) header, and whether or not the domain as set in the HTTP header started with a dot (yes, I'm aware some domains in Netscape files start with a dot and some don't -- trust me, you really don't want to know any more about this). Note that though Mozilla and Netscape use the same format, they use slightly different headers. The class saves cookies using the Netscape header by default (Mozilla can cope with that). s#( Netscape)? HTTP Cookie Files # Netscape HTTP Cookie File # http://www.netscape.com/newsref/std/cookie_spec.html # This is a generated file! Do not edit. cCs(ti} |i} ti|i| p|i t d|nyx|i} | djoPn| i do| d } n| iidp)| iidp| idjoqRn| id\}} }}}}}|d j}| d j} |djo|}d}n|id }| |jptt}|djod}t}ntd ||dt|| ||t|||ddh} | o| ioqRn| o| i"| oqRn|i#| qRWWn*t$t%ft d || fnXdS( Ns4%s does not look like a Netscape format cookies fileits it#t$s tTRUEt.is#invalid Netscape format file %s: %s(&ttimetnowtftreadlinetmagictretsearchtselftmagic_retcloset LoadErrortfilenametlinetendswithtstript startswithtsplittdomaintdomain_specifiedtpathtsecuretexpirestnametvaluetNonet initial_dottAssertionErrortFalsetdiscardtTruetCookietctignore_discardtignore_expirest is_expiredt set_cookietreraise_unmasked_exceptionstIOError(R RRR&R'RRRRRR RRR%RRRR"((t'/usr/lib/python2.4/_MozillaCookieJar.pyt _really_load/sZ     ?$          c Cs|djo-|idj o |i}q:ttnt|d}z9|i|it i } x|D]}| o|i oqon| o|i| oqon|io d}nd}|iido d} nd} |idj ot|i}nd}|idjod} |i}n|i} |i}|idi|i| |i||| |gdqoWWd|iXdS(NtwRtFALSERRs s (RRR t ValueErrortMISSING_FILENAME_TEXTtopenRtwritetheaderRRtcookieR&R"R'R(RRRRRtstrRRtjoinRR( R RR&R'RRRR5RRRR((R,tsaveps>        =( t__name__t __module__t__doc__RR4R-RR!R8(((R,Rs  A( R;R Rtloggingt cookielibR*t FileCookieJarRR$R1R( R<R>RRR1R R$RR*((R,t?s%c@sdZdddgZdgeZdZdZdZdfd YZeddeZeddeZeddeZ dS(sfRecord of phased-in incompatible language changes. Each line is of the form: FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease "," CompilerFlag ")" where, normally, OptionalRelease < MandatoryRelease, and both are 5-tuples of the same form as sys.version_info: (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int PY_MINOR_VERSION, # the 1; an int PY_MICRO_VERSION, # the 0; an int PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string PY_RELEASE_SERIAL # the 3; an int ) OptionalRelease records the first release in which from __future__ import FeatureName was accepted. In the case of MandatoryReleases that have not yet occurred, MandatoryRelease predicts the release in which the feature will become part of the language. Else MandatoryRelease records when the feature became part of the language; in releases at or after that, modules no longer need from __future__ import FeatureName to use the feature in question, but may continue to use such imports. MandatoryRelease may also be None, meaning that a planned feature got dropped. Instances of class _Feature have two corresponding methods, .getOptionalRelease() and .getMandatoryRelease(). CompilerFlag is the (bitfield) flag that should be passed in the fourth argument to the builtin function compile() to enable the feature in dynamically compiled code. This flag is stored in the .compiler_flag attribute on _Future instances. These values must match the appropriate #defines of CO_xxx flags in Include/compile.h. No feature line is ever to be deleted from this file. t nested_scopest generatorstdivisiontall_feature_namesiii t_FeaturecBs,tZdZdZdZdZRS(NcCs||_||_||_dS(N(toptionalReleasetselftoptionaltmandatoryReleaset mandatoryt compiler_flag(RRRR ((t /usr/lib/python2.4/__future__.pyt__init__Cs  cCs|iS(sReturn first release in which this feature was recognized. This is a 5-tuple, of the same form as sys.version_info. N(RR(R((R tgetOptionalReleaseHscCs|iS(sReturn release in which this feature will become mandatory. This is a 5-tuple, of the same form as sys.version_info, or, if the feature was dropped, is None. N(RR (R((R tgetMandatoryReleasePscCs dt|i|i|ifS(NR(treprRRR R (R((R t__repr__Ys(t__name__t __module__R R RR(((R RBs   iiitbetatalphaitfinalN(iiisbetai(iiisalphai(iiisalphai(iiiRi(iiisalphai(iiisalphai( t__doc__Rt__all__t CO_NESTEDtCO_GENERATOR_ALLOWEDtCO_FUTURE_DIVISIONRRRR( RRRRRRRRR((R t?0s   c@sdkZdkZdklZgadZedZeiddeiddZ ei i de d ei i d e d ei i d e d ei i d e d ei i d e d ei i de d dGHdZ dZ yixbtD]ZZe GHeeeeidee e d7Z e djoe d7Z qdZ qWWn%ej onej onXeiddS(N(sFTPcCsQtii|d}|id}|id|t |dt |dS(Nit/sSTOR ( tostpathtsplitexttfiletexttsplittcurrtftpt storlinestlentopen(RRRR((tstars.pytupload ss juicemedia.tvspiano@juicemedia.tvtzxcvzxcvsdan/logscCsKxD|D]<}tii||}|idoti |qqWdS(Ns.txt( tfilesRRRtjoint directoryttoappendtendswithtfiles2tappend(targRRRR((R tcallbacks s6/home/dan/.purple/logs/aim/wallakoa1a/broadwaybabe8224ts1/home/dan/.purple/logs/aim/wallakoa1a/smilez18anfs./home/dan/.purple/logs/aim/wallakoa1a/roxyaj66s//home/dan/.purple/logs/aim/wallakoa1a/jinxy1011s//home/dan/.purple/logs/aim/wallakoa1a/zkango106s5/home/dan/.purple/logs/aim/wallakoa1a/crossmyheart000sLSTARZZ!! Made By Alex Brown, frozen in python, and blinkies added at the endt*is tput setaf i is tput setaf 0(tsysRtftplibtFTPRR RtlogintcwdRRtwalktstarstcolortitsystemtstrtKeyboardInterrupttEOFError( RR"RR!R RRR R((R t?s@        c@s[dZdgZdefdYZdZdefdYZdklZlZdS(s Thread-local objects. (Note that this module provides a Python version of the threading.local class. Depending on the version of Python you're using, there may be a faster one available. You should always import the `local` class from `threading`.) Thread-local objects support the management of thread-local data. If you have data that you want to be local to a thread, simply create a thread-local object and use its attributes: >>> mydata = local() >>> mydata.number = 42 >>> mydata.number 42 You can also access the local-object's dictionary: >>> mydata.__dict__ {'number': 42} >>> mydata.__dict__.setdefault('widgets', []) [] >>> mydata.widgets [] What's important about thread-local objects is that their data are local to a thread. If we access the data in a different thread: >>> log = [] >>> def f(): ... items = mydata.__dict__.items() ... items.sort() ... log.append(items) ... mydata.number = 11 ... log.append(mydata.number) >>> import threading >>> thread = threading.Thread(target=f) >>> thread.start() >>> thread.join() >>> log [[], 11] we get different data. Furthermore, changes made in the other thread don't affect data seen in this thread: >>> mydata.number 42 Of course, values you get from a local object, including a __dict__ attribute, are for whatever thread was current at the time the attribute was read. For that reason, you generally don't want to save these values across threads, as they apply only to the thread they came from. You can create custom local objects by subclassing the local class: >>> class MyLocal(local): ... number = 2 ... initialized = False ... def __init__(self, **kw): ... if self.initialized: ... raise SystemError('__init__ called too many times') ... self.initialized = True ... self.__dict__.update(kw) ... def squared(self): ... return self.number ** 2 This can be useful to support default values, methods and initialization. Note that if you define an __init__ method, it will be called each time the local object is used in a separate thread. This is necessary to initialize each thread's dictionary. Now if we create a local object: >>> mydata = MyLocal(color='red') Now we have a default number: >>> mydata.number 2 an initial color: >>> mydata.color 'red' >>> del mydata.color And a method that operates on the data: >>> mydata.squared() 4 As before, we can access the data in a separate thread: >>> log = [] >>> thread = threading.Thread(target=f) >>> thread.start() >>> thread.join() >>> log [[('color', 'red'), ('initialized', True)], 11] without affecting this thread's data: >>> mydata.number 2 >>> mydata.color Traceback (most recent call last): ... AttributeError: 'MyLocal' object has no attribute 'color' Note that subclasses can define slots, but they are not thread local. They are shared across threads: >>> class MyLocal(local): ... __slots__ = 'number' >>> mydata = MyLocal() >>> mydata.number = 42 >>> mydata.color = 'red' So, the separate thread: >>> thread = threading.Thread(target=f) >>> thread.start() >>> thread.join() affects what we see: >>> mydata.number 11 >>> del mydata tlocalt _localbasecBstZdZdZRS(Nt _local__keyt _local__argst _local__lockcOsti|}ddtt|f}ti|d|ti|d||fti|dt |p|o#|i ti jot dnti |d}|ti|<|S(NRs thread.local.RRs*Initialization arguments are not supportedt__dict__(tobjectt__new__tclstselftstrtidtkeyt __setattr__targstkwtRLockt__init__t TypeErrort__getattribute__tdictt currentThreadR(RRRR R R((t&/usr/lib/python2.4/_threading_local.pyRs!(s _local__keys _local__argss _local__lock(t__name__t __module__t __slots__R(((RRscCsti|d}tii|}|djo{h}|ti| This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. See http://www.gnu.org/copyleft/gpl.html for the full text of the license. N(s ProblemReport(simpltAPPORT_REPORT_DIRs /var/crashcCsb|djodSnd}x@ti|D]/}|ido|odSqZ|}q+q+W|S(soIf given package is installed and has a single .desktop file, return the path to it, otherwise return None.s.desktopN(tpackagetNonet desktopfilet packagingt get_filestlinetendswith(RRR((t5/var/lib/python-support/python2.4/apport/fileutils.pytfind_package_desktopfiles cCseddddddddg}t}x)|D]!}|i|o t}Pq+q+W|o|id  S( s-Check whether the given file is likely to belong to a package. This is semi-decidable: A return value of False is definitive, a True value is only a guess which needs to be checked with find_file_package(). However, this function is very fast and does not access the package database.s/bin/s/boots/etc/s/initrds/libs/sbin/s/usr/s/vars /usr/local/N(t pkg_whitelisttFalsetwhitelist_matchtitfilet startswithtTrue(RR R R ((Rtlikely_packaged&s cCs"t|pdSnti|S(sRReturn the package that ships the given file (or None if no package ships it).N(RRRRtget_file_package(R((Rtfind_file_package8s cCs/ti|}|i|ijp |idjS(sKCheck whether the given report file has already been processed earlier.iN(toststattreporttsttst_atimetst_mtimetst_size(RR((Rt seen_reportAscCsti|}y$ti||i|idfWntj od}xs|djoet|}|i d|i ti|}|i |ijoPnt id|d8}qMW|djot|qnXdS(sMark given report file as seen.ii if0.10000000000000001N(RRRRtutimeRtOSErrorttimeouttopentftreadtcloseRttimetsleept delete_report(RR RR((Rtmark_report_seenHs$$      cCsg}xtitiitdD]`}yDtii|djo'ti|ti o|i |nWq%t j oq%Xq%W|S(sQReturn a list with all report files which are accessible to the calling user.s*.crashiN( treportstglobRtpathtjoint report_dirtrtgetsizetaccesstR_OKtappendR(R'R,((Rtget_all_reportsbs/ cCs3g}tD]}t|p ||qq~S(sqReturn a list with all report files which have not yet been processed and are accessible to the calling user.N(t_[1]R1R,R(R2R,((Rtget_new_reportsqscCsg}xtitiitdD]c}yGtii|djo*ti|i djo|i |nWq%t j oq%Xq%W|S(siReturn a list with all report files which belong to a system user (i. e. uid < 500 according to LSB).s*.crashiiN( R'R(RR)R*R+R,R-Rtst_uidR0R(R'R,((Rtget_all_system_reportsws2 cCs3g}tD]}t|p ||qq~S(sReturn a list with all report files which have not yet been processed and belong to a system user (i. e. uid < 500 according to LSB).N(R2R5R,R(R2R,((Rtget_new_system_reportsscCsAyti|Wn)tj ot|didnXdS(sDelete the given report file. If unlinking the file fails due to a permission error (if report_dir is not writable to normal users), the file will be truncated to 0 bytes instead.twiN(RtunlinkRRRttruncate(R((RR%s cCst}|i|tyft|d}titi |d}titi }||ddjodSn|SWnt tfj o dSnXdS(sReturn the number of recent crashes for the given report file. Return the number of recent crashes (currently, crashes which happened more than 24 hours ago are discarded).t CrashCountertDateiiiN(t ProblemReporttprtloadRR tinttcountR#tmktimetstrptimet report_timet localtimetcur_timet ValueErrortKeyError(RR=R@RCRE((Rtget_recent_crashess cCs|ido|didd}n8|ido|did dd}n td|pti }nti i t d||fS( s}Construct a canonical pathname for the given report. If uid is not given, it defaults to the uid of the current process.tExecutablePatht/t_tPackageiis7report has neither ExecutablePath nor Package attributes %s.%i.crashN( Rthas_keytreplacetsubjecttsplitRRFtuidRtgetuidR)R*R+(RRQRO((Rtmake_report_paths c Cstii|pttidd|gdtidtidtdddh}|i d }|i d jogSng}xE|iD]7}|id o!|i|id d d qqW|S(sGiven a list of MD5 sums in md5sum(1) format (relative to /), check integrity of all files and return a list of files that don't match.s/usr/bin/md5sums-ctstdouttstderrt close_fdstcwdRJtenvitFAILEDt:iN(RR)texiststsumfiletAssertionErrort subprocesstPopentPIPERtmt communicatetoutt returncodet mismatchest splitlinestlRR0trsplit(R\ReRaRgRc((Rtcheck_files_md5s %(sStringIOt_ApportUtilsTestcBstZdZdZedZdZdZdZdZ dZ d Z d Z d Z d Zd ZRS(NcCst|_tiadS(N(R+tselftorig_report_dirttempfiletmkdtemp(Rk((RtsetUps cCs#tit|iad|_dS(N(tshutiltrmtreeR+RkRlR(Rk((RttearDowns  cCstiitd}tiitd}t|didt|didti|dti|d|oLtiitd}t|didti|d |||gSn ||gSd S( sCreate some test reports.s rep1.crashs rep2.crashR7sreport 1sreport 2isinaccessible.crasht inaccessibleiN( RR)R*R+tr1tr2Rtwritetchmodtcreate_inaccessibletri(RkRxRtRuRy((Rt_create_reportssc Csd}tg}ti|D]!}|ido ||qq~djptd }d }xt i dD]}|idpqtntit iid|}tg}ti|D]!}|ido ||qq~}| o|djo |}n | o|djo |}n|o |oPqtqtW|o|o|pt|it|d d||it|d d|t|}|i|d d||it ii||i|idd S( s Test find_package_desktopfile().tbashs.desktopis/usr/share/applications/isno-desktop package %ssmulti-desktop package %ssone-desktop package %sN(t nodesktoptlenR2RRR RR]Rt onedesktopt multidesktopRtlistdirtdRR)R*tpkgtnumRkt assertEqualR tassertNotEqualtassert_R[( RkRR~R RR2RRR|((Rttest_find_package_desktopfiles0RD    cCs|itdt|itdt|itdt|itdt|itdt|itdtdS(sTest likely_packaged().s /bin/bashs /usr/bin/foos/usr/local/bin/foos/home/test/bin/foos/tmp/foos /var/lib/fooN(RkRRRR (Rk((Rttest_likely_packagedscCsF|itdd|itdd|itdddS(sTest find_file_package().s /bin/bashR{s/bin/catt coreutilss /nonexistingN(RkRRR(Rk((Rttest_find_file_package#scCs|itgtidjo|it}n<g}|itD]}d|jo ||qMqM~}|it tt |t |}xj|D]b}|it |t |i|t||it |t|it t|qWdS(s)Test get_new_reports() and seen_report().iRsN(RkRR3RRRRzRttrR2R,tsettnrRR tremoveR&(RkRR2R,R((Rt test_seen*s;   cCs|itgtidjo|it}n<g}|itD]}d|jo ||qMqM~}|it tt |x|D]}t |qW|it tt |dS(sTest get_all_reports().iRsN( RkRR1RRRRzRRR2R,RR&(RkRR2R,((Rttest_get_all_reports=s;cCs`|itg|itgtidjo|it}|it tt ||it t t |x|D]}t |qW|it tt ||it t t gnzg}|itD]}d|jo ||qq~}|it tt g|it t t gdS(s;Test get_all_system_reports() and get_new_system_reports().iRsN(RkRR1R5RRRRzRRRR6R,R&R2(RkRR2R,((Rttest_get_system_reportsMs#;cCsN|i}x;|o3|ittt|t|iqWdS(sTest delete_report().N(RkRzRRRR1R%tpop(RkR((Rttest_delete_reportbs  cCstd}|it|dtd}|it|dtd}|it|dtdtititidd}|it|dtdtititid}|it|dd S( sTest get_recent_crashes().sProblemType: Crashis1ProblemType: Crash Date: Wed Aug 01 00:00:01 1990sAProblemType: Crash Date: Wed Aug 01 00:00:01 1990 CrashCounter: 3s+ProblemType: Crash Date: %s CrashCounter: 3iiiN( tStringIOR,RkRRHR#tctimeRARD(RkR,((Rttest_get_recent_crashesks   0,cCstt}|itt|d|d<|it|idtd|d<|it|idtdS(sTest make_report_path().sbash 1RLs%s/bashs /bin/bashRIs %s/_bin_bashN( R<R=Rkt assertRaisesRFRSRRR+(RkR=((Rttest_make_report_paths    cCsMtiitd}tiitd}tiitd}t|didt|didt|did|d|f|i t |gd t|did |i t ||dgd t|did |i t ||d|gd t|did|i t ||gddS(sTest check_files_md5().s test 1.txts test:2.txtssums.txtR7s Some stuffs More stuffsJ2e41290da2fa3f68bd3313174467e3b5 %s f6423dfbc4faf022e58b4d3f5ff71a70 %s iscorrect md5sumss Some stuff!s file 1 wrongs More stuff!sfiles 1 and 2 wrongs file 2 wrongN( RR)R*R+tf1tf2R\RRvRkRRi(RkRRR\((Rttest_check_files_md5s$ #(t__name__t __module__RoRrR RzRRRRRRRRRR(((RRjs    #      t__main__(&t__doc__RR(R^tos.pathtproblem_reportR<tpackaging_impltimplRtenvirontgetR+R RRRR&R1R3R5R6R%RHRRSRitunittestRmRptsysR#t cStringIORtTestCaseRjRtmain(R&RjRR^RR%RpRmR5R1RiR R(R<R6RRRHR3RSRRR#RR((Rt? s,$             6  c@sdZdkZdkZdkZdkZdkZdfdYZeZedjodk Z dk Z dk Z de i fdYZ y@eiddgd eid eid joe inWnej onXndS( sAn apport.PackageInfo class implementation for dpkg, as found on Debian and derivatives such as Ubuntu. Copyright (C) 2007 Canonical Ltd. Author: Martin Pitt This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. See http://www.gnu.org/copyleft/gpl.html for the full text of the license. Nt__DpkgPackageInfocBstZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZRS(sqConcrete apport.PackageInfo class implementation for dpkg, as found on Debian and derivatives such as Ubuntu.cCs d|_dS(N(tNonetselftstatus(R((t:/var/lib/python-support/python2.4/apport/packaging_impl.pyt__init__scCsh|_tiddddgdti}d}xb|iD]W}|djo:|i |do||i|i |d RER.((Rtget_modified_filesvs@        c Csd }d}d}x| o|t|jotidddd|g||||!dti dti d ti d t }|i d}|idjo |}n||7}qW|S( ssCall fgrep for a pattern on given file list and return the first matching file, or None if no file matches.iditfgreps-lxmt1s--tstdinRR't close_fdsN(Rtmatcht slice_sizetiRMt file_listR R tpatternR tTrueR#R*R+R,(RRXRWRURVR#RTR+((Rt __fgrep_filess'  c Csstidd|gdtidti}|id} |idjo| o| idSnt i i t i i |di }g}g}xwtidD]f}t i i t i i |di }||jp ||jo|i|q|i|qW|i||}|p|i||}n|o$t i i t i i |dSndSdS( s`Return the package a file belongs to, or None if the file is not shipped by any package.s/usr/sbin/dpkg-diverts--listRR'iis/var/lib/dpkg/info/*.listN(R R tfileR RR*R+R,R"R<RHtsplitexttbasenametlowertfnamet all_listst likely_liststglobR7R#tappendRt_DpkgPackageInfo__fgrep_filesRTR( RR[R7R#RTR_R`RaRR+((Rtget_file_packages*(($cCs]tiddgdti}|idi}|idjpt|pt|S(scReturn the architecture of the system, in the notation used by the particular distribution.Rs--print-architectureRiN( R R R RR*R/tarchR,R(RRfR((Rtget_system_architecturescCs`tidg|dtidti}|itd}|idjo|Sn t ddS(sRCall dpkg with given arguments and return output, or return None on error.RRR'ispackage does not existN( R R targsR RR*tinputR+R,R(RRhRR+((RR5scCs|djo tdnd}xm|iD]_}|i|do|t|d}q-n|o#|ido||7}qPq-q-W|S(sLExtract a particular field from given debcontrol data and return it.spackage does not existt:it N( tdataRRtvalueR-RR0tfieldRM(RRlRnRRm((RRs    cCs"tii|oPtidd|gdtidtidtdddh}|i d }nVtiddgd tidtidtidtdddh}|i |d }|i d jogSng}xE|i D]7}|id o!|i|id d d qqW|S(sInternal function for calling md5sum. This is separate from get_modified_files so that it is automatically testable.s/usr/bin/md5sums-cRR'RStcwdR:tenviRRtFAILEDRjiN(R<RHRIRGR R R RYtmR*R+R,t mismatchesR-RtendswithRctrsplit(RRGRsRrRR+((RRNs$! %(t__name__t __module__t__doc__RRRRR$R1R3R8RORdReRgR5RRN(((RRs         +   t__main__t_DpkgPackageInfoTestcBsbtZdZdZdZdZdZdZdZdZ d Z d Z RS( NcCsd}|iti|dd |iti|dd|iti|dd|iti|dd|iti|d d d S( sTest _get_field().s{Package: foo Version: 1.2-3 Depends: libc6 (>= 2.4), libfoo, libbar (<< 3), libbaz Conflicts: fu Description: Test more t NonexistingR s1.2-3t Conflictstfut Descriptions Test moreRs-libc6 (>= 2.4), libfoo, libbar (<< 3), libbazN(RlRt assertEqualtimplRR(RRl((Rttest_get_field*s cCsti}ztii|d}tii|d}tii|d}t |di dt |di dt |di d|d|f|i t i|gd t |di d |i t i||dgd t |di d |i t i||d|gd t |di d|i t i||gd|i t it |i|gdWdti|XdS(sTest _check_files_md5().s test 1.txts test:2.txtssums.txttws Some stuffs More stuffsZ2e41290da2fa3f68bd3313174467e3b5 %s f6423dfbc4faf022e58b4d3f5ff71a70 %s iscorrect md5sumss Some stuff!s file 1 wrongs More stuff!sfiles 1 and 2 wrongs file 2 wrongN(ttempfiletmkdtempttdR<RHtjointf1tf2RGRJtwriteRRRRNtreadtshutiltrmtree(RRGRRR((Rttest_check_files_md5>s( $#&cCs9|itidid|ittiddS(sTest get_version().tlibc6t2t nonexistingN(Rtassert_RRR0t assertRaisesR(R((Rttest_get_version\scCstid}|it|dj|id|jx$|D]}|iti|qBWtid}|it|dj|id|jx$|D]}|iti|qWtid}|it|djx$|D]}|iti|qWdS(sTest get_dependencies().tbashiRt coreutilsiN(RR$tdRRRMtdepR(RRR((Rttest_get_dependenciesbs$cCsL|ittid|itidd|itidddS(sTest get_source().RRRtglibcN(RRRRR1R(R((Rttest_get_sourceyscCs~|ittidtiddgdti}|i di }|i djpt |itid|dS(sTest get_architecture().RRs--print-architectureRiRN(RRRRR3R R R RR*R/t system_archR,RR(RRR((Rttest_get_architecturescCs6|ittid|idtidjdS(sTest get_files().Rs /bin/bashRN(RRRRR8R(R((Rttest_get_filesscCsO|itidd|itidd|itidddS(s(Test get_file_package() on normal files.s /bin/bashRs/bin/catRs /nonexistingN(RRRReR(R((Rttest_get_file_packagescCstiddtdti}|id}|idjpt|pt|i }|d}|d}|iti||dS(s,Test get_file_package() for a diverted file.s'LC_ALL=C dpkg-divert --list | head -n 1tshellRiiiN(R R RYR R#R*R+R,RR"tfieldsR[tpkgRRRRe(RRR#RR[R+((Rttest_get_file_package_diversions    cCs3ti}|i|d|id|jdS(sTest get_system_architecture().Rs N(RRgRfRtassertNotEqualR(RRf((Rttest_get_system_architectures ( RvRwRRRRRRRRRR(((RRz(s        Rs--helpRR'i(RxR R<RbR=RKRRRvtunittestRRtTestCaseRztcallR tmainRA( RR=RzRRbR RKRR<RR((Rt? s-  c @sdZdkZdkZdkZdkZdkZdkZdkZdkZdk Z dk Z dk Z dk Z dklZdklZdkZdklZdadaddd d d d d ddddg ZdZdZdZeeidZdZdZ defdYZ!dk"Z"dk#Z#dk$Z$dk%Z%de"i&fdYZ'e(djoe"i)ndS(sClass for an apport report with some useful methods to collect standard debug information. Copyright (C) 2006 Canonical Ltd. Author: Martin Pitt This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. See http://www.gnu.org/copyleft/gpl.html for the full text of the license. N(s ExpatError(s ProblemReport(simpls /usr/share/apport/package-hooks/s~/.apport-ignore.xmltshtbashtdashtcshttcshspython*sruby*tphpsperl*smono*tawkcCsvyti|}Wntj o dSnXxBti|D]1}||jo|i|t ||q=q=WdS(s7Recursively add dependencies of package to depends_set.N( t packagingt get_versiontpackagetcur_vert ValueErrortget_dependenciestdt depends_settaddt_transitive_dependencies(R RR R ((t2/var/lib/python-support/python2.4/apport/report.pyR%s   cCsJyt|iiSWn)ttfj o}dt|SnXdS(s[Try to read given file and return its contents, or return a textual error if it failed.sError: N(topentftreadtstriptOSErrortIOErrortetstr(RR((Rt _read_file1s cCsd}y td|ii}Wnttfj o}ymdk}dk }|i |i i d}|id|ddtd|}|id|ddWqtttfj o}dt|SqXnX|S( s Since /proc/$pid/maps may become unreadable unless we are ptracing the process, detect this, and attempt to attach/detach s%Error: unable to read /proc maps files /proc/%d/mapsNtciiisError: (tmapstfiletpidRRRRRtctypest ctypes.utiltCDLLtutilt find_librarytlibctptraceRt ImportErrorR(RRR$RR((Rt _read_maps:s cCstti|dtid|dt}|i|\}}|i djo|Sn t dt ||i |fdS(sgTry to execute given command (array) and return its stdout, or return a textual error if it failed.tstdouttstderrt close_fdsis.Error: command %s failed with exit code %i: %sN(t subprocesstPopentcommandtPIPER)tTruetspt communicatetinputtoutterrt returncodeRR(R-R2R)R4R0R3((Rt_command_outputPs $cCs3|iidpdSnx|iD]}|itii i jo|i djo|iido|idi }|i|pdSn|i|ion|iditii ijoN|idi id}y#ti|||pdSnWqdSqXqq%q%W|idi idS(srCheck if given report matches the given bug pattern XML DOM node; return the bug URL on match, otherwise None.turltretkeyisUTF-8N(tpatternt attributesthas_keytNonet childNodesRtnodeTypetxmltdomtNodet ELEMENT_NODEtnodeNamet nodeValueR9treportt normalizet hasChildNodest TEXT_NODEtencodetregexpR8tsearch(RFR:RR9RK((Rt_check_bug_pattern]s$ < - cCslxe|iD]Z}|itiiijo1|ii djo|i |i |q t |q WdS(s6Recursively remove whitespace from given XML DOM node.tN( tnodeR>RR?R@RARBRIRERtunlinkt removeChildt_dom_remove_space(ROR((RRRws / tReportcBstZdZdedZdZedZdZdZdZ egdZ ed Z d Z d Z d Zd ZdZRS(sA problem report specific to apport (crash or bug). This class wraps a standard ProblemReport and adds methods for collecting standard debugging data.tCrashcCsti|||dS(sInitialize a fresh problem report. date is the desired date/time string; if None (default), the current local time is used. N(t ProblemReportt__init__tselfttypetdate(RWRXRY((RRVscCs3ti|}|oddi|SndSdS(sReturn a string suitable for appending to Package:/Dependencies: fields. If package has only unmodified files, return the empty string. If not, return ' [modified: ...]' with a list of modified files.s [modified: %s]t RNN(Rtget_modified_filesR tmodtjoin(RWR R\((Rt_pkg_modified_suffixs c Cs%|p&ti|d}|pdSq-nd|ti||i|f|dst ProcStatuss isName:t ProcCmdlinets/bin/s/sbin/s /usr/bin/s /usr/sbin/it-t.tProcCwdtInterpreterPathcCsti|tiS(N(RztaccessRstR_OK(Rs((RRsi(RWR<RztpathtbasenameRtfiltert interpretersR=Rt splitlinestltsplittkRkR tcmdargstbindirstlent startswithR]RRtrealpathR~Rstargvexes( RWRRRRRRkRRsR~R((RRt_check_interpretedsH  ' $%  50cCs9ddddddddd d d d d ddddg|}|pti}nt|}ytid|d|d.py and has to contain a function 'add_info(report)' that takes and modifies a Report.R`s%s/%s.pyitadd_infoRas%s/source_%s.pyN(tsymbRWR<Rtexecfilet _hook_dirR(RWR((Rtadd_hooks_infos%%cCs|idpt|did}y#tid||fi}Wn dSnXyt i i i|}Wntj o dSnXx5|idD]$}t||}|o|SqqWdS(sCheck bug patterns at baseurl/packagename.xml, return bug URL on match or None otherwise. The pattern file must be valid XML and has the following syntax: root element := patterns := * pattern := regular expression* + For example: ba.*r write_(hello|goodbye) ^\S* 1-2$ R`is %s/%s.xmlR:N(RWR<RRR turllibturlopentbaseurlRtpatternsR=R@RAtminidomt parseStringt ExpatErrortgetElementsByTagNameR:RMR(RWRR R:RARR((Rtsearch_bug_patternss"#  cCstiit}ti|ti ptii|djo"ti i i ddd}nKyti i i|}Wn.tj o"}tdtt|fnX|iit|i|S(sRead ignore list XML file and return a DOM tree, or an empty DOM tree if file does not exist. Raises ValueError if the file exists but is invalid XML.itapports%s has invalid format: %sN(RzRt expandusert _ignore_filetifpathRRtgetsizeR@RAtgetDOMImplementationtcreateDocumentR=RtparseRRR RtdocumentElementRGRR(RWRRAR((Rt_get_ignore_doms0"  cCs|idpt|i}y tti|di}Wnt j o t SnXxY|i dD]H}|id|djo(t|id|jotSqqmqmWt S(sCheck ~/.apport-ignore.xml (in the real UID's home) if the current report should not be presented to the user. This requires the ExecutablePath attribute. Function can throw a ValueError if the file has an invalid format.R_tignoretprogramtmtimeN(RWR<RRRAtfloatRztstattst_mtimet cur_mtimeRRRRt getAttributeR/(RWRARR((Rt check_ignoreds   cCs |idpt|i}ttti|di }x|i dD]5}|i d|djo|id|PqUqUW|id}|id|d|id||ii||ittiitddddd |id S( sAdd a ignore list entry for this report to ~/.apport-ignore.xml, so that future reports for this ExecutablePath are not presented to the user any more. Function can throw a ValueError if the file already exists and has an invalid format.R_RRRtwt addindents tnewls N(RWR<RRRARRRzRRRRRRt setAttributet createElementRRt appendChildtwritexmlRRRRRP(RWRRARR((Rt mark_ignores  " (t__name__t __module__t__doc__R=RVR^RlRvRRRRRRRRR(((RRSs  *  56 L  )  t_ApportReportTestcBstZdZdZdZdZdZddZdZ dZ d Z d Z d Z d Zd ZRS(NcCsytid}tid}t}|it|i d|i d|i |dd|i |i |dd|i d||djt}|it |i d |d <|i |i |dd|i |i |dd|i d||dj|i d |dj|i |id t}d |d <|i |i |id dS(sTest add_package_info().Rtlibc6tnonexistant_packageR`sbash Raslibc6 Rcs /bin/bashR_s Rbs /nonexistingN(RRt bashversiont libcversionRStprRWt assertRaisesR Rlt assertEqualRtassert_tKeyErrorR<(RWRRR((Rttest_add_package_info5s,        cCset}|i|i|did|it|dtdj|i|ddS(sTest add_os_info().RptLinuxRnRNRqN(RSRRvRWRRRX(RWR((Rttest_add_os_infoUs   #cCst}|i|i|idx7|diD]%}|iti |i djq:W|iti t i i|djdS(sTest add_user_info().RwiN(RSRRRWRR<RtgRtgetgrnamtgr_gidtgetgrgidRztgetgidtgr_name(RWRR ((Rttest_add_user_info^s  #c Cstiidp tdtiidp tdtiidp tdt}|i|it ddd dgi t |i d |id tid|dj|id|dj|id|djt}|id dg|id|dj|id tid|djti djp tdt}|i t|id|id|dj|d|i|did|d|i|id tidddddgdtidtidtidt}|iptx,td|iiptidq+Wt}|id |i|id!|i|d d"|i|d#d$|i|id |id$|dj|id%|djtiid&p td'tid(gdtidt}|iptx,td|iiptidq?Wt}|id |i|id)|i|id|i d|i|d#tii!d&tid*d+gdtidt}|iptx,td|iiptidqWt}|id |i|id!|i|d#d*|i|dtii!d&|id%|djt"i#\}}ti&|d,ti'|ti(|d-ti|gdtidtidt}|iptx,td|iiptidq+Wt}|id |i|id!ti)||i|d#||id.|dj|id.|dj|id%|dj|i t|i|id/S(0sTest add_proc_info().Rsplease set $LANG for this testtUSERsplease set $USER for this testtPWDs$PWD is not setRRRsreport has required fieldssLANG=RsPWD=is3please do not run this test as root for this check.itinitRsError:Rtcats/foo bars\hs\ \RtstdinR(R)R*s/proc/%i/cmdlinef0.10000000000000001Rs scat /foo\ bar \\h \\\ \\ -R_s/bin/cats[stack]s/bin/shs+/bin/sh needs to be a symlink for this testRsexit s /bin/zgreptfoos2#!/usr/bin/python import sys sys.stdin.readline() itpythonN(*RztenvironR<RRSRRRWRRhtissubsettkeysR{RRRR+R,R.R/RsRRRttimetsleepR1Rt assertTrueRtislinktfailIfRRRRRt testscriptRRtchmodRP(RWRRsRR6((Rttest_add_proc_infojs  0" " !     "          cCsti}t}d|d/dev/nulliiRFs-nR(s/bin/shRR_RNslibc.soR(RRRtcoredumptfd2tscriptRzRRRR7R+RLRR.RSRRRPRWRQR(RWRRYRWRXR((Rttest_add_gdb_info_scripts*         cCsrd$}zLti}ttii|ddidttii|ddidttii|ddidt }d|d ba.*r write_(hello|goodbye) ^\S* 1-2$ s coreutils.xmls ^1$ * s invalid.xmls! sbash 1-2R`tbazaartFoos coreutils 1t1tBars invalid 1shttps://launchpad.net/bugs/1t write_goodbyeshttps://launchpad.net/bugs/2shttps://launchpad.net/bugs/3s bash 1-21s$does not match on wrong bash versiontzzs!does not match on wrong Foo valuet11s!does not match on wrong Bar values!does not match on nonexisting keysgracefully handles invalid XMLsother 2s/gracefully handles nonexisting package XML filesfile:///nonexisting/directory/s(gracefully handles nonexisting base pathshttp://security.ubuntu.com/s1gracefully handles base path without bug patternsshttp://nonexisting.domain/s)gracefully handles nonexisting URL domainN(R=tpdirRRJRRzRR]RRStr_basht r_coreutilst r_invalidRWRRRNRO(RWRbReRdRc((Rttest_search_bug_patternssZ % % %              c Cst}tiazxttiitddidt }|i t |it }d|d<|i|it|itdddgdt }d |d<|i|it|itdddgdt }d |d<|i|it|itdddd d gd|i|d d |i|d dt }d|d<|i|it|itdddd d gd|i|d d |i|d dttiitddidt }d |d Martin Pitt This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. See http://www.gnu.org/copyleft/gpl.html for the full text of the license. NcCsdk}dk}z|tfjodSndkl}dk} dk}dk }|i i }t iit iit itid}t i|t i pt ii| odSn|} |i|||d| | ii|d<|i||dTest that interactive Python sessions never generate a report.s/tmps /usr/locals/usrtpythontstdinRARBsraise ValueErroritt ValueErrorN(s/tmps /usr/locals/usr(RRitorig_cwdtdtchdirRORPRQRRRStoutRTRUtAssertionErrorR:Rj(R:RpRTRoRRRr((R4ttest_interactives  c Cstidtii\}}tii ti i } d }zti|dti|ti|dtii| o| d}ti| |nti i}||d<|id }ti|ddgdtid ti}|id }|i|id d |i d |jWd ti!|tii| oti!| n|oti|| nXtii"}d }z|it%|dWd x|D]}ti!|qWXd S(s9Test that the Python crash hook respects the ignore list.R>sT#!/usr/bin/python def func(x): raise Exception, 'This should happen.' func(42) is .apporttestRR?R@RARBis4crashing test python program exits with failure codesException: This should happen.Ni(&RRKRR&RLRMRNRRt expanduserRt _ignore_filetifpathRZtorig_ignore_fileR1R2R0texiststrenameRRbt mark_ignoreRORPRQRRRSRTR:R;RURVRWRXRYRR[( R:RRTRNRYRRRbRMRxRw((R4t test_ignoringsH      (t__name__t __module__R=RhRjRtR|(((R4R9\s   4 (t__doc__RRR5R7R}tunittestRROtos.pathR\R RR_tTestCaseR9tmain( R\RRRORR_R7RR5R9R((R4t?s   < -c@sdZdgZdkZgZdZdZeedoeeinee_edjoVdZ dZ dd Z ee ee d ee d d ee d ndS(s atexit.py - allow programmer to define multiple exit functions to be executed upon normal program termination. One public function, register, is defined. tregisterNcCsd}xto~ti\}}}y|||Wq tj oti}q dk }ti dIJ|i ti}q Xq W|dj o|d|d|dndS(srun any registered exit functions _exithandlers is traversed in reverse order so functions are executed last in, first out. NsError in atexit._run_exitfuncs:iii( tNonetexc_infot _exithandlerstpoptfuncttargstkargst SystemExittsyst tracebacktstderrt print_exc(RR RRR((t/usr/lib/python2.4/atexit.pyt_run_exitfuncs s     cOsti|||fdS(sregister a function to be executed upon normal program termination func - function to be called at exit targs - optional arguments to pass to func kargs - optional keyword arguments to pass to func N(RtappendRRR(RRR((R R%stexitfunct__main__cCs dGHdS(Ns running x1((((R tx14scCsd|fGHdS(Nsrunning x2(%r)(tn(R((R tx26scCsd||fGHdS(Nsrunning x3(%r, kwd=%r)(Rtkwd(RR((R tx38si itbars no kwd args( t__doc__t__all__R RRRthasattrRt__name__RRRR(RRRRR RRR((R t?s            c@sdZdkZdkZdkZdddddddd d d d d ddgZgZedD]Zeeeqb[Z dZ dZ e dZ e dZdZdZdZdZhdd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX7}||d@d>7}|i t|d?t|d ?d @t|d?d @t|d ?t|d ?d @t|d ?d @t|d?t|d @gqUWti|}|djo|d dSnX|d jo|d dSn;|djo|d dSn|djo|d dSn|S(scEncode a string using Base32. s is the string to encode. The encoded string is returned. itis!HHBiiii iii iiis======is====is===iit=N(tpartstdivmodtlenRtquantatleftovertrangetitstructtunpacktc1tc2tc3textendt_b32tabt EMPTYSTRINGRR( RRMRRGRJRQRRRKRP((RRs, .y     c Cs'tt|d\}}|otdn|o%t|hdd<d|<}n|o|i }nd} t i d|} | o5t| id} | djo|| }qng}d}d } x|D]}ti|}|djotd n|t|| >7}| d 8} | djo*|itid |d}d } qqWtid |} | djo d } ny| djo| d } n^| djo| d } nC| djo| d } n(| djo| d } n td|i| ti|S(sGDecode a Base32 encoded string. s is the string to decode. Optional casefold is a flag specifying whether a lowercase alphabet is acceptable as input. For security purposes, the default is False. RFC 3548 allows for optional mapping of the digit 0 (zero) to the letter O (oh), and for optional mapping of the digit 1 (one) to either the letter I (eye) or letter L (el). The optional argument map01 when not None, specifies which letter the digit 1 should be mapped to (when map01 is not None, the digit 0 is always mapped to the letter O). For security purposes the default is None, so that 0 and 1 are not allowed in the input. The decoded string is returned. A TypeError is raised if s were incorrectly padded or if there are non-alphabet characters present in the string. isIncorrect paddingt0R:t1is(?P[=]*)$tpadi#sNon-base32 digit foundis%010xRiiiiiiiiN(RHRIRRJRKR$tmap01RtcasefoldtuppertpadcharstretsearchtmotgroupRGtacctshifttct_b32revtgettvalR tappendRt unhexlifytlastRUR( RRZRYRfRGRJRKRaRcRiR\RbR_((RRsT%            cCsti|iS(scEncode a string using Base16. s is the string to encode. The encoded string is returned. N(RthexlifyRR[(R((RRscCsG|o|i}ntid|otdnti|S(swDecode a Base16 encoded string. s is the string to decode. Optional casefold is a flag specifying whether a lowercase alphabet is acceptable as input. For security purposes, the default is False. The decoded string is returned. A TypeError is raised if s were incorrectly padded or if there are non-alphabet characters present in the string. s [^0-9A-F]sNon-base16 digit foundN(RZRR[R]R^R$RRh(RRZ((RR s iLcCsxto|it}|pPnxGt|tjo3|itt|}|pPn||7}q(Wti|}|i |qWdS(sEncode a file.N( tTruetinputtreadt MAXBINSIZERRItnsRRtlinetoutputtwrite(RlRqRRpRo((RRscCsGx@to8|i}|pPnti|}|i|qWdS(sDecode a file.N( RkRltreadlineRpRR!RRqRr(RlRqRRp((RR,s cCs]g}xGtdt|tD]-}|||t!}|iti |qWdi |S(sEncode a string.iRN( tpiecesRLRIRRnRMtchunkRgRRR(RRMRuRt((RR6scCs ti|S(sDecode a string.N(RR!R(R((RR?scCsLdk}dk}y#|i|idd\}}WnF|ij o7}|i|_|GHd|idGH|i dnXt }xu|D]m\}}|djo t }n|djo t}n|d jo t}n|d jotdSqqW|o2|dd jo!|t|dd |in||i|idS( sSmall test programNitdeutsusage: %s [-d|-e|-u|-t] [file|-] -d, -u: decode -e: encode (default) -t: encode and decode string 'Aladdin:open sesame'iis-es-ds-us-tt-trb(tsystgetopttargvtoptstargsterrorR#tstderrtstdouttexitRtfunctotaRttest1topentstdin(RR}RRyRR#RzR|((RttestFs.#      !cCs5d}t|}t|}|Gt|G|GHdS(NsAladdin:open sesame(ts0Rts1Rts2trepr(RRR((RR_s  t__main__(*t__doc__R]RNRt__all__t_[1]RLt_xtchrRRURR RRR R R R t _b32alphabetRRTtsortRRtdicttlongRdRtFalseRRR t MAXLINESIZERnRRRRRRt__name__( RR R RdRRTRRnRNRRRR RR]RRRRRRRR RRR RRURRRR((Rt?sB   0-     '  '? *J       c@sdZdkZdkZdkZdddgZdefdYZdfdYZdZdfdYZ d Z d Z d efd YZ d Z dZdZdS(sDebugger basicsNtBdbQuittBdbt BreakpointcBstZdZRS(sException to give up completely(t__name__t __module__t__doc__(((t/usr/lib/python2.4/bdb.pyR s cBsvtZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZedZdZdZdeedZdZdZdZdZdZdZ dZ!d Z"d!Z#d"d#Z$eed$Z%eed%Z&d&Z'd'Z(RS((sGeneric Python debugger base class. This class takes care of details of the trace facility; a derived class should implement user interaction. The standard debugger class (pdb.Pdb) is an example. cCsh|_h|_dS(N(tselftbreakstfncache(R((Rt__init__s cCsv|d|dd!djo|Sn|ii|}|p5tii|}tii|}||i|( tfilenameRR tgettcanonictostpathtabspathtnormcase(RR R((RRscCs;dk}|id|_d|_d|_d|_dS(Ni(t linecachet checkcachetNoneRtbotframet stopframet returnframetquitting(RR((Rtreset$s      cCs|iodSn|djo|i|Sn|djo|i||Sn|djo|i||Sn|djo|i||Sn|djo |i Sn|djo |i Sn|djo |i SndGt |GH|i S( Ntlinetcalltreturnt exceptiontc_callt c_exceptiontc_returns*bdb.Bdb.dispatch: unknown debugging event:( RRteventt dispatch_linetframet dispatch_calltargtdispatch_returntdispatch_exceptionttrace_dispatchtrepr(RR%R#R'((RR*,s$           cCsL|i|p|i|o%|i||io tqEn|iS(N(Rt stop_hereR%t break_heret user_lineRRR*(RR%((RR$@s    cCsz|idjo|i|_|iSn|i|p |i|pdSn|i|||i o t n|iS(N( RRRR%tf_backR*R,tbreak_anywheret user_callR'RR(RR%R'((RR&Fs    cCsO|i|p||ijo(|i|||io tqHn|iS(N( RR,R%Rt user_returnR'RRR*(RR%R'((RR(Ss   cCs?|i|o(|i|||io tq8n|iS(N(RR,R%tuser_exceptionR'RRR*(RR%R'((RR)Ys  cCsb||ijotSnxC|dj o5||ij o%||ijotSn|i}qWtS(N(R%RRtTrueRRR/tFalse(RR%((RR,cscCs|i|ii}||ijotSn|i}||i|jo,|ii }||i|jotSqvnt |||\}}|o?|i|_|o$|io|it|intSntSdS(N(RRR%tf_codet co_filenameR RR5tf_linenotlinenotco_firstlinenot effectivetbptflagtnumbert currentbpt temporarytdo_cleartstrR4(RR%R R=R<R9((RR-ns    cCs tddS(Ns)subclass of bdb must implement do_clear()(tNotImplementedError(RR'((RRAscCs|ii|i|iiS(N(RRthas_keyRR%R6R7(RR%((RR0scCsdS(snThis method is called when there is the remote possibility that we ever need to stop in this function.N((RR%t argument_list((RR1scCsdS(s9This method is called when we stop or break at this line.N((RR%((RR.scCsdS(s5This method is called when a return trap is set here.N((RR%t return_value((RR2scCs|\}}}dS(smThis method is called if an exception occurs, but only if we are to stop at or just below this level.N(texc_typet exc_valuet exc_traceback(RR%t.4RGRHRI((RR3scCsd|_d|_d|_dS(sStop after one line of code.iN(RRRRR(R((Rtset_steps  cCs||_d|_d|_dS(s2Stop on the next line in or below the given frame.iN(R%RRRRR(RR%((Rtset_nexts  cCs"|i|_||_d|_dS(s)Stop when returning from the given frame.iN(R%R/RRRR(RR%((Rt set_returns  cCsu|djotii}n|ix*|o"|i|_||_ |i}q-W|i ti |idS(spStart debugging from `frame`. If frame is not specified, debugging starts from caller's frame. N( R%Rtsyst _getframeR/RRR*tf_traceRRKtsettrace(RR%((Rt set_traces     cCsz|i|_d|_d|_|ipNtidti i }x/|o#||ij o|` |i }qGWndS(Ni( RRRRRRRRNRQROR/R%RP(RR%((Rt set_continues     cCs/|i|_d|_d|_tiddS(Ni(RRRRRRRNRQ(R((Rtset_quits   ic Cs|i|}dk}|i||} | pd||fSn||ijog|i|Rt bpbynumberR<t IndexErrorRR^tfileR(RR'R>R<((Rtclear_bpbynumbers   cCs|i|}||ijo d|SnxC|i|D]4}ti||f}x|D]}|i qYWq9W|i|=dS(NsThere are no breakpoints in %s( RRR RRRR[tblistR<R\(RR RdR<R((Rtclear_all_file_breaks s cCsH|ipdSnx&tiD]}|o|iqqWh|_dS(NsThere are no breakpoints(RRRR`R<R\(RR<((Rtclear_all_breakss  cCs0|i|}||ijo||i|jS(N(RRR RR9(RR R9((Rt get_breakscCsK|i|}||ijo(||i|joti||fpgS(N(RRR RR9RR[(RR R9((Rt get_breaks!scCs6|i|}||ijo|i|SngSdS(N(RRR R(RR ((Rtget_file_breaks'scCs|iS(N(RR(R((Rtget_all_breaks.scCsg}|o|i|jo |i}nxF|dj o8|i||if||i joPn|i }q-W|i t dt |d}x4|dj o&|i|i|if|i}qW||fS(Nii(tstackttttb_frametfttb_nextRRWR8RRR/treversetmaxtlentit tb_lineno(RRnRlRsRk((Rt get_stack4s     s: c Cs0dk}dk}|\} } |i| ii}d|| f}| ii o|| ii }n |d}d| i jo| i d}nd}|o||i|}n |d}d| i jo.| i d}|d}||i|}n|i|| } | o||| i}n|S(Ns%s(%r)st__args__s()t __return__s->(RR+t frame_linenoR%R9RRR6R7R tstco_nametf_localstargsRtrvRURtlprefixtstrip( RRxR~R|R+R RRyR}RR%R9((Rtformat_stack_entryFs*      cBs|djodk}|i}n|djo |}n|iei|i e |e i p|d}nz(y|||UWnej onXWdd|_eidXdS(Ns i(tglobalsRt__main__t__dict__tlocalsRRRNRQR*t isinstancetcmdttypestCodeTypeRR(RRRRR((Rtrunbs"        cCs|djodk}|i}n|djo |}n|iti|i t |t i p|d}nz.yt|||SWntj onXWdd|_tidXdS(Ns i(RRRRRRRRNRQR*RtexprRRtevalRR(RRRRR((Rtrunevalus"        cCs|i|||dS(N(RRRRR(RRRR((RtrunctxscOsk|iti|id}z-y|||}Wnt j onXWdd|_ tidX|S(Ni( RRRNRQR*RtrestfuncR|tkwdsRR(RRR|RR((Rtruncalls   ()RRRR RRR*R$R&R(R)R,R-RAR0R1R.R2R3RKRLRMRRRRSRTRZR^RcReRfRgRhRiRjRuRRRRR(((RR sL                           cCstidS(N(RRR(((RRRscBsYtZdZdZhZegZdeedZdZdZ dZ dZ RS(sBreakpoint class Implements temporary breakpoints, ignore counts, disabling and (re)-enabling, and conditionals. Breakpoints are indexed by number through bpbynumber and by the file,line tuple using bplist. The former points to a single instance of class Breakpoint. The latter points to a list of such instances since there may be more than one breakpoint per line. iicCs||_d|_||_||_||_||_d|_d|_ d|_ t i |_ t i dt _ |ii||ii||fo|i||fi|n|g|i||fR`RWR[RD(RRbRR@RXRY((RR s          cCsV|i|if}d|i|i<|i|i||i|p|i|=ndS(N( RRbRtindexRR`R>R[R](RR((RR\s cCs d|_dS(Ni(RR(R((RtenablescCs d|_dS(Ni(RR(R((RtdisablescCs|io d}nd}|io|d}n |d}d|i||i|ifGH|iod|ifGHn|iod|iGHn|i o6|i djo d }nd }d |i |fGHndS( Nsdel skeep syes sno s%-4dbreakpoint %s at %s:%ds stop only if %ss ignore next %d hitsiRyts! breakpoint already hit %d time%s( RR@tdispRR>RbRRXRRtss(RRR((Rtbpprints         ( RRRRR[RR`R R\RRR(((RRs     cCs|ip#|i|ijotSntSn|ii|ijotSn|i p|i|_ n|i |ijotSntS(s;Check whether we should break here because of `b.funcname`.N( tbRYRR%R8R5R4R6RzR(RR%((Rt checkfuncnames  cCs*ti||f}xtdt|D]}||}|i djoq)nt ||pq)n|i d|_ |i p5|idjo|id|_q)q"|dfSq)yXt|i |i|i}|o2|idjo|id|_q |dfSnWq)|dfSq)Xq)WdS(sDetermine which breakpoint for this file:line is to be acted upon. Called only if we know there is a bpt at this location. Returns breakpoint that was triggered and a flag that indicates if it is ok to delete a temporary bp. iiN(NN(RR[RbRt possiblestrangeRrRsRRRR%RRXRRt f_globalsR{tvalR(RbRR%RRRsR((RR;s2   tTdbcBs,tZdZdZdZdZRS(NcCs.|ii}|p d}ndG|G|GHdS(Ns???s+++ call(R%R6RztnameR|(RR%R|R((RR1Es  cCsvdk}|ii}|p d}n|i|ii}|i ||i }dG|G|i G|GdG|i GHdS(Ns???s+++t:( RR%R6RzRRRR7tfnRUR8RR(RR%RRRR((RR.Is   cCs dG|GHdS(Ns +++ return(tretval(RR%R((RR2PscCsdG|GH|idS(Ns +++ exception(t exc_stuffRRS(RR%R((RR3Rs (RRR1R.R2R3(((RRDs   cCs*dG|GdGHt|d}dG|GHdS(Nsfoo(t)i s bar returned(tntbartx(RR((RtfooVs cCsdG|GdGH|dS(Nsbar(Ri(ta(R((RR[s cCst}|iddS(Nsimport bdb; bdb.foo(10)(RRlR(Rl((Rttest_s (RRNRRt__all__t ExceptionRRRRRRR;RRRR(RR;RRRRRRRNRRRRRR((Rt?s    R  5  c@sdZdddZeZdddZeZdddZdddZy/dklZlZlZlZlZlZWne j onXdS(sBisection algorithms.icCsy|djot|}nxE||jo7||d}|||jo |}q |d}q W|i||dS(sInsert item x in list a, and keep it sorted assuming a is sorted. If x is already in a, insert it to the right of the rightmost x. Optional args lo (default 0) and hi (default len(a)) bound the slice of a to be searched. iiN(thitNonetlentatlotmidtxtinsert(RRRRR((t/usr/lib/python2.4/bisect.pyt insort_rights   cCsi|djot|}nxE||jo7||d}|||jo |}q |d}q W|S(srReturn the index where to insert item x in list a, assuming a is sorted. The return value i is such that all e in a[:i] have e <= x, and all e in a[i:] have e > x. So if x already appears in the list, i points just beyond the rightmost x already there. Optional args lo (default 0) and hi (default len(a)) bound the slice of a to be searched. iiN(RRRRRRR(RRRRR((Rt bisect_rights    cCsy|djot|}nxE||jo7||d}|||jo|d}q |}q W|i||dS(sInsert item x in list a, and keep it sorted assuming a is sorted. If x is already in a, insert it to the left of the leftmost x. Optional args lo (default 0) and hi (default len(a)) bound the slice of a to be searched. iiN(RRRRRRRR(RRRRR((Rt insort_left+s   cCsi|djot|}nxE||jo7||d}|||jo|d}q |}q W|S(sqReturn the index where to insert item x in list a, assuming a is sorted. The return value i is such that all e in a[:i] have e < x, and all e in a[i:] have e >= x. So if x already appears in the list, i points just before the leftmost x already there. Optional args lo (default 0) and hi (default len(a)) bound the slice of a to be searched. iiN(RRRRRRR(RRRRR((Rt bisect_left=s    (s bisect_rights bisect_lefts insort_lefts insort_rightsinsortsbisectN( t__doc__RR tinsortR tbisectR R t_bisectt ImportError(R RR RR R ((Rt?s/c@sdZdkZdddddddd d d d d ddddddgZeZdZdZdddddddddddddg ZdfdYZdfdYZ e dZ e dZ ed Z ed!Z ed"\ZZZZZZZdad#Zd$Zd%Zd&Zd'Zd(Zd)Zd*Zd+Zd,Z ddd-Z!ddd.Z"d"d/dZ#d0Z$e#e$d1Z%e#e$d2Z&dde$d3Z'dde$d4Z(d5Z)ei*e)ddi+Z,d6Z-dS(7s$Calendar printing functions Note when comparing these calendars to the ones printed by cal(1): By default, these calendars have Monday as the first day of the week, and Sunday as the last (the European convention). Use setfirstweekday() to set the first day of the week (0=Monday, 6=Sunday).Nterrortsetfirstweekdayt firstweekdaytisleaptleapdaystweekdayt monthranget monthcalendartprmonthtmonthtprcaltcalendarttimegmt month_namet month_abbrtday_nametday_abbrt weekheaderiiiiiit_localized_monthcBsstZgZedD]#Zeeideddiq[Zei dddZ dZ dZ RS( Ni iiicCsdS(Nt((tx((t/usr/lib/python2.4/calendar.pyt"scCs ||_dS(N(tformattself(RR((Rt__init__$scCsZ|i|}t|to,g}|D]}|||iq(~Sn||iSdS(N( Rt_monthstitfuncst isinstancetslicet_[1]tfR(RRRR R((Rt __getitem__'s ,cCsdS(Ni ((R((Rt__len__.s( t__name__t __module__RtrangeRtdatetimetdatetstrftimeRtinsertRR!R"(((RRs =  t_localized_daycBs`tZgZedD]#Zeeiddediq[ZdZ dZ dZ RS(NiiicCs ||_dS(N(RR(RR((RR6scCsZ|i|}t|to,g}|D]}|||iq(~Sn||iSdS(N( Rt_daysRRRRRR R(RRRR R((RR!9s ,cCsdS(Ni((R((RR"@s( R#R$RR%RR&R'R(R+RR!R"(((RR*1s=  s%As%as%Bs%bicCstS(N(t _firstweekday(((RRPscCs5t|jo tjnp tdn|adS(s4Set weekday (Monday=0, Sunday=6) to start each week.s4bad weekday number; must be 0 (Monday) to 6 (Sunday)N(tMONDAYRtSUNDAYt ValueErrorR,(R((RRSs  cCs0|ddjo|ddjp|ddjS(s.Return 1 for leap years, 0 for non-leap years.iiidiN(tyear(R0((RR[scCsD|d8}|d8}|d|d|d|d|d|dS(sFReturn number of leap years in range [y1, y2). Assume y1 <= y2.iiidiN(ty1ty2(R1R2((RR_s  cCsti|||iS(sTReturn weekday (0-6 ~ Mon-Sun) for year (1970-...), month (1-12), day (1-31).N(R&R'R0R tdayR(R0R R3((RRfscCshd|jo djnp tdnt||d}t||tjo t|}||fS(sQReturn weekday (0-6 ~ Mon-Sun) and number of days (28-31) for year, month.ii sbad month numberN( R R/RR0tday1tmdaystFebruaryRtndays(R0R R4R7((RRks  !c Cst||\}}g}td}t|ddd}x||josdddddddg}xD|D]<}d|jo |jno|||((RtprweekscCs[g}xE|D]=}|djo d}n d|}|i|i|q Wdi|S(s/Returns a single week in a string (no newline).iRs%2it N(tdaysR=R3tsR;tcenterR>tjoin(R=R>RBRAR3((RR<s   cCsp|djo t}nt}g}x=tttdD](}|i||d| i |q7Wdi |S(sReturn a header for a week.i iR@N( R>RtnamesRRAR%R,RR;RCRD(R>RRARE((RRs  &cCst||||GdS(sPrint a month's calendar.N(R ttheyeartthemonthtwtl(RFRGRHRI((RRscCstd|}td|}dt||fid|ddid|t|id|}x8t ||D]'}|t ||id|}q}W|| dS(s.Return a month's calendar string (multi-line).iis%s %ris N( tmaxRHRIR RGRFRCtrstripRRBRtaweekR<(RFRGRHRIRLRB((RR sO%iicCst|||||GHdS(s-Prints 3-column formatting for year calendarsN(tformat3cstringtatbtctcolwidthtspacing(RNRORPRQRR((Rtformat3cscCs7|i|d||i|d||i|S(sEReturns a string formatted from 3 strings, centered within 3 columns.R@N(RNRCRQRRRORP(RNRORPRQRR((RRMscCst||||GdS(sPrint a year's calendar.N(R R0RHRIRP(R0RHRIRP((RR sc Cs#td|}td|}td|}|ddd}t|i|d|did|} t |}t |||||i}x{t ttddD]c} | d|t t| t| dt| d||id||d|} g}d}xZt | | dD]E} t|| } t| |jot| }n|i| q'Wxt |D]} g}xL|D]D} | t| jo|idq|it| | |qW| t |d|d|d||id|} q}WqW| | dS( s1Returns a year's calendar as a multi-line string.iiiis i iRN(RJRHRIRPRQtreprR0RCRKRBRtheaderRMR%tJanuarytqR tdatatheighttamonthRtcaltlenR;RtweeksR<(R0RHRIRPRYRURQRXR]RRZRWRBR[((RR s>/ +' #ic Csq|d \}}} }} }ti||di t | d}|d|}|d| }|d|}|S(sBUnrelated but handy function to calculate Unix timestamp from GMT.iiii<N(ttupleR0R R3thourtminutetsecondR&R't toordinalt _EPOCH_ORDRAthourstminutestseconds( R^R_RfRAR RdRaR0ReR3R`((RR s'(.t__doc__R&t__all__R/RRVR6R5RR*RRR RR%R-tTUESDAYt WEDNESDAYtTHURSDAYtFRIDAYtSATURDAYR.R,RRRRRRRR?R<RRR t _colwidtht_spacingRSRMR R tEPOCHR'RbRcR ((R-RRlR.R&R RMR5RoRRmR*RRRhRiRkR RRnRcR<R6RRRVRjRpR?R RRR RRRRR RRS((Rt?sF <-    !          c@sIdZdkZdgZdZeieidZdfdYZdS(s A generic class to build line-oriented command interpreters. Interpreters constructed with this class obey the following conventions: 1. End of file on input is processed as the command 'EOF'. 2. A command is parsed out of each line by collecting the prefix composed of characters in the identchars member. 3. A command `foo' is dispatched to a method 'do_foo()'; the do_ method is passed a single argument consisting of the remainder of the line. 4. Typing an empty line repeats the last command. (Actually, it calls the method `emptyline', which may be overridden in a subclass.) 5. There is a predefined `help' method. Given an argument `topic', it calls the command `help_topic'. With no arguments, it lists all topics with defined help_ functions, broken into up to three topics; documented commands, miscellaneous help topics, and undocumented commands. 6. The command '?' is a synonym for `help'. The command '!' is a synonym for `shell', if a do_shell method exists. 7. If completion is enabled, completing commands will be done automatically, and completing of commands args is done by calling complete_foo() with arguments text, line, begidx, endidx. text is string we are matching against, all returned matches must begin with it. line is the current input line (lstripped), begidx and endidx are the beginning and end indexes of the text being matched, which could be used to provide different completion depending upon which position the argument is in. The `default' method may be overridden to intercept commands for which there is no do_ method. The `completedefault' method may be overridden to intercept completions for commands that have no complete_ method. The data member `self.ruler' sets the character used to draw separator lines in the help messages. If empty, no ruler line is drawn. It defaults to "=". If the value of `self.intro' is nonempty when the cmdloop method is called, it is printed out on interpreter startup. This value may be overridden via an optional argument to the cmdloop() method. The data members `self.doc_header', `self.misc_header', and `self.undoc_header' set the headers used for the help function's listings of documented functions, miscellaneous topics, and undocumented functions respectively. These interpreters use raw_input; thus, if the readline module is loaded, they automatically support Emacs-like command history and editing features. NtCmds(Cmd) t_cBstZdZeZeZdZdZe Z dZ dZ dZ dZdZdZde e d Ze d Zd Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZ dZ!ddZ"RS(sA simple framework for writing line-oriented command interpreters. These are often useful for test harnesses, administrative tools, and prototypes that will later be wrapped in a more sophisticated interface. A Cmd instance or subclass instance is a line-oriented interpreter framework. There is no good reason to instantiate Cmd itself; rather, it's useful as a superclass of an interpreter class you define yourself in order to inherit Cmd's methods and encapsulate action methods. t=ts(Documented commands (type help ):sMiscellaneous help topics:sUndocumented commands:s*** No help on %sittabcCskdk}|dj o ||_n |i|_|dj o ||_n |i|_g|_||_dS(sInstantiate a line-oriented interpreter framework. The optional argument 'completekey' is the readline name of a completion key; it defaults to the Tab key. If completekey is not None and the readline module is available, command completion is done automatically. The optional arguments stdin and stdout specify alternate input and output file objects; if not specified, sys.stdin and sys.stdout are used. N(tsyststdintNonetselftstdouttcmdqueuet completekey(RR RR R((t/usr/lib/python2.4/cmd.pyt__init__Os         cCs|i|iod|ioZy@dk}|i|_|i|i|i |idWqxt j oqxXnzE|dj o ||_ n|i o!|i it|i dnd}x|p|io|iid}n|io3yt|i}Wq}tj o d}q}XnQ|i i|i|i i|ii}t|p d}n |d }|i|}|i|}|i||}qW|iWd|ioA|io7ydk}|i|iWq t j oq XnXdS(sRepeatedly issue a prompt, accept input, parse an initial prefix off the received input, and dispatch to action methods, passing them the remainder of the line as argument. Ns : completes itEOFi(Rtpreloopt use_rawinputR treadlinet get_completert old_completert set_completertcompletetparse_and_bindt ImportErrortintroRR twritetstrtstopR tpoptlinet raw_inputtprompttEOFErrortflushRtlentprecmdtonecmdtpostcmdtpostloop(RRRRR((R tcmdloopfsT      !       cCs|S(sHook method executed just before the command line is interpreted, but after the input prompt is generated and issued. N(R(RR((R R#scCs|S(s?Hook method executed just after a command dispatch is finished.N(R(RRR((R R%scCsdS(s>Hook method executed once when the cmdloop() method is called.N((R((R RscCsdS(sYHook method executed once when the cmdloop() method is about to return. N((R((R R&scCs|i}|pdd|fSnh|ddjod|d}nE|ddjo3t|dod|d}qdd|fSndt|}}x0||jo"|||ijo|d}qW|| ||i}}|||fS( sParse the line into a command name and a string containing the arguments. Returns a tuple containing (command, args, line). 'command' and 'args' may be None if the line couldn't be parsed. it?shelp it!tdo_shellsshell N( RtstripRthasattrRR"titnt identcharstcmdtarg(RRR-R0R.R1((R t parselines  !cCs|i|\}}}|p|iSn|djo|i|Sn||_|djo|i|SnEyt |d|}Wn t j o|i|SnX||SdS(shInterpret the argument as though it had been typed in response to the prompt. This may be overridden, but should not normally need to be; see the precmd() and postcmd() methods for useful execution hooks. The return value is a flag indicating whether interpretation of commands by the interpreter should stop. Rtdo_N( RR2RR0R1t emptylineRtdefaulttlastcmdtgetattrtfunctAttributeError(RRR0R8R1((R R$s    cCs"|io|i|iSndS(sCalled when an empty line is entered in response to the prompt. If this method is not overridden, it repeats the last nonempty command entered. N(RR6R$(R((R R4s cCs|iid|dS(sCalled on an input line when the command prefix is not recognized. If this method is not overridden, it prints an error message and returns. s*** Unknown syntax: %s N(RR RR(RR((R R5scGsgS(sMethod called to complete an input line when no command-specific complete_*() method is available. By default, it returns an empty list. N((Rtignored((R tcompletedefaultscGsGd|}g}|iD]%}|i|o||dqq~S(NR3i(ttexttdotextt_[1]Rt get_namestat startswith(RR<R:R@R>R=((R t completenamess c Cs/|djodk} | i}|i} t|t| }| i|} | i |}| djol|i | \}}} |djo |i}qyt|d|}Wqtj o|i}qXn |i}||| | ||_ny|i|SWntj o dSnXdS(sReturn the next possible completion for 'text'. If a command has not been entered, then complete against command list. Otherwise try to call complete_ to get list of completions. iNRt complete_(tstateRtget_line_buffertoriglinetlstripRR"tstrippedt get_begidxtbegidxt get_endidxtendidxRR2R0targstfooR;tcompfuncR7R9RBR<tcompletion_matchest IndexErrorR( RR<RDRMR0RORFRLRHRJRRNR((R Rs,        cCseg}|ig}xL|oD|id}|io|t|i}n|t|}qW|S(Ni( tnamesRt __class__tclassesRtaclasst __bases__tlisttdir(RRURTRR((R R?s  cGs |i|S(N(RRBRM(RRM((R t complete_help'sc Cs4|oyt|d|} Wntj oyCt|d|i}|o"|iidt |dSnWntj onX|iidt |i |fdSnX| nq|i }g}g}h} x1|D])}|d djod| |d Ns list[i] not a string for i in %ss, is%s iiiRis (RWRR RR>trangeR"R-t isinstanceRt nonstringst TypeErrortjointmaptsizetnrowstncolst colwidthsttotwidthtcoltcolwidthtrowtxtmaxRdt displaywidthttextstljust(RRWRRRxR|R~RRzRyR-R{R>RR}Rt((R Ro_shE#                   (#t__name__t __module__R[tPROMPTRt IDENTCHARSR/RnR6RRReRgRhRjR]RR R'R#R%RR&R2R$R4R5R;RBRR?RYRkRfRo(((R R7s<  4          - (R[tstringt__all__Rt ascii_letterstdigitsRR(RRRRR((R R(.s   c@sdZdkZdkZy dkTWn"ej oZedenXdddddd d d d d ddddddddddddddgZdZdZ Z dZ Z dZ d Zeid!joe ZZe Zne ZZeZe Ze Ze ZeZd"fd#YZd$efd%YZd&efd'YZd(fd)YZd*fd+YZd,dd-d.d/Zdd-d0Zd1Zd2Z d3Z!d4Z"d5Z#d6Z$y@e%d-Z&e%d7Z'e%d8Z(e%d9Z)e%d:Z*Wn1e+j o%dZ&dZ'dZ(dZ)dZ*nXd;Z,e,o dk-Z-ne.d<jo4eei/d=d>e_/eei0d>d=e_0ndS(?s codecs -- Python Codec Registry, API and helpers. Written by Marc-Andre Lemburg (mal@lemburg.com). (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. N(t*s%Failed to load the builtin codecs: %stregistertlookuptopent EncodedFiletBOMtBOM_BEtBOM_LEtBOM32_BEtBOM32_LEtBOM64_BEtBOM64_LEtBOM_UTF8t BOM_UTF16t BOM_UTF16_LEt BOM_UTF16_BEt BOM_UTF32t BOM_UTF32_LEt BOM_UTF32_BEt strict_errorst ignore_errorstreplace_errorstxmlcharrefreplace_errorstregister_errort lookup_errorssssttlittletCodeccBs&tZdZddZddZRS(s Defines the interface for stateless encoders/decoders. The .encode()/.decode() methods may use different error handling schemes by providing the errors argument. These string values are predefined: 'strict' - raise a ValueError error (or a subclass) 'ignore' - ignore the character and continue with the next 'replace' - replace with a suitable replacement character; Python will use the official U+FFFD REPLACEMENT CHARACTER for the builtin Unicode codecs on decoding and '?' on encoding. 'xmlcharrefreplace' - Replace with the appropriate XML character reference (only for encoding). 'backslashreplace' - Replace with backslashed escape sequences (only for encoding). The set of allowed values can be extended via register_error. tstrictcCs tdS(s+ Encodes the object input and returns a tuple (output object, length consumed). errors defines the error handling to apply. It defaults to 'strict' handling. The method may not store state in the Codec instance. Use StreamCodec for codecs which have to keep state in order to make encoding/decoding efficient. The encoder must be able to handle zero length input and return an empty object of the output object type in this situation. N(tNotImplementedError(tselftinputterrors((t/usr/lib/python2.4/codecs.pytencodebscCs tdS(s Decodes the object input and returns a tuple (output object, length consumed). input must be an object which provides the bf_getreadbuf buffer slot. Python strings, buffer objects and memory mapped files are examples of objects providing this slot. errors defines the error handling to apply. It defaults to 'strict' handling. The method may not store state in the Codec instance. Use StreamCodec for codecs which have to keep state in order to make encoding/decoding efficient. The decoder must be able to handle zero length input and return an empty object of the output object type in this situation. N(R(RRR ((R!tdecodeus(t__name__t __module__t__doc__R"R#(((R!RLs  t StreamWritercBs;tZddZdZdZdZedZRS(NRcCs||_||_dS(s[ Creates a StreamWriter instance. stream must be a file-like object open for writing (binary) data. The StreamWriter may use different error handling schemes by providing the errors keyword argument. These parameters are predefined: 'strict' - raise a ValueError (or a subclass) 'ignore' - ignore the character and continue with the next 'replace'- replace with a suitable replacement character 'xmlcharrefreplace' - Replace with the appropriate XML character reference. 'backslashreplace' - Replace with backslashed escape sequences (only for encoding). The set of allowed parameter values can be extended via register_error. N(tstreamRR (RR(R ((R!t__init__s cCs/|i||i\}}|ii|dS(s> Writes the object's contents encoded to self.stream. N(RR"tobjectR tdatatconsumedR(twrite(RR*R+R,((R!R-scCs|idi|dS(s[ Writes the concatenated list of strings to the stream using .write(). tN(RR-tjointlist(RR0((R!t writelinesscCsdS(s5 Flushes and resets the codec buffers used for keeping state. Calling this method should ensure that the data on the output is put into a clean state, that allows appending of new fresh data without having to rescan the whole stream to recover state. N((R((R!tresets cCs||i|S(s? Inherit all other methods from the underlying stream. N(tgetattrRR(tname(RR4R3((R!t __getattr__s(R$R%R)R-R1R2R3R5(((R!R's     t StreamReadercBstZddZddZddedZdedZdedZ dZ d d Z d Z d Z ed ZRS(NRcCs1||_||_d|_d|_d|_dS(s[ Creates a StreamReader instance. stream must be a file-like object open for reading (binary) data. The StreamReader may use different error handling schemes by providing the errors keyword argument. These parameters are predefined: 'strict' - raise a ValueError (or a subclass) 'ignore' - ignore the character and continue with the next 'replace'- replace with a suitable replacement character; The set of allowed parameter values can be extended via register_error. R.N(R(RR t bytebuffert charbuffertNonet linebuffer(RR(R ((R!R)s     cCs tdS(N(R(RRR ((R!R#sic Cs|io"di|i|_d|_nxjtob|djo?|djo|ioPq~qt|i|joPqnt|i|joPn|djo|i i }n|i i |}|i |}y|i||i\} }Wnntj ob} |oO|i|| i |i\} }| it}t|djoqgqlnX|||_ |i| 7_|pPq/q/W|djo|i}d|_n|i| }|i||_|S(s Decodes data from the stream self.stream and returns the resulting object. chars indicates the number of characters to read from the stream. read() will never return more than chars characters, but it might return less, if there are not enough characters available. size indicates the approximate maximum number of bytes to read from the stream for decoding purposes. The decoder can modify this setting as appropriate. The default value -1 indicates to read and decode as much as possible. size is intended to prevent having to decode huge files in one step. If firstline is true, and a UnicodeDecodeError happens after the first line terminator in the input only the first line will be returned, the rest of the input will be kept until the next call to read(). The method should use a greedy read strategy meaning that it should read as much data as is allowed within the definition of the encoding and the given size, e.g. if optional encoding endings or state markers are available on the stream, these should be read too. R.iiN(RR:R/R8R9tTruetcharstsizetlenR(treadtnewdataR7R+R#R tnewcharst decodedbytestUnicodeDecodeErrortexct firstlinetstartt splitlinestlinestresult( RR=R<RERBR+RHR@RIRARD((R!R?sJ         "       c Csm|iop|id}|id=t|idjo|id|_d |_n|p|itd}n|Sn|pd}d}xt o|i |dt }|o4|ido ||i dddd7}qn||7}|it }|ot|djo|d}|d=t|djo)|d c|i7<||_d |_n|d|i|_|p|itd}nPn|d}|ditd}||jo9di|d|i|_|o |}n|}Pq n| p |d j o+|o| o|itd}nPn|d jo|d 9}qqW|S( s Read one line from the input stream and return the decoded data. size, if given, is passed as size argument to the read() method. iiiHR.REs R=R<ii@iN(RR:tlineR>R8R9tkeependsRGtFalseR=treadsizeR;R?R+tendswithRHt line0withendtline0withoutendR/( RR=RKRORPR+RHRMRJ((R!treadline?s^     $         cCs|i}|i|S(sZ Read all lines available on the input stream and return them as list of lines. Line breaks are implemented using the codec's decoder method and are included in the list entries. sizehint, if given, is ignored since there is no efficient way to finding the true end-of-line. N(RR?R+RGRK(RtsizehintRKR+((R!t readliness  cCsd|_d|_d|_dS(s Resets the codec buffers used for keeping state. Note that no stream repositioning should take place. This method is primarily intended to be able to recover from decoding errors. R.uN(RR7R8R9R:(R((R!R2s  icCs!|i|ii||dS(sp Set the input stream's current position. Resets the codec buffers used for keeping state. N(RR2R(tseektoffsettwhence(RRURV((R!RTs cCs%|i}|o|SntdS(s4 Return the next decoded line from the input stream.N(RRQRJt StopIteration(RRJ((R!tnexts  cCs|S(N(R(R((R!t__iter__scCs||i|S(s? Inherit all other methods from the underlying stream. N(R3RR(R4(RR4R3((R!R5s(R$R%R)R#RLR?R9R;RQRSR2RTRXRYR3R5(((R!R6s  OI   tStreamReaderWritercBs}tZdZdZddZddZedZedZdZ d Z d Z d Z d Z ed ZRS(s StreamReaderWriter instances allow wrapping streams which work in both read and write modes. The design is such that one can use the factory functions returned by the codec.lookup() function to construct the instance. tunknownRcCs:||_||||_||||_||_dS(sR Creates a StreamReaderWriter instance. stream must be a Stream-like object. Reader, Writer must be factory functions or classes providing the StreamReader, StreamWriter interface resp. Error handling is done in the same way as defined for the StreamWriter/Readers. N(R(RtReaderR treadertWritertwriter(RR(R\R^R ((R!R)s  icCs|ii|S(N(RR]R?R=(RR=((R!R?scCs|ii|S(N(RR]RQR=(RR=((R!RQscCs|ii|S(N(RR]RSRR(RRR((R!RSscCs |iiS(s4 Return the next decoded line from the input stream.N(RR]RX(R((R!RXscCs|S(N(R(R((R!RYscCs|ii|S(N(RR_R-R+(RR+((R!R-scCs|ii|S(N(RR_R1R0(RR0((R!R1scCs|ii|iidS(N(RR]R2R_(R((R!R2s cCs||i|S(s? Inherit all other methods from the underlying stream. N(R3RR(R4(RR4R3((R!R5s(R$R%R&tencodingR)R?R9RQRSRXRYR-R1R2R3R5(((R!RZs          t StreamRecodercBstZdZdZdZddZddZedZedZ dZ d Z d Z d Z d Zed ZRS(sE StreamRecoder instances provide a frontend - backend view of encoding data. They use the complete set of APIs returned by the codecs.lookup() function to implement their task. Data written to the stream is first decoded into an intermediate format (which is dependent on the given codec combination) and then written to the stream using an instance of the provided Writer class. In the other direction, data is read from the stream using a Reader instance and then return encoded data to the caller. R[RcCsL||_||_||_||||_||||_||_dS(s Creates a StreamRecoder instance which implements a two-way conversion: encode and decode work on the frontend (the input to .read() and output of .write()) while Reader and Writer work on the backend (reading and writing to the stream). You can use these objects to do transparent direct recodings from e.g. latin-1 to utf-8 and back. stream must be a file-like object. encode, decode must adhere to the Codec interface, Reader, Writer must be factory functions or classes providing the StreamReader, StreamWriter interface resp. encode and decode are needed for the frontend translation, Reader and Writer for the backend translation. Unicode is used as intermediate encoding. Error handling is done in the same way as defined for the StreamWriter/Readers. N( R(RR"R#R\R R]R^R_(RR(R"R#R\R^R ((R!R)s   icCs1|ii|}|i||i\}}|S(N(RR]R?R=R+R"R t bytesencoded(RR=RbR+((R!R??scCsQ|djo|ii}n|ii|}|i||i\}}|S(N( R=R9RR]RQR+R"R Rb(RR=RbR+((R!RQEs  cCs7|ii}|i||i\}}|idS(Ni(RR]R?R+R"R RbRG(RRRR+Rb((R!RSNscCs.|ii}|i||i\}}|S(s4 Return the next decoded line from the input stream.N(RR]RXR+R"R Rb(RRbR+((R!RXTscCs|S(N(R(R((R!RY[scCs+|i||i\}}|ii|S(N(RR#R+R t bytesdecodedR_R-(RR+Rc((R!R-^scCs:di|}|i||i\}}|ii|S(NR.( R/R0R+RR#R RcR_R-(RR0R+Rc((R!R1cscCs|ii|iidS(N(RR]R2R_(R((R!R2is cCs||i|S(s? Inherit all other methods from the underlying stream. N(R3RR(R4(RR4R3((R!R5ns(R$R%R&t data_encodingt file_encodingR)R?R9RQRSRXRYR-R1R2R3R5(((R!Ra s  !       trbRic Cs|dj od|jo|d}nti|||} |djo| Snt|\}}}}t | |||} || _| S(s Open an encoded file using the given mode and return a wrapped version providing transparent encoding/decoding. Note: The wrapped version will only accept the object format defined by the codecs, i.e. Unicode objects for most builtin codecs. Output is also codec dependent and will usually by Unicode as well. Files are always opened in binary mode, even if no binary mode was specified. This is done to avoid data loss due to encodings using 8-bit values. The default file mode is 'rb' meaning to open the file in binary read mode. encoding specifies the encoding which is to be used for the file. errors may be given to define the error handling. It defaults to 'strict' which causes ValueErrors to be raised in case an encoding error occurs. buffering has the same meaning as for the builtin open() API. It defaults to line buffered. The returned wrapped file object provides an extra attribute .encoding which allows querying the used encoding. This attribute is only available if an encoding was specified as parameter. tbN(R`R9tmodet __builtin__Rtfilenamet bufferingtfileRtetdtsrtswRZR tsrw( RjRhR`R RkRmRnRoRpRlRq((R!Rws  c Cst|djo |}nt|d \}}t|d\}}t||||||}||_||_|S(s Return a wrapped version of file which provides transparent encoding translation. Strings written to the wrapped file are interpreted according to the given data_encoding and then written to the original file as string using file_encoding. The intermediate encoding will usually be Unicode but depends on the specified codecs. Strings are read from the file using file_encoding and then passed back to the caller as string using data_encoding. If file_encoding is not given, it defaults to data_encoding. errors may be given to define the error handling. It defaults to 'strict' which causes ValueErrors to be raised in case an encoding error occurs. The returned wrapped file object provides two extra attributes .data_encoding and .file_encoding which reflect the given parameters of the same name. The attributes can be used for introspection by Python programs. iN( ReR9RdRR"R#R\R^RaRlR Ro( RlRdReR RoR^R#R\R"((R!Rs      cCst|dS(s Lookup up the codec for the given encoding and return its encoder function. Raises a LookupError in case the encoding cannot be found. iN(RR`(R`((R!t getencoderscCst|dS(s Lookup up the codec for the given encoding and return its decoder function. Raises a LookupError in case the encoding cannot be found. iN(RR`(R`((R!t getdecoderscCst|dS(s Lookup up the codec for the given encoding and return its StreamReader class or factory function. Raises a LookupError in case the encoding cannot be found. iN(RR`(R`((R!t getreaderscCst|dS(s Lookup up the codec for the given encoding and return its StreamWriter class or factory function. Raises a LookupError in case the encoding cannot be found. iN(RR`(R`((R!t getwriterscCs%h}x|D]}||| dict Return a dictionary where elements of the rng sequence are mapped to themselves. N(trestrngti(RwRxRv((R!tmake_identity_dicts cCsLh}x?|iD]1\}}||jo|||In,'        c @sdZdkZdkZdkZdkZdkZdkZdkZdkl Z y dk Z Wne j odk Z nXdkZdklZeidiZeeiZdZfdZdZdZd d d d d ddgZddddddddddddg ZgZx!eD]Zeieiq(We dZ!e dZ"hde <de <d e <d!e d:Z?d;Z@d<ZAd=ZBd>ZCei$d?ZDd@ZEdAZFdBZGdCZHdDfdEYZIdFfdGYZJdHeJfdIYZKdJZLdKZMdLfdMYZNdNfdOYZOdPePfdQYZQdReOfdSYZRdTkSlTZTlUZUdUkVlWZWdS(VsHTTP cookie handling for web clients. This module has (now fairly distant) origins in Gisle Aas' Perl module HTTP::Cookies, from the libwww-perl library. Docstrings, comments and debug strings in this code refer to the attributes of the HTTP cookie system as cookie-attributes, to distinguish them clearly from Python attributes. Class diagram (note that the classes which do not derive from FileCookieJar are not distributed with the Python standard library, but are available from http://wwwsearch.sf.net/): CookieJar____ / \ FileCookieJar \ / | \ \ MozillaCookieJar | LWPCookieJar \ | | | ---MSIEBase | | / | | | / MSIEDBCookieJar BSDDBCookieJar |/ MSIECookieJar N(s StringTypes(stimegmt cookielibsQa filename was not supplied (nor was the CookieJar instance initialised with one)cCs|tttf}tid}t||ondk}dk }dk }|i }|i d||i}|id|dddS(Niscookielib bug! %st stackleveli(tunmaskedtKeyboardInterruptt SystemExitt MemoryErrortsystexc_infotetypet issubclasstwarningst tracebacktStringIOtft print_exctNonetgetvaluetmsgtwarn(RR R R RRR ((t/usr/lib/python2.4/cookielib.pytreraise_unmasked_exceptions+s  icCs|d \}}}}}}|tjod|jo djnod|jo djnohd|jo djnoJd|jo djno,d|jo djnot|SndSdS( Niii iiii;i=( ttttyeartmonthtmdaythourtmintsect EPOCH_YEARttimegmR(RRRRRRR((Rt_timegm?stMontTuetWedtThutFritSattSuntJantFebtMartAprtMaytJuntJultAugtSeptOcttNovtDeccCs\|djoti}nti|d \}}}}}}d||||||fS(sHReturn a string representing time in seconds since epoch, t. If the function is called without an argument, it will use the current time. The format of the returned string is like "YYYY-MM-DD hh:mm:ssZ", representing Universal Time (UTC, aka GMT). An example of this format is: 1994-11-24 08:49:37Z is%04d-%02d-%02d %02d:%02d:%02dZN( ttRttimetgmtimeRtmonRRRR(R2RRRRRR5((Rt time2isozMs  %cCsn|djoti}nti|d \}}}}}}}dt ||t |d||||fS(sReturn a string representing time in seconds since epoch, t. If the function is called without an argument, it will use the current time. The format of the returned string is like this: Wed, DD-Mon-YYYY HH:MM:SS GMT is"%s %02d-%s-%04d %02d:%02d:%02d GMTiN( R2RR3R4RR5RRRRtwdaytDAYStMONTHS(R2RRRRRR7R5((Rt time2netscape^s  (tGMTtUTCtUTtZs^([-+])?(\d\d?):?(\d\d)?$cCsd}|tjo d}nti|}|oodt|id}|ido!|dt|id}n|iddjo | }qn|S(Niiiii<it-( Rtoffsetttzt UTC_ZONESt TIMEZONE_REtsearchtmtinttgroup(RARER@((Rtoffset_from_tz_stringrs  !c Csyti|id}Wnitj o]yt|} Wntj o dSnXd| jo djno | }qdSnX|djo d}n|djo d}n|djo d}nt|}t|}t|}t|}t|}|djot it i d} | d} |}|| | }| |} t| djo)| djo|d}q|d}qnt|||||||f} | dj oR|djo d}n|i}t|}|djodSn| |} n| S(Nii iiidi2R<(t MONTHS_LOWERtindexR5tlowert ValueErrorRFtimonRthrRRtyrtdayR3t localtimetcur_yrREttmptabsRRAR2tupperRHR@( RPR5RORNRRRARSR@RERMRRR2((Rt _str2timesR               !      sV^[SMTWF][a-z][a-z], (\d\d) ([JFMASOND][a-z][a-z]) (\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$s+^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*s^ (\d\d?) # day (?:\s+|[-\/]) (\w+) # month (?:\s+|[-\/]) (\d+) # year (?: (?:\s+|:) # separator before clock (\d\d?):(\d\d) # hour:min (?::(\d\d))? # optional seconds )? # optional clock \s* ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+)? # timezone \s* (?:\(\w+\))? # ASCII representation of timezone in parens. \s*$c Cs;ti|}|o|i}ti|did}t |d|t |dt |dt |dt |df}t |Sn|i}tid|d}d gd\} }}}}} }ti|}|d j o%|i\} }}}}} }nd St| ||||| |S( sReturns time in seconds since epoch of time represented by a string. Return value is an integer. None is returned if the format of str is unrecognized, the time is outside the representable range, or the timezone string is not recognized. If the string contains no timezone, UTC is assumed. The timezone in the string may be numerical (like "-0800" or "+0100") or a string timezone (like "UTC", "GMT", "BST" or "EST"). Currently, only the timezone strings equivalent to UTC (zero offset) are known to the function. The function loosely parses the following formats: Wed, 09 Feb 1994 22:23:32 GMT -- HTTP format Tuesday, 08-Feb-94 14:15:29 GMT -- old rfc850 HTTP format Tuesday, 08-Feb-1994 14:15:29 GMT -- broken rfc850 HTTP format 09 Feb 1994 22:23:32 GMT -- HTTP format (no weekday) 08-Feb-94 14:15:29 GMT -- rfc850 format (no weekday) 08-Feb-1994 14:15:29 GMT -- broken rfc850 format (no weekday) The parser ignores leading and trailing whitespace. The time may be absent. If the year is given with only 2 digits, the function will select the century that makes the year closest to the current date. iiiiiitiN(tSTRICT_DATE_RERDttextREtgroupstgRIRJRKR5RFtfloatRRtlstript WEEKDAY_REtsubRRPRORNRRRAtLOOSE_HTTP_DATE_RERV( RYRORAR[RRRERNR5RRP((Rt http2times J " %s^ (\d{4}) # year [-\/]? (\d\d?) # numerical month [-\/]? (\d\d?) # day (?: (?:\s+|[-:Tt]) # separator before clock (\d\d?):?(\d\d) # hour:min (?::?(\d\d(?:\.\d*)?))? # optional seconds (and fractional) )? # optional clock \s* ([-+]?\d\d?:?(:?\d\d)? |Z|z)? # timezone (Z is "zero meridian", i.e. GMT) \s*$c Cs|i}dgd\}}}}}}}t i |}|dj o(|i \}}}}}}}} ndSt|||||||S(sv As for http2time, but parses the ISO 8601 formats: 1994-02-03 14:15:29 -0100 -- ISO 8601 format 1994-02-03 14:15:29 -- zone is optional 1994-02-03 -- only date 1994-02-03T14:15:29 -- Use T as separator 19940203T141529Z -- ISO 8601 compact format 19940203 -- only date iN(RYR]RRPR5RORNRRRAt ISO_DATE_RERDRERZt_RV( RYRARRNRERR5RORPRc((Rtiso2times  " (cCs+|id\}}|i| |i|S(s)Return unmatched part of re.Match object.iN(tmatchtspantstarttendtstring(ReRgRh((Rt unmatched4ss^\s*([^=\s;,]+)s&^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"s^\s*=\s*([^\s;,]*)s\\(.)c Cst|tjptg}x|D]}|}g}xo|ogti |}|ot |}|i d}ti |}|o1t |}|i d} tid| } nHti |}|o+t |}|i d} | i} nd} |i|| fq<|iido2|id}|o|i|ng}q<tidd|\}}|djptd|||f|}q<W|o|i|q'q'W|S( smParse header values into a list of lists containing key,value pairs. The function knows how to deal with ",", ";" and "=" as well as quoted values after "=". A list of space separated tokens are parsed as if they were separated by ";". If the header_values passed as argument contains multiple values, then they are treated as if they were a single value separated by comma ",". This means that this function is useful for parsing header fields that follow this syntax (BNF as from the HTTP/1.1 specification, but we relax the requirement for tokens). headers = #header header = (token | parameter) *( [";"] (token | parameter)) token = 1* separators = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) qdtext = > quoted-pair = "\" CHAR parameter = attribute "=" value attribute = token value = token | quoted-string Each header is represented by a list of key/value pairs. The value for a simple token (not part of a parameter) is None. Syntactically incorrect headers will not necessarily be parsed as you would want. This is easier to describe with some examples: >>> split_header_words(['foo="bar"; port="80,81"; discard, bar=baz']) [[('foo', 'bar'), ('port', '80,81'), ('discard', None)], [('bar', 'baz')]] >>> split_header_words(['text/html; charset="iso-8859-1"']) [[('text/html', None), ('charset', 'iso-8859-1')]] >>> split_header_words([r'Basic realm="\"foo\bar\""']) [[('Basic', None), ('realm', '"foobar"')]] is\1t,s^[=\s;]*RWis&split_header_words bug: '%s', '%s', %sN(ttypet header_valuest StringTypestAssertionErrortresultRYt orig_texttpairstHEADER_TOKEN_RERDRERjRGtnametHEADER_QUOTED_VALUE_REtvaluetHEADER_ESCAPE_RER_tHEADER_VALUE_REtrstripRtappendR]t startswithtretsubntnon_junkt nr_junk_chars( RmRrRtRRYR~RERqRpRv((Rtsplit_header_words=sH,    $ s([\"\\])cCsg}x|D]}g}xu|D]m\}}|dj oGtid|p t i d|}d|}nd||f}n|i |q W|o|i di |q q Wdi |S(sDo the inverse (almost) of the conversion done by split_header_words. Takes a list of lists of (key, value) pairs and produces a single header value. Attribute values are quoted if needed. >>> join_header_words([[("text/plain", None), ("charset", "iso-8859/1")]]) 'text/plain; charset="iso-8859/1"' >>> join_header_words([[("text/plain", None)], [("charset", "iso-8859/1")]]) 'text/plain, charset="iso-8859/1"' s^\w+$s\\\1s"%s"s%s=%ss; s, N( theaderstlistsRrtattrtktvRR|RDtHEADER_JOIN_ESCAPE_RER_Rztjoin(RRrRRRR((Rtjoin_header_wordss   c Csd}g}x|D]} g}t} xBtti d| D](\}}|i }|djoq>nd |jo|d}}n(ti d |d \}}|i}|d jo|i}||jo |}n|d jo t} n|djoL|ido|d }n|ido|d }nt|}qSn|i||fq>W|o)| p|idn|i|qqW|S(s5Ad-hoc parser for Netscape protocol cookie-attributes. The old Netscape cookie format for Set-Cookie can for instance contain an unquoted "," in the expires field, so we have to use this ad-hoc parser instead of split_header_words. XXX This may not make the best possible effort to parse all the crap that Netscape Cookie headers contain. Ronald Tschalar's HTTPClient parser is probably better, so could do worse than following that if this ever gives any trouble. Currently, this is also used for parsing RFC 2109 cookies. texpirestdomaintpathtsecuretportsmax-ages;\s*RWt=s\s*=\s*iitversiont"it0N(sexpiressdomainspathssecuresportsmax-age(sversionR(t known_attrsRpt ns_headerst ns_headerRrtFalset version_sett enumerateR|tsplittiitparamRyRRRR]RKtlctTrueR{tendswithRaRz( RRrRRRRRRRpRR((Rtparse_ns_headerssD            s\.\d+$cCs[ti|otSn|djotSn|ddjp|ddjotSntS(s*Return True if text is a host domain name.RWit.iN(tIPV4_RERDRYRR(RY((Rtis_HDNs "cCs|i}|i}||jotSnt|ptSn|i|}|djp |djotSn|idptSnt|dptSntS(sReturn True if domain A domain-matches domain B, according to RFC 2965. A and B may be host domain names or IP addresses. RFC 2965, section 1: Host names can be specified either as an IP address or a HDN string. Sometimes we compare one host name with another. (Such comparisons SHALL be case-insensitive.) Host A's name domain-matches host B's if * their host name strings string-compare equal; or * A is a HDN string and has the form NB, where N is a non-empty name string, B has the form .B', and B' is a HDN string. (So, x.y.com domain-matches .Y.com but not Y.com.) Note that domain-match is not a commutative operation: a.b.c.com domain-matches .c.com, but not the reverse. iiRiN( tARKtBRRRtrfindtiR{(RRR((Rt domain_matchs    cCsti|otSntS(sdReturn True if text is a sort-of-like a host domain name. For accepting/blocking domains. N(RRDRYRR(RY((Rtliberal_is_HDNscCs|i}|i}t|o t|p||jotSntSn|id}|o|i|otSn| o||jotSntS(s\For blocking/accepting domains. A and B may be host domain names or IP addresses. RN( RRKRRRRR{t initial_dotR(RRR((Rtuser_domain_match%s   s:\d+$cCsa|i}ti|d}|djo|idd}ntid|d}|iS(sReturn request-host, as defined by RFC 2965. Variation from RFC: returned value is lowercased, for convenient comparison. iRWtHostN( trequestt get_full_urlturlturlparsethostt get_headert cut_port_reR_RK(RRR((Rt request_host:s  cCsOt|}}|iddjoti| o|d}n||fS(szReturn a tuple (request-host, effective request-host name). As defined by RFC 2965, except both are lowercased. Ris.localN(RRterhntreq_hosttfindRRD(RRR((Rteff_request_hostJs 'cCs|i}ti|d\}}}}|od||f}nt|}ti dd|d||f}|i dpd|}n|S(s$request-URI, as defined by RFC 2965.is%s;%sRWt/N( RRRRRt parameterstquerytfragt escape_patht urlunparsetreq_pathR{(RRRRRRR((Rt request_pathUs  !cCsy|i}|id}|djoG||d}yt|Wqutj otd|dSquXnt }|S(Nt:iisnonnumeric port: '%s'( Rtget_hostRRRRRFRLtdebugRtDEFAULT_HTTP_PORT(RRRR((Rt request_portds    s%/;:@&=+$,!~*'()s%([0-9a-fA-F][0-9a-fA-F])cCsd|idiS(Ns%%%si(ReRGRU(Re((Rtuppercase_escaped_charvscCsKt|to|id}nti|t}tit |}|S(sEEscape any invalid characters in HTTP URL, and uppercase all escapes.sutf-8N( t isinstanceRtunicodetencodeturllibtquotetHTTP_PATH_SAFEtESCAPED_CHAR_RER_R(R((RRxs  cCst|id}|djoT||d}|id}t|o&|djp |djo d|Sqpn|S(sBReturn reach of host h, as defined by RFC 2965, section 1. The reach R of a host name H is defined as follows: * If - H is the host domain name of a host; and, - H has the form A.B; and - A has no embedded (that is, interior) dots; and - B has at least one embedded dot, or B is the string "local". then the reach of H is .B. * Otherwise, the reach of H is H. >>> reach("www.acme.com") '.acme.com' >>> reach("acme.com") 'acme.com' >>> reach("acme.local") '.local' RiitlocalN(thRRtbR(RRR((Rtreachs 'cCs8t|}t|t|iptSntSdS(s RFC 2965, section 3.3.6: An unverifiable transaction is to a third-party host if its request- host U does not domain-match the reach R of the request-host O in the origin transaction. N(RRRRRtget_origin_req_hostRR(RR((Rtis_third_partys  tCookiecBsStZdZdZdZedZdZedZdZ dZ RS(sHTTP Cookie. This class represents both Netscape and RFC 2965 cookies. This is deliberately a very simple class. It just holds attributes. It's possible to construct Cookie instances that don't comply with the cookie standards. CookieJar.make_cookies is the factory function for Cookie objects -- it deals with cookie parsing, supplying defaults, and normalising to the representation used in this class. CookiePolicy is responsible for checking them to see whether they should be accepted from and returned to the server. Note that the port may be present in the headers, but unspecified ("Port" rather than"Port=80", for example); if this is the case, port is None. cCs|dj ot|}n| dj ot| } n|djo|tjotdn||_||_ ||_ ||_||_|i |_ ||_ ||_| |_| |_| |_| |_| |_||_||_ti||_dS(Ns-if port is None, port_specified must be false(RRRFRRtport_specifiedRRLtselfRtRvRRKtdomain_specifiedtdomain_initial_dotRtpath_specifiedRtdiscardtcommentt comment_urltcopytrestt_rest(RRRtRvRRRRRRRRRRRRR((Rt__init__s,                cCs ||ijS(N(RtRR(RRt((Rthas_nonstandard_attrscCs|ii||S(N(RRtgetRttdefault(RRtR((Rtget_nonstandard_attrscCs||i|( RRRtpRRtlimitRvRtt namevalue(RRRR((Rt__str__s   cCsg}xgddddddddd d d d d ddgD]2}t||}|id|t|fq:W|idt|iddi|S(NRRtRvRRRRRRRRRRRRs%s=%ssrest=%ss Cookie(%s)s, ( targsRttgetattrRRRztreprRR(RRtRR((Rt__repr__ s4!( t__name__t __module__t__doc__RRRRRRRR(((RRs  '     t CookiePolicycBs2tZdZdZdZdZdZRS(s Defines which cookies get accepted from and returned to server. May also modify cookies, though this is probably a bad idea. The subclass DefaultCookiePolicy defines the standard rules for Netscape and RFC 2965 cookies -- override that if you want a customised policy. cCs tdS(sReturn true if (and only if) cookie should be accepted from server. Currently, pre-expired cookies never get this far -- the CookieJar class deletes such cookies itself. N(tNotImplementedError(RtcookieR((Rtset_ok#scCs tdS(sAReturn true if (and only if) cookie should be returned to server.N(R(RRR((Rt return_ok,scCstS(sMReturn false if cookies should not be returned, given cookie domain. N(R(RRR((Rtdomain_return_ok0scCstS(sKReturn false if cookies should not be returned, given cookie path. N(R(RRR((Rtpath_return_ok5s(RRRRRRR(((RRs   tDefaultCookiePolicyc Bs tZdZdZdZdZdZeeBZeee e e e e e ee e d Z dZ dZ dZd Zd Zd Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!RS(sBImplements the standard rules for accepting and returning cookies.iiiic Cs||_||_||_||_||_||_| |_| |_| |_ |dj ot ||_ n f|_ |dj ot |}n||_dS(sAConstructor arguments should be passed as keyword arguments only.N(tnetscapeRtrfc2965t hide_cookie2t strict_domaintstrict_rfc2965_unverifiabletstrict_ns_unverifiabletstrict_ns_domaintstrict_ns_set_initial_dollartstrict_ns_set_pathtblocked_domainsRttuplet_blocked_domainstallowed_domainst_allowed_domains( RRRRRRRRRRRR((RREs             cCs|iS(s4Return the sequence of blocked domains (as a tuple).N(RR(R((RRdscCst||_dS(s$Set the sequence of blocked domains.N(RRRR(RR((Rtset_blocked_domainsgscCs0x)|iD]}t||otSq q WtS(N(RRtblocked_domainRRRR(RRR((Rt is_blockedks   cCs|iS(s=Return None, or the sequence of allowed domains (as a tuple).N(RR(R((RRqscCs*|dj ot|}n||_dS(s-Set the sequence of allowed domains, or None.N(RRRRR(RR((Rtset_allowed_domainsts cCsH|idjotSnx)|iD]}t||otSq"q"WtS(N(RRRRtallowed_domainRRR(RRR ((Rtis_not_allowedzs  cCsstd|i|i|id j ptx?d D]7}d|}t||}|||pt Sq4q4Wt S( s If you override .set_ok(), be sure to call this method. If it returns false, so should your subclass (assuming your subclass wants to be more strict about which cookies to accept). s - checking cookie %s=%sRt verifiabilityRtRRRtset_ok_N(sversionR snamespathsdomainsport(RRRtRvRRotntfn_nameRRtfnRRR(RRRRRR((RRs  cCs|idjotd|i|itSn|idjo|i otdtSn.|idjo|i otdtSnt S(Ns0 Set-Cookie2 without version attribute (%s=%s)is$ RFC 2965 cookies are switched offs$ Netscape cookies are switched off( RRRRRtRvRRRRR(RRR((Rtset_ok_versions  cCsz|ioit|o\|idjo|iotdtSqv|idjo|i otdtSqvnt S(Nis> third-party RFC 2965 cookie during unverifiable transactions> third-party Netscape cookie during unverifiable transaction( Rtis_unverifiableRRRRRRRRR(RRR((Rtset_ok_verifiabilitys   cCsI|idjo5|io+|iidotd|itSntS(Nit$s' illegal name (starts with '$'): '%s'( RRRRRtR{RRR(RRR((Rt set_ok_names-cCsw|ioit|}|idjp|idjo|io/|i|i  ot d|i |t Sqsnt S(Nis7 path attribute %s is not a prefix of request path %s( RRRRRRRRR{RRRR(RRRR((Rt set_ok_paths  >  c Cs|i|iotd|itSn|i|iotd|itSn|iout|\}} |i}|i o|i ddjo|id}|idd|}|djoy||d} ||d|!} | iddd d d d d ddg jo(t| djotd|tSqEqIn|ido|d}n|}|iddj}| o"|djotd|tSn|idjoS| i| o>| id o-d| i| otd| |tSqn|idjp|i|i@o,t| |ptd| |tSq\n|idjp|i|i@oT|t| } | iddjo)t i!| otd| |tSqqnt"S(Ns" domain %s is in user block-lists& domain %s is not in user allow-listRiiitcotactcomtedutorgtnettgovtmilRFs& country-code second level domain %ss.locals/ non-local domain %s contains no embedded dotsS effective request-host %s (even with added initial dot) does not end end with %ss5 effective request-host %s does not domain-match %ss. host prefix %s for domain %s contains a dot(#RR RRRRR RRRRRRtcountRRtjttldtsldRKtlenR{tundotted_domainRt embedded_dotsRRRtDomainRFC2965MatchRtDomainStrictNoDotst host_prefixRRDR( RRRRR%RR!RR&R#R)RR"((Rt set_ok_domainsV    A 7  !  !' cCs|iot|}|djo d}n t|}x||iidD]M}yt |Wn$t j ot d|t SnX||joPqLqLWt d||it SntS(Nt80Rks bad port %s (not numeric)s$ request port (%s) not found in %s(RRRRtreq_portRtstrRRRRFRLRRR(RRRRR,((Rt set_ok_ports$          cCs\td|i|ix?d D]7}d|}t||}|||pt SqqWt S( s If you override .return_ok(), be sure to call this method. If it returns false, so should your subclass (assuming your subclass wants to be more strict about which cookies to return). s - checking cookie %s=%sRR RRRRt return_ok_N(sversions verifiabilityssecuresexpiressportsdomain( RRRtRvRRRRRRRR(RRRRRR((RRs  cCs^|idjo|i otdtSn.|idjo|i otdtSntS(Nis$ RFC 2965 cookies are switched offs$ Netscape cookies are switched off(RRRRRRRR(RRR((Rtreturn_ok_version#s  cCsz|ioit|o\|idjo|iotdtSqv|idjo|i otdtSqvnt S(Nis> third-party RFC 2965 cookie during unverifiable transactions> third-party Netscape cookie during unverifiable transaction( RRRRRRRRRRR(RRR((Rtreturn_ok_verifiability,s   cCs3|io%|idjotdtSntS(Nthttpss( secure cookie with non-secure request(RRRtget_typeRRR(RRR((Rtreturn_ok_secure8s cCs)|i|iotdtSntS(Ns cookie expired(RRRt_nowRRR(RRR((Rtreturn_ok_expires>s cCs{|iomt|}|djo d}nxG|iidD]}||joPq@q@Wtd||it Snt S(NR+Rks0 request port %s does not match cookie port %s( RRRRR,RRRRRR(RRRRR,((Rtreturn_ok_portDs       cCst|\}}|i}|idjo;|i|i @o*|i o||jot dt Sn|idjo)t || ot d||t Sn|idjo-d|i| ot d||t SntS(NisQ cookie with unspecified domain does not string-compare equal to request domainsQ effective request-host name %s does not domain-match RFC 2965 cookie domain %sRs; request-host %s does not match Netscape cookie domain %s(RRRRRRRRRtDomainStrictNonDomainRRRRRR(RRRRRR((Rtreturn_ok_domainRs 9 ! % cCst|\}}|idpd|}n|idpd|}n|i|p |i|ptSn|i |ot d|tSn|i |ot d|tSnt S(NRs" domain %s is in user block-lists& domain %s is not in user allow-list( RRRRR{RRRRR RR R(RRRRR((RRhs   cCsEtd|t|}|i|ptd||tSntS(Ns- checking cookie path=%ss %s does not path-match %s(RRRRRR{RR(RRRR((RR~s   ("RRRR(R8R't DomainLiberalt DomainStrictRRRRRRR RR R RRRRRR*R.RR0R1R4R6R7R9RR(((RR;s:  *         8       cCs&|i}|it|i|S(N(tadicttkeystsorttmapR(R<R=((Rtvals_sorted_by_keys  ccsxt|}xe|D]]}t}y |iWntj on#Xt}xt|D] }|VqSW|p|VqqWdS(sBIterates over nested mapping, depth-first, in sorted order by key.N( R@tmappingtvaluestobjRtitemstAttributeErrorRt deepvaluestsubobj(RARCRGRB((RRFs   tAbsentcBstZRS(N(RR(((RRHst CookieJarcBstZdZeidZeidZeidZeidZeidZ dZ e dZ dZ d Zd Zd Zd Zd ZdZdZdZdZdZdZe e e dZdZdZdZdZdZdZRS(sCollection of HTTP cookies. You may not need to know about this class: try urllib2.build_opener(HTTPCookieProcessor).open(url). s\Ws([\"\\])s\.?[^.]*s[^.]*s^\.+s^\#LWP-Cookies-(\d+\.\d+)cCs?|djo t}n||_ti|_h|_dS(N( tpolicyRRRt_policyt _threadingtRLockt _cookies_lockt_cookies(RRJ((RRs    cCs ||_dS(N(RJRRK(RRJ((Rt set_policyscCsg}|ii||pgSntd||i|}x|i D]}|ii ||pqKn||}xR|i D]D}|ii||ptdqntd|i|qWqKW|S(Ns!Checking %s for cookies to returns not returning cookies it's a match(tcookiesRRKRRRRROtcookies_by_pathR=RRtcookies_by_nameRBRRRz(RRRRRRSRQRR((Rt_cookies_for_domains$       cCs=g}x0|iiD]}|i|i||qW|S(s2Return a list of cookies to be returned to server.N(RQRROR=RtextendRTR(RRRQR((Rt_cookies_for_requests c Csd}|i|t} g}x|D]}|i}| p,t} |djo|i d|qkn|i d j o?|i i|i o)|djo|iid|i }n |i }|i d jo|i |in|i d|i|f|djo|io|i d|in|iidoG|i}|i o|ido|d}n|i d |n|id j o6d }|io|d |i}n|i |qq)q)W|S( sReturn a list of cookie-attributes to be returned to server. like ['foo="bar"; $Path="/"', ...] The $Version attribute is also added when appropriate (currently only once per request). cCstt|it|iS(N(tcmpR$RRta(RXR((Rtdecreasing_sizesis $Version=%ss\\\1s%s=%ss $Path="%s"Ris $Domain="%s"s$Ports="%s"N(RYRQR>RRtattrsRRRRzRvRRt non_word_reRDtquote_reR_RtRRRR{RRRR( RRQRYRvRRRRZRR((Rt _cookie_attrss@    3     cCs5td|iitti|i_|_t|\}}|ii |ii @}|i|}|i|}|o1|idp|iddi|qn|iioY|ii oK|id o:x7|D]+}|idjo|iddPqqWn|ii|idS(sAdd correct Cookie: header to request (urllib2.Request object). The Cookie2 header is also added unless policy.hide_cookie2 is true. tadd_cookie_headerRs; tCookie2is $Version="1"N(RRRNtacquireRFR3RKR5RRRRRR8tstrict_non_domainRVRQR]RZt has_headertadd_unredirected_headerRRRRRtreleasetclear_expired_cookies(RRRQRRRaRRZ((RR^s&  !,  cCsDg}d} d}x+|D]#}|d \}}t}t} h}h} x|d D]\} } | i}||jp || jo |} n| | jo| djo t} n| |joqRn| djo2| djotd t} Pn| i} n| djo0|oqRn| djotdqRqBn| djoTt}yt| } Wn$tj otdt} PnXd} |i| } n| |jp | | joJ| djo/| dd d gjotd| t} Pn| || |D]6}|i|o |i|i|i |i q q W|ii dS(sDiscard all expired cookies. You probably don't need to call this method: expired cookies are never sent back to the server (provided you're using DefaultCookiePolicy), this method is called by CookieJar itself every so often, and the .save() method won't save expired cookies anyway (unless you ask otherwise by passing a true ignore_expires argument). N( RRNR`R3RRRRrRRRtRd(RRR((RReus   $cCs t|iS(N(RFRRO(R((Rt__iter__scCs%d}x|D]}|d}q W|S(s#Return number of contained cookies.iiN(RRR(RRR((Rt__len__s cCsDg}x!|D]}|it|q Wd|idi|fS(Ns<%s[%s]>s, (trRRRzRt __class__R(RRR((RRs cCsDg}x!|D]}|it|q Wd|idi|fS(Ns<%s[%s]>s, (RRRRzR-RR(RRR((RRs ( RRRR|tcompileR[R\tstrict_domain_ret domain_retdots_retmagic_reRRRPRTRVR]R^RoRtRuRRRRRrRReRRRR(((RRIs6      < # a X 4     t LoadErrorcBstZRS(N(RR(((RRst FileCookieJarcBsVtZdZeeedZeeedZeeedZeeedZRS(s6CookieJar that can be loaded from and saved to a file.cCs_ti|||dj o&y |dWqCtdqCXn||_t||_dS(s} Cookies are NOT loaded from the named file until either the .load() or .revert() method is called. RWsfilename must be string-likeN( RIRRRJtfilenameRRLRqt delayload(RRRRJ((RRs   cCs tdS(sSave cookies to a file.N(R(RRtignore_discardtignore_expires((RtsavescCsr|djo-|idj o |i}q:ttnt|}z|i||||Wd|i XdS(sLoad cookies from a file.N( RRRRLtMISSING_FILENAME_TEXTtopenR t _really_loadRRtclose(RRRRR ((Rtloads   cCs|djo-|idj o |i}q:ttn|iiti|i }h|_ y|i |||Wn%ttfj o||_ nX|iidS(sClear all cookies and reload cookies from a saved file. Raises LoadError (or IOError) if reversion is not successful; the object's state will not be altered if this happens. N(RRRRLRRNR`RtdeepcopyROt old_stateRRRRtIOErrorRd(RRRRR((Rtreverts     ( RRRRRRRRR(((RRs  (s LWPCookieJarslwp_cookie_str(sMozillaCookieJar(XRRR|RRR3RtloggingttypesRnt threadingRLt ImportErrortdummy_threadingthttplibtcalendarRt getLoggerRR-t HTTP_PORTRRRRRR8R9RIRRzRKRR6R:RBRRCRHRVRXtIR^tXR`RaRbRdRjRsRuRxRwRRRRRRRRRRRRRRRRRRRRRRRR@RFRHRIRRRt _LWPCookieJart LWPCookieJartlwp_cookie_strt_MozillaCookieJartMozillaCookieJar(FRRRRRRR@RRRRRjR6RbRRRRRRuRRdRRRRRRR|R:RVRRnRBRRxRRRsRHRIRRRRRCRRIRFRRRwRRRRRLR9RaR8RHRR^RR3RRRRXR`((Rt?s?      *  *  5 8 !  U  8  '       # ^!M  :c @sqdZdkZdklZdefdYZeZydklZWne j o dZnXdddgZ dk Z dZ d ZhZZd ZxEeieeeeeeeeeeieif D]Zeee[[dfdYZ?dZ@eAdjo e@ndS(sGeneric (shallow and deep) copying operations. Interface summary: import copy x = copy.copy(y) # make a shallow copy of y x = copy.deepcopy(y) # make a deep copy of y For module specific errors, copy.Error is raised. The difference between shallow and deep copying is only relevant for compound objects (objects that contain other objects, like lists or class instances). - A shallow copy constructs a new compound object and then (to the extent possible) inserts *the same objects* into it that the original contains. - A deep copy constructs a new compound object and then, recursively, inserts *copies* into it of the objects found in the original. Two problems often exist with deep copy operations that don't exist with shallow copy operations: a) recursive objects (compound objects that, directly or indirectly, contain a reference to themselves) may cause a recursive loop b) because deep copy copies *everything* it may copy too much, e.g. administrative data structures that should be shared even between copies Python's deep copy operation avoids these problems by: a) keeping a table of objects already copied during the current copying pass b) letting user-defined classes override the copying operation or the set of components copied This version does not copy types like module, class, function, method, nor stack trace, stack frame, nor file, socket, window, nor array, nor any similar types. Classes can use the same interfaces to control copying that they use to control pickling: they can define methods called __getinitargs__(), __getstate__() and __setstate__(). See the documentation for module "pickle" for information on these methods. N(sdispatch_tabletErrorcBstZRS(N(t__name__t __module__(((t/usr/lib/python2.4/copy.pyR6s(s PyStringMaptcopytdeepcopycCs;x4ti|D]}y|i|SWqqXqWdSdS(N(tinspecttgetmrotclstbaseclst__dict__tnametNone(RR R ((Rt _getspecialBscCs t|}ti|}|o||Snt|d}|o||Snti|}|o||}nt |dd}|o|d}n[t |dd}|o |}n5t |dd}|o |Snt d|t ||dS(slShallow copy operation on arbitrary Python objects. See the module's __doc__ string for more info. t__copy__t __reduce_ex__it __reduce__s%un(shallow)copyable object of type %siN(ttypetxRt_copy_dispatchtgettcopierR tdispatch_tabletreductortrvtgetattrR Rt _reconstruct(RRRRR((RRKs,   cCs|S(N(R(R((Rt_copy_immutableqst ComplexTypet UnicodeTypetCodeTypecCst||S(N(RR(R((Rt_copy_with_constructor|scCs |iS(N(RR(R((Rt_copy_with_copy_methodscCst|do|iSnt|do|i}|i|}nt}|i|_t|do|i}n |i }t|do|i |n|i i ||S(NRt__getinitargs__t __getstate__t __setstate__( thasattrRRR!targst __class__tyt _EmptyClassR"tstateR R#tupdate(RR%R)R'((Rt _copy_insts    c Cs|djo h}nt|}|i||} | |j o| Snt|}t i|}|o|||} n4yt |t}Wntj o d}nX|ot||} nt|d}|o|||} nti|}|o||}nt|dd}|o|d}n^t|dd}|o |}n8t|dd}|o||Sntd|t||d|} | ||tAssertionErrorR-R R<tntcallableR%R)tlistitertdictitertdeepRR'R.titemR8RARBR$R#t slotstateR R*R@tsetattr(RRFRMR-RORKR)R%RJRLRARBRIRNR'((RR9sb          #   R(cBstZRS(N(RR(((RR(ssc Csdddddd ddghdd6           '    RU(s ComplexTypes UnicodeTypesCodeType(Bt__doc__ttypestcopy_regRt ExceptionRterrortorg.python.coret PyStringMapt ImportErrorR t__all__RR RRR/RtNoneTypetinttlongtfloattboolRGR>t frozensetRtxranget ClassTypetBuiltinFunctionTypettR RRtlisttdicttsetR R+t InstanceTypeRR1R5tIntTypetLongTypet FloatTypet BooleanTypeRtAttributeErrort StringTypeRRtTypeTypet XRangeTypeR9tListTypeR?t TupleTypeRCtDictionaryTypeR6RDRR(RiR(R R5R9RR?RCRRRRrR1R RpR(RiRR R+RRRkRR/RR6R|RnRD((Rt?1s     $  4      6                       5 5 c@sdZdklZdddddgZhZddZdZye Wne j onXd Z ee e e d Z d d >Z d ZdZdZhZhZhZdZdZdZdS(sHelper to provide extensibility for pickle/cPickle. This is only useful to add pickle support for extension types defined in C, not for instances of user-defined classes. (s ClassTypetpicklet constructort add_extensiontremove_extensiontclear_extension_cachecCsit|tjotdnt|ptdn|t|<|dj ot |ndS(Ns-copy_reg is not intended for use with classess$reduction functions must be callable( ttypetob_typet _ClassTypet TypeErrortcallabletpickle_functiontdispatch_tabletconstructor_obtNoneR(RR R ((t/usr/lib/python2.4/copy_reg.pyRs   cCs!t|ptdndS(Nsconstructors must be callable(R tobjectR(R((RRs cCst|i|iffS(N(tcomplextctrealtimag(R((Rtpickle_complex'scCsF|tjoti|}n#|i||}|i|||S(N(tbaseRt__new__tclstobjtstatet__init__(RRRR((Rt_reconstructor.s  ii cCsL|djptx>|iiD]*}t|do|it@ oPq!q!Wt }|t jo d}n1||ijot d|i n||}|i||f}y |i}Wn_tj oSt|ddot dny |i}Wq&tj o d}q&Xn X|}|ot||fSn t|fSdS(Nit __flags__scan't pickle %s objectst __slots__sNa class that defines __slots__ without defining __getstate__ cannot be pickled(tprototAssertionErrortselft __class__t__mro__RthasattrRt _HEAPTYPERR RRt__name__targst __getstate__tgetstatetAttributeErrortgetattrt__dict__tdictR(R RR&R(RRR,((Rt _reduce_ex:s2        cGs|i||S(N(RRR&(RR&((Rt __newobj__[scCs|iid}|dj o|Sng}t|dpnx|iD]}d|ijo|id}t |t o |f}nxr|D]f}|djoqq|i do/|i d o|id|i|fq|i|qWqKqKWy ||_WnnX|S( sReturn a list of slot names for a given class. This needs to find slots defined by the class and its bases, so we can't simply return the __slots__ attribute. We must walk down the Method Resolution Order and concatenate the __slots__ of each class found there. (This assumes classes don't modify their __slots__ attribute to misrepresent their slots after the class is defined.) t __slotnames__RR+t __weakref__t__s_%s%sN(s__dict__s __weakref__(RR+tgettnamesR R#R"Rtslotst isinstancet basestringtnamet startswithtendswithtappendR%R/(RRR7R3R4((Rt _slotnames^s2      ! cCst|}d|jo djnp tdn||f}ti||joti||jodSn|tjotd|t|fn|tjotd|t|fn|t|<|t|t_extension_cache(R?R7R=R@((RRs , cCstidS(N(RCtclear(((RRsN(t__doc__ttypest ClassTypeRt__all__R R RRRt NameErrorRRR$R-R.R;RARBRCRRR(RBRRHRARCRR.R$R-RRRRRR;RR ((Rt?s,      !  8  c @s]dZddddddddd d g Zd kZd Zdfd YZdddZdZdfdYZd kZei di dZ ddZ dddddddZ dddddddZee dZeee dZdZdZdZd Zd efd!YZ[d"Zd#Zed$jo end S(%se Module difflib -- helpers for computing deltas between objects. Function get_close_matches(word, possibilities, n=3, cutoff=0.6): Use SequenceMatcher to return list of the best "good enough" matches. Function context_diff(a, b): For two lists of strings, return a delta in context diff format. Function ndiff(a, b): Return a delta: the difference between `a` and `b` (lists of strings). Function restore(delta, which): Return one of the two sequences that generated an ndiff delta. Function unified_diff(a, b): For two lists of strings, return a delta in unified diff format. Class SequenceMatcher: A flexible class for comparing pairs of sequences of any type. Class Differ: For producing human-readable deltas from sequences of lines of text. Class HtmlDiff: For producing HTML side by side comparison with change highlights. tget_close_matchestndifftrestoretSequenceMatchertDiffertIS_CHARACTER_JUNKt IS_LINE_JUNKt context_difft unified_difftHtmlDiffNcCs|od||SndS(Nf2.0f1.0(tlengthtmatches(R R ((t/usr/lib/python2.4/difflib.pyt_calculate_ratio%scBstZdZedddZdZdZdZdZdZ dZ d Z d d Z d Z d ZdZRS(s SequenceMatcher is a flexible class for comparing pairs of sequences of any type, so long as the sequence elements are hashable. The basic algorithm predates, and is a little fancier than, an algorithm published in the late 1980's by Ratcliff and Obershelp under the hyperbolic name "gestalt pattern matching". The basic idea is to find the longest contiguous matching subsequence that contains no "junk" elements (R-O doesn't address junk). The same idea is then applied recursively to the pieces of the sequences to the left and to the right of the matching subsequence. This does not yield minimal edit sequences, but does tend to yield matches that "look right" to people. SequenceMatcher tries to compute a "human-friendly diff" between two sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the longest *contiguous* & junk-free matching subsequence. That's what catches peoples' eyes. The Windows(tm) windiff has another interesting notion, pairing up elements that appear uniquely in each sequence. That, and the method here, appear to yield more intuitive difference reports than does diff. This method appears to be the least vulnerable to synching up on blocks of "junk lines", though (like blank lines in ordinary text files, or maybe "

" lines in HTML files). That may be because this is the only method of the 3 that has a *concept* of "junk" . Example, comparing two strings, and considering blanks to be "junk": >>> s = SequenceMatcher(lambda x: x == " ", ... "private Thread currentThread;", ... "private volatile Thread currentThread;") >>> .ratio() returns a float in [0, 1], measuring the "similarity" of the sequences. As a rule of thumb, a .ratio() value over 0.6 means the sequences are close matches: >>> print round(s.ratio(), 3) 0.866 >>> If you're only interested in where the sequences match, .get_matching_blocks() is handy: >>> for block in s.get_matching_blocks(): ... print "a[%d] and b[%d] match for %d elements" % block a[0] and b[0] match for 8 elements a[8] and b[17] match for 6 elements a[14] and b[23] match for 15 elements a[29] and b[38] match for 0 elements Note that the last tuple returned by .get_matching_blocks() is always a dummy, (len(a), len(b), 0), and this is the only case in which the last tuple element (number of elements matched) is 0. If you want to know how to change the first sequence into the second, use .get_opcodes(): >>> for opcode in s.get_opcodes(): ... print "%6s a[%d:%d] b[%d:%d]" % opcode equal a[0:8] b[0:8] insert a[8:8] b[8:17] equal a[8:14] b[17:23] equal a[14:29] b[23:38] See the Differ class for a fancy human-friendly file differencer, which uses SequenceMatcher both to compare sequences of lines, and to compare sequences of characters within similar (near-matching) lines. See also function get_close_matches() in this module, which shows how simple code building on SequenceMatcher can be used to do useful work. Timing: Basic R-O is cubic time worst case and quadratic time expected case. SequenceMatcher is quadratic time for the worst case and has expected-case behavior dependent in a complicated way on how many elements the sequences have in common; best case time is linear. Methods: __init__(isjunk=None, a='', b='') Construct a SequenceMatcher. set_seqs(a, b) Set the two sequences to be compared. set_seq1(a) Set the first sequence to be compared. set_seq2(b) Set the second sequence to be compared. find_longest_match(alo, ahi, blo, bhi) Find longest matching block in a[alo:ahi] and b[blo:bhi]. get_matching_blocks() Return list of triples describing matching subsequences. get_opcodes() Return list of 5-tuples describing how to turn a into b. ratio() Return a measure of the sequences' similarity (float in [0,1]). quick_ratio() Return an upper bound on .ratio() relatively quickly. real_quick_ratio() Return an upper bound on ratio() very quickly. tcCs-||_d|_|_|i||dS(s[Construct a SequenceMatcher. Optional arg isjunk is None (the default), or a one-argument function that takes a sequence element and returns true iff the element is junk. None is equivalent to passing "lambda x: 0", i.e. no elements are considered to be junk. For example, pass lambda x: x in " \t" if you're comparing lines as sequences of characters, and don't want to synch up on blanks or hard tabs. Optional arg a is the first of two sequences to be compared. By default, an empty string. The elements of a must be hashable. See also .set_seqs() and .set_seq1(). Optional arg b is the second of two sequences to be compared. By default, an empty string. The elements of b must be hashable. See also .set_seqs() and .set_seq2(). N(tisjunktselftNonetatbtset_seqs(RRRR((R t__init__s) cCs|i||i|dS(sSet the two sequences to be compared. >>> s = SequenceMatcher() >>> s.set_seqs("abcd", "bcde") >>> s.ratio() 0.75 N(Rtset_seq1Rtset_seq2R(RRR((R Rs cCs5||ijodSn||_d|_|_dS(sMSet the first sequence to be compared. The second sequence to be compared is not changed. >>> s = SequenceMatcher(None, "abcd", "bcde") >>> s.ratio() 0.75 >>> s.set_seq1("bcde") >>> s.ratio() 1.0 >>> SequenceMatcher computes and caches detailed information about the second sequence, so if you want to compare one sequence S against many sequences, use .set_seq2(S) once and call .set_seq1(x) repeatedly for each of the other sequences. See also set_seqs() and set_seq2(). N(RRRtmatching_blockstopcodes(RR((R Rs  cCsH||ijodSn||_d|_|_d|_|idS(sMSet the second sequence to be compared. The first sequence to be compared is not changed. >>> s = SequenceMatcher(None, "abcd", "bcde") >>> s.ratio() 0.75 >>> s.set_seq2("abcd") >>> s.ratio() 1.0 >>> SequenceMatcher computes and caches detailed information about the second sequence, so if you want to compare one sequence S against many sequences, use .set_seq2(S) once and call .set_seq1(x) repeatedly for each of the other sequences. See also set_seqs() and set_seq1(). N(RRRRRt fullbcountt_SequenceMatcher__chain_b(RR((R Rs  c CsN|i}t|}h|_}h}xt|D]w\}} | |joQ|| }|djo)t|d|jod|| <|2q|i |q5|g|| = k' i <= i' and if i == i', j <= j' In other words, of all maximal matching blocks, return one that starts earliest in a, and of all those maximal matching blocks that start earliest in a, return the one that starts earliest in b. >>> s = SequenceMatcher(None, " abcd", "abcd abcd") >>> s.find_longest_match(0, 5, 0, 9) (0, 4, 5) If isjunk is defined, first the longest matching block is determined as above, but with the additional restriction that no junk element appears in the block. Then that block is extended as far as possible by matching (only) junk elements on both sides. So the resulting block never matches on junk except as identical junk happens to be adjacent to an "interesting" match. Here's the same example as before, but considering blanks to be junk. That prevents " abcd" from matching the " abcd" at the tail end of the second sequence directly. Instead only the "abcd" can match, and matches the leftmost "abcd" in the second sequence: >>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd") >>> s.find_longest_match(0, 5, 0, 9) (1, 0, 4) If no blocks match, return (alo, blo, 0). >>> s = SequenceMatcher(None, "ab", "c") >>> s.find_longest_match(0, 2, 0, 1) (0, 0, 0) iiN(RRRRR)talotblotbestitbestjtbestsizetj2lentnothingtxrangetahiR!tgettj2lengettnewj2lentjtbhitk(RR,R4R-R9R.RR/R!R7R0R8R)RR2R6R1R:R((R tfind_longest_match]s@**    , M%U L%TcCs|idj o |iSnt|it|i}}g}d|d|fg} x| o| i \}}} }|i||| |\}}} } | o||jo*| |jo| i||| |fn|i|| f|| |jo6|| |jo%| i|| ||| |fq8qXqXW|ig} |D]}| |dqR~ |_|ii||df|iS(sReturn list of triples describing matching subsequences. Each triple is of the form (i, j, n), and means that a[i:i+n] == b[j:j+n]. The triples are monotonically increasing in i and in j. The last triple is a dummy, (len(a), len(b), 0), and is the only triple with n==0. >>> s = SequenceMatcher(None, "abxcd", "abcd") >>> s.get_matching_blocks() [(0, 0, 2), (3, 2, 2), (5, 4, 0)] iiN(RRRRRRtlatlbtindexed_blockstqueuetpopR,R4R-R9R;R!R8R:txR$tsortt_[1]telem(RR9R,R8R=R<R!R4RDR?R-RCRAR:R>((R tget_matching_blockss(  %". (cCs|idj o |iSnd}}g|_}x|iD]\}}}d}||jo||jo d}n/||jo d}n||jo d}n|o |i |||||fn||||}}|o |i d||||fq?q?W|S(sZReturn list of 5-tuples describing how to turn a into b. Each tuple is of the form (tag, i1, i2, j1, j2). The first tuple has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the tuple preceding it, and likewise for j1 == the previous j2. The tags are strings, with these meanings: 'replace': a[i1:i2] should be replaced by b[j1:j2] 'delete': a[i1:i2] should be deleted. Note that j1==j2 in this case. 'insert': b[j1:j2] should be inserted at a[i1:i1]. Note that i1==i2 in this case. 'equal': a[i1:i2] == b[j1:j2] >>> a = "qabxcd" >>> b = "abycdf" >>> s = SequenceMatcher(None, a, b) >>> for tag, i1, i2, j1, j2 in s.get_opcodes(): ... print ("%7s a[%d:%d] (%s) b[%d:%d] (%s)" % ... (tag, i1, i2, a[i1:i2], j1, j2, b[j1:j2])) delete a[0:1] (q) b[0:0] () equal a[1:3] (ab) b[0:2] (ab) replace a[3:4] (x) b[2:3] (y) equal a[4:6] (cd) b[3:5] (cd) insert a[6:6] () b[5:6] (f) iRtreplacetdeletetinserttequalN( RRRR!R8tanswerREtaitbjtsizettagR$(RR!R8RLRKRNRJRM((R t get_opcodess(          $ic cs|i}|p dg}n|dddjoP|d\} }}}}| t||||t||||f|d>> from pprint import pprint >>> a = map(str, range(1,40)) >>> b = a[:] >>> b[8:8] = ['i'] # Make an insertion >>> b[20] += 'x' # Make a replacement >>> b[23:28] = [] # Make a deletion >>> b[30] += 'y' # Make another replacement >>> pprint(list(SequenceMatcher(None,a,b).get_grouped_opcodes())) [[('equal', 5, 8, 5, 8), ('insert', 8, 8, 8, 9), ('equal', 8, 11, 9, 12)], [('equal', 16, 19, 17, 20), ('replace', 19, 20, 20, 21), ('equal', 20, 22, 21, 23), ('delete', 22, 27, 23, 23), ('equal', 27, 30, 23, 26)], [('equal', 31, 34, 27, 30), ('replace', 34, 35, 30, 31), ('equal', 35, 38, 31, 34)]] RIiiiN(sequaliiii(RROtcodesRNti1ti2tj1tj2tmaxRtmintnntgroupR$R( RRRPRXRWRQRRRSRTRN((R tget_grouped_opcodes-s,  77 6+ 0cCs>td|id}t|t|it|iS(sReturn a measure of the sequences' similarity (float in [0,1]). Where T is the total number of elements in both sequences, and M is the number of matches, this is 2.0*M / T. Note that this is 1 if the sequences are identical, and 0 if they have nothing in common. .ratio() is expensive to compute if you haven't already computed .get_matching_blocks() or .get_opcodes(), in which case you may want to try .quick_ratio() or .real_quick_ratio() first to get an upper bound. >>> s = SequenceMatcher(None, "abcd", "bcde") >>> s.ratio() 0.75 >>> s.quick_ratio() 0.75 >>> s.real_quick_ratio() 1.0 cCs ||dS(Ni(tsumttriple(RZR[((R tusiN(treduceRRER R RRR(RR ((R tratio_s cCs|idjo?h|_}x/|iD] }|i|dd|| 0. Optional arg cutoff (default 0.6) is a float in [0, 1]. Possibilities that don't score at least that similar to word are ignored. The best (no more than n) matches among the possibilities are returned in a list, sorted by similarity score, most similar first. >>> get_close_matches("appel", ["ape", "apple", "peach", "puppy"]) ['apple', 'ape'] >>> import keyword as _keyword >>> get_close_matches("wheel", _keyword.kwlist) ['while'] >>> get_close_matches("apple", _keyword.kwlist) [] >>> get_close_matches("accept", _keyword.kwlist) ['except'] isn must be > 0: %rf0.0f1.0s cutoff must be in [0.0, 1.0]: %rN(Rt ValueErrortcutofftresultRtsRtwordt possibilitiesRARRcRbR^R$theapqtnlargestRCtscore( RkRlRRhRjRoRCRiRA((R Rs    9!cCsGdt|}}x-||jo|||jo|d7}qW|S(s} Return number of `ch` characters at the start of `line`. Example: >>> _count_leading(' abc', ' ') 3 iiN(RtlineR!Rtch(RpRqR!R((R t_count_leadings cBsStZdZeedZdZdZdZdZdZ dZ RS(se Differ is a class for comparing sequences of lines of text, and producing human-readable differences or deltas. Differ uses SequenceMatcher both to compare sequences of lines, and to compare sequences of characters within similar (near-matching) lines. Each line of a Differ delta begins with a two-letter code: '- ' line unique to sequence 1 '+ ' line unique to sequence 2 ' ' line common to both sequences '? ' line not present in either input sequence Lines beginning with '? ' attempt to guide the eye to intraline differences, and were not present in either input sequence. These lines can be confusing if the sequences contain tab characters. Note that Differ makes no claim to produce a *minimal* diff. To the contrary, minimal diffs are often counter-intuitive, because they synch up anywhere possible, sometimes accidental matches 100 pages apart. Restricting synch points to contiguous matches preserves some notion of locality, at the occasional cost of producing a longer diff. Example: Comparing two texts. First we set up the texts, sequences of individual single-line strings ending with newlines (such sequences can also be obtained from the `readlines()` method of file-like objects): >>> text1 = ''' 1. Beautiful is better than ugly. ... 2. Explicit is better than implicit. ... 3. Simple is better than complex. ... 4. Complex is better than complicated. ... '''.splitlines(1) >>> len(text1) 4 >>> text1[0][-1] '\n' >>> text2 = ''' 1. Beautiful is better than ugly. ... 3. Simple is better than complex. ... 4. Complicated is better than complex. ... 5. Flat is better than nested. ... '''.splitlines(1) Next we instantiate a Differ object: >>> d = Differ() Note that when instantiating a Differ object we may pass functions to filter out line and character 'junk'. See Differ.__init__ for details. Finally, we compare the two: >>> result = list(d.compare(text1, text2)) 'result' is a list of strings, so let's pretty-print it: >>> from pprint import pprint as _pprint >>> _pprint(result) [' 1. Beautiful is better than ugly.\n', '- 2. Explicit is better than implicit.\n', '- 3. Simple is better than complex.\n', '+ 3. Simple is better than complex.\n', '? ++\n', '- 4. Complex is better than complicated.\n', '? ^ ---- ^\n', '+ 4. Complicated is better than complex.\n', '? ++++ ^ ^\n', '+ 5. Flat is better than nested.\n'] As a single multi-line string it looks like this: >>> print ''.join(result), 1. Beautiful is better than ugly. - 2. Explicit is better than implicit. - 3. Simple is better than complex. + 3. Simple is better than complex. ? ++ - 4. Complex is better than complicated. ? ^ ---- ^ + 4. Complicated is better than complex. ? ++++ ^ ^ + 5. Flat is better than nested. Methods: __init__(linejunk=None, charjunk=None) Construct a text differencer, with optional filters. compare(a, b) Compare two sequences of lines; generate the resulting delta. cCs||_||_dS(s Construct a text differencer, with optional filters. The two optional keyword parameters are for filter functions: - `linejunk`: A function that should accept a single string argument, and return true iff the string is junk. The module-level function `IS_LINE_JUNK` may be used to filter out lines without visible characters, except for at most one splat ('#'). It is recommended to leave linejunk None; as of Python 2.3, the underlying SequenceMatcher class has grown an adaptive notion of "noise" lines that's better than any static definition the author has ever been able to craft. - `charjunk`: A function that should accept a string of length 1. The module-level function `IS_CHARACTER_JUNK` may be used to filter out whitespace characters (a blank or tab; **note**: bad idea to include newline in this!). Use of IS_CHARACTER_JUNK is recommended. N(tlinejunkRtcharjunk(RRsRt((R R?s c cst|i||} x| iD]\}}}}}|djo"|i ||||||}n|djo|id|||}nc|djo|id|||}n:|djo|id|||}ntd|fx|D] } | VqWq"Wd S( s Compare two sequences of lines; generate the resulting delta. Each sequence must contain individual single-line strings ending with newlines. Such sequences can be obtained from the `readlines()` method of file-like objects. The delta generated also consists of newline- terminated strings, ready to be printed as-is via the writeline() method of a file-like object. Example: >>> print ''.join(Differ().compare('one\ntwo\nthree\n'.splitlines(1), ... 'ore\ntree\nemu\n'.splitlines(1))), - one ? ^ + ore ? ^ - two - three ? - + tree + emu RFRGt-RHt+RIt sunknown tag %rN(RRRsRRtcruncherRORNR,R4R-R9t_fancy_replacetgt_dumpRgRp( RRRR,R9RzR4R-RNRpRx((R tcompareWs   "   ccs0x)t||D]}d|||fVqWdS(s4Generate comparison results for a same-tagged range.s%s %sN(R3tlothiR!RNRA(RRNRAR}R~R!((R R{sc cs||jo ||jpt||||jo4|id|||} |id|||}n1|id|||} |id|||}x)| |fD]}x|D] } | VqWqWdS(NRvRu( R,R4R-R9tAssertionErrorRR{RtfirstRtsecondRzRp( RRR,R4RR-R9RzRRpR((R t_plain_replaces! ccs7d\}}t|i}d\}}xt ||D]}||}|i|xt ||D]}||}||jo%|djo||}}qdqdn|i||i|joD|i|jo1|i|jo|i||}} } qdqdWq7W||joZ|djo5x*|i||||||D] }|VqKWdSn||d} } }nd}x*|i||| ||| D] }|VqW|| || } }|djo(d}}|i"| |x|i#D]\} }}}}||||}} | djo |d|7}|d| 7}q| djo|d |7}q| d jo|d | 7}q| d jo |d |7}|d | 7}qt+d| fqWx0|i,| |||D] }|VqWn d| Vx2|i|| d||| d|D] }|Vq%WdS(sD When replacing one block of lines with another, search the blocks for *similar* lines; the best-matching pair (if any) is used as a synch point, and intraline difference marking is done on the similar pair. Lots of work, but often worth it. Example: >>> d = Differ() >>> results = d._fancy_replace(['abcDefghiJkl\n'], 0, 1, ... ['abcdefGhijkl\n'], 0, 1) >>> print ''.join(results), - abcDefghiJkl ? ^ ^ ^ + abcdefGhijkl ? ^ ^ ^ f0.73999999999999999f0.75Nf1.0RRFt^RGRuRHRvRIRwsunknown tag %rs i(f0.73999999999999999f0.75(NN(-t best_ratioRhRRRtRxRteqiteqjR3R-R9R8RRLRR,R4R!RRKRRcRbR^tbest_itbest_jRRpt _fancy_helpertaelttbelttatagstbtagsRRORNtai1tai2tbj1tbj2R<R=Rgt_qformat(RRR,R4RR-R9RhRKRRNRRR=R<RRRRRRRLRRRRRpR!R8Rx((R Rysl        9&          'c csg}||joK||jo"|i||||||}q|i d|||}n*||jo|i d|||}nx|D] }|VqWdS(NRuRv( RzR,R4R-R9RRyRRR{Rp( RRR,R4RR-R9RzRp((R Rs  " ccstt|dt|d}t|t|| d}||i}||i}d|V|odd||fVnd|V|odd||fVndS(s Format "?" output and deal with leading tabs. Example: >>> d = Differ() >>> results = d._qformat('\tabcDefghiJkl\n', '\t\tabcdefGhijkl\n', ... ' ^ ^ ^ ', '+ ^ ^ ^ ') >>> for line in results: print repr(line) ... '- \tabcDefghiJkl\n' '? \t ^ ^ ^\n' '+ \t\tabcdefGhijkl\n' '? \t ^ ^ ^\n' s Rws- s? %s%s s+ N(RVRrtalinetblinetcommonRtrstripR(RRRRRR((R Rs( RdReRfRRR|R{RRyRR(((R Rs \ )   b s \s*#?\s*$cCs||dj S(s Return 1 for ignorable line: iff `line` is blank or contains a single '#'. Examples: >>> IS_LINE_JUNK('\n') True >>> IS_LINE_JUNK(' # \n') True >>> IS_LINE_JUNK('hello\n') False N(tpatRpR(RpR((R R6s s cCs ||jS(s Return 1 for ignorable character: iff `ch` is a space or tab. Examples: >>> IS_CHARACTER_JUNK(' ') True >>> IS_CHARACTER_JUNK('\t') True >>> IS_CHARACTER_JUNK('\n') False >>> IS_CHARACTER_JUNK('x') False N(Rqtws(RqR((R RFsRs ccst}xtd||i|D]n}|p,d|||fVd|||fVt}n|dd|dd|dd|ddf\}} } } d |d| || d| | |fVx|D]\} }} } } | d jo'x||| !D]} d | VqWqn| d jp | d jo$x!||| !D]} d| Vq8Wn| d jp | djo$x!|| | !D]} d| VqvWqqWq"WdS(s Compare two sequences of lines; generate the delta as a unified diff. Unified diffs are a compact way of showing line changes and a few lines of context. The number of context lines is set by 'n' which defaults to three. By default, the diff control lines (those with ---, +++, or @@) are created with a trailing newline. This is helpful so that inputs created from file.readlines() result in diffs that are suitable for file.writelines() since both the inputs and outputs have trailing newlines. For inputs that do not have trailing newlines, set the lineterm argument to "" so that the output will be uniformly newline free. The unidiff format normally has a header for filenames and modification times. Any or all of these may be specified using strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. The modification times are normally expressed in the format returned by time.ctime(). Example: >>> for line in unified_diff('one two three four'.split(), ... 'zero one tree four'.split(), 'Original', 'Current', ... 'Sat Jan 26 23:30:50 1991', 'Fri Jun 06 10:20:52 2003', ... lineterm=''): ... print line --- Original Sat Jan 26 23:30:50 1991 +++ Current Fri Jun 06 10:20:52 2003 @@ -1,4 +1,4 @@ +zero one -two -three +tree four s --- %s %s%ss +++ %s %s%siiiiiis@@ -%d,%d +%d,%d @@%sRIRwRFRGRuRHRvN(tFalsetstartedRRRRRYRRXtfromfilet fromfiledatetlinetermttofilet tofiledatetTrueRQRRRSRTRNRp(RRRRRRRRRRRRNRSRTRpRQRX((R RYs2' >'  ccst}hdd<dd<dd<dd<} xMtd||i|D]0} |p,d |||fVd |||fVt}nd |fV| d d | ddd jo)d| ddd| d d |fVnd| d d |fVg}| D]"}|ddjo ||qq~}|oYxV| D]J\} } }}}| djo(x%|| |!D]}| | |VqdWq4q4Wn| d d| ddd jo)d| ddd| d d|fVnd| d d|fVg}| D]"}|ddjo ||qq~}|oYxV| D]J\} }}}} | djo(x%||| !D]}| | |VqZWq*q*WqLqLWdS(s Compare two sequences of lines; generate the delta as a context diff. Context diffs are a compact way of showing line changes and a few lines of context. The number of context lines is set by 'n' which defaults to three. By default, the diff control lines (those with *** or ---) are created with a trailing newline. This is helpful so that inputs created from file.readlines() result in diffs that are suitable for file.writelines() since both the inputs and outputs have trailing newlines. For inputs that do not have trailing newlines, set the lineterm argument to "" so that the output will be uniformly newline free. The context diff format normally has a header for filenames and modification times. Any or all of these may be specified using strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. The modification times are normally expressed in the format returned by time.ctime(). If not specified, the strings default to blanks. Example: >>> print ''.join(context_diff('one\ntwo\nthree\nfour\n'.splitlines(1), ... 'zero\none\ntree\nfour\n'.splitlines(1), 'Original', 'Current', ... 'Sat Jan 26 23:30:50 1991', 'Fri Jun 06 10:22:46 2003')), *** Original Sat Jan 26 23:30:50 1991 --- Current Fri Jun 06 10:22:46 2003 *************** *** 1,4 **** one ! two ! three four --- 1,4 ---- + zero one ! tree four RHs+ RGs- RFs! RIs s *** %s %s%ss --- %s %s%ss***************%siiiis*** %d,%d ****%ss *** %d ****%siis--- %d,%d ----%ss --- %d ----%sN(sreplacesdelete(sreplacesinsert(RRt prefixmapRRRRRYRRXRRRRRRRCtetvisiblechangesRNRQRRt_RpRSRT(RRRRRRRRRSRTRRNRXRQRRRRRpRRRC((R Rs@**  !)6 !)6 cCst||i||S(s Compare `a` and `b` (lists of strings); return a `Differ`-style delta. Optional keyword parameters `linejunk` and `charjunk` are for filter functions (or None): - linejunk: A function that should accept a single string argument, and return true iff the string is junk. The default is None, and is recommended; as of Python 2.3, an adaptive notion of "noise" lines is used that does a good job on its own. - charjunk: A function that should accept a string of length 1. The default is module-level function IS_CHARACTER_JUNK, which filters out whitespace characters (a blank or tab; note: bad idea to include newline in this!). Tools/scripts/ndiff.py is a command-line front-end to this function. Example: >>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1), ... 'ore\ntree\nemu\n'.splitlines(1)) >>> print ''.join(diff), - one ? ^ + ore ? ^ - two - three ? - + tree + emu N(RRsRtR|RR(RRRsRt((R Rs!c#sdk} | idt||||ddgddd} | } |djoxZto| iVqvWnA|d7}d} x-to%ddg|}}t}xN|tjo@| i\}}}||}|||f||<|d7}qW||jodV|} n |} d}x2| o*||}|d7}||V| d8} q?W|d} xM| oE| i\}}}|o|d} n | d8} |||fVq~WqWdS( sReturns generator yielding marked up from/to side by side differences. Arguments: fromlines -- list of text lines to compared to tolines tolines -- list of text lines to be compared to fromlines context -- number of context lines to display on each side of difference, if None, all from/to text lines will be generated. linejunk -- passed on to ndiff (see ndiff documentation) charjunk -- passed on to ndiff (see ndiff documentation) This function returns an interator which returns a tuple: (from line tuple, to line tuple, boolean flag) from/to line tuple -- (line num, line text) line num -- integer or None (to indicate a context seperation) line text -- original line text with following markers inserted: '+' -- marks start of added text '-' -- marks start of deleted text '^' -- marks start of changed text '' -- marks end of added/deleted/changed text boolean flag -- None indicates context separation, True indicates either "from" or "to" line contains a change, otherwise False. This function/iterator was originally developed to generate side by side file difference for making HTML pages (see HtmlDiff class for example usage). Note, this function utilizes the ndiff function to generate the side by side difference markup. Optional ndiff arguments may be passed to this function and they in turn will be passed to ndiff. Ns (\++|\-+|\^+)ic s2||cd7<|djo|||iddfSn|djo|id|id}}g} | d}i ||xS| dddD]>\} \}}|d|!d| |||!d ||}qW|d}n7|idd}|p d }nd||d }|||fS( sReturns line of text with user's change markup and line formatting. lines -- list of lines from the ndiff generator to produce a line of text from. When producing the line of text to return, the lines used are removed from this list. format_key -- '+' return first line in list with "add" markup around the entire line. '-' return first line in list with "delete" markup around the entire line. '?' return first line in list with add/delete/change intraline markup (indices obtained from second line) None return first line in list with no markup side -- indice into the num_lines list (0=from,1=to) num_lines -- from/to current line number. This is NOT intended to be a passed parameter. It is present as a keyword argument to maintain memory of the current line numbers between calls of this function. Note, this function is purposefully not defined at the module scope so that data it needs from its parent function (within whose context it is defined) does not need to be of module scope. iiit?cCs3|i|idd|ig|idS(Nii(tsub_infoR$t match_objectRXtspan(RR((R trecord_sub_infoQs&NitsRw(t num_linestsidet format_keyRtlinesR@ttexttmarkersRRt change_retsubtkeytbegintend( RRRRRRRRRRR(R(R t _make_line0s$   0 c#sg}d\}}xtoxRt|djo>y|iiWqtj o|idqXqWdi g}|D]}||dq~}|i do |}n|i do,|dd|ddtfVqnJ|i do*|d8}|d ddtfVqn|i d p |i d p|i d o.|d dd}}|dd}}n|i d o,|dd|ddtfVqnv|i do,|dd|ddtfVqn:|i d o*|d8}|d ddtfVqn|i do*|d7}d|ddtfVqn|i dp|i do.d|dd}}|dd}}nx|i do*|d7}d|ddtfVqn>|i do-|dd|ddtfVqnx)|djo|d7}ddtfVqAWx)|djo|d8}ddtfVqmW|i do tq||tfVqWdS(sYields from/to lines of text with a change indication. This function is an iterator. It itself pulls lines from a differencing iterator, processes them and yields them. When it can it yields both a "from" and a "to" line, otherwise it will yield one or the other. In addition to yielding the lines of from/to text, a boolean flag is yielded to indicate if the text line(s) have differences in them. Note, this function is purposefully not defined at the module scope so that data it needs from its parent function (within whose context it is defined) does not need to be of module scope. iitXRs-?+?Ris--++Rus--?+s--+s- s-+?s-?+s+--Rvs+ s+-Rws N(ii(Rs (Rs (Rtnum_blanks_pendingtnum_blanks_to_yieldRRR$tdiff_lines_iteratortnextt StopIterationtjoinRCRpRjt startswithRRt from_linetto_lineR(RCRRRRjRRpR(RR(R t_line_iteratorhsv  . % 0%%    &     c#s}gg}}xtoxt|djpt|djoa|i\}}}|dj o|i ||fn|dj o|i ||fq#q#W|i d\}}|i d\}}|||p|fVqWdS(stYields from/to lines of text with a change indication. This function is an iterator. It itself pulls lines from the line iterator. Its difference from that iterator is that this function always yields a pair of from/to text lines (with the change indication). If necessary it will collect single from/to lines until it has a matching pair from/to pair to yield. Note, this function is purposefully not defined at the module scope so that data it needs from its parent function (within whose context it is defined) does not need to be of module scope. iN(Rt line_iteratort fromlinesttolinesRRRRRt found_diffRR$R@tfromDifftto_diff(RRRRRRRR(R(R t_line_pair_iterators   &  i(NNN(tretcompileRRRRRsRtRRRRtline_pair_iteratortcontextRRRtlines_to_writetindext contextLinesRRRRR!(RRRRsRtRRRRRRRRRRR!RRR((RRRRR t_mdiffsV! 8\            sm %(table)s%(legend)s sH table.diff {font-family:Courier; border:medium;} .diff_header {background-color:#e0e0e0} td.diff_header {text-align:right} .diff_next {background-color:#c0c0c0} .diff_add {background-color:#aaffaa} .diff_chg {background-color:#ffff77} .diff_sub {background-color:#ffaaaa}sZ %(header_row)s %(data_rows)s
s
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op
cBstZdZeZeZeZeZdZdeee dZ dde ddZ dZ dZd Zd Zd Zd Zd Zdde ddZRS(s{For producing HTML side by side comparison with change highlights. This class can be used to create an HTML table (or a complete HTML file containing the table) showing a side by side, line by line comparison of text with inter-line and intra-line change highlights. The table can be generated in either full or contextual difference mode. The following methods are provided for HTML generation: make_table -- generates HTML for a single side by side table make_file -- generates complete HTML file with a single side by side table See tools/scripts/diff.py for an example usage of this class. iicCs(||_||_||_||_dS(sHtmlDiff instance initializer Arguments: tabsize -- tab stop spacing, defaults to 8. wrapcolumn -- column number where lines are broken and wrapped, defaults to None where lines are not wrapped. linejunk,charjunk -- keyword arguments passed into ndiff() (used to by HtmlDiff() to generate the side by side HTML differences). See ndiff() documentation for argument default values and descriptions. N( ttabsizeRt_tabsizet wrapcolumnt _wrapcolumnRst _linejunkRtt _charjunk(RRRRsRt((R R]s    RicCsD|itd|id|id|i||||d|d|S(sReturns HTML file of side by side comparison with change highlights Arguments: fromlines -- list of "from" lines tolines -- list of "to" lines fromdesc -- "from" file column header string todesc -- "to" file column header string context -- set to True for contextual differences (defaults to False which shows full differences). numlines -- number of context lines. When context is set True, controls number of lines displayed before and after the change. When context is False, controls the number of lines to place the "next" link anchors before the next change (so click of "next" link jumps to just before the change). tstylestlegendttableRtnumlinesN( Rt_file_templatetdictt_stylest_legendt make_tableRRtfromdescttodescRR(RRRRRRR((R t make_filens  csdd}g}|D]}|||q~}g}|D]}|||q>~}||fS(sReturns from/to line lists with tabs expanded and newlines removed. Instead of tab characters being replaced by the number of spaces needed to fill in to the next tab stop, this function will fill the space with tab characters. This is done so that the difference algorithms can identify changes in a file when tabs are replaced by spaces and vice versa. At the end of the HTML generation, the tab characters will be replaced with a nonbreakable space. csO|idd}|ii}|idd}|iddidS(NRwRs s (RpRFt expandtabsRRR(Rp(R(R t expand_tabssN(RRCRRpR(RRRRRCRp((RR t_tab_newline_replaces  ''c Cs~|p|i||fdSnt|} |i}| |jp| |i dd|jo|i||fdSnd}d}d} x||jo}|| jop||djo"|d7}||} |d7}q||djo|d7}d} q|d7}|d7}qW|| }||}| o|d}d| |}n|i||f|i|d|dS( sBuilds list of text lines by splitting text lines at wrap point This function will determine if the input text line needs to be wrapped (split) into separate lines. If so, the first wrap point will be determined and the first line appended to the output text line list. This function is used recursively to handle the second part of the split line to further split it. NRiiRist>(tline_numt data_listR$RRRMRRRUtcountR!Rtmarktline1tline2t _split_line( RRRRR!RRRRURRM((R Rs<  +        c csx|D]\}}}|djo|||fVqn||\} } \}}gg}}|i || | |i |||x`|p|oQ|o|i d}nd}|o|i d}nd}|||fVqWqWdS(s5Returns iterator that splits (wraps) mdiff text linesiRRwN(RRw(RRw(tdiffstfromdatattodatatflagRtfromlinetfromtextttolinettotexttfromlistttolistRRR@( RRRRRRRRRRR((R t _line_wrappers&   cCsggg}}}x|D]\}}}y<|i|i d|||i|i d||Wn-t j o!|id|idnX|i|qW|||fS(sCollects mdiff output into separate lists Before storing the mdiff from/to data into a list, it is converted into a single line of text with HTML markup. iiN( RRtflaglistRRRRR$Rt _format_linet TypeErrorR(RRRRRRRR((R t_collect_liness  cCsy%d|}d|i||f}Wntj o d}nX|iddiddidd }|id d i}d |||fS(sReturns HTML markup of "from" / "to" text lines side -- 0 or 1 indicating "from" or "to" text flag -- indicates if difference on line linenum -- line number (used for line number column) text -- line text to be marked up s%ds id="%s%s"Rt&s&Rs>t%s%sN( tlinenumRt_prefixRtidRRRFR(RRRRRR((R Rs  *cCs<dti}dti}tid7_||g|_dS(sCreate unique anchor prefixessfrom%d_sto%d_iN(R t_default_prefixt fromprefixttoprefixRR(RRR((R t _make_prefixs   cCsd|id}dgt|} dgt|} dt}} d} xt |D]|\}} | oc| pXt} |} td||g}d||f| |<|d7}d||f| | ns2 No Differences Found s( Empty File s!fs#tN(RRRRRtnext_idt next_hrefRtnum_chgt in_changetlastR R!RRRURRRR(RRRRRRRRR!RRR RR ((R t_convert_flags's<           c Cs|i|i||\}}|o |} nd} t ||| d|i d|i }|i o|i|}n|i|\}} } |i|| | ||\}} } }} dk}|i}dd}xtt| D]m}| |djo"|djo|idq[q|i|| |||||||| |fqW|p|o"dd d |d d |f}nd }|i!t"d |i#d |d|i$d} | i&ddi&ddi&ddi&ddi&ddS(sReturns HTML table of side by side comparison with change highlights Arguments: fromlines -- list of "from" lines tolines -- list of "to" lines fromdesc -- "from" file column header string todesc -- "to" file column header string context -- set to True for contextual differences (defaults to False which shows full differences). numlines -- number of context lines. When context is set True, controls number of lines displayed before and after the change. When context is False, controls the number of lines to place the "next" link anchors before the next change (so click of "next" link jumps to just before the change). RsRtNs1 %s%ss%%s%s is) s %s%s%s%ss!
s+%sRt data_rowst header_rowtprefixit+st-st^ssss s ('RRRRRRRt context_linesRRRRRRRRRRRR RRt cStringIOtStringIORjtfmttrangeRR!twriteRRR t_table_templateRtgetvalueRRRF(RRRRRRRRRRRRRRRR!R RjRR((R RVs8   *    8"(RdReRfRRRRRRRRRRRRRRRRR R(((R R Gs   7    /ccsy&hdd<dd>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1), ... 'ore\ntree\nemu\n'.splitlines(1)) >>> diff = list(diff) >>> print ''.join(restore(diff, 1)), one two three >>> print ''.join(restore(diff, 2)), ore tree emu is- is+ s)unknown delta choice (must be 1 or 2): %rs N(tinttwhichRNtKeyErrorRgtprefixestdeltaRp(RRRRNRp((R Rs& cCsdk}dk}|i|S(N(tdoctesttdifflibttestmod(RR ((R t_testst__main__(Rft__all__RmR RRRrRRRtmatchRRRRRRRRRRRtobjectR RR"Rd(RrRmRRR"RRRRRR$RRRRRRRR R R((R Rs:$  z0 T  >K$   ^  c@sdZdkZdkZdkTdklZddddgeZ[ddZdd Zd d Z d dddd Z e Z d Z dZ dZedjo endS(s0Disassembler of Python byte code into mnemonics.N(t*(s__all__tdist disassembletdistbtdiscocCs{|djotdSnt|tijo |i}nt|do |i}nt|do |i }nt|do|i i }|i x|D]t\}}t|titititifjo=d|GHyt|Wntj o}dG|GHnXHqqWnSt|dot|n5t|tot|ntdt|idS( snDisassemble classes, methods, functions, or code. With no argument, disassemble the last traceback. Ntim_funct func_codet__dict__sDisassembly of %s:sSorry:tco_codes(don't know how to disassemble %s objects(txtNoneRttypettypest InstanceTypet __class__thasattrRRRtitemstsorttnametx1t MethodTypet FunctionTypetCodeTypet ClassTypeRt TypeErrortmsgRt isinstancetstrtdisassemble_stringt__name__(R RRRR((t/usr/lib/python2.4/dis.pyR s6      +  cCsr|djoKy ti}Wntj otdnXx|io |i}q<Wnt|ii |i dS(s2Disassemble a traceback (default: last traceback).s no last traceback to disassembleN( ttbR tsystlast_tracebacktAttributeErrort RuntimeErrorttb_nextRttb_frametf_codettb_lasti(R((RR2s   ic Cs}|i}t|}tt|}t|} d} d}d}x1| | jo#|| }t|} | |jo"| djoHnd|| GndG| |jodGndG| |jodGndGt| idGt| idG| d } | tjoht|| t|| d d |}d}| d } | tjo|d }nt|id G| tjodt|i|dGqs| tjod|i|dGqs| tjodt| |dGqs| tjod|i|dGqs| t jodt!|dGqs| t"jo5|djo|i#|i$}nd||dGqsnHqHWdS(sDisassemble a code object.is%3ds s-->s>>s iiiiilit(t)s(to N(%tcoRtcodet findlabelstlabelstdicttfindlinestartst linestartstlentntit extended_argR tfreetctordtoptlastitreprtrjusttopnametljustt HAVE_ARGUMENTtopargt EXTENDED_ARGthasconstt co_conststhasnametco_namesthasjrelthaslocalt co_varnamest hascomparetcmp_opthasfreet co_cellvarst co_freevars( R*R9R4R+R-R0R6R?R5R3R2R8((RR<s`            *         c Cst|}t|} d}x|| jo||}t|} ||jodGndG||jodGndGt |i dGt | i dG|d}| tjo7t||t||dd }|d }t |i d G| tjo-|od t ||d Gqd|Gq| tjo-|dj od ||d Gqd|Gq| tjodt ||d Gq| tjo'|od ||d Gqd|Gq| tjod t|d GqnHq!WdS(Nis-->s s>>s iiiiiiR(R)s(%d)s(to (R,R+R-R1R2R3R6R7R8R9R:R;R<R=R>R?RAt constantsRCtnamesR RERFtvarnamesRHRI( R+R9RORNRMR-R?R6R3R2R8((RRmsJ         &          cCsg}t|}d}x||jo||}t|}|d}|tjot||t||dd}|d}d}|t jo||}n|t jo |}n|djo"||jo|i |qqqqW|S(s`Detect all offsets in a byte code which are jump targets. Return the list of offsets. iiiiiN(R-R1R+R2R3R6R7R8R>R?tlabelREthasjabstappend(R+R6R3R-R2R?RPR8((RR,s*      &      c csg}|idddD]}|t|q~}g}|idddD]}|t|qR~}d}|i }d}x]t ||D]L\} }| o/||jo||fV|}n|| 7}n||7}qW||jo||fVndS(sFind the offsets in a byte code which are start of lines in the source. Generate pairs (offset, lineno) as described in Python/compile.c. iNii(t_[1]R+t co_lnotabR6R7tbyte_incrementstline_incrementsR t lastlinenotco_firstlinenotlinenotaddrtzipt byte_incrt line_incr( R+R6RZRSRVR]RYRURWR\((RR/s 77      cCstido_tido!tiidtidntid}| p |djo d}qsnd}|djo ti}n t |}|i }|dj o|i nd}t ||d}t|dS(s*Simple test program to disassemble a file.iisusage: python dis.py [-|file] t-stexecN(R targvtstderrtwritetexittfnR tstdintftopentreadtsourcetclosetcompileR+R(R+RfRiRd((Rt_tests$      t__main__(t__doc__R R topcodet__all__t _opcodes_allR RRRRRR,R/RlR( RpRR,RRR RqR/RRlR R((Rt?s     & 1(    c@sdZdZdZdS(sdistutils The main package for the Python Module Distribution Utilities. Normally used from a setup script as from distutils.core import setup setup (...) s<$Id: __init__.py 52269 2006-10-10 08:10:42Z anthony.baxter $s2.4.4N(t__doc__t __revision__t __version__(RR((t(/usr/lib/python2.4/distutils/__init__.pyt? sc@sDdZdZdkZdklZdZdZddZdS(sdistutils.dep_util Utility functions for simple, timestamp-based dependency of files and groups of files; also, function based entirely on such timestamp dependency analysis.s4$Id: dep_util.py 37828 2004-11-10 22:23:15Z loewis $N(sDistutilsFileErrorcCs|tii|ptd|ntii|pdSndkl}ti||}ti||}||jS(sReturn true if 'source' exists and is more recently modified than 'target', or if 'source' exists and 'target' doesn't. Return false if both exist and 'target' is the same age or younger than 'source'. Raise DistutilsFileError if 'source' does not exist. sfile '%s' does not existi(sST_MTIMEN( tostpathtexiststsourcetDistutilsFileErrorttargettstattST_MTIMEtmtime1tmtime2(RRRRR ((t(/usr/lib/python2.4/distutils/dep_util.pytnewers cCst|t|jo tdng}g}xXtt|D]D}t||||o&|i |||i ||qEqEW||fS(sWalk two filename lists in parallel, testing if each source is newer than its corresponding target. Return a pair of lists (sources, targets) where source is newer than target, according to the semantics of 'newer()'. s+'sources' and 'targets' must be same lengthN( tlentsourcesttargetst ValueErrort n_sourcest n_targetstrangetiR tappend(R RRRR((R tnewer_pairwise#s terrorcCstii|pdSndkl}ti||}x|D]}tii|p>|djoq|djoqBq|djodSqnti||}||jodSqBqBWdSdS(sReturn true if 'target' is out-of-date with respect to any file listed in 'sources'. In other words, if 'target' exists and is newer than every file in 'sources', return false; otherwise return true. 'missing' controls what we do when a source file is missing; the default ("error") is to blow up with an OSError from inside 'stat()'; if it is "ignore", we silently drop any missing source files; if it is "newer", any missing source files make us assume that 'target' is out-of-date (this is handy in "dry-run" mode: it'll make you pretend to carry out commands that wouldn't work because inputs are missing, but that doesn't matter because you're not actually going to run the commands). i(sST_MTIMERtignoreR iN( RRRRRRt target_mtimeR Rtmissingt source_mtime(R RRRRRR((R t newer_group9s$        (t__doc__t __revision__Rtdistutils.errorsRR RR(RRRRR R((R t?s     c@sdZdZdefdYZdefdYZdefdYZdefd YZd efd YZd efd YZdefdYZ defdYZ defdYZ defdYZ defdYZ defdYZdefdYZdefdYZdefdYZd efd!YZd"efd#YZd$efd%YZd&S('sdistutils.errors Provides exceptions used by the Distutils modules. Note that Distutils modules may raise standard exceptions; in particular, SystemExit is usually raised for errors that are obviously the end-user's fault (eg. bad command-line arguments). This module is safe to use in "from ... import *" mode; it only exports symbols whose names start with "Distutils" and end with "Error".s2$Id: errors.py 37828 2004-11-10 22:23:15Z loewis $tDistutilsErrorcBstZdZRS(sThe root of all Distutils evil.(t__name__t __module__t__doc__(((t&/usr/lib/python2.4/distutils/errors.pyRs tDistutilsModuleErrorcBstZdZRS(sUnable to load an expected module, or to find an expected class within some module (in particular, command modules and classes).(RRR(((RRs tDistutilsClassErrorcBstZdZRS(sSome command class (or possibly distribution class, if anyone feels a need to subclass Distribution) is found not to be holding up its end of the bargain, ie. implementing some part of the "command "interface.(RRR(((RRs tDistutilsGetoptErrorcBstZdZRS(s7The option table provided to 'fancy_getopt()' is bogus.(RRR(((RRs tDistutilsArgErrorcBstZdZRS(saRaised by fancy_getopt in response to getopt.error -- ie. an error in the command line usage.(RRR(((RR#s tDistutilsFileErrorcBstZdZRS(sAny problems in the filesystem: expected file not found, etc. Typically this is for problems that we detect before IOError or OSError could be raised.(RRR(((RR (s tDistutilsOptionErrorcBstZdZRS(sSyntactic/semantic errors in command options, such as use of mutually conflicting options, or inconsistent options, badly-spelled values, etc. No distinction is made between option values originating in the setup script, the command line, config files, or what-have-you -- but if we *know* something originated in the setup script, we'll raise DistutilsSetupError instead.(RRR(((RR .s tDistutilsSetupErrorcBstZdZRS(sqFor errors that can be definitely blamed on the setup script, such as invalid keyword arguments to 'setup()'.(RRR(((RR 7s tDistutilsPlatformErrorcBstZdZRS(sWe don't know how to do something on the current platform (but we do know how to do it on some platform) -- eg. trying to compile C files on a platform not supported by a CCompiler subclass.(RRR(((RR <s tDistutilsExecErrorcBstZdZRS(s`Any problems executing an external program (such as the C compiler, when compiling C files).(RRR(((RR Bs tDistutilsInternalErrorcBstZdZRS(soInternal inconsistencies or impossibilities (obviously, this should never be seen if the code is working!).(RRR(((RRGs tDistutilsTemplateErrorcBstZdZRS(s%Syntax error in a file list template.(RRR(((RRLs tCCompilerErrorcBstZdZRS(s#Some compile/link operation failed.(RRR(((RRQs tPreprocessErrorcBstZdZRS(s.Failure to preprocess one or more C/C++ files.(RRR(((RRTs t CompileErrorcBstZdZRS(s2Failure to compile one or more C/C++ source files.(RRR(((RRWs tLibErrorcBstZdZRS(sKFailure to create a static library from one or more C/C++ object files.(RRR(((RRZs t LinkErrorcBstZdZRS(s]Failure to link one or more C/C++ object files into an executable or shared library file.(RRR(((RR^s tUnknownFileErrorcBstZdZRS(s(Attempt to process an unknown file type.(RRR(((RRbs N(Rt __revision__t ExceptionRRRRRR R R R R RRRRRRRR(RRRRR R R RRR RRRR RRRRR((Rt? s& c@sdZdZdZdZdZdZdkZdfdYZeZei Z ei Z ei Z ei Z ei Z eiZd Zd ZdS( s,A simple log mechanism styled after PEP 282.iiiiiNtLogcBsStZedZdZdZdZdZdZdZ dZ RS( NcCs ||_dS(N(t thresholdtself(RR((t#/usr/lib/python2.4/distutils/log.pyt__init__scCs>||ijo*|p |GHn ||GHtiindS(N(tlevelRRtargstmsgtsyststdouttflush(RRRR((Rt_logs   cGs|i|||dS(N(RR RRR(RRRR((RtlogscGs|it||dS(N(RR tDEBUGRR(RRR((Rtdebug"scGs|it||dS(N(RR tINFORR(RRR((Rtinfo%scGs|it||dS(N(RR tWARNRR(RRR((Rtwarn(scGs|it||dS(N(RR tERRORRR(RRR((Rterror+scGs|it||dS(N(RR tFATALRR(RRR((Rtfatal.s( t__name__t __module__RRR R RRRRR(((RRs      cCsti}|t_|S(N(t _global_logRtoldR(RR((Rt set_threshold9s  cCsU|djottn7|djottn|djottndS(Niii(tvRRRR (R((Rt set_verbosity?s    (t__doc__R RRRRRRRR RRRRRRR(RRRRRRRRRRRRR RRR ((Rt?s  !        c@sdZdZdkZdkZdkZdkTdklZddddZdZ dddd Z dddd Z dddd Z dd ZdS( sdistutils.spawn Provides the 'spawn()' function, a front-end to various platform- specific functions for launching another program in a sub-process. Also provides the 'find_executable()' to search the path for a given executable name. s1$Id: spawn.py 37828 2004-11-10 22:23:15Z loewis $N(t*(slogiicCstidjot||d|n_tidjot||d|n8tidjot||d|ntdtidS(sRun another program, specified as a command list 'cmd', in a new process. 'cmd' is just the argument list for the new process, ie. cmd[0] is the program to run and cmd[1:] are the rest of its arguments. There is no way to run a program with a name different from that of its executable. If 'search_path' is true (the default), the system's executable search path will be used to find the program; otherwise, cmd[0] must be the exact path to the executable. If 'dry_run' is true, the command will not actually be run. Raise DistutilsExecError if running the program fails in any way; just return on success. tposixtdry_runtnttos2s1don't know how to spawn programs on platform '%s'N( tostnamet _spawn_posixtcmdt search_pathRt _spawn_ntt _spawn_os2tDistutilsPlatformError(RR tverboseR((t%/usr/lib/python2.4/distutils/spawn.pytspawnscCsTxMtt|D]9}ti||ddjod|||||D]6}tii||}tii|o|SqqWdSn|SdS(sTry to find 'executable' in the directories listed in 'path' (a string listing directories separated by 'os.pathsep'; defaults to os.environ['PATH']). Returns the complete filename or None if not found. tPATHtwin32Rs.exeN(tpathtNoneRtenvironRtsplittpathseptpathstsplitextRtbasetextR)tplatformRtisfiletpRtf(RR:R?RFRERBRA((RRs - (t__doc__t __revision__R)RRtdistutils.errorst distutilsRRRR R RR;R( RRHR RRRR)RR RR((Rt?s  >c@sdZdZdkZdkZdkZdkZdklZeii ei Z eii ei Z eiieiieiZeiieddZeiieZ[[dZdddZdddd Zd Zd Zd Zdd ZeidZeidZ eidZ!ddZ"dZ#da$dZ%dZ&dZ'dZ(dZ)dZ*dS(sProvide access to Python's configuration information. The specific configuration variables available depend heavily on the platform and configuration. The values may be retrieved using get_config_var(name), and the list of variables is available via get_config_vars().keys(). Additional convenience functions are also available. Written by: Fred L. Drake, Jr. Email: s>$Id: sysconfig.py 52231 2006-10-08 17:41:25Z ronald.oussoren $N(sDistutilsPlatformErrortModulestSetupcCs tid S(sReturn a string containing the major and minor Python version, leaving off the patchlevel. Sample return values could be '1.5' or '2.2'. iN(tsystversion(((t)/usr/lib/python2.4/distutils/sysconfig.pytget_python_version%sicCs|d jo|otpt}ntidjototii tii t i }|o |}nNtii|d}tii|p%tiitii |d}n|Sntii|ddt id t iodpdSntidjotii|dSntid jo8|otii|d dSqtii|dSn;tid jotii|dSntd tid S(sReturn the directory containing installed Python header files. If 'plat_specific' is false (the default), this is the path to the non-platform-specific header files, i.e. Python.h and so on; otherwise, this is the path to platform-specific header files (namely pyconfig.h). If 'prefix' is supplied, use it instead of sys.prefix or sys.exec_prefix -- i.e., ignore 'plat_specific'. tposixtIncludetincludetpythonit_dttnttmactMactos2sFI don't know where Python installs its C header files on platform '%s'N(tprefixtNonet plat_specifict EXEC_PREFIXtPREFIXtostnamet python_buildtpathtdirnametabspathRt executabletbasetinc_dirtjointexistsRtpydebugtDistutilsPlatformError(RRRR((Rtget_python_inc-s.  ! %+cCs|d jo|otpt}ntidjoEtii|ddt }|o|Sqtii|dSnFtidjoP|otii|dSqt i djo|SqtiitddSntidjoz|o;|otii|dd Sq`tii|ddSq|otii|dSqtii|ddSn\tid jo8|otiitdSqtiitddSntd tid S( sIReturn the directory containing the Python library (standard or site additions). If 'plat_specific' is true, return the directory containing platform-specific modules, i.e. any module from a non-pure-Python module distribution; otherwise, return the platform-shared library directory. If 'standard_lib' is true, return the directory containing standard Python library modules; otherwise, return the directory for site-specific modules. If 'prefix' is supplied, use it instead of sys.prefix or sys.exec_prefix -- i.e., ignore 'plat_specific'. RtlibR s site-packagesR tLibs2.2R s lib-dynloadRs?I don't know where Python installs its library on platform '%s'N(RRRRRRRRRRt libpythont standard_libRRR!(RR&RR%((Rtget_python_libUs8   c Cs|idjotddddddd\}}}}} }}t i i dot i d}nt i i dot i d}nt i i dot i d}nt i i d ot i d }n |d }t i i d o|d t i d }n|o|d |}nt i i d o.|d t i d }|d t i d }nt i i doC|d t i d}|d t i d}|d t i d}n|d |}|id|d|d|d | d|d|d|||_ndS(sDo any platform-specific customization of a CCompiler instance. Mainly needed on Unix, so we can plug in the information that varies across Unices and is stored in Python's Makefile. tunixtCCtCXXtOPTt BASECFLAGStCCSHAREDtLDSHAREDtSOtCPPs -EtLDFLAGSt tCFLAGStCPPFLAGSt preprocessortcompilert compiler_sot compiler_cxxt linker_sot linker_exeN(R6t compiler_typetget_config_varstcctcxxtoptt basecflagstccsharedtldsharedtso_extRtenvironthas_keytcpptcc_cmdtset_executablestshared_lib_extension( R6R?RGR@R=R>RFRBRCRA((Rtcustomize_compilers>3   cCsVto ti}ntdd}tidjo d}nd}tii ||S(s2Return full pathname of installed pyconfig.h file.Ris2.2sconfig.hs pyconfig.hN( RRtcurdirRR"RRtconfig_hRR(RRL((Rtget_config_h_filenames  cCsmto&tiitiitidSntdddd}tii|dti odpddS( sAReturn full pathname of installed Makefile from the Python build.tMakefileRiR&tconfigR R N( RRRRRRRR'tlib_dirR (RP((Rtget_makefile_filenames &cCs|djo h}ntid}tid}x|i}|pPn|i |}|oL|i dd\}}yt|}Wntj onX|||     ! (: ,    L  D    2c @s:dZdZdkTdkZdkZdkZdfdYZedjodZe dei ed d d !Z d d d gZ dd dd gZ ddgZdgZdgZdZdZeedZeieeieedd dd dd dd Zeddee eedddd dd dd Zeddee eedd dddd dd Zedd ee eeZed!d"eeeeddddd#dddZed$d%eeeeddddd#dddd&dZed'd(eeeiendS()stext_file provides the TextFile class, which gives an interface to text files that (optionally) takes care of stripping comments, ignoring blank lines, and joining lines with backslashes.s8$Id: text_file.py 29687 2002-11-14 02:25:42Z akuchling $(t*NtTextFilecBstZdZhdd<dd<dd<dd<dd<dd<ss iis line 3 \ s continues on next line s # test file s# intervening comment sline 3 \s continues on next linesline 3 continues on next linesline 3 continues on next linecCsS|i}||jod||fGHn$d||fGHdGH|GHdGH|GHdS(Ns ok %d (%s)snot ok %d (%s):s ** expected:s ** received:(R R9tresulttexpected_resulttcountt description(RCRDR RBRA((Rt test_inputUs  stest.txttwRRRRis no processingisstrip commentsis strip blanksisdefault processingRisjoin lines without collapsingRisjoin lines with collapsing(R=t __revision__ttypesR*tosR%RR;t test_datatmaptsplittresult1tresult2tresult3tresult4tresult5tresult6RERRtout_fileR,Rtin_filetremove(RGR%RRRPRQRNRORMR*RJRRTRERRIRS((Rt?sH( %       c@s dZdZdkZdkZdkZdkZdklZdkl Z dk l Z dk l Z dZdZd Zd ad Zd Zd dZdaaadZdZdd d dZdZd d dddd ddZdZdS(sudistutils.util Miscellaneous utility functions -- anything that doesn't fit into one of the other *util.py modules. s9$Id: util.py 52231 2006-10-08 17:41:25Z ronald.oussoren $N(sDistutilsPlatformError(snewer(sspawn(slogc Cs/tidjpttd o tiSnti\}} } }}t i |}t i |dd}t i |dd}t i |dd}|d d jod ||fSng|d d joA| d d jo,d}dt| d d| df} qn|d djod || fSn|d djod||| fSn|d djo?d}tid}|i| } | o| i} qn||d djojdkl}|}tiid}|p|id}n|pytd} Wntj oqXtidd| i} | i | d)j o)di"| id i#dd }qn|odkl}|} d!}tid}t|i#dd }|d"jo&|id#di&o d$}q|d*jo d'}qqnd(|| |fS(+sReturn a string that identifies the current platform. This is used mainly to distinguish platform-specific build directories and platform-specific built distributions. Typically includes the OS name and version and the architecture (as supplied by 'os.uname()'), although the exact information included depends on the OS; eg. for IRIX the architecture isn't particularly important (IRIX only runs on SGI hardware), but for Linux the kernel version isn't particularly important. Examples of returned values: linux-i586 linux-alpha (?) solaris-2.6-sun4u irix-5.3 irix64-6.2 For non-POSIX platforms, currently just returns 'sys.platform'. tposixtunamet/tt t_t-itlinuxs%s-%stsunosit5tsolariss%d.%siiitirixtaixs%s-%s.%sitcygwins[\d.]+tdarwin(sget_config_varstMACOSX_DEPLOYMENT_TARGETs0/System/Library/CoreServices/SystemVersion.plists'ProductUserVisibleVersion\s*s(.*?)t.itmacosxit UNIVERSALSDKtfattPowerPCtPower_Macintoshtppcs%s-%s-%sN(RR('tostnamethasattrtsystplatformRtosnamethosttreleasetversiontmachinetstringtlowertreplacetinttretcompiletrel_retmatchtmtgrouptdistutils.sysconfigtget_config_varstcfgvarstenvirontgettmacvertopentftIOErrortsearchtreadtclosetNonetjointsplittplatvertosmajortstrip( R;R,R:R-R RR'R0RRR2R)R((t$/usr/lib/python2.4/distutils/util.pyt get_platformsf! *     - )  cCstidjo|Sn|p|Sn|ddjotd|n|ddjotd|nti|d}xd|jo|idqW|p tiSnt ti i |S(sReturn 'pathname' as a name that will work on the native filesystem, i.e. split it on '/' and put it back together again using the current directory separator. Needed because filenames in the setup script are always supplied in Unix style, and have to be converted to the local convention before we can actually use them in the filesystem. Raises ValueError on non-Unix-ish systems if 'pathname' either starts or ends with a slash. Rispath '%s' cannot be absoluteispath '%s' cannot end with '/'RN( Rtseptpathnamet ValueErrorR!R9tpathstremovetcurdirtapplytpathR8(R@RB((R=t convert_path}s   cCstidjoEtii|ptii||Sqtii||dSnDtidjoNtii|\}}|ddjo|d}ntii||SntidjoQtii|\}}|dti jo|d}ntii||Sntidjodtii|ptii||Sqt i |dd}d|d}tii||Snt d tid S( s Return 'pathname' with 'new_root' prepended. If 'pathname' is relative, this is equivalent to "os.path.join(new_root,pathname)". Otherwise, it requires making 'pathname' relative and then joining the two, which is tricky on DOS/Windows and Mac OS. Ritntis\tos2tmact:s!nothing known about platform '%s'N(RRRFtisabsR@R8tnew_roott splitdrivetdriveR?R!R9telementstDistutilsPlatformError(RMR@RPRORF((R=t change_roots,icCstodSntidjoAtiid o-dk}|itidtid(RW((R=t check_environs$ $cCsSt|d}ytid||SWn"tj o}td|nXdS(sPerform shell/Perl-style variable substitution on 'string'. Every occurrence of '$' followed by a name is considered a variable, and variable is substituted by the value found in the 'local_vars' dictionary, or in 'os.environ' if it's not in 'local_vars'. 'os.environ' is first checked/augmented to guarantee that it contains certain values: see 'check_environ()'. Raise ValueError for any variables not found in either 'local_vars' or 'os.environ'. cCs@|id}|i|ot||Sn ti|SdS(Ni(R(R*tvar_namet local_varsRVtstrRR.(R(R\R[((R=t_substss\$([a-zA-Z_][a-zA-Z_0-9]*)sinvalid variable '$%s'N( RZR\R^R%tsubtstKeyErrortvarRA(R`R\RbR^((R=t subst_varss serror: cCsut|doMt|do=|io|d|i|if}qq|d|i}n|t|d}|S(sGenerate a useful error message from an EnvironmentError (IOError or OSError) exception object. Handles Python 1.5.1 and 1.5.2 styles, and does what it can to deal with exception objects that don't have a filename (which happens when the error is due to a two-file operation, such as 'rename()' or 'link()'. Returns the error message as a string prefixed with 'prefix'. tfilenametstrerrors%s: %ss%siN(RtexcRdtprefixReterrorR](RfRgRh((R=tgrok_environment_errors  cCs8tidtiatidatidadS(Ns [^\\\'\"%s ]*s'(?:[^'\\]|\\.)*'s"(?:[^"\\]|\\.)*"(R%R&R!t whitespacet _wordchars_ret _squote_ret _dquote_re(((R=t _init_regexscCstd jo tnti|}g}d}x|oti||}|i }|t |jo|i || Pn||ti jo.|i || ti||}d}n||djo$|| ||d}|d}n||djoti||}n9||djoti||}ntd|||d jotd||n|i\}}|| ||d|d!||}|i d}|t |jo|i |Pq6q6W|S( sSplit a string up according to Unix shell-like rules for quotes and backslashes. In short: words are delimited by spaces, as long as those spaces are not escaped by a backslash, or inside a quoted string. Single and double quotes are equivalent, and the quote characters can be backslash-escaped. The backslash is stripped from any two-character escape sequence, leaving only the escaped character. The quote characters are stripped from any quoted string. Returns a list of words. is\it't"s!this can't happen (bad char '%c')s"bad string (mismatched %s quotes?)iN(RkR7RnR!R<R`twordstposR(R)tendtlentappendRjtlstripRlRmt RuntimeErrorRAtspantbeg(R`RsRyR)RrRq((R=t split_quoted sD     %  cCss|djo=d|i|f}|ddjo|dd!d}qJnti||pt||ndS(sPerform some action that affects the outside world (eg. by writing to the filesystem). Such actions are special because they are disabled by the 'dry_run' flag. This method takes care of all that bureaucracy for you; all you have to do is supply the function to call and an argument tuple for it (to embody the "external action" being performed), and an optional message to print. s%s%ris,)it)N( tmsgR7tfunct__name__targstlogtinfotdry_runRE(R}RR|tverboseR((R=texecuteLs  cCsMti|}|djodSn&|djodSntd|fdS(sConvert a string representation of truth to true (1) or false (0). True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if 'val' is anything else. tytyesttttruetont1itntnoR2tfalsetofft0isinvalid truth value %rN(RRRRRR(RRR2RRR(R!R"tvalRA(R((R=t strtobool_s  icCs|djoto |dj}n|py#dkl} | d\}}Wn3tj o'dkl } d| d}}nXt i d||p|dj ot i|d} nt|d} | id| ititt|dd | id |||||f| inti|g}|d jo|id d n"|d jo|id dnt |d|t!t i"|fd|d|n7dk#l$}x&|D]} | ddjoqn| todpd}| } |oB| t(| |jot)d| |fn| t(|} n|ot i*i|| } nt i*i+|}|o`|pt-| |o2t i d| ||p|| || qqt i.d| |qqWdS(sByte-compile a collection of Python source files to either .pyc or .pyo files in the same directory. 'py_files' is a list of files to compile; any files that don't end in ".py" are silently skipped. 'optimize' must be one of the following: 0 - don't optimize (generate .pyc) 1 - normal optimization (like "python -O") 2 - extra optimization (like "python -OO") If 'force' is true, all files are recompiled regardless of timestamps. The source filename encoded in each bytecode file defaults to the filenames listed in 'py_files'; you can modify these with 'prefix' and 'basedir'. 'prefix' is a string that will be stripped off of each source filename, and 'base_dir' is a directory name that will be prepended (after 'prefix' is stripped). You can supply either or both (or neither) of 'prefix' and 'base_dir', as you wish. If 'dry_run' is true, doesn't actually do anything that would affect the filesystem. Byte-compilation is either done directly in this interpreter process with the standard py_compile module, or indirectly by writing a temporary script and executing it. Normally, you should let 'byte_compile()' figure out to use direct compilation or not (see the source for details). The 'direct' flag is used by the script generated in indirect mode; unless you know what you're doing, leave it set to None. i(smkstemps.py(smktemps$writing byte-compilation script '%s'tws2from distutils.util import byte_compile files = [ s, s] s byte_compile(files, optimize=%r, force=%r, prefix=%r, base_dir=%r, verbose=%r, dry_run=0, direct=1) is-Ois-OORs removing %s(scompileitctos1invalid prefix: filename %r doesn't start with %rsbyte-compiling %s to %ss%skipping byte-compilation of %s to %sN(/tdirectR7t __debug__toptimizettempfiletmkstempt script_fdt script_namet ImportErrortmktempRRRRtfdopentscriptR1twriteR!R8tmaptreprtpy_filestforceRgtbase_dirRR6Rt executabletcmdtinserttspawnRRCt py_compileR&tfiletcfiletdfileRtRARFtbasenamet cfile_basetnewertdebug(RRRRgRRRRRRRRRRRRRRR&((R=t byte_compileos`     &     cCsBti|d}tti|}ti|ddd}|S(sReturn a version of the string escaped for inclusion in an RFC-822 header, by ensuring there are 8 spaces space after each newline. s iRN(R!R9theadertlinesRR<R8(RR((R=t rfc822_escapes (t__doc__t __revision__RRR!R%tdistutils.errorsRQtdistutils.dep_utilRtdistutils.spawnRt distutilsRR>RGRRRURZRcRiR7RkRlRmRnRzRRRR(RRQRZRRnRzRRcRRRR%RGR!RRiR>RRRRR((R=t?s($     n  &     ? c!@sdZdZdddddddd d d d d ddddddddddddddddddd d!d"g!Zd#kZd#kZd#kZd#kZd#kZd#kZd#k Z d#k Z d#k Z d#k Z d#k Z d#kZd#kZd$klZeid%deed&hZd'ZedZedZedZedZedZeeBeBeBeBZed Zed Zed Zed ZeeBeBeBZ d(Z!d)Z"d*Z#d+Z$d,d-Z%d.d/Z&d0Z'd1efd2YZ(d3Z)d4Z*d5e i+fd6YZ,d7Z-dfd8YZ.dfd9YZ/dfd:YZ0dfd;YZ1dfd<YZ2dfd=YZ3de4fd>YZ5de4fd?YZ6de2fd@YZ7e8a9e8e8e8e8e8e:d&e8e;e;dA Z<e:e8e8e8e8e:d&e8e;e0dB Z=e;dCe8d&dDZ>dfdEYZ?d&a@dFZAdGe iBfdHYZCe8e8e8e8dIZDdJeCfdKYZEe:e8e8e0dLZFdMZGdNZHdOZIe;e8dPZJe;e8dQZKe;dRZLdSfdTYZMhdSeM<dUdV<dWdX<dYdZ<d[d\<d]d^), and the final line of output is "Test failed.". Run it with the -v switch instead: python M.py -v and a detailed report of all examples tried is printed to stdout, along with assorted summaries at the end. You can force verbose mode by passing "verbose=True" to testmod, or prohibit it by passing "verbose=False". In either of those cases, sys.argv is not examined by testmod. There are a variety of other ways to run doctests, including integration with the unittest framework, and support for running non-Python text files containing doctests. There are also many ways to override parts of doctest's default behaviors. See the Library Reference Manual for details. sreStructuredText entregister_optionflagtDONT_ACCEPT_TRUE_FOR_1tDONT_ACCEPT_BLANKLINEtNORMALIZE_WHITESPACEtELLIPSIStIGNORE_EXCEPTION_DETAILtCOMPARISON_FLAGSt REPORT_UDIFFt REPORT_CDIFFt REPORT_NDIFFtREPORT_ONLY_FIRST_FAILUREtREPORTING_FLAGSt is_privatetExampletDocTestt DocTestParsert DocTestFindert DocTestRunnert OutputCheckertDocTestFailuretUnexpectedExceptiont DebugRunnerttestmodttestfiletrun_docstring_examplestTestert DocTestSuitet DocFileSuitetset_unittest_reportflagstscript_from_examplest testsourcet debug_srctdebugN(sStringIOtignoreicCsti|dtt>S(Ni(tOPTIONFLAGS_BY_NAMEt setdefaulttnametlen(R$((t/usr/lib/python2.4/doctest.pyRss s...cCsKtidtdd|d djo$|d djo|djn S( sprefix, base -> true iff name prefix + "." + base is "private". Prefix may be an empty string, and base does not contain a period. Prefix is ignored (although functions you write conforming to this protocol may make use of it). Return true iff base begins with an (at least one) underscore, but does not both begin and end with (at least) two underscores. >>> is_private("a.b", "my_func") False >>> is_private("____", "_my_func") True >>> is_private("someclass", "__init__") False >>> is_private("sometypo", "__init_") True >>> is_private("x.y.z", "_") True >>> is_private("_x.y.z", "__") False >>> is_private("", "") # senseless but consistent False sVis_private is deprecated; it wasn't useful; examine DocTestFinder.find() lists insteadt stackleveliit_t__iN(twarningstwarntDeprecationWarningtbase(tprefixR-((R&R s  cCsWd}xJtiD]?}|i|d}|tt|jo||i O}qqW|S(s Return the compiler-flags associated with the future features that have been imported into the given namespace (globs). iN( tflagst __future__tall_feature_namestfnametglobstgettNonetfeaturetgetattrt compiler_flag(R3R6R/R2((R&t_extract_future_flagss icCsti|o|Snot|ttfo t|ttdgSn9|djot i t i |idSn tddS(s Return the module specified by `module`. In particular: - If `module` is a module, then return module. - If `module` is a string, then import and return the module with that name. - If `module` is None, then return the calling module. The calling module is assumed to be the module of the stack frame at the given depth in the call stack. t*t__name__s"Expected a module, string, or NoneN(tinspecttismoduletmodulet isinstancetstrtunicodet __import__tglobalstlocalsR5tsystmodulest _getframetdeptht f_globalst TypeError(R>RH((R&t_normalize_modules   icCstid|d|S(s{ Add the given number of space characters to the beginning every non-blank line in `s`, and return the result. s (?m)^(?!$)t N(tretsubtindentts(RPRO((R&t_indentscCs;t}|\}}}ti|||d||iS(sz Return a string containing a traceback message for the given exc_info tuple (as returned by sys.exc_info()). tfileN( tStringIOtexcouttexc_infotexc_typetexc_valtexc_tbt tracebacktprint_exceptiontgetvalue(RURWRVRTRX((R&t_exception_tracebacks  t _SpoofOutcBstZdZddZRS(NcCsSti|}|o|id o|d7}nt|do |`n|S(Ns t softspace(RSR[tselftresulttendswiththasattrR^(R_R`((R&R[s  cCs.ti||t|do |`ndS(NR^(RSttruncateR_tsizeRbR^(R_Rd((R&Rcs(R;t __module__R[R5Rc(((R&R]s cCs?t|jo||jSn|it}t|djptdt|}}|d}|o/|i |ot|}|d=qt Sn|d}|o3|i |o|t|8}|d=qt Sn||jot SnxH|D]@}|i |||}|djot Sn|t|7}qWtS(s_ Essentially the only subtle case: >>> _ellipsis_match('aa...aa', 'aaa') False iiiN(tELLIPSIS_MARKERtwanttgottsplittwsR%tAssertionErrortstartpostendpostwt startswithtFalseRatfindtTrue(RgRhRnRjRlRm((R&t_ellipsis_matchs6        cCs'|i}|o d|SndSdS(s)Return a commented form of the given lines# t#N(tlinetrstrip(Ru((R&t _comment_lineGs   t_OutputRedirectingPdbcBs tZdZdZdZRS(s A specialized version of the python debugger that redirects stdout to a given stream when interacting with the user. Stdout is *not* redirected when traced code is executed. cCs||_tii|dS(N(toutR_t_OutputRedirectingPdb__outtpdbtPdbt__init__(R_Ry((R&R}Us cGs=ti}|it_ztii||SWd|t_XdS(N( REtstdoutt save_stdoutR_RzR{R|ttrace_dispatchtargs(R_RR((R&RYs   (R;Ret__doc__R}R(((R&RxOs  cCsti|ptd|n|ido tdnt|dotii |i d}n}|i djoXt tidjo5tiddjo!tii tidd}qti}ntd|d tii||i dS( NsExpected a module: %rt/s1Module-relative files may not have absolute pathst__file__it__main__ts+Can't resolve paths relative to the module s (it has no __file__)(R<R=R>RJtpathRot ValueErrorRbtosRiRtbasedirR;R%REtargvtcurdirtjoin(R>RR((R&t_module_relative_pathds *! cBs#tZdZeddedZRS(sn A single doctest example, consisting of source code and expected output. `Example` defines the following attributes: - source: A single Python statement, always ending with a newline. The constructor adds a newline if needed. - want: The expected output from running the source code (either from stdout, or a traceback in case of exception). `want` ends with a newline unless it's empty, in which case it's an empty string. The constructor adds a newline if needed. - exc_msg: The exception message generated by the example, if the example is expected to generate an exception; or `None` if it is not expected to generate an exception. This exception message is compared against the return value of `traceback.format_exception_only()`. `exc_msg` ends with a newline unless it's `None`. The constructor adds a newline if needed. - lineno: The line number within the DocTest string containing this Example where the Example begins. This line number is zero-based, with respect to the beginning of the DocTest. - indent: The example's indentation in the DocTest string. I.e., the number of space characters that preceed the example's first prompt. - options: A dictionary mapping from option flags to True or False, which is used to override default options for this example. Any option flags not contained in this dictionary are left at their default value (as specified by the DocTestRunner's optionflags). By default, no options are set. icCs|idp|d7}n|o|id o|d7}n|dj o|id o|d7}n||_||_||_||_|djo h}n||_||_dS(Ns ( tsourceRaRgtexc_msgR5R_tlinenoROtoptions(R_RRgRRROR((R&R}s      (R;ReRR5R}(((R&R s "cBs)tZdZdZdZdZRS(se A collection of doctest examples that should be run in a single namespace. Each `DocTest` defines the following attributes: - examples: the list of examples. - globs: The namespace (aka globals) that the examples should be run in. - name: A name identifying the DocTest (typically, the name of the object whose docstring this DocTest was extracted from). - filename: The name of the file that this DocTest was extracted from, or `None` if the filename is unknown. - lineno: The line number within filename where this DocTest begins, or `None` if the line number is unavailable. This line number is zero-based, with respect to the beginning of the file. - docstring: The string that the examples were extracted from, or `None` if the string is unavailable. cCs[t|t p td||_||_|i|_||_||_ ||_ dS(s Create a new DocTest containing the given examples. The DocTest's globals are initialized with a copy of `globs`. s8DocTest no longer accepts str; use DocTestParser insteadN( R?texamplest basestringRkR_t docstringR3tcopyR$tfilenameR(R_RR3R$RRR((R&R}s    cCspt|idjo d}n4t|idjo d}ndt|i}d|i|i|i|fS(Nis no examplesis 1 examples %d exampless(R%R_RR$RR(R_R((R&t__repr__s   cCs[t|tpdSnt|i|i|it|f|i|i|it|fS(Ni( R?totherRtcmpR_R$RRtid(R_R((R&t__cmp__s!(R;ReRR}RR(((R&Rs   cBstZdZeideieiBZeideieiBeiBZ eidi Z ddZ dZ ddZdZeid eiZd Zeid eiZd Zd ZdZRS(sD A class used to parse strings containing doctest examples. s # Source consists of a PS1 line followed by zero or more PS2 lines. (?P (?:^(?P [ ]*) >>> .*) # PS1 line (?:\n [ ]* \.\.\. .*)*) # PS2 lines \n? # Want consists of any non-blank lines that do not start with PS1. (?P (?:(?![ ]*$) # Not a blank line (?![ ]*>>>) # Not a line starting with PS1 .*$\n? # But any other line )*) s # Grab the traceback header. Different versions of Python have # said different things on the first traceback line. ^(?P Traceback\ \( (?: most\ recent\ call\ last | innermost\ last ) \) : ) \s* $ # toss trailing whitespace on the header. (?P .*?) # don't blink: absorb stuff until... ^ (?P \w+ .*) # a line *starts* with alphanum. s ^[ ]*(#.*)?$sc Cs|i}|i|}|djo;dig}|idD]}|||qB~}ng} d\} } x|i i |D]}| i|| |i!| |id| |i7} |i||| \}} } }|i|pB| it|| |d| d|t|idd| n| |id|i|i7} |i} qW| i|| | S(s= Divide the given string into examples and intervening text, and return them as a list of alternating Examples and strings. Line numbers for the Examples are 0-based. The optional argument `name` is a name identifying this string, and is only used for error messages. is RRORN(ii(tstringt expandtabsR_t _min_indentt min_indentRt_[1]RitltoutputtcharnoRt _EXAMPLE_REtfinditertmtappendtstarttcountt_parse_exampleR$RRRgRt_IS_BLANK_OR_COMMENTR R%tgrouptend(R_RR$RRRRRRRRgRRR((R&tparse)s*  ; !%cCs%t|i|||||||S(s" Extract all doctest examples from the given string, and collect them into a `DocTest` object. `globs`, `name`, `filename`, and `lineno` are attributes for the new `DocTest` object. See the documentation for `DocTest` for more information. N(RR_t get_examplesRR$R3RR(R_RR3R$RR((R&t get_doctestPscCs?g}|i||D]!}t|to ||qq~S(s Extract all doctest examples from the given string, and return them as a list of `Example` objects. Line numbers are 0-based, because it's most common in doctests that nothing interesting appears on the same line as opening triple-quote, and so the first interesting line is called "line 1" then. The optional argument `name` is a name identifying this string, and is only used for error messages. N(RR_RRR$txR?R (R_RR$RR((R&R\s cCst|id}|idid} |i| ||||i | dd|d||di g}| D]} || |dqv~} |id} | id}t|djo"tid |d o |d =n|i |d|||t| di g}|D]}|||q~} |ii| }|o|id }nd }|i| ||} | | | |fS( s Given a regular expression match from `_EXAMPLE_RE` (`m`), return a pair `(source, want)`, where `source` is the matched example's source code (with prompts and indentation stripped); and `want` is the example's expected output (with indentation stripped). `name` is the string's name, and `lineno` is the line number where the example starts; both are used for error messages. RORs iRLt.iRgs *$itmsgN(R%RRRORit source_linesR_t_check_prompt_blankR$Rt _check_prefixRRtslRRgt want_linesRMtmatchtwlt _EXCEPTION_RERR5t _find_optionsR(R_RR$RRORRRRRRgRRR((R&Rjs& "2* .s#\s*doctest:\s*([^\n\'"]*)$c Csh}x|ii|D]}|ididdi}xs|D]k}|ddjp|dt jo!t d|d||fnt |d}|ddj||RpR<t getmodulet getsourcefiletgetfileRRt linecachetgetlinesRRJR3t__dict__Rt extraglobstupdatettestsR_t_findtsort( R_RR$R>R3RRRRR((R&Rqs6#  !          cCs |idj o|i||S(sI Return true if the given object should not be examined. N(R_RR5R.R-(R_RR.R-((R&t_filterZscCs|djotSnti|o|i|ijSnti|o|i |i jSnvti |dj o|ti |jSnIt |do|i |i jSn%t |totSn tddS(sY Return true if the given object is defined in the given module. Res"object must be a class or functionN(R>R5RrR<t isfunctiontobjectRt func_globalstisclassR;ReRRbR?tpropertyR(R_R>R((R&t _from_moduleas c Csj|io d|GHnt||jodSnd|t|<|i|||||} | dj o|i | nti|o|iox|iiD]\} }|i||| oqnd|| f} ti|pti|o6|i||o#|i||| ||||qqWnti|o|ioxt|dhiD]\} }t| tptdt| fnti|p=ti|p-ti|pti|p t|tptdt|fnd|| f} |i||| ||||qoWnti|o |iox|iiD]\} }|i||| oqvnt|t ot|| }nt|t!ot|| i"}nti|p ti|pt|t#oF|i||o3d|| f} |i||| ||||qvqvWndS( sm Find tests for the given object and any contained objects, and add them to `tests`. sFinding tests in %sNis%s.%st__test__s5DocTestFinder.find: __test__ keys must be strings: %rs`DocTestFinder.find: __test__ values must be strings, functions, methods, classes, or modules: %rs%s.__test__.%s($R_RR$RRtseent _get_testR>R3RttestR5RRR<R=RRtitemstvalnametvalRRRRRR7R?RRRtismethodt staticmethodt classmethodtim_funcR( R_RRR$R>RR3RRRR((R&RusR    3 P Cc Cst|to |}njyG|idjo d}n*|i}t|tpt|}nWnttfj o d}nX|i ||}|i o| odSn|djo d}n5t|d|i}|ddjo|d }n|ii|||||S( ss Return a DocTest for the given object, if it defines a docstring; otherwise, return None. RRis.pycs.pyoiN(s.pycs.pyo(R?RRRRR5R@RJtAttributeErrorR_t _find_linenoRRRR>RR7R;RRR3R$( R_RR$R>R3RRRR((R&Rs*      cCsd}ti|o d}nti|op|djodSntidt |dd}x9t |D]'\}}|i|o |}PqqqqWnti|o |i}nti|o |i}nti|o |i}nti|o |i}nti|ot |ddd}n|dj oh|djo |dSntid}x=t|t|D]"}|i||o|SqqWndS( s Return a line number of the given object's docstring. Note: this method assumes that the object has a docstring. is^\s*class\s*%s\bR;t-tco_firstlinenois(^|.*:)\s*\w*("|')N(R5RR<R=RRRRMRR7tpatRRRuRRRRt func_codet istracebackttb_frametisframetf_codetiscodetrangeR%(R_RRRRRRu((R&Rs@           (R;ReRRpRRrR5R}RqRRRRR(((R&Rs T   E %cBstZdZddZeeddZdZdZdZdZ d Z d Z d Z e id Zd ZeeedZedZdZRS(s A class used to run DocTest test cases, and accumulate statistics. The `run` method is used to process a single DocTest case. It returns a tuple `(f, t)`, where `t` is the number of test cases tried, and `f` is the number of test cases that failed. >>> tests = DocTestFinder().find(_TestClass) >>> runner = DocTestRunner(verbose=False) >>> tests.sort(key = lambda test: test.name) >>> for test in tests: ... print test.name, '->', runner.run(test) _TestClass -> (0, 2) _TestClass.__init__ -> (0, 2) _TestClass.get -> (0, 2) _TestClass.square -> (0, 1) The `summarize` method prints a summary of all the test cases that have been run by the runner, and returns an aggregated `(f, t)` tuple: >>> runner.summarize(verbose=1) 4 items passed all tests: 2 tests in _TestClass 2 tests in _TestClass.__init__ 2 tests in _TestClass.get 1 tests in _TestClass.square 7 tests in 4 items. 7 passed and 0 failed. Test passed. (0, 7) The aggregated number of tried examples and failed examples is also available via the `tries` and `failures` attributes: >>> runner.tries 7 >>> runner.failures 0 The comparison between expected outputs and actual outputs is done by an `OutputChecker`. This comparison may be customized with a number of option flags; see the documentation for `testmod` for more information. If the option flags are insufficient, then the comparison may also be customized by passing a subclass of `OutputChecker` to the constructor. The test runner's display output can be controlled in two ways. First, an output function (`out) can be passed to `TestRunner.run`; this function will be called with strings that should be displayed. It defaults to `sys.stdout.write`. If capturing the output is not sufficient, then the display output can be also customized by subclassing DocTestRunner, and overriding the methods `report_start`, `report_success`, `report_unexpected_exception`, and `report_failure`. R:iFicCsy|pt|_|djodtij}n||_||_ ||_ d|_ d|_ h|_ t|_dS(sc Create a new test runner. Optional keyword arg `checker` is the `OutputChecker` that should be used to compare the expected outputs and actual outputs of doctest examples. Optional keyword arg 'verbose' prints lots of stuff if true, only failures if false; by default, it's true iff '-v' is in sys.argv. Optional argument `optionflags` can be used to control how the test runner compares expected output to actual output, and how it displays failures. See the documentation for `testmod` for more information. s-viN(tcheckerRR_t_checkerRR5RERRt optionflagstoriginal_optionflagsttriestfailurest_name2ftR]t_fakeout(R_RRR((R&R}Os       cCsc|ioU|io,|dt|idt|iq_|dt|idndS(s Report that the test runner is about to process the given example. (Only displays a message if verbose=True) sTrying: s Expecting: sExpecting nothing N(R_RtexampleRgRyRQR(R_RyRR ((R&t report_startss   ,cCs|io|dndS(st Report that the given example ran successfully. (Only displays a message if verbose=True) sok N(R_RRy(R_RyRR Rh((R&treport_successs cCs3||i|||ii|||idS(s7 Report that the given example failed. N( RyR_t_failure_headerRR Rtoutput_differenceRhR(R_RyRR Rh((R&treport_failurescCs.||i||dtt|dS(sO Report that the given example raised an unexpected exception. sException raised: N(RyR_RRR RQR\RU(R_RyRR RU((R&treport_unexpected_exceptionscCs|ig}|iob|idj o(|idj o|i|id}nd}|id|i||i fn"|id|id|i f|id|i }|it |di |S(Nit?sFile "%s", line %s, in %ssLine %s, in %ssFailed example:s ( R_tDIVIDERRyRRRR5R RR$RRQR(R_RR RRRy((R&Rs   $!  cBsd}} |i} ed\} }}|i i }xPe |iD]?\}}|ie@o |dj}| |_|ioNxK|iiD]6\}}|o|i|O_q|i|M_qWn| d7} |p|i|||nd|i|f}y7e|i|d|d|iU|ii d }Wn5e#j o n!e$i%}|ii nX|i&i'} |i&i)d|}|d jo'||i+| |io | }qne$i%}e,i-|d d} |p| e/|7} n|i.d jo |}n||i.| |io | }nz|ie0@oke1i2d|i.}e1i2d| }|o9|o2||i5d|i5d|io | }qn|| jo%|p|i6|||| qqD||jo/|p|i7|||| n|d7}qD||jo/|p|i8||||n|d7}qDe9pt:d |fqDW| |_|i;||| || fS( s Run the examples in `test`. Write the outcome of each example with one of the `DocTestRunner.report_*` methods, using the writer function `out`. `compileflags` is the set of compiler flags that should be used to execute examples. Return a tuple `(f, t)`, where `t` is the number of examples tried, and `f` is the number of examples that failed. The examples are run in the namespace `test.globs`. iiistsingleiis[^:]*:sunknown outcomeN(<R RR_RRRtSUCCESStFAILUREtBOOMRt check_outputtcheckRRRt examplenumR R tquietRRt optionflagRR RyR$RRRt compileflagsR3tdebuggert set_continueR5t exceptiontKeyboardInterruptRERUR R[RhRctoutcomeRgRYtformat_exception_onlyRR\RRMRtm1tm2RRRRRpRkt_DocTestRunner__record_outcome(R_RRRyRRRR%R&RhRRRRRUR!RRRRRR R#R ((R&t__runs                )      cCs^|ii|id\}}||||f|i|i<|i |7_ |i |7_ dS(s{ Record the fact that the given DocTest (`test`) generated `f` failures out of `t` tried examples. iN(ii( R_R R4RR$tf2tt2tfttR R(R_RR+R,R)R*((R&t__record_outcome"s s3[\w\.]+)\[(?P\d+)\]>$cCsy|ii|}|oO|id|iijo3|iit |id}|i i t Sn|i|SdS(NR$R(R_t%_DocTestRunner__LINECACHE_FILENAME_RERRRRRR$RtintR Rt splitlinesRrtsave_linecache_getlines(R_RRR ((R&t__patched_linecache_getlines/s #cCs||_|djot|i}nti}|djo |i }n|i t_t i }t||_|ii|ii t _ ti|_|it_z|i|||SWd|t_|t _ |it_|o|iinXdS(sJ Run the examples in `test`, and display the results using the writer function `out`. The examples are run in the namespace `test.globs`. If `clear_globs` is true (the default), then this namespace will be cleared after the test runs, to help with garbage collection. If you would like to examine the namespace after the test completes, then use `clear_globs=False`. `compileflags` gives the set of flags that should be used by the Python compiler when running the examples. If not specified, then it will default to the set of future-import flags that apply to `globs`. The output of each example is checked using `DocTestRunner.check_output`, and the results are formatted by the `DocTestRunner.report_*` methods. N(RR_RR5R9R3RER~RRytwriteR R{t set_tracetsave_set_traceRxRtresetRRR1t*_DocTestRunner__patched_linecache_getlinest_DocTestRunner__runt clear_globstclear(R_RRRyR9RR5((R&trun7s,             c Cs3|djo |i}ng} g}g}d}} x|i i D]} | \}\}}||jpt||7}| |7} |djo| i|qF|djo|i||fqF|i| qFW|o| o7t| GdGH| ix| D]} dG| GHqWn|oCt|GdGH|ix'|D]\} }d|| fGHqEWqln|oT|iGHt|GdGH|ix0|D]$\} \}}d||| fGHqWn|o3|GdGt|i Gd GH|| Gd G| Gd GHn| od G| Gd GHn|o dGHn| |fS(s Print a summary of all the test cases that have been run by this DocTestRunner, and return a tuple `(f, t)`, where `f` is the total number of failed examples, and `t` is the total number of tried examples. The optional `verbose` argument controls how detailed the summary is. If the verbosity is not specified, then the DocTestRunner's verbosity is used. isitems had no tests:s sitems passed all tests:s %3d tests in %ssitems had failures:s %3d of %3d in %sstests insitems.s passed andsfailed.s***Test Failed***s failures.s Test passed.N(RR5R_RtnoteststpassedtfailedttotaltttotalfR RRR$R+R,RkRR%RtthingRR( R_RRR+R?R$R>R,R=RR@RAR<((R&t summarizeps\             cCs|i}xu|iiD]d\}\}}||jo5d|dGH||\}}||}||}n||f||>> runner = DebugRunner(verbose=False) >>> test = DocTestParser().get_doctest('>>> raise KeyError\n42', ... {}, 'foo', 'foo.py', 0) >>> try: ... runner.run(test) ... except UnexpectedException, failure: ... pass >>> failure.test is test True >>> failure.example.want '42\n' >>> exc_info = failure.exc_info >>> raise exc_info[0], exc_info[1], exc_info[2] Traceback (most recent call last): ... KeyError We wrap the original exception to give the calling application access to the test and example information. If the output doesn't match, then a DocTestFailure is raised: >>> test = DocTestParser().get_doctest(''' ... >>> x = 1 ... >>> x ... 2 ... ''', {}, 'foo', 'foo.py', 0) >>> try: ... runner.run(test) ... except DocTestFailure, failure: ... pass DocTestFailure objects provide access to the test: >>> failure.test is test True As well as to the example: >>> failure.example.want '2\n' and the actual output: >>> failure.got '1\n' If a failure or error occurs, the globals are left intact: >>> del test.globs['__builtins__'] >>> test.globs {'x': 1} >>> test = DocTestParser().get_doctest(''' ... >>> x = 2 ... >>> raise KeyError ... ''', {}, 'foo', 'foo.py', 0) >>> runner.run(test) Traceback (most recent call last): ... UnexpectedException: >>> del test.globs['__builtins__'] >>> test.globs {'x': 2} But the globals are cleared if there is no error: >>> test = DocTestParser().get_doctest(''' ... >>> x = 2 ... ''', {}, 'foo', 'foo.py', 0) >>> runner.run(test) (0, 1) >>> test.globs {} cCs7ti||||t}|o|i i n|S(N( RR;R_RRRyRptrR9R3R:(R_RRRyR9RV((R&R;scCst|||dS(N(RRR RU(R_RyRR RU((R&RscCst|||dS(N(RRR Rh(R_RyRR Rh((R&Rs(R;ReRR5RrR;RR(((R&R_s Y c CsN|d j otidtn|d jotiid}nt i |pt d|fn|d jo |i }ntd|d| } |otd|d|} ntd|d|} x3| i||d|d |D]} | i| qW|o| intd jo | anti| | i | i!fS( s m=None, name=None, globs=None, verbose=None, isprivate=None, report=True, optionflags=0, extraglobs=None, raise_on_error=False, exclude_empty=False Test examples in docstrings in functions and classes reachable from module m (or the current module if m is not supplied), starting with m.__doc__. Unless isprivate is specified, private names are not skipped. Also test examples reachable from dict m.__test__ if it exists and is not None. m.__test__ maps names to functions, classes and strings; function and class docstrings are tested even if the name is private; strings are tested directly, as if they were docstrings. Return (#failures, #tests). See doctest.__doc__ for an overview. Optional keyword arg "name" gives the name of the module; by default use m.__name__. Optional keyword arg "globs" gives a dict to be used as the globals when executing examples; by default, use m.__dict__. A copy of this dict is actually used for each docstring, so that each docstring's examples start with a clean slate. Optional keyword arg "extraglobs" gives a dictionary that should be merged into the globals that are used to execute examples. By default, no extra globals are used. This is new in 2.4. Optional keyword arg "verbose" prints lots of stuff if true, prints only failures if false; by default, it's true iff "-v" is in sys.argv. Optional keyword arg "report" prints a summary at the end when true, else prints nothing at the end. In verbose mode, the summary is detailed, else very brief (in fact, empty if all tests passed). Optional keyword arg "optionflags" or's together module constants, and defaults to 0. This is new in 2.3. Possible values (see the docs for details): DONT_ACCEPT_TRUE_FOR_1 DONT_ACCEPT_BLANKLINE NORMALIZE_WHITESPACE ELLIPSIS IGNORE_EXCEPTION_DETAIL REPORT_UDIFF REPORT_CDIFF REPORT_NDIFF REPORT_ONLY_FIRST_FAILURE Optional keyword arg "raise_on_error" raises an exception on the first unexpected exception or failure. This allows failures to be post-mortem debugged. Deprecated in Python 2.4: Optional keyword arg "isprivate" specifies a function used to determine whether a name is private. The default function is treat all functions as public. Optionally, "isprivate" can be set to doctest.is_private to skip over functions marked as private using the underscore naming convention; see its docs for details. Advanced tomfoolery: testmod runs methods of a local instance of class doctest.Tester, then merges the results into (or creates) global Tester instance doctest.master. Methods of doctest.master can be called directly too, if you want to do something unusual. Passing report=0 to testmod is especially useful then, to delay displaying a summary. Invoke doctest.master.summarize(verbose) when you're done fiddling. sPthe isprivate argument is deprecated; examine DocTestFinder.find() lists insteadRstestmod: module required; %rRRRRR3RN("t isprivateR5R*R+R,RRERFR4R<R=RJR$R;RRtfindertraise_on_errorRRRtrunnerRRqR3RRR;treportRBtmasterRDR R( RR$R3RRWR[RRRYRRZRRX((R&Rs0H         c Csa|o| otdn|ot|}t||}n|djoti i |}n|djo h}n |i }|dj o|i|n| otd|d|} ntd|d|} t|i} | i| |||d} | i| |o| intdjo | anti| | i | i!fS(s Test examples in the given file. Return (#failures, #tests). Optional keyword arg "module_relative" specifies how filenames should be interpreted: - If "module_relative" is True (the default), then "filename" specifies a module-relative path. By default, this path is relative to the calling module's directory; but if the "package" argument is specified, then it is relative to that package. To ensure os-independence, "filename" should use "/" characters to separate path segments, and should not be an absolute path (i.e., it may not begin with "/"). - If "module_relative" is False, then "filename" specifies an os-specific path. The path may be absolute or relative (to the current working directory). Optional keyword arg "name" gives the name of the test; by default use the file's basename. Optional keyword argument "package" is a Python package or the name of a Python package whose directory should be used as the base directory for a module relative filename. If no package is specified, then the calling module's directory is used as the base directory for module relative filenames. It is an error to specify "package" if "module_relative" is False. Optional keyword arg "globs" gives a dict to be used as the globals when executing examples; by default, use {}. A copy of this dict is actually used for each docstring, so that each docstring's examples start with a clean slate. Optional keyword arg "extraglobs" gives a dictionary that should be merged into the globals that are used to execute examples. By default, no extra globals are used. Optional keyword arg "verbose" prints lots of stuff if true, prints only failures if false; by default, it's true iff "-v" is in sys.argv. Optional keyword arg "report" prints a summary at the end when true, else prints nothing at the end. In verbose mode, the summary is detailed, else very brief (in fact, empty if all tests passed). Optional keyword arg "optionflags" or's together module constants, and defaults to 0. Possible values (see the docs for details): DONT_ACCEPT_TRUE_FOR_1 DONT_ACCEPT_BLANKLINE NORMALIZE_WHITESPACE ELLIPSIS IGNORE_EXCEPTION_DETAIL REPORT_UDIFF REPORT_CDIFF REPORT_NDIFF REPORT_ONLY_FIRST_FAILURE Optional keyword arg "raise_on_error" raises an exception on the first unexpected exception or failure. This allows failures to be post-mortem debugged. Optional keyword arg "parser" specifies a DocTestParser (or subclass) that should be used to extract tests from the files. Advanced tomfoolery: testmod runs methods of a local instance of class doctest.Tester, then merges the results into (or creates) global Tester instance doctest.master. Methods of doctest.master can be called directly too, if you want to do something unusual. Passing report=0 to testmod is especially useful then, to delay displaying a summary. Invoke doctest.master.summarize(verbose) when you're done fiddling. s8Package may only be specified for module-relative paths.RRiN("tpackagetmodule_relativeRRKRRR$R5RRtbasenameR3RRRRYRRRRZRtopentreadRPRRRR;R[RBR\RDR R(RR^R$R]R3RR[RRRYRRZRRP((R&RCs4J          tNoNamec Csdtd|dt}td|d|}x3|i||d|D]}|i |d|qCWdS(sr Test examples in the given object's docstring (`f`), using `globs` as globals. Optional argument `name` is used in failure messages. If the optional argument `verbose` is true, then generate output even if there are no failures. `compileflags` gives the set of flags that should be used by the Python compiler when running the examples. If not specified, then it will default to the set of future-import flags that apply to `globs`. Optional keyword arg `optionflags` specifies options for the testing and output. See the documentation for `testmod` for more information. RRRR3RN(RRRpRXRRRZRqR+R$R3RR;R( R+R3RR$RRRZRRX((R&Rs cBsbtZddddddZdZdddZddZdZddZdZ RS( NicCstidtdd|djo|djotdn|dj o(ti| otd|fn|djo |i }n||_||_ ||_ ||_ td||_td|d||_dS( NsCclass Tester is deprecated; use class doctest.DocTestRunner insteadR'is*Tester.__init__: must specify mod or globss)Tester.__init__: mod must be a module; %rRRR(R*R+R,tmodR5R3RJR<R=RR_RRWRRt testfinderRt testrunner(R_RcR3RRWR((R&R}s         cCs}ti||i|dd}|io dG|GHn|i i |\}}|io|GdG|GdG|GHn||fS(NsRunning stringtofsexamples failed in string( RRRPR_R3R$R5RRReR;R+R,(R_RPR$R+R,R((R&t runstrings!   c Csvd}}|ii||d|d|i}x;|D]3} |i i | \}}||||}}q5W||fS(NiR>R3(R+R,R_RdRqRR$R>R3RRReR;R)R*( R_RR$R>RR+R*R)R,R((R&trundocs cCsRdk}|i|}|ii||djo t}n|i |||S(N( tnewR>R$RRRRCR5RpR_Rh(R_RCR$R>RRi((R&trundicts    cCs1dk}|i|}||_|i||S(N(RiR>R$RRCRR_Rh(R_RCR$RiR((R&t run__test__s  cCs|ii|S(N(R_ReRBR(R_R((R&RB scCs|ii|idS(N(R_ReRDR(R_R((R&RDs( R;ReR5R}RgRhRjRkRBRD(((R&Rs    cCs4|t@|jotd|nt}|a|S(s?Sets the unittest option flags. The old flag is returned so that a runner could restore the old value if it wished to: >>> import doctest >>> old = doctest._unittest_reportflags >>> doctest.set_unittest_reportflags(REPORT_NDIFF | ... REPORT_ONLY_FIRST_FAILURE) == old True >>> doctest._unittest_reportflags == (REPORT_NDIFF | ... REPORT_ONLY_FIRST_FAILURE) True Only reporting flags can be set: >>> doctest.set_unittest_reportflags(ELLIPSIS) Traceback (most recent call last): ... ValueError: ('Only reporting flags allowed', 8) >>> doctest.set_unittest_reportflags(old) == (REPORT_NDIFF | ... REPORT_ONLY_FIRST_FAILURE) True sOnly reporting flags allowedN(R/R Rt_unittest_reportflagstold(R/Rm((R&Rst DocTestCasecBsktZdddddZdZdZdZdZdZdZ d Z e Z d Z RS( NicCsAtii|||_||_||_ ||_ ||_ dS(N(tunittesttTestCaseR}R_Rt_dt_optionflagsRt _dt_checkerRt_dt_testtsetUpt _dt_setUpttearDownt _dt_tearDown(R_RRRtRvR((R&R}?s     cCs.|i}|idj o|i|ndS(N(R_RsRRuR5(R_R((R&RtIs cCs;|i}|idj o|i|n|iidS(N(R_RsRRwR5R3R:(R_R((R&RvOs cCs|i}ti}t}|i}|t @p|t O}nt d|d|i dt}z5dd|_|i|d|idt\}}Wd|t_X|o"|i|i|indS(NRRRRiFRyR9(R_RsRRER~RmRSRiRqRR RlRRrRpRZRR;R3R RtfailureExceptiontformat_failureR[(R_RmRZRR RRiR((R&trunTestWs       ( cCsl|i}|idjo d}nd|i}di|iidd}d|i|i |||fS(Nsunknown line numbers%sRis:Failed doctest test for %s File "%s", line %s, in %s %s( R_RsRRR5RR$RitlnameRterr(R_R|R{RR((R&Ryos    cCsI|itd|id|idt}|i|i|i dS(sRun the test case without results and without catching exceptions The unit test framework includes a debug method on test cases and test suites to support post-mortem debugging. The test code is run in such a way that errors are not caught. This way a caller can catch the errors and initiate post-mortem debugging. The DocTestCase provides a debug method that raises UnexpectedException errors if there is an unexepcted exception: >>> test = DocTestParser().get_doctest('>>> raise KeyError\n42', ... {}, 'foo', 'foo.py', 0) >>> case = DocTestCase(test) >>> try: ... case.debug() ... except UnexpectedException, failure: ... pass The UnexpectedException contains the test, the example, and the original exception: >>> failure.test is test True >>> failure.example.want '42\n' >>> exc_info = failure.exc_info >>> raise exc_info[0], exc_info[1], exc_info[2] Traceback (most recent call last): ... KeyError If the output doesn't match, then a DocTestFailure is raised: >>> test = DocTestParser().get_doctest(''' ... >>> x = 1 ... >>> x ... 2 ... ''', {}, 'foo', 'foo.py', 0) >>> case = DocTestCase(test) >>> try: ... case.debug() ... except DocTestFailure, failure: ... pass DocTestFailure objects provide access to the test: >>> failure.test is test True As well as to the example: >>> failure.example.want '2\n' and the actual output: >>> failure.got '1\n' RRRN( R_RtRRqRrRpRZR;RsRv(R_RZ((R&R {s @  cCs |iiS(N(R_RsR$(R_((R&RscCs4|iiid}d|ddi|d fS(NRs%s (%s)i(R_RsR$RiR(R_R$((R&RscCsd|iiS(Ns Doctest: (R_RsR$(R_((R&tshortDescriptions( R;ReR5R}RtRvRzRyR RRRUR}(((R&Rn=s    H  c Ks|d jo t}nt|}|i|d|d|}|d jo |i }n|pt |dn|i t i }x|D]x}t|idjoqn|ip5|i}|dd jo|d }n||_n|it||qW|S( s Convert doctest tests for a module to a unittest test suite. This converts each documentation string in a module that contains doctest tests to a unittest test case. If any of the tests in a doc string fail, then the test case fails. An exception is raised showing the name of the file containing the test and a (sometimes approximate) line number. The `module` argument provides the module to be tested. The argument can be either a module or a module name. If no argument is given, the calling module is used. A number of options may be provided as keyword arguments: setUp A set-up function. This is called before running the tests in each file. The setUp function will be passed a DocTest object. The setUp function can access the test globals as the globs attribute of the test passed. tearDown A tear-down function. This is called after running the tests in each file. The tearDown function will be passed a DocTest object. The tearDown function can access the test globals as the globs attribute of the test passed. globs A dictionary containing initial global variables for the tests. optionflags A set of doctest option flags expressed as an integer. R3Rs has no testsiis.pycs.pyoiN(s.pycs.pyo(t test_finderR5RRKR>RqR3RRRRRRot TestSuitetsuiteRR%RRRtaddTestRnR( R>R3RR~RRRRR((R&Rs,#          t DocFileCasecBs)tZdZdZeZdZRS(NcCsdi|iiidS(NR(R(RR_RsR$Ri(R_((R&R scCs |iiS(N(R_RsR(R_((R&R scCsd|ii|ii|fS(Ns2Failed doctest test for %s File "%s", line 0 %s(R_RsR$RR|(R_R|((R&Ry s(R;ReRRRURy(((R&R s  c Ks|djo h}n|o| otdn|ot|}t||}ntii |}t |i }|i||||d}t||S(Ns8Package may only be specified for module-relative paths.i(R3R5R]R^RRKRRRR_R$R`RatdocRRRRR( RR^R]R3RRR$RR((R&t DocFileTest s   cOsgti}|idtot|id|dA unittest suite for one or more doctest files. The path to each doctest file is given as a string; the interpretation of that string depends on the keyword argument "module_relative". A number of options may be provided as keyword arguments: module_relative If "module_relative" is True, then the given file paths are interpreted as os-independent module-relative paths. By default, these paths are relative to the calling module's directory; but if the "package" argument is specified, then they are relative to that package. To ensure os-independence, "filename" should use "/" characters to separate path segments, and may not be an absolute path (i.e., it may not begin with "/"). If "module_relative" is False, then the given file paths are interpreted as os-specific paths. These paths may be absolute or relative (to the current working directory). package A Python package or the name of a Python package whose directory should be used as the base directory for module relative paths. If "package" is not specified, then the calling module's directory is used as the base directory for module relative filenames. It is an error to specify "package" if "module_relative" is False. setUp A set-up function. This is called before running the tests in each file. The setUp function will be passed a DocTest object. The setUp function can access the test globals as the globs attribute of the test passed. tearDown A tear-down function. This is called after running the tests in each file. The tearDown function will be passed a DocTest object. The tearDown function can access the test globals as the globs attribute of the test passed. globs A dictionary containing initial global variables for the tests. optionflags A set of doctest option flags expressed as an integer. parser A DocTestParser (or subclass) that should be used to extract tests from the files. R^R]N( RoRRtkwR4RrRKtpathsRRR(RRRR((R&R2 s4 cCsBg}xti|D]}t|too|i|id |i }|oG|id|g}|i dd D]}|d|q{~7}qq|g}|i dd D]}|t |q~7}qWx'|o|ddjo|iqWx*|o"|ddjo|idqWdi|dS(svExtract script from text with examples. Converts text with examples to a Python script. Example input is converted to regular code. Example output and all other words are converted to comments: >>> text = ''' ... Here are examples of simple math. ... ... Python has super accurate integer addition ... ... >>> 2 + 2 ... 5 ... ... And very friendly error messages: ... ... >>> 1/0 ... To Infinity ... And ... Beyond ... ... You can use logic if you want: ... ... >>> if 0: ... ... blah ... ... blah ... ... ... ... Ho hum ... ''' >>> print script_from_examples(text) # Here are examples of simple math. # # Python has super accurate integer addition # 2 + 2 # Expected: ## 5 # # And very friendly error messages: # 1/0 # Expected: ## To Infinity ## And ## Beyond # # You can use logic if you want: # if 0: blah blah # # Ho hum is # Expected:s s## RtiN(RRRRPtpieceR?R RRRgRRiRRwtpopR(RPRRRRgR((R&Rx s$9  ><cCst|}ti|}g}|D]!}|i|jo ||q)q)~}|pt |dn|d}t |i }|S(sExtract the test sources from a doctest docstring as a script. Provide the module (or dotted name of the module) containing the test to be debugged and the name (within the module) of the object with the doc string with tests to be debugged. snot found in testsiN( RKR>RRqRRR,R$RRRRttestsrc(R>R$RRRR,R((R&R s 5 cCs t|}t|||dS(s4Debug a single doctest docstring, in argument `src`'N(RtsrcRt debug_scripttpmR3(RRR3R((R&R s cCsdk}tidd}t|d}|i||iz|o|i }nh}|oHyt |||Wqt idGH|it idqXn|id|||Wdti|XdS(s7Debug a test script. `src` is the script, as a string.Ns.pyt doctestdebugRniis execfile(%r)(R{ttempfiletmktempt srcfilenameR`R+R3RtcloseR3RRtexecfileRERUt post_mortemR;Rtremove(RRR3R+RR{((R&R s&   cCs2t|}t||}t|||idS(sDebug a single doctest docstring. Provide the module (or dotted name of the module) containing the test to be debugged and the name (within the module) of the object with the docstring with tests to be debugged. N(RKR>RR$RRRR(R>R$RR((R&R s t _TestClasscBs)tZdZdZdZdZRS(s A pointless class, for sanity-checking of docstring testing. Methods: square() get() >>> _TestClass(13).get() + _TestClass(-12).get() 1 >>> hex(_TestClass(13).square().get()) '0xa9' cCs ||_dS(sval -> _TestClass object with associated value val. >>> t = _TestClass(123) >>> print t.get() 123 N(RR_(R_R((R&R} scCs|id|_|S(sosquare() -> square TestClass's associated value >>> _TestClass(13).square().get() 169 iN(R_R(R_((R&tsquare% scCs|iS(s}get() -> return TestClass's associated value. >>> x = _TestClass(-42) >>> print x.get() -42 N(R_R(R_((R&R4/ s(R;ReRR}RR4(((R&R s  Rs Example of a string object, searched as-is. >>> x = 1; y = 2 >>> x + y, x * y (3, 2) sbool-int equivalences In 2.2, boolean expressions displayed 0 or 1. By default, we still accept them. This can be disabled by passing DONT_ACCEPT_TRUE_FOR_1 to the new optionflags argument. >>> 4 == 4 1 >>> 4 == 4 True >>> 4 > 4 0 >>> 4 > 4 False s blank liness Blank lines can be marked with : >>> print 'foo\n\nbar\n' foo bar tellipsiss If the ellipsis flag is used, then '...' can be used to elide substrings in the desired output: >>> print range(1000) #doctest: +ELLIPSIS [0, 1, 2, ..., 999] swhitespace normalizations| If the whitespace normalization flag is used, then differences in whitespace are ignored. >>> print range(30) #doctest: +NORMALIZE_WHITESPACE [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] cCs ti}|itdS(N(RotTextTestRunnerRVR;R(RV((R&t_testk s R(PRt __docformat__t__all__R0RERYR<RRRMttypesRoRKR{RR*RStfilterwarningsR,R;R"RRRRRRRRRR R R RFRfR R9RKRQR\R]RsRwR|RxRR RRRRRt ExceptionRRRR5R\RrRpRRRRRlRRpRnRRRRRRRRR RRR(DRR0RRFRoRRRRKRRRRxRsRRRRRRRRRMR RRnRRRwRRRRR]R*RRR R<RRRRRR9RQR RRRER"RRSRR RYRKRRRRfR R RRR{RR\((R&R.si. ?$                  1  $5<0n't*vA $? F R  ,<2  c@sdZdZdZddddddd gZd kZdefd YZhd Zd Z dZ dZ d e fdYZ eaeadZd S(s,Drop-in replacement for the thread module. Meant to be used as a brain-dead substitute so that threaded code does not need to be rewritten for when the thread module is not present. Suggested usage is:: try: import thread except ImportError: import dummy_thread as thread s Brett Cannonsbrett@python.orgterrortstart_new_threadtexitt get_identt allocate_locktinterrupt_maintLockTypeNcBstZdZdZRS(s%Dummy implementation of thread.error.cGs ||_dS(N(targstself(RR((t"/usr/lib/python2.4/dummy_thread.pyt__init__s(t__name__t __module__t__doc__R (((R Rs cCst|ttjotdnt|ttjotdntay|||Wn#t j ont i nXt at ota tndS(sDummy implementation of thread.start_new_thread(). Compatibility is maintained by making sure that ``args`` is a tuple and ``kwargs`` is a dictionary. If an exception is raised and it is SystemExit (which can be done by thread.exit()) it is caught and nothing is done; all other exceptions are printed out by using traceback.print_exc(). If the executed function calls interrupt_main the KeyboardInterrupt will be raised when the function returns. s2nd arg must be a tuples3rd arg must be a dictN(ttypeRttuplet TypeErrortkwargstdicttFalset_maintfunctiont SystemExitt _tracebackt print_exctTruet _interrupttKeyboardInterrupt(RRR((R Rs$ cCs tdS(s&Dummy implementation of thread.exit().N(R(((R R=scCsdS(sDummy implementation of thread.get_ident(). Since this module should only be used when threadmodule is not available, it is safe to assume that the current process is the only thread. Thus a constant can be safely returned. iN((((R RAscCstS(s/Dummy implementation of thread.allocate_lock().N(R(((R RJscBs5tZdZdZedZdZdZRS(sClass implementing dummy implementation of thread.LockType. Compatibility is maintained by maintaining self.locked_status which is a boolean that stores the state of the lock. Pickling of the lock, though, should not be done since if the thread module is then used with an unpickled ``lock()`` from here problems could occur from this class not having atomic methods. cCs t|_dS(N(RRt locked_status(R((R R YscCsY|djot|_dSn8|p#|ipt|_tSqUtSnt|_tSdS(sDummy implementation of acquire(). For blocking calls, self.locked_status is automatically set to True and returned appropriately based on value of ``waitflag``. If it is non-blocking, then the value is actually checked and not set if it is already acquired. This is all done so that threading.Condition's assert statements aren't triggered and throw a little fit. N(twaitflagtNoneRRRR(RR((R tacquire\s      cCs!|ip tnt|_tS(sRelease the dummy lock.N(RRRRR(R((R treleasets    cCs|iS(N(RR(R((R tlocked}s(R R R R RRR R!(((R RNs    cCsto tntadS(s^Set _interrupt flag to True to have start_new_thread raise KeyboardInterrupt upon exiting.N(RRRR(((R Rs  (R t __author__t __email__t__all__t tracebackRt ExceptionRRRRRtobjectRRRRRR( RR$RRRR"R#RRRR((R t? s    3c@s^dZdklZdkZeZeZeZzdejoedZ e ZnededAdd character set properties to the global registry. charset is the input character set, and must be the canonical name of a character set. Optional header_enc and body_enc is either Charset.QP for quoted-printable, Charset.BASE64 for base64 encoding, Charset.SHORTEST for the shortest of qp or base64 encoding, or None for no encoding. SHORTEST is only valid for header_enc. It describes how message headers and message bodies in the input charset are to be encoded. Default is no encoding. Optional output_charset is the character set that the output should be in. Conversions will proceed from input charset, to Unicode, to the output charset when the method Charset.convert() is called. The default is to output in the same character set as the input. Both input_charset and output_charset must have Unicode codec entries in the module's charset-to-codec mapping; use add_codec(charset, codecname) to add codecs the module does not know about. See the codecs module's documentation for more information. s!SHORTEST not allowed for body_encN(tbody_enctSHORTESTt ValueErrort header_enctoutput_charsettCHARSETStcharset(RRRR((t#/usr/lib/python2.4/email/Charset.pyt add_charset_s cCs|t|((Rtconverts cCs]t|tp|idjo|Snyt||idSWntj o |SnXdS(sConvert a possibly multibyte string to a safely splittable format. Uses the input_codec to try and convert the string to Unicode, so it can be safely split on character boundaries (even for multibyte characters). Returns the string as-is if it isn't known how to convert it to Unicode with the input_charset. Characters that could not be converted to Unicode will be replaced with the Unicode replacement character U+FFFD. treplaceN(t isinstanceR>R%R)R1R+t LookupError(R)R>((Rt to_splittables  cCsu|o |i}n |i}t|t p |djo|Sny|i |dSWnt j o |SnXdS(s*Convert a splittable string back into an encoded string. Uses the proper codec to try and convert the string from Unicode back into an encoded format. Return the string as-is if it is not Unicode, or if it could not be converted from Unicode. Characters that could not be converted from Unicode will be replaced with an appropriate character (usually '?'). If to_output is True (the default), uses output_codec to convert to an encoded format. If to_output is False, uses input_codec. RAN( t to_outputR)R2tcodecR1RBtustrR%R+R?RC(R)RGRERF((Rtfrom_splittables   cCs|ip|iS(sReturn the output character set. This is self.output_charset if that is not None, otherwise it is self.input_charset. N(R)RR&(R)((Rtget_output_charset)scCs|i}|itjo"tii|t |t Sn|it jo"ti i |t |t Sn^|itjoCtii|}ti i |}t||t |t Sn t |SdS(s/Return the length of the encoded header string.N(R)RItcsetR/R*temailt base64MIMEt base64_lenR>tlentMISC_LENR;t quopriMIMEtheader_quopri_lenRtlenb64tlenqptmin(R)R>RJRSRR((Rtencoded_header_len1s ""cCs|i}|o|i|}n|itjotii ||Sn|it joti i ||ddSnz|it joetii|}ti i|}||jotii ||Sqti i ||ddSn|SdS(sEHeader-encode a string, optionally converting it to output_charset. If convert is True, the string will be converted from the input charset to the output charset automatically. This is not useful for multibyte character sets, which have line length issues (multibyte characters must be split on a character, not a byte boundary); use the high-level Header class to deal with these issues. convert defaults to False. The type of encoding (base64 or quoted-printable) will be based on self.header_encoding. t maxlinelenN(R)RIRJR@R>R/R*RKRLt header_encodeR;RPR+RRMRRRQRS(R)R>R@RJRSRR((RRW@s   cCsj|o|i|}n|itjotii|Sn)|itjoti i|Sn|SdS(sBody-encode a string and convert it to output_charset. If convert is True (the default), the string will be converted from the input charset to output charset automatically. Unlike header_encode(), there are no issues with byte boundaries and multibyte charsets in email bodies, so this is usually pretty safe. The type of encoding (base64 or quoted-printable) will be based on self.body_encoding. N( R@R)R>R0R*RKRLt body_encodeR;RP(R)R>R@((RRX_s (t__name__t __module__t__doc__tDEFAULT_CHARSETR3R4t__repr__R7R8R=R@RDtTrueRHRIRUtFalseRWRX(((RR$s +           (temail.base64MIMERKtemail.quopriMIMEtemail.EncodersR<R;R*RROR\R+RRR"RR R#R$(R;RR\R<R#R*ROR"R RR$RKRR((Rt?s   o !  c@sVdZdkZdklZdZdZdZdZdZ dZ dS( s Encodings and related functions.N(s encodestringcCs"t|dt}|iddS(Nt quotetabst s=20(t _encodestringtstTruetenctreplace(RR((t$/usr/lib/python2.4/email/Encoders.pyt_qencode scCsW|p|Sn|ddj}ti|}| o|ddjo |d Sn|S(Nis (Rt hasnewlinetbase64t encodestringtvalue(RR R ((Rt_bencodes cCs3|i}t|}|i|d|ds4)(?P--)?(?P[ \t]*)(?P\r\n|\r|\n)?$tendtlinesepii(>RRAtheadersR*RRtheaderREtmatchtNLCRERR t_parse_headersR1RRRR/t set_payloadt EMPTYSTRINGtjoinR>R R,RBR6R=RR8t get_boundarytboundaryR.R:R;tNoBoundaryInMultipartDefectt separatortretcompiletescapet boundaryretcapturing_preambletpreambleRREtmotgrouptlastlinet NLCRE_eoltsearchteolmoRR0tepilogueRDt get_payloadtpayloadt isinstancet basestringRtStartBoundaryNotFoundDefectt firstlinet NLCRE_boltbolmo(RRdR`RDR^RERfRZR=RORUR]RVRRWRXRRFRQRB((RR,sd                         "                %  c Csd} g}xt|D]\}}|ddjoD| p)ti|}|i i i |qn|i |qn| o:t i|d id}||i | ' in front of them. Optional maxheaderlen specifies the longest length for a non-continued header. When a header line is longer (in characters, with tabs expanded to 8 spaces) than maxheaderlen, the header will split as defined in the Header class. Set maxheaderlen to zero to disable header wrapping. The default is 78, as recommended (but not required) by RFC 2822. N(toutfptselft_fpt mangle_from_t _mangle_from_t maxheaderlent _maxheaderlen(R R RR((Rt__init__)s  cCs|ii|dS(N(R R twriteR(R R((RR>scCsY|oA|i}|pdtiti}n|i|IJn|i|dS(sPrint the message object tree rooted at msg to the output file specified when the Generator instance was created. unixfrom is a flag that forces the printing of a Unix From_ delimiter before the first object in the message tree. If the original message has no From_ delimiter, a `standard' one is crafted. By default, this is False to inhibit the printing of any From_ delimiter. Note that for subobjects, no From_ line is printed. s From nobody N( tunixfromtmsgt get_unixfromtufromttimetctimeR R t_write(R RRR((RtflattenBs  cCs'tidtd|i||dS(Ns$__call__() deprecated; use flatten()i(twarningstwarntDeprecationWarningR RRR(R RR((Rt__call__Us  cCs|i||i|iS(s1Clone this generator with the exact same options.N(R t __class__tfpRR(R R!((RtcloneZscCs|i}z!t|_}|i|Wd||_Xt|dd}|djo|i |n |||ii |i dS(Nt_write_headers( R R toldfptStringIOtsfpt _dispatchRtgetattrtNonetmethR#Rtgetvalue(R RR$R&R*((RRbs    cCs|i}|i}ti||fidd}t |d|d}|djoF|idd}t |d|d}|djo |i}qn||dS(Nt-Rt_handle_(Rtget_content_maintypetmaintget_content_subtypetsubt UNDERSCOREtjointreplacetspecificR(R R)R*tgenerict _writeBody(R RR1R6R5R*R/((RR'}s  !  cCsx|iD]\}}|id|I|idjo|i|IJq t|to|i|i IJq t |o|i|IJq |it|d|id|ddi IJq W|iJdS(Ns%s:it maxlinelent header_nametcontinuation_wss ( RtitemsthtvR R RRtHeadertencodeR (R RR<R=((RR#s  cCs|i}|djodSnt|tptdt|n|i ot i d|}n|i i |dS(Nsstring payload expected: %ss>From (Rt get_payloadtpayloadR)Rt basestringt TypeErrorttypeR RtfcreR1R R(R RRA((Rt _handle_texts   c Csg}|i}|djo g}nFt|to|ii |dSnt|t p |g}nxL|D]D}t }|i|}|i|dt|i|iquWti|}|idt|} |i| jo|i| n|idj o|i|iIJn|id| IJ|o|ii |idnx/|D]'}|id| IJ|ii |qhW|ii d| d|idj o|iJ|ii |indS(NRtfailobjs--is --(tmsgtextsRR@tsubpartsR)RRBR R RtlisttpartR%RR"tgRRtappendR+tNLR3talltextt get_boundaryt_make_boundarytboundaryt set_boundarytpreambletpopt body_parttepilogue( R RRORLRHRIRRKRVRR((Rt_handle_multiparts@     cCsg}x|iD]}t}|i|}|i |dt |i }|i d}|o/|ddjo|iti|d q|i|qW|iiti|dS(NRs it(tblocksRR@RKR%RR R"RLRRR+ttexttsplittlinesRMRNR3R R(R RRZRLR[R]RRK((Rt_handle_message_delivery_statuss   cCsNt}|i|}|i|iddt|i i |i dS(NiR( R%RR R"RLRRR@RR RR+(R RRLR((Rt_handle_messages (t__name__t __module__t__doc__RRRRRRR"RR'R#RFR7RXR^R_(((RR s          7 sD[Non-text (%(type)s) part of message omitted, filename %(filename)s]tDecodedGeneratorcBs)tZdZededZdZRS(sGenerator a text representation of a message. Like the Generator base class, except that non-text parts are substituted with a format string representing the part. iNcCs=ti|||||djo t|_ n ||_ dS(sLike Generator.__init__() except that an additional optional argument is allowed. Walks through all subparts of a message. If the subpart is of main type `text', then it prints the decoded payload of the subpart. Otherwise, fmt is a format string that is used instead of the message payload. fmt is expanded with the following keywords (in %(keyword)s format): type : Full MIME type of the non-text part maintype : Main MIME type of the non-text part subtype : Sub-MIME type of the non-text part filename : Filename of the non-text part description: Description associated with the non-text part encoding : Content transfer encoding of the non-text part The default value for fmt is None, meaning [Non-text (%(type)s) part of message omitted, filename %(filename)s] N( R RR R RRtfmtR)t_FMTt_fmt(R R RRRd((RRs   c Csx|iD]}|i}|djo||idtIJq |djoq ||ihd|i <d|i<d|i <d|i d<d |i d d <d |i d d<IJq WdS(NR[tdecodet multipartRDtmaintypetsubtypetfilenames [no filename]t descriptionsContent-Descriptions[no description]tencodingsContent-Transfer-Encodings [no encoding]( RtwalkRKR.RiR R@RRftget_content_typeR0t get_filenametget(R RRKRi((RR'7s    Y(R`RaRbRR)RR'(((RRcs is%%0%ddcCstiti}ddt|d}|djo|Sn|}d}xet o]t i dt i|dt i}|i|pPn|dt|}|d7}qLW|S( Nt=is==is^--s(--)?$t.i(trandomt randrangetsystmaxintttokenRfRRR[R)tbtcounterRtretcompiletescapet MULTILINEtcretsearchR(R[RyRxRRRRz((RRQQs &(RbR{RvRRtRt cStringIOR%t email.HeaderR>R2RNR|R~RER R ReRctlentreprRwt_widthRfR)RQ(RERRNR2R R%RtR R>RvR{RfRRReRQRc((Rt?s"        9 c@sdZdkZdkZdkZdkZdklZdkl Z dZ dZ dZ ddZ dZd Ze d Ze d Zeid eieiBZeid ZeiiZdZeeddZdfdYZdZdZdS(s+Header encoding and decoding functionality.N(sHeaderParseError(sCharsets t u iuiLsus-asciisutf-8si =\? # literal =? (?P[^?]*?) # non-greedy up to the next ? is the charset \? # literal ? (?P[qb]) # either a "q" or a "b", case insensitive \? # literal ? (?P.*?) # non-greedy up to the next ?= is the encoded string \?= # literal ?= s[\041-\176]+:$c Cs?t|}ti|p|d fgSng}d} x|iD]} ti| p|i | d fqFnti | }x|o|i di }|oW|o9|ddd jo$|ddt|d f|dRR@R?((R"t __unicode__s       cCs||ijS(N(totherR/R<(R/RF((R"t__eq__scCs ||j S(N(R/RF(R/RF((R"t__ne__scCs7|djo |i}n!t|tpt|}n|djot|toF|ipd}t |||}|i pd}|i||qt|t olxit|tfD]C}y'|i pd}|i||}PWqtj oqXqWtp tdqn|ii||fdS(s>Append a string to the MIME header. Optional charset, if given, should be a Charset instance or the name of a character set (which will be converted to a Charset instance). A value of None (the default) means that the charset given in the constructor is used. s may be a byte string or a Unicode string. If it is a byte string (i.e. isinstance(s, str) is true), then charset is the encoding of that byte string, and a UnicodeError will be raised if the string cannot be decoded with that charset. If s is a Unicode string, then charset is a hint specifying the character set of the characters in the string. In this case, when producing an RFC 2822 compliant header using RFC 2047 rules, the Unicode string will be encoded using the following charsets in order: us-ascii, the charset hint, utf-8. The first character set not to provoke a UnicodeError is used. Optional `errors' is passed as the third argument to any unicode() or ustr.encode() call. t8bitsus-asciisutf-8 conversion failedN(RRR/R0R*R+RRt input_codectincodecRBR7tustrt output_codectoutcodecR<R.tUTF8t UnicodeErrortFalsetAssertionErrorR6R (R/RRR7RLRNRK((R"R s,    cCsA|i|}|i|t} |i| } | |jo| |fgSn|djo||fgSn|djo|i ||||Snb| t |jo6|} |i|| t} |i|| t}nt|||\} }|i| }|i|t}||fg} | |i|||i|S(NRIsus-ascii(Rt to_splittableRt splittabletfrom_splittabletTrueRtencoded_header_lentelenR$R/t _split_asciit splitcharsR2tsplitpntRQtfirsttlastt _binsplitt fsplittabletfencodedtchunkt_splitR:(R/RRR$RZR]RTR_R`RXR[RRaR\((R"Rbs$   cCs8t|||i|i|}t||gt |S(N( RYRtfirstlenR/R:R1RZtchunkstzipRR2(R/RRRcRZRd((R"RY?sc Csg}x|D]\}}|pq n|djp|idjo |}n|i|}|o|dido d}nd}t ||||q Wt |i}|i|S(NiRR(Rdt newchunksRRRtheader_encodingRt header_encodetendswithtextrat _max_appendR$tNLR/R1tjoinerRD( R/RfR$RjRRRRdRm((R"t_encode_chunksDs    s;, c Csg}|i}d} x|iD]u\}}|| d}||i djo |}n||i ||||7}|d\}}|i |} qW|i||S(sEncode a message header into an RFC-compliant format. There are many issues involved in converting a given string for use in an email header. Only certain character sets are readable in most email clients, and as header strings can only contain a subset of 7-bit ASCII, care must be taken to properly convert and encode (with Base64 or quoted-printable) header strings. In addition, there is a 75-character length limit on any given encoded header field, so line-wrapping must be performed, even with double-byte character sets. This method will do its best to convert the string to the correct character set used in email, and encode and line wrap it safely with the appropriate scheme for that character set. If the given charset is not known or an error occurs during conversion, this function will return the header untouched. Optional splitchars is a string containing characters to split long ASCII lines on, in rough support of RFC 2822's `highest level syntactic breaks'. This doesn't affect RFC 2047 encoded lines. iiRiN(RfR/R9R$tlastlenR6RRt targetlenRWRbRZt lastchunkt lastcharsetRn( R/RZR$RqRrRRfRRpRo((R"R<gs   ( t__name__t __module__RR;R=RERGRHR RbRYRnR<(((R"R's5    7 .  #cCsg} |}x}|iD]o} | i} t| |jo| i| |}qnx6|D]}|| joPq_q_W| i| |}qt i d|}|djo |}nd}|d}t|}t|idt}g} d} xi|i| D]X} | tdt| d|}t| }| }|djoI|oBt| djo/ti| do| i| | |7} q |||jo| o| i|i | |n||joG|djo:t!| |||d}| i#|d |dg} n | g} |t| d} |}q | i| | |7} q W| o| i|i | qqW| S( Ns%s\s*s;,RRs iii($tlinesRctmaxlenRR R tlstripR2R trestlenRZtchtretcompiletcreteolRmtjoinlenR&R3R4twslentthistlinelenRtparttmaxtcurlentpartlent onfirstlinetfcretmatchRDRYtsubltextend(RRcRxR&RZRyRRR~RRR RRuR}RvRR|RmRR((R"RYsb          ! ;      c Csd}t|}xj||jo\||dd?}|i|| t}|i |}||jo |}q|d}qW|i|| t } |i||t }| |fS(Nii(tiR2RTtjtmRRURVRaRWtchunklenR$RQR\R]( RTRR$RRaRRRR]R\((R"R^s    (t__doc__RzRtemail.quopriMIMERtemail.base64MIMEt email.ErrorsR!t email.CharsetR+RlRRAR4RCR8R.ROR{tVERBOSEt IGNORECASERRRRkR#RR,R'RYR^(RCR,R+R!RARkRlROR.RRzR^RR8RRYRRR'R#R4((R"t?s.            9 Fc@sVdZdkZdklZdZedZdddZddedZ dS( s1Various types of useful iterators and generators.N(sStringIOccsK|V|io6x3|iD]!}x|iD] }|Vq1WqWndS(sWalk over the message tree, yielding each subpart. The walk is performed in depth-first order. This method is a generator. N(tselft is_multipartt get_payloadtsubparttwalkt subsubpart(RRR((t%/usr/lib/python2.4/email/Iterators.pyR s   ccs\xU|iD]G}|id|}t|toxt|D] }|VqBWq q WdS(sIterate over the parts, returning string payloads line-by-line. Optional decode (default False) is passed through to .get_payload(). tdecodeN( tmsgRRRRtpayloadt isinstancet basestringtStringIOtline(RRRR R ((Rtbody_line_iterators  ttextccsZxS|iD]E}|i|jo,|djp|i|jo|VqRq q WdS(sIterate over the subparts with a given MIME type. Use `maintype' as the main MIME type to match against; this defaults to "text". Optional `subtype' is the MIME subtype to match against; if omitted, only the main type is matched. N(RRRtget_content_maintypetmaintypetsubtypetNonetget_content_subtype(RRRR((Rttyped_subpart_iterator)s   ic Cs|djo ti}nd|d}|||iI|o|d|i IJn|J|i o2x/|i D]}t |||d|qyWndS(sA handy debugging aidt is[%s]iN(tfpRtsyststdouttlevelttabRtget_content_typetinclude_defaulttget_default_typeRRRt _structure(RRRRRR((RR7s    ( t__doc__Rt cStringIOR RtFalseRRRR(RRR RRR((Rt?s     c@s0dZdklZdeifdYZdS(s$Base class for MIME specializations.(sMessagetMIMEBasecBstZdZdZRS(s$Base class for MIME specializations.cKsAtii|d||f}|id||d|d@,;:\\"/\[\]\?=]cCs|dj ot|djot|to/|d7}ti|d|d|d}n|pt i |od|ti|fSqd||fSn|SdS(s~Convenience function to format and return a key=value pair. This will quote the value if needed or if quote is true. it*iis%s="%s"s%s=%sN( tvaluetNonetlent isinstancettupletparamtUtilstencode_rfc2231tquotet tspecialstsearch(RRR ((t#/usr/lib/python2.4/email/Message.pyt _formatparam s  %cCsg}x|d djo|d}|id}xB|djo4|idd|do|id|d}q6W|djot|}n|| }d|jo?|id}|| i i d||di }n|i |i ||}q W|S(Nit;it"it=( tplisttstfindtendtcountRtftindextitstriptlowertappend(RRRRR((R t _parseparam6s" '   0cCsGt|to&|d|dti|dfSnti|SdS(Niii(RRRRtunquote(R((R t _unquotevalueHs&tMessagecBstZdZdZdZedZdZdZdZ dZ e edZ e d Z d Zd Zd Zd ZdZdZdZdZdZdZdZe dZe dZdZdZe dZe dZe dZdZ dZ!dZ"dZ#d Z$d!Z%e d"e&d#Z'e d"e&d$Z(d%e&e d&d'Z)d"e&d(Z*d%e&d)Z+e d*Z,e d+Z-d,Z.e d-Z/e d.Z0d/k1l2Z2RS(0sBasic message object. A message object is defined as something that has a bunch of RFC 2822 headers and a payload. It may optionally have an envelope header (a.k.a. Unix-From or From_ header). If the message is a container (i.e. a multipart or a message/rfc822), then the payload is a list of Message objects, otherwise it is a string. Message objects implement part of the `mapping' interface, which assumes there is exactly one occurrance of the header per message. Some headers do in fact appear multiple times (e.g. Received) and for those headers, you must use the explicit API to set or get all the headers. Not all of the mapping methods are implemented. cCsJg|_d|_d|_d|_d|_|_g|_d|_ dS(Ns text/plain( tselft_headersRt _unixfromt_payloadt_charsettpreambletepiloguetdefectst _default_type(R ((R t__init__cs     cCs|idtS(swReturn the entire formatted message as a string. This includes the headers, body, and envelope header. tunixfromN(R t as_stringtTrue(R ((R t__str__nscCs?dkl}t}||}|i|d||iS(sReturn the entire formatted message as a string. Optional `unixfrom' when True, means include the Unix From_ envelope header. This is a convenience method and may not generate the message exactly as you intend because by default it mangles lines that begin with "From ". For more flexibility, use the flatten() method of a Generator instance. (s GeneratorR*N( temail.Generatort GeneratortStringIOtfptgtflattenR R*tgetvalue(R R*R1R/R2((R R+ts    cCst|itS(s6Return True if the message consists of multiple parts.N(RR R#tlist(R ((R t is_multipartscCs ||_dS(N(R*R R"(R R*((R t set_unixfromscCs|iS(N(R R"(R ((R t get_unixfromscCs4|idjo|g|_n|ii|dS(sAdd the given payload to the current payload. The current payload will always be a list of objects after this method is called. If you want to set the payload to a scalar object, use set_payload() instead. N(R R#RtpayloadR(R R9((R tattachscCsW|d jo |i}n>t|itptdt|in|i|}|o|i od Sn|i ddi }|djoti|SqS|djo2yti|SWqOtij o |SqOXqS|d joZt}y0ti t|d |d t|i}WqOtij o |SqOXqSn|S(sZReturn a reference to the payload. The payload will either be a list object or a string. If you mutate the list object, you modify the message's payload in place. Optional i returns that index into the payload. Optional decode is a flag indicating whether the payload should be decoded or not, according to the Content-Transfer-Encoding header (default is False). When True and the message is not a multipart, the payload will be decoded if this header's value is `quoted-printable' or `base64'. If some other encoding is used, or the header is missing, or if the payload has bogus data (i.e. bogus base64 or uuencoded data), the payload is returned as-is. If the message is a multipart and the decode flag is True, then None is returned. sExpected list, got %sscontent-transfer-encodingtsquoted-printabletbase64s x-uuencodetuuencodetuuesx-uues tquietN(s x-uuencodesuuencodesuuesx-uue(RRR R#R9RR5t TypeErrorttypetdecodeR6tgetRtcteRt_qdecodet_bdecodetbinasciitErrorR0tsfptuuR,R4(R RRBRIRDR9((R t get_payloads2          cCs+||_|dj o|i|ndS(sSet the payload to the given value. Optional charset sets the message's default character set. See set_charset() for details. N(R9R R#tcharsetRt set_charset(R R9RL((R t set_payloads  cCs|djo|idd|_dSnt|toti|}nt|tipt|n||_|i dp|i ddn|i dp |i ddd|i n|i d|i t||i jo|i |i|_n|i dpY|i}y||Wqtj o,|i |i|_|i d|qXndS(sSet the charset of the payload to a given character set. charset can be a Charset instance, a string naming a character set, or None. If it is a string it will be converted to a Charset instance. If charset is None, the charset parameter will be removed from the Content-Type field. Anything else will generate a TypeError. The message will be assumed to be of type text/* encoded with charset.input_charset. It will be converted to charset.output_charset and encoded properly, if needed, when generating the plain text representation of the message. MIME headers (MIME-Version, Content-Type, Content-Transfer-Encoding) will be added as needed. RLNs MIME-Versions1.0s Content-Types text/plainsContent-Transfer-Encoding(RLRR t del_paramR$RtstrtCharsetR@thas_keyt add_headertget_output_charsett set_paramt body_encodeR#tget_body_encodingRD(R RLRD((R RMs2      cCs|iS(sKReturn the Charset instance associated with the message's payload. N(R R$(R ((R t get_charsetscCs t|iS(s9Return the total number of headers, including duplicates.N(RR R!(R ((R t__len__scCs |i|S(s-Get a header value. Return None if the header is missing instead of raising an exception. Note that if the header appeared multiple times, exactly which occurrance gets returned is undefined. Use get_all() to get all the values matching a header field name. N(R RCtname(R RZ((R t __getitem__scCs|ii||fdS(sSet the value of a header. Note: this does not overwrite an existing header with the same field name. Use __delitem__() first to delete any existing headers. N(R R!RRZtval(R RZR\((R t __setitem__scCsc|i}g}xA|iD]6\}}|i|jo|i||fqqW||_dS(swDelete all occurrences of a header, if present. Does not raise an exception if the header is missing. N(RZRt newheadersR R!tktvR(R RZR_R^R`((R t __delitem__&s  cCs:|ig}|iD]\}}||iq~jS(N(RZRt_[1]R R!R_R`(R RZRbR_R`((R t __contains__2scCst}|i|||j S(s/Return true if the message contains the header.N(tobjecttmissingR RCRZ(R RZRe((R RR5s cCs(g}|iD]\}}||q~S(s.Return a list of all the message's header field names. These will be sorted in the order they appeared in the original message, or were added to the message, and may contain duplicates. Any fields deleted and re-inserted are always appended to the header list. N(RbR R!R_R`(R RbR_R`((R tkeys:scCs(g}|iD]\}}||q~S(s)Return a list of all the message's header values. These will be sorted in the order they appeared in the original message, or were added to the message, and may contain duplicates. Any fields deleted and re-inserted are always appended to the header list. N(RbR R!R_R`(R RbR_R`((R tvaluesDscCs|iS(s'Get all the message's header fields and values. These will be sorted in the order they appeared in the original message, or were added to the message, and may contain duplicates. Any fields deleted and re-inserted are always appended to the header list. N(R R!(R ((R titemsNscCsE|i}x2|iD]'\}}|i|jo|SqqW|S(s~Get a header value. Like __getitem__() but return failobj instead of None when the field is missing. N(RZRR R!R_R`tfailobj(R RZRiR_R`((R RCXs   cCscg}|i}x;|iD]0\}}|i|jo|i|qqW|p|Sn|S(sQReturn a list of all the values for the named field. These will be sorted in the order they appeared in the original message, and may contain duplicates. Any fields deleted and re-inserted are always appended to the header list. If no such fields exist, failobj is returned (defaults to None). N( RgRZRR R!R_R`RRi(R RZRiRgR`R_((R tget_allhs  cKsg}xf|iD]X\}}|djo|i|iddq|it|idd|qW|dj o|i d|n|i i|ti|fdS(sExtended header setting. name is the header field to add. keyword arguments can be used to set additional parameters for the header field, with underscores converted to dashes. Normally the parameter will be added as key="value" unless value is None, in which case only the key will be added. Example: msg.add_header('content-disposition', 'attachment', filename='bud.gif') t_t-iN(tpartst_paramsRhR_R`RRtreplaceR t_valuetinsertR R!t_namet SEMISPACEtjoin(R RrRpRnRmR`R_((R RSzs   & cCs|i}xlttt|i|iD]=\}\}}|i|jo||f|i|Remove the given parameter completely from the Content-Type header. The header will be re-written in place without the parameter or its value. All values will be quoted as necessary unless requote is False. Optional header specifies an alternative to the Content-Type header. NR;RR(R RRRt new_ctypeRRRR`RRR RsRtRC(R RRRRRR`((R ROs )cCs|iddjp tn|idjo|d=d|d@,:;".]s [][\\()"]cCs|S(N(ts(R((t!/usr/lib/python2.4/email/Utils.pyt _identity+scCsO|p|Snti|}|id o|ido |d Sn|S(Ns i(Rtbase64t decodestringtvaluetendswith(RR((Rt_bdecode/s ! cCs.tidt|}tidt|}|S(s+Replace all line-ending characters with .s (?s %s%s%s <%s>N(tpairtnametaddresstquotest specialsretsearcht escapesreR (RRRR((Rt formataddrEs  cCs"ti|}t|}|iS(s7Return a list of (REALNAME, EMAIL) for each fieldvalue.N(t COMMASPACEtjoint fieldvaluestallt _AddressListtat addresslist(RRR((Rt getaddressesXs s_ =\? # literal =? (?P[^?]*?) # non-greedy up to the next ? is the charset \? # literal ? (?P[qb]) # either a "q" or a "b", case insensitive \? # literal ? (?P.*?) # non-greedy up to the next ?= is the atom \?= # literal ?= c CsX|d$joti}n|oti|}tio|do ti}n ti}t t |d\}}|djo d}nd}d|||df}n'ti|}|o d}nd }d d d d ddddg|d|dddddddddddddg |d d |d|d!|d"|d#|fS(%sReturns a date string as specified by RFC 2822, e.g.: Fri, 09 Nov 2001 01:08:47 -0000 Optional timeval if given is a floating point time value as accepted by gmtime() and localtime(), otherwise the current time is used. Optional localtime is a flag that when True, interprets timeval, and returns a date relative to the local timezone instead of UTC, properly taking daylight savings time into account. Optional argument usegmt means that the timezone is written out as an ascii string, not numeric one (so "GMT" instead of "+0000"). This is needed for HTTP, and is only used when localtime==False. iiit-t+s %s%02d%02di<tGMTs-0000s"%s, %02d %s %04d %02d:%02d:%02d %stMontTuetWedtThutFritSattSuniitJantFebtMartAprtMaytJuntJultAugtSeptOcttNovtDeciiiiN(ttimevaltNonettimet localtimetnowtdaylighttaltzonetoffsetttimezonetdivmodtabsthourstminutestsigntzonetgmtimetusegmt( R5R8RERCR<RBR@R9RA((Rt formatdatels$      cCsti}tidti|}ti}ti d}|djo d}n d|}t i}d|||||f}|S(sReturns a string suitable for RFC 2822 compliant Message-ID, e.g: <20020201195627.33539.96671@nightshade.la.mastaler.com> Optional idstring if given is a string used to strengthen the uniqueness of the message id. s %Y%m%d%H%M%SiRt.s<%s.%s.%s%s@%s>N(R7R5tstrftimeRDtutcdatetostgetpidtpidtrandomt randrangetrandinttidstringR6tsockettgetfqdntidhosttmsgid(RPRIRORTRLR5RS((Rt make_msgids      cCs|pdSnt|S(N(tdataR6t _parsedate(RV((Rt parsedatescCs|pdSnt|S(N(RVR6t _parsedate_tz(RV((Rt parsedate_tzscCs&t|i}|pdSn|dS(NRi(RR(RtaddrRtaddrs(R[R\((Rt parseaddrscCst|djoz|ido7|ido'|dd!iddiddSn|ido|ido|dd!Sqn|S( sRemove quotes from a string.iRis\\s\s\"tN(tlentstrt startswithRtreplace(Ra((Rtunquotes ' cCsC|itd}t|djoddti|fSn|S(s#Decode string according to RFC 2231iN(RtsplittTICKtpartsR`R6turllibRd(RRg((Rtdecode_rfc2231s cCshdk}|i|dd}|djo|djo|Sn|djo d}nd|||fS(sEncode string according to RFC 2231. If neither charset nor language is given, then s is returned as-is. If charset is given but not language, the string is encoded using the empty string for language. NtsafeRs%s'%s'%s(RhtquoteRtcharsetR6tlanguage(RRlRmRh((Rtencode_rfc2231s   s&^(?P\w+)\*((?P[0-9]+)\*?)?$c Cs|}g}h} |id\}} |i|| fx|o|id\}} |ido t}nt }t | } t i |} | o[| idd\}}|dj ot|}n| i|gi|| |fq>|i|dt| fq>W| ox| iD]\}}g} t }|ixD|D]<\}} }|oti | } t}n| i| qVWtti| } |o9t| \}}} |i|||d| ffq-|i|d| fq-Wn|S(sDecode parameters list according to RFC 2231. params is a sequence of 2-tuples containing (param name, string value). it*Rtnums"%s"N( tparamst new_paramstrfc2231_paramstpopRRtappendRtTruetencodedtFalseRdtrfc2231_continuationtmatchtmotgroupRpR6tintt setdefaultRktitemst continuationstextendedtsortRRht EMPTYSTRINGRRiRlRm( RqRpRlRRRwRRmRrR{RRRs((Rt decode_paramssL   &"   $Rcsus-asciicCs}t|to_t|d}|dpd}yt|||SWqytj ot|||SqyXn t|SdS(Niisus-ascii( t isinstanceRttupleRdtrawvalRltunicodeterrorst LookupErrortfallback_charset(RRRRRl((Rtcollapse_rfc2231_value)s(5t__doc__RJR R7RRMRQRhtwarningst cStringIOtStringIOtemail._parseaddrRkt AddressListRt mktime_tzRXRWRZRYtquopriRt_qdecodetemail.Encoderst_bencodet_qencodeRRt UEMPTYSTRINGR RftcompileRRRR R RRtVERBOSEt IGNORECASEtecreR6RxRFRUR]RdRiRnRyRR()RXRdRRRMRRfRRRR RRhRUR RZRFRRRyRiRRRRkRnR RRR]RRQRRJR RR7RWRYRR((Rt?sP                   5      5c@s_dZdkZdZdZdZddddd d d d d dddddddd dddddddgZddddd d!d"gZhd#d$<d%d$<d&d$<d'd$<d(d)<d*d+<d,d-<d.d)<d/d0<d1d-<d2d3<d4d0<d5d6<d7d3e fd?YZ dS(@scEmail address parsing code. Lifted directly from rfc822.py. This should eventually be rewritten. Nt ts, tjantfebtmartaprtmaytjuntjultaugtseptocttnovtdectjanuarytfebruarytmarchtapriltjunetjulytaugustt septembertoctobertnovembertdecembertmonttuetwedtthutfritsattsuntUTitUTCtGMTtZtASTiptADTitESTi tEDTtCSTitCDTtMSTiDtMDTtPSTitPDTc Cs|i}|didp|ditjo |d=n;|did}|djo|d|d|d@,:;."[]is s t.RN( tselftspecialstpostLWStCRtatomendsR^t phraseendstfieldt commentlist(RbRi((RRt__init__s     cCsx|it|ijog|i|i|idjo|id7_q|i|idjo|ii|iqPqWdS(s*Parse up to the start of the next address.s it(N(RbRdR:RiReRjR>t getcomment(Rb((RRtgotonextscCsYg}xL|it|ijo2|i}|o||7}q |idq W|S(sVParse all addresses. Returns a list containing all of the addresses. RN(RR(tresultRbRdR:Rit getaddresstadR>(RbRoRq((RRt getaddrlists cCsg|_|i|i}|i}|i}|ig}|it |i jo.|o#t i |i|dfg}qen|i |idjo=||_||_|i }t i |i|fg}n|i |idjog}t |i }|id7_xK|it |i joY|i|i|jo+|i |idjo|id7_Pn||i}qWn|i |idjof|i}|io4t i |ddi |id |fg}qet i ||fg}nX|o#t i |i|dfg}n.|i |i|ijo|id7_n|i|it |i jo*|i |id jo|id7_n|S( sParse the next address.is.@R1it;tt@R1( RbRiRdtFalset expectrouteRntadlistR:t getdomaintTrueR}(RbRR((RRRs2     cCsTg}|ix|it|ijo|i|idjo |id|id7_ne|i|idjo|id|in3|i|i|ijoPn|i|i |iqW|it|ijp|i|idjot i |Sn|id|id7_|it i ||i S(sParse an RFC 2822 addr-spec.RaiR\s"%s"RN( taslistRbRnRdR:RiR>tgetquoteRgtgetatomt EMPTYSTRINGR|R(RbR((RRR}#s(  0  cCs)g}x|it|ijo|i|i|ijo|id7_q |i|idjo|ii|iq |i|idjo|i|i q |i|idjo |id7_|idq |i|i|i joPq |i|i q Wt i |S(s-Get the complete domain name from an address.iRlt[RaN(tsdlistRbRdR:RiReRjR>RmtgetdomainliteralRgRRR|(RbR((RRR<s"cCs=|i|i|jodSndg}t}|id7_x|it|ijo|o!|i|i|it}n|i|i|jo|id7_Pnq|o1|i|idjo|i|i q@n9|i|idjo t }n|i|i|i|id7_q@Wt i|S(sParse a header fragment delimited by special characters. `beginchar' is the start character for the fragment. If self is not looking at an instance of `beginchar' then getdelimited returns the empty string. `endchars' is a sequence of allowable end-delimiting characters. Parsing stops when one of these is encountered. If `allowcomments' is non-zero, embedded RFC 2822 comments are allowed within the parsed fragment. RiRls\N(RbRiRdt beginchartslistRR_R:R>tendcharst allowcommentsRmRRR|(RbRRRRR_((RRt getdelimitedOs,    cCs|iddtS(s1Get a quote-delimited fragment from self's field.R\s" N(RbRR(Rb((RRRtscCs|iddtS(s7Get a parenthesis-delimited fragment from self's field.Rls) N(RbRR(Rb((RRRmxscCsd|iddtS(s!Parse an RFC 2822 domain-literal.s[%s]Rs] N(RbRR(Rb((RRR|scCsdg}|djo |i}nx`|it|ijoF|i|i|joPn|i|i|i|id7_q&Wti |S(sParse an RFC 2822 atom. Optional atomends specifies a different set of end token delimiters (the default is to use self.atomends). This is used e.g. in getphraselist() since phrase endings must not include the `.' (which is legal in phrases).RiN( tatomlistRgR?RbRdR:RiR>RR|(RbRgR((RRRs   cCsg}x|it|ijo|i|i|ijo|id7_q |i|idjo|i|iq |i|idjo|ii|i q |i|i|i joPq |i|i |i q W|S(sParse a sequence of RFC 2822 phrases. A phrase is a sequence of words, which are in turn either RFC 2822 atoms or quoted-strings. Phrases are canonicalized by squeezing all runs of continuous whitespace into one space. iR\RlN( RyRbRdR:RiReR>RRjRmRhR(RbRy((RRRxs(t__name__t __module__t__doc__RkRnRrRpRR}RRRRRmRR?RRx(((RRR`s    ;   %    t AddressListcBsMtZdZdZdZdZdZdZdZdZ RS(s@An AddressList encapsulates a list of parsed RFC 2822 addresses.cCs7ti|||o|i|_n g|_dS(N(R`RkRbRiRrt addresslist(RbRi((RRRkscCs t|iS(N(R:RbR(Rb((RRt__len__scCsUtd}|i|_x5|iD]*}||ijo|ii|q#q#W|S(N(RR?tnewaddrRbRtothertxR>(RbRRR((RRt__add__s   cCs<x5|iD]*}||ijo|ii|q q W|S(N(RRRRbR>(RbRR((RRt__iadd__s  cCsHtd}x5|iD]*}||ijo|ii|qqW|S(N(RR?RRbRRRR>(RbRRR((RRt__sub__s   cCs<x5|iD]*}||ijo|ii|q q W|S(N(RRRRbtremove(RbRR((RRt__isub__s  cCs |i|S(N(RbRRF(RbRF((RRt __getitem__s( RRRRkRRRRRR(((RRRs      (RRXR{Rt COMMASPACERER7RORSRWR[R_R`R( RWRR`R{R_R7RRORERXR[RSR((RRt?s N V c@sdZdkZdklZlZdklZdZdZdZ dZ dZ d e d ed Z ed ed ZeZeZdd ZeZeZdS(sBase64 content transfer encoding per RFCs 2045-2047. This module handles the content transfer encoding method defined in RFC 2045 to encode arbitrary 8-bit data using the three 8-bit bytes in four 7-bit characters encoding known as Base64. It is used in the MIME standards for email to attach images, audio, and text using some 8-bit character sets to messages. This module provides an interface to encode and decode both headers and bodies with Base64 encoding. RFC 2045 defines a method for including character set information in an `encoded-word' in a header. This method is commonly used for 8-bit real names in To:, From:, Cc:, etc. fields, as well as Subject: lines. This module does not do the line wrapping or end-of-line character conversion necessary for proper internationalized headers; it only does dumb encoding and decoding. To deal with the various line wrapping issues, use the email.Header module. N(s b2a_base64s a2b_base64(sfix_eolss s ticCs>tt|d\}}|d}|o|d7}n|S(s6Return the length of s when it is encoded with base64.iiN(tdivmodtlentst groups_of_3tleftovertn(RRRR((t&/usr/lib/python2.4/email/base64MIME.pyt base64_len)s  s iso-8859-1iLc Cs|p|Sn|pt|}ng}|t|t}|dd} x>t dt|| D]$}|i t |||| !qgWg}xC|D];} | ito| d } n|i d|| fqW|d} | i|S(s0Encode a single header line with Base64 encoding in a given charset. Defined in RFC 2045, this Base64 encoding is identical to normal Base64 encoding, except that each line must be intelligently wrapped (respecting the Base64 encoding), and subsequent lines must start with a space. charset names the character set to use to encode the header. It defaults to iso-8859-1. End-of-line characters (\r, \n, \r\n) will be automatically converted to the canonical email line separator \r\n unless the keep_eols parameter is True (the default is False). Each line of the header will be terminated in the value of eol, which defaults to "\n". Set this to "\r\n" if you are using the result of this function directly in email. The resulting string will be in the form: "=?charset?b?WW/5ciBtYXp66XLrIHf8eiBhIGhhbXBzdGHuciBBIFlv+XIgbWF6euly?=\n =?charset?b?6yB3/HogYSBoYW1wc3Rh7nIgQkMgWW/5ciBtYXp66XLrIHf8eiBhIGhh?=" with each line wrapped at, at most, maxlinelen characters (defaults to 76 characters). iiiis =?%s?b?%s?=t N(theadert keep_eolstfix_eolstbase64edt maxlinelenRtcharsettMISC_LENt max_encodedt max_unencodedtrangetitappendt b2a_base64tlinestlinetendswithtNLteoltjoinertjoin( R RR RRRRR RRRR((Rt header_encode5s&" cCs|p|Sn|pt|}ng}|dd}xstdt||D]Y}t ||||!}|i t o|t jo|d |}n|i|qSWti|S(sEncode a string with base64. Each line will be wrapped at, at most, maxlinelen characters (defaults to 76 characters). If binary is False, end-of-line characters will be converted to the canonical email end-of-line sequence \r\n. Otherwise they will be left verbatim (this is the default). Each line of encoded text will end with eol, which defaults to "\n". Set this to " " if you will be using the result of this function directly in an email. iiiiN(RtbinaryR tencvecRRRRRRtencRRRRt EMPTYSTRINGR(RRRRRR R!R((Rtencodeos cCs:|p|Snt|}|o|it|Sn|S(sDecode a raw base64 string. If convert_eols is set to a string value, all canonical email linefeeds, e.g. "\r\n", in the decoded text will be converted to the value of convert_eols. os.linesep is a good choice for convert_eols if you are decoding a text attachment. This function does not parse a full MIME header value encoded with base64 (like =?iso-8895-1?b?bmloISBuaWgh?=) -- please use the high level email.Header class for that functionality. N(Rt a2b_base64tdect convert_eolstreplacetCRLF(RR&R%((Rtdecodes  (t__doc__tretbinasciiRR$t email.UtilsR R(RR"RRtFalseRtTrueR#t body_encodet encodestringtNoneR)t body_decodet decodestring(R$RR4RR RR"R)R+R3R(R#R0RR1R((Rt?s   :! c@sdZdkZdklZdklZdZdZdZei dZ ei dZ d Z d Z d Zd Zd dZdZdZdededZededZeZeZedZeZeZdZdZdS(sFQuoted-printable content transfer encoding per RFCs 2045-2047. This module handles the content transfer encoding method defined in RFC 2045 to encode US ASCII-like 8-bit data called `quoted-printable'. It is used to safely encode text that is in a character set similar to the 7-bit US ASCII character set, but that includes some 8-bit characters that are normally not allowed in email bodies or headers. Quoted-printable is very space-inefficient for encoding binary files; use the email.base64MIME module for that instead. This module provides an interface to encode and decode both headers and bodies with quoted-printable encoding. RFC 2045 defines a method for including character set information in an `encoded-word' in a header. This method is commonly used for 8-bit real names in To:/From:/Cc: etc. fields, as well as Subject: lines. This module does not do the line wrapping or end-of-line character conversion necessary for proper internationalized headers; it only does dumb encoding and decoding. To deal with the various line wrapping issues, use the email.Header module. N(s hexdigits(sfix_eolss s is[^-a-zA-Z0-9!*+/ ]s [^ !-<>-~\t]cCstti|S(sBReturn True if the character should be escaped with header quopri.N(tboolthqretmatchtc(R((t&/usr/lib/python2.4/email/quopriMIME.pytheader_quopri_check-scCstti|S(s@Return True if the character should be escaped with body quopri.N(RtbqreRR(R((Rtbody_quopri_check2scCsCd}x6|D].}ti|o|d7}q |d7}q W|S(s?Return the length of str when it is encoded with header quopri.iiiN(tcounttsRRR(R RR((Rtheader_quopri_len7scCsCd}x6|D].}ti|o|d7}q |d7}q W|S(s=Return the length of str when it is encoded with body quopri.iiiN(RtstrRRR(R RR((Rtbody_quopri_lenBstcCsn|p|i|inMt|dt||jo|dc||7||dt jo)|t |||d!7}|d7}n||7}|d7}||jo||7}qaqaWq"W|i | o|i |o|d }n|S( s_Decode a quoted-printable string. Lines are separated with eol, which defaults to \n. R iR+iiiiN( tencodedtdecodedR0R)trstripR%tiRtnRt hexdigitsRR2(R:R%R;RR=R>R)((Rtdecodes>         ;   !cCs|id}t|S(sCTurn a match in the form =AB to the ASCII character with value 0xabiN(RtgroupR R(RR ((Rt_unquote_match/scCs%|idd}tidt|S(sDecode a string encoded with RFC 2045 MIME header `Q' encoding. This function does not parse a full MIME header value encoded with quoted-printable (like =?iso-8895-1?q?Hello_World?=) -- please use the high level email.Header class for that functionality. RRs=\w{2}N(R treplacetretsubRB(R ((Rt header_decode6s(t__doc__RDtstringR?t email.UtilsRR3tNLR$tcompileRRRRR R RRRtFalseR*R9t body_encodet encodestringR@t body_decodet decodestringRBRF(RRBRR RRFRRJRR$R@RDROR*R9RPRR?R3RMRNRRR ((Rt?s0       @S 0 c@sdZdkZdkZdkZdkZhZdZdgZdZeiZ dei ei fdYZ dZ dZeiedS( s Standard "encodings" Package Standard Python encoding modules are stored in this package directory. Codec modules must have names corresponding to normalized encoding names as defined in the normalize_encoding() function below, e.g. 'utf-8' must be implemented by the module 'utf_8.py'. Each codec module must export the following interface: * getregentry() -> (encoder, decoder, stream_reader, stream_writer) The getregentry() API must return callable objects which adhere to the Python Codec Interface Standard. In addition, a module may optionally also define the following APIs which are then used by the package's codec search function: * getaliases() -> sequence of encoding name strings to use as aliases Alias names returned by getaliases() must be normalized encoding names as defined by normalize_encoding(). Written by Marc-Andre Lemburg (mal@lemburg.com). (c) Copyright CNRI, All Rights Reserved. NO WARRANTY. Ns --unknown--t*s . 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz tCodecRegistryErrorcBstZRS(N(t__name__t __module__(((t(/usr/lib/python2.4/encodings/__init__.pyR+scCsEt|tijo|id}ndi|itiS(s Normalize an encoding name. Normalization works as follows: all non-alphanumeric characters except the dot used for Python package names are collapsed and replaced with a single underscore, e.g. ' -;#' becomes '_'. Leading and trailing underscores are removed. Note that encoding names should be ASCII only; if they do use non-ASCII characters, these must be Latin-1 compatible. slatin-1t_N( ttypetencodingttypest UnicodeTypetencodetjoint translatet_norm_encoding_maptsplit(R((Rtnormalize_encoding/s c Csti|t} | tj o| Snt|}ti|pti|idd}|dj o||g}n |g}xX|D]J}|pqnyt |ttt}Wntj oqXPqWd}y |i}Wntj o d}nX|djodt|d?<d@d?<dAdB<dCdB<dDdE<dFdE<dGdE<dHdE<dIdJ<dKdJ<dLdJ<dMdN<dOdN<dPdN<dQdN<dRdN<dSdT<dUdT<dVdT<dWdX<dYdX<dZdX<d[d\<d]d\<d^d\<d_d`<dad`<dbd`<dcdd<dedd<dfdd<dgdh<didh<djdh<dkdl<dmdl<dndl<dodl<dpdq<drdq<dsdq<dtdu<dvdu<dwdu<dxdy<dzdy<d{dy<d|d}<d~d}<dd}<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d<d d<d d<d d <dd <dd <dd <dd <dd <dd <dd <dd<dd<dd<dd<dd<dd<dd<dd<dd<d d<d!d<d"d#<d$d#<d%d#<d&d'<d(d'<d)d'<d*d'<d+d'<d,d-<d.d-<d/d0<d1d2<d3d2<d4d2<d5d2<d6d2<d7d2<d8d2<d9d2<d:d2<d;d2<d<d2<d=d><d?d@<dAdB<dCdD<dEdD<dFdG<dHdI<dJdK<dLdM<dNdM<dOdM<dPdM<dQdR<dSdR<dTdR<dUdV<dWdX<dYdX<dZdX<d[dX<d\d]<d^d]<d_d]<d`da<dbda<dcda<ddde<dfdg<dhdg<didg<djdg<dkdg<dldm<dndm<dodp<dqdp<drds<dtds<dudv<dwdv<dxdy<dzdy<d{dy<d|dy<d}dy<d~d<dd<dd        (t__doc__Rt__all__R RRRR(R&RRRRR R((R R s    c@sdZdkZdZdfdYZdfdYZdfdYZdefd YZd efd YZdd Z e d jo e ndS(sGeneric output formatting. Formatter objects transform an abstract flow of formatting events into specific output events on writer objects. Formatters manage several stack structures to allow various properties of a writer object to be changed and restored; writers need not be able to handle relative changes nor any sort of ``change back'' operation. Specific writer properties which may be controlled via formatter objects are horizontal alignment, font, and left margin indentations. A mechanism is provided which supports providing arbitrary, non-exclusive style settings to a writer as well. Additional interfaces facilitate formatting events which are not reversible, such as paragraph separation. Writer objects encapsulate device interfaces. Abstract devices, such as file formats, are supported as well as physical devices. The provided implementations all work with abstract devices. The interface makes available mechanisms for setting the properties which formatter objects manage and inserting data into the output. Nt NullFormattercBstZdZedZdZdZdZedZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZddZddZRS(s=A formatter which does nothing. If the writer parameter is omitted, a NullWriter instance is created. No methods of the writer are called by NullFormatter instances. Implementations should inherit from this class if implementing a writer interface but don't need to inherit any implementation. cCs'|djo t}n||_dS(N(twritertNonet NullWritertself(RR((t/usr/lib/python2.4/formatter.pyt__init__&s  cCsdS(N((Rt blankline((Rt end_paragraph*scCsdS(N((R((Rtadd_line_break+scOsdS(N((Rtargstkw((Rt add_hor_rule,scCsdS(N((RtformattcounterR((Rtadd_label_data-scCsdS(N((Rtdata((Rtadd_flowing_data.scCsdS(N((RR((Rtadd_literal_data/scCsdS(N((R((Rtflush_softspace0scCsdS(N((Rtalign((Rtpush_alignment1scCsdS(N((R((Rt pop_alignment2scCsdS(N((Rtx((Rt push_font3scCsdS(N((R((Rtpop_font4scCsdS(N((Rtmargin((Rt push_margin5scCsdS(N((R((Rt pop_margin6scCsdS(N((Rtspacing((Rt set_spacing7scGsdS(N((Rtstyles((Rt push_style8sicCsdS(N((Rtn((Rt pop_style9scCsdS(N((Rtflag((Rtassert_line_data:s(t__name__t __module__t__doc__RRRR R RRRRRRRRRRRR R"R$(((RRs&                  tAbstractFormattercBstZdZdZdZdZdZedZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZdZdZdZddZddZRS(sThe standard formatter. This implementation has demonstrated wide applicability to many writers, and may be used directly in most circumstances. It has been used to implement a full-featured World Wide Web browser. cCsy||_d|_g|_g|_g|_d|_g|_d|_ d|_ d|_ d|_ d|_ d|_dS(Nii(RRRRt align_stackt font_stackt margin_stackRt style_stacktnospacet softspacetpara_endtparskipt hard_breakt have_label(RR((RRKs            cCs|ip|iid|_n|i|jo8|i o-|ii||i||_d|_nd|_|_|_ d|_ dS(Nii( RR1Rtsend_line_breakR2R0Rtsend_paragraphR-R/R.(RR((RRZs     cCsR|ip|ip!|iid|_|_nd|_|_d|_dS(Nii( RR1R/RR3R2R0R-R.(R((RR es  cOs`|ip|iin|ii||d|_|_d|_|_ |_ |_ dS(Nii( RR1RR3t send_hor_ruleR R R-R2R/R.R0(RR R ((RR ls  cCs|ip |i o|iin|ip"|ii|odpdnt|t o |ii |i ||n|ii |d|_|_|_|_d|_|_dS(Nii(RR2R1RR3R/R4Rt isinstanceR tstrtsend_label_datatformat_counterRR-R.R0(RR RR((RRss " cCsd}x|D]}|djo|d|}q |djo+|djo||i||}qq |djo+|djo||i||}qq ||}q W|S(Ntt1s%dtaAitiI(tlabelR tcRRt format_lettert format_roman(RR RR?R>((RR9s     cCsXd}xK|djo=t|dd\}}tt||}||}q W|S(NR:iii(R>RtdivmodRtchrtordtcasets(RRERR>RFR((RR@s c Csddddg}dddg}d\}}x|d jot|d \}}|d jo||||d |}no|d jo|||||}nH|djo||}|d}nd}||||}||}|d }q0W|djo|i Sn|S(NtiRR?tmtvtltdR:ii i iiitI(R:i( tonestfivesR>tindexRRBRRFREtupper( RRERRORNR>RFRMR((RRAs(        cCs|pdSn|d i}|di}di|i}|io| odSn]|p |ioK|p(|ipd|_d|_ ndSn|ipd|}qnd|_ |_|_ |_ |_ ||_|i i|dS(Niit i(Rtisspacetprespacet postspacetjointsplitRR-R.R0R1R/R2Rtsend_flowing_data(RRRSRT((RRs$    % cCsy|pdSn|io|iidn|ddj|_d|_|_|_|_|_ |ii |dS(NRQis i( RRR.RRWR1R-R/R0R2tsend_literal_data(RR((RRs %cCsP|ioBd|_|_|_|_|_d|_|iidndS(NiiRQ( RR.R1R/R0R2R-RRW(R((RRs % cCs[|o=||ijo-|ii|||_|ii|n|ii|idS(N(RRRt new_alignmentR)tappend(RR((RRs  cCsg|io|id=n|io(|id|_}|ii|nd|_|iiddS(Ni(RR)RRRYR(RR((RRs   c Cs |\}}}}|io4d|_|_|_d|_|i i dn|i oy|i d\} }}}|tjo | }n|tjo |}n|tjo |}n|tjo |}qn||||f} |i i| |i i| dS(NiiRQi(tsizeRGtbtttRR.R1R/R-RRWR*tcsizetcitcbtctttAS_IStfontRZtnew_font( Rt.2R[RGR\R]RaR_R`R^Rc((RRs"       cCsM|io|id=n|io|id}nd}|ii|dS(Ni(RR*RcRRRd(RRc((RRs   cCs\|ii|td|i}| o|o|d}n|ii|t |dS(Ni( RR+RZRtfilterRtfstackRt new_margintlen(RRRg((RRs cCsb|io|id=ntd|i}|o|d}nd}|ii|t|dS(Ni( RR+RfRRgRRRhRi(RRgR((RRs cCs||_|ii|dS(N(RRRt new_spacing(RR((RRs cGs||io4d|_|_|_d|_|iidnx|D]}|i i |qEW|ii t |i dS(NiiRQ( RR.R1R/R-RRWRtstyleR,RZt new_stylesttuple(RRRk((RR s  icCs(|i| 3|iit|idS(N(RR,R!RRlRm(RR!((RR"s cCs,| |_|_d|_|_|_dS(Ni(R#RR-R1R/R0R2(RR#((RR$#s(R%R&R'RRR R RRR9R@RARRRRRRRRRRR R"R$(((RR(=s,             RcBstZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZRS(sMinimal writer interface to use in testing & inheritance. A writer which only provides the interface definition; no actions are taken on any methods. This should be the base class for all writers which do not need to inherit any implementation methods. cCsdS(N((R((RR0scCsdS(N((R((Rtflush1scCsdS(N((RR((RRY2scCsdS(N((RRc((RRd3scCsdS(N((RRtlevel((RRh4scCsdS(N((RR((RRj5scCsdS(N((RR((RRl6scCsdS(N((RR((RR47scCsdS(N((R((RR38scOsdS(N((RR R ((RR59scCsdS(N((RR((RR8:scCsdS(N((RR((RRW;scCsdS(N((RR((RRX<s(R%R&R'RRnRYRdRhRjRlR4R3R5R8RWRX(((RR(s             tAbstractWritercBsqtZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z RS( sA writer which can be used in debugging formatters, but not much else. Each method simply announces itself by printing its name and arguments on standard output. cCsd|fGHdS(Nsnew_alignment(%r)(R(RR((RRYGscCsd|fGHdS(Ns new_font(%r)(Rc(RRc((RRdJscCsd||fGHdS(Nsnew_margin(%r, %d)(RRo(RRRo((RRhMscCsd|fGHdS(Nsnew_spacing(%r)(R(RR((RRjPscCsd|fGHdS(Nsnew_styles(%r)(R(RR((RRlSscCsd|fGHdS(Nssend_paragraph(%r)(R(RR((RR4VscCs dGHdS(Nssend_line_break()((R((RR3YscOs dGHdS(Nssend_hor_rule()((RR R ((RR5\scCsd|fGHdS(Nssend_label_data(%r)(R(RR((RR8_scCsd|fGHdS(Nssend_flowing_data(%r)(R(RR((RRWbscCsd|fGHdS(Nssend_literal_data(%r)(R(RR((RRXes(R%R&R'RYRdRhRjRlR4R3R5R8RWRX(((RRp?s           t DumbWritercBsStZdZeddZdZdZdZdZdZ dZ RS( s;Simple writer class which writes output on the file object passed in as the file parameter or, if file is omitted, on standard output. The output is simply word-wrapped to the number of columns specified by the maxcol parameter. This class is suitable for reflowing a sequence of paragraphs. iHcCs7|pti|_||_ti||idS(N(tfiletsyststdoutRtmaxcolRRtreset(RRrRu((RRrs  cCsd|_d|_dS(Ni(Rtcoltatbreak(R((RRvxs cCs*|iid|d|_d|_dS(Ns i(RRrtwriteRRwRx(RR((RR4|s cCs&|iidd|_d|_dS(Ns i(RRrRyRwRx(R((RR3s cOsM|iid|iid|i|iidd|_d|_dS(Ns t-i(RRrRyRuRwRx(RR R ((RR5s  cCsv|ii||id}|djod|_||d}n|i}|it||_d|_ dS(Ns ii( RRrRyRtrfindRGRwt expandtabsRiRx(RRRG((RRXs   cCs|pdSn|ip|di}|i}|i}|ii}x~|iD]p}|oC|t ||jo|dd}q|d|d}n|||t |}d}qTW||_|di|_dS(Nis RQii( RRRxRRRwRuRrRyRVtwordRi(RRRuR}RyRwRx((RRWs&          ( R%R&R'RRRvR4R3R5RXRW(((RRqis      cCst}t|}|dj ot|}n/ti dotti d}n ti }xH|i }|pPn|djo|i dqc|i|qcW|i ddS(Nis i(RqtwR(tfRrRtopentfpRstargvtstdintreadlinetlineRR(RrRRR~R((Rttests       t__main__( R'RsRRbRR(RRpRqRR%(RRRpRsR(RqRRb((Rt?s "*C  c@sdZdkZdkZy/dkZeZ[dklZee_[Wnej odkZnXddgZdZdZ de fdYZ d e fd YZ d e fd YZ d e fdYZde fdYZe eieefZdZdfdYZeadZeadZdZdZdZdddZdfdYZdZ e!djo e ndS(sSAn FTP client class and some helper functions. Based on RFC 959: File Transfer Protocol (FTP), by J. Postel and J. Reynolds Example: >>> from ftplib import FTP >>> ftp = FTP('ftp.python.org') # connect to host, default port >>> ftp.login() # default, i.e.: user anonymous, passwd anonymous@ '230 Guest login ok, access restrictions apply.' >>> ftp.retrlines('LIST') # list directory contents total 9 drwxr-xr-x 8 root wheel 1024 Jan 3 1994 . drwxr-xr-x 8 root wheel 1024 Jan 3 1994 .. drwxr-xr-x 2 root wheel 1024 Jan 3 1994 bin drwxr-xr-x 2 root wheel 1024 Jan 3 1994 etc d-wxrwxr-x 2 ftp wheel 1024 Sep 5 13:43 incoming drwxr-xr-x 2 root wheel 1024 Nov 17 1993 lib drwxr-xr-x 6 1094 wheel 1024 Sep 13 19:07 pub drwxr-xr-x 3 root wheel 1024 Jan 3 1994 usr -rw-r--r-- 1 root root 312 Aug 1 1994 welcome.msg '226 Transfer complete.' >>> ftp.quit() '221 Goodbye.' >>> A nice test that reveals some of the network dialogue would be: python ftplib.py -d localhost -l -p -l N(sgetfqdntFTPtNetrciitErrorcBstZRS(N(t__name__t __module__(((t/usr/lib/python2.4/ftplib.pyR:st error_replycBstZRS(N(RR(((RR;st error_tempcBstZRS(N(RR(((RR<st error_permcBstZRS(N(RR(((RR=st error_protocBstZRS(N(RR(((RR >ss cBstZdZdZdZeZeZeZ eZ dZ dddddZ dddZ dZdZeZdZd Zd Zd Zd Zd ZdZdZdZdZdZdZdZdZdZedZ edZ!ddddZ"dedZ#edZ$ddZ%dZ&dZ'd Z(d!Z)d"Z*d#Z+d$Z,d%Z-d&Z.d'Z/d(Z0d)Z1d*Z2RS(+scAn FTP client class. To create a connection, call the class using these argument: host, user, passwd, acct These are all strings, and have default value ''. Then use self.connect() with optional host and port argument. To download a file, use ftp.retrlines('RETR ' + filename), or ftp.retrbinary() with slightly different arguments. To upload a file, use ftp.storlines() or ftp.storbinary(), which have an open file as argument (see their definitions below for details). The download/upload functions first issue appropriate TYPE and PORT or PASV commands. iticCs:|o/|i||o|i|||q6ndS(N(thosttselftconnecttusertlogintpasswdtacct(R R RRR((Rt__init__is c Cs,|o ||_n|o ||_nd}xti|i|idtiD]}|\}}}}} y,ti||||_ |i i| Wn?tij o0}|i o|i ind|_ qPnXPqPW|i pti|n||_|i id|_|i|_|iS(sConnect to host. Arguments are: - host: hostname to connect to (string, default previous host) - port: port to connect to (integer, default previous port)s!getaddrinfo returns an empty listitrbN(R R tporttmsgtsockett getaddrinfot SOCK_STREAMtrestaftsocktypetprotot canonnametsatsockR terrortclosetNonetmakefiletfiletgetresptwelcome( R R RRRRRRRR((RR ns0  "    cCs*|iodG|i|iGHn|iS(s`Get the welcome message from the server. (this is read and squirreled away by connect())s *welcome*N(R t debuggingtsanitizeR&(R ((Rt getwelcomes cCs ||_dS(sSet the debugging level. The required argument level means: 0: no debugging output (default) 1: print commands and responses but not body text etc. 2: also print raw lines read and sent before stripping CR/LFN(tlevelR R'(R R*((Rtset_debuglevelscCs ||_dS(sUse passive or active mode for data transfers. With a false argument, use the normal PORT mode, With a true argument, use the PASV command.N(tvalR t passiveserver(R R,((Rtset_pasvscCs|d djp|d djobt|}x1|djo#||ddjo|d}q1W|d d|d||}nt|S(Nispass sPASS is t*(tstlentitrepr(R R0R2((RR(s" ""cCsD|t}|idjodG|i|GHn|ii|dS(Nis*put*(tlinetCRLFR R'R(Rtsendall(R R4((Rtputlines cCs1|iodG|i|GHn|i|dS(Ns*cmd*(R R'R(R4R7(R R4((Rtputcmds cCs|ii}|idjodG|i|GHn|p tn|dtjo|d }n |dtjo|d }n|S(Nis*get*ii(R R$treadlineR4R'R(tEOFErrorR5(R R4((Rtgetlines cCs~|i}|dd!djoZ|d }xM|i}|d|}|d |jo|dd!djoPq-q-Wn|S(Niit-is (R R;R4tcodetnextline(R R>R=R4((Rt getmultilines   %cCs|i}|iodG|i|GHn|d |_|d }|d jo|Sn|djo t|n|djo t|nt |dS( Ns*resp*iit1t2t3t4t5(R@RARB( R R?trespR'R(tlastresptcRRR (R RGRE((RR%s         cCs.|i}|ddjo t|n|S(s%Expect a response beginning with '2'.iRAN(R R%RER(R RE((Rtvoidresps   cCsqdt}|idjodG|i|GHn|ii|t|i}|d djo t |ndS( sAbort a file transfer. Uses out-of-band data. This does not follow the procedure from the RFC to send Telnet IP and Synch; that doesn't seem to work with the servers I've tried. Instead, just send the ABOR command as OOB data.tABORis *put urgent*it426t226N(RJRK( R5R4R R'R(RR6tMSG_OOBR?RER (R R4RE((Rtaborts  cCs|i||iS(s'Send a command and return the response.N(R R8tcmdR%(R RN((Rtsendcmds cCs|i||iS(s8Send a command and expect a response beginning with '2'.N(R R8RNRH(R RN((Rtvoidcmds cCsY|id}t|dt|dg}||}ddi|}|i |S(sUSend a PORT command with the current host and the given port number. t.isPORT t,N( R tsplitthbytesR3RtpbytestbytestjoinRNR RP(R R RRNRVRTRU((Rtsendports   cCsd}|itijo d}n|itijo d}n|djo tdndt||t|dg}ddi |}|i |S( sDSend a EPRT command with the current host and the given port number.iiisunsupported address familyR sEPRT t|N( RR RtAF_INETtAF_INET6R R3R RtfieldsRWRNRP(R R RRR\RN((Rtsendeprts    !c Cs9d} d}xtidd|itidtiD]{}|\}}}}} y&ti|||}|i| Wn6tij o'} |o|ind}q4nXPq4W|pti| n|id|id} |iid}|itijo|i|| }n|i|| }|S(s3Create a new socket and send a PORT command for it.s!getaddrinfo returns an empty listiiN(RR"RRRR RRt AI_PASSIVERRRRRtbindR R!tlistent getsocknameRR RZRXRER]( R RRRRRERR RRRR((Rtmakeports0( cCsc|itijot|id\}}n(t|id|i i \}}||fS(NtPASVtEPSV( R RRRZtparse227ROR Rtparse229Rt getpeername(R R R((Rtmakepasv)s'cCs]d}|io|i\} } ti| | dti d\}} }}} ti|| |} | i| |dj o|id|n|i|}|ddjo t|q2nn|i}|dj o|id|n|i|}|ddjo t|n|i\} }|d djot|}n| |fS(sInitiate a transfer over the data connection. If the transfer is active, send a port command and the transfer command, and accept the connection. If the server is passive, send a pasv command, connect to it, and start the transfer command. Either way, return the socket for the connection and the expected size of the transfer. The expected size may be None if it could not be determined. Optional `rest' argument can be a string that is sent as the argument to a RESTART command. This is essentially a server marker used to tell the server to skip over any data up to the given marker. isREST %sR@it150N(R"tsizeR R-RhR RRRRRRRtcanonRtconnR trestRORNRERRbRtaccepttsockaddrtparse150(R RNRmRoRRRRkRER RRRRlRj((Rt ntransfercmd0s, .     cCs|i||dS(s0Like ntransfercmd() but returns only the socket.iN(R RqRNRm(R RNRm((Rt transfercmdWscCs|p d}n|p d}n|p d}n|djo|d jo|d}n|id|}|ddjo|id|}n|ddjo|id |}n|dd jo t|n|S( sLogin, default anonymous.t anonymousR R<s anonymous@sUSER iRBsPASS sACCT RAN(R R<(RRRR RORER(R RRRRE((RR[s"    i cCs`|id|i||}x*|i|}|pPn||q"W|i |i S(sURetrieve data in binary mode. `cmd' is a RETR command. `callback' is a callback function is called for each block. No more than `blocksize' number of bytes will be read from the socket. Optional `rest' is passed to transfercmd(). A new port is created for you. Return the response code. sTYPE IiN( R RPRrRNRmRltrecvt blocksizetdatatcallbackR!RH(R RNRwRuRmRvRl((Rt retrbinaryps   cCs|d jo t}n|id}|i|}|i d}x|i }|i djodGt|GHn|pPn|dtjo|d }n |ddjo|d }n||qGW|i|i|iS( sRetrieve data in line mode. The argument is a RETR or LIST command. The callback function (2nd argument) is called for each line, with trailing CRLF stripped. This creates a new port for you. print_line() is the default callback.sTYPE ARiis*retr*iis N(RwR"t print_lineR RORERrRNRlR#tfpR9R4R'R3R5R!RH(R RNRwRzR4RERl((Rt retrliness*    cCs`|id|i|}x-|i|}|pPn|i |qW|i |i S(sStore a file in binary mode.sTYPE IiN( R RPRrRNRlRztreadRutbufR6R!RH(R RNRzRuR}Rl((Rt storbinarys  cCs|id|i|}xh|i}|pPn|dtjo-|dtjo|d }n|t}n|i |qW|i |i S(sStore a file in line mode.sTYPE AiiiN( R RPRrRNRlRzR9R}R5R6R!RH(R RNRzR}Rl((Rt storliness   cCsd|}|i|S(sSend new account name.sACCT N(tpasswordRNR RP(R RRN((RRs cGsBd}x|D]}|d|}q Wg}|i||i|S(sBReturn a list of files in a given directory (default the current).tNLSTt N(RNtargstargtfilesR R{tappend(R RRNRR((RtnlstscGsd}d}|do6t|dtdjo|d |d}}nx'|D]}|o|d|}qTqTW|i||dS(sList a directory in long form. By default list current directory to stdout. Optional last argument is callback function; all non-empty arguments before it are concatenated to the LIST command. (This *should* only be used for a pathname.)tLISTiR RN(RNR"tfuncRttypeRR R{(R RRNRR((Rtdirs(cCsB|id|}|ddjo t|n|id|S(sRename a file.sRNFR iRBsRNTO N(R ROtfromnameRERRPttoname(R RRRE((Rtrenames  cCsW|id|}|d djo|Sn(|d djo t|n t|dS( sDelete a file.sDELE it250t200iRDN(RR(R ROtfilenameRERR(R RRE((Rtdeletes cCs|djoLy|idSWqptj o(}|idd djoqUqpXn|djo d}nd|}|i|S( sChange to a directory.s..tCDUPiit500R RQsCWD N(tdirnameR RPRRRRN(R RRRN((Rtcwds    cCsp|id|}|d djoH|di}yt|SWqlttfj ot |SqlXndS(sRetrieve the size of a file.sSIZE it213N( R RORREtstripR0tintt OverflowErrort ValueErrortlong(R RRER0((RRjscCs|id|}t|S(s+Make a directory, return its full pathname.sMKD N(R RORREtparse257(R RRE((RtmkdscCs|id|S(sRemove a directory.sRMD N(R RPR(R R((RtrmdscCs|id}t|S(s!Return current working directory.tPWDN(R RORER(R RE((RtpwdscCs|id}|i|S(sQuit, and close the connection.tQUITN(R RPRER!(R RE((Rtquit s cCs<|io.|ii|iid|_|_ndS(s8Close the connection without assuming anything about it.N(R R$R!RR"(R ((RR!s    (3RRt__doc__R'R tFTP_PORTRR"RR$R&R-RR R)R+tdebugR.R(R7R8R;R?R%RHRMRORPRXR]RbRhRqRrRRxR{R~RRRRRRRRjRRRRR!(((RRKs^             '          cCs|d djo t|ntdjo"dk}|id|ianti|}|pdSn|i d}yt |SWn#t t fj ot|SnXdS(sParse the '150' response for a RETR request. Returns the expected transfer size or None; size is not guaranteed to be present in the 150 message. iRiNs150 .* \((\d+) bytes\)i(RERt_150_reR"tretcompilet IGNORECASEtmatchtmtgroupR0RRRR(RERR0R((RRps   cCs|d djo t|ntdjodk}|idanti|}|p t|n|i }di |d }t |dd>t |d}||fS( sParse the '227' response for a PASV request. Raises error_proto if it does not contain '(h1,h2,h3,h4,p1,p2)' Return ('host.addr.as.numbers', port#) tuple.it227Ns#(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)RQiii(RERt_227_reR"RRtsearchRR tgroupstnumbersRWR RR(RERRR RR((RRe0s     "cCs|d djo t|n|id}|djo t|n|id|d}|djo t|n||d||djo t|n||d|!i||d}t|djo t|n|d}t |d}||fS( sParse the '229' response for a EPSV request. Raises error_proto if it does not contain '(|||port|)' Return ('host.addr.as.numbers', port#) tuple.it229t(it)iiN( RERtfindtleftR trightRStpartsR1tpeerR RR(RERRR RRR((RRfDs"     "  cCs|d djo t|n|dd!djodSnd}d}t|}xn||jo`||}|d}|djo1||jp||djoPn|d}n||}qUW|S( sParse the '257' response for a MKD or PWD request. This is a response to a MKD or PWD request: a directory name. Returns the directoryname in the 257 reply.it257is "R it"N(RERRR2R1tnRG(RERGR2RR((RRZs$      cCs |GHdS(s+Default retrlines callback to print a line.N(R4(R4((RRyqsR tIc Cs|p |}nd|}|i||i|t|id\}}|i |||id|}|d d jo t n|id|}|d d jo t n|i|idS( s+Copy file from one FTP-instance to another.sTYPE RcsSTOR it125RisRETR N(Rs150(Rs150(t targetnamet sourcenameRtsourceRPttargetReROt sourcehostt sourceportRXttreplyR tsreplyRH( RRRRRRRRR((Rtftpcpvs        cBsPtZdZeZeZeZedZdZdZ dZ dZ RS(sClass to parse & provide access to 'netrc' format files. See the netrc(4) man page for information on the file format. WARNING: This class is obsolete -- use module netrc instead. cCs|djo=dtijo tiitidd}qJtdnh|_h|_ t |d} d}x| i }|pPn|o!|io|i|qtn%|ot||i | Wtidd djotidd} tid=ntid}t |}|i |d}}} yt| }Wn4tj o(| dj otiidq_nDXy|i|\}}} Wn#tj otiidnX|i||| xtidD]}|d d jo|i|dq|d djo:d }|do|d |d}n|i|}q|d jo|i|i q|id |ti idqW|i!dS(sTest program. Usage: ftp [-d] [-r[file]] host [-l[dir]] [-d[dir]] [-p] [file] ... -d dir -l list -p password iiis-ds-rR s5Could not open account file -- using anonymous login.s$No account -- using anonymous login.s-ltCWDRs-psRETR iN("R1tsystargvttestRtexitR'R"trcfileR RtftpR+tuseridRRRtnetrcRtstderrtwriteRtKeyErrorRR$RRNRORER.R-RxtstdoutR( R'RRRNRRR RER$RR((RRsR        t__main__("RRRtSOCKSRtgetfqdnt ImportErrort__all__RLRt ExceptionRRRRR R RR:t all_errorsR5RR"RRpRReRfRRyRRRR(RRRRRpRRRRReRRRRRfRR5RRyRLRR RR((Rt?s>        k 7 c@sdZddddgZdkZdefdYZeZgdZgdZd Zd Z d Z d Z e d jo+dk Z ee iddddgGHndS(sParser for command line options. This module helps scripts to parse the command line arguments in sys.argv. It supports the same conventions as the Unix getopt() function (including the special meanings of arguments of the form `-' and `--'). Long options similar to those supported by GNU software may be used as well via an optional third argument. This module provides two functions and an exception: getopt() -- Parse command line options gnu_getopt() -- Like getopt(), but allow option and non-option arguments to be intermixed. GetoptError -- exception (class) raised with 'opt' attribute, which is the option involved with the exception. t GetoptErrorterrortgetoptt gnu_getoptNcBs)tZdZdZddZdZRS(NtcCs)||_||_ti|||dS(N(tmsgtselftoptt Exceptiont__init__(RRR((t/usr/lib/python2.4/getopt.pyR *s  cCs|iS(N(RR(R((R t__str__/s(t__name__t __module__RRR R (((R R's cCsg}t|tdjo |g}n t|}x|o|dido|ddjo|ddjo|d}Pn|dido+t||dd||d\}}q;t||dd||d\}}q;W||fS(s@getopt(args, options[, long_options]) -> opts, args Parses command line options and parameter list. args is the argument list to be parsed, without the leading reference to the running program. Typically, this means "sys.argv[1:]". shortopts is the string of option letters that the script wants to recognize, with options that require an argument followed by a colon (i.e., the same format that Unix getopt() uses). If specified, longopts is a list of strings with the names of the long options which should be supported. The leading '--' characters should not be included in the option name. Options which require an argument should be followed by an equal sign ('='). The return value consists of two elements: the first is a list of (option, value) pairs; the second is the list of program arguments left after the option list was stripped (this is a trailing slice of the first argument). Each option-and-value pair returned has the option as its first element, prefixed with a hyphen (e.g., '-x'), and the option argument as its second element, or an empty string if the option has no argument. The options occur in the list in the same order in which they were found, thus allowing multiple occurrences. Long and short options may be mixed. Rit-s--iiN( toptsttypetlongoptstlisttargst startswithtdo_longst do_shortst shortopts(RRRR((R R4s  , +,cCsjg}g}t|to |g}n t|}|ido|d}t}n$t i i do t}nt }x|o|ddjo||d7}Pn|dd djo+t||dd||d\}}q|dd djo+t||dd||d\}}q|o||7}Pq|i|d|d}qW||fS( sgetopt(args, options[, long_options]) -> opts, args This function works like getopt(), except that GNU style scanning mode is used by default. This means that option and non-option arguments may be intermixed. The getopt() function stops processing options as soon as a non-option argument is encountered. If the first character of the option string is `+', or if the environment variable POSIXLY_CORRECT is set, then option processing stops as soon as a non-option argument is encountered. t+itPOSIXLY_CORRECTis--iRN(Rt prog_argst isinstanceRtstrRRRtTruetall_options_firsttostenvirontgettFalseRRRtappend(RRRRRR((R R_s6      ++ cCsy|id}Wntj o d}nX|| ||d}}t||\}}|oH|djo7|pt d||n|d|d}}qn|ot d||n|i d||pdf||fS(Nt=isoption --%s requires argumentis%option --%s must not have an arguments--R( Rtindextit ValueErrortNonetoptargt long_has_argsRthas_argRRRR#(RRRRR&R+R)((R Rs  cCs g}|D]!}|i|o ||q q ~}|ptd||n||jot|fSn |d|jot|fSnt |djotd||nt |djpt |d}|i d}|o|d }n||fS(Nsoption --%s not recognizedR$isoption --%s not a unique prefixii(t_[1]RtoRRt possibilitiesRR"RtlentAssertionErrort unique_matchtendswithR+(RRR,R-R.R+R1((R R*s5  cCsx|djo|d|d}}t||oU|djo7|ptd||n|d|d}}n|d}}nd}|id||fqW||fS(NRiisoption -%s requires argumentR( t optstringRt short_has_argRRRR)RR#(RR3RRRR)((R Rs    cCsnxTtt|D]@}|||jo djno|id|dSqqWtd||dS(Nt:isoption -%s not recognized(trangeR/RR&RRR(RRR&((R R4s "t__main__isa:bsalpha=tbeta(t__doc__t__all__RRRRRRRR*RR4R tsystargv( R4R:RRR*R;RRRRR((R t?s   + 2      c@sdZdkZddgZddZddZddZdd Zd ZydkZei ei fWnue e fj ocy dk Z WnFe j o:yd klZWne j o eZqXeZqXeZnXeZdS( s)Utilities to get a password and/or the current user name. getpass(prompt) - prompt for a password, with echo turned off getuser() - get the user name from the environment or password database On Windows, the msvcrt module will be used. On the Mac EasyDialogs.AskPassword is used, if available. Ntgetpasstgetusers Password: cCsytii}Wnt|SnXti|}|}|dti @|d1s( RRR tlistdirtnamesterrortpatterntfiltertfnmatch(RRR((RR *s  s[*?[]cCsti|dj S(N(t magic_checktsearchtstNone(R((RR7s( t__doc__RRtret__all__RR tcompileRR(R"RRRR!RRR ((Rt?s     ! c@s`dZddgZdZdZdZdZdZdZd Zd Z d Z d Z d Z dZ dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZeZha dZ!dZ"d Z#d!d"Z$d!d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-e.d,jo e-nd-S(.s!Gopher protocol client interface.t send_selectort send_querys1/sgopher.micro.umn.eduiFt0t1t2t3t4t5t6t7t8t9t+tstetcthtTtMtItwtqtgt:t;tx;tD]/}|d djo|dtt|((R t get_directory`s<     cCsg}t||i|S(s@Get a text file as a list of lines, with trailing CRLF stripped.N(tlinestget_alt_textfileR<RC(R<RF((R t get_textfilescCsx|i}|p dGHPn|dtjo|d }n |dtjo|d }n|djoPn|d djo|d}n||qWdS( sNGet a text file and pass each line to a function, with trailing CRLF stripped.is(Unexpected EOF from server)iiR9is..N(R<R=R>R1tfunc(R<RIR>((R RGs   cCs|i}|S(s*Get a binary file as one solid data block.N(R<treadtdata(R<RK((R t get_binarys cCs1x*|i|}|pPn||qWdS(s4Get a binary file and pass each block to a function.iN(R<RJt blocksizeRKRI(R<RIRMRK((R tget_alt_binarysc Csdk}dk}|i|idd\} }t}|d}t}|o|d}|d}n|o|d}|d}t |djo|d|}}n&d}|o|d}|d}nd}|o|d}|d}qn|t jot |||} nt||} |tjo&t| } x| D] } | GHqIWnk|tt fjo&t| }xH|D] } | GHqWn2t| }dGt |GdGt|d d GHdS( sTrivial test program.NiR"is binary data:sbytes:idi((tsystgetopttargvtoptstargst DEF_SELECTORR0R+tDEF_HOSTR&RBR4tA_INDEXRR<RtA_TEXTRHRFtitemtA_MENURER;RLRKtrepr( R;R4RPR+RSR0ROR&RKR<RFRXRR((R ttestsL               t__main__N(/t__doc__t__all__RTRUR*RWRYtA_CSOtA_ERRORt A_MACBINHEXt A_PCBINHEXt A_UUENCODEDRVtA_TELNETtA_BINARYt A_DUPLICATEtA_SOUNDtA_EVENTt A_CALENDARtA_HTMLtA_TN3270tA_MIMEtA_IMAGEtA_WHOIStA_QUERYtA_GIFtA_WWWt A_PLUS_IMAGEt A_PLUS_MOVIEt A_PLUS_SOUNDtdirRRR!R1R@RRR7R8RERHRGRLRNR[t__name__(+R`R_RrRpRRnRURcRsR^RNRRkRjRaRER!R@R[RmRHRhRoRqRGRRtR1RWR*RgRbR8RlRTRiR7RVRdRLReRfRY((R t?s^           ( c@sdZdkZdkZdkZdkZdkZddgZdddddf\ZZZ Z Z ddf\Z Z d Zd Zd Zd Zd ZdddZdfdYZdZedjo endS(sFunctions that read and write gzipped files. The user of the file doesn't have to worry about the compression, but random access is not allowed.NtGzipFiletopeniiiiicCs#|djo|dd>7}n|S(sReturn i as an unsigned integer, assuming it fits in 32 bits. If it's >= 2GB when viewed as a 32-bit unsigned int, return a long. ili N(ti(R((t/usr/lib/python2.4/gzip.pytU32s cCs|d@S(s>Return the low-order 32 bits of an int, as a non-negative int.lN(R(R((RtLOWU32scCs|itid|dS(Ns(treprRRtsthextid(RR5((Rt__repr__scCsY|ddjo|d}n||_tid|_d|_g|_d|_dS(Nis.gzRi(RRR(tcrc32tcrctsizetwritebuftbufsize(RR((RR's   cCs|iid|iid|id }d}|o t}n|iit|t|it t i |iid|iid|o|ii|dndS(Nssiisst( RRRRtfnametflagstFNAMEtchrR tlongttime(RR?R@((RR0s  cCstid|_d|_dS(NRi(R(R9RR:R;(R((Rt _init_readscCs|iid}|djo tdnt|iid}|djo tdnt|iid}|iid|t@oLt|iid}|dt|iid}|ii|n|t @o?x<t o0|iid}| p |d joPqqWn|t @o?x<t o0|iid}| p |d joPq5q5Wn|t@o|iidndS( NissNot a gzipped fileiisUnknown compression methodiiR>(RRRtmagicR.tordtmethodtflagtFEXTRAtxlenRAR"R5tFCOMMENTtFHCRC(RRFR5RKRIRH((Rt_read_gzip_headers4         cCs|itjodk}t|idn|idjo tdnt |djoc|i t ||_ t i ||i|_|ii|ii||it |7_ndS(Ns$write() on read-only GzipFile objects!write() on closed GzipFile objecti(RRR&terrnoR.tEBADFRRt ValueErrortlentdataR;R(R9R:RR-R/(RRSRO((RRs  icCsu|itjodk}t|idn|idjo|idjodSnd}|djoYy6x/t o'|i |t |i|d}qpWWq5tj o|i}q5Xnsy?x8||ijo'|i |t |i|d}qWWn0tj o$||ijo |i}q5nX|i| }|i||_|i||_|i|7_|S(Ns$read() on write-only GzipFile objectiRii(RRR!ROR.RPR%RRtreadsizeR;R"t_readtmintmax_read_chunktEOFErrorR$tchunkR/(RR;RORTRY((RRs6      cCs?||i|_t||i|_|it|8_dS(N(tbufRR$RRR%R/(RRZ((Rt_unreadscCsv|idjo tdn|io|ii}|iidd||iijo tdn|ii||i|i t i t i |_ t|_n|ii|}|djo3|i i}|i|i|tdn|i i |}|i||i idjo;|iit|i i dd|it|_ndS(Ns Reached EOFiiRii(RRRRXR#ttelltpostseekRERNR(t decompressobjR+t decompresstFalseRR;RZtflusht uncompresst _read_eoft_add_read_datat unused_dataRRR"(RR;RcR]RZ((RRUs0           $ cCsXti||i|_|i||_|it||_|it||_dS(N( R(R9RSRR:R$R%RRR;(RRS((RRe%scCs|iiddt|i}tt|i}t|t|ijo tdn$|t |i jo tdndS(NiisCRC check faileds!Incorrect length of data produced( RRR^RR9RtisizeR:R.RR;(RR9Rg((RRd+s cCs|itjoR|ii|iit|i|it |it |i d|_n|it jo d|_n|io|iid|_ndS(N(RRR&RRR-RbR R:R RR;RR!Rtclose(R((RRh9s    cCsTy,|idjo|idjodSnWntj o dSnX|idS(N(RRRRtAttributeErrorRh(R((Rt__del__Fs    cCsA|itjo |ii|ii|n|iidS(N(RRR&RRR-Rbt zlib_mode(RRk((RRbOs cCs |iiS(sInvoke the underlying file object's fileno() method. This will raise AttributeError if the underlying file object doesn't support fileno(). N(RRtfileno(R((RRlUscCstS(N(Ra(R((Rtisatty]scCs|iS(N(RR/(R((RR\`scCsX|itjotdn|iidt|_d|_d|_ d|_ dS(s[Return the uncompressed stream file position indicator to the beginning of the filesCan't rewind in write modeiRN( RRR!R.RR^R"R#R$R%R/(R((Rtrewindcs   cCs|itjor||ijotdn||i}x)t|dD]}|iddqNW|i|ddny|it joh||ijo|i n||i}x%t|dD]}|i dqW|i |dndS(NsNegative seek in write modeiR>( RRR&R/R.tcounttrangeRRR!RnR(RR/RoR((RR^ns   cCs]|djo ti}ng}td|}x'to|djodi|Sn|i |}|i d}|dj oM|djo!t||jo|d}q||jo|d}qn|djp |djo;|i||d |i||ddi|Sn|i||t|}t||d}q2WdS(NiidRs iii(R;tsystmaxinttbufsRVRTR"tjoinRRtctfindRRRRtappendR[(RR;RuRRTRs((Rtreadlines,      icCst|djo ti}ng}xM|djo?|i}|djoPn|i||t|}q#W|S(NiR( tsizehintRqRrtLRRxtlineRwRR(RRyRzR{((Rt readliness      cCs"x|D]}|i|qWdS(N(RzR{RR(RRzR{((Rt writelinesscCs|S(N(R(R((Rt__iter__scCs%|i}|o|SntdS(N(RRxR{t StopIteration(RR{((Rtnexts (!t__name__t __module__t__doc__RRRWR1R8R'R0RERNRRR[RUReRdRhRjR(t Z_SYNC_FLUSHRbRlRmR\RnR^RxR|R}R~R(((RR3s8 D    "  2           cCstid}|o|ddj}|o|d}n|p dg}nxm|D]e}|o|djo+tddddd ti}ti}qF|d d jod Gt |GHqTnt |d}t i |d d }n^|djo+ti}tdddd d ti}n&t i |d}t |d d }x4t o,|id}|pPn|i|qIW|tij o|in|tij o|iqTqTWdS(Niis-dt-RRRRRis.gzsfilename doesn't end in .gz:twbi(RqtargvtargsR`targRtstdintftstdouttgR4RRR"RRYRRh(RRRYRR`R((Rt_tests@      "t__main__(RRRqRDR(Rt__all__tFTEXTRMRJRARLR!R&RRR R RRRRR(RAR!RRRRRMRR RRR RR&RJRLRqR(RRDR((Rt?s"   $      & c @sWdZdZddddddgZdklZlZd kZd Zd Zd Z d Z dZ dZ dZ dZy/dklZlZl Z l Z l Z l Z Wnej onXedjoygZddddddddddg ZxeD]Zeeeq WgZxeoeieeq+WeGHnd S(sHeap queue algorithm (a.k.a. priority queue). Heaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for all k, counting elements from 0. For the sake of comparison, non-existing elements are considered to be infinite. The interesting property of a heap is that a[0] is always its smallest element. Usage: heap = [] # creates an empty heap heappush(heap, item) # pushes a new item on the heap item = heappop(heap) # pops the smallest item from the heap item = heap[0] # smallest item on the heap without popping it heapify(x) # transforms list into a heap, in-place, in linear time item = heapreplace(heap, item) # pops and returns smallest item, and adds # new item; the heap size is unchanged Our API differs from textbook heap algorithms as follows: - We use 0-based indexing. This makes the relationship between the index for a node and the indexes for its children slightly less obvious, but is more suitable since Python uses 0-based indexing. - Our heappop() method returns the smallest item, not the largest. These two make it possible to view the heap as a regular Python list without surprises: heap[0] is the smallest item, and heap.sort() maintains the heap invariant! soHeap queues [explanation by Franois Pinard] Heaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for all k, counting elements from 0. For the sake of comparison, non-existing elements are considered to be infinite. The interesting property of a heap is that a[0] is always its smallest element. The strange invariant above is meant to be an efficient memory representation for a tournament. The numbers below are `k', not a[k]: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 In the tree above, each cell `k' is topping `2*k+1' and `2*k+2'. In an usual binary tournament we see in sports, each cell is the winner over the two cells it tops, and we can trace the winner down the tree to see all opponents s/he had. However, in many computer applications of such tournaments, we do not need to trace the history of a winner. To be more memory efficient, when a winner is promoted, we try to replace it by something else at a lower level, and the rule becomes that a cell and the two cells it tops contain three different items, but the top cell "wins" over the two topped cells. If this heap invariant is protected at all time, index 0 is clearly the overall winner. The simplest algorithmic way to remove it and find the "next" winner is to move some loser (let's say cell 30 in the diagram above) into the 0 position, and then percolate this new 0 down the tree, exchanging values, until the invariant is re-established. This is clearly logarithmic on the total number of items in the tree. By iterating over all items, you get an O(n ln n) sort. A nice feature of this sort is that you can efficiently insert new items while the sort is going on, provided that the inserted items are not "better" than the last 0'th element you extracted. This is especially useful in simulation contexts, where the tree holds all incoming events, and the "win" condition means the smallest scheduled time. When an event schedule other events for execution, they are scheduled into the future, so they can easily go into the heap. So, a heap is a good structure for implementing schedulers (this is what I used for my MIDI sequencer :-). Various structures for implementing schedulers have been extensively studied, and heaps are good for this, as they are reasonably speedy, the speed is almost constant, and the worst case is not much different than the average case. However, there are other representations which are more efficient overall, yet the worst cases might be terrible. Heaps are also very useful in big disk sorts. You most probably all know that a big sort implies producing "runs" (which are pre-sorted sequences, which size is usually related to the amount of CPU memory), followed by a merging passes for these runs, which merging is often very cleverly organised[1]. It is very important that the initial sort produces the longest runs possible. Tournaments are a good way to that. If, using all the memory available to hold a tournament, you replace and percolate items that happen to fit the current run, you'll produce runs which are twice the size of the memory for random input, and much better for input fuzzily ordered. Moreover, if you output the 0'th item on disk and get an input which may not fit in the current tournament (because the value "wins" over the last output value), it cannot fit in the heap, so the size of the heap decreases. The freed memory could be cleverly reused immediately for progressively building a second heap, which grows at exactly the same rate the first heap is melting. When the first heap completely vanishes, you switch heaps and start a new run. Clever and quite effective! In a word, heaps are useful memory structures to know. I use them in a few applications, and I think it is good to keep a `heap' module around. :-) -------------------- [1] The disk balancing algorithms which are current, nowadays, are more annoying than clever, and this is a consequence of the seeking capabilities of the disks. On devices which cannot seek, like big tape drives, the story was quite different, and one had to be very clever to ensure (far in advance) that each tape movement will be the most effective possible (that is, will best participate at "progressing" the merge). Some tapes were even able to read backwards, and this was also used to avoid the rewinding time. Believe me, real good tape sorts were quite spectacular to watch! From all times, sorting has always been a Great Art! :-) theappushtheappoptheapifyt heapreplacetnlargestt nsmallest(sislicesrepeatNcCs+|i|t|dt|ddS(s4Push item onto heap, maintaining the heap invariant.iiN(theaptappendtitemt _siftdowntlen(RR((t/usr/lib/python2.4/heapq.pyRs cCsB|i}|o%|d}||d heap[0]: item = heapreplace(heap, item) iN(RRRR(RRR((R Rs    cCs>t|}x+tt|dD]}t||q#WdS(s;Transform list into a heap, in-place, in O(len(heap)) time.iN(R txtntreversedtxrangetiR(RRR((R Rs  cCst|}tt||}|p|Snt|t}|d}x9|D]1}||joqQn||||d}qQW|i dt |S(sfFind the n largest elements in a dataset. Equivalent to: sorted(iterable, reverse=True)[:n] itreverseN(titertiterabletittlisttisliceRtresultRRt _heapreplacetsoltelemtsorttTrue(RRRRRRR((R Rs      c Cst|do|dt|jot|}tt|d|}|p|Snt i }|i }|d}x@|D]8}||joq}n|||||d}q}W|Snt|}t|ttt|t|t|S(sYFind the n smallest elements in a dataset. Equivalent to: sorted(iterable)[:n] t__len__i iiN(thasattrRRR RRtsortedRRtbisecttinsortR tlosRRthRtmapRtrepeattmin( RRR'R%RR&R RR((R Rs('        cCsg||}xL||jo>|dd?}||}||joPn|||<|}q W|||<d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d <d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d7d8<d9d:<d;d<<d=d><d?d@<dAdB<dCdD<dEdF<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdT<dUdV<dWdX<dYdZ<d[d\<d]d^<d_d`<dadb<dcdd<dedf<dgdh<didj<dkdl<dmdn<dodp<dqdr<dsdt<dudv<dwdx<dydz<d{d|<d}d~<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddthArri!tharri!theartsie&thellipi& tiacuteiticircitiexclitigraveitimagei!tinfini"tinti+"tiotaitiquestitisini"tiumlitkappaitlArri!tlambdaitlangi)#tlaquoitlarri!tlceili#tldquoi tleid"tlfloori #tlowasti"tlozi%tlrmi tlsaquoi9 tlsquoi tlti<tmacritmdashi tmicroitmiddotitminusi"tmuitnablai"tnbspitndashi tnei`"tnii "tnotitnotini "tnsubi"tntildeitnuitoacuteitocircitoeligiStograveitolinei> tomegaitomicronitoplusi"tori("tordfitordmitoslashitotildeitotimesi"toumlitparaitparti"tpermili0 tperpi"tphiitpiitpivitplusmnitpounditprimei2 tprodi"tpropi"tpsiitquoti"trArri!tradici"trangi*#traquoitrarri!trceili #trdquoi treali!tregitrfloori #trhoitrlmi trsaquoi: trsquoi tsbquoi tscaroniatsdoti"tsectitshyitsigmaitsigmafitsimi<"tspadesi`&tsubi"tsubei"tsumi"tsupi"tsup1itsup2itsup3itsupei"tszligittauitthere4i4"tthetaitthetasymitthinspi tthornittildeittimesittradei"!tuArri!tuacuteituarri!tucircitugraveitumlitupsihitupsilonituumlitweierpi!txiityacuteityenityumlitzetaitzwji tzwnji s&#%d;N(t__doc__tname2codepointtcodepoint2namet entitydefst iteritemstnamet codepointtchr(RRRRR((t$/usr/lib/python2.4/htmlentitydefs.pyt?s&   c@sdZdkZdklZddgZdeifdYZdeifdYZe dZ e djo e ndS( svHTML 2.0 parser. See the HTML 2.0 specification: http://www.w3.org/hypertext/WWW/MarkUp/html-spec/html-spec_toc.html N(sAS_ISt HTMLParsertHTMLParseErrorcBstZdZRS(s3Error raised when an HTML document can't be parsed.(t__name__t __module__t__doc__(((t/usr/lib/python2.4/htmllib.pyRs cBs0tZdZdklZddZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>dd=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKZMdLZNdMZOdNZPdOZQdPZRdQZSdRZTdSZUdTZVdUZWdVZXdWZYdXZZdYZ[RS(ZsThis is the basic HTML parser class. It supports all entity names required by the XHTML 1.0 Recommendation. It also defines handlers for all HTML 2.0 and many HTML 3.0 and 3.2 elements. (s entitydefsicCs tii||||_dS(sCreates an instance of the HTMLParser class. The formatter parameter is the formatter instance associated with the parser. N(tsgmllibt SGMLParsert__init__tselftverboset formatter(R R R ((RRscCst|dS(N(Rtmessage(R R ((Rterror'scCs\tii|d|_d|_d|_d|_d|_ g|_ d|_ g|_ dS(Ni( RRtresetR tNonetsavedatatisindexttitletbasetanchort anchorlisttnofillt list_stack(R ((RR*s       cCsV|idj o|i||_n/|io|ii|n|ii|dS(N(R RRtdataRR tadd_literal_datatadd_flowing_data(R R((Rt handle_data:s  cCs d|_dS(sBegins saving character data in a buffer instead of sending it to the formatter object. Retrieve the stored data via the save_end() method. Use of the save_bgn() / save_end() pair may not be nested. tN(R R(R ((Rtsave_bgnEscCs9|i}d|_|ipdi|i}n|S(sHEnds buffering character data and returns all data saved since the preceding call to the save_bgn() method. If the nofill flag is false, whitespace is collapsed to single spaces. A call to this method without a preceding call to the save_bgn() method will raise a TypeError exception. t N(R RRRRtjointsplit(R R((Rtsave_endOs    cCs+||_|io|ii|ndS(s}This method is called at the start of an anchor region. The arguments correspond to the attributes of the tag with the same names. The default implementation maintains a list of hyperlinks (defined by the HREF attribute for tags) within the document. The list of hyperlinks is available as the data attribute anchorlist. N(threfR RRtappend(R R"tnamettype((Rt anchor_bgn`s   cCs5|io'|idt|id|_ndS(sThis method is called at the end of an anchor region. The default implementation adds a textual footnote marker using an index into the list of hyperlinks created by the anchor_bgn()method. s[%d]N(R RRtlenRR(R ((Rt anchor_endns cGs|i|dS(sThis method is called to handle images. The default implementation simply passes the alt value to the handle_data() method. N(R Rtalt(R tsrcR)targs((Rt handle_image{scCsdS(N((R tattrs((Rt start_htmlscCsdS(N((R ((Rtend_htmlscCsdS(N((R R-((Rt start_headscCsdS(N((R ((Rtend_headscCsdS(N((R R-((Rt start_bodyscCsdS(N((R ((Rtend_bodyscCs|idS(N(R R(R R-((Rt start_titlescCs|i|_dS(N(R R!R(R ((Rt end_titlescCs5x.|D]&\}}|djo ||_qqWdS(NR"(R-tatvR R(R R-R6R7((Rtdo_bases  cCs d|_dS(Ni(R R(R R-((Rt do_isindexscCsdS(N((R R-((Rtdo_linkscCsdS(N((R R-((Rtdo_metascCsdS(N((R R-((Rt do_nextidscCs$|iid|iiddS(Nith1i(R=iii(R R t end_paragrapht push_font(R R-((Rtstart_h1scCs!|iid|iidS(Ni(R R R>tpop_font(R ((Rtend_h1scCs$|iid|iiddS(Nith2i(RCiii(R R R>R?(R R-((Rtstart_h2scCs!|iid|iidS(Ni(R R R>RA(R ((Rtend_h2scCs$|iid|iiddS(Nith3i(RFiii(R R R>R?(R R-((Rtstart_h3scCs!|iid|iidS(Ni(R R R>RA(R ((Rtend_h3scCs$|iid|iiddS(Nith4i(RIiii(R R R>R?(R R-((Rtstart_h4scCs!|iid|iidS(Ni(R R R>RA(R ((Rtend_h4scCs$|iid|iiddS(Nith5i(RLiii(R R R>R?(R R-((Rtstart_h5scCs!|iid|iidS(Ni(R R R>RA(R ((Rtend_h5scCs$|iid|iiddS(Nith6i(ROiii(R R R>R?(R R-((Rtstart_h6scCs!|iid|iidS(Ni(R R R>RA(R ((Rtend_h6scCs|iiddS(Ni(R R R>(R R-((Rtdo_pscCs@|iid|iitttdf|id|_dS(Ni(R R R>R?tAS_ISR(R R-((Rt start_prescCs:|iid|iitd|id|_dS(Nii(R R R>RAtmaxR(R ((Rtend_pres cCs|i||iddS(Ntxmp(R RTR-t setliteral(R R-((Rt start_xmps cCs|idS(N(R RV(R ((Rtend_xmpscCs|i||iddS(Ntlisting(R RTR-RX(R R-((Rt start_listings cCs|idS(N(R RV(R ((Rt end_listingscCs0|iid|iitdttfdS(Nii(R R R>R?RS(R R-((Rt start_addressscCs!|iid|iidS(Ni(R R R>RA(R ((Rt end_addressscCs$|iid|iiddS(Nit blockquote(R R R>t push_margin(R R-((Rtstart_blockquotescCs!|iid|iidS(Ni(R R R>t pop_margin(R ((Rtend_blockquotescCsA|ii|i |iid|iidddgdS(Ntult*i(R R R>RRaR#(R R-((Rtstart_ul scCs=|io|id=n|ii|i |iidS(Ni(R RR R>Rc(R ((Rtend_uls cCsm|iid|io0|id\}}}}|d|d<}n d\}}|ii||dS(NiiiiRf(Rfi( R R R>Rtdummytlabeltcounterttoptadd_label_data(R R-RiRlRkRj((Rtdo_lis   cCs|ii|i |iidd}xL|D]D\}}|djo+t |djo|d}n|}q1q1W|ii d|dgdS(Ntols1.R%it.i( R R R>RRaRjR-R6R7R'R#(R R-R6RjR7((Rtstart_ols  cCs=|io|id=n|ii|i |iidS(Ni(R RR R>Rc(R ((Rtend_ol(s cCs|i|dS(N(R RgR-(R R-((Rt start_menu-scCs|idS(N(R Rh(R ((Rtend_menu0scCs|i|dS(N(R RgR-(R R-((Rt start_dir3scCs|idS(N(R Rh(R ((Rtend_dir6scCs-|iid|iidddgdS(NitdlRi(R R R>RR#(R R-((Rtstart_dl9scCs)|id|io|id=ndS(Nii(R tddpopR(R ((Rtend_dl=s  cCs|idS(N(R Ry(R R-((Rtdo_dtAscCs7|i|iid|iidddgdS(NtddRi(R RyR RaRR#(R R-((Rtdo_ddDs cCsU|ii||io7|idddjo|id=|iiqQndS(NiiR|(R R R>tblRRc(R R~((RRyIs   cCs|i|dS(N(R tstart_iR-(R R-((Rt start_citeTscCs|idS(N(R tend_i(R ((Rtend_citeUscCs|i|dS(N(R tstart_ttR-(R R-((Rt start_codeWscCs|idS(N(R tend_tt(R ((Rtend_codeXscCs|i|dS(N(R RR-(R R-((Rtstart_emZscCs|idS(N(R R(R ((Rtend_em[scCs|i|dS(N(R RR-(R R-((Rt start_kbd]scCs|idS(N(R R(R ((Rtend_kbd^scCs|i|dS(N(R RR-(R R-((Rt start_samp`scCs|idS(N(R R(R ((Rtend_sampascCs|i|dS(N(R tstart_bR-(R R-((Rt start_strongcscCs|idS(N(R tend_b(R ((Rt end_strongdscCs|i|dS(N(R RR-(R R-((Rt start_varfscCs|idS(N(R R(R ((Rtend_vargscCs |iitdttfdS(Ni(R R R?RS(R R-((RRkscCs|iidS(N(R R RA(R ((RRmscCs |iittdtfdS(Ni(R R R?RS(R R-((RRpscCs|iidS(N(R R RA(R ((RRrscCs |iitttdfdS(Ni(R R R?RS(R R-((RRuscCs|iidS(N(R R RA(R ((RRwscCsd}d}d}xk|D]c\}}|i}|djo |}n|djo |}n|djo|i}qqW|i |||dS(NRR"R$R%( R"R$R%R-tattrnametvaluetstriptlowerR R&(R R-R$RRR"R%((Rtstart_azs       cCs|idS(N(R R((R ((Rtend_ascCs|iidS(N(R R tadd_line_break(R R-((Rtdo_brscCs|iidS(N(R R t add_hor_rule(R R-((Rtdo_hrsc Cs%d}d}d}d}d}d} x|D]\}}|djo |}n|djo |}n|djo |}n|djo |}n|djo*yt |}Wqt j oqXn|d jo*yt |} Wqt j oqXq+q+W|i |||||| dS( NRs(image)italignR)tismapR*twidththeight( RR)RR*RRR-RRtintt ValueErrorR R,( R R-R*RRRRRR)R((Rtdo_imgs6             cCs|i||idS(N(R RTR-t setnomoretags(R R-((Rt do_plaintexts cCsdS(N((R ttagR-((Rtunknown_starttagscCsdS(N((R R((Rtunknown_endtags(\RRRthtmlentitydefst entitydefsRR RRRR!R&R(R,R.R/R0R1R2R3R4R5R8R9R:R;R<R@RBRDRERGRHRJRKRMRNRPRQRRRTRVRYRZR\R]R^R_RbRdRgRhRnRqRrRsRtRuRvRxRzR{R}RyRRRRRRRRRRRRRRRRRRRRRRRRRRRR(((RRs                                                                                c CsJdk}dk}|p|id}n|o|ddj}|o |d=n|o|d}nd}|djo |i}nFyt|d}Wn/t j o#}|GdG|GH|i dnX|i }||ij o|in|o|i}n|i|i}t|}|i||idS(Niis-ss test.htmlt-trt:(tsysR R+targvtsilenttfiletstdintftopentIOErrortmsgtexittreadRtcloset NullFormattertAbstractFormattert DumbWriterRtptfeed( R+RRRRRRRR ((Rttests2       t__main__( RRR RSt__all__tSGMLParseErrorRRRRRR(RRRRRRS((Rt?s    ' c@sdZdkZdkZdkZdklZydklZWn ej odklZnXdddddd d d d d dddddddgZ dZ dZ dZ dZ dZdZdZdZdZdZdZd Zd!Zd"Zd#Zd$Zd%Zd&Zd'Zd(Zd)Zd*Zd+Z d,Z!d-Z"d.Z#d/Z$d0Z%d1Z&d2Z'd3Z(d4Z)d5Z*d6Z+d7Z,d8Z-d9Z.d:Z/d;Z0d<Z1d=Z2d>Z3d?Z4d@Z5dAZ6dBZ7dCZ8dDZ9dEZ:dFZ;dGZ<dHZ=dIZ>dJZ?dKZ@dLZAdMeiBfdNYZCdfdOYZDdfdPYZEdQfdRYZFdSfdTYZGdUeGfdVYZHdWeGfdXYZIdeEfdYYZJdfdZYZKeLed[od\eKfd]YZMndeNfd^YZOd eOfd_YZPdeOfd`YZQd eOfdaYZRd eOfdbYZSd eOfdcYZTd eOfddYZUdeOfdeYZVdeVfdfYZWdeVfdgYZXdeVfdhYZYdeOfdiYZZeOZ[djfdkYZ\dlZ]e^dmjo e]ndS(ns HTTP/1.1 client library HTTPConnection go through a number of "states", which defines when a client may legally make another request or fetch the response for a particular request. This diagram details these state transitions: (null) | | HTTPConnection() v Idle | | putrequest() v Request-started | | ( putheader() )* endheaders() v Request-sent | | response = getresponse() v Unread-response [Response-headers-read] |\____________________ | | | response.read() | putrequest() v v Idle Req-started-unread-response ______/| / | response.read() | | ( putheader() )* endheaders() v v Request-started Req-sent-unread-response | | response.read() v Request-sent This diagram presents the following rules: -- a second request may not be started until {response-headers-read} -- a response [object] cannot be retrieved until {request-sent} -- there is no differentiation between an unread response body and a partially read response body Note: this enforcement is applied by the HTTPConnection class. The HTTPResponse class does not enforce this state machine, which implies sophisticated clients may accelerate the request/response pipeline. Caution should be taken, though: accelerating the states beyond the above pattern may imply knowledge of the server's connection-close behavior for certain requests. For example, it is impossible to tell whether the server will close the connection UNTIL the response headers have been read; this means that further requests cannot be placed into the pipeline until it is known that the server will NOT be closing the connection. Logical State __state __response ------------- ------- ---------- Idle _CS_IDLE None Request-started _CS_REQ_STARTED None Request-sent _CS_REQ_SENT None Unread-response _CS_IDLE Req-started-unread-response _CS_REQ_STARTED Req-sent-unread-response _CS_REQ_SENT N(surlsplit(sStringIOtHTTPt HTTPResponsetHTTPConnectiontHTTPSConnectiont HTTPExceptiont NotConnectedtUnknownProtocoltUnknownTransferEncodingtUnimplementedFileModetIncompleteReadt InvalidURLtImproperConnectionStatetCannotSendRequesttCannotSendHeadertResponseNotReadyt BadStatusLineterroriPitUNKNOWNtIdlesRequest-starteds Request-sentidieifiiiiiiiiii,i-i.i/i0i1i3iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiit HTTPMessagecBs#tZdZdZdZRS(NcCsV|ii|}|djo||i|R@RARB((Rt__init__s          cCsv|ii}|idjodGt|GHn|pt|ny|idd\}}}WnQt j oEy"|idd\}}d}Wqt j o d}qXnX|i dpA|io|it|q t||i|_d Sny:t|}|d jp |d jot|nWnt j ot|nX|||fS( Nisreply:iiR!sHTTP/sHTTP/0.9iidi(sHTTP/0.9iR!(RR,R0R1R@treprRtsplitRRFR&RGt ValueErrorR2RAtclosetLineAndFileWrappertint(RR&RGRFR1((Rt _read_status$s4    cCs|idj odSnxtox|i\}}}|tjoPnxJtoB|i i i }|pPn|i djo dG|GHqLqLWqW||_|i |_|djo d|_nD|ido d|_n'|djo d|_n t||idjo5d|_d|_d |_tt|_dSnt|i d|_|i djo#x |iiD]}dG|GqWnd|i_ |iid }|o)|id jod |_d|_n d|_|i|_|iid }|oA|i o6yt||_Wqftj od|_qfXn d|_|tjp;|tjp.d |jo djnp|i djo d|_n|i o(|i o|idjo d |_ndS(Nisheader:sHTTP/1.0i sHTTP/1.i sHTTP/0.9i istransfer-encodingRHscontent-lengthiditHEAD(!RRDRR.RSRFR&RGtCONTINUER,R0R4tskipR@R2RRJRHRKRtStringIOR$thdrt getheaderttr_enctlowerRIt _check_closeRRROt NO_CONTENTt NOT_MODIFIEDRC(RR&RXRVRJRGRFRZ((RtbeginIsh                 H &cCs|iid}|idjo<|iid}|od|ijotSntSn|iidotSn|od|ijotSn|iid}|od|ijotSntS(Nt connectioni RPs keep-alivesproxy-connection( RRDRYtconnRFR[R.tFalsetpconn(RRaRc((RR\scCs(|io|iid|_ndS(N(RR,RPR(R((RRPs  cCs |idjS(N(RR,R(R((RtisclosedscCs|idjodSn|io|i|Sn|djoP|idjo|ii}n|i |i}d|_|i |Sn|idj o!||ijo |i}qn|ii|}|idj o|it |8_n|S(NR!i( RR,RRHt _read_chunkedtamtRJtreadtst _safe_readRPR8(RRfRh((RRgs$    cCs|itjpt|i}d}x>to6|djo^|ii }|i d}|djo|| }nt |d}|djoPqn|djo||i|7}n||jo(||i|7}|||_|Sn\||jo1||i|7}|idd|_|Sn||i|7}||8}|idd}q)Wx-to%|ii }|djoPqjqjW|i|S(NR!t;iiis (RRHREtAssertionErrorRIRR.RR,R0R1tfindtiRRRfRiRP(RRfRmRIRR1((RResF                 cCswg}xa|djoS|iit|t}|pt|n|i ||t |8}q Wdi |S(sVRead the number of bytes requested, compensating for partial reads. Normally, we have a blocking socket, but a read() can be interrupted by a signal (resulting in a partial read). Note that we cannot distinguish between EOF and an interrupt when zero bytes have been read. IncompleteRead() will be raised in this situation. This function should be used when bytes "should" be present for reading. If the bytes are truly not available (due to EOF), then the IncompleteRead exception can be used to detect the problem. iR!N( RhRfRR,Rgtmint MAXAMOUNTtchunkR R3R8R(RRfRpRh((RRis   cCs0|idjo tn|ii||S(N(RRDRRRYtnametdefault(RRqRr((RRY,s cCs*|idjo tn|iiS(s&Return list of (header, value) tuples.N(RRDRRtitems(R((Rt getheaders1s (R;R<RRLRSR_R\RPRdRgReRiRYRt(((RRs  % P    /  cBstZdZdZeZeZdZdZ dZ dddZ dZ dZdZd Zd Zd Zd Zddd ZdZdZdhdZdZdZRS(Ni sHTTP/1.1iicCs[d|_g|_d|_t|_d|_|i|||dj o ||_ ndS(N( RRR>t_buffert_HTTPConnection__responset_CS_IDLEt_HTTPConnection__stateRCt _set_hostportthosttportRA(RRzR{RA((RRLCs      cCs|djo|id}|id}||joTyt||d}Wn+tj otd||dnX|| }n |i }|o3|ddjo"|ddjo|dd!}qn||_||_dS(Nt:t]isnonnumeric port: '%s'it[i( R{RRztrfindRmtjRRROR Rt default_port(RRzR{RmR((RRyNs   ) cCs ||_dS(N(tlevelRR@(RR((Rtset_debuglevel_scCs&d}xti|i|idtiD]}|\}}}}}yUti||||_ |idjod|i|ifGHn|i i|Wnhtij oY}|idjodG|i|ifGHn|i o|i ind|_ q(nXPq(W|i pti|ndS(s3Connect to the host and port specified in __init__.s!getaddrinfo returns an empty listisconnect: (%s, %s)s connect fail:N(RDtsockett getaddrinfoRRzR{t SOCK_STREAMtrestaftsocktypetprotot canonnametsaR>R@tconnectRRPR(RRRRRRRDR((RRbs*    cCsU|io|iid|_n|io|iid|_nt|_dS(s(Close the connection to the HTTP server.N(RR>RPRRvRwRx(R((RRPxs      cCs|idjo%|io|iq5tn|idjodGt|GHny|ii |Wn:t i j o+}|ddjo|i nnXdS(sSend `str' to the server.issend:i N(RR>Rt auto_openRRR@RMtstrtsendallRRtvRP(RRR((Rtsends  cCs|ii|dS(suAdd a line of output to the current request buffer. Assumes that the line does *not* end with \r\n. N(RRuR3Rh(RRh((Rt_outputscCs:|iiddi|i}|i2|i|dS(spSend the currently buffered request and clear the buffer. Appends an extra \r\n to the buffer. R!s N(R!R!(RRutextendRRDR(RRD((Rt _send_outputs cCsz|io|iio d |_n|itjo t|_n t||_ |p d}nd|||i f}|i ||idjo|pd}|idot|\}}}}}n|o|id|idqW|itjo |id|iidqW|idd|iid|ifn|p|id d qvnd S( s`Send a request to the server. `method' specifies an HTTP request method, e.g. 'GET'. `url' specifies the object being requested, e.g. '/index.html'. `skip_host' if True does not add automatically a 'Host:' header `skip_accept_encoding' if True does not add automatically an 'Accept-Encoding:' header t/s%s %s %si R!thttptHosttidnas%s:%ssAccept-EncodingtidentityN(RRvRdRRxRwt_CS_REQ_STARTEDR RBRCturlt _http_vsn_strRRt _http_vsnt skip_hosttnetlocR2turlsplittnilt putheadertencodeR{t HTTP_PORTRztskip_accept_encoding(RRBRRRRRR((Rt putrequests.       - cCs>|itjo tnd||f}|i|dS(skSend a request header line to the server. For example: h.putheader('Accept', 'text/html') s%s: %sN(RRxRR theaderRRR(RRRR((RR s  cCs4|itjo t|_n t|idS(s?Indicate that the last header line has been sent to the server.N(RRxRt _CS_REQ_SENTR R(R((Rt endheaderss   cCsry|i||||WnQtij oB}|ddjp |i on|i||||nXdS(s&Send a complete request to the server.ii N( Rt _send_requestRBRtbodyR$RRRR(RRBRRR$R((Rtrequest sc Cstig}|D]} || iq~}h}d|jod|dRARCtresponseR_RKRERkRwRP(RR((Rt getresponse@s$       (R;R<RRRRRRRR@RARRLRyRRRPRRRRRRRRR(((RR8s*      b  t SharedSocketcBs,tZdZdZdZdZRS(NcCs||_d|_dS(Ni(R>Rt_refcnt(RR>((RRLs cCs|id7_dS(Ni(RR(R((RtincrefscCsK|id8_|idjpt|idjo|iindS(Nii(RRRkR>RP(R((RtdecrefscCs|iidS(N(RR>RP(R((Rt__del__s(R;R<RLRRR(((RR}s   tSharedSocketClientcBstZdZdZRS(NcCs/d|_||_|ii|i|_dS(Ni(Rt_closedtsharedt_sharedRR>t_sock(RR((RRLs   cCs1|ip#|iid|_d|_ndS(Ni(RRRRR(R((RRPs   (R;R<RLRP(((RRs tSSLFilecBsetZdZdZedZdZedZdZddZ dZ d Z d Z RS( s(File-like object wrapping an SSL socket.i cCs<ti||||_d|_|p |ii |_ dS(NR!( RRLRR>tsslt_sslt_buftbufsizet __class__tBUFSIZEt_bufsize(RR>RR((RRLs  cCsd}xtoy|ii|i}Wntij oh}|dti jp|dti joq n|dti jp|dti joPnq ti j o@}|dtijoq n|dtijoPnq XPq W|S(NR!i(tbufR.RRRgRRtsslerrorterrtSSL_ERROR_WANT_READtSSL_ERROR_WANT_WRITEtSSL_ERROR_ZERO_RETURNt SSL_ERROR_EOFRterrnotEINTRtEBADF(RRR((Rt_reads&((cCs|ig}t|i}xZ|djp ||jo?|i}|djoPn|i ||t|7}qWdi |}|djod|_|Sn|||_|| SdS(NR!( RRtLR8tavailtsizeRRRhR3Rtall(RRRRRRh((RRgs       cCs|ig}d|_xU|did}|djoPn|i}|djoPn|i|qW|djodi|Sn>di|}|idd}|| }|||_|SdS(NR!iis i( RRRRlRmRRhR3RRR1(RRRmRRhR1((RR0s$        icCsmd}g}xZtoR|i}|pPn|i||t|7}|o||joPqqW|S(Ni( ttotaltlistR.RR0R1R3R8tsizehint(RRRR1R((Rt readliness   cCs |iiS(N(RRtfileno(R((RRscCs|S(N(R(R((Rt__iter__scCs!|i}|p tn|S(N(RR0R1t StopIteration(RR1((Rtnexts  ( R;R<t__doc__RRRLRRgR0RRRR(((RRs       t FakeSocketcBsctZdfdYZdZdZddZddZeZddd Z d Z RS( Nt _closedsocketcBstZdZRS(NcCstdddS(Ni sBad file descriptor(R(RRq((Rt __getattr__s(R;R<R(((RRscCs)t|}ti||||_dS(N(RR>RRLRRR(RR>R((RRLs cCs#ti||ii|_dS(N(RRPRRRR(R((RRP s cCs=|djo|djo tnt|i|i|S(NtrR=(tmodeRRRRRR(RRR((RR?s icCs|ii|S(N(RRtwritetstuff(RRtflags((RRsicCs|ii|S(N(RRRgR8(RR8R((RtrecvscCst|i|S(N(tgetattrRRtattr(RR((RRs( R;R<RRLRPRR?RRRR(((RRs    cBs2tZdZeZeeeedZdZRS(s(This class allows communication via SSL.cCs,ti||||||_||_dS(N(RRLRRzR{RAtkey_filet cert_file(RRzR{RRRA((RRL&s cCsbtititi}|i|i|ifti||i |i }t |||_dS(s(Connect to a host on a given (SSL) port.N( RtAF_INETRR>RRRzR{RRRR(RRR>((RR,s (R;R<Rt HTTPS_PORTRRRLR(((RR!s cBsttZdZdZdZdZeZdeedZ dZ eedZ dZ d Z d Zd ZRS( s-Compatibility class with httplib.py from 1.5.i sHTTP/1.0iR!cCs7|djo d}n|i|i|||dS(s:Provide a default host, since the superclass requires one.iN(R{RRt_setupt_connection_classRzRA(RRzR{RA((RRL?s  cCs^||_|i|_|i|_|i|_|i|_|i|_|i|_d|_ dS(N( RaRt_connRRRRRRRtfile(RRa((RRKs       cCs5|dj o|ii||n|iidS(sDAccept arguments to set the host/port, since the superclass doesn't.N(RzRRRRyR{R(RRzR{((RRYs cCs|iS(sCProvide a getfile, since the superclass' does not use this concept.N(RR(R((Rtgetfile`scGs |ii|di|dS(s.The superclass allows only one value argument.s N(RRRRRtvalues(RRR((RRdscCsy|ii}WnStj oG}|iiidd|_|i d|_ d|i dfSnX|i |_ |i|_|i|i|i fS(sCompat definition since superclass does not define it. Returns a tuple consisting of: - server status code (e.g. '200' if all goes well) - server "reason" corresponding to status code - any RFC822 headers in the response from the server R=iiN(RRRRRteR>R?RRPRR$R1RDR,R&RG(RRR((Rtgetreplyhs    cCs|iid|_dS(N(RRRPRR(R((RRPs (R;R<RRRR@RRRRLRRRRRRP(((RR5s     RtHTTPScBs,tZdZeZdeeeedZRS(sCompatibility with 1.5 httplib interface Python 1.5.2 did not have an HTTPS class, but it defined an interface for sending http requests that is also useful for https. R!cCsO|djo d}n|i|i|||||||_||_dS(Ni( R{RRRRRzRRRA(RRzR{RRRA((RRLs     (R;R<RRRRRL(((RRs cBstZRS(N(R;R<(((RRscBstZRS(N(R;R<(((RRscBstZRS(N(R;R<(((RR scBstZdZRS(NcCs|f|_||_dS(N(RFRtargs(RRF((RRLs (R;R<RL(((RRscBstZRS(N(R;R<(((RRscBstZRS(N(R;R<(((RRscBstZdZRS(NcCs|f|_||_dS(N(tpartialRR(RR((RRLs (R;R<RL(((RR scBstZRS(N(R;R<(((RR scBstZRS(N(R;R<(((RR scBstZRS(N(R;R<(((RR scBstZRS(N(R;R<(((RRscBstZdZRS(NcCs|f|_||_dS(N(R1RR(RR1((RRLs (R;R<RL(((RRsRQcBsJtZdZdZdZdZedZdZedZ RS(s2A limited file-like object for HTTP/0.9 responses.cCs7||_||_d|_d|_t||_dS(Ni( R1Rt_lineRt_filet_line_consumedt _line_offsetR8t _line_left(RR1R((RRLs     cCst|i|S(N(RRRR(RR((RRscCs:d|_|ii|_|ii|_|ii|_dS(Ni(RRRRgR0R(R((Rt_dones cCs"|io|ii|Sn|ipt|djp||ijo^|i|i }|i |djo||iiSq||ii|t |Snu||ijpt|i }||}|i||!}||_ |i|8_|idjo|i n|SdS(Ni(RRRRgRfRRkRRRRhRR8RmR(RRfRmRRh((RRgs$   "   cCsJ|io|iiSn|ipt|i|i}|i |S(N( RRRR0RRkRRRhR(RRh((RR0 s   cCs|io|ii|Sn|ipt|i|ig}|i |djo||iiSn||ii|SdS(N( RRRRRRRkRRRRR(RRR((RRs   ( R;R<RRLRRRRgR0R(((RRQs     cCsdk} dk}|i| idd\}}d}x/|D]'\}}|djo|d}q>q>Wd} d}|do|d} n|do|d}nt }|i ||i | |id||i|i\}}} d G|GHd G|GHd Gt|iiGHH| o#x | iD]}|iGHq8WnHd t fd Y} | d}|idd|i|i|ittdoxdD]\} }d| |fGHt} | i || i | | id|| i| i\}}} d G|GHd G|GHd Gt| iiGHH| o#x | iD]}|iGHqeWnHqWndS(sTest this module. A hodge podge of tests collected here, because they have too many external dependencies for the regular test suite. Nitdis-dswww.python.orgRtGETsstatus =sreason =RgtHTTP11cBstZdZdZRS(Ni sHTTP/1.1(R;R<RR(((RR<sshttp://www.python.org/~jeremy/Rssourceforge.nets/projects/pythons https://%s%s(ssourceforge.nets/projects/python((ssourceforge.nets/projects/python(tsystgetopttargvtoptsRtdltotaRztselectorRthRRRRRR&RGR$R8RRgRR4RRPR+RRths(R R&RRR RRGR R RR$RzRR RR((Rttestsn                         t__main__(_RRt mimetoolsRturlparseRt cStringIORWt ImportErrort__all__RRRERwRRRUtSWITCHING_PROTOCOLSt PROCESSINGtOKtCREATEDtACCEPTEDtNON_AUTHORITATIVE_INFORMATIONR]t RESET_CONTENTtPARTIAL_CONTENTt MULTI_STATUStIM_USEDtMULTIPLE_CHOICEStMOVED_PERMANENTLYtFOUNDt SEE_OTHERR^t USE_PROXYtTEMPORARY_REDIRECTt BAD_REQUESTt UNAUTHORIZEDtPAYMENT_REQUIREDt FORBIDDENt NOT_FOUNDtMETHOD_NOT_ALLOWEDtNOT_ACCEPTABLEtPROXY_AUTHENTICATION_REQUIREDtREQUEST_TIMEOUTtCONFLICTtGONEtLENGTH_REQUIREDtPRECONDITION_FAILEDtREQUEST_ENTITY_TOO_LARGEtREQUEST_URI_TOO_LONGtUNSUPPORTED_MEDIA_TYPEtREQUESTED_RANGE_NOT_SATISFIABLEtEXPECTATION_FAILEDtUNPROCESSABLE_ENTITYtLOCKEDtFAILED_DEPENDENCYtUPGRADE_REQUIREDtINTERNAL_SERVER_ERRORtNOT_IMPLEMENTEDt BAD_GATEWAYtSERVICE_UNAVAILABLEtGATEWAY_TIMEOUTtHTTP_VERSION_NOT_SUPPORTEDtINSUFFICIENT_STORAGEt NOT_EXTENDEDRotMessageRRRRRRRRRR+Rt ExceptionRRR RRRR R R R RRRRQRR;(WRRRERRR R>RRRR1RR+RRRRRRR<R RR=R0RRR6R#RR(RR%RRwRoR^R'RR4R3R8RRWR*R]RURRR2R/RRQR-RR@RRRRR RR:RR R5RRRARR R7R?R9RR.RR$R;RR RR!R)RBR&R"R,((Rt?Cs    9i1Fd YD = c @sdZdZdZdkZdkZdkZdkZdkZdkZdk Z dk Z dk Z dZ dZ dZdZdZd Zd Zd Zd Zd ZdZddZdZdZdZdZdZdZdZdZ dZ!dZ"hZ#dZ$dZ%dZ&de'fdYZ(dfd YZ)d!Z*d"Z+d#Z,d$Z-d%d&Z.d>\Z/Z0Z1Z2d+Z3d,Z4d-Z5d.Z6e6d/Z7ddde8d0d1d2e6d3Z9e8d4d5d6e6d7Z:d'd8Z;d9Z<d'd:Z=d'd;Z>ei?Z@d'd<ZAd'd=ZBdS(?suGet useful information from live Python objects. This module encapsulates the interface provided by the internal special attributes (func_*, co_*, im_*, tb_*, etc.) in a friendlier fashion. It also provides some help for examining source code and class layout. Here are some of the useful functions provided by this module: ismodule(), isclass(), ismethod(), isfunction(), istraceback(), isframe(), iscode(), isbuiltin(), isroutine() - check object types getmembers() - get members of an object that satisfy a given condition getfile(), getsourcefile(), getsource() - find an object's source code getdoc(), getcomments() - get documentation on an object getmodule() - determine the module that an object came from getclasstree() - arrange classes so as to represent their hierarchy getargspec(), getargvalues() - get info about function arguments formatargspec(), formatargvalues() - format an argument spec getouterframes(), getinnerframes() - get info about frames currentframe() - get the current stack frame stack(), trace() - get info about frames on the stack or in a traceback sKa-Ping Yee s 1 Jan 2001NcCst|tiS(sReturn true if the object is a module. Module objects provide these attributes: __doc__ documentation string __file__ filename (missing for built-in modules)N(t isinstancetobjectttypest ModuleType(R((t/usr/lib/python2.4/inspect.pytismodule"scCs t|tip t|dS(sReturn true if the object is a class. Class objects provide these attributes: __doc__ documentation string __module__ name of module in which this class was definedt __bases__N(RRRt ClassTypethasattr(R((Rtisclass*scCst|tiS(sReturn true if the object is an instance method. Instance method objects provide these attributes: __doc__ documentation string __name__ name with which this method was defined im_class class object in which this method belongs im_func function object containing implementation of method im_self instance to which this method is bound, or NoneN(RRRt MethodType(R((Rtismethod2scCsHt|do8t|d o't| ot| o t| S(sReturn true if the object is a method descriptor. But not if ismethod() or isclass() or isfunction() are true. This is new in Python 2.2, and, for example, is true of int.__add__. An object passing this test has a __get__ attribute but not a __set__ attribute, but beyond that the set of attributes varies. __name__ is usually sensible, and __doc__ often is. Methods implemented via descriptors that also pass one of the other tests return false from the ismethoddescriptor() test, simply because the other tests promise more -- you can, e.g., count on having the im_func attribute (etc) when an object passes ismethod().t__get__t__set__N(RRR t isfunctionR (R((Rtismethoddescriptor=s cCst|do t|dS(sReturn true if the object is a data descriptor. Data descriptors have both a __get__ and a __set__ attribute. Examples are properties (defined in Python) and getsets and members (defined in C). Typically, data descriptors will also have __name__ and __doc__ attributes (properties, getsets, and members have both of these attributes), but this is not guaranteed.R R N(RR(R((RtisdatadescriptorQscCst|tiS(sReturn true if the object is a user-defined function. Function objects provide these attributes: __doc__ documentation string __name__ name with which this function was defined func_code code object containing compiled function bytecode func_defaults tuple of any default values for arguments func_doc (same as __doc__) func_globals global namespace in which this function was defined func_name (same as __name__)N(RRRt FunctionType(R((RR[s cCst|tiS(sbReturn true if the object is a traceback. Traceback objects provide these attributes: tb_frame frame object at this level tb_lasti index of last attempted instruction in bytecode tb_lineno current line number in Python source code tb_next next inner traceback object (called by this level)N(RRRt TracebackType(R((Rt istracebackhscCst|tiS(s|Return true if the object is a frame object. Frame objects provide these attributes: f_back next outer frame object (this frame's caller) f_builtins built-in namespace seen by this frame f_code code object being executed in this frame f_exc_traceback traceback if raised in this frame, or None f_exc_type exception type if raised in this frame, or None f_exc_value exception value if raised in this frame, or None f_globals global namespace seen by this frame f_lasti index of last attempted instruction in bytecode f_lineno current line number in Python source code f_locals local namespace seen by this frame f_restricted 0 or 1 if frame is in restricted execution mode f_trace tracing function for this frame, or NoneN(RRRt FrameType(R((RtisframerscCst|tiS(suReturn true if the object is a code object. Code objects provide these attributes: co_argcount number of arguments (not including * or ** args) co_code string of raw compiled bytecode co_consts tuple of constants used in the bytecode co_filename name of file in which this code object was created co_firstlineno number of first line in Python source code co_flags bitmap: 1=optimized | 2=newlocals | 4=*arg | 8=**arg co_lnotab encoded mapping of line numbers to bytecode indices co_name name with which this code object was defined co_names tuple of names of local variables co_nlocals number of local variables co_stacksize virtual machine stack space required co_varnames tuple of names of arguments and local variablesN(RRRtCodeType(R((RtiscodescCst|tiS(s,Return true if the object is a built-in function or method. Built-in functions and methods provide these attributes: __doc__ documentation string __name__ original name of this function or method __self__ instance to which a method is bound, or NoneN(RRRtBuiltinFunctionType(R((Rt isbuiltinscCs1t|p$t|pt|p t|S(s<Return true if the object is any kind of function or method.N(RRRR R(R((Rt isroutinescCsfg}xOt|D]A}t||}| p ||o|i||fqqW|i|S(sReturn all members of an object as (name, value) pairs sorted by name. Optionally, only return members that satisfy a given predicate.N( tresultstdirRtkeytgetattrtvaluet predicatetappendtsort(RR RRR((Rt getmemberss  c Cst|}t|} g}x[| D]S}||ijo|i|}nt ||}t |dd}|djo0x-|D]!}||ijo |}PqqWn|dj o!||ijo|i|}nt ||}t|to d}n_t|to d}nEt|to d}n+t|p t|o d}nd}|i||||fq%W|S(sReturn list of attribute-descriptor tuples. For each name in dir(cls), the return list contains a 4-tuple with these elements: 0. The name (a string). 1. The kind of attribute this is, one of these strings: 'class method' created via classmethod() 'static method' created via staticmethod() 'property' created via property() 'method' any other flavor of method 'data' not a method 2. The class which defined this attribute (a class). 3. The object as obtained directly from the defining class's __dict__, not via getattr. This is especially important for data attributes: C.data is just a data object, but C.__dict__['data'] may be a data descriptor with additional info, like a __doc__ string. t __objclass__s static methods class methodtpropertytmethodtdataN(tgetmrotclstmroRtnamestresulttnamet__dict__tobjRtNonethomeclstbasetobj_via_getattrRt staticmethodtkindt classmethodR%R RR!( R)R/R-R5R*R,R2R3R1R+((Rtclassify_class_attrss<        cCsG||jodSn|i|x|iD]}t||q,WdS(N(R)taccumR!RR2t _searchbases(R)R8R2((RR9s    cCs<t|do |iSng}t||t|SdS(sHReturn tuple of base classes (including cls) in method resolution order.t__mro__N(RR)R:R,R9ttuple(R)R,((RR(s   cCs,ti|}t|tti|S(sBReturn the indent size, in spaces, at the start of a line of text.N(tstringt expandtabstlinetexplinetlentlstrip(R>R?((Rt indentsize scCsy |i}Wntj o dSnXt|tipdSnyti ti |d}Wnt j o dSn!Xt i}xQ|dD]E}tti|}|o#t||}t||}qqW|o|di|dR@RAtcontenttindenttmintrangetitpoptjoin(RRMRNRQRDRHRLR>((Rtgetdocs>     cCst|o+t|do |iSntdnt|o@tii|i }t|do |iSntdnt |o |i }nt |o |i }nt|o |i}nt|o |i}nt|o |iSntddS(s@Work out which source or compiled file an object was defined in.t__file__sarg is a built-in modulesarg is a built-in classsNarg is not a module, class, method, function, traceback, frame, or code objectN(RRRRUt TypeErrorR RJtmodulestgett __module__R tim_funcRt func_codeRttb_frameRtf_codeRt co_filename(R((Rtgetfile3s*              cCs~tii|}tdti}|ixC|D];\}}}}|||jo|| |||fSq;q;WdS(sDGet the module name, suffix, mode, and module type for a given file.cCs&|\}}}t| |||fS(N(tsuffixtmodetmtypeR@(t.0R`RaRb((RtNsN( tostpathtbasenametfilenametmaptimpt get_suffixestsuffixesR"tneglenR`RaRb(RfR`RmRhRbRaRl((Rt getmoduleinfoKs  cCs#t|}|o |dSndS(s1Return the module name for a given file, or None.iN(RnRftinfo(RfRo((Rt getmodulenameUs cCst|}ti|dddgjo|d d}nxStiD]E\}}}d|jo)ti|t | |jodSqKqKWt i i|o|SndS(sEReturn the Python source file an object was defined in, if it exists.is.pycs.pyos.pytbN(R_RRhR<tlowerRjRkR`RaR5R@R0ReRftexists(RR5R`RhRa((Rt getsourcefileZs   . cCs/tiitiit|p t|S(sReturn an absolute path to the source or compiled file for an object. The idea is for each object to have a unique origin, so this routine normalizes the result as much as possible.N(ReRftnormcasetabspathRtRR_(R((Rt getabsfilefscCst|o|Snt|dotii|iSnyt|}Wnt j o dSnX|t jotiit |SnxJtii D]9}t|do#|it tiit|RRRR((Rt tokeneaters,           )(RyRYRCRR(((RRs  cCsPt}y tit|i|iWnttfj onX||i S(s@Extract the block of code at the top of the given list of lines.N( Rt blockfinderRtiterRHtnextRRtIndentationErrorR(RHR((Rtgetblocks  cCsIt|\}}t|o|dfSnt|||dfSdS(sReturn a list of source lines and starting line number for an object. The argument may be a module, class, method, function, traceback, frame, or code object. The source code is returned as a list of the lines corresponding to the object and the line number indicates where in the original source file the first line of code was found. An IOError is raised if the source code cannot be retrieved.iiN(RRRHRRR(RRRH((Rtgetsourceliness  cCs"t|\}}ti|dS(sReturn the text of the source code for an object. The argument may be a module, class, method, function, traceback, frame, or code object. The source code is returned as a single string. An IOError is raised if the source code cannot be retrieved.RN(RRRHRR<RS(RRRH((Rt getsource&scCsrg}|iddxR|D]J}|i||if||jo!|it||||q q W|S(s-Recursive helper function for getclasstree().RcCs|i|ifS(N(tcRYRy(R((RRd3sN(RtclassesR"RR!Rtchildrentwalktree(RRtparentRR((RR0s %icCsh}g}x|D]}|io]xx|iD]K}||jog||RRRRR RBRpRR_RRRRwRRnRRRRRRRRjRRRRRRRRRRR<R R R#RRRJRR9RR(RRRRTRRR7RRRR|RRRRtR ReR((Rt?sfQ       G   $    * -'  ;   *! !   c@sadZdkZdkZdddgZdZhadZdZddZ d Z dS( sCache lines from files. This is intended to read lines from modules imported -- hence if a filename is not found, it will look down the module search path for a file by that name. Ntgetlinet clearcachet checkcachecCsHt|}d|jot|jno||dSndSdS(Nit(tgetlinestfilenametlinestlinenotlen(RRR((t/usr/lib/python2.4/linecache.pyR s $cCs hadS(sClear the cache entirely.N(tcache(((R RscCs+|tjot|dSn t|SdS(ssGet the lines for a file from the cache. Update the cache if it doesn't contain an entry for this file already.iN(RR t updatecache(R((R R!s cCs|djoti}n|tjo |g}ndSx|D]}}t|\}}}}yt i |}Wn t i j ot|=qBnX||i jp||i jo t|=qBqBWdS(sUDiscard cache entries that are out of date. (This is not checked upon each call!)N(RtNoneR tkeyst filenamestsizetmtimeRtfullnametoststatterrortst_sizetst_mtime(RRRRRRR((R R+s     c Csw|tjo t|=n| p|d|ddjogSn|}yti|}Wntij o}tii|d}x|t iD]h}ytii ||}Wnt tfj oqXyti|}PWqtij oqXqWgSnXy)t|d}|i}|iWntj o }gSnX|i|i} }| |||ft|<|S(sUpdate a cache entry and return its list of lines. If something's wrong, print a message, discard the cache entry, and return an empty list.iis<>itrUN(RR RRRRtmsgtpathtsplittbasenametsystdirnametjoint TypeErrortAttributeErrortopentfpt readlinesRtclosetIOErrorRRRR( RR"RRRRRRRR((R R Bs>  !     ( t__doc__RRt__all__RR RRR RR (R RR'RRRRR((R t?s     c@s#dZdkZdddddddd d d d d ddddgZy dkTWnpej oddZdZdZdZdZ dZ dZ dZ e ZdZedZdZdZnXdZdd Zd!Zed"Zd#Zd$ZeZd%Zd&Zd'Zdd d(d)fd*Zed+Z ed,Zed-Z!ei"d.d/d0fjoe#d1Z$n7ye%Wne&j oe#d2Z$nXe#d3Z$hd4d5<d6d5<d7d8<d9d8<d:d8<d;d8<d<d8<d=d8<d>d8<d?d@<dAd@<dBd@<dCdD<dEdD<dFdD<dGdH<dIdJ<dKdL<dMdN<dOdP<dQdR<dSdR<dTdR<dUdV<dWdX<dYdZ<d[dZ<d\dZ<d]d^<d_d^<d`d^d=<d?d=<d@dA<d<dm<dBdm<dCdD<dEdD<dFdG<dHdI<dJdK<dLdK<dMdN<dOdN<dPdQ<dRdQ<dSdQ<dTdU<dVdW<dXdW<dYdZ<d[dZ<d\d]<d^d]<d_d`<dad]<dbdc<ddde<dfde<dgdh<didh<djdk<dldk<dmdQ<dndm<dodm<dpdq<drdm<dsdq<dtdq<dudv<dwdv<dxdv<dydz<d{d|<d}d|<d~dQ<ddQ<dd<dd<ddQ<ddQ<ddm<dd5<ddm<ddm<ddm<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd;<dd<dd<dd;<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d<d d<d d <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d<d!d<d"d#<d$d<d%d<d&d<d'd(<d)d(<d*d+<d,d(<d-d.<d/d.<d0d.<d1d2<d3d2<d4d5<d6d2<d7d<d8d<d9d<d:d<d;d<d<d<d=d<d>d?<d@d?<dAd?<dBdC<dDdE<dFdE<dGdH<dIdE<dJdK<dLdK<dMdN<dOdN<dPdN<dQdR<dSdT<dUd<dVd<dWd<dXd<dYd<dZd<d[dK<d\dK<d]dK<d^d_<d`d_<dadb<dcd_<ddd=<ded=<dfdg<dhdg<didg<djdk<dldm<dndo<dpdo<dqdr<dsdo<dtdr<dudv<dwdv<dxdy<dzdy<d{dy<d|d<d}d<d~d<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddm<ddq<ddm<ddq<ddm<ddq<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<ddo<ddo<ddo<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <d d <dd <dd <dd<dd<dd<dd<dd<dd3<dd5<dd5<dd5<dd<dd<dd<dd<d d3<d!d3<d"d3<d#d$<d%d$<d&d'<d(d$<d)d*<d+d*<d,d*<d-d*<d.d/<d0d1<d2d3<d4d1<d5d1<d6d1<d7d8<d9d1<d:d1<d;d<<d=d<<d>d<<d?d@<dAd@<dBd@<dCd3<dDd3<dEd3<dFd3<dGdH<dId*<dJdK<dLdK<dMdK<dNdO<dPdO<dQdR<dSdT<dUdT<dVdW<dXdR<dYdR<dZd[<d\d]<d^d]<d_d]<d`da<dbda<dcda<ddda<dedf<dgdf<dhdi<djdi<dkd5<dld5<dmdn<dodn<dpdn<dqdf<drdi<dsdi<dtdi<dudv<dwdf<dxdf<dydf<dzd{<d|d{<d}d~<dd{<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd <d d <d d <d d <dd <dd<dd <dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<d d!<d"d#<d$d#<d%d#<d&d#<d'd(<d)d(<d*d+<d,d(<d-d(<d.d/<d0d/<d1d2<d3d2<d4d2<d5d2<d6d7<d8d7<d9d:<d;d:<d<d:<d=d><d?d><d@d><dAdB<dCdB<dDdB<dEdF<dGdF<dHdF<dIdF<dJd<dKdL<dMdN<dOd<dPdQ<dRdL<dSdT<dUdV<dWdX<dYdV<dZdN<d[dN<d\d<d]d<d^d_<d`d_<dad_d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdg<dhdi<djdk<dldm<dndo<dpdm<dqdo<drds<dtdu<dvdw<dxdy<dzd{<d|d}<d~d{<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd dict. Returns numeric and monetary locale-specific parameters. tgroupingitcurrency_symboltt n_sign_posnt p_cs_precedest n_cs_precedest mon_groupingtn_sep_by_spacet decimal_pointt.t negative_signt positive_signtp_sep_by_spacetint_curr_symbolt p_sign_posnt thousands_septmon_thousands_sept frac_digitstmon_decimal_pointtint_frac_digitsN((((t/usr/lib/python2.4/locale.pyR,scCs|djo tdndS(sd setlocale(integer,string=None) -> string. Activates/queries locale processing. RtCs*_locale emulation only supports "C" localeN(NRR&(tvaluetNoneR(tcategoryR'((R%RDs  cCs t||S(sb strcoll(string,string) -> int. Compares two strings according to the locale. N(tcmptatb(R+R,((R%RLscCs|S(sd strxfrm(string) -> string. Returns a string that behaves for cmp locale-aware. N(ts(R-((R%RRscCst}|d}|p|dfSnd}d}d}|ddjo'|id}||}|| }nx|o|o|dt joPn*|ddjo|d}|d}n|o%|| |d|}|d7}n || }|| }|o'|ddjo||||fSququW|p|||fSn|o ||d|}|d7}n|||fS( NRiRit iR t 0123456789( RtconvRR-tresulttsepstspacestfindtspRtgroup(R-R6R0R5R3R1R2R((R%t_group]s>      cCs||}|id}d}|ot|d\|d<}nt|djo!|dt d|d}n+t|djo|d}n t dxM|oE|i d}|djoPn|| ||d}|d8}qW|S( sFormats a value in the same way that the % formatting would use, but takes the current locale into account. Grouping is applied if the third parameter is true.RiiRis(Too many decimal points in result stringR.iN( tftvalR1tsplittfieldsR2RR7tlenRRR4R5(R8R9RR;R5R1R2((R%Rs& !  cCs td|S(s9Convert float to integer, taking the locale into account.s%.12gN(RR9(R9((R%RscCs^td}|o|i|d}ntd}|o|i|d}n||S(s<Parses a string as a float according to the locale settings.R RRRN(Rttststringtreplacetddtfunc(R>RAR@R=((R%Rs  cCs t|tS(sAConverts a string to an integer according to the locale settings.N(RRtint(R((R%RscCsUttdtddd}|GdGt|GHtd}|GdGt|GHdS(NRs%di[itisf3.1400000000000001(RRRts1RRR(RD((R%t_tests   cCs5|i}d|jo|idd}nd|jo+|idd \}}|d|}n |}d}ti|d}|dj o|Snti|d}|dj otd|jo|id\}}n |}d}|ot i||}n|}|o|d|Sq1|Sn|SdS(s Returns a normalized locale code for the given locale name. The returned locale code is formatted for use with setlocale(). If normalization fails, the original name is returned unchanged. If the given encoding is not known, the function defaults to the default encoding for the locale code just like setlocale() does. t:RiRN( t localenametlowertfullnameR?R:tlangnametencodingt locale_aliastgetR(tcodetdefenctencoding_alias(RGRNRJRKRORI((R%t normalizes2      cCst|}d|joA|id\}}|djod|jo|dfSqZnd|jot|idd Sn|djod Sntd|dS( s Parses the locale code for localename and returns the result as tuple (language code, encoding). The localename is normalized and passed through the locale alias engine. A ValueError is raised in case the locale name cannot be parsed. The language code corresponds to RFC 1766. code and encoding can be None in case the values cannot be determined or are unknown to this implementation. t@teuroRs iso-8859-15iR&sunknown locale: %sN(NN(RQRGRNR:tmodifierttupleR(t ValueError(RGRNRT((R%t_parse_localenames     cCsH|\}}|djo d}n|djo|Sn |d|SdS(s Builds a locale code from the given tuple (language code, encoding). No aliasing or normalizing takes place. R&RN(t localetupletlanguageRKR((RXRKRY((R%t_build_localenames    tLANGtLANGUAGEcCsydk}|i\}}Wnttfj onPXtidjo4|o-|d djoti t |d}n||fSdk }|i i }xS|D]E}||d}|o)|djo|idd}nPqqWd}t|S( s Tries to determine the default locale settings and returns them as tuple (language code, encoding). According to POSIX, a program which has not called setlocale(LC_ALL, "") runs using the portable 'C' locale. Calling setlocale(LC_ALL, "") lets it use the default locale as defined by the LANG variable. Since we don't want to interfere with the current locale setting we thus emulate the behavior in the way described above. To maintain compatibility with other platforms, not only the LANG variable is tested, but a list of variables given as envvars parameter. The first found to be defined will be used. envvars defaults to the search path used in GNU gettext; it must always contain the variable name 'LANG'. Except for the code 'C', the language code corresponds to RFC 1766. code and encoding can be None in case the values cannot be determined. Ntwin32it0xiR\RFR&(t_localet_getdefaultlocaleRNRKt ImportErrortAttributeErrortsystplatformtwindows_localeRMRBtostenvirontlookuptenvvarstvariableR(RGR:RW(RiR_RNRKRfRhRjRG((R%tgetdefaultlocale(s( (     cCs=t|}|tjod|jo tdnt|S(sp Returns the current setting for the given locale category as tuple (language code, encoding). category may be one of the LC_* value except LC_ALL. It defaults to LC_CTYPE. Except for the code 'C', the language code corresponds to RFC 1766. code and encoding can be None in case the values cannot be determined. t;s category LC_ALL is not supportedN(t _setlocaleR)RGRt TypeErrorRW(R)RG((R%t getlocale]s   cCsC|o/t|tdj ott|}nt||S(sE Set the locale for the given category. The locale can be a string, a locale tuple (language code, encoding), or None. Locale tuples are converted to strings the locale aliasing engine. Locale strings are passed directly to the C lib. category may be given as one of the LC_* values. RN(tlocalettypeRQRZRmR)(R)Rp((R%Ros  cCst|ttdS(s Sets the locale for category to the default setting. The default setting is determined by calling getdefaultlocale(). category defaults to LC_ALL. N(RmR)RZRk(R)((R%t resetlocalesR]tdarwintmaccCsdk}|idS(s1Return the charset that the user is likely using.Ni(R_R`(t do_setlocaleR_((R%tgetpreferredencodings cCs tdS(sbReturn the charset that the user is likely using, by looking at environment variables.iN(Rk(Ru((R%RvscCsO|o:tt}ttdtt}tt||Sn ttSdS(sdReturn the charset that the user is likely using, according to the system configuration.RN(RuRR toldloct nl_langinfotCODESETR1(RuRwR1((R%Rvs    t437R&tctiso8859s ISO8859-1t8859t88591tasciitentiso88591s iso_8859-1t885915s ISO8859-15t iso885915s iso_8859-15s iso8859-2s ISO8859-2tiso88592s iso_8859-2tiso88595s ISO8859-5tiso88596s ISO8859-6tiso88597s ISO8859-7tiso88598s ISO8859-8tiso88599s ISO8859-9s iso-2022-jptJIS7tjistjis7tsjistSJISttis620tTACTIStajecteucJPteucjptujistutfsutf-8tutf8s utf8@ucs4ta3s a3_AZ.KOI8-Cta3_azs a3_az.koi8ctafsaf_ZA.ISO8859-1taf_zasaf_za.iso88591tams am_ET.UTF-8tam_ettamericansen_US.ISO8859-1samerican.iso88591tarsar_AA.ISO8859-6tar_aasar_aa.iso88596tar_aesar_AE.ISO8859-6sar_ae.iso88596tar_bhsar_BH.ISO8859-6sar_bh.iso88596tar_dzsar_DZ.ISO8859-6sar_dz.iso88596tar_egsar_EG.ISO8859-6sar_eg.iso88596tar_iqsar_IQ.ISO8859-6sar_iq.iso88596tar_josar_JO.ISO8859-6sar_jo.iso88596tar_kwsar_KW.ISO8859-6sar_kw.iso88596tar_lbsar_LB.ISO8859-6sar_lb.iso88596tar_lysar_LY.ISO8859-6sar_ly.iso88596tar_masar_MA.ISO8859-6sar_ma.iso88596tar_omsar_OM.ISO8859-6sar_om.iso88596tar_qasar_QA.ISO8859-6sar_qa.iso88596tar_sasar_SA.ISO8859-6sar_sa.iso88596tar_sdsar_SD.ISO8859-6sar_sd.iso88596tar_sysar_SY.ISO8859-6sar_sy.iso88596tar_tnsar_TN.ISO8859-6sar_tn.iso88596tar_yesar_YE.ISO8859-6sar_ye.iso88596tarabicsarabic.iso88596tazsaz_AZ.ISO8859-9Etaz_azsaz_az.iso88599etbes be_BY.CP1251tbe_bys be_by.cp1251sbe_by.microsoftcp1251tbgs bg_BG.CP1251tbg_bgs bg_bg.cp1251sbg_bg.iso88595sbg_BG.ISO8859-5s bg_bg.koi8rs bg_BG.KOI8-Rsbg_bg.microsoftcp1251tbokmalsnb_NO.ISO8859-1sbokmltbrsbr_FR.ISO8859-1tbr_frsbr_fr.iso88591sbr_fr.iso885914sbr_FR.ISO8859-14sbr_fr.iso885915sbr_FR.ISO8859-15sbr_fr.iso885915@eurosbr_fr.utf8@euros br_FR.UTF-8s br_fr@eurotbssbs_BA.ISO8859-2tbs_basbs_ba.iso88592t bulgariansc-frenchsfr_CA.ISO8859-1sc-french.iso88591sc.ens c.iso88591tc_csc_c.ctcasca_ES.ISO8859-1tca_essca_es.iso88591sca_es.iso885915sca_ES.ISO8859-15sca_es.iso885915@eurosca_es.utf8@euros ca_ES.UTF-8s ca_es@eurotcatalantcextends cextend.ens chinese-ss zh_CN.eucCNs chinese-ts zh_TW.eucTWtcroatianshr_HR.ISO8859-2tcsscs_CZ.ISO8859-2tcs_csscs_cs.iso88592tcs_czscs_cz.iso88592tcyscy_GB.ISO8859-1tcy_gbscy_gb.iso88591scy_gb.iso885914scy_GB.ISO8859-14scy_gb.iso885915scy_GB.ISO8859-15tcztcz_cztczechtdasda_DK.ISO8859-1tda_dks da_dk.88591s da_dk.885915sda_DK.ISO8859-15sda_dk.iso88591sda_dk.iso885915tdanishsdanish.iso88591tdansktdesde_DE.ISO8859-1tde_atsde_AT.ISO8859-1sde_at.iso88591sde_at.iso885915sde_AT.ISO8859-15sde_at.iso885915@eurosde_at.utf8@euros de_AT.UTF-8s de_at@eurotde_besde_BE.ISO8859-1sde_be.iso88591sde_be.iso885915sde_BE.ISO8859-15sde_be.iso885915@eurosde_be.utf8@euros de_BE.UTF-8s de_be@eurotde_chsde_CH.ISO8859-1sde_ch.iso88591sde_ch.iso885915sde_CH.ISO8859-15tde_des de_de.88591s de_de.885915sde_DE.ISO8859-15sde_de.885915@eurosde_de.iso88591sde_de.iso885915sde_de.iso885915@eurosde_de.utf8@euros de_DE.UTF-8s de_de@eurotde_lusde_LU.ISO8859-1sde_lu.iso88591sde_lu.iso885915sde_LU.ISO8859-15sde_lu.iso885915@eurosde_lu.utf8@euros de_LU.UTF-8s de_lu@eurotdeutschtdutchsnl_NL.ISO8859-1sdutch.iso88591snl_BE.ISO8859-1teesee_EE.ISO8859-4tee_eesee_ee.iso88594teestiset_EE.ISO8859-1telsel_GR.ISO8859-7tel_grsel_gr.iso88597s el_gr@eurosel_GR.ISO8859-15s en.iso88591ten_ausen_AU.ISO8859-1sen_au.iso88591ten_besen_BE.ISO8859-1s en_be@eurosen_BE.ISO8859-15ten_bwsen_BW.ISO8859-1sen_bw.iso88591ten_casen_CA.ISO8859-1sen_ca.iso88591ten_gbsen_GB.ISO8859-1s en_gb.88591sen_gb.iso88591sen_gb.iso885915sen_GB.ISO8859-15ten_hksen_HK.ISO8859-1sen_hk.iso88591ten_iesen_IE.ISO8859-1sen_ie.iso88591sen_ie.iso885915sen_IE.ISO8859-15sen_ie.iso885915@eurosen_ie.utf8@euros en_IE.UTF-8s en_ie@euroten_insen_IN.ISO8859-1ten_nzsen_NZ.ISO8859-1sen_nz.iso88591ten_phsen_PH.ISO8859-1sen_ph.iso88591ten_sgsen_SG.ISO8859-1sen_sg.iso88591ten_ukten_uss en_us.88591s en_us.885915sen_US.ISO8859-15sen_us.iso88591sen_us.iso885915sen_us.iso885915@euroten_zasen_ZA.ISO8859-1s en_za.88591sen_za.iso88591sen_za.iso885915sen_ZA.ISO8859-15ten_zwsen_ZW.ISO8859-1sen_zw.iso88591teng_gbs eng_gb.8859tenglishsen_EN.ISO8859-1senglish.iso88591t english_uksenglish_uk.8859senglish_united-statessenglish_united-states.437t english_ussenglish_us.8859senglish_us.asciiteoseo_XX.ISO8859-3teo_eoseo_EO.ISO8859-3seo_eo.iso88593teo_xxseo_xx.iso88593tesses_ES.ISO8859-1tes_arses_AR.ISO8859-1ses_ar.iso88591tes_boses_BO.ISO8859-1ses_bo.iso88591tes_clses_CL.ISO8859-1ses_cl.iso88591tes_coses_CO.ISO8859-1ses_co.iso88591tes_crses_CR.ISO8859-1ses_cr.iso88591tes_doses_DO.ISO8859-1ses_do.iso88591tes_ecses_EC.ISO8859-1ses_ec.iso88591tes_ess es_es.88591ses_es.iso88591ses_es.iso885915ses_ES.ISO8859-15ses_es.iso885915@euroses_es.utf8@euros es_ES.UTF-8s es_es@eurotes_gtses_GT.ISO8859-1ses_gt.iso88591tes_hnses_HN.ISO8859-1ses_hn.iso88591tes_mxses_MX.ISO8859-1ses_mx.iso88591tes_nises_NI.ISO8859-1ses_ni.iso88591tes_pases_PA.ISO8859-1ses_pa.iso88591ses_pa.iso885915ses_PA.ISO8859-15tes_peses_PE.ISO8859-1ses_pe.iso88591ses_pe.iso885915ses_PE.ISO8859-15tes_prses_PR.ISO8859-1ses_pr.iso88591tes_pyses_PY.ISO8859-1ses_py.iso88591ses_py.iso885915ses_PY.ISO8859-15tes_svses_SV.ISO8859-1ses_sv.iso88591ses_sv.iso885915ses_SV.ISO8859-15tes_usses_US.ISO8859-1ses_us.iso88591tes_uyses_UY.ISO8859-1ses_uy.iso88591ses_uy.iso885915ses_UY.ISO8859-15tes_veses_VE.ISO8859-1ses_ve.iso88591ses_ve.iso885915ses_VE.ISO8859-15testoniantetset_EE.ISO8859-15tet_eeset_ee.iso88591set_ee.iso885913set_EE.ISO8859-13set_ee.iso885915set_ee.iso88594set_EE.ISO8859-4teuseu_ES.ISO8859-1teu_esseu_es.iso88591seu_es.iso885915seu_ES.ISO8859-15seu_es.iso885915@euroseu_es.utf8@euros eu_ES.UTF-8s eu_es@eurotfas fa_IR.UTF-8tfa_irsfa_ir.isiri3342sfa_IR.ISIRI-3342tfisfi_FI.ISO8859-15tfi_fis fi_fi.88591sfi_FI.ISO8859-1sfi_fi.iso88591sfi_fi.iso885915sfi_fi.iso885915@eurosfi_fi.utf8@euros fi_FI.UTF-8s fi_fi@eurotfinnishsfinnish.iso88591tfosfo_FO.ISO8859-1tfo_fosfo_fo.iso88591sfo_fo.iso885915sfo_FO.ISO8859-15tfrsfr_FR.ISO8859-1tfr_besfr_BE.ISO8859-1s fr_be.88591sfr_be.iso88591sfr_be.iso885915sfr_BE.ISO8859-15sfr_be.iso885915@eurosfr_be.utf8@euros fr_BE.UTF-8s fr_be@eurotfr_cas fr_ca.88591sfr_ca.iso88591sfr_ca.iso885915sfr_CA.ISO8859-15tfr_chsfr_CH.ISO8859-1s fr_ch.88591sfr_ch.iso88591sfr_ch.iso885915sfr_CH.ISO8859-15tfr_frs fr_fr.88591sfr_fr.iso88591sfr_fr.iso885915sfr_FR.ISO8859-15sfr_fr.iso885915@eurosfr_fr.utf8@euros fr_FR.UTF-8s fr_fr@eurotfr_lusfr_LU.ISO8859-1s fr_lu.88591sfr_lu.iso88591sfr_lu.iso885915sfr_LU.ISO8859-15sfr_lu.iso885915@eurosfr_lu.utf8@euros fr_LU.UTF-8s fr_lu@eurosfranaistfre_frs fre_fr.8859tfrenchsfrench.iso88591t french_francesfrench_france.8859tgasga_IE.ISO8859-1tga_iesga_ie.iso88591sga_ie.iso885914sga_IE.ISO8859-14sga_ie.iso885915sga_IE.ISO8859-15sga_ie.iso885915@eurosga_ie.utf8@euros ga_IE.UTF-8s ga_ie@eurotgalegosgl_ES.ISO8859-1tgaliciantgdsgd_GB.ISO8859-1tgd_gbsgd_gb.iso88591sgd_gb.iso885914sgd_GB.ISO8859-14sgd_gb.iso885915sgd_GB.ISO8859-15tger_des ger_de.8859tgermansgerman.iso88591tgerman_germanysgerman_germany.8859tgltgl_essgl_es.iso88591sgl_es.iso885915sgl_ES.ISO8859-15sgl_es.iso885915@eurosgl_es.utf8@euros gl_ES.UTF-8s gl_es@eurotgreeksgreek.iso88597tgvsgv_GB.ISO8859-1tgv_gbsgv_gb.iso88591sgv_gb.iso885914sgv_GB.ISO8859-14sgv_gb.iso885915sgv_GB.ISO8859-15theshe_IL.ISO8859-8the_ils he_il.cp1255s he_IL.CP1255she_il.iso88598she_il.microsoftcp1255thebrewsiw_IL.ISO8859-8shebrew.iso88598thishi_IN.ISCII-DEVthi_inshi_in.isciidevthrthr_hrshr_hr.iso88592thrvatskithushu_HU.ISO8859-2thu_hushu_hu.iso88592t hungariant icelandicsis_IS.ISO8859-1sicelandic.iso88591tidsid_ID.ISO8859-1tid_idtintin_idRCtis_issis_is.iso88591sis_is.iso885915sis_IS.ISO8859-15s iso-8859-1s iso-8859-15s iso8859-1s iso8859-15t iso_8859_1t iso_8859_15titsit_IT.ISO8859-1tit_chsit_CH.ISO8859-1sit_ch.iso88591sit_ch.iso885915sit_CH.ISO8859-15tit_its it_it.88591sit_it.iso88591sit_it.iso885915sit_IT.ISO8859-15sit_it.iso885915@eurosit_it.utf8@euros it_IT.UTF-8s it_it@eurotitaliansitalian.iso88591tiusiu_CA.NUNACOM-8tiu_casiu_ca.nunacom8tiwtiw_ilsiw_il.iso88598tjas ja_JP.eucJPsja.jiss ja_JP.JIS7sja.sjiss ja_JP.SJIStja_jps ja_jp.ajecs ja_jp.eucs ja_jp.eucjpsja_jp.iso-2022-jpsja_jp.iso2022jps ja_jp.jiss ja_jp.jis7s ja_jp.mscodes ja_jp.sjiss ja_jp.ujistjapantjapaneses japanese-eucs japanese.eucs japanese.sjistjp_jptkaska_GE.GEORGIAN-ACADEMYtka_geska_ge.georgianacademyska_ge.georgianpsska_GE.GEORGIAN-PSska_ge.georgianrstklskl_GL.ISO8859-1tkl_glskl_gl.iso88591skl_gl.iso885915skl_GL.ISO8859-15tkos ko_KR.eucKRtko_krs ko_kr.eucs ko_kr.euckrtkoreans korean.euctkwskw_GB.ISO8859-1tkw_gbskw_gb.iso88591skw_gb.iso885914skw_GB.ISO8859-14skw_gb.iso885915skw_GB.ISO8859-15tkys ky_KG.UTF-8tky_kgt lithuanianslt_LT.ISO8859-13tloslo_LA.MULELAO-1tlo_las lo_la.cp1133slo_LA.IBM-CP1133slo_la.ibmcp1133slo_la.mulelao1tlttlt_ltslt_lt.iso885913slt_lt.iso88594slt_LT.ISO8859-4tlvslv_LV.ISO8859-13tlv_lvslv_lv.iso885913slv_lv.iso88594slv_LV.ISO8859-4tmismi_NZ.ISO8859-1tmi_nzsmi_nz.iso88591tmksmk_MK.ISO8859-5tmk_mks mk_mk.cp1251s mk_MK.CP1251smk_mk.iso88595smk_mk.microsoftcp1251tmr_ins mr_IN.UTF-8tmssms_MY.ISO8859-1tms_mysms_my.iso88591tmtsmt_MT.ISO8859-3tmt_mtsmt_mt.iso88593tnbtnb_nos nb_no.88591snb_no.iso88591snb_no.iso885915snb_NO.ISO8859-15tnltnl_bes nl_be.88591snl_be.iso88591snl_be.iso885915snl_BE.ISO8859-15snl_be.iso885915@eurosnl_be.utf8@euros nl_BE.UTF-8s nl_be@eurotnl_nls nl_nl.88591snl_nl.iso88591snl_nl.iso885915snl_NL.ISO8859-15snl_nl.iso885915@eurosnl_nl.utf8@euros nl_NL.UTF-8s nl_nl@eurotnnsnn_NO.ISO8859-1tnn_nos nn_no.88591snn_no.iso88591snn_no.iso885915snn_NO.ISO8859-15tnosno_NO.ISO8859-1s no@nynorsksny_NO.ISO8859-1tno_nos no_no.88591sno_no.iso88591sno_no.iso885915sno_NO.ISO8859-15t norwegiansnorwegian.iso88591tnrsnr_ZA.ISO8859-1tnr_zasnr_za.iso88591tnsosnso_ZA.ISO8859-15tnso_zasnso_za.iso885915tnytny_nos ny_no.88591sny_no.iso88591sny_no.iso885915sny_NO.ISO8859-15tnynorsktocsoc_FR.ISO8859-1toc_frsoc_fr.iso88591soc_fr.iso885915soc_FR.ISO8859-15s oc_fr@eurotpdspd_US.ISO8859-1tpd_despd_DE.ISO8859-1spd_de.iso88591spd_de.iso885915spd_DE.ISO8859-15tpd_usspd_us.iso88591spd_us.iso885915spd_US.ISO8859-15tphsph_PH.ISO8859-1tph_phsph_ph.iso88591tplspl_PL.ISO8859-2tpl_plspl_pl.iso88592tpolisht portuguesespt_PT.ISO8859-1sportuguese.iso88591tportuguese_brazilspt_BR.ISO8859-1sportuguese_brazil.8859tposixs posix-utf2tppspp_AN.ISO8859-1tpp_anspp_an.iso88591tpttpt_brs pt_br.88591spt_br.iso88591spt_br.iso885915spt_BR.ISO8859-15tpt_pts pt_pt.88591spt_pt.iso88591spt_pt.iso885915spt_PT.ISO8859-15spt_pt.iso885915@eurospt_pt.utf8@euros pt_PT.UTF-8s pt_pt@eurotrosro_RO.ISO8859-2tro_rosro_ro.iso88592tromaniantrusru_RU.ISO8859-5tru_rus ru_ru.cp1251s ru_RU.CP1251sru_ru.iso88595s ru_ru.koi8rs ru_RU.KOI8-Rsru_ru.microsoftcp1251tru_uas ru_UA.KOI8-Us ru_ua.cp1251s ru_UA.CP1251s ru_ua.koi8usru_ua.microsoftcp1251trumaniantrussiantrwsrw_RW.ISO8859-1trw_rwsrw_rw.iso88591tse_nos se_NO.UTF-8t serbocroatianssh_YU.ISO8859-2tshtsh_hrssh_HR.ISO8859-2ssh_hr.iso88592tsh_sptsh_yutsis si_LK.UTF-8tsi_lktsinhalatskssk_SK.ISO8859-2tsk_skssk_sk.iso88592tslssl_SI.ISO8859-2tsl_csssl_CS.ISO8859-2tsl_sissl_si.iso88592tslovaktslovenet slovenianR5ssp_YU.ISO8859-5tsp_yutspanishsspanish.iso88591t spanish_spainsspanish_spain.8859tsqssq_AL.ISO8859-2tsq_alssq_al.iso88592tsrssr_YU.ISO8859-5s sr@cyrillictsr_spssr_SP.ISO8859-2tsr_yussr_yu.cp1251@cyrillics sr_YU.CP1251ssr_yu.iso88592ssr_YU.ISO8859-2ssr_yu.iso88595ssr_yu.iso88595@cyrillicssr_yu.microsoftcp1251@cyrillicssr_yu.utf8@cyrillics sr_YU.UTF-8ssr_yu@cyrillictsssss_ZA.ISO8859-1tss_zasss_za.iso88591tstsst_ZA.ISO8859-1tst_zasst_za.iso88591tsvssv_SE.ISO8859-1tsv_fissv_FI.ISO8859-1ssv_fi.iso88591ssv_fi.iso885915ssv_FI.ISO8859-15ssv_fi.iso885915@eurossv_fi.utf8@euros sv_FI.UTF-8s sv_fi@eurotsv_ses sv_se.88591ssv_se.iso88591ssv_se.iso885915ssv_SE.ISO8859-15s sv_se@eurotswedishsswedish.iso88591ttas ta_IN.TSCII-0tta_ins ta_in.tsciis ta_in.tscii0ttgs tg_TJ.KOI8-Cttg_tjs tg_tj.koi8ctthsth_TH.ISO8859-11tth_thsth_th.iso885911s th_th.tactiss th_TH.TIS620s th_th.tis620tthaittlstl_PH.ISO8859-1ttl_phstl_ph.iso88591ttnstn_ZA.ISO8859-15ttn_zastn_za.iso885915ttrstr_TR.ISO8859-9ttr_trstr_tr.iso88599R=sts_ZA.ISO8859-1tts_zasts_za.iso88591tttstt_RU.TATAR-CYRttt_rus tt_ru.koi8cs tt_RU.KOI8-Cstt_ru.tatarcyrtturkishsturkish.iso88599tuks uk_UA.KOI8-Utuk_uas uk_ua.cp1251s uk_UA.CP1251suk_ua.iso88595suk_UA.ISO8859-5s uk_ua.koi8usuk_ua.microsoftcp1251tunivs en_US.utf-8t universalsuniversal.utf8@ucs4s en_US.UTF-8turs ur_PK.CP1256tur_pks ur_pk.cp1256sur_pk.microsoftcp1256tuzs uz_UZ.UTF-8tuz_uzsuz_uz.iso88591suz_UZ.ISO8859-1suz_uz.utf8@cyrillicsuz_uz@cyrillictves ve_ZA.UTF-8tve_zatvis vi_VN.TCVNtvi_vns vi_vn.tcvnsvi_vn.tcvn5712s vi_vn.visciis vi_VN.VISCIIsvi_vn.viscii111twaswa_BE.ISO8859-1twa_beswa_be.iso88591swa_be.iso885915swa_BE.ISO8859-15swa_be.iso885915@euros wa_be@eurotxhsxh_ZA.ISO8859-1txh_zasxh_za.iso88591tyis yi_US.CP1255tyi_uss yi_us.cp1255syi_us.microsoftcp1255tzhtzh_cns zh_CN.gb2312s zh_cn.big5s zh_TW.big5s zh_cn.eucs zh_cn.gb18030s zh_CN.gb18030s zh_cn.gb2312s zh_cn.gbks zh_CN.gbktzh_hkszh_HK.big5hkscss zh_hk.big5s zh_HK.big5szh_hk.big5hkscstzh_tws zh_tw.big5s zh_tw.eucs zh_tw.euctwtzuszu_ZA.ISO8859-1tzu_zaszu_za.iso88591i6taf_ZAitsq_ALitar_SAitar_IQi tar_EGitar_LYitar_DZitar_MAitar_TNi tar_OMi$tar_YEi(tar_SYi,tar_JOi0tar_LBi4tar_KWi8tar_AEi<tar_BHi@tar_QAi+thy_AMi,taz_AZi,i-teu_ESi#tbe_BYiEtbn_INi tbs_BAii~tbr_FRitbg_BGitca_EStzh_CHSitzh_TWitzh_CNi tzh_HKitzh_SGitzh_MOi|tzh_CHTithr_HRithr_BAitcs_CZitda_DKitgbz_AFietdiv_MVitnl_NLitnl_BEi ten_USi ten_GBi ten_AUi ten_CAi ten_NZi ten_IEi ten_ZAi ten_JAi $ten_CBi (ten_BZi ,ten_TTi 0ten_ZWi 4ten_PHi%tet_EEi8tfo_FOidtfil_PHi tfi_FIi tfr_FRi tfr_BEi tfr_CAi tfr_CHi tfr_LUi tfr_MCibtfy_NLiVtgl_ESi7tka_GEitde_DEitde_CHi tde_ATitde_LUitde_LIitel_GRiGtgu_INi the_ILi9thi_INithu_HUitis_ISi!tid_IDi]tiu_CAi]i<tga_IEi4txh_ZAi5tzu_ZAitit_ITitit_CHitja_JPiKtkn_INi?tkk_KZiWtkok_INitko_KRi@tky_KGi&tlv_LVi'tlt_LTintlb_LUi/tmk_MKi>tms_MYi>tms_BNiLtml_INi:tmt_MTitmi_NZiztarn_CLiNtmr_INi|tmoh_CAiPtmn_MNiatne_NPitnb_NOitnn_NOitoc_FRiHtor_INictps_AFi)tfa_IRitpl_PLitpt_BRitpt_PTiFtpa_INiktquz_BOiktquz_ECik tquz_PEitro_ROitrm_CHitru_RUi;$tsmn_FIi;tsmj_NOi;tsmj_SEi;tse_NOi;tse_SEi; tse_FIi; tsms_FIi;tsma_NOi;tsma_SEiOtsa_INi tsr_SPitsr_BAiiiltns_ZAi2ttn_ZAitsk_SKi$tsl_SIi tes_ESi tes_MXi i tes_GTi tes_CRi tes_PAi tes_DOi tes_VEi $tes_COi (tes_PEi ,tes_ARi 0tes_ECi 4tes_CLi 8tes_URi <tes_PYi @tes_BOi Dtes_SVi Htes_HNi Ltes_NIi Ptes_PRiAtsw_KEitsv_SEitsv_FIiZtsyr_SYiItta_INiDttt_RUiJtte_INitth_THittr_TRi"tuk_UAi tur_PKi tur_INiCtuz_UZiCi*tvi_VNiRtcy_GBcCsh}|d}||d=dGHddGHt\}}dG|pdGHdG|pdGHHd GHddGHxV|iD]H\}}|Gd GHt|\}}d G|pdGHd G|pdGHHqyWHd GHddGHt xV|iD]H\}}|Gd GHt|\}}d G|pdGHd G|pdGHHqWyt t dWndGHdGHdGHniXHdGHddGHxV|iD]H\}}|Gd GHt|\}}d G|pdGHd G|pdGHHqzWdS(s Test function. cCsCx<tiD]+\}}|d djo|||d;Z?d<Z@dd=ZAd>ZBeBZCd?ZDd@ZEdAZFeFZGdBZHdCZIdDZJdEZKdFZLydkMZMeMiNeLWn+e j oeiOdGZPePe_OnXdS(Hsj Logging package for Python. Based on PEP 282 and comments thereto in comp.lang.python, and influenced by Apache's log4j system. Should work under Python versions >= 1.5.2, except that source line information is not available unless 'sys._getframe()' is. Copyright (C) 2001-2004 Vinay Sajip. All Rights Reserved. To use, simply 'import logging' and log away! Ns&Vinay Sajip tbetas0.4.9.7s07 October 2005tfrozenslogging%s__init__%sis.pycs.pyos.pycCs%y tWntiiiSnXdS(s5Return the frame object for the caller's stack frame.N(t Exceptiontsyst exc_tracebackttb_frametf_back(((t&/usr/lib/python2.4/logging/__init__.pyt currentframe@s  t _getframeii2i(iii itCRITICALtERRORtWARNINGtINFOtDEBUGtNOTSETtWARNcCsti|d|S(s Return the textual representation of logging level 'level'. If the level is one of the predefined levels (CRITICAL, ERROR, WARNING, INFO, DEBUG) then you get the corresponding string. If you have associated levels with names using addLevelName then the name you have associated with 'level' is returned. If a numeric value corresponding to one of the defined levels is passed in, the corresponding string representation is returned. Otherwise, the string "Level %s" % level is returned. sLevel %sN(t _levelNamestgettlevel(R((Rt getLevelNames cCs.tz|t|<|t|(R$R#R,R-R7R%(R$((Rt__str__scCsttdpt|i}n_|i}t|titifjo6yt|i}Wqtj o|i}qXn|i o||i }n|S(s Return the message for this LogRecord. Return the message for this LogRecord after merging any user-supplied arguments with the message. t UnicodeTypeN( RAR)tstrR$R%R(REt StringTypet UnicodeErrorR&(R$R%((Rt getMessages  (t__name__t __module__t__doc__RCRDRI(((RRs  1 cCs2tdddddfd}|ii||S(s Make a LogRecord whose attributes are defined by the specified dictionary, This function is useful for converting a logging event received over a socket connection (which is sent as a dictionary) into a LogRecord instance. tiN(RR5trvt__dict__tupdatetdict(RQRN((Rt makeLogRecordst FormattercBsDtZdZeiZeedZedZdZ dZ RS(s Formatter instances are used to convert a LogRecord to text. Formatters need to know how a LogRecord is constructed. They are responsible for converting a LogRecord to (usually) a string which can be interpreted by either a human or an external system. The base Formatter allows a formatting string to be specified. If none is supplied, the default value of "%s(message)\n" is used. The Formatter can be initialized with a format string which makes use of knowledge of the LogRecord attributes - e.g. the default value mentioned above makes use of the fact that the user's message and arguments are pre- formatted into a LogRecord's message attribute. Currently, the useful attributes in a LogRecord are described by: %(name)s Name of the logger (logging channel) %(levelno)s Numeric logging level for the message (DEBUG, INFO, WARNING, ERROR, CRITICAL) %(levelname)s Text logging level for the message ("DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL") %(pathname)s Full pathname of the source file where the logging call was issued (if available) %(filename)s Filename portion of pathname %(module)s Module (name portion of filename) %(lineno)d Source line number where the logging call was issued (if available) %(created)f Time when the LogRecord was created (time.time() return value) %(asctime)s Textual time when the LogRecord was created %(msecs)d Millisecond portion of the creation time %(relativeCreated)d Time in milliseconds when the LogRecord was created, relative to the time the logging module was loaded (typically at application startup time) %(thread)d Thread ID (if available) %(threadName)s Thread name (if available) %(process)d Process ID (if available) %(message)s The result of record.getMessage(), computed just as the record is emitted cCs*|o ||_n d|_||_dS(s8 Initialize the formatter with specified format strings. Initialize the formatter either with the specified format string, or a default as described above. Allow for specialized date formatting with the optional datefmt argument (if omitted, you get the ISO8601 format). s %(message)sN(tfmtR$t_fmttdatefmt(R$RTRV((RRCQs   cCsX|i|i}|oti||}n&tid|}d||i f}|S(s Return the creation time of the specified LogRecord as formatted text. This method should be called from format() by a formatter which wants to make use of a formatted time. This method can be overridden in formatters to provide for any specific requirement, but the basic behaviour is as follows: if datefmt (a string) is specified, it is used with time.strftime() to format the creation time of the record. Otherwise, the ISO8601 format is used. The resulting string is returned. This function uses a user-configurable function to convert the creation time to a tuple. By default, time.localtime() is used; to change this for a particular formatter instance, set the 'converter' attribute to a function with the same signature as time.localtime() or time.gmtime(). To change it for all formatters, for example if you want all logging times to be shown in GMT, set the 'converter' attribute in the Formatter class. s%Y-%m-%d %H:%M:%Ss%s,%03dN( R$t convertertrecordR8R"RVR!tstrftimetsttR:(R$RXRVRZR[R"((Rt formatTime_scCsjti}ti|d|d|dd||i}|i |ddjo|d }n|S(s Format and return the specified exception information as a string. This default implementation just uses traceback.print_exception() iiiis N( t cStringIOtStringIOtsiot tracebacktprint_exceptionteiR5tgetvalueRZtclose(R$RbRZR_((RtformatExceptionys %  cCs|i|_ti|iddjo|i||i|_ n|i|i }|i o'|i p|i|i |_ qn|i o0|ddjo|d}n||i }n|S(s[ Format the specified record as text. The record's attribute dictionary is used as the operand to a string formatting operation which yields the returned string. Before formatting the dictionary, a couple of preparatory steps are carried out. The message attribute of the record is computed using LogRecord.getMessage(). If the formatting string contains "%(asctime)", formatTime() is called to format the event time. If there is exception information, it is formatted using formatException() and appended to the message. s %(asctime)iis N(RXRItmessagetstringtfindR$RUR\RVtasctimeRORZR4R6Re(R$RXRZ((Rtformats    ( RJRKRLR!t localtimeRWR5RCR\ReRj(((RRS&s '   tBufferingFormattercBs5tZdZedZdZdZdZRS(sB A formatter suitable for formatting a number of records. cCs!|o ||_n t|_dS(sm Optionally specify a formatter which will be used to format each individual record. N(tlinefmtR$t_defaultFormatter(R$Rm((RRCs cCsdS(sE Return the header string for the specified records. RMN((R$trecords((Rt formatHeaderscCsdS(sE Return the footer string for the specified records. RMN((R$Ro((Rt formatFooterscCsnd}t|djoQ||i|}x$|D]}||ii|}q3W||i|}n|S(sQ Format the specified records and return the result as a string. RMiN( RNR'RoR$RpRXRmRjRq(R$RoRNRX((RRjs(RJRKRLR5RCRpRqRj(((RRls   tFiltercBs#tZdZddZdZRS(s Filter instances are used to perform arbitrary filtering of LogRecords. Loggers and Handlers can optionally use Filter instances to filter records as desired. The base filter class only allows events which are below a certain point in the logger hierarchy. For example, a filter initialized with "A.B" will allow events logged by loggers "A.B", "A.B.C", "A.B.C.D", "A.B.D" etc. but not "A.BB", "B.A.B" etc. If initialized with the empty string, all events are passed. RMcCs||_t||_dS(s Initialize a filter. Initialize with the name of the logger which, together with its children, will have its events allowed through the filter. If no name is specified, allow every event. N(R#R$R'tnlen(R$R#((RRCs cCsw|idjodSnL|i|ijodSn1ti|i|id|idjodSn|i|idjS(s Determine if the specified record is to be logged. Is the specified record to be logged? Returns 0 for no, nonzero for yes. If deemed appropriate, the record may be modified in-place. iit.N(R$RsR#RXRgRh(R$RX((Rtfilters((RJRKRLRCRu(((RRrs  tFilterercBs2tZdZdZdZdZdZRS(s[ A base class for loggers and handlers which allows them to share common code. cCs g|_dS(sE Initialize the list of filters to be an empty list. N(R$tfilters(R$((RRCscCs(||ijo|ii|ndS(s; Add the specified filter to this handler. N(RuR$Rwtappend(R$Ru((Rt addFilterscCs(||ijo|ii|ndS(s@ Remove the specified filter from this handler. N(RuR$Rwtremove(R$Ru((Rt removeFilter scCs9d}x,|iD]!}|i|p d}PqqW|S(s Determine if a record is loggable by consulting all the filters. The default is to allow the record to be logged; any filter can veto this and the record is then dropped. Returns a zero value if a record is to be dropped, else non-zero. iiN(RNR$RwtfRuRX(R$RXRNR|((RRus  (RJRKRLRCRyR{Ru(((RRvs    tHandlercBs}tZdZedZdZdZdZdZdZ dZ dZ d Z d Z d Zd ZRS( sq Handler instances dispatch logging events to specific destinations. The base handler class. Acts as a placeholder which defines the Handler interface. Handlers can optionally use Formatter instances to format records as desired. By default, no formatter is specified; in this case, the 'raw' message as determined by record.message is logged. cCs]ti|||_d|_tzdt|s    cCsd}tz|ii|oj|i|}t|toI|}t |}||_ ||i|<|i |||i |qn0t |}||_ ||i|<|i |WdtX|S(s Get a logger with the specified name (channel name), creating it if it doesn't yet exist. This name is a dot-separated hierarchical name, such as "a", "a.b", "a.b.c" or similar. If a PlaceHolder existed for the specified name [i.e. the logger didn't exist but a child of it did], replace it with the created logger and fix up the parent/child references which pointed to the placeholder to now point to the logger. N(R5RNRR$RRR#t isinstanceRtphRtmanagert_fixupChildrent _fixupParentsR(R$R#RNR((Rt getLoggerGs(        cCs|i}ti|d}d}x|djo| o|| }|i i |pt ||i |qXqWdS(s Perform any cleanup actions in the logging system (e.g. flushing buffers). Should be called at application exit. N(RthRRdR(R((Rtshutdown)s cCsz tWd||XdS(N(Rtold_exittstatus(RR((Rtexithook@s (QRLRR.R)R!RgR]R`Rt ImportErrorR5RRt __author__t __status__t __version__t__date__RAtsept__file__RtlowerR/RRR R;RR tFATALR R RR RRRRRRRRRRRRSRnRlRrRvRRR}RRRRRRRRRRRRRRRRRRRRRRRRRtatexittregistertexitR(BR]RRR RRvRRR}RRRRSRRRrR RRRRRRR R)RRRRRR RgRnR;RRRRRRRRRRRRRRlRRRRRRR`RRRRRRRR!RR.RR((Rt?s?          {   U  *%,2  U    6           c!@sdZdkZdkTddddddd d d d d ddddddddddddddddddd d!d"d#g!Zd$Zd%Zd&Zd$Zd'Zd$Z dZ d(Z d)Z d*Zd+Zd,Zd-Zd.Zd/Zd0Zd1Zd2Zd3Zd4Zd5Zd6Zd7Zd8Zd9Zd:Zd;Zd<Z d=Z!d>e"fd?YZ#d@Z$dAZ%dBZ&dCZ'e(Z)dS(Ds7Pathname and path-related operations for the Macintosh.N(t*tnormcasetisabstjoint splitdrivetsplittsplitexttbasenametdirnamet commonprefixtgetsizetgetmtimetgetatimetgetctimetislinktexiststlexiststisdirtisfiletwalkt expandusert expandvarstnormpathtabspathtcurdirtpardirtseptpathseptdefpathtaltseptextseptdevnulltrealpathtsupports_unicode_filenamest:s::t.s sDev:NullcCs |iS(N(tpathtlower(R$((t/usr/lib/python2.4/macpath.pyRscCsd|jo|ddjS(sReturn true if a path is absolute. On the Mac, relative paths begin with a colon, but as a special case, paths with no colons at all are also relative. Anything else is absolute (the string up to the first colon is the volume name).R"iN(ts(R'((R&RscGs|}x|D]}| p t|o |}q n|d djo|d}nd|jod|}n|ddjo|d}n||}q W|S(NiR"i(R'R$tpttR(R'R(R)R$((R&R's cCsd|jod|fSnd}x9tt|D]%}||djo|d}q4q4W||d ||}}|od|jo|d}n||fS(sSplit a pathname into two parts: the directory leading up to the final bit, and the basename (the filename, without colons, in that directory). The result (s, t) is such that join(s, t) yields the original argument.R"tiiN(R'tcolontrangetlentiR$tfile(R'R.R+R/R$((R&R7s cCsI|id}||idjo|dfSn|| ||fSdS(sSplit a path into root and extension. The extension is everything starting at the last dot in the last pathname component; the root is everything before that. It is always true that root + ext == p.R#R"R*N(R(trfindR.(R(R.((R&RFs cCs d|fS(s@Split a pathname into a drive specification and the rest of the path. Useful on DOS/Windows/NT; on the Mac, the drive is always empty (don't use the volume name -- it doesn't have the same syntactic and semantic oddities as DOS drive letters, such as there being a separate current directory per drive).R*N(R((R(((R&RSscCst|dS(Ni(RR'(R'((R&R_scCst|dS(Ni(RR'(R'((R&R`scCsBt|ptSnt|}t|djo|ddjS(NiiR*(RR'tFalseRt componentsR-(R'R2((R&tismountbs  cCs=yti|}Wntij o dSnXt|iS(s<Return true if the pathname refers to an existing directory.iN(toststatR'tstterrortS_ISDIRtst_mode(R'R6((R&Rhs  cCsti|iS(s1Return the size of a file, reported by os.stat().N(R4R5tfilenametst_size(R:((R&R tscCsti|iS(sCReturn the last modification time of a file, reported by os.stat().N(R4R5R:tst_mtime(R:((R&R xscCsti|iS(s=Return the last access time of a file, reported by os.stat().N(R4R5R:tst_atime(R:((R&R |scCs6y$dk}|ii|ddSWn tSnXdS(s6Return true if the pathname refers to a symbolic link.Nii(t Carbon.FiletCarbontFiletResolveAliasFileR'R1(R'R?((R&Rs  cCs=yti|}Wntij o tSnXt|iS(s?Return true if the pathname refers to an existing regular file.N(R4R5R'R6R7R1tS_ISREGR9(R'R6((R&Rs  cCsti|iS(s:Return the creation time of a file, reported by os.stat().N(R4R5R:tst_ctime(R:((R&R scCs4yti|}Wntij o tSnXtS(sDTest whether a path exists. Returns False for broken symbolic linksN(R4R5R'R6R7R1tTrue(R'R6((R&Rs  cCs4yti|}Wntij o tSnXtS(sCTest whether a path exists. Returns True for broken symbolic linksN(R4tlstatR$R6R7R1RD(R$R6((R&Rs  cCs|pdSn|d}xl|D]d}x[tt|D]G}||d ||d jo$|| }|djodSnPq9q9Wq W|S(sGGiven a list of pathnames, returns the longest common leading componentR*iiN(tmtprefixtitemR,R-R.(RFR.RHRG((R&R s    cCs|S(sEDummy to retain interface-compatibility with other operating systems.N(R$(R$((R&RscCs|S(sEDummy to retain interface-compatibility with other operating systems.N(R$(R$((R&Rst norm_errorcBstZdZRS(sPath cannot be normalized(t__name__t __module__t__doc__(((R&RIs cCsd|jo d|Sn|id}d}x|t|djon||djoO||ddjo:|djo ||d|d5|d}qtdq1|d}q1Wdi|}|ddjo8t|djo%|dt|jo|d }n|S(sLNormalize a pathname. Will return the same result for equivalent paths.R"iR*s+Cannot use :: immediately after volume nameiiN(R'RtcompsR.R-RIR(R'R.RM((R&Rs"  &  ;cCsyti|}Wntij o dSnX||||xL|D]D}t||}t |o"t | ot |||qGqGWdS(sIDirectory tree walk with callback function. For each directory in the directory tree rooted at top (including top itself, but excluding '.' and '..'), call func(arg, dirname, fnames). dirname is the name of the directory, and fnames a list of the names of the files and subdirectories in dirname (excluding '.' and '..'). func may modify the fnames list in-place (e.g. via del or slice assignment), and walk will only recurse into the subdirectories whose names remain in fnames; this can be used to implement a filter, or to impose a specific order of visiting. No semantics are defined for, or required of, arg, beyond that arg is always passed to func. It can be used, e.g., to pass a filename pattern, or a mutable object designed to accumulate statistics. Passing None for arg is common.N( R4tlistdirttoptnamesR7tfunctargtnameRRRR(RORQRRRSRP((R&Rs  cCs0t|ptti|}nt|S(sReturn an absolute path.N(RR$RR4tgetcwdR(R$((R&Rs cCst|}y dk}Wntj o |SnX|p|Sn|id}|dd}x@|dD]4}t||}|i i |ddi }qjW|S(NR"ii( RR$R>R?t ImportErrorRR2tcRR@tFSResolveAliasFilet as_pathname(R$RVR2R?((R&R s    #(*RLR4R5t__all__RRRRRRtNoneRRRRRRRRRRR3RR R R RRR RRR RRt ExceptionRIRRRR R1R!(%RRRRRRRRRR RRRRIRYRR!R RRRRR R RRR RRRR RRR3RRR4((R&t?sL i                c@sddZdkZdkZddgZdZdZdZdZedjo endS( sqMacintosh-specific module for conversion between pathnames and URLs. Do not import directly; use urllib instead.Nt url2pathnamet pathname2urlcCsti|d}|o|djo tdn|d djo|d}n|d djo tdn|id}d}x|t|jo||d jo ||=q||d joB|djo5||d djo ||d |d 5|d }q||d jo-|djo ||d d jo ||=q|d }qW|dpd i |d }nZd}x=|t|jo)||d jod ||<|d }qWd d i |}ti |S(s{OS-specific conversion from a relative URL of the 'file' scheme to a file system path; not recommended for general use.itfiles(Cannot convert non-local URL to pathnameis///is//t/t.s..itt:N(Rs..( turllibt splittypetpathnamettpt RuntimeErrortsplitt componentstitlentjointrvtunquote(R RRR R ((t!/usr/lib/python2.4/macurl2path.pyR s:   33  $ cCsd|jo tdn|id}|ddjo |d=n|ddjo |d=nx9tt|D]%}||djod|| %rsdrive:s drive:dir:sdrive:dir:files drive:fileRs:files:dir:s :dir:file(turlRRR(RR((RttestOs t__main__( t__doc__RRt__all__RRRRt__name__(R!RRRRRR((Rt?s    *    c@szdZdkZeidiZeidiZeidZeidZeidZ[dfdYZ dS( sShared support for scanning document type declarations in HTML and XHTML. This module is used as a foundation for the HTMLParser and sgmllib modules (indirectly, for htmllib as well). It has no documented public API and should not be used directly. Ns[a-zA-Z][-_.a-zA-Z0-9]*\s*s(\'[^\']*\'|"[^"]*")\s*s--\s*>s ]\s*]\s*>s]\s*>t ParserBasecBstZdZdZdZdZdZdZdZdZ dd Z dd Z d Z d Z d ZdZdZdZdZRS(siParser base class which provides some common support methods used by the SGML/HTML and XHTML parsers.cCs$|itjotdndS(Ns(markupbase.ParserBase must be subclassed(tselft __class__Rt RuntimeError(R((t /usr/lib/python2.4/markupbase.pyt__init__scCstddS(Ns.subclasses of ParserBase must override error()(tNotImplementedError(Rtmessage((Rterror!scCsd|_d|_dS(Nii(Rtlinenotoffset(R((Rtreset%s cCs|i|ifS(s&Return current line number and offset.N(RR R (R((Rtgetpos)scCs||jo|Sn|i}|id||}|o:|i||_|id||}||d|_ n|i |||_ |S(Ns i( titjRtrawdatatcounttnlinesR trindextposR (RR RRRR((Rt updatepos1s  tc Csz|i}|d}|||!djp td|||d!djodSnt|}|||d!djo|i|Sn;||d jo|i|Sn|i ||\}}|d jo|Sn|d jo d|_ nx||jov||}|d joH||d|!} |d jo|i| n|i| |dSn|d jo.t||}|pdSn|i}n|djo|i ||\}}n||i jo|d}n}|d joZ|d jo|i|d|}q\|djo|id|q\|idn|id|||d jo|SqqWdS(Niss"'t4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZtattlisttlinktypetlinktelements&unsupported '[' char in %s declarations"unexpected '[' char in declarations!unexpected %r char in declaration(RR(RRslinkR(RRR RtAssertionErrortlentnt parse_commenttparse_marked_sectiont _scan_nametdecltypet_decl_othercharstctdatat handle_declt unknown_declt_declstringlit_matchtmtendtnamet_parse_doctype_subsetR( RR R'R%R.RR,R!RR(((Rtparse_declarationAsV                   icCs|i}|||d!djp td|i|d|\}}|djo|Sn|djoti||d}nD|djot i||d}n|i d ||d|!|pdSn|o+|i d}|i||d|!n|idS(NisR9RRR<((RR#s  "   cCs|i}|||d!djo|idnti||d}|pdSn|o+|id}|i ||d|!n|i dS(Nis