ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙa 3g @sbddlZddlZddlZddlmZddlmZddlZddlZ ddl m Z ddl Z ddl mZz ddlZWneydZYn0ddZdejdd Zd Zd Zd Zd ZdZdZdZd ZdZdZd ZdZdZ dZ!Gddde"Z#Gddde#Z$Gddde#Z%Gddde#Z&e'Z(Z)edddZ*dd Z+e+d!rFd"d#Z,ne+d$rZd%d#Z,nd&d#Z,[*[+d'd(Z-Gd)d*d*Z.d+d,Z/d-d.Z0Gd/d0d0Z1d1d2Z2e.e1fZ3Gd3d4d4Z4Gd5d6d6Z5Gd7d8d8Z6Gd9d:d:Z7Gd;d<d<Z8Gd=d>d>Z9dZ:Z;Zd[dDdEZ?dFdGZ@d\dIdJZAGdKdLdLerPejBneCZDGdMdNdNZEGdOdPdPZFGdQdRdReFZGGdSdTdTZHeHZIeJdUkr^eHdVZKzeLeKjMNWn0e#yZOzeLdWeOWYdZO[On dZO[O00e9eKZPePQePRd dXePSdd zePD]ZTeLeTqWn0e#y\ZOzeLdWeOWYdZO[On dZO[O00dS)]N)datetime)Decimal)expat)BytesIOcCs$|dd}|dd}|ddS)N&z&z>)replace)sr ,/opt/python39/lib/python3.9/xmlrpc/client.pyescapes  r z%d.%diiiDii ipiԁiCiBiiic@seZdZejZdS)ErrorN)__name__ __module__ __qualname__object__str__r r r r rsrc@seZdZddZddZdS) ProtocolErrorcCs&t|||_||_||_||_dSN)r__init__urlerrcodeerrmsgheaders)selfrrrrr r r rs  zProtocolError.__init__cCsd|jj|j|j|jfS)Nz<%s for %s: %s %s>) __class__rrrrrr r r __repr__szProtocolError.__repr__Nrrrrrr r r r rsrc@s eZdZdS) ResponseErrorN)rrrr r r r r!sr!c@seZdZddZddZdS)FaultcKst|||_||_dSr)rr faultCode faultString)rr#r$extrar r r rs zFault.__init__cCsd|jj|j|jfS)Nz <%s %s: %r>)rrr#r$rr r r rszFault.__repr__Nr r r r r r"sr"cCs*zt|dkWSty$YdS0dS)NZ0001F)_day0strftime ValueError)fmtr r r _try s r+z%YcCs |dSN%Y%m%dT%H:%M:%Sr(valuer r r _iso8601_formatsr1z%4YcCs |dS)Nz%4Y%m%dT%H:%M:%Sr.r/r r r r1scCs|ddS)Nr-)r(zfillr/r r r r1scCsLt|trt|St|ttjfs<|dkr2t}t|}d|ddS)Nrz%04d%02d%02dT%02d:%02d:%02d) isinstancerr1tupletime struct_time localtimer/r r r _strftimes  r:c@sneZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZdS)DateTimercCs t|tr||_n t||_dSr)r5strr0r:)rr0r r r r.s zDateTime.__init__cCstt|tr|j}|j}nTt|tr2|j}t|}n:t|trH|j}|}n$t|drd|}|}n|}t}||fS)N timetuple) r5r;r0rr1r<hasattrr=NotImplementedrotherr or r r make_comparable4s      zDateTime.make_comparablecCs"||\}}|turtS||kSrrCr?r@r r r __lt__FszDateTime.__lt__cCs"||\}}|turtS||kSrrDr@r r r __le__LszDateTime.__le__cCs"||\}}|turtS||kSrrDr@r r r __gt__RszDateTime.__gt__cCs"||\}}|turtS||kSrrDr@r r r __ge__XszDateTime.__ge__cCs"||\}}|turtS||kSrrDr@r r r __eq__^szDateTime.__eq__cCst|jdSr,)r7strptimer0rr r r r=dszDateTime.timetuplecCs|jSrr/rr r r rlszDateTime.__str__cCsd|jj|jt|fS)Nz<%s %r at %#x>)rrr0idrr r r roszDateTime.__repr__cCst||_dSr)r<stripr0rdatar r r decoderszDateTime.decodecCs$|d||j|ddSNzz )writer0)routr r r encodeus  zDateTime.encodeN)r)rrrrrCrErFrGrHrIr=rrrOrSr r r r r;(s r;cCst}|||Sr)r;rOrNr0r r r _datetimezs rUcCs t|dSr,)rrJ)rNr r r _datetime_typesrVc@s6eZdZd ddZddZddZdd Zd d ZdS) BinaryNcCs>|durd}n&t|ttfs,td|jjt|}||_dS)Nz#expected bytes or bytearray, not %s)r5bytes bytearray TypeErrorrrrNrMr r r rszBinary.__init__cCs t|jdS)Nzlatin-1)r<rNrr r r rszBinary.__str__cCst|tr|j}|j|kSr)r5rWrN)rrAr r r rIs z Binary.__eq__cCst||_dSr)base64 decodebytesrNrMr r r rOsz Binary.decodecCs4|dt|j}||d|ddSNz asciiz )rQr\ encodebytesrNrO)rrRencodedr r r rSs  z Binary.encode)N)rrrrrrIrOrSr r r r rWs  rWcCst}|||Sr)rWrOrTr r r _binarys rbc@s$eZdZddZddZddZdS) ExpatParsercCsDtdd|_}||_|j|_|j|_|j|_ d}| |ddSr) rZ ParserCreate_parser_targetstartZStartElementHandlerendZEndElementHandlerrNZCharacterDataHandlerxml)rtargetparserencodingr r r rszExpatParser.__init__cCs|j|ddS)NF)rdParserMr r r feedszExpatParser.feedcCs6z |j}WntyYn0|`|`|dddS)NrXT)rdAttributeErrorrerl)rrjr r r closes   zExpatParser.closeN)rrrrrmror r r r rcs rcc@seZdZdddZiZddZddZd d Zeeed<d d Z e ee <d dZ e ee <e Z ddZeee<efddZeee<ddZeee<eee<ddZeee<eee<efddZeee<ddZeee<ddZeee<eee<eed<dS) MarshallerNFcCsi|_d|_||_||_dSr)memorNrk allow_none)rrkrrr r r rszMarshaller.__init__cCsg}|j}|j}t|tr@|d||j|jd||dn4|d|D]}|d||||dqL|dd|}|S) Nz )r#r$z z z z z )append_Marshaller__dumpr5r"r#r$join)rvaluesrRrQdumpvresultr r r dumpss&     zMarshaller.dumpscCsz|jt|}Wndtyvt|ds:tdt|t|jD]"}||jvrDtdt|qD|jd}Yn0||||dS)N__dict__zcannot marshal %s objects_arbitrary_instance)dispatchtypeKeyErrorr>r[__mro__keys)rr0rQftype_r r r Z__dumps  zMarshaller.__dumpcCs|jstd|ddS)Nz0cannot marshal None unless allow_none is enabledz)rrr[rr0rQr r r dump_nilszMarshaller.dump_nilcCs$|d||rdpd|ddS)Nz10z r rr r r dump_bool szMarshaller.dump_boolcCs<|tks|tkrtd|d|tt||ddS)Nzint exceeds XML-RPC limitsz z )MAXINTMININT OverflowErrorr<intrr r r dump_long&s zMarshaller.dump_longcCs |d|t||ddS)Nzz )reprrr r r dump_double1s zMarshaller.dump_doublecCs |d||||ddS)Nzz r )rr0rQr r r r dump_unicode7s zMarshaller.dump_unicodecCs,|dt|}||d|ddSr^)r\r`rO)rr0rQrar r r dump_bytes=s zMarshaller.dump_bytescCsZt|}||jvrtdd|j|<|j}|d|D]}|||q6|d|j|=dS)Nz"cannot marshal recursive sequencesz z )rKrqr[ru)rr0rQirxryr r r dump_arrayEs   zMarshaller.dump_arraycCst|}||jvrtdd|j|<|j}|d|D]D\}}|dt|ts\td|d||||||dq:|d|j|=dS)Nz%cannot marshal recursive dictionariesz z zdictionary key must be stringz%s z z )rKrqr[ruitemsr5r<)rr0rQr rrxkryr r r dump_structSs     zMarshaller.dump_structcCs |d|t||ddSrP)r:rr r r dump_datetimees zMarshaller.dump_datetimecCs2|jtvr ||_|||`n||j|dSr)rWRAPPERSrQrSrr|rr r r dump_instanceks   zMarshaller.dump_instancer})NF) rrrrr~r{rurrrboolrrZdump_intrfloatr rr<rrYrZrr6listrdictrrrr;rWr r r r rps:      rpc@sjeZdZdDddZddZddZdd Zd d Zd d ZddZ ddZ iZ ddZ e e d<ddZ e e d<ddZee d<ee d<ee d<ee d<ee d<ee d<d d!Zee d"<ee d#<d$d%Zee d&<d'd(Zee d)<ee d*<d+d,Zee d-<d.d/Zee d0<d1d2Zee d3<d4d5Zee d6<d7d8Zee d9<d:d;Zee d<<d=d>Zee d?<d@dAZee dB<dCS)E UnmarshallerFcCsHd|_g|_g|_g|_d|_d|_d|_|jj|_|p:||_||_ dS)NFutf-8) _type_stack_marks_data_value _methodname _encodingrt _use_datetime _use_bytes)r use_datetimeuse_builtin_typesr r r rs  zUnmarshaller.__init__cCs>|jdus|jrt|jdkr4tfi|jdt|jS)Nfaultr)rrr!r"rr6rr r r ros  zUnmarshaller.closecCs|jSr)rrr r r getmethodnameszUnmarshaller.getmethodnamecCs ||_dSr)r)rrkZ standaloner r r rhszUnmarshaller.xmlcCshd|vr|dd}|dks&|dkr8|jt|jg|_|jrZ||jvrZtd||dk|_dS)N:arraystructzunknown tag %rr0) splitrrtlenrrrr~r!)rtagattrsr r r rfs zUnmarshaller.startcCs|j|dSr)rrt)rtextr r r rNszUnmarshaller.datac Csrz|j|}WnPty^d|vr*YdSz|j|dd}WntyXYYdS0Yn0||d|jS)Nrrrs)r~rrrvr)rrrr r r rgs  zUnmarshaller.endc Csjz|j|}WnPty^d|vr*YdSz|j|dd}WntyXYYdS0Yn0|||S)Nrr)r~rr)rrrNrr r r end_dispatchs  zUnmarshaller.end_dispatchcCs|dd|_dSNr)rtrrMr r r end_nils zUnmarshaller.end_nilnilcCs:|dkr|dn|dkr(|dntdd|_dS)NrFrTzbad boolean valuer)rtr[rrMr r r end_booleans   zUnmarshaller.end_booleanbooleancCs|t|d|_dSr)rtrrrMr r r end_intszUnmarshaller.end_intZi1Zi2Zi4Zi8rZ bigintegercCs|t|d|_dSr)rtrrrMr r r end_doubleszUnmarshaller.end_doubleZdoublercCs|t|d|_dSr)rtrrrMr r r end_bigdecimalszUnmarshaller.end_bigdecimalZ bigdecimalcCs&|jr||j}||d|_dSr)rrOrtrrMr r r end_strings  zUnmarshaller.end_stringstringnamecCs.|j}|j|dg|j|d<d|_dSr)rpoprr)rrNmarkr r r end_arrays zUnmarshaller.end_arrayrcCs`|j}i}|j|d}tdt|dD]}||d|||<q,|g|j|d<d|_dS)Nrrr&)rrrrangerr)rrNrrrrr r r end_struct s zUnmarshaller.end_structrcCs6t}||d|jr"|j}||d|_dS)Nr_r)rWrOrSrrNrtrrrNr0r r r end_base64s  zUnmarshaller.end_base64r\cCs,t}|||jrt|}||dSr)r;rOrrVrtrr r r end_dateTime s  zUnmarshaller.end_dateTimezdateTime.iso8601cCs|jr||dSr)rrrMr r r end_value(szUnmarshaller.end_valuer0cCs d|_dS)NparamsrrMr r r end_params/szUnmarshaller.end_paramsrcCs d|_dS)NrrrMr r r end_fault3szUnmarshaller.end_faultrcCs"|jr||j}||_d|_dS)N methodName)rrOrrrMr r r end_methodName7s zUnmarshaller.end_methodNamerN)FF)rrrrrorrhrfrNrgrr~rrrrrrrrrrrrrrr r r r rsX   rc@s$eZdZddZddZddZdS)_MultiCallMethodcCs||_||_dSr)_MultiCallMethod__call_list_MultiCallMethod__name)rZ call_listrr r r rDsz_MultiCallMethod.__init__cCst|jd|j|fSNz%s.%s)rrrrrr r r __getattr__Gsz_MultiCallMethod.__getattr__cGs|j|j|fdSr)rrtrrargsr r r __call__Isz_MultiCallMethod.__call__Nrrrrrrr r r r rAsrc@seZdZddZddZdS)MultiCallIteratorcCs ||_dSr)results)rrr r r rPszMultiCallIterator.__init__cCsR|j|}t|tikr.t|d|dn t|tgkrF|dStddS)Nr#r$rz#unexpected type in multicall result)rrr"r))rritemr r r __getitem__Ss  zMultiCallIterator.__getitem__N)rrrrrr r r r rLsrc@s,eZdZddZddZddZddZd S) MultiCallcCs||_g|_dSr)_MultiCall__server_MultiCall__call_list)rserverr r r rmszMultiCall.__init__cCsd|jjt|fS)Nz <%s at %#x>)rrrKrr r r rqszMultiCall.__repr__cCs t|j|Sr)rrrr r r rtszMultiCall.__getattr__cCs6g}|jD]\}}|||dq t|jj|S)N)rr)rrtrrsystemZ multicall)rZmarshalled_listrrr r r rwszMultiCall.__call__N)rrrrrrrr r r r r\srFcCsrtrHtrH|rt}tj}n|r&t}t}nt}t}tdd||t}t|}n"t||d}trbt|}nt |}||fS)NTFrr) FastParserFastUnmarshallerrVr\r]rbrUr"rrc)rrZ mkdatetimeZmkbytesrirjr r r getparsers    rcCst|trd}n|rt|tr|s&d}tr4t|}n t||}||}|dkr^dt|}nd}|rx|d|d|df}n|r|d|d f}n|Sd |S) Nr&rz$ z z z z z z rs)r5r"r6FastMarshallerrpr{r<rv)r methodnameZmethodresponserkrrmrNZ xmlheaderr r r r{s6    r{cCs2t||d\}}|||||fSNr)rrmror)rNrrpur r r loadss  rcCsPtstt}tjd|dd}||Wdn1s>0Y|S)Nwbr&)modefileobj compresslevel)gzipNotImplementedErrorrGzipFilerQgetvalue)rNrgzfr r r gzip_encodes (r@c Cststtjdt|dP}z$|dkr0|}n||d}WntyZtdYn0Wdn1sp0Y|dkrt||krtd|S)Nrbrrrr&z invalid dataz#max gzipped payload length exceeded)rrrrreadOSErrorr)r)rNZ max_decoderZdecodedr r r gzip_decode)s  ,rc@seZdZddZddZdS)GzipDecodedResponsecCs.tstt||_tjj|d|jddS)Nrr)rrrriorr)rresponser r r rGszGzipDecodedResponse.__init__cCs,ztj|W|jn |j0dSr)rrrorrr r r roOszGzipDecodedResponse.closeN)rrrrror r r r rCsrc@s$eZdZddZddZddZdS)_MethodcCs||_||_dSr _Method__send _Method__name)rsendrr r r r\sz_Method.__init__cCst|jd|j|fSr)rrrrr r r r_sz_Method.__getattr__cGs||j|Srrrr r r rasz_Method.__call__Nrr r r r rYsrc@seZdZdeZdZdZdddddZdd d Zdd d Z d dZ ddZ ddZ ddZ ddZddZddZddZdS) TransportzPython-xmlrpc/%sTNFr )rcCs&||_||_d|_t||_g|_dSN)NN)r_use_builtin_types _connectionr_headers_extra_headers)rrrrr r r rxs  zTransport.__init__c CsdD]v}z|||||WStjjy:|r6Yqtyx}z(|sb|jtjtjtjfvrdWYd}~qd}~00qdS)N)rr&) single_requesthttpclientZRemoteDisconnectedrerrnoZ ECONNRESETZ ECONNABORTEDEPIPE)rhosthandler request_bodyverboserer r r requestszTransport.requestcCsz8|||||}|}|jdkr6||_||WSWn.tyLYntyf|Yn0|ddr|| t |||j|j t | dS)Nzcontent-lengthrs) send_requestZ getresponsestatusrparse_responser" Exceptionro getheaderrrreasonrZ getheaders)rrrrrZ http_connZrespr r r rs$     zTransport.single_requestcCst|j|jdSr)rrr rr r r rszTransport.getparsercCsri}t|tr|\}}tj|\}}|rdtj|}t|d}d | }dd|fg}ng}|||fS)NrrsZ AuthorizationzBasic ) r5r6urllibparse _splituserunquote_to_bytesr\r`rOrvr)rrx509ZauthZ extra_headersr r r get_host_infos   zTransport.get_host_infocCsL|jr||jdkr|jdS||\}|_}|tj|f|_|jdS)Nrr&)r r%r rrZHTTPConnectionrrZchostr$r r r make_connections  zTransport.make_connectioncCs |j\}}|rd|_|dSr )r ro)rr connectionr r r ros zTransport.closecCs||}|j|j}|r$|d|jrJtrJ|jd|dd|dn |d||d|d|jf| ||| |||S)Nr&ZPOSTT)Zskip_accept_encoding)zAccept-Encodingr)z Content-Typeztext/xmlz User-Agent) r'r r Zset_debuglevelaccept_gzip_encodingrZ putrequestrt user_agent send_headers send_content)rrrrdebugr(rr r r rs         zTransport.send_requestcCs|D]\}}|||qdSr) putheader)rr(rkeyvalr r r r+s zTransport.send_headerscCsR|jdur0|jt|kr0tr0|ddt|}|dtt|||dS)NContent-EncodingrzContent-Length)encode_thresholdrrr.rr<Z endheaders)rr(rr r r r, s   zTransport.send_contentcCst|dr*|dddkr$t|}q.|}n|}|\}}|d}|sJqj|jr^tdt|||q:||urz| | | S)Nrr1rsrizbody:) r>rrrrrprintrrmro)rrstreamrrrNr r r r1s      zTransport.parse_response)FF)F)F)rrr __version__r*r)r2rrrrr%r'rorr+r,rr r r r rjs   ! rcs.eZdZd dddfdd ZddZZS) SafeTransportFr Nrcontextcstj|||d||_dS)Nrrr)superrr8)rrrrr8rr r rRs zSafeTransport.__init__cCst|jr||jdkr|jdSttjds2td||\}|_}|tjj|dfd|ji|p`if|_|jdS)Nrr&HTTPSConnectionz1your version of http.client doesn't support HTTPSr8) r r>rrrr%r r<r8r&r r r r'[s    zSafeTransport.make_connection)FF)rrrrr' __classcell__r r r;r r6Os r6c@sVeZdZddddddZddZd d Zd d Zd dZddZddZ ddZ dS) ServerProxyNFr r7c Cstj|} | jdvrtd| j|_tjddg| dd|_|jsPd|_|dur| jdkrpt } d| i} nt } i} | f|||d| }||_ |pd |_ ||_ ||_dS) N)rhttpszunsupported XML-RPC protocolrsrz/RPC2r?r8r9r)r r!urlsplitschemernetloc_ServerProxy__host urlunsplit_ServerProxy__handlerr6r_ServerProxy__transport_ServerProxy__encoding_ServerProxy__verbose_ServerProxy__allow_none) rZuri transportrkrrrrrrr8rrZ extra_kwargsr r r rs.     zServerProxy.__init__cCs|jdSr)rFrorr r r Z__closeszServerProxy.__closecCsPt|||j|jd|jd}|jj|j|j||jd}t |dkrL|d}|S)N)rkrrxmlcharrefreplace)rr&r) r{rGrIrSrFrrCrErHr)rrrrrr r r Z __requests  zServerProxy.__requestcCsd|jj|j|jfS)Nz <%s for %s%s>)rrrCrErr r r rszServerProxy.__repr__cCs t|j|Sr)r_ServerProxy__requestrr r r rszServerProxy.__getattr__cCs.|dkr|jS|dkr|jStd|fdS)NrorJzAttribute %r not found)_ServerProxy__closerFrn)rattrr r r rs zServerProxy.__call__cCs|Srr rr r r __enter__szServerProxy.__enter__cGs |dSr)rMrr r r __exit__szServerProxy.__exit__)NNFFFF) rrrrrMrLrrrrOrPr r r r r>zs  r>__main__zhttp://localhost:8000ERROR )FF)NNNF)FF)r)Ur\sysr7rdecimalrZ http.clientr urllib.parser Z xml.parsersrrrrr ImportErrorr version_infor5rrZ PARSE_ERRORZ SERVER_ERRORZAPPLICATION_ERRORZ SYSTEM_ERRORZTRANSPORT_ERRORZNOT_WELLFORMED_ERRORZUNSUPPORTED_ENCODINGZINVALID_ENCODING_CHARZINVALID_XMLRPCZMETHOD_NOT_FOUNDZINVALID_METHOD_PARAMSZINTERNAL_ERRORrrrr!r"rrZBooleanr'r+r1r:r;rUrVrWrbrrcrprrrrrrrrr{rrrrrrrrr6r>ZServerrrr3Z currentTimeZgetCurrentTimeryZmultiZgetDatapowaddrr r r r s              R #!(C %  ' K  f+i