ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ ;Pc@sVdZddlmZddlmZddlmZmZddlTddl m Z ddl m Z ddl Z ddlZddlZddlZddlZddlZddlZddlZd efd YZd fd YZd ejfdYZdfdYZdejfdYZdZdZeaea dS(s4 Support remote access to a Python interpreter. i(tcmd(thpy(theapyctTarget(t*(tConsole(t mutbitsetNt SocketClosedcBseZRS((t__name__t __module__(((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyRstIsolatedCallercBseZdZdZRS(cCs ||_dS(N(tfunc(tselfR ((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyt__init__scOs|j||S(N(R (R targstkwds((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyt__call__s(RR R R(((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyR s tQueueWithReadlinecBseZddZRS(icCs9x2y|jddSWqtjk r0qqXqWdS(Nttimeoutg?(tgettQueuetEmpty(R tsize((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pytreadline s (RR R(((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyRst NotiInputcBs)eZdZddZddZRS(cCs||_||_dS(N(tinputtoutput(R RR((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyR ,s icCs |j|S(N(R(R R((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pytread0scCs |jjt|jj|S(N(RtwritetREADLINERR(R R((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyR4s(RR R RR(((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyR+s  tAnnexcBseZejZejZdZdZddZ dZ dZ dZ dZdZdZejjZd ZeZd Zd Zd Zd ZdZdZdZdZdZdZ dZ!dZ"dZ#RS(is cCstjj||dkr%t}nt|f|_||_t|j |_ d|_ d|_ t j|_i|_|jddS(Nit(RtCmdR tNonet HEAPYPORTt LOCALHOSTtserver_addressttargetR t asynch_closetclosetsockettisclosedtthreadt allocate_lockt closelockt intlocalstdo_reset(R R%tport((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyR >s      cCsE|jjz#|js/d|_|jnWd|jjXdS(Ni(R,tacquireR)t disconnecttrelease(R ((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyR&Ps    cCs)tj|j|j|_xo|jsy|jj|jWnCtk rTqtjk r|jrsntj dqXPqWdS|jj ddd|_ t |jj d|j |_ tj|_tjd krd|_n|jd|_tjj|d|j d |j dS( Nitwtbufsizeitriitstdintstdout(ii(R(taddress_familyt socket_typeR)tconnectR$t SystemExitterrorttimetsleeptmakefileR7RR6tsyststderrt version_infot interruptibletstart_ki_threadRR R (R ((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyR:bs*    !    csttjtddj_jfd}tjd|dd}|jdS(NRRcszjdj}xpjkrjj}|s>Pn|tkrujkrtjjj t qqj |qWWdjkrtjjj t nXdS(Nthp( R-t _hiding_tag_R(RRtKEYBOARDINTERRUPTRt set_async_excR%t annex_threadtKeyboardInterrupttputR(RFtline(tostdintqueueR R((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pytruns  R%R((RR6RRR(t threadingtThreadtstart(R ROtth((RMRNR R(sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyRDs     cCsl|j}|dkrdSd|_y|jtWnnXy|jWnnXdt_tjdS(N(R(R!tsendtDONER'R@tlast_tracebackt exc_clear(R R(((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyR1s    cCs|jdS(Ni(R&(R targ((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pytdo_closes cCs|jdIJdS(Nsclose ----- Close and disable this remote connection completely. It can then not be reopened other than by some command from within the target process. Normally you shouldn't need to use this command, because you can return to the Monitor via other commands ( or .) keeping the connection open. But it might be useful when you want to get rid of the remote control interpreter and thread, if it uses too much memory or disturbs the target process in some other way.(R7(R ((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyt help_closes cCs|jdIJdS(Nsh(elp) ----- Without argument, print the list of available commands. With a command name as argument, print help about that command.(R7(R ((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pythelp_hscCstj}tj}tj}z`|jt_|jt_|jt_tdtjdtjd|j}|jd|jWd|t_|t_|t_XdS(NR6R7tlocalss8Remote interactive console. To return to Annex, type %r.(R@R6R7RARR-tinteracttEOF_key_sequence(R RXRMtostdouttostderrtcon((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pytdo_ints         cCs|jdIJdS(Ns{int ----- Interactive console. Bring up a Python console in the Remote Control interpreter. This console will initially have access to a heapy constructor, named hpy, and a ready-made instance, named hp, and the target (see also the reset command). Other things may be imported as needed. After returning to the Annex (by q) or to the Monitor (by . or ), the data in the interactive console will remain there - and will be available till the next time the console is entered. But the data may be cleared and reset to the initial state - a new heapy instance will be created - by the 'reset' command of Annex. It should be noted that the interpreter thread under investigation is executing in parallell with the remote control interpreter. So there may be some problems to do with that if both are executing at the same time. This has to be dealt with for each case specifically.(R7(R ((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pythelp_intst a1e55f5dc4c9f708311e9f97b8098cd3c Cs|jd}g}||_g}||j|j or .s4To close this connection ('permanently'), type close(R7(R RX((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pytdo_q6s cCs|jdIJdS(Nsq ----- Quit. This doesn't currently do anything except printing a message. (I thought it would be too confusing to have a q (quit) command from the Annex, when there was a similarly named command in the Monitor.)(R7(R ((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pythelp_q:scCsV|jj|jji|jd6|jd6|jd6|jd|jdRRHR;(RrR'((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pytoffs   (!t__doc__t guppy.etcRRRt guppy.heapyRRtguppy.heapy.RemoteConstantstguppy.heapy.ConsoleRt guppy.setsRtosR(R@R=R*RPRRt ExceptionRR RRR RRRR!RIR%(((sE/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/Remote.pyts" `  e