ÿØÿà JFIF    ÿÛ „  ( %"1!%)+...383,7(-.+  -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ  ß â" ÿÄ     ÿÄ H    !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ   ÿÄ %  !1AQa"23‘ÿÚ   ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6  öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷󲍷˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%ÌÁ²h´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ǍýʏTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆѪQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$˝Úsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇ l¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉ䢍mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ­‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U  Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ." ¤‡ú*õ'VŽ|¼´Úgllº¼klz[Æüï÷Aób‡Eÿ dÑ»Xx9ÃÜ£ÁT/`¼¸vI±Ýµ·Ë‚“G³þ*Ÿû´r|*}<¨îºœ @¦mÄ’M¹”.œ«Y–|6ÏU¤jç¥ÕÞqO ˜kDÆÁ¨5ÿ š;ÐЦ¦€GÙk \ –Þ=â¼=SͧµªS°ÚÍpÜãQűÀõ¬?ÃÁ1Ñ•õZà?hóœ€ L¦l{Y*K˜Ù›zc˜–ˆâ ø+¾ ­-Ök¥%ùEÜA'}ˆ><ÊIè“bpÍ/qÞâvoX€w,\úªò6Z[XdÒæ­@Ö—€$òJí#é>'°Ú ôª˜<)4ryÙ£|óAÅn5žêŸyÒäMÝ2{"}‰–¤l÷ûWX\l¾Á¸góÉOÔ /óñB¤f¸çñ[.P˜ZsÊË*ßT܈§QN¢’¡¨§V¼(Üù*eÕ“”5T¨‹Âê¥FŒã½Dü[8'Ò¥a…Ú¶k7a *•›¼'Ò·\8¨ª\@\õ¢¦íq+DÙrmÎ…_ªæ»ŠÓœ¡¯’Ré9MÅ×D™lælffc+ŒÑ,ý™ÿ ¯þǤ=Å’Á7µ÷ÚÛ/“Ü€ñýã¼àí¾ÕÑ+ƒ,uµMâÀÄbm:ÒÎPæ{˜Gz[ƒ¯«® KHà`ߨŠéí¯P8Aq.C‰ à€kòpj´kN¶qô€…Õ,ÜNŠª-­{Zö’æû44‰sŽè‰îVíRœÕm" 6?³D9¡ÇTíÅꋇ`4«¸ÝÁô ï’ýorqКÇZ«x4Žâéþuïf¹µö[P ,Q£éaX±`PÉÍZ ¸äYúg üAx ’6Lê‚xÝÓ*äQ  Ï’¨hÍ =²,6ï#rÃ<¯–£»ƒ‹,–ê•€ aÛsñ'%Æ"®ÛüìBᝠHÚ3ß°©$“XnœÖ’î2ËTeûìxîß ¦å¿çÉ ðK§þ{‘t‚Ϋ¬jéîZ[ ”š7L¥4VÚCE×]m¤Øy”ä4-dz£œ§¸x.*ãÊÊ b÷•h:©‡¦s`BTÁRû¾g⻩‹jø sF¢àJøFl‘È•Xᓁà~*j¯ +(ÚÕ6-£¯÷GŠØy‚<Ç’.F‹Hœw(+)ÜÜâÈzÄäT§FߘãÏ;DmVœ3Àu@mÚüXÝü•3B¨òÌÁÛ<·ÃÜ z,Ì@õÅ·d2]ü8s÷IôÞ¯^Ç9¢u„~ëAŸï4«M? K]­ÅàPl@s_ p:°¬ZR”´›JC[CS.h‹ƒïËœ«Æ]–÷ó‚wR×k7X‰k›‘´ù¦=¡«‰¨¨Â')—71ó’c‡Ðúµ `é.{§p¹ój\Ž{1h{o±Ý=áUÊïGÖŒõ–-BÄm+AZX¶¡ ïHðæ¥JmÙ;…䡟ˆ¦ ° äšiÉg«$üMk5¤L“’çÊvïâï ,=f“"íἊ5ô¬x6{ɏžID0e¸vçmi'︧ºð9$ò¹÷*£’9ÿ ²TÔ…×>JV¥}Œ}$p[bÔ®*[jzS*8 ”·T›Í–ñUîƒwo$áè=LT™ç—~ô·¤ÈÚ$榍q‰„+´kFm)ž‹©i–ËqÞŠ‰à¶ü( ‚•§ •°ò·‡#5ª•µÊ﯅¡X¨šÁ*F#TXJÊ ušJVÍ&=iÄs1‚3•'fý§5Ñ<=[íÞ­ PÚ;ѱÌ_~Ä££8rÞ ²w;’hDT°>ÈG¬8Á²ÚzŽ®ò®qZcqJêäÞ-ö[ܘbň±çb“ж31²n×iƒðÕ;1¶þÉ ªX‰,ßqÏ$>•î íZ¥Z 1{ç൵+ƒÕµ¥°T$§K]á»Ûï*·¤tMI’ÂZbŽÕiÒ˜}bÓ0£ª5›¨ [5Ž^ÝœWøÂÝh° ¢OWun£¤5 a2Z.G2³YL]jåtì”ä ÁÓ‘%"©<Ôúʰsº UZvä‡ÄiÆÒM .÷V·™ø#kèýiíÌ–ª)µT[)BˆõÑ xB¾B€ÖT¨.¥~ð@VĶr#¸ü*åZNDŽH;âi ],©£öØpù(šºãö¼T.uCê•4@ÿ GÕÛ)Cx›®0ø#:ÏðFÒbR\(€€Ä®fã4Þ‰Fä¯HXƒÅ,†öEÑÔÜ]Öv²?tLÃvBY£ú6Êu5ÅAQ³1‘’¬x–HŒÐ‡ ^ ¸KwJôÖŽ5×CÚ¨vÜ«/B0$×k°=ðbÇ(Ï)w±A†Á† 11Í=èQšµ626ŒÜ/`G«µ<}—-Ö7KEHÈÉðóȤmݱû±·ø«Snmá=“䫚mݱŸ¡¶~ó·“äUóJæúòB|E LêŽy´jDÔ$G¢þÐñ7óR8ýÒ…Ç› WVe#·Ÿ p·Fx~•ݤF÷0Èÿ K¯æS<6’¡WШ; ´ÿ ¥Êø\Òuî†åÝ–VNœkÒ7oòX¨Á­Ø÷FÎÑä±g÷ÿ M~Çî=p,X´ ÝÌÚÅ‹’ÃjÖ.ØöÏñ qïQ¤ÓZE†° =6·]܈ s¸>v•Ž^Ý\wq9r‰Î\¸¡kURÒ$­*‹Nq?Þª*!sŠÆ:TU_u±T+øX¡ ®¹¡,ÄâÃBTsÜ$Ø›4m椴zÜK]’’›Pƒ @€#â˜`é¹=I‡fiV•Ôî“nRm+µFPOhÍ0B£ €+¬5c v•:P'ÒyÎ ‰V~‚Ó†ÖuókDoh$å\*ö%Ю=£«…aȼ½÷Û.-½VŒŠ¼'lyî±1¬3ó#ÞE¿ÔS¤gV£m›=§\û"—WU¤ÚǼÿ ÂnÁGŒÃ ‚õN D³õNÚíŒÕ;HôyÄÈ©P¹Ä{:?R‘Ô¨âF÷ø£bÅó® JS|‚R÷ivýáâ€Æé¡è³´IئÑT!§˜•ت‚¬â@q€wnïCWÄ@JU€ê¯m6]Ï:£âx'+ÒðXvÓ¦Úm=–´7œ $ì“B£~p%ÕŸUþ« N@¼üï~w˜ñø5®—'Ôe»¤5ã//€ž~‰Tþ›Å7•#¤× Íö pÄ$ùeåì*«ÓŠEØWEÈsßg ¦ûvžSsLpºÊW–âµEWöˬH; ™!CYõZ ÃÄf æ#1W. \uWâ\,\Çf j’<qTbên›Î[vxx£ë 'ö¨1›˜ÀM¼Pÿ H)ƒêêŒA7s,|F“ 꺸k³9Ìö*ç®;Ö!Ö$Eiž•¹ÒÚ†ýóéÝû¾ÕS®ó$’NÝäŸz¤5r¦ãÄÃD÷Üø!°ø‡Ô&@m™Ì^Ãä­d q5Lnÿ N;.6½·N|#ä"1Nƒx“ã<3('&ñßt  ~ªu”1Tb㫨9ê–›–bìd$ߣ=#ÕãÒmU¯eí$EFù5ýYô櫨æì™Ç—±ssM]·á¿0ÕåJRÓªîiƒ+O58ÖñªŠÒx" \µâá¨i’¤i —Ö ” M+M¤ë9‚‰A¦°Qõ¾ßøK~¼Ã‘g…Ö´~÷Ï[3GUœÒ½#…kàÔ®Ò”‰³·dWV‰IP‰Ú8u¹”E ÖqLj¾êÕCBš{A^Âß;–¨`¯¬ìö ˼ ×tìø.tƐm*n¨y4o&Àx¥n¦×î‡aupáÛj8¿m›è¶ã!o½;ß0y^ý×^EÑ¿ÒjzŒ­)vÚÑnÄL …^ªô× ‡—‚3k Îý­hï]içå–îÏ*÷ñþ»Ô CÒjøjÍznˆ´ ¹#b'Fô‹ ‰v¥'’à'T´ƒHýÍ%M‰ ƒ&ÆÇŒï1 ‘ –Þ ‰i¬s žR-Ÿ kЬá¬7:þ 0ŒÅÒÕ/aÙ¬ÃÝ#Úøœ ©aiVc‰. ¹¦ãµ” ›Yg¦›ÆÎýº°f³7ƒhá·¸­}&D9¡ÂsÉÙÞèŠõØàC™¨ñbFC|´Ü(ŸƒÚÒ-%»'a Ì¿)ËÇn¿úÿ ÞŽX…4ÊÅH^ôΑí@ù¹Eh¶“L8Çjù ¼ÎåVªóR©Ï5uà V4lZß®=€xÖŸ–ÑÈ ÷”¨°¾__yM1tÉ?uÆþIkÄgæ@þ[¢†°XÃJ£j·:nkÅ¢u ‘}âGzö­/IµèЬ¼48q¦F°ŽR¼=ûì{´¯RýicS ÕÛ íNtÍÙï£,w4rêì®»~x(©Uñ§#Ñ&œÕ¤>ÎåÍÓ9’Ö{9eV­[Öjâ²ãu]˜å2›qÑšÕJç0€sÄ|Êëè0튔bÁ>“{×_F`Ø©ºê:µä,v¤ðfc1±"«ÔÍän1#=· Âøv~H½ÐßA¾¿Ü€Óš]Õ; I¾÷ç‚Qi†î¹9ywÔKG˜áñ zQY—§ÃÕZ07§X‚ Áh;ÁM)iÌCH-¯T‘ë|A0{Ò½LÚ–TâÖkÜ’dÀ“rmm»”جPF³ÖcbE§T€ÒxKºû’Ó®7±²(\4ŽÃ¸Uu@j™yĵ;³µ!Á¢b.W¤=mõ´êµK k ¸K^ÜÛ#p*Ü14qkZç5ïë †°5Ï%ÍÛ<Õ¤×Ô¥ê†C Õ´¼ú$ƒÖ“”]Ù¬qÞÚ[4©ý!ûÏ—Áb쳐XµA¬â~`›Çr¸8ìùÝ䫦<>ä÷«?xs´ÇÑ /á;¹øüÊÈÙà{"@Žïzâ¬[âß‚ U_<ÇŸ½4èN˜ú61®qŠu ¦þF£»äJ_ˆÙÎ~ ÞAã–݄ϗrŠD;xTž‘ô`É«…suãO`?³à™ô Lý#Íc5öoæØ‚y´´÷«ZR§<&JÇ+éâô´€i!Àˆ0æAoàðLèÖ-2ŸõW.’t^–(KÁmHµV@xÜÇy®Ñø­â^:Ú3w· 7½¹°ñ¸â¹®:',«Mœ—n­Á+Ãbš LÈ‘ÄnRÓÅœ%¦²‰¨ùQ:¤f‚ "PÕtô¸…cæl…&˜Ú˜Ôkv‹ž+vŠ,=¢v­6—Xy*¥t£«<™:“aîϲ=¦6rO]XI¿Œ÷¤zÚ­›¶ 6÷”w\d ü~v®ˆÌk«^m<ÿ ¢‰Õ\)ùºŽ;… lîÙÅEŠ®cѾ@vnMÏ,¼“ñ•ŽBxðÃzãÇç%3ˆ"}Ù•Åî> BÉú;Ò]V+P˜F_´ßé> Øše|ï‡ÄOmFæÇ ãqÞ$/xÐx­z`ï9"œÜij‚!7.\Td…9M‡•iŽ‹¾‘50ÞŽn¥ß4ÉôO ¹*í^QêËÜÇÌ8=ާs‰'ÂëÙ«á%Pú[O †ÅP¯Vsް.‰,kc¶ ¬A9n˜XÎ-ÞšN["¹QÕ‰ƒMýÁߺXJæÍaLj¾×Ãmã¾ãÚ uñÒþåQô¦¥ /ÄUx:‚ÍÜ’ Đ©ØÝ3V¨‰ÕnÐ6ó*óúK­«…c ¯U òhsý­jóÔj#,ímŒRµ«lbïUTŒÑ8†Ä0œÏr`ð¡¬É Ї ë"À² ™ 6¥ f¶ ¢ÚoܱԷ-<Àî)†a¶ž'Ú»¨TXqØæ¶÷YÄHy˜9ÈIW­YÀuMFë ºÏ’AqÌ4·/Ú †ô'i$øä­=Ä Ý|öK×40è|È6p‘0§)o¥ctî§H+CA-“ xØ|ÐXАç l8íºð3Ø:³¤¬KX¯UÿÙ  *tWc@sddlZddlZddlZddlZddlZddlZddlZddlZyddlZWne k rddl ZnXyddl m Z Wn!e k rddl mZ nXddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZd d,d YZd d-dYZdd.dYZdd/dYZdd0dYZdejfdYZdej fdYZ!dejfdYZ"de"fdYZ#de"fdYZ$dd1d YZ%d!d2d"YZ&d#d3d$YZ'd%Z(d&d4d'YZ)d(d5d)YZ*d*efd+YZ+dS(6iN(tsha1(tnew(t asyncore_25(t http_date(t http_server(t producers(tfilesys(tdefault_handler(t auth_handlert NOT_DONE_YETcBseZRS((t__name__t __module__(((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyR stdeferring_chunked_producercBs#eZdZddZdZRS(s'A producer that implements the 'chunked' transfer coding for HTTP/1.1. Here is a sample usage: request['Transfer-Encoding'] = 'chunked' request.push ( producers.chunked_producer (your_producer) ) request.done() cCs||_||_d|_dS(Ng?(tproducertfooterstdelay(tselfR R((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyt__init__*s  cCs~|jrv|jj}|tkr(tS|rBdt||fSd|_|jrodjdg|jdSdSndSdS(Ns%x %s s t0s s0 t(R tmoreR tlentNoneRtjoin(Rtdata((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyR/s    N(R R t__doc__RRR(((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyR s tdeferring_composite_producercBs eZdZdZdZRS(s$combine a fifo of producers into onecCs||_d|_dS(Ng?(RR(RR((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRAs cCsaxZt|jrX|jd}|j}|tkr;tS|rE|S|jjdqWdSdS(NiR(RRRR tpop(Rtptd((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyREs   (R R RRR(((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyR?s tdeferring_globbing_producercBs#eZdZddZdZRS(s 'glob' the output from a producer into a particular buffer size. helps reduce the number of calls to send(). [this appears to gain about 30% performance on requests to a single channel] iicCs(||_d|_||_d|_dS(NRg?(R tbuffert buffer_sizeR(RR R ((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRZs   cCsnxUt|j|jkrW|jj}|tkr:tS|rS|j||_qPqW|j}d|_|S(NR(RRR R RR (RRtr((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyR`s   i(R R RRR(((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRSs tdeferring_hooked_producercBs eZdZdZdZRS(s A producer that will call when it empties,. with an argument of the number of bytes produced. Useful for logging/instrumentation purposes. cCs(||_||_d|_d|_dS(Nig?(R tfunctiontbytesR(RR R#((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRus   cCsl|jrd|jj}|tkr(tS|sJd|_|j|jn|jt||_|SdSdS(NR(R RR RR#R$R(Rtresult((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyR{s   (R R RRR(((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyR"ns tdeferring_http_requestcBs2eZdZdZdZdZdZRS(s The medusa http_request class uses the default set of producers in medusa.producers. We can't use these because they don't know anything about deferred responses, so we override various methods here. This was added to support tail -f like behavior on the logtail handler c Ostjtj|j}|j}d}d}d}|jdkr||dkrsd|krfd}qyd|deZdZdZejZddZdZdZ RS(iicCsp|dkrtj}n|jr`||j}||jksL|dkrY||_tStSntjj|S(Ni( RRGRtlast_writable_checktTruetFalseRt http_channeltwritable(Rtnowtelapsed((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRRs    cCsxt|jr|jj}|dkrT|jsP|jj|jndSt|tr|jj|j||_dS|j }|t kr|j |_ dS|r|j||_t |_ dS|jjqdSqWdS(s Implement deferreds N( Rt producer_fifotfirstRt ac_out_bufferRR(t isinstanceReRR RR(RRR((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyt refill_bufferas,         cCs5|jr|jjn|j}d|_|jd}x|r[|d r[|d}q=W|sp|jdS|d}tj|\}}}tj|d}tj|\}}d|kr|rtj |d|}qtj |}nt ||||||} |j j |j jj |dkrg|jdt|d | jd dSx|j jD]} | j| rty| |_| j| Wnv|j jj tj\\} } } }}}|j jd ||| | fd y| jd WqqXnXdSqtW| jd dS(s We only override this to use 'deferring_http_request' class instead of the normal http_request class; it sucks to need to override this Rs iiNRPt?sBad HTTP request: %sterroris'Server Error: %s, %s: file: %s line: %sii(R7tfound_terminatort in_bufferRkR8Rt crack_requestt join_headerst splitqueryRbR&trequest_countert incrementRDttotal_requestsRtlog_infotreprRthandlerstmatchthandle_requestt exceptionstasyncoretcompact_traceback(RR,tlinesRHRcturiR.trpathtrqueryR!thtfiletfuntlinetttvttbinfo((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRsX           ! N( R R tac_out_buffer_sizeRRGRRRRR(((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRIs    tsupervisor_http_servercBs2eZeZdZdZdZddZRS(cCsddlm}|s+|jtj}n|j|}||_tjj||j |g|_ |j d|j dS(sj Override __init__ to do logger setup earlier so it can go to our logger object instead of stdout i(REiN( tsupervisor.medusaREt file_loggertsyststdouttunresolving_loggerRt dispatcherRt set_socketRt setblockingtset_reuse_addr(Rtsockt logger_objectRE((s3/usr/lib/python2.7/dist-packages/supervisor/http.pytprebinds    cCsddlm}ddlm}|jd||_||_||_||_||_ |j d|t j t j |j |jfdS(Ni(tcounter(tVERSION_STRINGis2Medusa (V%s) started at %s Hostname: %s Port:%s (tsupervisor.medusa.counterRtsupervisor.medusa.http_serverRtlistent total_clientsRRt bytes_outtbytes_inRRGtctimeRfRK(RRR((s3/usr/lib/python2.7/dist-packages/supervisor/http.pytpostbinds      tinfocCsAd}t|dddk r*|j}n|jj||dS(NRtip(tgetattrRRRER4(RtmessagettypeR((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRs N( R R Rt channel_classRRRRR(((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRs   tsupervisor_af_inet_http_servercBseZdZdZRS(s+ AF_INET version of supervisor HTTP server cCs||_||_tjtjtj}|j|||j||f|jj\}}|s|jddtj }ytj |}Wqtj k rt d|qXnytj |d|_Wn-tj k r |jdd||_nX|jdS(NsComputing default hostnametwarningsCould not determine IP address for hostname %s, please try setting an explicit IP address in the "port" setting of your [inet_http_server] section. For example, instead of "port = 9001", try "port = 127.0.0.1:9001."isCannot do reverse lookup(RRKtsockettAF_INETt SOCK_STREAMRtbindt getsocknameRt gethostnamet gethostbynameRt ValueErrort gethostbyaddrRfR(RRRKRRRJR((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRs*    (R R RR(((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRstsupervisor_af_unix_http_servercBs eZdZdZdZRS(s+ AF_UNIX version of supervisor HTTP server c Cs||_||_d|tjf}ytj|Wntk rLnXxtjtjtj}z\|j |tj ||ytj ||Wntk r(|j |}|rtj tjnd|}tjj|ytj|WnnX|jtjdwPnXytj||d|dWngtk r} | jdtjkrd}t||t|tjtjdfqnX|j||PWdytj|Wntk rnXXqPWd|_|j dS(Ns%s.%dsUnlinking stale socket %s g333333?iisNot permitted to chown %s to uid/gid %s; adjust "sockchown" value in config file or on command line to values that the current user (%s) can successfully chowns(!RRKR_tgetpidtunlinktOSErrorRtAF_UNIXRRtchmodtlinkt checkusedRterrnot EADDRINUSERtstderrtwriteR(RGtsleeptchowntargstEPERMRRtpwdtgetpwuidtgeteuidRRfR( Rt socketnamet sockchmodt sockchownRttempnameRtusedtmsgtwhy((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyR%sZ             cCsmtjtjtj}y5|j||jd|jd|jWntjk rdtSXt SdS(NsGET / HTTP/1.0 i( RRRtconnecttsendtrecvR(RRR(RRts((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRls   (R R RRR(((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyR"s Gttail_f_producercBsGeZdZdZdZdZdZdZdZRS(cCsQ||_||_d|_|j|j}||krM|||_ndS(Ng?(RHtfilenameRt_opent_fsizetsz(RRHRtheadR((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRys      cCs|jdS(N(t_close(R((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyt__del__scCs|jy|j}Wnttfk r4dSX||j}|dkr[d|_dS|dkr|jj| d|jj|}||_|StS(NRis==> File truncated <== i( t_followRRRRRtseektreadR (Rtnewszt bytes_addedR$((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRs      cCsDt|jd|_tj|jjtj|_d|_ dS(Ntrbi( topenRRR_tfstattfilenotstattST_INOtinoR(R((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRs"cCs|jjdS(N(RR((R((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRscCsbytj|jtj}Wnttfk r7dSX|j|kr^|j|jndS(N( R_R RR RRRRR(RR((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRs cCstj|jjtjS(N(R_R RR R tST_SIZE(R((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRs( R R RRRRRRR(((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRxs     tlogtail_handlercBs/eZdZdZdZdZdZRS(sLogtail HTTP Request Handlers/logtailcCs ||_dS(N(t supervisord(RR((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRscCs|jj|jS(N(Rt startswithRi(RRH((s3/usr/lib/python2.7/dist-packages/supervisor/http.pyRscCs|jdkr |jddS|j\}}}}d|krVtj|}nx$|r||ddkr||d}qYW|jdd\}}y|jdd\}}Wntk r|}d}nXdd lm} | |\} }|j j j | } | dkr%|jd dS| j j |} | dkrT|jd dSt| jd |d} | dkstjj|  r|jd dStj| tj}tj||d sN          5V6A I