ó
‹wÛjc           @   sý  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m	 Z	 d  d l
 m Z m Z y d  d l Z Wn e k
 r¯ e Z n Xd „  Z e ƒ  \ Z Z Z e d k  rö e j d e e e f ƒ ‚ n  e j j d ƒ re j d ƒ ‚ n  e j j e j j e j ƒ d	 ƒ Z d
 „  Z e ƒ  Z d „  Z e j ƒ  rxe j d ƒ ‚ n  e d ƒ \ Z  Z! e  r£e j d ƒ ‚ n  d e j g Z" e d e j ƒ \ Z! Z# d e# k rød Z$ e j e$ e# j% ƒ  ƒ ‚ n  d „  Z& d „  Z' e' ƒ  Z( d e j) f d „  ƒ  YZ* e j+ e& ƒ  d ƒ d e* f d „  ƒ  Yƒ Z, e j+ e& ƒ  d ƒ d e* f d „  ƒ  Yƒ Z- d e* f d „  ƒ  YZ. d e* f d „  ƒ  YZ/ d e* f d  „  ƒ  YZ0 d! e* f d" „  ƒ  YZ1 d# „  Z2 e3 d$ k rùe2 ƒ  n  d S(%   iÿÿÿÿN(   t   test_support(   t   run_unittestt   findfilec          C   sÃ   yD t  j d d d g d t  j d t  j d t ƒ}  |  j ƒ  d } Wn  t k
 rf t j d ƒ ‚ n Xt j	 d	 | ƒ } | d  k r˜ t d
 | ƒ ‚ n  | t | j d ƒ ƒ t | j d ƒ ƒ f S(   Nt   gdbs   -nxs	   --versiont   stdoutt   stderrt   universal_newlinesi    s   Couldn't find gdb on the paths   ^GNU gdb.*?\b(\d+)\.(\d+)s   unable to parse GDB version: %ri   i   (   t
   subprocesst   Popent   PIPEt   Truet   communicatet   OSErrort   unittestt   SkipTestt   ret   searcht   Nonet	   Exceptiont   intt   group(   t   proct   versiont   match(    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   get_gdb_version   s    			i   sF   gdb versions before 7.0 didn't support python embedding. Saw %s.%s:
%st   sunoss&   test doesn't work very well on Solariss   python-gdb.pyc          C   sE   t  j d ƒ }  |  s t S|  j ƒ  } d | k oD t d „  | Dƒ ƒ S(   Nt   CFLAGSs   -mcetc         s   s.   |  ]$ } | j  d  ƒ o% | j d ƒ Vq d S(   s   -fcf-protections   =nones   =returnN(   s   =nones   =return(   t
   startswitht   endswith(   t   .0t   flag(    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pys	   <genexpr>F   s   (   t	   sysconfigt   get_config_vart   Falset   splitt   any(   t   cflagst   flags(    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   cet_protection>   s    	c       
   O   s¤   | r% t  j j ƒ  } | j | ƒ n d } d } t t f d k rZ | d d t f 7} n  t j	 | |  d t j
 d	 t j
 d
 t j
 d | ƒj ƒ  \ } } | | f S(   sk   Runs gdb in batch mode with the additional arguments given by *args.

    Returns its (stdout, stderr)
    R   s   --batchs   -nxi   i   s   -iexs   add-auto-load-safe-path t   stdinR   R   t   envN(   R   s   --batchs   -nx(   i   i   (   t   ost   environt   copyt   updateR   t   gdb_major_versiont   gdb_minor_versiont   checkout_hook_pathR   R   R	   R   (   t   argst   env_varsR(   t   base_cmdt   outt   err(    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   run_gdbN   s    	's3   test_gdb only works on source builds at the moment.s9   --eval-command=python import sys; print(sys.version_info)s*   gdb not built with embedded python supports   --argss   auto-loading has been declineds3   gdb security settings prevent use of custom hooks: c          C   sO   t  j ƒ  d }  d } x, |  j ƒ  D] } | j d ƒ r# | } q# q# W| d k S(   Nt	   PY_CFLAGSt    s   -Os   -O0s   -Og(   R7   s   -O0s   -Og(   R   t   get_config_varsR"   R   (   R$   t	   final_optt   opt(    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   python_is_optimizedt   s    c          C   s^   t  d ƒ \ }  } t j d |  ƒ } | s< t j d ƒ ‚ n  | j d ƒ j d ƒ } d | k S(   Ns+   --eval-command=python print(dir(gdb.Frame))s   .*\[(.*)\].*s1   Unable to parse output from gdb.Frame.select testi   s   , s   'select'(   R5   R   R   R   R   R   R"   (   R   t   _t   mt   gdb_frame_dir(    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   gdb_has_frame_select|   s    t   DebuggerTestsc           B   sP   e  Z d  Z d d d d e d „ Z d e d „ Z d „  Z d „  Z d „  Z	 RS(   s(   Test that the debugger can debug Python.t   PyObject_Printc         C   sT  d d | d d g } t  t f d k r8 | d g 7} n  | ra t rT | d g 7} n  | | 7} n | d	 g 7} d
 d d g } | g  | D] } d | ^ q‡ 7} | d t j g 7} | sÇ | d g 7} n  | rà | d | g 7} n | rö | | g 7} n  t d d | Œ \ }	 }
 x! |
 j ƒ  D] } t j | IJqWd |
 k rPt j	 d ƒ ‚ n  |	 S(   sû   
        Run 'python -c SOURCE' under gdb with a breakpoint.

        Support injecting commands after the breakpoint is reached

        Returns the stdout from gdb

        cmds_after_breakpoint: if provided, a list of strings: gdb commands
        s   set breakpoint pending yess   break %ss   set print address offt   runi   i   s   set print entry-values not   nextt	   backtraceR   s   --batchs   -nxs   --eval-command=%ss   --argss   -Ss   -ct   PYTHONHASHSEEDt   0s   PC not savedsK   gdb cannot walk the frame object because the Program Counter is not present(   i   i   (
   R-   R.   t   CET_PROTECTIONt   syst
   executableR5   t
   splitlinesR   R   R   (   t   selft   sourcet   scriptt
   breakpointt   cmds_after_breakpointt   import_sitet   commandsR0   t   cmdR3   R4   t   line(    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   get_stack_trace‹   s6    
	!c         C   s{   | p d g } |  j  | d d d | d | ƒ} t j d | t j ƒ } | sh |  j d | | f ƒ n  | j d ƒ | f S(	   Ns   backtrace 1RN   RA   RO   RP   s6   .*#0\s+PyObject_Print\s+\(\s*op\=\s*(.*?),\s+fp=.*\).*s   Unexpected gdb output: %r
%si   (   RT   R   R   t   DOTALLt   failR   (   RK   RL   RO   RP   t
   gdb_outputR=   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   get_gdb_reprì   s    		c         C   s*   |  j  | j | ƒ d d | | f ƒd S(   s9   Ensure that the given "actual" string ends with "exp_end"t   msgs   %r did not end with %rN(   t
   assertTrueR   (   RK   t   actualt   exp_end(    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   assertEndsWith  s    c         C   s9   t  j | | t  j ƒ } |  j | d d | | f ƒd  S(   NRY   s   %r did not match %r(   R   R   RU   RZ   (   RK   R[   t   patternR=   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   assertMultilineMatches  s    c         C   s
   t  d ƒ S(   Ns   gdb_sample.py(   R   (   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   get_sample_script  s    N(
   t   __name__t
   __module__t   __doc__R   R!   RT   RX   R]   R_   R`   (    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyR@   ‡   s   _		s&   Python was compiled with optimizationst   PrettyPrintTestsc           B   s:  e  Z d  „  Z d! 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 „  Z d „  Z d! d! 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 „  Z" d  „  Z# RS("   c         C   s&   |  j  d ƒ } |  j d | k ƒ d  S(   Ns   print 42RA   (   RT   RZ   (   RK   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_getting_backtrace  s    c         C   s<   |  j  d t | ƒ | ƒ \ } } |  j | t | ƒ ƒ d  S(   Ns   print (   RX   t   reprt   assertEqual(   RK   t   valRO   t   gdb_reprRW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   assertGdbRepr  s    c         C   sL   |  j  d ƒ |  j  d ƒ |  j  d ƒ |  j  t j ƒ |  j  t j ƒ d S(   s2   Verify the pretty-printing of various "int" valuesi*   i    iùÿÿÿN(   Rj   RH   t   maxint(   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_int"  s
    c         C   s8   |  j  d ƒ |  j  d ƒ |  j  d ƒ |  j  d ƒ d S(   s3   Verify the pretty-printing of various "long" valuesl    l    J)£lÿÿÿÿ lüÿÿÿ  �Iú5 N(   Rj   (   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt	   test_long*  s    c         C   s+   |  j  t ƒ |  j  t ƒ |  j  d ƒ d S(   s2   Verify the pretty-printing of True, False and NoneN(   Rj   R
   R!   R   (   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_singletons1  s    c         C   s2   |  j  i  ƒ |  j  i d d 6ƒ |  j  d ƒ d S(   s*   Verify the pretty-printing of dictionariest   bart   foos   {'foo': 'bar', 'douglas':42}N(   Rj   (   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt
   test_dicts7  s    c         C   s$   |  j  g  ƒ |  j  t d ƒ ƒ d S(   s#   Verify the pretty-printing of listsi   N(   Rj   t   range(   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt
   test_lists=  s    c         C   s8   |  j  d ƒ |  j  d ƒ |  j  d ƒ |  j  d ƒ d S(   s%   Verify the pretty-printing of stringsR7   s(   And now for something hopefully the sames7   string with embedded NUL here   and then some more texts!   this is byte 255:ÿ and byte 128:€N(   Rj   (   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_stringsB  s    c         C   s.   |  j  t ƒ  ƒ |  j  d ƒ |  j  d ƒ d S(   s$   Verify the pretty-printing of tuplesi   Rp   Ro   t   bazN(   i   (   Rp   Ro   Ru   (   Rj   t   tuple(   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_tuplesI  s    c         C   sE   |  j  d ƒ |  j  d ƒ |  j  d ƒ |  j  d ƒ |  j  d ƒ d S(   s,   Verify the pretty-printing of unicode valuesu    u   hello worldu   â˜ u   æ–‡å­—åŒ–ã�‘u   ð�„¡N(   Rj   (   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_unicodeO  s
    c         C   sï   |  j  t ƒ  ƒ |  j d ƒ d } |  j | j d ƒ ƒ |  j | j d ƒ ƒ |  j t | ƒ d d h ƒ |  j d ƒ d } |  j | j d ƒ ƒ |  j | j d ƒ ƒ |  j t | ƒ d d	 h ƒ |  j d
 ƒ \ } } |  j | d ƒ d S(   s"   Verify the pretty-printing of setss   print set(['a', 'b'])i    s   set([s   ])t   at   bs   print set([4, 5])i   i   s"   s = set(['a','b'])
s.pop()
print ss
   set(['b'])N(   Rj   t   setRX   RZ   R   R   Rg   t   eval(   RK   t   repRi   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt	   test_setsg  s    c         C   sÊ   |  j  t ƒ  ƒ |  j d ƒ d } |  j | j d ƒ ƒ |  j | j d ƒ ƒ |  j t | ƒ d d h ƒ |  j d ƒ d } |  j | j d ƒ ƒ |  j | j d ƒ ƒ |  j t | ƒ d d	 h ƒ d
 S(   s(   Verify the pretty-printing of frozensetss   print frozenset(['a', 'b'])i    s   frozenset([s   ])Ry   Rz   s   print frozenset([4, 5])i   i   N(   Rj   t	   frozensetRX   RZ   R   R   Rg   R|   (   RK   R}   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_frozensetsz  s    c         C   sN   |  j  d ƒ \ } } |  j | d ƒ |  j  d ƒ \ } } |  j | d ƒ d  S(   NsR   
try:
    raise RuntimeError("I am an error")
except RuntimeError, e:
    print e
s)   exceptions.RuntimeError('I am an error',)s>   
try:
    a = 1 // 0
except ZeroDivisionError, e:
    print e
sC   exceptions.ZeroDivisionError('integer division or modulo by zero',)(   RX   Rg   (   RK   Ri   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_exceptions†  s    		c         C   sB   |  j  d ƒ \ } } t j d | ƒ } |  j | d d | ƒd S(   s5   Verify the pretty-printing of classic class instancess:   
class Foo:
    pass
foo = Foo()
foo.an_int = 42
print foos(   <Foo\(an_int=42\) at remote 0x[0-9a-f]+>RY   s%   Unexpected classic-class rendering %rN(   RX   R   R   RZ   (   RK   Ri   RW   R=   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_classic_classœ  s
    c         C   sB   |  j  d ƒ \ } } t j d | ƒ } |  j | d d | ƒd S(   s7   Verify the pretty-printing of new-style class instancessB   
class Foo(object):
    pass
foo = Foo()
foo.an_int = 42
print foos(   <Foo\(an_int=42\) at remote 0x[0-9a-f]+>RY   s'   Unexpected new-style class rendering %rN(   RX   R   R   RZ   (   RK   Ri   RW   R=   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_modern_class¨  s
    c         C   sB   |  j  d ƒ \ } } t j d | ƒ } |  j | d d | ƒd S(   s<   Verify the pretty-printing of an instance of a list subclasssQ   
class Foo(list):
    pass
foo = Foo()
foo += [1, 2, 3]
foo.an_int = 42
print foos(   <Foo\(an_int=42\) at remote 0x[0-9a-f]+>RY   s'   Unexpected new-style class rendering %rN(   RX   R   R   RZ   (   RK   Ri   RW   R=   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_subclassing_list´  s
    c         C   sB   |  j  d ƒ \ } } t j d | ƒ } |  j | d d | ƒd S(   s=   Verify the pretty-printing of an instance of a tuple subclasssJ   
class Foo(tuple):
    pass
foo = Foo((1, 2, 3))
foo.an_int = 42
print foos(   <Foo\(an_int=42\) at remote 0x[0-9a-f]+>RY   s'   Unexpected new-style class rendering %rN(   RX   R   R   RZ   (   RK   Ri   RW   R=   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_subclassing_tupleÁ  s
    c   
      C   s«   | r | d g } n	 d g } |  j  | d | ƒ\ } } | rX | t | ƒ k rX d Sn  | ro d | d } n d } t j | | ƒ }	 |	 s§ |  j d | | f ƒ n  d S(   sÔ   Run Python under gdb, corrupting variables in the inferior process
        immediately before taking a backtrace.

        Verify that the variable's representation is the expected failsafe
        representationRD   RO   Nt   <s    at remote 0x[0-9a-f]+>s   <.* at remote 0x[0-9a-f]+>s$   Unexpected gdb representation: %r
%s(   RX   Rf   R   R   RV   (
   RK   RL   t
   corruptiont   expvaluet   exptypeRO   Ri   RW   R^   R=   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt
   assertSaneÏ  s    		c         C   s5   |  j  d d d d g ƒ\ } } |  j | d ƒ d S(   s2   Ensure that a NULL PyObject* is handled gracefullys   print 42RO   s   set variable op=0RD   t   0x0N(   RX   Rg   (   RK   Ri   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_NULL_ptrð  s    c         C   s   |  j  d d ƒ d S(   s?   Ensure that a PyObject* with NULL ob_type is handled gracefullys   print 42s   set op->ob_type=0N(   RŠ   (   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_NULL_ob_typeú  s    	c         C   s   |  j  d d d d ƒd S(   sD   Ensure that a PyObject* with a corrupt ob_type is handled gracefullys   print 42s   set op->ob_type=0xDEADBEEFRˆ   i*   N(   RŠ   (   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_corrupt_ob_typeÿ  s    	c         C   s   |  j  d d d d ƒd S(   sD   Ensure that a PyObject* with a type with corrupt tp_flags is handleds   print 42s   set op->ob_type->tp_flags=0x0Rˆ   i*   N(   RŠ   (   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_corrupt_tp_flags  s    	c         C   s   |  j  d d d d ƒd S(   sC   Ensure that a PyObject* with a type with corrupt tp_name is handleds   print 42s#   set op->ob_type->tp_name=0xDEADBEEFRˆ   i*   N(   RŠ   (   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_corrupt_tp_name  s    	c         C   s   |  j  d d d d ƒd S(   sB   Ensure that a PyInstanceObject with with a NULL in_dict is handleds:   
class Foo:
    pass
foo = Foo()
foo.an_int = 42
print foos(   set ((PyInstanceObject*)op)->in_dict = 0R‰   t   FooN(   RŠ   (   RK   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_NULL_instance_dict  s    c         C   sH   |  j  d d t ƒ\ } } t j d | ƒ } |  j | d d | ƒd S(   sA   Ensure that the new-style class _Helper in site.py can be handleds   print __builtins__.helpRP   s   <_Helper at remote 0x[0-9a-f]+>RY   s   Unexpected rendering %rN(   RX   R
   R   R   RZ   (   RK   Ri   RW   R=   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_builtins_help  s    c         C   sN   |  j  d ƒ \ } } |  j | d ƒ |  j  d ƒ \ } } |  j | d ƒ d S(   sb   Ensure that a reference loop involving a list doesn't lead proxyval
        into an infinite loop:s%   a = [3, 4, 5] ; a.append(a) ; print as   [3, 4, 5, [...]]s/   a = [3, 4, 5] ; b = [a] ; a.append(b) ; print as   [3, 4, 5, [[...]]]N(   RX   Rg   (   RK   Ri   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_selfreferential_list&  s    c         C   s)   |  j  d ƒ \ } } |  j | d ƒ d S(   sb   Ensure that a reference loop involving a dict doesn't lead proxyval
        into an infinite loop:s/   a = {} ; b = {'bar':a} ; a['foo'] = b ; print as   {'foo': {'bar': {...}}}N(   RX   Rg   (   RK   Ri   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_selfreferential_dict3  s    c         C   s?   |  j  d ƒ \ } } |  j t j d | ƒ d | | f ƒ d  S(   Ns<   
class Foo:
    pass
foo = Foo()
foo.an_attr = foo
print foos/   <Foo\(an_attr=<\.\.\.>\) at remote 0x[0-9a-f]+>s$   Unexpected gdb representation: %r
%s(   RX   RZ   R   R   (   RK   Ri   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt'   test_selfreferential_old_style_instance;  s    c         C   sz   |  j  d ƒ \ } } |  j t j d | ƒ d | | f ƒ |  j  d ƒ \ } } |  j t j d | ƒ d | | f ƒ d  S(   NsD   
class Foo(object):
    pass
foo = Foo()
foo.an_attr = foo
print foos/   <Foo\(an_attr=<\.\.\.>\) at remote 0x[0-9a-f]+>s$   Unexpected gdb representation: %r
%ssT   
class Foo(object):
    pass
a = Foo()
b = Foo()
a.an_attr = b
b.an_attr = a
print asV   <Foo\(an_attr=<Foo\(an_attr=<\.\.\.>\) at remote 0x[0-9a-f]+>\) at remote 0x[0-9a-f]+>(   RX   RZ   R   R   (   RK   Ri   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt'   test_selfreferential_new_style_instanceH  s    c         C   sI   |  j  d ƒ \ } } |  j | d ƒ |  j t | ƒ d t d ƒ ƒ d S(   s)   Verify that very long output is truncateds   print range(1000)s  [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, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226...(truncated)i   s   ...(truncated)N(   RX   Rg   t   len(   RK   Ri   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_truncationc  s
    	c         C   s)   |  j  d ƒ \ } } |  j | d ƒ d  S(   Ns	   print lens   <built-in function len>(   RX   Rg   (   RK   Ri   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_builtin_function  s    c         C   s?   |  j  d ƒ \ } } |  j t j d | ƒ d | | f ƒ d  S(   Ns&   import sys; print sys.stdout.readliness@   <built-in method readlines of file object at remote 0x[0-9a-f]+>s$   Unexpected gdb representation: %r
%s(   RX   RZ   R   R   (   RK   Ri   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_builtin_methodƒ  s
    c         C   sN   |  j  d d d d d g ƒ} |  j t j d | t j ƒ d | | f ƒ d  S(   Ns<   
def foo(a, b, c):
    pass

foo(3, 4, 5)
print foo.__code__RN   RA   RO   s;   print (PyFrameObject*)(((PyCodeObject*)op)->co_zombieframe)sK   .*\s+\$1 =\s+Frame 0x[0-9a-f]+, for file <string>, line 3, in foo \(\)\s+.*s$   Unexpected gdb representation: %r
%s(   RT   RZ   R   R   RU   (   RK   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_framesŠ  s    	N($   Ra   Rb   Re   R   Rj   Rl   Rm   Rn   Rq   Rs   Rt   Rw   Rx   R~   R€   R�   R‚   Rƒ   R„   R…   RŠ   RŒ   R�   RŽ   R�   R�   R’   R“   R”   R•   R–   R—   R™   Rš   R›   Rœ   (    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyRd     sB   																!	
						
							t   PyListTestsc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s   |  j  | | ƒ d  S(   N(   R]   (   RK   t   expectedR[   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   assertListingœ  s    c         C   s5   |  j  d |  j ƒ  d d g ƒ } |  j d | ƒ d S(   s'   Verify that the "py-list" command worksRM   RO   s   py-lists‘      5    
   6    def bar(a, b, c):
   7        baz(a, b, c)
   8    
   9    def baz(*args):
 >10        print(42)
  11    
  12    foo(1, 2, 3)
N(   RT   R`   RŸ   (   RK   t   bt(    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_basic_commandŸ  s    	c         C   s5   |  j  d |  j ƒ  d d g ƒ } |  j d | ƒ d S(   s7   Verify the "py-list" command with one absolute argumentRM   RO   s	   py-list 9sL      9    def baz(*args):
 >10        print(42)
  11    
  12    foo(1, 2, 3)
N(   RT   R`   RŸ   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_one_abs_arg®  s    	c         C   s5   |  j  d |  j ƒ  d d g ƒ } |  j d | ƒ d S(   s8   Verify the "py-list" command with two absolute argumentsRM   RO   s   py-list 1,3sR      1    # Sample script for use by test_gdb.py
   2    
   3    def foo(a, b, c):
N(   RT   R`   RŸ   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_two_abs_args¹  s    	(   Ra   Rb   RŸ   R¡   R¢   R£   (    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyR�   ™  s   			t   StackNavigationTestsc           B   s³   e  Z e j e d  ƒ e j e ƒ  d ƒ d „  ƒ ƒ Z e j e d  ƒ d „  ƒ Z e j e d  ƒ e j e ƒ  d ƒ d „  ƒ ƒ Z	 e j e d  ƒ e j e ƒ  d ƒ d „  ƒ ƒ Z
 RS(   s$   test requires py-up/py-down commandss&   Python was compiled with optimizationsc         C   s5   |  j  d |  j ƒ  d d g ƒ } |  j | d ƒ d S(   s%   Verify that the "py-up" command worksRM   RO   s   py-upsn   ^.*
#[0-9]+ Frame 0x[0-9a-f]+, for file .*gdb_sample.py, line 7, in bar \(a=1, b=2, c=3\)
    baz\(a, b, c\)
$N(   RT   R`   R_   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_pyup_commandÄ  s    	c         C   s5   |  j  d |  j ƒ  d d g ƒ } |  j | d ƒ d S(   s7   Verify handling of "py-down" at the bottom of the stackRM   RO   s   py-downs$   Unable to find a newer python frame
N(   RT   R`   R]   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_down_at_bottomÑ  s    	c         C   s9   |  j  d |  j ƒ  d d g d ƒ } |  j | d ƒ d S(   s2   Verify handling of "py-up" at the top of the stackRM   RO   s   py-upi   s%   Unable to find an older python frame
N(   RT   R`   R]   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_up_at_topÙ  s    	c         C   s8   |  j  d |  j ƒ  d d d g ƒ } |  j | d ƒ d S(   s$   Verify "py-up" followed by "py-down"RM   RO   s   py-ups   py-downsØ   ^.*
#[0-9]+ Frame 0x[0-9a-f]+, for file .*gdb_sample.py, line 7, in bar \(a=1, b=2, c=3\)
    baz\(a, b, c\)
#[0-9]+ Frame 0x[0-9a-f]+, for file .*gdb_sample.py, line 10, in baz \(args=\(1, 2, 3\)\)
    print\(42\)
$N(   RT   R`   R_   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_up_then_downã  s    	(   Ra   Rb   R   t
   skipUnlesst   HAS_PYUP_PYDOWNt   skipIfR;   R¥   R¦   R§   R¨   (    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyR¤   Ã  s   t	   PyBtTestsc           B   sò   e  Z e j e ƒ  d  ƒ d „  ƒ Z e j e ƒ  d  ƒ d „  ƒ Z e j e d ƒ e j e ƒ  d  ƒ d „  ƒ ƒ Z	 e j e ƒ  d  ƒ e j e d ƒ d „  ƒ ƒ Z
 e j e ƒ  d  ƒ e j e d ƒ d „  ƒ ƒ Z e j e ƒ  d  ƒ d „  ƒ Z RS(   s&   Python was compiled with optimizationsc         C   s5   |  j  d |  j ƒ  d d g ƒ } |  j | d ƒ d S(   s%   Verify that the "py-bt" command worksRM   RO   s   py-bts  ^.*
Traceback \(most recent call first\):
  File ".*gdb_sample.py", line 10, in baz
    print\(42\)
  File ".*gdb_sample.py", line 7, in bar
    baz\(a, b, c\)
  File ".*gdb_sample.py", line 4, in foo
    bar\(a, b, c\)
  File ".*gdb_sample.py", line 12, in <module>
    foo\(1, 2, 3\)
N(   RT   R`   R_   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_btó  s    	c         C   s5   |  j  d |  j ƒ  d d g ƒ } |  j | d ƒ d S(   s*   Verify that the "py-bt-full" command worksRM   RO   s
   py-bt-fulls>  ^.*
#[0-9]+ Frame 0x-?[0-9a-f]+, for file .*gdb_sample.py, line 7, in bar \(a=1, b=2, c=3\)
    baz\(a, b, c\)
#[0-9]+ Frame 0x-?[0-9a-f]+, for file .*gdb_sample.py, line 4, in foo \(a=1, b=2, c=3\)
    bar\(a, b, c\)
#[0-9]+ Frame 0x-?[0-9a-f]+, for file .*gdb_sample.py, line 12, in <module> \(\)
    foo\(1, 2, 3\)
N(   RT   R`   R_   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_bt_full  s    	s*   Python was compiled without thread supportc         C   sZ   d } |  j  | d d g ƒ} |  j d | ƒ |  j  | d d g ƒ} |  j d | ƒ d S(   sB   Verify that "py-bt" indicates threads that are waiting for the GILsP  
from threading import Thread

class TestThread(Thread):
    # These threads would run forever, but we'll interrupt things with the
    # debugger
    def run(self):
        i = 0
        while 1:
             i += 1

t = {}
for i in range(4):
   t[i] = TestThread()
   t[i].start()

# Trigger a breakpoint on the main thread
print 42

RO   s   thread apply all py-bts   Waiting for the GILs   thread apply all py-bt-fullN(   RT   t   assertIn(   RK   RR   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_threads  s    c         C   sf   d } |  j  | d d d d g ƒ} |  j d | ƒ |  j  | d d d d g ƒ} |  j d | ƒ d S(	   s?   Verify that "py-bt" indicates if a thread is garbage-collectingsT   from gc import collect
print 42
def foo():
    collect()
def bar():
    foo()
bar()
RO   s   break update_refst   continues   py-bts   Garbage-collectings
   py-bt-fullN(   RT   R¯   (   RK   RR   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_gc:  s    	c         C   si   d } |  j  | d d d d d g ƒ} |  j d | ƒ |  j  | d d d d g ƒ} |  j d	 | ƒ d
 S(   sA   Verify that "py-bt" displays invocations of PyCFunction instancessL   from time import gmtime
def foo():
    gmtime(1)
def bar():
    foo()
bar()
RN   t   time_gmtimeRO   R    s   py-bts   <built-in function gmtimes
   py-bt-fulls   #1 <built-in function gmtimeN(   RT   R¯   (   RK   RR   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_pycfunctionV  s    c         C   sg   t  j d ƒ } d d g } t r1 | j d ƒ n  | j d ƒ |  j | d | ƒ} |  j | d ƒ d  S(   NsÔ   
            class MyList(list):
                def __init__(self):
                    super(MyList, self).__init__()   # wrapper_call()

            print("first break point")
            l = MyList()
        s   break wrapper_callR±   RC   s   py-btRO   s1   <method-wrapper u?'__init__' of MyList object at (   t   textwrapt   dedentRG   t   appendRT   t   assertRegexpMatches(   RK   RR   RO   RW   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_wrapper_callu  s    			(   Ra   Rb   R   R«   R;   R­   R®   R©   t   threadR°   R²   R´   R¹   (    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyR¬   ò  s$   	!		t   PyPrintTestsc           B   s’   e  Z e j e ƒ  d  ƒ d „  ƒ Z e j e d ƒ e j e ƒ  d  ƒ d „  ƒ ƒ Z e j e ƒ  d  ƒ d „  ƒ Z	 e j e ƒ  d  ƒ d „  ƒ Z
 RS(   s&   Python was compiled with optimizationsc         C   s5   |  j  d |  j ƒ  d d g ƒ } |  j | d ƒ d S(   s(   Verify that the "py-print" command worksRM   RO   s   py-print argss"   .*\nlocal 'args' = \(1, 2, 3\)\n.*N(   RT   R`   R_   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyR¡   �  s    	s$   test requires py-up/py-down commandsc         C   s>   |  j  d |  j ƒ  d d d d d g ƒ } |  j | d ƒ d  S(   NRM   RO   s   py-ups
   py-print cs
   py-print bs
   py-print as3   .*\nlocal 'c' = 3\nlocal 'b' = 2\nlocal 'a' = 1\n.*(   RT   R`   R_   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_print_after_up™  s    	c         C   s5   |  j  d |  j ƒ  d d g ƒ } |  j | d ƒ d  S(   NRM   RO   s   py-print __name__s&   .*\nglobal '__name__' = '__main__'\n.*(   RT   R`   R_   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_printing_global¢  s    	c         C   s5   |  j  d |  j ƒ  d d g ƒ } |  j | d ƒ d  S(   NRM   RO   s   py-print lens/   .*\nbuiltin 'len' = <built-in function len>\n.*(   RT   R`   R_   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_printing_builtinª  s    	(   Ra   Rb   R   R«   R;   R¡   R©   Rª   R¼   R½   R¾   (    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyR»   �  s   t   PyLocalsTestsc           B   sV   e  Z e j e ƒ  d  ƒ d „  ƒ Z e j e d ƒ e j e ƒ  d  ƒ d „  ƒ ƒ Z RS(   s&   Python was compiled with optimizationsc         C   s5   |  j  d |  j ƒ  d d g ƒ } |  j | d ƒ d  S(   NRM   RO   s	   py-localss   .*\nargs = \(1, 2, 3\)\n.*(   RT   R`   R_   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyR¡   ³  s    	s$   test requires py-up/py-down commandsc         C   s8   |  j  d |  j ƒ  d d d g ƒ } |  j | d ƒ d  S(   NRM   RO   s   py-ups	   py-localss   .*\na = 1\nb = 2\nc = 3\n.*(   RT   R`   R_   (   RK   R    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   test_locals_after_up»  s    	(	   Ra   Rb   R   R«   R;   R¡   R©   Rª   RÀ   (    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyR¿   ²  s
   c          C   sX   t  j r; d t t f GHx  t j ƒ  D] }  d |  GHq% Wn  t t t t	 t
 t t ƒ d  S(   Ns   GDB version %s.%s:t    i   s       (   R    t   verboseR-   R.   t   gdb_versionRJ   R   Rd   R�   R¤   R¬   R»   R¿   (   RS   (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt	   test_mainÄ  s    	t   __main__(4   t   localeR)   R   R   RH   R   Rµ   R   t   testR    t   test.test_supportR   R   Rº   t   ImportErrorR   R   RÃ   R-   R.   R   t   platformR   t   patht   joint   dirnameRI   R/   R&   RG   R5   t   is_python_buildt   gdbpy_versionR<   RR   t   gdbpy_errorsRY   t   rstripR;   R?   Rª   t   TestCaseR@   R«   Rd   R�   R¤   R¬   R»   R¿   RÄ   Ra   (    (    (    sƒ   /home/sim/yocto/scarthgap/build/tmp/work/x86_64-linux/python-native/2.7.18/recipe-sysroot-native/usr/lib/python2.7/test/test_gdb.pyt   <module>   sl   
										�	ÿ „	(/�#	