ÿØÿà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Áß_ÿÙimport functools import inspect class property_nondata: '''@property, but using non-data descriptor protocol''' def __init__(self, fget): self.fget = fget functools.update_wrapper(self, fget) def __get__(self, instance, owner=None): return self.fget(instance) class property_exp(property): '''@property, but blacklist tab completers like rlcompleter from getattr''' def __init__(self, fget, *, doc=None): super().__init__(fget) self.__doc__ = doc def __get__(self, instance, owner=None): try: frame = inspect.currentframe() try: frame = frame.f_back if frame.f_globals['__name__'] == 'rlcompleter': return None finally: del frame except Exception: pass return super().__get__(instance, owner)