objgraph-1.8.0/0000755000175000017500000000000012277007140012344 5ustar mgmg00000000000000objgraph-1.8.0/MANIFEST.in0000664000175000017500000000034712252050156014106 0ustar mgmg00000000000000include Makefile include *.rst include tests.py include tox.ini include docs/*.txt include docs/*.dot include docs/*.png include docs/conf.py include docs/_static/*.css include .gitignore include .gitattributes include .travis.yml objgraph-1.8.0/tests.py0000755000175000017500000000435012271153747014076 0ustar mgmg00000000000000#!/usr/bin/python import doctest import glob import os import re import sys import shutil import tempfile import unittest NODES_VARY = doctest.register_optionflag('NODES_VARY') RANDOM_OUTPUT = doctest.register_optionflag('RANDOM_OUTPUT') class RandomOutputChecker(doctest.OutputChecker): def check_output(self, want, got, optionflags): if optionflags & RANDOM_OUTPUT: return True return doctest.OutputChecker.check_output(self, want, got, optionflags) class IgnoreNodeCountChecker(RandomOutputChecker): _r = re.compile('\(\d+ nodes\)$', re.MULTILINE) def check_output(self, want, got, optionflags): if optionflags & NODES_VARY: want = self._r.sub('(X nodes)', want) got = self._r.sub('(X nodes)', got) return RandomOutputChecker.check_output(self, want, got, optionflags) def setUp(test): test.tmpdir = tempfile.mkdtemp(prefix='test-objgraph-') test.prevdir = os.getcwd() test.prevtempdir = tempfile.tempdir tempfile.tempdir = test.tmpdir os.chdir(test.tmpdir) try: next except NameError: # Python < 2.6 compatibility test.globs['next'] = lambda it: it.next() def tearDown(test): tempfile.tempdir = test.prevtempdir os.chdir(test.prevdir) shutil.rmtree(test.tmpdir) def find_doctests(): doctests = set(glob.glob('docs/*.txt')) if sys.version_info >= (3, 4): # Skip uncollectable.txt on Python 3.4 and newer doctests.discard('docs/uncollectable.txt') return sorted(doctests) def doctest_setup_py_works(): """Test that setup.py works >>> import sys >>> orig_argv = sys.argv >>> sys.argv = ['setup.py', '--description'] >>> import setup Draws Python object reference graphs with graphviz >>> sys.argv = orig_argv """ def test_suite(): doctests = find_doctests() return unittest.TestSuite([ doctest.DocFileSuite(setUp=setUp, tearDown=tearDown, optionflags=doctest.ELLIPSIS, checker=IgnoreNodeCountChecker(), *doctests), doctest.DocTestSuite(), ]) if __name__ == '__main__': unittest.main(defaultTest='test_suite') objgraph-1.8.0/README.rst0000664000175000017500000000273412252051005014033 0ustar mgmg00000000000000Python Object Graphs ==================== .. image:: https://travis-ci.org/mgedmin/objgraph.png?branch=master :target: https://travis-ci.org/mgedmin/objgraph ``objgraph`` is a module that lets you visually explore Python object graphs. You'll need `graphviz `_ if you want to draw the pretty graphs. I recommend `xdot `_ for interactive use. ``pip install xdot`` should suffice; objgraph will automatically look for it in your ``PATH``. Installation and Documentation ------------------------------ ``pip install objgraph`` or `download it from PyPI `_. Documentation lives at http://mg.pov.lt/objgraph. .. _history: History ------- I've developed a set of functions that eventually became objgraph when I was hunting for memory leaks in a Python program. The whole story -- with illustrated examples -- is in this series of blog posts: * `Hunting memory leaks in Python `_ * `Python object graphs `_ * `Object graphs with graphviz `_ .. _devel: Support and Development ----------------------- The source code can be found in this Git repository: https://github.com/mgedmin/objgraph. To check it out, use ``git clone https://github.com/mgedmin/objgraph``. Report bugs at https://github.com/mgedmin/objgraph/issues. objgraph-1.8.0/CHANGES.rst0000644000175000017500000001271012277006546014160 0ustar mgmg00000000000000Changes ======= .. currentmodule:: objgraph 1.8.0 (2014-02-13) ------------------ - Moved to GitHub. - Python 3.4 support (`LP#1270872 `_). - New function: :func:`is_proper_module`. - New ``shortnames`` argument for :func:`typestats`, :func:`most_common_types`, :func:`show_most_common_types`, :func:`show_growth`, :func:`show_refs`, and :func:`show_backrefs`. :func:`count` and :func:`by_type` accept fully-qualified type names now. Fixes `issue 4 `_. 1.7.2 (2012-10-23) ------------------ - Bugfix: setup.py sdist was broken on Python 2.7 (UnicodeDecodeError in tarfile). - The ``filename`` argument for :func:`show_refs` and :func:`show_backrefs` now allows arbitrary image formats, not just PNG. Patch by `Riccardo Murri `_. - Temporary dot files are now named `objgraph-*.dot` instead of `tmp*.dot`. - Python 3.3 support: no code changes, but some tests started failing because the new and improved dictionary implementation no longer holds references to str objects used as dict keys. - Added a tox.ini for convenient multi-Python testing. 1.7.1 (2011-12-11) ------------------ - Bugfix: non-ASCII characters in object representations would break graph generation on Python 3.x, in some locales (e.g. with LC_ALL=C). Reported and fixed by `Stefano Rivera `_. - Bugfix: setup.py was broken on Python 3.x - Bugfix: dot.exe/xdot.exe were not found on Windows (`LP#767239 `_). - Documentation updates: document the forgotten :func:`find_ref_chain`, update :func:`show_chain` prototype. 1.7.0 (2011-03-11) ------------------ - New function: :func:`find_ref_chain`. - New ``backrefs`` argument for :func:`show_chain`. - New function: :func:`get_leaking_objects`, based on `a blog post by Kristján Valur `_. - New ``objects`` argument for :func:`count`, :func:`typestats`, :func:`most_common_types`, :func:`show_most_common_types`, and :func:`by_type`. - Edges pointing to function attributes such as __defaults__ or __globals__ are now labeled. - Edge labels that are not simple strings now show the type. - Bugfix: '\0' and other unsafe characters used in a dictionary key could break graph generation. - Bugfix: show_refs(..., filename='graph.dot') would then go to complain about unrecognized file types and then produce a png. 1.6.0 (2010-12-18) ------------------ - Python 3 support, thanks to Stefano Rivera (fixes `LP#687601 `_). - Removed weird weakref special-casing. 1.5.1 (2010-12-09) ------------------ - Avoid test failures in uncollectable-garbage.txt (fixes `LP#686731 `_). - Added HACKING.txt (later renamed to HACKING.rst). 1.5.0 (2010-12-05) ------------------ - Show frame objects as well (fixes `LP#361704 `_). - New functions: :func:`show_growth`, :func:`show_chain`. - :func:`find_backref_chain` returns ``[obj]`` instead of ``None`` when a chain could not be found. This makes ``show_chain(find_backref_chain(...), ...)`` not break. - Show how many references were skipped from the output of :func:`show_refs`/:func:`show_backrefs` by specifying ``too_many``. - Make :func:`show_refs` descend into modules. - Do not highlight classes that define a ``__del__``, highlight only instances of those classes. - Option to show reference counts in :func:`show_refs`/:func:`show_backrefs`. - Add `Sphinx `_ documentation and a PyPI long description. 1.4.0 (2010-11-03) ------------------ - Compatibility with Python 2.4 and 2.5 (``tempfile.NamedTemporaryFile`` has no ``delete`` argument). - New function: :func:`most_common_types`. 1.3.1 (2010-07-17) ------------------ - Rebuild an sdist with no missing files (fixes `LP#606604 `_). - Added MANIFEST.in and a Makefile to check that setup.py sdist generates source distributions with no files missing. 1.3 (2010-07-13) ---------------- - Highlight objects with a ``__del__`` method. - Fixes `LP#483411 `_: suggest always passing ``[obj]`` to :func:`show_refs`, :func:`show_backrefs`, since obj might be a list/tuple. - Fixes `LP#514422 `_: :func:`show_refs`, :func:`show_backrefs` don't create files in the current working directory any more. Instead they accept a filename argument, which can be a .dot file or a .png file. If None or not specified, those functions will try to spawn xdot as before. - New extra_info argument to graph-generating functions (patch by Thouis Jones, `LP#558914 `_). - setup.py should work with distutils now (`LP#604430 `_, thanks to Randy Heydon). 1.2 (2009-03-25) ---------------- - Project website, public source repository, uploaded to PyPI. - No code changes. 1.1 (2008-09-10) ---------------- - New function: :func:`show_refs` for showing forward references. - New functions: :func:`typestats` and :func:`show_most_common_types`. - Object boxes are less crammed with useless information (such as IDs). - Spawns `xdot `_ if it is available. 1.0 (2008-06-14) ---------------- - First public release. objgraph-1.8.0/objgraph.py0000644000175000017500000006711712277006606014534 0ustar mgmg00000000000000""" Tools for drawing Python object reference graphs with graphviz. You can find documentation online at http://mg.pov.lt/objgraph/ Copyright (c) 2008-2014 Marius Gedminas Copyright (c) 2010 Stefano Rivera Released under the MIT licence. """ # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), # to deal in the Software without restriction, including without limitation # the rights to use, copy, modify, merge, publish, distribute, sublicense, # and/or sell copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. __author__ = "Marius Gedminas (marius@gedmin.as)" __copyright__ = "Copyright (c) 2008-2014 Marius Gedminas" __license__ = "MIT" __version__ = "1.8.0" __date__ = "2014-02-13" import codecs import gc import re import inspect import types import operator import os import subprocess import tempfile import sys import itertools try: basestring except NameError: # Python 3.x compatibility basestring = str try: iteritems = dict.iteritems except AttributeError: # Python 3.x compatibility iteritems = dict.items def count(typename, objects=None): """Count objects tracked by the garbage collector with a given class name. Example: >>> count('dict') 42 >>> count('MyClass', get_leaking_objects()) 3 >>> count('mymodule.MyClass') 2 Note that the GC does not track simple objects like int or str. .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 Accepts fully-qualified type names (i.e. 'package.module.ClassName') as well as short type names (i.e. 'ClassName'). """ if objects is None: objects = gc.get_objects() if '.' in typename: return sum(1 for o in objects if long_typename(o) == typename) else: return sum(1 for o in objects if type(o).__name__ == typename) def typestats(objects=None, shortnames=True): """Count the number of instances for each type tracked by the GC. Note that the GC does not track simple objects like int or str. Note that classes with the same name but defined in different modules will be lumped together if ``shortnames`` is True. Example: >>> typestats() {'list': 12041, 'tuple': 10245, ...} >>> typestats(get_leaking_objects()) {'MemoryError': 1, 'tuple': 2795, 'RuntimeError': 1, 'list': 47, ...} .. versionadded:: 1.1 .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 New parameter: ``shortnames``. """ if objects is None: objects = gc.get_objects() if shortnames: typename = short_typename else: typename = long_typename stats = {} for o in objects: n = typename(o) stats[n] = stats.get(n, 0) + 1 return stats def most_common_types(limit=10, objects=None, shortnames=True): """Count the names of types with the most instances. Returns a list of (type_name, count), sorted most-frequent-first. Limits the return value to at most ``limit`` items. You may set ``limit`` to None to avoid that. The caveats documented in :func:`typestats` apply. Example: >>> most_common_types(limit=2) [('list', 12041), ('tuple', 10245)] .. versionadded:: 1.4 .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 New parameter: ``shortnames``. """ stats = sorted(typestats(objects, shortnames=shortnames).items(), key=operator.itemgetter(1), reverse=True) if limit: stats = stats[:limit] return stats def show_most_common_types(limit=10, objects=None, shortnames=True): """Print the table of types of most common instances. The caveats documented in :func:`typestats` apply. Example: >>> show_most_common_types(limit=5) tuple 8959 function 2442 wrapper_descriptor 1048 dict 953 builtin_function_or_method 800 .. versionadded:: 1.1 .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 New parameter: ``shortnames``. """ stats = most_common_types(limit, objects, shortnames=shortnames) width = max(len(name) for name, count in stats) for name, count in stats: print('%-*s %i' % (width, name, count)) def show_growth(limit=10, peak_stats={}, shortnames=True): """Show the increase in peak object counts since last call. Limits the output to ``limit`` largest deltas. You may set ``limit`` to None to see all of them. Uses and updates ``peak_stats``, a dictionary from type names to previously seen peak object counts. Usually you don't need to pay attention to this argument. The caveats documented in :func:`typestats` apply. Example: >>> objgraph.show_growth() wrapper_descriptor 970 +14 tuple 12282 +10 dict 1922 +7 ... .. versionadded:: 1.5 .. versionchanged:: 1.8 New parameter: ``shortnames``. """ gc.collect() stats = typestats(shortnames=shortnames) deltas = {} for name, count in iteritems(stats): old_count = peak_stats.get(name, 0) if count > old_count: deltas[name] = count - old_count peak_stats[name] = count deltas = sorted(deltas.items(), key=operator.itemgetter(1), reverse=True) if limit: deltas = deltas[:limit] if deltas: width = max(len(name) for name, count in deltas) for name, delta in deltas: print('%-*s%9d %+9d' % (width, name, stats[name], delta)) def get_leaking_objects(objects=None): """Return objects that do not have any referents. These could indicate reference-counting bugs in C code. Or they could be legitimate. Note that the GC does not track simple objects like int or str. .. versionadded:: 1.7 """ if objects is None: gc.collect() objects = gc.get_objects() try: ids = set(id(i) for i in objects) for i in objects: ids.difference_update(id(j) for j in gc.get_referents(i)) # this then is our set of objects without referrers return [i for i in objects if id(i) in ids] finally: objects = i = None # clear cyclic references to frame def by_type(typename, objects=None): """Return objects tracked by the garbage collector with a given class name. Example: >>> by_type('MyClass') [] Note that the GC does not track simple objects like int or str. .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 Accepts fully-qualified type names (i.e. 'package.module.ClassName') as well as short type names (i.e. 'ClassName'). """ if objects is None: objects = gc.get_objects() if '.' in typename: return [o for o in objects if long_typename(o) == typename] else: return [o for o in objects if type(o).__name__ == typename] def at(addr): """Return an object at a given memory address. The reverse of id(obj): >>> at(id(obj)) is obj True Note that this function does not work on objects that are not tracked by the GC (e.g. ints or strings). """ for o in gc.get_objects(): if id(o) == addr: return o return None def find_ref_chain(obj, predicate, max_depth=20, extra_ignore=()): """Find a shortest chain of references leading from obj. The end of the chain will be some object that matches your predicate. ``predicate`` is a function taking one argument and returning a boolean. ``max_depth`` limits the search depth. ``extra_ignore`` can be a list of object IDs to exclude those objects from your search. Example: >>> find_chain(obj, lambda x: isinstance(x, MyClass)) [obj, ..., ] Returns ``[obj]`` if such a chain could not be found. .. versionadded:: 1.7 """ return find_chain(obj, predicate, gc.get_referents, max_depth=max_depth, extra_ignore=extra_ignore)[::-1] def find_backref_chain(obj, predicate, max_depth=20, extra_ignore=()): """Find a shortest chain of references leading to obj. The start of the chain will be some object that matches your predicate. ``predicate`` is a function taking one argument and returning a boolean. ``max_depth`` limits the search depth. ``extra_ignore`` can be a list of object IDs to exclude those objects from your search. Example: >>> find_backref_chain(obj, is_proper_module) [, ..., obj] Returns ``[obj]`` if such a chain could not be found. .. versionchanged:: 1.5 Returns ``obj`` instead of ``None`` when a chain could not be found. """ return find_chain(obj, predicate, gc.get_referrers, max_depth=max_depth, extra_ignore=extra_ignore) def show_backrefs(objs, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True): """Generate an object reference graph ending at ``objs``. The graph will show you what objects refer to ``objs``, directly and indirectly. ``objs`` can be a single object, or it can be a list of objects. If unsure, wrap the single object in a new list. ``filename`` if specified, can be the name of a .dot or a image file, whose extension indicates the desired output format; note that output to a specific format is entirely handled by GraphViz: if the desired format is not supported, you just get the .dot file. If ``filename`` is not specified, ``show_backrefs`` will try to produce a .dot file and spawn a viewer (xdot). If xdot is not available, ``show_backrefs`` will convert the .dot file to a .png and print its name. Use ``max_depth`` and ``too_many`` to limit the depth and breadth of the graph. Use ``filter`` (a predicate) and ``extra_ignore`` (a list of object IDs) to remove undesired objects from the graph. Use ``highlight`` (a predicate) to highlight certain graph nodes in blue. Use ``extra_info`` (a function taking one argument and returning a string) to report extra information for objects. Specify ``refcounts=True`` if you want to see reference counts. These will mostly match the number of arrows pointing to an object, but can be different for various reasons. Specify ``shortnames=False`` if you want to see fully-qualified type names ('package.module.ClassName'). By default you get to see only the class name part. Examples: >>> show_backrefs(obj) >>> show_backrefs([obj1, obj2]) >>> show_backrefs(obj, max_depth=5) >>> show_backrefs(obj, filter=lambda x: not inspect.isclass(x)) >>> show_backrefs(obj, highlight=inspect.isclass) >>> show_backrefs(obj, extra_ignore=[id(locals())]) .. versionchanged:: 1.3 New parameters: ``filename``, ``extra_info``. .. versionchanged:: 1.5 New parameter: ``refcounts``. .. versionchanged:: 1.8 New parameter: ``shortnames``. """ show_graph(objs, max_depth=max_depth, extra_ignore=extra_ignore, filter=filter, too_many=too_many, highlight=highlight, edge_func=gc.get_referrers, swap_source_target=False, filename=filename, extra_info=extra_info, refcounts=refcounts, shortnames=shortnames) def show_refs(objs, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True): """Generate an object reference graph starting at ``objs``. The graph will show you what objects are reachable from ``objs``, directly and indirectly. ``objs`` can be a single object, or it can be a list of objects. If unsure, wrap the single object in a new list. ``filename`` if specified, can be the name of a .dot or a image file, whose extension indicates the desired output format; note that output to a specific format is entirely handled by GraphViz: if the desired format is not supported, you just get the .dot file. If ``filename`` is not specified, ``show_refs`` will try to produce a .dot file and spawn a viewer (xdot). If xdot is not available, ``show_refs`` will convert the .dot file to a .png and print its name. Use ``max_depth`` and ``too_many`` to limit the depth and breadth of the graph. Use ``filter`` (a predicate) and ``extra_ignore`` (a list of object IDs) to remove undesired objects from the graph. Use ``highlight`` (a predicate) to highlight certain graph nodes in blue. Use ``extra_info`` (a function returning a string) to report extra information for objects. Specify ``refcounts=True`` if you want to see reference counts. Examples: >>> show_refs(obj) >>> show_refs([obj1, obj2]) >>> show_refs(obj, max_depth=5) >>> show_refs(obj, filter=lambda x: not inspect.isclass(x)) >>> show_refs(obj, highlight=inspect.isclass) >>> show_refs(obj, extra_ignore=[id(locals())]) .. versionadded:: 1.1 .. versionchanged:: 1.3 New parameters: ``filename``, ``extra_info``. .. versionchanged:: 1.5 Follows references from module objects instead of stopping. New parameter: ``refcounts``. .. versionchanged:: 1.8 New parameter: ``shortnames``. """ show_graph(objs, max_depth=max_depth, extra_ignore=extra_ignore, filter=filter, too_many=too_many, highlight=highlight, edge_func=gc.get_referents, swap_source_target=True, filename=filename, extra_info=extra_info, refcounts=refcounts, shortnames=shortnames) def show_chain(*chains, **kw): """Show a chain (or several chains) of object references. Useful in combination with :func:`find_ref_chain` or :func:`find_backref_chain`, e.g. >>> show_chain(find_backref_chain(obj, is_proper_module)) You can specify if you want that chain traced backwards or forwards by passing a ``backrefs`` keyword argument, e.g. >>> show_chain(find_ref_chain(obj, is_proper_module), ... backrefs=False) Ideally this shouldn't matter, but for some objects :func:`gc.get_referrers` and :func:`gc.get_referents` are not perfectly symmetrical. You can specify ``highlight``, ``extra_info``, ``refcounts``, ``shortnames`` or ``filename`` arguments like for :func:`show_backrefs` or :func:`show_refs`. .. versionadded:: 1.5 .. versionchanged:: 1.7 New parameter: ``backrefs``. """ backrefs = kw.pop('backrefs', True) chains = [chain for chain in chains if chain] # remove empty ones def in_chains(x, ids=set(map(id, itertools.chain(*chains)))): return id(x) in ids max_depth = max(map(len, chains)) - 1 if backrefs: show_backrefs([chain[-1] for chain in chains], max_depth=max_depth, filter=in_chains, **kw) else: show_refs([chain[0] for chain in chains], max_depth=max_depth, filter=in_chains, **kw) def is_proper_module(obj): """ Returns ``True`` if ``obj`` can be treated like a garbage collector root. That is, if ``obj`` is a module that is in ``sys.modules``. >>> import imp >>> is_proper_module([]) False >>> is_proper_module(imp) True >>> is_proper_module(imp.new_module('foo')) False .. versionadded:: 1.8 """ return (inspect.ismodule(obj) and obj is sys.modules.get(getattr(obj, '__name__', None))) # # Internal helpers # def find_chain(obj, predicate, edge_func, max_depth=20, extra_ignore=()): queue = [obj] depth = {id(obj): 0} parent = {id(obj): None} ignore = set(extra_ignore) ignore.add(id(extra_ignore)) ignore.add(id(queue)) ignore.add(id(depth)) ignore.add(id(parent)) ignore.add(id(ignore)) ignore.add(id(sys._getframe())) # this function ignore.add(id(sys._getframe(1))) # find_chain/find_backref_chain, most likely gc.collect() while queue: target = queue.pop(0) if predicate(target): chain = [target] while parent[id(target)] is not None: target = parent[id(target)] chain.append(target) return chain tdepth = depth[id(target)] if tdepth < max_depth: referrers = edge_func(target) ignore.add(id(referrers)) for source in referrers: if id(source) in ignore: continue if id(source) not in depth: depth[id(source)] = tdepth + 1 parent[id(source)] = target queue.append(source) return [obj] # not found def show_graph(objs, edge_func, swap_source_target, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True): if not isinstance(objs, (list, tuple)): objs = [objs] if filename and filename.endswith('.dot'): f = codecs.open(filename, 'w', encoding='utf-8') dot_filename = filename else: fd, dot_filename = tempfile.mkstemp(prefix='objgraph-', suffix='.dot', text=True) f = os.fdopen(fd, "w") if f.encoding: # Python 3 will wrap the file in the user's preferred encoding # Re-wrap it for utf-8 import io f = io.TextIOWrapper(f.detach(), 'utf-8') f.write('digraph ObjectGraph {\n' ' node[shape=box, style=filled, fillcolor=white];\n') queue = [] depth = {} ignore = set(extra_ignore) ignore.add(id(objs)) ignore.add(id(extra_ignore)) ignore.add(id(queue)) ignore.add(id(depth)) ignore.add(id(ignore)) ignore.add(id(sys._getframe())) # this function ignore.add(id(sys._getframe(1))) # show_refs/show_backrefs, most likely for obj in objs: f.write(' %s[fontcolor=red];\n' % (obj_node_id(obj))) depth[id(obj)] = 0 queue.append(obj) del obj gc.collect() nodes = 0 while queue: nodes += 1 target = queue.pop(0) tdepth = depth[id(target)] f.write(' %s[label="%s"];\n' % (obj_node_id(target), obj_label(target, extra_info, refcounts, shortnames))) h, s, v = gradient((0, 0, 1), (0, 0, .3), tdepth, max_depth) if inspect.ismodule(target): h = .3 s = 1 if highlight and highlight(target): h = .6 s = .6 v = 0.5 + v * 0.5 f.write(' %s[fillcolor="%g,%g,%g"];\n' % (obj_node_id(target), h, s, v)) if v < 0.5: f.write(' %s[fontcolor=white];\n' % (obj_node_id(target))) if hasattr(getattr(target, '__class__', None), '__del__'): f.write(" %s->%s_has_a_del[color=red,style=dotted,len=0.25,weight=10];\n" % (obj_node_id(target), obj_node_id(target))) f.write(' %s_has_a_del[label="__del__",shape=doublecircle,height=0.25,color=red,fillcolor="0,.5,1",fontsize=6];\n' % (obj_node_id(target))) if tdepth >= max_depth: continue if is_proper_module(target) and not swap_source_target: # For show_backrefs(), it makes sense to stop when reaching a # module because you'll end up in sys.modules and explode the # graph with useless clutter. For show_refs(), it makes sense # to continue. continue neighbours = edge_func(target) ignore.add(id(neighbours)) n = 0 skipped = 0 for source in neighbours: if id(source) in ignore: continue if filter and not filter(source): continue if n >= too_many: skipped += 1 continue if swap_source_target: srcnode, tgtnode = target, source else: srcnode, tgtnode = source, target elabel = edge_label(srcnode, tgtnode, shortnames) f.write(' %s -> %s%s;\n' % (obj_node_id(srcnode), obj_node_id(tgtnode), elabel)) if id(source) not in depth: depth[id(source)] = tdepth + 1 queue.append(source) n += 1 del source del neighbours if skipped > 0: h, s, v = gradient((0, 1, 1), (0, 1, .3), tdepth + 1, max_depth) if swap_source_target: label = "%d more references" % skipped edge = "%s->too_many_%s" % (obj_node_id(target), obj_node_id(target)) else: label = "%d more backreferences" % skipped edge = "too_many_%s->%s" % (obj_node_id(target), obj_node_id(target)) f.write(' %s[color=red,style=dotted,len=0.25,weight=10];\n' % edge) f.write(' too_many_%s[label="%s",shape=box,height=0.25,color=red,fillcolor="%g,%g,%g",fontsize=6];\n' % (obj_node_id(target), label, h, s, v)) f.write(' too_many_%s[fontcolor=white];\n' % (obj_node_id(target))) f.write("}\n") f.close() print("Graph written to %s (%d nodes)" % (dot_filename, nodes)) if filename and filename.endswith('.dot'): # nothing else to do, the user asked for a .dot file return if not filename and program_in_path('xdot'): print("Spawning graph viewer (xdot)") subprocess.Popen(['xdot', dot_filename], close_fds=True) elif program_in_path('dot'): if not filename: print("Graph viewer (xdot) not found, generating a png instead") filename = dot_filename[:-4] + '.png' stem, ext = os.path.splitext(filename) f = open(filename, 'wb') dot = subprocess.Popen(['dot', ('-T' + ext[1:]), dot_filename], stdout=f, close_fds=False) dot.wait() if dot.returncode != 0: # XXX: shouldn't this go to stderr or a log? print("dot failed to generate '%s' image: output format not supported?") f.close() print("Image generated as %s" % filename) else: if filename: print("Graph viewer (xdot) and image renderer (dot) not found, not doing anything else") else: print("Unrecognized file type (%s), not doing anything else" % filename) def obj_node_id(obj): return ('o%d' % id(obj)).replace('-', '_') def obj_label(obj, extra_info=None, refcounts=False, shortnames=True): if shortnames: label = [type(obj).__name__] else: label = [long_typename(obj)] if refcounts: label[0] += ' [%d]' % (sys.getrefcount(obj) - 4) # Why -4? To ignore the references coming from # obj_label's frame (obj) # show_graph's frame (target variable) # sys.getrefcount()'s argument # something else that doesn't show up in gc.get_referrers() label.append(safe_repr(obj)) if extra_info: label.append(str(extra_info(obj))) return quote('\n'.join(label)) def quote(s): return (s.replace("\\", "\\\\") .replace("\"", "\\\"") .replace("\n", "\\n") .replace("\0", "\\\\0")) def short_typename(obj): return type(obj).__name__ def long_typename(obj): objtype = type(obj) name = objtype.__name__ module = getattr(objtype, '__module__', None) if module: return '%s.%s' % (module, name) else: return name def safe_repr(obj): try: return short_repr(obj) except: return '(unrepresentable)' def short_repr(obj): if isinstance(obj, (type, types.ModuleType, types.BuiltinMethodType, types.BuiltinFunctionType)): return obj.__name__ if isinstance(obj, types.MethodType): try: if obj.__self__ is not None: return obj.__func__.__name__ + ' (bound)' else: return obj.__func__.__name__ except AttributeError: # Python < 2.6 compatibility if obj.im_self is not None: return obj.im_func.__name__ + ' (bound)' else: return obj.im_func.__name__ if isinstance(obj, types.FrameType): return '%s:%s' % (obj.f_code.co_filename, obj.f_lineno) if isinstance(obj, (tuple, list, dict, set)): return '%d items' % len(obj) return repr(obj)[:40] def gradient(start_color, end_color, depth, max_depth): if max_depth == 0: # avoid division by zero return start_color h1, s1, v1 = start_color h2, s2, v2 = end_color f = float(depth) / max_depth h = h1 * (1-f) + h2 * f s = s1 * (1-f) + s2 * f v = v1 * (1-f) + v2 * f return h, s, v def edge_label(source, target, shortnames=True): if isinstance(target, dict) and target is getattr(source, '__dict__', None): return ' [label="__dict__",weight=10]' if isinstance(source, types.FrameType): if target is source.f_locals: return ' [label="f_locals",weight=10]' if target is source.f_globals: return ' [label="f_globals",weight=10]' if isinstance(source, types.MethodType): try: if target is source.__self__: return ' [label="__self__",weight=10]' if target is source.__func__: return ' [label="__func__",weight=10]' except AttributeError: # Python < 2.6 compatibility if target is source.im_self: return ' [label="im_self",weight=10]' if target is source.im_func: return ' [label="im_func",weight=10]' if isinstance(source, types.FunctionType): for k in dir(source): if target is getattr(source, k): return ' [label="%s",weight=10]' % quote(k) if isinstance(source, dict): for k, v in iteritems(source): if v is target: if isinstance(k, basestring) and is_identifier(k): return ' [label="%s",weight=2]' % quote(k) else: if shortnames: tn = type(k).__name__ else: tn = long_typename(k) return ' [label="%s"]' % quote(tn + "\n" + safe_repr(k)) return '' is_identifier = re.compile('[a-zA-Z_][a-zA-Z_0-9]*$').match def program_in_path(program): path = os.environ.get("PATH", os.defpath).split(os.pathsep) path = [os.path.join(dir, program) for dir in path] path = [True for file in path if os.path.isfile(file) or os.path.isfile(file + '.exe')] return bool(path) objgraph-1.8.0/objgraph.egg-info/0000755000175000017500000000000012277007140015632 5ustar mgmg00000000000000objgraph-1.8.0/objgraph.egg-info/dependency_links.txt0000664000175000017500000000000112277007137021710 0ustar mgmg00000000000000 objgraph-1.8.0/objgraph.egg-info/PKG-INFO0000664000175000017500000002276712277007137016755 0ustar mgmg00000000000000Metadata-Version: 1.1 Name: objgraph Version: 1.8.0 Summary: Draws Python object reference graphs with graphviz Home-page: http://mg.pov.lt/objgraph/ Author: Marius Gedminas Author-email: marius@gedmin.as License: MIT Description: Python Object Graphs ==================== .. image:: https://travis-ci.org/mgedmin/objgraph.png?branch=master :target: https://travis-ci.org/mgedmin/objgraph ``objgraph`` is a module that lets you visually explore Python object graphs. You'll need `graphviz `_ if you want to draw the pretty graphs. I recommend `xdot `_ for interactive use. ``pip install xdot`` should suffice; objgraph will automatically look for it in your ``PATH``. Installation and Documentation ------------------------------ ``pip install objgraph`` or `download it from PyPI `_. Documentation lives at http://mg.pov.lt/objgraph. .. _history: History ------- I've developed a set of functions that eventually became objgraph when I was hunting for memory leaks in a Python program. The whole story -- with illustrated examples -- is in this series of blog posts: * `Hunting memory leaks in Python `_ * `Python object graphs `_ * `Object graphs with graphviz `_ .. _devel: Support and Development ----------------------- The source code can be found in this Git repository: https://github.com/mgedmin/objgraph. To check it out, use ``git clone https://github.com/mgedmin/objgraph``. Report bugs at https://github.com/mgedmin/objgraph/issues. Changes ======= 1.8.0 (2014-02-13) ------------------ - Moved to GitHub. - Python 3.4 support (`LP#1270872 `_). - New function: `is_proper_module`. - New ``shortnames`` argument for `typestats`, `most_common_types`, `show_most_common_types`, `show_growth`, `show_refs`, and `show_backrefs`. `count` and `by_type` accept fully-qualified type names now. Fixes `issue 4 `_. 1.7.2 (2012-10-23) ------------------ - Bugfix: setup.py sdist was broken on Python 2.7 (UnicodeDecodeError in tarfile). - The ``filename`` argument for `show_refs` and `show_backrefs` now allows arbitrary image formats, not just PNG. Patch by `Riccardo Murri `_. - Temporary dot files are now named `objgraph-*.dot` instead of `tmp*.dot`. - Python 3.3 support: no code changes, but some tests started failing because the new and improved dictionary implementation no longer holds references to str objects used as dict keys. - Added a tox.ini for convenient multi-Python testing. 1.7.1 (2011-12-11) ------------------ - Bugfix: non-ASCII characters in object representations would break graph generation on Python 3.x, in some locales (e.g. with LC_ALL=C). Reported and fixed by `Stefano Rivera `_. - Bugfix: setup.py was broken on Python 3.x - Bugfix: dot.exe/xdot.exe were not found on Windows (`LP#767239 `_). - Documentation updates: document the forgotten `find_ref_chain`, update `show_chain` prototype. 1.7.0 (2011-03-11) ------------------ - New function: `find_ref_chain`. - New ``backrefs`` argument for `show_chain`. - New function: `get_leaking_objects`, based on `a blog post by Kristján Valur `_. - New ``objects`` argument for `count`, `typestats`, `most_common_types`, `show_most_common_types`, and `by_type`. - Edges pointing to function attributes such as __defaults__ or __globals__ are now labeled. - Edge labels that are not simple strings now show the type. - Bugfix: '\0' and other unsafe characters used in a dictionary key could break graph generation. - Bugfix: show_refs(..., filename='graph.dot') would then go to complain about unrecognized file types and then produce a png. 1.6.0 (2010-12-18) ------------------ - Python 3 support, thanks to Stefano Rivera (fixes `LP#687601 `_). - Removed weird weakref special-casing. 1.5.1 (2010-12-09) ------------------ - Avoid test failures in uncollectable-garbage.txt (fixes `LP#686731 `_). - Added HACKING.txt (later renamed to HACKING.rst). 1.5.0 (2010-12-05) ------------------ - Show frame objects as well (fixes `LP#361704 `_). - New functions: `show_growth`, `show_chain`. - `find_backref_chain` returns ``[obj]`` instead of ``None`` when a chain could not be found. This makes ``show_chain(find_backref_chain(...), ...)`` not break. - Show how many references were skipped from the output of `show_refs`/`show_backrefs` by specifying ``too_many``. - Make `show_refs` descend into modules. - Do not highlight classes that define a ``__del__``, highlight only instances of those classes. - Option to show reference counts in `show_refs`/`show_backrefs`. - Add `Sphinx `_ documentation and a PyPI long description. 1.4.0 (2010-11-03) ------------------ - Compatibility with Python 2.4 and 2.5 (``tempfile.NamedTemporaryFile`` has no ``delete`` argument). - New function: `most_common_types`. 1.3.1 (2010-07-17) ------------------ - Rebuild an sdist with no missing files (fixes `LP#606604 `_). - Added MANIFEST.in and a Makefile to check that setup.py sdist generates source distributions with no files missing. 1.3 (2010-07-13) ---------------- - Highlight objects with a ``__del__`` method. - Fixes `LP#483411 `_: suggest always passing ``[obj]`` to `show_refs`, `show_backrefs`, since obj might be a list/tuple. - Fixes `LP#514422 `_: `show_refs`, `show_backrefs` don't create files in the current working directory any more. Instead they accept a filename argument, which can be a .dot file or a .png file. If None or not specified, those functions will try to spawn xdot as before. - New extra_info argument to graph-generating functions (patch by Thouis Jones, `LP#558914 `_). - setup.py should work with distutils now (`LP#604430 `_, thanks to Randy Heydon). 1.2 (2009-03-25) ---------------- - Project website, public source repository, uploaded to PyPI. - No code changes. 1.1 (2008-09-10) ---------------- - New function: `show_refs` for showing forward references. - New functions: `typestats` and `show_most_common_types`. - Object boxes are less crammed with useless information (such as IDs). - Spawns `xdot `_ if it is available. 1.0 (2008-06-14) ---------------- - First public release. Platform: UNKNOWN Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.4 Classifier: Programming Language :: Python :: 2.5 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.1 Classifier: Programming Language :: Python :: 3.2 Classifier: Programming Language :: Python :: 3.3 objgraph-1.8.0/objgraph.egg-info/SOURCES.txt0000664000175000017500000000144712277007140017526 0ustar mgmg00000000000000.gitattributes .gitignore .travis.yml CHANGES.rst HACKING.rst MANIFEST.in Makefile README.rst objgraph.py setup.py tests.py tox.ini docs/42.png docs/CHANGES.txt docs/HACKING.txt docs/all-the-chars.dot docs/canary-chain.png docs/canary.png docs/chain.png docs/chain.txt docs/class-with-finalizers.png docs/conf.py docs/extra-info.png docs/extra-info.txt docs/finalizers.png docs/forward-chain.png docs/generator-sample.txt docs/highlight.png docs/highlighting.txt docs/index.txt docs/objgraph.txt docs/quoting.txt docs/refcounts.png docs/references.txt docs/roots.png docs/sample-backref-graph.png docs/sample-graph.png docs/too-many.png docs/uncollectable.txt docs/_static/mg.css objgraph.egg-info/PKG-INFO objgraph.egg-info/SOURCES.txt objgraph.egg-info/dependency_links.txt objgraph.egg-info/top_level.txtobjgraph-1.8.0/objgraph.egg-info/top_level.txt0000664000175000017500000000001112277007137020364 0ustar mgmg00000000000000objgraph objgraph-1.8.0/tox.ini0000664000175000017500000000011512252047677013672 0ustar mgmg00000000000000[tox] envlist = py26, py27, py32, py33 [testenv] commands = python tests.py objgraph-1.8.0/setup.py0000755000175000017500000000632412232020540014054 0ustar mgmg00000000000000#!/usr/bin/python import codecs, os, re, sys, unittest, doctest try: from setuptools import setup except ImportError: from distutils.core import setup setuptools_options = {} else: setuptools_options = dict( test_suite='tests.test_suite', ) try: unichr except NameError: # Python 3.x support unichr = chr def read(filename): f = codecs.open(filename, 'r', 'utf-8') try: return f.read() finally: f.close() def unsphinx(text): # remove Sphinx extensions used in CHANGES.rst from reStructuredText # so that it can be handled by plain docutils return text.replace(':func:', '').replace('.. currentmodule:: objgraph', '') def get_version(): r = re.compile('^__version__ = "(.+)"$') for line in read('objgraph.py').splitlines(): m = r.match(line) if m: # our read() returns unicode; coerce it back into str, or # python2.7 setup.py sdist will try to mix a unicode filename with # the byte stream of the .tar file return str(m.group(1)) raise AssertionError('Could not determine version number from objgraph.py') def get_description(): readme = read('README.rst') changelog = read('CHANGES.rst') description = unsphinx(readme + '\n\n\n' + changelog) if '--unicode-description' in sys.argv: sys.argv.remove('--unicode-description') else: # can't use u'' literals, this is supposed to work on both Py2 and Py3 description = description.replace('Kristj%sn' % unichr(0xe1), 'Kristjan') description = description.encode('ascii', 'replace').decode('ascii') return description def build_images(doctests=()): import tests if not doctests: doctests = tests.find_doctests() suite = doctest.DocFileSuite(optionflags=doctest.ELLIPSIS, checker=tests.IgnoreNodeCountChecker(), *doctests) os.chdir('docs') result = unittest.TextTestRunner().run(suite) if not result.wasSuccessful(): sys.exit(1) if len(sys.argv) > 1 and sys.argv[1] == '--build-images': build_images(sys.argv[2:]) sys.exit(0) setup(name='objgraph', version=get_version(), author='Marius Gedminas', author_email='marius@gedmin.as', url='http://mg.pov.lt/objgraph/', license='MIT', description='Draws Python object reference graphs with graphviz', long_description=get_description(), classifiers=[ 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.4', 'Programming Language :: Python :: 2.5', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.1', 'Programming Language :: Python :: 3.2', 'Programming Language :: Python :: 3.3', ], py_modules=['objgraph'], **setuptools_options) objgraph-1.8.0/setup.cfg0000644000175000017500000000007312277007140014165 0ustar mgmg00000000000000[egg_info] tag_build = tag_date = 0 tag_svn_revision = 0 objgraph-1.8.0/PKG-INFO0000644000175000017500000002276712277007140013457 0ustar mgmg00000000000000Metadata-Version: 1.1 Name: objgraph Version: 1.8.0 Summary: Draws Python object reference graphs with graphviz Home-page: http://mg.pov.lt/objgraph/ Author: Marius Gedminas Author-email: marius@gedmin.as License: MIT Description: Python Object Graphs ==================== .. image:: https://travis-ci.org/mgedmin/objgraph.png?branch=master :target: https://travis-ci.org/mgedmin/objgraph ``objgraph`` is a module that lets you visually explore Python object graphs. You'll need `graphviz `_ if you want to draw the pretty graphs. I recommend `xdot `_ for interactive use. ``pip install xdot`` should suffice; objgraph will automatically look for it in your ``PATH``. Installation and Documentation ------------------------------ ``pip install objgraph`` or `download it from PyPI `_. Documentation lives at http://mg.pov.lt/objgraph. .. _history: History ------- I've developed a set of functions that eventually became objgraph when I was hunting for memory leaks in a Python program. The whole story -- with illustrated examples -- is in this series of blog posts: * `Hunting memory leaks in Python `_ * `Python object graphs `_ * `Object graphs with graphviz `_ .. _devel: Support and Development ----------------------- The source code can be found in this Git repository: https://github.com/mgedmin/objgraph. To check it out, use ``git clone https://github.com/mgedmin/objgraph``. Report bugs at https://github.com/mgedmin/objgraph/issues. Changes ======= 1.8.0 (2014-02-13) ------------------ - Moved to GitHub. - Python 3.4 support (`LP#1270872 `_). - New function: `is_proper_module`. - New ``shortnames`` argument for `typestats`, `most_common_types`, `show_most_common_types`, `show_growth`, `show_refs`, and `show_backrefs`. `count` and `by_type` accept fully-qualified type names now. Fixes `issue 4 `_. 1.7.2 (2012-10-23) ------------------ - Bugfix: setup.py sdist was broken on Python 2.7 (UnicodeDecodeError in tarfile). - The ``filename`` argument for `show_refs` and `show_backrefs` now allows arbitrary image formats, not just PNG. Patch by `Riccardo Murri `_. - Temporary dot files are now named `objgraph-*.dot` instead of `tmp*.dot`. - Python 3.3 support: no code changes, but some tests started failing because the new and improved dictionary implementation no longer holds references to str objects used as dict keys. - Added a tox.ini for convenient multi-Python testing. 1.7.1 (2011-12-11) ------------------ - Bugfix: non-ASCII characters in object representations would break graph generation on Python 3.x, in some locales (e.g. with LC_ALL=C). Reported and fixed by `Stefano Rivera `_. - Bugfix: setup.py was broken on Python 3.x - Bugfix: dot.exe/xdot.exe were not found on Windows (`LP#767239 `_). - Documentation updates: document the forgotten `find_ref_chain`, update `show_chain` prototype. 1.7.0 (2011-03-11) ------------------ - New function: `find_ref_chain`. - New ``backrefs`` argument for `show_chain`. - New function: `get_leaking_objects`, based on `a blog post by Kristján Valur `_. - New ``objects`` argument for `count`, `typestats`, `most_common_types`, `show_most_common_types`, and `by_type`. - Edges pointing to function attributes such as __defaults__ or __globals__ are now labeled. - Edge labels that are not simple strings now show the type. - Bugfix: '\0' and other unsafe characters used in a dictionary key could break graph generation. - Bugfix: show_refs(..., filename='graph.dot') would then go to complain about unrecognized file types and then produce a png. 1.6.0 (2010-12-18) ------------------ - Python 3 support, thanks to Stefano Rivera (fixes `LP#687601 `_). - Removed weird weakref special-casing. 1.5.1 (2010-12-09) ------------------ - Avoid test failures in uncollectable-garbage.txt (fixes `LP#686731 `_). - Added HACKING.txt (later renamed to HACKING.rst). 1.5.0 (2010-12-05) ------------------ - Show frame objects as well (fixes `LP#361704 `_). - New functions: `show_growth`, `show_chain`. - `find_backref_chain` returns ``[obj]`` instead of ``None`` when a chain could not be found. This makes ``show_chain(find_backref_chain(...), ...)`` not break. - Show how many references were skipped from the output of `show_refs`/`show_backrefs` by specifying ``too_many``. - Make `show_refs` descend into modules. - Do not highlight classes that define a ``__del__``, highlight only instances of those classes. - Option to show reference counts in `show_refs`/`show_backrefs`. - Add `Sphinx `_ documentation and a PyPI long description. 1.4.0 (2010-11-03) ------------------ - Compatibility with Python 2.4 and 2.5 (``tempfile.NamedTemporaryFile`` has no ``delete`` argument). - New function: `most_common_types`. 1.3.1 (2010-07-17) ------------------ - Rebuild an sdist with no missing files (fixes `LP#606604 `_). - Added MANIFEST.in and a Makefile to check that setup.py sdist generates source distributions with no files missing. 1.3 (2010-07-13) ---------------- - Highlight objects with a ``__del__`` method. - Fixes `LP#483411 `_: suggest always passing ``[obj]`` to `show_refs`, `show_backrefs`, since obj might be a list/tuple. - Fixes `LP#514422 `_: `show_refs`, `show_backrefs` don't create files in the current working directory any more. Instead they accept a filename argument, which can be a .dot file or a .png file. If None or not specified, those functions will try to spawn xdot as before. - New extra_info argument to graph-generating functions (patch by Thouis Jones, `LP#558914 `_). - setup.py should work with distutils now (`LP#604430 `_, thanks to Randy Heydon). 1.2 (2009-03-25) ---------------- - Project website, public source repository, uploaded to PyPI. - No code changes. 1.1 (2008-09-10) ---------------- - New function: `show_refs` for showing forward references. - New functions: `typestats` and `show_most_common_types`. - Object boxes are less crammed with useless information (such as IDs). - Spawns `xdot `_ if it is available. 1.0 (2008-06-14) ---------------- - First public release. Platform: UNKNOWN Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.4 Classifier: Programming Language :: Python :: 2.5 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.1 Classifier: Programming Language :: Python :: 3.2 Classifier: Programming Language :: Python :: 3.3 objgraph-1.8.0/docs/0000755000175000017500000000000012277007140013274 5ustar mgmg00000000000000objgraph-1.8.0/docs/too-many.png0000644000175000017500000003433012277007131015550 0ustar mgmg00000000000000PNG  IHDRKbKGD IDATxy\T? ;"Ȏ,  *)Dci}2XBi&Y~Qj ʾ3,"02 YχÝ{ι. !ġ]B!4-0BI&L8BIBM@RRR]]U1BHQQQdW!ZOL8t:=22*DB)BH2a!Lp!$&B!Ʉ BH2a!Lp!FP&B#JY+B=xg p!$&Bg{dqXTUF}}xHJ4QJB[/ /ŋ"8}8Bqѣ11r%:.?>BՅzHKV??&Bز .#ڤ5D!4q#A\]Bhde<<zB.8߃"Bd2w`0`x?Whi\,i>}8B#`j țN Bh"᧟ %<yy?l]z6<uhj" Bh/]\eOTS￟&!Lp!$&B!Ʉ BH2a!Lp!$&B!Ʉ BH2o9===|yʬ.P<`!p8G>|ѣQ?QMMm֬Y繾2q@|"*p!4yѣG>$UUUMMM---"̙1gmܸ %ny90B8N[[[[[[kkkkkÇښ>9k,mmmMMM###CMMMmmmY gt&-_u?Qla!<~d677755JolPFFF[[[KKKWWW[[LWWWGGGKK[SSSIIireI˳aԜ7oByށJ~CZ()+L6q  MMMc0---PSǧtvž=p2hvko~יl6| ;00ZZd 3/QW:!ir[ZZ FssxLfSSSGGqkhhLmUaeeeMMMĨڼy 611QWWDEFFNss8Xgp\ra8{vS֐3f PXӧ᭷v_~=^ʟ9fc!$Nx1d2455S~fʪ*"\g̘ajjjjjJM244R]rVTWބC\3M~ΞccOOPRس23 ,3[Ź}aǑ_~+Ν8z|o_ߍ}8r`0L&$bFΙ3pFFFg644N 3"߿?<<` ~ڴ/vb}ނ~߇/|#"m̄sq\g20{6AUߟx688#@w7 ׃/XZ xxyЇÄCfpp ߿>lDQ(]]]" #LWWWʈ.ZOOB144䅙TVUUv֭Tdɒ .I8eeb 1t 4xWxK;B|bj*lL_""Y p!D&"x1TSS&[QQqܹ666aFLRZ6hiiiii~z^MzX,VnnnfffRRRnnnwwY8cbb2&WBg'?W='"xLJ|+=B̄<((x reeb!LgggmmY eܹ0ww[3,ȪHL!4&Z"xȤ CڱcLjT{Wg/\.p8+{ll^de5`b/zSSBHʴ򩯯ohhhnn&d/ůE{޽{`ƍ,--gϞ=}e ݺu+###333;;HǏOABB͓|--x\:s'lkð|9_K~&- ==ꂫW^t9&BHF0#!Æ 366"X{"hhhX[[[ g~JeeerrrRRRZZZGG۾}<==dew W$_aj #\.&¶mSR&@z:<"/ Kgg{kFbiRbtttlmm֯_omm=o<5ܜLPPPpssۻw/j4^h:%"\MMv[OCv6<|`bϼl'HI@^χ-[`׮Ws)N===Dodx ͛G<Йt'`:uuuݽ{Ν;w))){noo/F^`18w\aNXbNAA^fa+%ΥDH=x𠲲xR//f{R.[WWGYIIɝ;w\GppvTWWG<<<_ÄCH V>˳077?7r9'Kkkk^^oȱb)**.\j$F21aH;w /\NUL8UTT,,,}{͛'aFhii}۷\ <==}]{{{rC\.D W\l2ΕNp6]WWWVV?#LSSXvZ KKKR&`ܾ}&_pMMMM_|;{͸ZUUUÇ{{{ ’1$ &BhxxH]QQ188(''gjjjiidiiiaa1[ Oኊ§JJJT~HhDXEVrvv;rHLL&&s„C|Fffffcc`eeekkkbb"ߪ/npp0??i555CCCrrrNNNt:^ԮW3!n޼###uօ*++ .gffݺuĉ,@ӏ BaĚFbC+++++m۶Y[[[YY]d0̼®.*jnnp۷/\p…\X,VZZquHNNȑ#SDp8*))YfMFF`=?L8o\g<`X222AAAĞsOOOOAAiyyy B999[N4{i<M!}||RRR# 2^}P:04(...(('~˛yFm#lvQQQvvvvvvVVVcc… ]\\,Yj``@vɓWƦ\]]_4ӧOVPPسgϮ]fΜ9M_ѣG+VNIIzp? &g`` 77֭[YYY...nnn...rEmW,[豉r׳/8s挚[oM7[[[ۊ+zzzn޼9CifQۉ8>Qݙn477_te˖.]*ωFFCMG>|獌8iӦۛbHy&Ă-^Gb:j0޽.]J\Q[xxa`` 11dddfOOO{O?B@ssJMNN՝/'0MwR///h"^YZZ%*D***-\PII_HWW/]tƍ>gggۂ .TVV8pŋ۷op dddRRRuL8$N sssiѢE.mZgggKJEDqŨիWC">ɯ/^433;|p@@V3L///ƃ D]KKKvvvfffvvvaa̙3/^D477$''ܿ_UUuɒ%u5ggg1*2BEE磢֮]K}||Dg](// x񢹹Cmd2/_.//kƥ&9jb쑘!"x?~RVVd///oooGGGYSVVqFK]lq[2v*7T6}ƍkt:]oxСk׮9::^zlZ///Ea¡E~$effvtt(++˖-[xħ'$$$$$vttxyy޽KXׯ;::ܹS܃ ۗ䔐Cb1˗/Ӌ'- N'K?7DS/*555---''_CC}ҥ-!1{&%$$WWWϘ1kŊ^^^dW7#.]b2򊃃٥'%%9;;9rl///}}xɾ>0IKKKMMxZ/nݺE B.988B'tz@@-uMC]r6l ?8..0ffddTVV[YY${N?^##uKޥ5u%m۶O]ZPVVFo;xE-ZYYI\\l00 dee yzz}5ӓ'OxUUU}}}(or#""φ33͛7K56~ =z1IRooJ;) mxxAhrrrVVVjd($'+++666)),\H5777ڃcjjj~wb}}@I 6ڿŋ,Xp!Iv=oookk똘 p> j... ONN~:PVV]jħǏ/\pܹ[n)++[^[bpڏ>+O?$ݽ{&&&FO!L87.{m"rssVZl2iΕdmINN&⸳D 7nܠP(W޼yի%d2:믿Ι3ѣmPRR`h "uʕ;wK/_޾}{xxjhh(11188B#""ZZZ.M###tzttt?uM栠 9993g ]}||z{{ɮeFnd$E<&?rȲeh4oݺ%?Ӫ#""NkhhApppbbb__٥ ILL TWWP(>>>d5]:::BBBuuuϜ9388HvEc#f>00@v-cOD>4JKK|||Վ!!!qP(77{]888766]4 QUUUWW !qΜ9_D㍋ DCgggdddPP1򦮮N555] yJFkk+٥ ϣG[WWW|w2339uMްYfuuu] 9993g\v/\Do|}})|(o NJJz7hiiimݺ5**ɓ'd&<,+&&& @^^^QQqͱ?(#+zl55u։t L8wݻwϛ7444^{dFbN;455棏>dd&TAAA3gΔ󋌌# BBB>|HvEϖ~z) '8NAAAhh F#"UדFhmm=s 1'F9sF0!44h,,,`]"IDAT0X3g͛7_~eX &" .4L&3<<9"//Nv]CRg͚\PP@vQBf#"",--eeeȮy(++o޼Y&a2O&R( ۷/##C**++.,J1cF```ttts{ァCP'p"##eddɮh^uiAp⡸NNN EEE% _ګkbl .4\^ɓ'O^h̙3gd%Tn+V]$%%)))mٲma‰nb%aii.?'===88xܹ&o񆲲 m^.]Fv9uVVp")< hlldeeI[7ghh(22BRZZJvQ$T*>11r&)::Z^^7g=Sii駟~jjj6m:|gg'uw444T?pܻwFFFFJbyEFFE6<~xڵ#vzo-[`¡1 G͙3XD\`iFTMsЅ |}}TFpppII ERREEE___do0O>Lܕ+Wv)&&0ᄧ9Bl`]Çult ivk֬Ykƌ ++{e99wyM0]gggDD̑:"_ww72JJJ:6=N]iP(ҳ ɘl3g g̘!%O?%nIlmmoߎ6 7].\qF%%%*~q 6.m6-"""cCCCHH6)ߙ0>>QVVvǎ]]]jjjwhfff.4pS˛6mRQQY|Sϔ~}"1=HMP6nXQQAv9_:p!xbq쏊#Lpm+wICK8PVVFvQkmm 500iɯW_%.=] %!'4p/wlR~OOO*{\ ۷oWRRRPP ""K%AN<)##3fV\)F3B&d;vhhhP(ŋ?~\L/L9e6yyyUUUbb$^Wr,+22͛w1ѿCbYttЪVcL8.x7ܹ3srr,Z/Iv .||xTTT/AYYYwww--yk***'HOW^p8 ?suuumo#i7޸qflܸrrr;vxMMM_Azڧoٲe%%%,8BP?s//ѯ z]999ccc{ ABՈIII˗/'iRއ}}}۶mtNOOwrr ײHIY?b_ZfMttUF_H7ONNꫯl٢\.w``N?Mڇ嶴XZZ# pa1RRRt萐K&bZ UIƥK.]>4449\.ݻ,LDDFFzyy@N>-̪DXdIyyRGfU"ܹs1Ϗb㏵¬ Ms?GH!E GFdddh4FgϒQ 6ofbΞ=+Dě,B)**fa""99y֭c>%++Kш4B MٳCv# ` 1rssX&//***JJJOMMJR( R*.MNNNAAAUUUEEEYYYUUUSSSIIΎb222222 5c ---]]]mmmMM1Hko`ii`kkkkkk+++ccf 1p>o8$[xkפs?~L쿐2c UUU%%%ee3go"O>DSSS[[[KKK)[J'O@__ix]Jl cΚPH8$5,飠f͚\7&;w.晄31(*W[edD}ݝI G0lD}ϟo">fV=tMdT  M,>a#ϳ*X B’%ORAL(eFFƴ G0l}.,] 4.!i? J:j>罓">LKK_ccc;;; 6o޼fD G0l}K@6fdea PW'0>'߿ѣJJJ8G0l}3g/ܸl6p8e +)) o޼E|eddx%} G0le udW3.߿ѢE4MCC#88jjj_ G0l}ƚ5 / Ռ> ﱖ #`>qARE𱳃\ֆ~ >AApё`>a#OAn'O]?pQ(.pDm#`>~d]2x4Fo/r3gnR*} G0l`]3\yM} G0l VD.88X^^>;;ѣG6j4l} Gu_1 8wiJt`#`>H!BS!Ћߒ! !$:550{ +>L8J&Zi4M&BI.Jcn\߻پ}qGۉLNX24iskKwQX؈}K<#>qtrMNt53]<,Ο_24D<5Qp!$QW6嗪͛Go;{hǎ5}ǎ\Yjci8A֖QQ#^g  ^?ҕ+|e{|sM BConӧ֮+-TWF@M PYY552**?Cz|:p8 ?KV6sNO}|󻳲eG3,`IȭF!4i&'NCI d+*r kLN3vF'#DUL eę\QTs0BHrFGֆCVXaooOv-ѣG,BDN}}={zzzlقNL}8%%Pްkhh^:=F-_\CCw&*qɡ]v]H#&WTT:u ?u{}]]]k׮ "%5r/rXcaaO0[N  ׯ_r֭q%=nݺDL8 [ߧ~{"Q@UUACL1{N$p'u ifG)y_G lذAmFr3Pp+WK}?~<<}.M$={:gA Ԅ[p ._w^&&N#b瑗7⠚ݻIGQQQQܨڵk`I" {޽{mll\RSSfuuu/_e%%%!W"N:s6999###OOO:.//OviH h4gg^{ / EbUVZJ_Wڒ]8I~#~H!7B!Ʉ BH2a!Lp!$&B!Ʉ BH2a!Lp!$&B!Ʉ BH2a!LcKIܑG0l}AS IV)G0l}ASMF!$:B!Ʉ BH2a!LcZC>IENDB`objgraph-1.8.0/docs/conf.py0000664000175000017500000001624412201125630014574 0ustar mgmg00000000000000# -*- coding: utf-8 -*- # # objgraph documentation build configuration file, created by # sphinx-quickstart on Sun Dec 5 04:46:55 2010. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys, os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.append(os.path.abspath('..')) def relative(filename): here = os.path.dirname('__file__') return os.path.join(here, filename) def get_version(): d = {} exec open(relative('../objgraph.py')).read() in d return d['__version__'] def get_short_version(): return '.'.join(get_version().split('.')[:2]) # -- General configuration ----------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.txt' # The encoding of source files. #source_encoding = 'utf-8' # The master toctree document. master_doc = 'index' # General information about the project. project = u'objgraph' copyright = u'2010, Marius Gedminas' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = get_short_version() # The full version, including alpha/beta/rc tags. release = get_version() # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. unused_docs = [ 'README', ] # List of directories, relative to source directory, that shouldn't be searched # for source files. exclude_trees = [ '_build', 'build', 'objgraph.egg-info', ] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. Major themes that come with # Sphinx are currently 'default' and 'sphinxdoc'. html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. html_theme_options = { 'rightsidebar': True, 'footerbgcolor': 'white', 'footertextcolor': 'gray', 'headbgcolor': 'white', 'headtextcolor': '#134D73', 'relbarbgcolor': 'white', 'relbartextcolor': 'gray', 'relbarlinkcolor': '#869ABF', 'sidebarbgcolor': 'white', 'sidebartextcolor': 'gray', 'sidebarlinkcolor': '#869ABF', 'bgcolor': 'white', 'textcolor': 'black', 'linkcolor': '#869ABF', ## 'visitedlinkcolor': 'purple', <-- my sphinx is too old? 'codebgcolor': '#f0f5ef', 'codetextcolor': 'black', } # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The stylesheet used instead of default.css html_style = "mg.css" # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. html_short_title = "home" # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = [ '_static', ] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_use_modindex = True # If false, no index is generated. html_use_index = False # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. html_show_sourcelink = False # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'objgraphdoc' # -- Options for LaTeX output -------------------------------------------------- # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'objgraph.tex', u'objgraph Documentation', u'Marius Gedminas', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # Additional stuff for the LaTeX preamble. #latex_preamble = '' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_use_modindex = True objgraph-1.8.0/docs/uncollectable.txt0000644000175000017500000000234012271153747016661 0ustar mgmg00000000000000Uncollectable garbage --------------------- Objects that have a ``__del__`` method cannot be collected by the garbage collector if they participate in a cycle, prior to Python 3.4. >>> class Nondestructible(list): ... def __del__(self): ... pass >>> x = Nondestructible() >>> y = [] >>> z = [] >>> x.append(y) >>> y.append(z) >>> z.append(x) When you remove all other references to these, they end up in ``gc.garbage``. >>> import objgraph >>> del x, y, z >>> import gc >>> _ = gc.collect() >>> len(gc.garbage) 1 We highlight these objects by showing the existence of a ``__del__``. >>> objgraph.show_backrefs(objgraph.by_type('Nondestructible'), ... filename='finalizers.png') # doctest: +NODES_VARY Graph written to ....dot (8 nodes) Image generated as finalizers.png .. figure:: finalizers.png Note that classes that *define* a ``__del__`` method do not have this indicator >>> objgraph.show_refs(Nondestructible, max_depth=1, ... filename='class-with-finalizers.png') Graph written to ....dot (5 nodes) Image generated as class-with-finalizers.png .. figure:: class-with-finalizers.png objgraph-1.8.0/docs/extra-info.png0000644000175000017500000004412712277007131016066 0ustar mgmg00000000000000PNG  IHDR3}hbKGD IDATxy\Mwk߄R4B*d/ei(Q iːc7cdd&QhV%$Dv~s]{ν}||s?u?|އa A%HAD hDXr eBBCjBYe&,, Cȅ0R&AF22@L e"d) #HBVC e".a:A(h Z+6 #HBrG60`l ի =[ԛEoS>VTKpR6AΝWǃ7o * OAm&4%% _%LgDE Hp,YL&0SO3gPfadx `>pu]]`2AzQ f"&I%%`j OQ(aK4']&ĉee۷p2OϞAm&4Bjhf΄tJg2!# _/@Uag!6^ &R&B4t‡^ G+ƙAD R&AF22@L e"d) #HAD,>44@M JK۾ D.hu=' 0rd;UK; j3a8t=&7` ڸ D.D;w>'CD wrLD`0&<<6$&O==PUaf-tuGط @K z>aKr~=BV@XX |ed`&aؾ}mz l"آE-jk?vΜ2cF}r˗jNIWMD(- i=yBC"#;`!3&L>++x>|XRİ%9RT9TLGU[klqƍ۷?K,+03.xXYr0ltl쯿ޫHDTZdL:ƍrZMoVhQQ(s2]< w~JO^ fAK &O Bx|?{Eh6OQ sawUc-, 3RaKbPhNNp2TVٵz{̚pÉ`kAǰ%3R#Hbݱ.7-?Xe"O\ĔIfʎq&PoAS`&˃CWпDž ^ wo`0@],,nb ѣ?":&g"ڃm;"H1cRrLÖĠ6 #HAD R&AF22@L e"d) #H{{mmHxJm9pL ?_bX 55PSo}HY#5Rh?p5߿.uoBɓ?u j!h$1HfR\ ?{7@M e HС};線A8&7y2ҥl`g P_v["rI̟ŋ?K\|}eD=(LCc>%`˗,/HBRH3P*7n|. >.X XZ1KKPc͛}ݻ#$$tʱ`0pvmO>% r!0F--Ѐɓ!*#7arI=0ի+*0W>L9sc*1? l-L33 c2?Kw nF,#05њ3fcn ;!))06D6TT> 1TdDħ 3f`qqػwUT`cؘ1-ն20賈x8Na}A,OδY8UWcMMXz:,e+FH%p<aPRy2llTW11/ΜXX4" AygPP\.2wFB (/c@!E#HH7SVbzazaFF؛7N?)0OG؈aXn) 0KO,=0Iuu ,BR$R&,1>>K33ttaðOuBwLaa6bD wouZ{wI(vmL,?' ز`nغrsө"_A@M @h^]Yb[Hģ| 32x0+r\HQRO~|gVS`wySDB,-1khèTƍg1l6ȨmWl{ьӪiiZ%tFB0LW;u {kj22<HLy|PS QQSΞ~o1 öm|BQ8kU%1sfˮfd||ȟv<`744"R6iҤ$%%펢Z\\?"R2hkkt:tqqqr0%>RgҥK,YtiEEm!e*'צMN8vI#Gyzzz+R/駟Y_~25T%>r`„ [nݼysnn쬠C]]o߾k ߟ) l6ƆNhL%zԩh|PQQ9sLNNΟ)#H@iiĉ_z2vXXZZn߾}֭>EH Onn.ZC7o\b,v e*6iii'OFK|Ng˖--)SQAK|Hu[,RBuu'O^tI"e*h _bņ U&R"={ݻWZ"e* uuu(i100رcoVTT$2k׮%>d͚5C ٴiTJCT*xt~lF$;ǏGK|sxNIj%>hɓӧOwL("ھ}{'!e|ϢEc۶muuu\LIFK|?(={\v?p!H-Q6o8Pp/_vԩ ))ۂ . e&M"α{?}{C+^~-bNHWd2`6`@||<>v:}}m۶urLÇX,l6 bLLL޾}+Hhqㆁϛ'⏴x왙xv]% @ds-{ё#Gr$xxx= QH WW} ~h 55kB ÇD%޽ ׮]kU͔{im a}TT]"C P(C !+0zq;v]W!eʉO=z4?ERT>!HҥKt:?N$)FFFVVV߈f8;;T0~&}$R6hF}}N@@ eʃ4MtUUU//L#Ǐ{666D"eV\9dެ<شiOc0 wGEw$bŸ2-ZD/RfŊ=u떄Ld2g̘AR|ͺuϟDuuu^իW=z )3bĈc?~\m«!,,ݦ &"k$ @WWÇT]{ .])%ϟ?/++9r/Ҳfii)CNNB>|8ю0y-ZyhIZ;i``0eD 8ͼD;>$><<\e T8YJ[ll$?AD ǂ lvttt92ѣG0sssww &F}N •.\XZZfG|5sL"333(2kkk׬Y#;1\ܹ͛#HQJUV#8|MRRRRRRVuuuD{޾}Ǐw!&ŋܹvډ'jhh={n޼)Һ"իjժ3g_xtCbbw}bgqơC2 M6ɏ?ݴiӜ9stuu E}}} eXyə6mڍ7Z{v`m˗/@x|/^{{{Y;fffqFgLp}Aׯ>8c(|i4mĈ-ڵkӧpJZY7P0ex}wrrp n݊T.+{mf͚J>_WWe&Lp֭Hƙ-JLL,++[r%bggWQQZ dddܻw߿ďMll?,HQ?E{@o+(ieM0>//Z䔂SSSљ3gζmk֬/TTTԬWu͛׫W/A~;vlFFF4MMMmȐ!ׯ̽+eeYZZx7iddw^9͋ڸq,DʲhB,*:fXS@9rdvvvtLH ѣ&tLHr) A剤#e"D`0 TXX(@_|Q\\,@̀JJJD2AD H+++\Ԕb&2H%ۮpZ:~DH2/^BPTkR{PSSCe888L2CPu 5YN$R!!!ZGt TkRGOOJyF8Qwć!zISSI.]%| LII-Zxw8:w\///|7hr{E՚TV]]p)S0 ۵kWbb <444##ѣ/KKK 266 d466Ν;X4TBʵFE"(2[ Chddn:kkk55OyyyW䬩 544<~xXXSbbb: .P5Fx<|;wҢ޵k$'' ׯ*># UtZkLn3[_j*A axW^ 8p yoW*ru6Nl"y*Uhբʟ\kMMMjjj) fR( |p 0ѣGRGC1bTTT&DNQ60&YYY8΋/\"Yj⣡"5a8Nccm˽n1 Y.^{n mEC:Z:@"eJu֩fddTWW oذ>222??۷4xĈ3f蘡cǎEEEݻw`899}R5aw'Rl]]]dB;;0WWNCPv ~m:Oy󦽽}YYY޽ ?D /_h4CCCDL` D @˗/O @LQQQGH]8q oRRҀΜ9d%%%x ˗/geehjj<}ر{ҭ[7|)CqM4$$dx'l_ugx&s 'L 6 ZRRASi3 J~ ~))) JJJuqF<;>>Xwnܸ߇.! .m۶=xp8_~:ܹ/''qMW^{AQ۷ok{>|ƍ;w'OX[[+r}|| rrr7_P| IDATl"Ū8I yZrrĉ[<%6Bl~z??/'O`x...޽KNN|USS3$$dʕľ}ςݷ5e2YYYh-z-\rOp͛7?_xΝ;k׮8qFaaٳg%9X'!$"Z[<+טNNN׮]KOO0bڴi¿{쩭{&x<^iiiUUpbUUUII e&k*Λ7/99y,СCӦM:fݻ~<[vv***N|8446>|fwb ihho߾] o۷Z*-- W&!A)Xצ63HbEnbfffddY3O<N+GӛN>a˹s_~ͤzbݖ"o[466ÇsεtEUG(Vŵi Xb -ednPdF8((lʕO>=qTYY^o߾*** Wjkll-E=477fJ=(Vŵi XO}ݻueAZʜ5kHHH;sLBB5k [ffKLMM]]] ϟ?/jjjJKK@tC\0[^^/ 2f\*H!;v}vSSSSSӭ[vb[dbU\ ڭ[lɓ[ y"p֮]_WWtҪ}@bbΝ; Ϝ9uI|#`ԩcCD d(((X~Oڟ)]455=r>Hr7nw$&m3vU\ Z{cر̙37#5GjsnnnFFFΝ^-܍kNرcٲe %::iҥ*9N:{lVVVuu5cԨQ/8I%ƍ---###}СCx"""444$LwWd0D9db ͛7<\tiƌ‘ģ$7+`ٲe,TTT3%D9Ix~5khkk:seUUU[EPNeٹsgCC zet钓Hpmݕ믿X%Khii+B9LNN &<7KxoB9rd ,HII!uuucRNe7CRgΜ9gΜLA N<njT&LvY[[3fBN=~˫*2f⨨\tw#ϩSFiee SFCC#**o߾ӦM{9 d _bEUfe7+@WWdjkkO6 ]'BY 0cS ѣGbb"stt!8sW_}ہkS 066qŚ9sf]] O~~~ZZ;vr*h4*wׯ_ϟϝ;7"++iӦurRw; %s),>>MMMD^:wڵk;\R& 6,666==}ѢEx'=zTOOã%(299'f[dܸq/_]b'Dgill|钼,X@P,--k|%BAI ///::z˖-R,S9Laկ\ҿiӦ={/((.$$òKyfkkKLUrf$$$cڴi39Jv=z.יLt_Tެ==x:,Y2k֬'N?~dѢE͓] ~iӦuxtk(GL'N:ƍzzzb2;v<(/7ʒzɨT0훘Yf^LN}}}Ç={u7Ir?… .•SJ6$ (ٲeKQQݻnݚ6IӧO?|Ϟ=2)SFf͚ID khhׯJql7......D{6-Tެc2e˖(y7|a?JUSS޽#a%?_dTr*SYgD/\vZ &L={6>f̘RoooU*?k.__^zȄr6,]ę6mڹs\]]UTT~w<ܹsΝFPܹCO?ԧO7΄r~}{Hy:uo޽;)))Νh+1ۅr~}HoVG]]ݚ5k6mD; ߰aL )2NoV7tttV\I;JӧsrrdmH9]ٰaCUUի݉vG 駟ۡCږr*^={<==̙C;ʆ?ٶml)2foX \rɉhw쀀'NSyfg P(AAAϟ?~jj*( |>o8q|,*2r 4-88aΜ9#e㹹AAA݄)Ufm3q Fxxȑ#g̘Ql^|e˖M6 4HnFS]7+@]]=::zDQTf Ј6442eJii)($W^=wܑ#GiW9LL&SSSsڴi_&ÇWvvvvttiT&j3ٳgBBqrrz-(7o=~M+21 C3@"'11j̙DpP )S/%%%smll$5{lBPBer8@ <8>>>;; 8)))ׯ_NٹsgeeePPQ.)I +++mmmPUU544VVVDHӵk.+~LsAAݩ utt:$kVZEP|||1 {.N ]1(2w bggG"11QMMoxNP.\(g?.fa B)--FFF@Rsrr 6uTCJǏVT*&AIB;vA Q- T ,h46lذY(0ss^__Owd䯿b0...U0 6ߓcǎkF?~\7Y *jgg Y(ϯѮ3{lI}VΞԴ8`0jjjdm}ĉͻ CSS3$$D[CyYXXbHkda̙@W:>k,YۭomBP(___Y"ʣL ,Ջ騫oi``$gBCCET*ܹsBR3g|}hzh"oXlYS ]`iVWWGDD٫sTQQꫯdm7&&yǁ`>}:&&@> !2 v-YJ1J6L^ ~X |>F3fLqqAa5rH!5Ϟ=h-vk]&g\"XR((Y[|&T*nYneS;F%Ç/RNNNrflY[߅[>}ڨ(2O ƛ7ovGa)`EPKEE`\R Xpss{J)0SSS={6ю()))vvvxIP#a^*TTT(#G]לf2dȐ޽{UZN:\z<<L>}њ ϟ?OOO{mck*}򥗗IqĂ@\j̙3/^7on]Lmm횚zCCCSSSss0o޼/B":~EEEvvvMM#lmmmmmO ,8Ǐ24h$|IO?ڵ۷oSƍۭ[7b#ś555W\9saÆ=~X襚dŋvppҺ}}*jjj7555+**OQ(|K8h#F1***\\\޽kwފwǎή "sPPP@Y&>>եaY===HMMrDz)/,)))))Ixl|||TTԓ'O &MtRA'&B-Zxw8p ==]UUuܹ^^^@L [)}$B)<\\\#G@vvׯΝ hGJ/^tp vڕ(H)// 8z(/-- ?((8$$ zWJқҚ3g\zx<>~̙D;T92//d ՘L&/0ѣG /&-Q6ɓ'vvvzzzx !-f͚`0Μ9`0f͚%y9-7o0Jp^xq.nÖ(Ia) N>}ׯ_NJU-Qq&L e"d) #HAD R&AF22@Ltp PAAAjj˗/޾3+-(2c7T^^j tuu&O,ض'{r|>_;O*:B<<555%%Ç˗gϞ̬QF-Y]r#; Q͛7={ٳgg$9O|8//?ĝ rSqfff&dzvppPWWWWWwppx-ƍuuu-$w}gccӳgObjj׺q$}rb+IbGeן7o޸q)EEEg϶PUU-//ǣ$ioGL$!dׯ__}pI?BCCݻw|jjj\RطoߟYx ŋܹvډ'jhh={V;sikk?zΝ; Ç111#Fn,&`X\.NxkxYB_~MBH'3NNN׮]KOO0bڴiS[[DW/!<J86 6m舧XZZKC'/"V~5br\1$7fl6,..֭[ Em{->H܄0up$!qi޽/8uڵ;v4|f%رcVVVk֬4h77P%1K[l%S1˙v+G߿q@=zΉGp8_ݻa؞={D 7Jn]t={rrrad"'OOCCfxMLLX[[|222:T0!Ὀ -I¬YBCCLLLCfff^tёϟzzz󏋋jfff⠛߿{=:t 2Ӧ!''6moo㐐ITx;L?cƌxfpƌTJb_)ٳO!~&:J:m <:ujxxÇ߿cǎe˖Q(蚚''K(M,,,N:u٬,|ޮGFZx`ئ!:p& *jnn?)N_.O(£p777X9{!C;Ykuu5 !;~=ztA32@L e"d) #HAD R&AF22@La^z%I߿ahb<<L}uqqDwuD 0@5EBΠq&AF22@woIENDB`objgraph-1.8.0/docs/extra-info.txt0000664000175000017500000000143712201125630016110 0ustar mgmg00000000000000Extra information ----------------- .. currentmodule:: objgraph You can add extra information to object graphs, if you desire. For example, let's add object IDs: >>> x = [] >>> y = [x, [x], dict(x=x)] >>> import objgraph >>> objgraph.show_refs([y], extra_info=lambda x: hex(id(x)), ... filename='extra-info.png') Graph written to ....dot (... nodes) Image generated as extra-info.png .. figure:: extra-info.png This way you can then look them up later with :func:`at`, if you desire to get a closer look at a particular object: >>> objgraph.at(id(x)) is x True Warning: this doesn't work with strings or ints or other simple types that aren't tracked by the cyclic garbage collector: >>> a = 'a string' >>> objgraph.at(id(a)) objgraph-1.8.0/docs/sample-backref-graph.png0000644000175000017500000010371212277007131017761 0ustar mgmg00000000000000PNG  IHDR4<bKGD IDATxy\TU3 " ( ),FYn%TfjZ.X)bnRj)* "(yM0yk;~2gιw$ Pw"H}@0GNNNիWU @g-ZH% KlٳgNi4}t)EEEWw4L` >S H}@3WTTTTTAb3@Uz!|}}]L>sQ?uΜ9>>>%%%N 𰴴r.\HNNNS=O<ظɓ'WRRR2.iӦy{{[ZZjhhdeeݣz{{hiiFDDzJi{/K,n[ZZ.Y!&&:qD隦nnnnnnm)ؼysrr:]n:ggg#F1b/ZltQ~z-+Vuy?HH}kצ/ZחJ_*\>|j}}ÇSd@*111***##uųgnmlٹ9s&!dĉeeeKMMmll^hݬY>}@H}m۶B?~wwwjGallvߒ%K l68poسgOtt4ՒwB|||!7oʢeggo޼СCnnnH}&/ەΝ;-[6jԨQFQ-۷onǯXb5iv-,,!wm޿5!d˖-V}i0RE$(%%evvvC2dQ>o;,+**ܹs|>ߝnh(^M:A$B8EbX,D"]_~C|eĈhAA1cnܸdQ~~!C>=#F¼{?vX"3KB j5k믿tn널ŋgذaW&?_O0wl6ZXXL4YCG9888884ivu#!!7/|}}/_<ƛ7ozxxtjgϞuqqqrrZdIEW^‡ BCG-_|ҤI{Ϟ=>{,t...!}||+**O8 ׯ0aBbǏ###틋2eÍbqIIIjj?3(lDDٳOƂ:`.` >S H}@0R)L` ]7**Jz[,Օfff޺u7n5 Veȹ!tvAAAǏիOGe~(++?3^$WWW[[[BHNN}]uc:/4hԩ[ly++g=iɃ}aE}UHf̘`]{{{{{>}PiSzzzӦM5jW_}f9-F]9rww'| "HSNjҷoS?>>666ZZZ山6aiir322.\,=c@ԁֆkMs144,))9uիW177_pH$sξ}:U_~ӏ?/aXvټyskE6Fv]!̙3ըYf͟?ܸqzzz3f S3g… ]]]E"ѩSN:eddG .9rvs_xmx! 044*..}: |4y#G$\vMv׮]ɛcƌzר_Uollw^ttt{ :t(unذQllllllF_ Bn:ggg #F1bD۳,kٲeҖ~[...|ChhM!K,n[ZZ.Y!&&b``ֻwojĉ ;U޽{GieeuuBUuu޽{;Ujnj#_\矿t̙&hkk_xōy@/Unnlc^^t(\S_CCyyyjkkBD"ccc:uN.6cƌ#Fݻ!!!~~~s}}bcc|j}}ÇSAj?888]6--M__ѢE̙3{]\\ 4hŊŋ}[nB!w~eŁի=zD%zqMLL>{oƌ~iAAlĉ[Kvjn !B,--:^kkkBȖ-[ UΝ;-[6jԨQFQKo.-Lەꮹ9w$4 nrݻw=gBHUU?jU:X9!߿MMMΝ|6oݕwEqhw?kţIJJ݄ dS„ A@}ƛ7onذ۳gϣG455=<<֮]&54͛>|PzPzK qww?~ŋӆ/^op8aÆ^:k|&Lݻ7r&ME¼{M7vX"3YJ*;rRjyC d;^9!M>=??gΜ)//hO=vRh/gy^xmx=ErPH]300K(~kHaVSSs… .yzzzyy5_KSW䕎 N>rJRRRo~={iɒ%/իK.mq+Yo'$$_~t.v)OO~mݺjvr}}>b>|X"Ç/_|ҥ| u|9->t]_\!Z{ׯW^555m/./&())9tЂ +:tD=QO<D"yUNN΅ ˞#֮]{Ἴ<>:n:oP~_Z!%%oi}YەB?}˖-#,_ʕ+")ϗ~}\!jjjVZPSSse;{+_xq^ӥgݼyfff!!!mgԑ++DY^k/j#9ӧ7nܘN}o"==}ƍ?[DDٳOƂzKN0%$EEEW6=@~S@eK 1|u/0R)L` >S H}@0E {Fu@?J̚5K]@OU^^B_e~4q}@0R)L` >S H}@0R)L` >S H}@0R)L` >S H}@]X,]hXuD%tw0R!77___xMVh2o/ w⢯E&>fQ04PYYQPP@_X_ L>Җ7nܸqG0/((4hP\\\ccclllJJJ/_600ؿEEEcc;w U<nЀ !֭[Җ7oa!gΜiq)5/Y" !qqq!!!mL 9x`UUϿ{n@@̌)_;@7@?IG-'L?4Z:ty;@>@^n޼秧gjj`#G>˽p–-[;vXx\J.0 >S"]ܽ & ?0F0` AE;@0R)L` >S H}@0R)LdeeI>{011QrQ#p/^077{U3 Ɠ'Of٭;免 A)Ν+[\z AIN׼hkk$@Rhkk\.I@  RKIe MMLL&Nz2a„^zɶpwyEfd'P#|_(66Mz,K%0Dcǎns`D>!AX,ܹsI~LfA( !|k`:{o͛ꮂ>yMWWWݵ5kxzz .9vZuWr7{x+++ptttjjjjjj[IJJ… իVVVFFFw@O>511Qw /~gee請 kcc*ȪUՕz=@p\T;D> H}@0R)=P$qaaa-& W\yauuX,ƫ@--Aw…۷o C!AÇ{o8H}PZBRw-̅ԇ:{lvvȑ#}}}d^,޿\" 0`vvv ^1=/nQ6l8w\JJJCCƍ !yyyqqqO<ֶ2dHׯ_f======_zu錌 3fOIIIEEEa„ ڪ RǿzE"ѡC?~,mA3=z$O?Io=~8;;;88^v'NS/\`jj]XXHׯ_7663f !D"8q"99Yʛ7offfhii)t7H}7nTWWkΜ9/,,<~x߹sZZZӧOwpp*,,q@DY[-\ښfS-Æ 7nWRSSO>}ڵ&_SSl2ccK.Ĝ|H$& &-}n'{B=S71s @\ݫWJ$qƹs8Hzl(7DΗ @cH}"<չmoffVTT#|)ŒH$_bJBȔ)S8wɑOss󂂂K[>tujUddgD"ѳg"##XٙZ?!!N$=}RSiii{1J~z]]@ HOOϱcBtgrrreeݻ{{wss>ydÆ KLL:uj~8ܹscǎ511=7x7lo(~~~ ,9r!r殮w@#BA}C !V:q)bR-=zt/;H}@0R)L` >S cbbRRR*++Y,Zj* +S y"T>qDRRR:.(//OKKKKK+((H$4ڙ(H} K[233333;@7eFQ_ŻnK[nUBG)//ݻԩS bcbb~`OzbK. ###߿ڣdG ѧOGGǑ#Gn߾]=] ={ =qȐ!mO<^x>Lݵz\~fʔ)-~vdllܵ~]{ H} ԏI#dg5G&%% ccc &hkk>dQQQl6իWOp8cƌaXX|rP7pcucc1cB믄kjjRSSSSS@ HOOOJJD.kgg,]RY(ۉP(_rss-řc"СC?ni]}I0ɓZZZ#G$VSZZkBJKKg̘ѩ:ؕTddd޽:s&%%9sfСvvv\.k P ݣZ?~}}t"!!!99֖喔9s&??ڵkSLYSSl2ccK.Ĝ}ӳg< QvstttACCy$%w}פ|~ZZZRRRvv6455 vH}  ()))** !it:bI$D";077/((XtkаHeb&C=JNN.koo&&&yyy/LʞG133ݣ|S fffEEE=x͋_]b … /_xKNm--Mv5vXB߿_]]-BaEEŽ{ӵ礤$zpwrΝzꀀkkkPÇKס###={&={) gSRR|>!:PWW'>}S_]b *;;;66֭[999mlgnWaȶÇ?x@(Z[[^zܹNNN|8 4566Vl)Bo~ xiKXXKQQѝ;w"""U0&߂tuunj3f̘/^$''S`xzz&''WVV޽j0nܸܣGikk;n8B[fffvvɓ'okwu}v`7ݽnd,L<K,!-M:ҕv,cUz?&́B1cƀ⊋E"ȑ#:uחfff|Rvgoo+ SSS[[[]ɓ/^p8>}8;;v7066PFKpO_KWp8ϗ^3bݛ㹻SWa|۷544,--ǏO=kwuk}ʯݽn呑/_8pSLLLAAAdd;v[|FJyBҥK30KLfdd.XjՉ'bIA"/׭.wÇ+pc}%Zr+ww(8)0P yfɬ><0R)L` >S H}Uzz\S;v1uWRÇWw /NOP*m۶:to߾t**۷`Ғ^?n !An߾=o޼-[,\b"蜈ٳg] p\dܸqɋ/^x)S>}T ̢vܑ#G۷G`>0C A[0@áà@ H}A?xH}z0>@S@Oh ZA?0H}v`=R}A~~>@_H}rssKJJZxqHH@GH}Nd@GH}Nàh !Nv?i$ CE:)!~>b`R@0 `@P6gX,KyXCCʕ+mll\nGT,ҫcЯp+W  Nڭ=CDD!$22R @!~+--%q8u@'H}i2W`O<722?~MMMG|͛y<.۲e@ hZMMͼy󌌌 vPuV.ۿ~ի |Fm`X& Do ;wzyyEEEQbbb---\n^|||._چԻZ պsΰatuuD"Oow<<<x{{|dWH$Sɉ'N=}>VXԠnʕl6{?˗B7hР&"{7,,bbb;vؘ.A>޽kccC/$!dӦM%%%"2**G'.*< !ﯨhlls玿?)S\pŋBx݄ѣG-u( FQaÆB._,mtRH9~l'G%xcwt_|~jʕ+YٻwDDl' 999]]N ox`BHHH|ݻw!fffM6UUUGEE͝;mzGAϤ/]W59Hב0~^^^KH~s7E)zg4~O-[[I9s#{W]; 5H}Ν;ÇYYYӦM544߲e י3g$P(\~=u[[u566QK\@wS__wss_jԨ;whjjFiqu c}#sM8HSSsРA+VvZ|а~p\@NІvǏ4WWפO>d^^^h@?@ JvA? @cAEE.>a ALL >@1vXAǏ]t/H}Ev0YH}~hRg Cd,#ܽ{>xuVXAO|nEEEzz-6lPGi` OC QwED}lcH$ ݵk )z|uHP(\`A}}Z*lf{\.WBu@'H}fiH-[~Pu;[\4pcǪZC0NkuB<→bccӼbYH}j2ٳKϟds&wUK=.::zUUU555rBñx𡡡z#dddɶXÇ?zH]%Lu/_J#" ϟ¤>rH%mScI4` 4jP(|bS$ٳkjjTYUs puu&$X,hEEEfի!΢SBa~~… QݿKo9@!EEEo߾xٳglD"^bرO?Uc^^^׮]Sc%׮]rʭ[뵴\n\\k2eŋ>~A@{]sJuӽ8qv8./.;nܸqƥ;VSSR]gϾ[*@jڵ.+!}yMLL]]~D><L` >S H}[ ]ڀ Ĩc}Xԯ~p8^^^K,i5i/Dŋw7ntn_vRH}Pв2ٳg_xB/w%99999.>ٱc,,,!Cdee_OCWW733ѣ& @ͨ^l=uppX|y_x|r___###.;bĈM6\:CB-{!d. A0RԬH[do7geeEZ?rb!bX%H}P3m۶=zH(>zocI&Bnzܹ/_ /ZjllLuP(T~4s@͂\RPPh"ݽ~M65?W|~)@͌vmhhnݺ6p8[n 4h͛~i@@@߾}9jbI$u]```EE7|B ww'NX)L` >S H}@0R)pJP$thJԣp|eXww?=0|X)0=/ۗN\t)***;;O>C.^sΛ7or8w}ŋ۶ms玖֌3.\b!"?rӧO|ȑ#]\\TT7wܼ%Ɇ \"m),,H$DB)))]s cc[멻_}Ն ⨖1cƬYD!@ !/^+*2BP(]SC;[ɓ'w2a}}p0%JMM%H8%HblZdddo fx<G)..5kV||V0Yd׫bquuŋ׭[GT?<[d+V\xL$ gϞ9sFvڿSBCC/]TVV&kjjnݺE7#a ؤqРAT?ϟ_z%&&fڴi?>y~Z !(޽{߿_^^9p@//YfiiiuO?TKK+66Bvg?>22255l6<oʔ)]+JLL,++r֓&M9sfzXvVTT|7.pww?qD`` ` >S H}@0R)L` >S:!EEEgΜQw >tHfffxxwÇgeeudB[[qѢE. Fp\A plaag"HU RSO/N:h6lƍq@ 'ZW\QRIzB=z„ aaaJ* v@]H}BȪU_hеԟ8q˖-[Q /"222--M%R˩?s!ClݺU%R˩bŊ#G+*zA=t9 !}ٱcbK>ЃЃX,[Ahh?X[[ gB>䓆($A=D"9SO>ۺu+WTUz>/(--=zBJ>Ѓ3̙3gbX!U RA!O/?~|i>ЃRc IDATnڴi6m+A=(* !WvBz>ЃS̘17oVHo4zP`BV\yDEu@ H}ŦԩS!- ˗:u C=(Rx355ݱc{螐@,KO~ϟ+g b>O e{iڵk,_~퍍,Qx=JzPR~?C]]]E&Lpss+))i`߾}G~7^R!K]+1,,_*B=(/ΝuVPdɓ]\\vE۷_(RAyOYbEAAǛ/Zf !d˖- @ʕN!ovxxxM9::VVVܹ[YY)B=hhh(/ !VJMM=w\vE nJ /_rW (3랞J)S^xۤ],1"==bff2c}SVZu[n5iꫯK,A}!Tnnn7onhȐ!PTH}>!/8w\RRRB-Zdll1b֭[eϟ?O7o P*>ЃjRb-_kkS+B=lH YZZn߾]pI~ZC=p\@ }kqq1!D"k׮_[P*>ЃR`z >Ѓ*S_WW?޵kWuujH}.U?X"*" 455U6'.\p۶m*(!T9Oϟ?orJzP}[XX BUn@y@O}BȊ+N:( RA-?lذM6Gɡg@=% !+W|˗UiC=+Go~ zPWBV\}l@@jL7|e˖-Җ۷oϚ5 v8.CT|m&V\qƻwBzꥮk51}t333OOϪ* %-**B`j9UUUׯ߿EE !bZTXXz䁱>ЃVCC*X__}:Hd)...Ve=C=թr:::/^iq)Xh3@::: *>m~ΝVbXb>RAGGG"xiӦ+VH*.@NH}]]]BZ~>,,l̓???_CQ} ?&_TTbzR_-c}Bڽ{… lJ-_&2>5ï>bݻw޼yH$ @SX,O?4{licƳdihh:thڴi np.͗sUe3iҤܔzMھЅ?PiBȱcǎ;M(֬YLz|111ʨ=i$%pk׮Uw f8h4oH} n5>Fw>R@NH} ##juW@cH}n>@6 @p  '6 i@FFF/_Tw&H$?\S>ollЉ]]!NSVV* tbffV^^* tR >I>}| %>ЉD"Pw!:133#`kpm>e~VV֥K bѣ@www+ NLLL8bS޼yw \? :CtH}ջwoŦݔ)S\\\' 322ٓsݻw@<RhF_ۿڻfR)QQYECٵe-v[7{#$1RE:؜Z[ɦ43?f!>sx=5ws{|>'g.;p~ҤI7nܐ(jLћr8"j۶mӇI/K~ܹS[[knnbhh(ן;wM>bݺu.\xǏ;w.""Px{ՙo„ |>_h>nS[[{ΝM6Q@@+V$''7ݻ733s +W<M6YXXDŋ;?֬YsɆRԌ˗ޭsΟ 񌌌7^wĉΝ;/X`zzzO?tڵ_ G>yd޽;vܺu###w.rIIꧤѼyMLL?~8_Ԍ6---?]w}ahhpzb ":{_|񅥥% &F-#MMM(///666!!uݺuW s}P3 J}͛6m:rZpѼyZbX,&GIicc#-555_+$-|Mvd4f***ѹ###Hd|I^$EBD~6_o8p`\\/1|pCCì5k^-h<@XXXDnݺ)hItbbH$VVV7oތc:::DT\\ѣׯ_///ѱpppk][ltRII ѣɓ[h>.]1ׯ_V|ѭ}#>@ARRu~tR\\tGϟ?/--e5ӣG"{.u>]l>@K!@ZXX_Lfwh)>=z`0hjҲ'($ utt5x{{3R>%++O5dnݺM2EU5RwY^^~u7776[KԩSݻwcX VVV...% 333U9.\x .GYZZ޽;00P.CƆ<:uKp^Ԓ;w.)M/EHԩ53222  c砎lllTojj̃9NppۅBk=zq{=O'O4ODs)**JII{%ƍʪrRԕMiiiyy9ӅH$*//oQCIݻŋ|}}W^!@!@]ʞگD-J}" =vǏQWZdɒ*E ʊ"YY4LҦMݻw+(bX-:qDRR[AAՄup,--5,}o^^uttLLLTXRT=I77oT:ƍ_xH$Rp"T22}}6mڴ􃎎 Oގ;6o޼nݺWTT(zD`RԘ7Zt~#g3FaaaOurrWˆ >1[[۲2].ެ/mƌoIoۡC8 @ӧݼyBޠE6bjj:a%,7ҥ˙3g̙xbjK.FFFɓVQhh ~w94~]v#F())QР4H}Pc,wު9ח1{h9ϟ{.QhH}Po}Q///o׮]?bBBBvU[[+ǪC޽{{zz*P(>7_'9s攗8qB^%5_?> <|xqq1#e|!@G$ݺuB^!>}*\BCCݻ'Z!00077ɓ'|>?332@^lll\-?{L(ʞƍk߾]RU^xUwH}Po\.Z.+//'"S_WW7888::}۶m{СUV}*x> jVSSΝ{ӧOޕ,$荏?y򤻻ݻwZj?`W1mmm]\\z>t9bH}P{q@ `Y,\z =|pii\zMVV֘1cV^-Zj޾N.///744p8rmԩ<o޽rMv;wܸqҥKMVUUtE\H}P{\.LREE\% Lm6yu(aaagϞv RԞnϞ=]t!/ɾ1_#׮]S=<h{{bH$۳X@#'ٳg۷OOx-[ܹ;vPMH}w}9mذ4??Ϟ=wccc7lؠz!!!555qqqV^BBB222󝜜Tl HC&cǎׯ'oV ˗͛;t蠜z***d|ǎ  ۽{wWW3]R4Aé3f=0**j֭AAA'NTZ=H}" MOOW %?ԩSUj >h6ݷo_ lbllrUVu2y"RrΝrY8N#zG3] !}Asj333CCCeӶmʽ[6k.՟CO:… EEE|>?++rH}RѢEo^jW_}uoFiWWW+"hΜ9?>y":o|>KնZH}vvv%%%%%%D/Ϙ1O>\vmZZr*$"СCU>im۶=|w}^WWtEbРADW^^>k,Xf"##E"̙3+**P$ׅ&&&>|PA˗Ǐ?p{H!@CYXX\|9""m̘1Mx޽%Tй>M4m۶*~M_#GɩOf1p˗/۷O,gdd4XlX=}zzzAAA۶mSdff6gL9._t ܹs v߿Æ K.>}zuu5i>hܾ}+++\n6m7D.5ZPPt9A(2 |eeB'RGxzz9::&%%1]Ax_W=l\]v={I^A`r e<{L ollh3')yOD'N(..GԘ=n%]zRSStE H\'0Gs}"h ==>}0ʜw!//Z,t%m۶qe˖M6֭[AAADfCCC5@fhAx<-66Q#~BZ IDATB²e^_ѩy&yR4߿vvU& [>{OwBe߿̒TR4sVVf$hٲeAAA 'lfm3 _-J!@c9::^|V2/bv1dI X,͞/\ԩS,Q՝(R4yݕWJ>@#H}p|>_k @ 2$++Ki+!A!@ù?~?PpH}PeH}p jӦͅ 3\]]۶`R4L}뻻K%ZH}|ϟWX^T.=\]]W^]ZZڡCEt CL@󹺺ŋ0Z>h-@o߾w.\3fR/..srr8СC?FH֙&BÉX,ӧϴiץkj_P("_&Rr.c<>}:'NTTT4q|}}_~)}˗/_to5k֜vXccc.koor5)&$$TVV[^\B^.\䤸Q$2рZ~CхizŊYYYYYYggo]vs} ,EѧE"d,*kqqqKDD ֬Yt]/!@[(aU[XXѕ+WZ~%d/_3:::AAA+Vرc5h 77޽{WqC\_rغu~wڵkOLE&L;;;;;}PL@^vRA\ H}"BPzYR>&h;Z[[+>]A&hWWLP1ZYY1]퍍ȏ>8>h6訠ԗu<==Ϝ9%kxV ,ZkٲeY_;wƍb۶K FU>hggg==gϪ~O>]N4#HUx...gϞ{rO=z̙3g-TFFڥ2i󷊹>h#//;wʽ[~ll"@yyy}wWح\',YZNJJsNmmWHHGׯ_94}􊊊u]p?~ܹBݻWWWgbbү_ &|%*R ;{lHHUoXbŊ䆖{fffn޼}ʕϟi& ?^xӱcњ5kN<4 Xo&Vq^O`7dC":qDrrrΝ###Ҷoޯ_˜0++k͚5 (_E>h)={6((H^}fX,X,s͛111ݪHGGL#U~}L}ɊqzztsĉD_$&&B@pǏK/P󓒒JJJD"ѳg$( ] *V^C t(I}P(_训!C$$$,Y%##cѷoߎ[j\J%+W\rQmV9Nzz^)ٱX,¯\z xR'|qׯXXX888n-[_tgr=T~*@|ƍա;~K@@@iiʕ+5sww߿@@X+V >\.UӧO/[Q>h5r@R׍7JJJ!RTR͖]\.N^Rqȯ>,>h; ?2>h;//k׮ɥ7>2>h;OOO%g#A!@ۙW^!A!hȑrJWWBk=u0U OOO&{WH}Pex999N:UƮgΜi7e˖-[*TR{׮]Ӝ]z>)S>VΜ9e]]]$/...wrB0&&_O "{ ":wןimm-K?Ǐ722Wadkkl *,,aJJŽ[NNܹs-ANrttYYY|iH}""]]]wwTӫKIm6;;;f`H$Z|wfff^H 흚*dD__Ylllhh(50b„ ?ƍohhtE*#F]zUNOk`םrrrRRR˜.GE!1`333OI&oߞC СCnn'.>?X,ְa:򲲲:>@8su҅TR%oosֶfS}:t(S(٣GF?r8؄/y{{WUUeggS*66vΜ9||>ϟ>}:>K, ^x1{lFFW6_~999L6>|~TTĉ5: ~w LWNxbeee>/[;]|933S+((pss;yd||EX,>+Bazzz>OD/^kQݳgaÆ)y\eJJJrttDL077o"$_]]s_Hxb?? &dee0]M1BR?..f֬YTi˃7oތMd>@c׮]{Q+>HGEE?cǎT9]䔗wiDyzzr8V|Vܹٹ{/_vsscMhȈ>}U~o۶fĈJQ $Ξ={fffLW!p^ |}}ZA%~uuΝ;KM8 //o߾}SNe>|SSӤ~POOQQQcǎ՘V^=t!C\x֖r4R tttO:lϝ;UUUM>}ɒ%V:x𠑑i&xQF-XFh|Jۊ=z5jR?s)))`F`f555-rRŋv eG4h^nn."_ tڵO>8?|pee|GɓϞ=ۭ[7+|H}5jʦ~TTѣ;u|̘1?Ν;nH+ ŲoP$۳X@ >>|=|r+FH}]tJڵ+mذ4??Ϟ=wccc7lؠZ*55ӧcǎehJ;wܢM?znݺu̙:v~z"o@ X|9m޼C V^;lذ̞={2]VC4b1E={zoޭ[73f=0**j֭AAA'NTP-RUU5mڴKnذaLW#/;̚5ӧ9^q_[[=F'ŷlbggrJ"ܹ_ER7nܘ4iREEEjj4rHPx̙f?vXyy񙚚sj333UR:tٹ]v|ՁxsssW\GEEH㓶hѢ۷oZꫯz7|ћI(.^xʔ)Νҥ @#Xx77`۷SSS>ܨ=%%_~1cF]]ݦM֮]ȓlJJJN{ӧ+h6jԨ;w4`###@P[[+-,,ƌ#X^^>k,Xf"##E"̙3+**[;egg|Մx7WWWlddDD ~|+kEEEnnn  L6޽{r,m9x༼<e L&N(N8#/] 5z\\ԩS ,--է}G۶mKtEV8,~~~|Iuuu6m>Rs#G`߽{/((ETVŋgϞ}rO;w$''suSRRY,˗j,]vׯ߯#;vܹqաbdqƥ"Rs^f+Att̙3]ǠON0aٲe7nܾ}As!ϯ֭[Mb %%%tχ1] R\]]MLLy7ꉊ2dHnrss|>@!59۶m+Կ{STa/> D333+PDjo޼yϟ?o 7o߾lw%;00ҥK{:u*ŀ,0h@%mf͚+cWx"qnn."_!Z|РA\K566~2~BBÇ_QQ̡Ai0h1___X|i˂ܹs 4ׯ_7ի ~ׯ;99gdd 5K,3]qqq֭ۑ#Gn߾MD***O>}?\]v}cWbX &޽;((H9?WW׽{o^9#-P^^tر'N<\GGG(JxDb$)bBa}}=O׮]> כQvvvX \]]5 ?p۶mK.]tG~fy̦Ms"j|"9r$%"X,jkk%-o빪J'OXYYy{{|֭ҍ=>pѣG/_H}fԩH$ύ-sC7={~ X,5kV]]󳳳%|><;;{رj\QQQVVVΛ~ׯx{{7q/QWWeooꚉhÆ bX,^=33gϞt\|ۻ ,x}b趺w({KəP3gg%K,_|߾}M?94R j ǍץKFM\.Ν+@ xј1c,Y}vRe>3Ʌ{ utt"""-[YYYYY5pN:%\|߾}@Q(;vl׮] j 2,k׮]m۶e_'TWWWaaash]]q5agX</99sβ㈈o?#>@Jw/C +uuuMܳ'Q]]-sĉ}XW_}UUUMYA@@h __?!۴iև~ذغ*e[3gDGG7Zۗ#"#G8>@+_>}$zdl6SM`K.={=<88X/ ":hff^ZZi&kkkh%gI`7?$"6BN8qߒ$WΛ7/==ѣGׯwwwo7h z߶m[ӧ*P8dȐ}zOIDATyyy?P(dXSL9zÇ@xh&vN` `қ... .T@UUUSNn,--oIX333+),,|ѠAx<^@H}`ݺu2er lyI:v4:A 8 G>5'k---2`H깺_>08Ն>@ȏ}}=]K|>Kac+N/_ӡCt0P}"## i("b(ѩٳdoO^^4f tYՐM3fPb"%&Kv9eV ?b JwRZYCdlLtY0Pˋ)9X,I$"6f_<KPHtu|ffDDG@X}0PtJOos'M-\PLڶNǣ>}h 'קz}P> MХ_[?hlL7**y}mH}mH}mH}mH}m :r<<ȈÃ}GX,b_(: "W%/Қ kKC xdcC_~IO6S5CZc $CCЁ,yP_OkOFF咅>-'vuhW,b1}G tm=8y"ի%"*p"W!!:t90&vؾ=QEEs;iH\S۷޽ԣ=JTWGFݼIDDfҐEFңG$RYӨQ-A;4Q@@8p@@uulHWtu7'K ʢ,rrzXTD]RϞ%H>o4p dnCCzښ חlmޞ?/Z@ka1ғ'ԱƲ2""Y;vՕAа p+GJ)ٛ[?et4͘AO/ M ?h^\y՗oBB! $Hr1@ xHƟ}EbP{h  ccJL0YK6lQL+CBHJѵk>:yy_GD@ @͙CgSy9}=C4{v =$>"hhjk-gٿ<=)6< 1׮'x fmM?H Ғ%d$kO;w/[b=3Vpz:7n [0t0>rOQ @D?L))ԥ qOvvAYY63BCʊ820 >~6nleoeph޹5p-----X[ne uҥpP!xy}mH}m\N'5IENDB`objgraph-1.8.0/docs/class-with-finalizers.png0000644000175000017500000002170612277007131020232 0ustar mgmg00000000000000PNG  IHDR>bKGD IDATxy\TU΂þ" n }*\H~IfZYfZ+(l2qyGf{,̝{y#p9"BY% g"V@pjFVV۷*!!wBL\||] ?`30eCzz:׿n+ BzaDY/!!d"V@ ^X( ( + BzaDY/a_\wPxx@]]%GoR] 3g38:ĉPTh; "\\M {*+/d".DEAx8<|7Zq#ܿ/Ç?_ke TUAM df!P^@*L'N@e%Hp^ AUV@00'<~j֯ @J ҥZ|rsA"3g݃+6o;23SJY4._>ceߐ 82z4GK6n ~= 66Z̸?M0~<8;P=/#ȜaDY `j0)Iљ!Cx LjF܉>}%XWݜ>V(4%-Hd1>S*5,p" W;u'O4R#B ׮@fC8 xڵٳ5l[2[o̟0v,l DׯCZ3;ȂY0bޘ1u+=_:Fa4w[[ Ch󗞞_}ӧ39tx A.pѱ;`Lpu{{?N7֭,<:ulm! χ\fY<DsvV򹡴4pqѼl 7k~wFO#x 8u.<0s&ס kǀ;ƌ^8 Y)S R""4>ևB + BzaDY/!!dZ zJn@.װ,5+вܺ۶qX.%XV@8>q8V+e "{@<`,l+VDuV`;;ի6gr9,_: Ö-s&LpqٳFCG:f/ $A(adʪa OQkj`\pwr5j rXBB "~fS{b3LAmʔ)SLi~=@ OW_5Z"C6IFLNFF eeӳ[:R*+h% TVB̙ޥ7׶\/BJȑNOO䉆̀dZ0A,ְBj*< Bu5TWΝǏCjj5O#G@,`uZ _i|srmSiv&>ȇA'O`~9@*.ѣ "ݺuiiPV >]?'gݩ6y\p]Q3Zv HQ(HϞ|e>}F# :y XnߞpPBC m ݈!2z4#674} Ghu@֭wBb2d4""D)> Cym Ѹ}ʕ˟Ʀ.}{{Ff&UU"'NPHlmI@?hN5ۓJ >%.]PW$|=ٓsg|9WJ{moO""Ⱦ}-~YYIf$ޞOn֕7+ (W%L[||<dddpbCFFԩSS^XB + BzaDY/!!d"V@ ^XB + Bz0 &bɓ'ٙ?H$hӦ ;ݕa4uaaaLw!/\P\\}O>"(%%E,Ǐ0!C߼y3""Ε\5!2XQYYٴi(9r͛7KTFFF2 mݺu666 RܰaCPPйs+ٶm /о} ̤(*W"J}}}_{5溸}#BaRR|GQTBBBuu5 ="# h Ejj>մ,z䉋˒%K_Qk.zh׮ϑ#GX+*,,2dOJJ$$wwwvh߽{wFsTS^^@QԴiY+EILL \?DUVq!Bc_cϞ=,wZ+8tP׮]6lϚ5k,//:c ̛7ÃOSLy1˽ h ǍӦM+))6B>yfn :::X>աC6/G hryjj7_ӄ L˳˖-svv.++ڤ$7n8Nfa4cyyyINN~BHvv6ݻ@UUUo~pԩ=zlذ0FXRUUUbb@ t<7xAqE#_~H$***0gϞ%%%^z0+رc۶mmCzڿ?:u@H$]v>}:ׁgg 65 hNƍGɓ'\ӈ\. : o8| r>quuܹ3'9"..W^fwsҥ...\ 'z&&|iXd 9ӧ`\bO>uww_x1ׁ4 gV@ns0`)|[ufHt]ij&&| X9`:9ɓ\Juuu^^^3g:}31yxxdffrE *̹ E޽ǎu ٲe /,,:}31oDXYb9I"K~gRB ?~*N=o,X_`ޱc}._u2}50??ȑD5o82}v(?x`jjj6mrو"## t֭SRcƌ:(>|K.82h׮]9s,]x<L0렌&==]$Q% J_ƌV@F`-K|>DDD;w ѣ@}4g^_Ggb[+`+effYrTj9T׮] >f̘aסRڵk]\\jޔ fb[ +`k\rή d999AAA|utg7"yxx\rЌ@,O8P`` סJ5] 7ox@d :L>___y"g͚vMP$YM4|_P 0={p) <#ӧOs #U)^|Es)RVb}fbݻjkxy$ٽ{]֥K???7lٲaÆHttQiŋNNN7z,8r䈶nݺ(%rrrBBBZ~ٕfeeyxxz%EQݺuEMAAAvv*iR˗̙cx;YYY"ruu4^3M,WTTh{2ș2wccc -h̏k[f$۵kos%8`|||:vhTjkk}s4言?BQVV6k֬={K׵Y}k۵k7x?XP3 \`deeeaaagϞ"H&)+d}?ܹ3WAh_Ȃ rrrΞ=G96669ŋ_tHYr@ ߿rrrN8qر\Lfkk[WWW_q&{"dlmm>cX|̙'N=z̙3@1ˠg!D'Oܲe q"W}!Ҳq\߿~m/0 Ě2s=*k`bhZwBbbb!dE! 1`̙P(N>qFChՑ ;vldd'ǻ~={TG -Q^jpw…Gi122rȑ>>>mڴyqNNNFFFmmwkXИ>`ŊgϖJB0--}ٲe/^' % 蘒Ҷm[ettZhQ .  ֭[bbbuujE-\-&M Yxg؋L`b5tիWǎ1=ƍ/^T-ԖCF^k۶֬Ysm__ŋX?&&o߾uuu6mӭ[8--Qk…w!..n֭jEGG6ѣG7n,,,H$ SLٶm!;bj0F-}Q\\ܡC聹Bɓ`׮] ԖCFu@ׯ_~cHX~^]]-˯]b µPM?`9V\[[[+o޼rJg9fܹs7npvv7ndnnnOTѤw ءCh8Zaa;uj9BjE7^T_h߾=aL˖-4iҁJ%}{n1յѤ0XNq !`|Ll+y{{չ=~ĉznhKziig@@@~~>$00PڵkhhL_ۦ(¦M^bHz濴jw׿u]c4Bӓ&NH޳gOѪѤw077͛׽{w@УGyX#Fgѣ|@[UU࿜Mi;wٳ]\\BaPPлᆱ;w.5]նm[>/ ;u4j(d`bBǧ?,..vpppssߚn-&{aÆyxx|\Jh zw{Ç/]T k}駟4~Pٳg/^5ƍsss_z饞={:;;+ʇ=z&(t*~W!sIktƞ1uTMktܹ(zvzCQT~)Iؒ~e:gϞ^-vr1?`ڷoOΘrgϞ-..65XBS(/_69Z SPe0j6E"V@ ^XB + Bz^9񚽡c:Oϛ&__Ƞ;RUVV??~XX<==ºwNQ¬N*&R.1tp+55KaÆ}nҿLݣ &ֲmPli|ۣۍ7=z…R@o͙3gɒ%:6V\\7fL0D 򂂂>l˖-~~~FeϟuDZWܠ&/9sP(v޽{nggs熄dCر:S(VVV^vСC.\`q[GFjX&`VaJu&TΝ;?}ٳ;w,//7< ]`j:3fu D"Q||Ǐ> oVttjC77p<&W1cݻ1LA}ԨQ!!! ,пj]TA]]]Ν_}loIDATk$::AmۖUYYгgO}jwtsL,0Fc7ٜ.YdҤI/ʕ+_}UnЯRwVmfEEN}ڢ4.ܠ P5M>C[:& UӱMޚc+V 4Օ999EEE%%%@NNN8(sDFFmۖ988As':;;x<{{\Ңv0LdmBִާO>}-,**ڹsg8(s-}Z,:h]s.ZhԨQ}i۶-qֵ>|0???33ZbbY5.ݻڄ8_.4_IM9/! ^XB + BzaDY/!!d"V@ ^XBKW-;ئX&?\Ga׵Q8pXOOOywLbx;@B& "V@ ^blIENDB`objgraph-1.8.0/docs/quoting.txt0000664000175000017500000000065212201125630015520 0ustar mgmg00000000000000Quoting unsafe characters ------------------------- Let's make sure our string quoting function can handle *anything*: >>> import objgraph >>> all_the_chars = dict((chr(i), i) for i in range(256)) >>> objgraph.show_refs(all_the_chars, too_many=600, ... filename='all-the-chars.dot') Graph written to all-the-chars.dot (... nodes) Trust me, you do not want to see the resulting image. objgraph-1.8.0/docs/generator-sample.txt0000664000175000017500000000270212203743541017306 0ustar mgmg00000000000000Stack frames and generators =========================== Let's define a custom class >>> class Canary(object): ... pass Suppose we've a generator that uses it >>> def count_to_three(): ... tweety = Canary() ... yield 1 ... yield 2 ... yield 3 and we make it active >>> it = count_to_three() >>> next(it) 1 Now we can see that our Canary object is alive in memory >>> import objgraph >>> objgraph.count('Canary') 1 and we can see what holds it in memory >>> objgraph.show_backrefs(objgraph.by_type('Canary'), ... max_depth=7, ... filename='canary.png') # doctest: +NODES_VARY Graph written to ....dot (15 nodes) Image generated as canary.png .. figure:: canary.png :alt: [graph of objects from which the canary is reachable] :scale: 50% Or we can examine just one of the reference chains leading straight to a module. >>> objgraph.show_chain( ... objgraph.find_backref_chain(objgraph.by_type('Canary')[0], ... objgraph.is_proper_module), ... filename='canary-chain.png') Graph written to ....dot (11 nodes) Image generated as canary-chain.png .. figure:: canary-chain.png :alt: [chain of objects from a module to the canary] :scale: 50% To a first approximation, modules are garbage-collection roots, which makes the latter technique most useful. objgraph-1.8.0/docs/_static/0000755000175000017500000000000012277007140014722 5ustar mgmg00000000000000objgraph-1.8.0/docs/_static/mg.css0000664000175000017500000000037612201125630016037 0ustar mgmg00000000000000@import url("default.css"); pre { border: 1px dotted #869abf; overflow: hidden; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { border: none; font-weight: bold; } div.figure { text-align: center; } objgraph-1.8.0/docs/references.txt0000664000175000017500000000255112201125630016153 0ustar mgmg00000000000000Too many references ------------------- Objects that have too many references are truncated >>> import objgraph >>> objgraph.show_refs([list(range(7))], too_many=5, filename='too-many.png') Graph written to ....dot (6 nodes) Image generated as too-many.png .. figure:: too-many.png The same sort of thing applies to backreferences >>> moo = 'moo' >>> refs_to_moo = [[moo] for n in range(42)] >>> objgraph.show_backrefs([moo], too_many=5, max_depth=1, filename='42.png') Graph written to ....dot (6 nodes) Image generated as 42.png .. figure:: 42.png Reference counts ---------------- You can enable reference counts. The number of arrows pointing to an object should match the number in square brackets, usually, but there can be exceptions. E.g. objects internal to objgraph's implementation may inflate the reference count somewhat. >>> import sys >>> one_reference = object() >>> objgraph.show_backrefs([one_reference], refcounts=True, ... filename='refcounts.png') # doctest: +NODES_VARY Graph written to ....dot (5 nodes) Image generated as refcounts.png .. figure:: refcounts.png We see two references to the ``one_reference`` object: the one not shown comes from the list passed to show_backrefs. I think the extra references to the frame object and locals dict come from the interpreter internals. objgraph-1.8.0/docs/42.png0000644000175000017500000004455512277007131014244 0ustar mgmg00000000000000PNG  IHDRx/bKGD IDATxw\S {, ,@ZAZ%jWkRZGZm렎J"{dR@e$$GbLto d*_Ԯ_EEE0Jy~M(HA^~/z鮮HTTT^^P9 "Dwqe._4h =17, !vs@Dߪ@Ԟ?Q saaaºԤIF-IO j{!,K j>DA0O 2/T SL 2/TBCCCCC%J.hOQVhX0d$/S0E.hOQVhX_T~,D? hU3T qĽOE[[{VVV\.7>>[QS(;;;䜜ׯ'%% ::?!ֵ=)ʂ f̘GY,۷?/Ъ" DG3EEE&tssSRRzT*uΝ666#k0x _|&RMMs0UEXg*-(//?|p^^7|===mllN>6nܸE᧺~Ě9s&B(000**QAA7 A4,.TN:qDNNB(;;ĉvzǏ#,k߾}Cԃ뵵-,,TTT ?~clЪ" K3mmmPFFHzz[E=zHԁ C ѣGk[[[[[[|$99~jll$60*"а@:S`iiiV255566?~Kth ZUDaВ%D1l]LROOٳg[/))SN,'H$&}? qtܕ}ikkkA6Az&y8(֙Jbbڵk8׮]ݻG׮]Kڌ􈦦&eee{{$3T )? b1̈#GN6 !D"О*"RܰqD0HXrՙ3gG^YYYmذO;Yܼhs`UEXרmnn޺ukbbb{{{ss;w^q8]v={=--Ϟ:u*<Z5'Pbݧa2/TQ>xH$ Sf7_OtvrKggb#WEwbJ,EP?p|Z`Ʉ'J5DGa`nn"rĉɷo'߾=fĮkq_iixnʕ.չ\O3>|eeps'LfWռ5kW޾_B֬(9֭{ӕnHBǎ]iiYWv斿᪮ Sݻ֔@ŋ_ZZ:|8VVoڄZyNws<|~ZZ u~eY[h#Fs'tw|]xի?87]o$_kkO_nLMQzO?@  :,Z =I4yBiǐCx¿uxx"H{<=oqoy[lqtNH,M8UP,WyM|vzK˩^^/\{[ Ld2z mͥKC~ؗo?7{Aݼ_}|;i`^yx_}oBс?<|(Hm>2RNQ˶3WQeMWk·}inRVNNQ[[#//֭[qqٹIOOoڴiӦM366&Hn0jԨEYYYihh jjjRRR^ZQQO 5>`DQڔ ,prr7o|[EZukmߓ5ר& ;ğäUFdFmT~}}J022 &M&Lw^YYYYf}999o^xIܯihhݻWWWWpή_M;} 4(@IL壏>ׯ{ٳg& + Ъ@R;SQQQAv=KI߯ЀٳgHG];$]zY>v#FTWW'$$tK^ޞ^zիk֬} (BY`3h4Zcc#ź} ӧ#iJA4@Ê*zTԌ}*uV߯sƍ>l˖-{^^BNZ !t^!Ρ>"H_̙3Gttt.\hgg7ߴ oڴiʔ)+*++-Z4n8ŋo_|&F555/566F%'' ,PQQKLL믿ya۪ +"а ߙʓ'O7o|ɴ4z Bhȑ}͛7[ZZo*--=rݻw{ojj:z躺fОrss9sfUUofnjcjj`0VUU]fMuu˽|}}KJJqssÿK73000**QAAD~BnnnsG<==L_ChUhXQVC5j/\PSS3jԨ]vκ]v 8d  ]͞=!sBLLLliip8/_z]]b :H+w=RRRr9u-{_ j355!f ̚5Br;Ku*"а" + ЪbMz3 ^`L81X*DZIE 7oϳ-Z/o---D&lll㏜//={nذ$҆ rss믦 v$:4 bffxbGGǸ8`&YZZIӿѣGi5xcǎ=zhAAƍ/\`dd|r<0==+Vڵ$yPPÇd OA`@SMMM};w/..2eʪU>CEE7]D")**1BJ6xccc@@ѣG+**3f:{Mss zٳg?˗|||֬Y3f̘7]g!!!oy?7~DEEmڴ)##?f2}G?|>Do?JBBO?D`4ƍ{}EFF={ƍ222K,YzԩS{9ͤ[6pѣGSRRׯ_Gv; ~/z6mڦMlii鯿z̙y[nܹdreu;m֯_uV\D?|~ttѣMMM]P$GCCC@@ BhL&蠤'O|||dee}||233HpH4j(??B`---L&SUUUMMdaΝ;G& T$*((xxxq8xL&SOOL&x<999~~~d2#22v:;;gϞ%ɻw&:0 S`MMM!===U(lvPP:rֵaLfMM AI*jbb4<33gΐ={9TAFFoVWWנa=ydٲe4MII'++舤9re˞>}JtDb1 4eʔh!ӧd޽{D\]̗9ՕD"=///$^yy9Յ!!“B---D%B0;uDڷoс%TbX~~~.lxH/066>rȫWJtvv^v͍D"|wD%"##mlld2x% ~D"߿@O|< :!LEj577>}/f644>>DG4tH$$: H5k(((~'?&:"i&tҸ8#xa3R***>>>iiiD%a:::F%//HtDCȑ#$ѣD2᢭-00b111knn>yĉB666gΜ%.d;V0ڶ_^zd2544Lf{{; ~D"D 2aKZ qDG$%],4 w@KMMA@@p?H_@0A2LUVV21cfO1?rpttBW`tbB 7>$:;|0D:vсLeXZq ^&ФByS(]]ݝ;w`08~֡CH$ljd*]\MM z9I/^&1bIJe˞={FtDңh׮] eܹAAAdm]]]SSSG~t B 066&Hs̹}6T9$< [Bmap8oQWW "##---T'H'O$:b2Nj7oD2119~8${zzc8p`XպƀGGGdB ;vȑ#뉎H$vI& PHR555 #x[nҒa0QQQk%Dx, ՙfhii1LwQ(?@ &,$ 6 [ whM=((ÃB57%%ZSSTTT 5k~-B?dVx<`IpPkiiZqQ(..V>WIIJ511 ?HoNPΟ?Ot ` S+// ?ě`[!v^۬nݺ$_ D"M:޽{D#L۶mP(.\ :o1bĊ+HdggS(H)X%%%{7nBСCD%\\\bfiZ`GP.]Dt  S~9[[[\N꯿ 믿ZXX ,,,~駪**~~~xfGGǀfG&M" ˗D#<חF]vX@?@ӧx__߂#ʎ9bmm266#:(HtD 7n TqܐI |CUSSk`Qϝ;7sLaiR:x555~~~\.]VFF&$$XD&>`@Db:::222/o988 tttl" <1c ,--(**P(A[[YFFF&44XDjwgΜƍ;ںu^|߿x蠤NjYj2B7oŋ d0x韄Nx#ˆE S`X,ޙEPUJw%==ߟN#Jzp8e˖2x3g"<<<$-r/_.''It,w,x֭b.___mmmAʒKt\ң!00P4 IDATʇ|>?22ʊJNp8e˖ݽ{X@/ SDUYv@ap88e,f9r Qqq#GpFd2y[.DGW__OtDpoȑDLԩS'OF} B |򉒒|~UUŋշou0f2VVVrrrrrrVVV?C״' Xss <==edddee/644 ʢ&)팋jkk Vc l6; @KKKMMdJМC" Sbٳg֭SUU%nnnϟϏ9|D])'O緷Ϙ1FdddΝ{Iqvnkk h[Df& )p>裑#GJ2 vSs"M>>ZZZ!333??r m_~!_ ⒥oĈ&&&AAAYt|ll,ѱ@WYY١CBFFF~mZZAO>_VUUzDAAiii믿^… !kk뾜 ",x1c|}}###$/v.))9r䈣#BHWWWBRAAL:uDUtttJJJ D|TDxƍuuu!999ƃGcYYYP !990"g333eBBB.5휑odd^ƒ%--!*eʣG@$ˍ]nYؗ#b{ӧOw܉?`BfJ_;o#GTVV늏H;;;2`0|<^`rbb"ѱ T~('""bʕ޽C@߭KJB>|x֬YT*F͞=YYYCs"r e-xAAAǏd%))X2?!d``04,{9Ճ^zի Y]gzbFFF#-[(וv9~DRWW_fMLL/GVPP{ilǏ`BNY6mڄ344)>}tìYlv_NL&ՕFQTGGG&)8q"BHWWwƍ<---L&SEEECCd;/Ml%5Y ickkkŋZ!D|>dZZZYZZ :"Ęa;\.${ONN0 @ {ϟcH׿H`cccC*l6;66֭[nԜ;w]]]ՉNReee]|,kJIٳ&&&;wĻ46OOԻw/0d SիWFFFs̙={"Iu֭8ckk;gwww{{{*Jtt)###88… /_433c0}g,kΝW\qpp`2NNNDGVOOϴh F SMJJx1Lwwwwww%D(=8ΣG¢>}*++:i$Dt'##??p';D"11q֭{̬####::C20L߽{7""Ν;EEE...DG'UcbbnݺUZZ=c 5550</>>>88 cҥD&|QQQ|Mzzʕ+GMtD!:LHV d* Sؖ##ٳg;;;;;;5JFFhyAgg h1c I.|iӦ-_|ɒ%D&L<ի۶m+//_~֭[>MjiiʊeHAx<^VVÇܹب:w\kdyyy{{{>>::޽{?xֳf͚1cJ;wDDDܿmĉxnDG'1ڢ^]\\/_%5U^:vvرrJbi755͙3޽{&&&FFAAh$wyTx߻wO>rNNNNNNӧO൷EDDDEERiӦL2VQcc͛7#""=== Ƽykjj>|ȑcٳۛ ڍs)--;PT8NJJJ\\ÇkkkL8eX--- xx4i9s&F#:@ PVVtD%K,]Ɔ踄pgΜc2f"*Fww{]?P^^^TTT\\܃ 孭g̘!eRUUQXXZ`s:rϟ?5j|=sL Bth{`WWCCͭ"&&NtL)++{!ny)Lvtttrrrvv-SSS޽{cccYf͜9S*W źrʕ+WRRRpʂ&:󋏏_h$$Whhhpss)B "QRRr}גI"p_ӝ:xwލNJJbfff8e坊] ++;{lh"ɝiӦ+Vٳg ձ0wM S@>|'OtvvM} }`r777-JJJCCCoH"gwm۶555}۷oWRRjjjbbb Y"TRmmm?~ѣGFacc3eʔSN6 ƹ i4 $no_~ e_}Ո#ի]\\bbbtuuud*qqq VVVNNN3f̀QhmmMHHIJJ4331cn[===Gn‹)+xbgϞfcbbdI b$//g-O44,$i}&ѡ[RR֭[cbb7~xQbeeٳ{&+Ν߽{_ik7BB" f?{,)) wX,.lj>aJ/_ŋ222NNN6pM`0>C---C{-[tvvo3gά^ZAAD$h^^-ŋ" dgg'Ӷ6EEEKKKLLL$ +//a||ӧOrGGGss!)jjj_~ʕh*:w\oooqW\پ}{YYnݪ"+))qvvvښ5k|>Jݷoߖ-[z׮!oG55HG6!S@(((L0 '.'OʥR*O,--ԖYfI޸qʕ+w%H...|tvv[l0_~~Yo߾-8\RR"5HSz8,A) Z[[?.H\\ '566 qqq ,L&O8zX__v6|D֋_;vXjo~GTÇ7l St~<<͛'=T^&.O>p8VVVsクMHHD---xgA5Y&$$t(nkjkk:tѱc޽[~;wy\[[H%##{ IO0<<%%%555--իWc +++###t#F8loox<^|||XXصk^xa``0w\yΈEEE;sɓL̙3rݻwڵקdSV\)QmGh4z5:vL/4T SG}}}FFKzz:ƥ\L;;;X]g7>?edd%''{ ]|fMeffڵ+88СCփӧW^gd2N =x*C2tvv%##Ǖ!UUUSSSSjj*N\p (H\O5|9>>^NN(>pnh"&9ݸlS8PQQxN HW\Yp`#&!98ѨI[ 2@?xϟ3],,,͇%''/RRR3sM6߾};44TPK?QQQ_5ZbŞ={ǻu322H$R|L& 9C>*-E! mJ2455.!uuu 333 SSӉ'jhh-lj xxh^>3 R֭[B~oѡC =|! @rss322Qrrryy9BHIIifffx|رd***hllTTT0n8imֻw߼y̌`,]]$;::Ν;cy毾j0kmGR9J~F'(7WZDʼn 핕Ǎ|䔔6AETViii}kÛ.\ejjJH<Ǐ߷o?7Oݾ}{׮]IIId2/rĦBNWZ/((x-333++!+02111551ѣG5554m]HӒw^~=$$~={={dNϟ0a~ccc+>77ACCcz8?En ґ#{7e!SO횻X6Ʉ :.Vu83q,)&M4rU?rHggg5ĵ srr+W0L[[[S}˗y<ɓ'?nd`mmmff+.jzգG\]x7)..~葈2 Tb>//'.Avv6cnnNNa#Kbbbuu5B0aZmmmUUUs;wp\Bf>~x۶m?~|rrɓD"={vŊ]g*y[[[P>x5%o d*QRR5wIMMmnnFt]LMM#a0z&.!\}sppPWW':́ ill3p==='M44͛7oߞnݺgϞq8B 麮GwtAp8,begg!YYYcc &Bl\.b v}zYKK JETTTt 8ΣG]VRR2fwwwszH.8q2LR޽>,d* @feeeсRRR7nǍ7n8ccq ".8qIMMŵpƌ{7ֵlHkI&u-P(qqqx,d* `X^0<~ŋ&N:xdhhHPz`a^L>uT n޼KPΣG ]vۻ[*JUUUMLL;v,d* `rEEE/^x˗/srr^|{_]/xHBmק\Uښ5w޸qӳ벝p8ƅ=wh4Nbb!S/T_\.˗8yŋ/;;;B׌CCC"x~0/##3n8]kkk#}͛VVV8evKP(.](;ȑ 8>ij~ED |;rrB<. IDAT^L;xTTTd2yԨQ]ӗѣG:::STT!!*H\&%%%,,رc555dQFȜ>}zҥHwt:磹s @3gq}Jx87O8a@`08Nyy w)...***---))+$.G ]|J0\S||Q(UO$n=&̝{{҂7g2"p*++pSVVJKK$'4:::ZZZYJ˗]s<ݵ[bff&''7JMMz9T*Ow^=|Г'("56"//tBTzLpSZZZVV5yBT*wW򘚚F!99 }n(Jr8'FDx5|n?THW^TUUVVVUTTWVVޒhkkkjj;÷>33.(( ~E__M{NH$R{{{ff}!f@>>h,P` ڸɡVFUUU鉺3d*96]UUSI ~PYYy]CCCCKKKSSwhjj5J@[[{tyyyx(//Oy%^t:3:::3g]w($ɚ{YrfN>>( !>;RLϯ.//hqʢ-x0j(@MMMWVVfee஗B"'Lpԩn߈`tI$ӧQt4*.F#F SS .h6nOThoo+///++BpŃJ>l6ŋ,+;;;))M'dgmm}С? Sj<`~BrVVV)))wi"[wzjjjjjjo: .x&77711k6CR  RbXoBd.r劷@d*҄ rΫWjkkkjjpԼxѣGKA]Fj233*$L&Ϛ5׷O>4_ S0L)(((((4TUU R&'''>>>77-;;;cbbݻ7m4TygBW_=zOw^R:P^ǩT*DP(3fػw'OB RWW!Ddr,X"(q"+TAi B3gy$ SEAAEEEp d*,[lٲeBjKXAd*_@|A= HXFK ?J::FD!ُ̨OSY-C"u S1B`XBMЧd*#Z҂._F;OJ:_}nBŋs|,aCNЧH#Pd$b2%Err<""LNЧuydxw O 2/T SL 2/T SL 2/T ``HH$C$C>((($ s3FT SL9|ayIENDB`objgraph-1.8.0/docs/index.txt0000664000175000017500000001303612203743541015152 0ustar mgmg00000000000000.. include:: ../README.rst :end-before: .. _history: .. currentmodule:: objgraph Quick start ----------- Try this in a Python shell: >>> x = [] >>> y = [x, [x], dict(x=x)] >>> import objgraph >>> objgraph.show_refs([y], filename='sample-graph.png') Graph written to ....dot (... nodes) Image generated as sample-graph.png (If you've installed ``xdot``, omit the filename argument to get the interactive viewer.) You should see a graph like this: .. figure:: sample-graph.png :alt: [graph of objects reachable from y] Backreferences -------------- Now try >>> objgraph.show_backrefs([x], filename='sample-backref-graph.png') ... # doctest: +NODES_VARY Graph written to ....dot (8 nodes) Image generated as sample-backref-graph.png and you'll see .. figure:: sample-backref-graph.png :alt: [graph of objects from which y is reachable] :scale: 50% Memory leak example ------------------- The original purpose of :mod:`objgraph` was to help me find memory leaks. The idea was to pick an object in memory that shouldn't be there and then see what references are keeping it alive. To get a quick overview of the objects in memory, use the imaginatively-named :func:`show_most_common_types`: >>> objgraph.show_most_common_types() # doctest: +RANDOM_OUTPUT tuple 5224 function 1329 wrapper_descriptor 967 dict 790 builtin_function_or_method 658 method_descriptor 340 weakref 322 list 168 member_descriptor 167 type 163 But that's looking for a small needle in a large haystack. Can we limit our haystack to objects that were created recently? Perhaps. Let's define a function that "leaks" memory >>> class MyBigFatObject(object): ... pass ... >>> def computate_something(_cache={}): ... _cache[42] = dict(foo=MyBigFatObject(), ... bar=MyBigFatObject()) ... # a very explicit and easy-to-find "leak" but oh well ... x = MyBigFatObject() # this one doesn't leak We take a snapshot of all the objects counts that are alive before we call our function >>> objgraph.show_growth(limit=3) # doctest: +RANDOM_OUTPUT tuple 5228 +5228 function 1330 +1330 wrapper_descriptor 967 +967 and see what changes after we call it >>> computate_something() >>> objgraph.show_growth() # doctest: +RANDOM_OUTPUT MyBigFatObject 2 +2 dict 797 +1 It's easy to see :class:`MyBigFatObject` instances that appeared and were not freed. I can pick one of them at random and trace the reference chain back to one of the garbage collector's roots. For simplicity's sake let's assume all of the roots are modules. ``objgraph`` provides a function, :func:`~objgraph.is_proper_module`, to check this. If you've any examples where that isn't true, I'd love to hear about them (although see :ref:`leaking-objects`). >>> import random >>> objgraph.show_chain( ... objgraph.find_backref_chain( ... random.choice(objgraph.by_type('MyBigFatObject')), ... objgraph.is_proper_module), ... filename='chain.png') Graph written to ...dot (13 nodes) Image generated as chain.png .. figure:: chain.png :alt: [chain of references from a module to a MyBigFatObject instance] :scale: 50% It is perhaps surprising to find :mod:`linecache` at the end of that chain (apparently :mod:`doctest` monkey-patches it), but the important things -- :func:`computate_something` and its cache dictionary -- are in there. There are other tools, perhaps better suited for memory leak hunting: `heapy `_, `Dozer `_. .. _leaking-objects: Reference counting bugs ----------------------- Bugs in C-level reference counting may leave objects in memory that do not have any other objects pointing at them. You can find these by calling :func:`get_leaking_objects`, but you'll have to filter out legitimate GC roots from them, and there are a *lot* of those: >>> roots = objgraph.get_leaking_objects() >>> len(roots) # doctest: +RANDOM_OUTPUT 4621 >>> objgraph.show_most_common_types(objects=roots) ... # doctest: +RANDOM_OUTPUT tuple 4333 dict 171 list 74 instancemethod 4 listiterator 2 MemoryError 1 Sub 1 RuntimeError 1 Param 1 Add 1 >>> objgraph.show_refs(roots[:3], refcounts=True, filename='roots.png') ... # doctest: +NODES_VARY Graph written to ...dot (19 nodes) Image generated as roots.png .. figure:: roots.png :alt: [GC roots and potentially leaked objects] :scale: 25% API Documentation ----------------- .. toctree:: :maxdepth: 2 objgraph More examples, that also double as tests ---------------------------------------- .. toctree:: :maxdepth: 2 references extra-info highlighting uncollectable generator-sample chain quoting .. include:: ../README.rst :start-after: .. _history: :end-before: .. _devel: And here's the change log .. toctree:: :maxdepth: 2 CHANGES .. include:: ../README.rst :start-after: .. _devel: For more information, see :ref:`hacking`. .. toctree:: :hidden: HACKING .. Indices and tables .. ------------------ .. .. * :ref:`genindex` .. * :ref:`modindex` .. * :ref:`search` objgraph-1.8.0/docs/HACKING.txt0000664000175000017500000000003412201136171015072 0ustar mgmg00000000000000.. include:: ../HACKING.rst objgraph-1.8.0/docs/refcounts.png0000644000175000017500000005647112277007131016027 0ustar mgmg00000000000000PNG  IHDRKި bKGD IDATxy\G !%EP,B(xry W=jJmEmkU"ޕ*"(\r*IH~lpĐ dvvv2Ye@;J@@zBzR}SXX#tתU]P\ љ&ok-+b(wL5kV[] Ph8O]p')SSD?!CΝ4x`BHMMͽ{Ν;ٳ׮ /TSS{{{oܸrD8ѨG+WTSS=|pQQ!b嶶+WܰaZ=9$ܹp80"Їvۀ 4ٳgΝ\d{zz6b_r%33SحxnڴiMMM?322UCvMϜ9gذaJJJ>>檪Չ^)^xA~먾^r_CPaBCC[ZZ !k֬2e0Ν;w _kkkl''*))I*++o޼YϏ`[KxΜ96lhjjSGEE#G !+V ;wNBC9{{/"''GKKkժU&L" H=S__5rH*u5$--… :::nnnW~E81svvnnn>tPbbbss#ΝK2eWUUՁ[[[VZekk;GJϟ?իy}7IJ1A.''CM0ܜZs###]]씔 b2To)vcccKٹspGv믿KLa D d2$,5D8%So׭[BٳG̙* 60v***owСwv,̌{nBp+ԋ7xCs;|prs!9rDB91+VZ[[[YY9;;|_~eW,Z`\pҥKGYY?vŠR'S|Rj.ѣGL0@ hmmmل##Clj@ `0 <ؘ믿r8*---;v[-*..zDUUՎTt|||5n8"26KBhJ?ʘ1c>n͛իWO.}޾]7&M?\_Tb\\g{EWWW''vbbb,,,9W_ڊΥ$b`@֯_?uTGGsܒ؋/RK<ꪯ/Ɲ}mݺoĉ&&&|>ÇQQQ$%%M>}ȑ:::|>ٳgݚ_PP:w\GGGjFemmϝ;WVV֭@?gY"##~YfɱB"=t#@;HpezL'et#>"""""S]- zi-ojj,((}6ucDWyvŋ=<< L"WQݻjŊM @r=u'{---KK3f޽իW}_w VlvD=HhR4QJJJÆ sss9si&/lp„ /255ULJBWжB=Ф/y8CCy?*ohh;| {&.!$99Nj0phRz=~xooo;;;S4_ܹsAAA IY9 sСhGe`23g6l҃n\UU:11122 e2Æ cXW\=U3+V?^SSs.Zltthb*,ݶDW XpA={vܹaM7t-Usul>ӧ>չg0?w)Uvt.\rJ77sΝ;wNGGsuurW\3&addrJ'';w8p]7A***D?R5©;ޢ"ښ+a AAA[m6&e˖-<OYYy $ ƺu뼼)squuk֬2eptׯ;v[mKtPaBCC[ZZ !boZ5jýg >5k=a1cPyʹs1`WvQmmSoL2h o:pbwNIIf{{{Bccc[ZZ$/"'={Ccc?Hƌ9;;777:t(11yĈs)SxyyUUU8p ;;lժU?z(?vјz--#GRO~ɏ7nͥNn+,ݶDW/rrrVZ5a???*‰idYZŋ׿dɒ۷oB/^Lٷo˗/%R:mۮpE=={:88xk׮---M2eJWnܹo ---ۅ Y7Q!YYYA1wW)Hyرc}|| 8t-[ܼy[nHݿ\\\KKKKKK\\ZDu;644xJV|}} !;wLJJz{Ν; !)ϟB͛7yd--͛7w۷_ݺ}[}]ff&}C!"1g-y͔###__ߩSݺu+11Ѯ^ eee̙3uuv)ÇjT|+((h+_@|BrrrķbRpL|7![BHJJh$BȰa!ԙwvk+fffݻwJ*n:jiZZڞ={vAݺ}[׵uuuꭘF˖ܷo߾}.\H矻[xГ'O.蔑0jv4СCKJJڭ/vW)H.]fllllll}LWvqnnnJW Q3JJYӇYYY+VrvvvqqK)6ڭKQaٷ%,lɆz f)*,Fm\i|jYbwP[[[ZZZZZ*5ӄ_rqqimmMJJu$ͩnݢR\]]B~ii)bرU$Q\\leeP!СCl6Z$ *e_EEid[#1m;ٳG__ҥAAAGdEvÆ ȠRD'HR ]5 +^m۶檨xzz~]nRIIKKv|󍆆Wڐ &yxx^ZYzɓ'kkk+++lܸQ|=/_Lٲeĉd2Y,СCNJ <޸qȰ 5Mߕz"㊢4-QWmfg͚U\\|@#"~Evxի6!y5|;b_vW8@CCÕ+W\bhh1O%~yWWW{{O>D4[VVuŋ]]]BCC%^LLG}i{{{<7nP/RSS'Mg ukk#ȸ(1,cKvijii} ѣ=zt}|@])%kq9///ccoJIJJNIX 1NWolll`` IW]gϞ={ @.s/b^^^)Sx<֭[&Nhbb>|ڊ8p ))i#GϞ=믿!ׯ:u\nIIIllŋu<ꪯ/]A{jWȲdGի .fϞmeeBKi^hhhO+\nbbC"##%oƟ4i!$77WtaDFF۳f͒c}G'N""""""""S'4"U꼼2@WgV`O>p@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op_1 [D8p eyWgyW p@Op?hii2{xᮮZZZ.\Lj%aZOOR/R]]-&?˝5k֟)Lu֭[0 0]JKK---Z[[߻w};wu}1 -22ߖeOϿv횯/rӧE 6Rol{""",Yұ4ќ@cA?PTTDxzzBٳ{b077'ܾ}['& !$::ӥ(%*A~ߟf͚d."&PP!$$$ȑ#uuuݻRCCCBHTT` :gֲlL.;}]9e˖fЇ~ .._SSS__wߍb]reݎjjjA~o&|N>Їz]H}>rkJMp@OAQ侎" >""""""""""K =·%%% JKKX,GGGyT <zދ/8NWO%;m4&UEe}``B^tR>"MM> @p+f̘1b}`A^6o<..^X.Uzŋ\nD==)Sȥ>0 Ao8qh Zh2Qd.^Xtb%\(11]Ĥ`ȱJ0phܸqC^X 73pЋ ҥKJ Q@(%{lBǏ]@Ї4rHBȲe]XЇ۷ɻ ٴi>~$peeee >\PVVVWWohhhhhoMV\){9111Çё(OJdyׂ˻O?&LG8qB8}A 4p@Op@Op@Op@Op@OZġׇuʧ[]]SZZ*:bWB_~z>_b[yyyffǏtuu]+}U^W (+W$$$Ȼ2ٻwUV˫V K??;o8::5jϞ=ݿ!tIi?SoSRR^z%&[[ۯCaJaaaaa!"ԩS)?uSSÇ=zdgg'yyy+WƖB8͛7uuuǎKO[[[WPP*u婡W(p[n,\ĤԩSb߹sÇfͲWUU-++u1h=/q')//_rɤRlllƏ?|pW^egg?ƍ"\CCúutuu]YCCCєT*¥fffYXXXgϞEGG߸qc}K.1 J4`jjd2 &zz:*AAA}T]@KKKax#xxx$&&~6mꫯΟ?OyY̙chhb.ʙLYx:t(]YYyfooo >333aB{^0 ?ydg5xv)C ^hjjvpTt !’?Bw=}_mjj3f%@o@bDǻ*++mܸw;&uyyy'Nrcǎ SCW]]"1 ssslvǥ C jkk !ӧOWVxUXX(cFFF}E;w绹cW(8NGEEDEELOMMmjjjkk{oF-rrrE ڗn޼r"##e,sܸq#GS x5553gϞ=MѠ̬ݷobggWWWU~wwG={RaJU-&g@G뿨''{Rkyy;wd /_^$$$_|!<>MCCѣ~m1Lef̘allbaatRj߸qDgHaҤI'Oa2&MZ`F4hdXFFFnnnk֬pPMigjdzzzzzzv,JMMM⡯6t;ޕ&OƯ\m+"=b޽okkk333WZell܃B#""41Prww7 u:jR^^ruuu'N&֭[/\d2^zu|eecR9>Y]]455|qx>Ԕ@ni]]ŋ=z4j(??v333kjj!vvv?~E|>?111==Z zxxJijeCٶmۥKZZZk[->-_ݩ[]믿믿RRR^z*IW-,KKv\6""";;?_YYxn}) {{{UUf~ٕ+W^jfffG!&kN !=MGRRRBKHHhll4hĉe@ 8}tff06.. $$Dyyy+WƖB8͛7uuuǎKSSS+644dggggg+)dꌌP=gXs)MMM?s}}=:Š~嗢"aJEEEEEEAA˙Lf[[ۯCaB1ogԩSn] K-Ϟ=N>{*խ}ӒXbFFFeeٳ%/SvC]YtiFFF^^^QQQQQQtt-ŒbpåXW D8 ԑ455599JyyBBB^^^HH$u3-55533SOO‚b={,::ƍӧOlhhXnkϞ=khh(JE89m4WWWMM;wP{>ѣlCQRRf***oݺU__o``pBSNfHHH(**RWW: yyyQQQ?NHHsÇUUUg͚E/++u])Fyyʕ+̨N 7"ԭmXTT577GGGgee%$$PNL ҒuնZZZ~~~Oqrr"BR|)⚚mmm Blmmmmm9NvvvffGTUUl#D;dSUUu%ӭjz?^l۷o߾l2==ׯX85/^lggd2dBHNNh9sX,j/ommmRYYIFS cccSSSmmmWX!cU{_}tcjj/_j!T# Ԕd>#dA``˝ZD<FA$vz---cWXm-X`Ĉ@qEEHL YK:;;9.99999fwvҨ»5N[o-_?755mmmMOO?|pd*++UUՖ R)666-ڿ^^^``,?{?Bgϟ?9dph] "̛7ԩS}믿6553Ww gLLLDJ;);>1; uI O?ɓ'Q?ѣG999O>}ŋGloo߱'/bmNHoHےeCߴmiiחdbx&&&ߔp8999=>$yyy'Nrcǎ 鲈p@LMM={V^^.B)ݚ]`0@ SJKK?###;n׮]uښfff>/eggfxr܂'OB$/KQTRRQW=z=gffqƥK:99IΜ9Ǐ?{޻}8 nnnM7224iؤEDDS\]]ܹS&(Ky444Ǝ;v/^dffR)^^^RƏ_TTtq2-,,ƏOqww/((xٳg;nZoG|SwZ7) wŴ-qdm)M`0MvԩPuuV222|MR!fKxwxeEBBB}_$2{lSSӤ6==QFy{{wkϏb|R]RRRqqW-,,>/^(++nnnҕ&2fڲe0+W 3 &P3Le222 A.ݷ#*SrRRN[XӶzo)vrr/--ZhQW+AMuqq(}Q 6,XOMYBȧ~z XXxc ~;fŹO8!aB`@.J=f=@s.*ȤЇzBzBzBzBzBzB%""z(3" ,eee>>>K,)//w] ϟ/K>}͛[linna!: Uqe:KLL,--w-˸qLMM\7olhh>snr̙^={sw|蔄?`નO"""fΜN=|hzD>ell|ر7o;88lݺEޕWzz;ceeu1yz"QVV yw&O/JF Z޺u144Qޕ!ݻw=ztȑڣ-?~_ޕzprk֬7n\rr+0@!<]]TUUU77yW `A-NNNqqqG~Mxx8-"@/-=z|cƌIJJw D8^u뻻WWW˻RGlllϨؑ#GɻRtЧ򄃖m!5j2++pUUUc0 +O>ܜbIVU(pamm}ߺu r'ڵɓ'<Ou^ OԠڵk?ѣG߹sG5@"## !QQQ\.̦%D89Р-&Lh4VYYIWVVw]W (+++W?>..<-?~ﯥbŊ|8Ν;l޽{7ma:::ځO|8c ٳ*v#F$%%&%%YZZ;\ #>Mܸq>xɆ >3ҷ:^rޯB'8NSĉ333˝ftҔ)StttTTT,--7lpƍ`@An?~m֬Y]#łpptcbbrر7nmݺEޕD8zرcǞ={.]$5D8ڢfZ幻Q7| hy'O0h "%:v옼k eeepwyg@/BX;[]](J D83--mG9r$-(̙3-[6iҤ\yW '! hC ޽fCCC])dщ:qℭ--B Νlٲ'ȻR25k֤^z wdry'-Blmm)3f̘={j :#""֯_bv$ j,66GIIG|>?66K.u^]z֭[7a„~A5@ 055-++tСCKJJo1ppCCC_|)JuXd 금b-Y፮5z뭄_~ԩSb~|~_MB-rӹ\E>7 Fppp~~/_}ٚ|||lkkl6}$E Zx<z aaaqqqfjnnW%@% W}` t@ >cwURRz葝UVV <}Bz`<|R^>tpr!!!ƍKNN^r%6mo%۱d `0 gΜ+ֶcǎְ`%zL&388XކQJUCCE]]DJbbccX7QÆ *TVV6dyW zp /^N]ӧOUv=<=&޽[YYIQWWomm1 @oYYY C>}4JY:pLLL ! o0 =!=!=!=a.%&L wʧ+7o,--URRrrrZ`ѣ%YhNXXUU?:11111L!@K]|>ӦMO>6ld2߿q-ў(D8.ݺu+77WGGgT1cƌ#ߊ$@UTTݻ7%%EYY;44]vcmmmիWEƏ/WIw,&&2w\ax~N}}5k/^|⅘<?NNNdfffff>G;vɓ'Ϝ9SWWghh8a„wyGGGG¡!9qDUUСClbee[d >SCCㄐxYf<rҥh*̙3ӓL3֭[gggbׯ_/&իW !ׯaX;v쐽&mmmo&&&&&&fCBS^^Nqrr5e˖qƩmٲ㛃%###Bh &(2D8P8&&&{ SD_w4|p6A5]&Ro ("(jnw}rss1NJo/]K.gQKuuu !oxݭ/!d^TIDAT֭IIIwޥxyyuA\JP8/~ziiU &TTTt޼yiii;v87nH> ?֭['naa|r yAξ}&L6h ??͛7ɯ߮YREEEMMyΝҵk2DYY֭/FbLMM'---i>!@ w`@`0۶m8q+9VЭnܸyf{F)tq\VLzB'8ń>"""""R^^~Ԫ*Boz@Wd# "(faJYYYYY$,"(fGG5kXYYB([[[BȦMrrr\.ڴi!dȑC%޾}[sHٰaիWڸ\nIIItteYڵkUUU|>!}8P !!!YYY?E֬Y#y9nnn/_޸q0%>>~̙><{_~Sw޽{%N:Y ?|kjj!vqqYd]VUU511FzxxDEEegg?dl/EhpBZZZUU233:uܹs+ zi c۶m'NwE76oތ#py8'D8'D8'D8'D8'D8'D8'D8'D8'D8'ܗNjjjcck]})0 yWAܫ``Y`!$22R^p@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@Op@OpOKK'|bnnb ]O>d޽򮅢C$DEEq\@ ((JB?(@(sN6fwr x7o:t#Gڕ:bĈ?^:Phll| U*TMIIz+IMؖ]]]444/\#M$@2練xzzv<$p8*'.Odd$/^c!T/zL_lGrIj"Ŷ$l۱i"Y BE0Bɓ'N8Kٵk:]~b &P2&_J^0tw%BkjjZ[[ܹ#M$ D8XH9uǏBl6: 3Rrرc !IIIPy$ ˗/&JRl'*RoKL;899B""":~@ٛH  , \pQSSSQ[[[]]BrDȩd2)ԁb8k+C+ a$ŊV[H-1РD\JqDPG궶DghȑXWz[bAj"`.% Dք˗/&^xbcc#a!NȤJ]TEGGRRCz3gμzիWO .̙ǎ+))x<8x𠻻uXk#frȑ:s*_zU^--gA]| ѵ-R"ˊgҤI].c* 0GGG555uuuGGǝ;w Û@'bbb͛7tPnoon`WR"9ݻ&RBͥp@OZW'2p@O }8'D8'D8'D8'D8'D8'D8'D8'D8'D8'D8'D8'<hn޽7o!L&z`0m۶vZz "Ǐ:1ZZZq`hյ*))=፮:91ྯ RUWWSgD1̊ CCC zp@%&Fcp0 AAARKCCC#LQQQ>(wՃPߪUhH&q"' 81R:$'h&1 41k#SQmʨ#BMkӘVM vɷ܅eW^;~~oWJ) !&ӧ K.-IBL6fl>bQJ!d7s̮.QQQNJ! !& O uV)o!O*b t.bM tBL\G t b L&EQ_.穧R SE9TUUm۶-YԤ(իMÏOR!Dh '"4IB !MRF}Dq⡇p$$`NܼgBI^uŃj^^'Ny$%Bnbd'N5it}A2wtwX_~]}J !|w?+V9@ `0`2!9%%wf6#/11Ɩ-~]}k9 a BܹkÈɄ4:34O-^ _=L\b pAmt .uuڐ'E\{qH"'Ǐ-WgΠӧ騯W;{oLVUUYHpBqw.\@l,N Ǐc 44M˗͈ǭ[(. q,ZtvjŋHI/A#:hołF<80dTOO(xyB! E(JJ"JMo`r%@uujZ|MUE-\$W |rcssύh ỪMR !@zMcjulm5kdS1;74s7<^|q ^Bg/fw] ``@=8|X8}::o B*b-] ghO4}eJ|NeUs.mI5{E+Ni` {Mlق)oT8!ĸ۾?ݨBA֠;׿--ع22t?(+͛`QZ8tߣV+e3g@M?8|XSBJ1TDz?iiX}-mMA<pGNtr5(ϫb449b܅wQT$@RQW0Mϊ !6ؼ.\ gw Ν֭7""l jkQR12iiA 2Pn& TUUm۶-Љa7HnBǞ M5 ؿ{ @+WGX`6+W׶Gv kע Ec#֬AWʨR!BF>qEE\ׁ+s^5cy 0;[ӘM/qt~ t&>gwgi_ W[/gQoa2btt7n-޽hmռk0`2!9%%:4DGc\5HE0cÑBܹkÈɄ4:34s-A_\̟qqذ ?y˭[(HLT20D( 23O]"3ρ?B7yz?klڊ{h֭o0²)DsVV2#&33yڧ霜XVc^=s`۷\w {:GWYQXS]W5 M}r3k_{[C~=Oh65&_ʇmwcW_%T67}}ljbJ :9ypD0Jlks8pBmx,ssӦqFlv\TDݪUݺEKXQj#~ҴI;nj Ιi?F‘|Q<|N۷oݾ͙35-UÙϾ>&OYXHMܽ1/ƃ=?3a *b,]x2^Z4ii={'ؿ=/4}Qժxv7{؛<=vGm9u YY=8{t86c&L9WBLNzv9µkuna_jvu%-HH`K V67{ K6# [SWQ~[$_`L ۴XԤ.(bӟO8 Ҵuܷo'Or\?/C]OaazUT&&]rN†a h԰6;;Y_χ"}v{c㧦`J k)?q159pZ9v-9J)opnK/11QmswIKSg[224\-'3(Y|ǚvowiwe(+::8o:h/Y_~SwD8^öqdbs'1/4FW|K¥QpXTĤ$`R5gk_w0/ͼv͹PqVΛG\JE%%##^|.\^Jil9> {/=@wHFF2%EsOIQ[r%fet5>;vpBNH._Ο7f{ӛ}ļ<3,aa~+W 0xo'Sj۶mNDQQ0T|i Q]]TdAbAi),^T|i 7- !|a_ ++y(HAN*AEQ0krrPXT|i 'N񲭉)HAN !MRB&pB!BT8!I*B$N!Dh '"4})pIQ˗Ϟ=;Љ!l{P#FyO2tVw^Zos%kO%2[1U LMMɛC 1002=^v[nݺuIUKgQ߾MۘS{ҐUyo_49p٣ cfsH᣿qMlnaځw򐙦m[`Y63Tbcnh~CyUr(ے655}ҥKkkk)TUUm߾=444((hٲe ҍPSP>Xg?E@eҐ6,[՟9x`-L;<n4|ɺ{+M2sg 5MG+cWr(v777صkWvv6{Ѯ]L ;w|rYY{O??>T][_@O[_ʉ`ɊO| ]F] nej%/ݵ 7N9[ZQq3ܚq{nQQ%offdeeI.OQ[-ZzM;.p1Ή)Qйt2{7̺xD`0U;V5R/7"Wl7Y,&]6G^P=m[nR˃mGp&UH`hoߑ8<{#UTyKaK߮R [ȟQuO5e՞ҥ vpp?O>d佥Я_?6V9u8`W:Z:ZmN]1)Q9n佢2?&Gӳ}}XBES_3Ҵ#h[v:l6y8s挧oF_%:kϞ=/^\?om|:e~mOȌ+j+l=igRȻbR/BEmu?h@HЀG|Z؃=l])Ce}{YYʕ+SRR._,,{x<޺u8ŋw޽х<O!UU &p͐uW{qދZ1zZ^-/{7|堘e\7Ib3L8y[:tޥKģCP}˖-7===W^Sah!jv?~իl6sӧOܹٳW\),777!!!!!aǎM96Bj_d?P'O.$+Vp?3ocXf2L&?]b o!effΜ9o=x`BBBEEE޽K9G22'b^Ad1Kӹs pY|>?++^پ}z%+/:[:;ψ%[ܻqޣFP#~pss344d2zZjܿ_$ )p8Æ #7[`Æ ަL&SOOt-K;]:rήίsLɸO77`kqp?j⢖jv"zYeRYYپ}D[Dwڋl֎n͋0gggѫ֐_Y_m=iD;q-Yt?׽~=?߱u1Qk5ڗ/_>lذݻiӆyΝ;߿y{Ըv{III>|@ xMVVիW[ofذa=z055rϟojmIA?cPoxfsz>#?py1_?r75 Ǔ!<.ҭ&G@0kϳ~3TBHD~n~n-OnڡCsTB\{EEE:t}-F%4TwP}ƍ_OIIIII۶m|޽{jjj 6mڔgggGdIIIR u?HxꄢO!v|ҥKϢgϞFQLu.]$l{5TwrbQQQ555d{ee._GGLOO´j#""bܸqyhiiI_ț NZ@BJnmm 7o~TTbs7-ׯ_2W,#҉*Uȑ#`\.7==/`|}mmmrrrPP5q\.7%%eR m"##\#*w4}gd>G%D/pR^iӦ+Էk#F100>}֭[ؘl޼GZZZ^^^aO6m\~}ԨQ&&&f 2Wp˖-ԩQH|uJ#""<8c //8*rGJEv LLL)))9vؒ%K 88\;ٳgϞmݻ9sC->]9T,*ַ_paȐ!vvv˖-544΅ PϏ}2gSB*ַ#Z !jG. v!jG. v!jG.8/_}Vxnݺ%li۶ZYYYvvfnnjp8=z"%%`ʔ)Cfff Mc.%ݒ r-)FFF, &Lv___CZZZcƌ?+ $v é߈d+44 BI$+[ m=iFL0AnB===ɋ kӓ<4bBCCE7\.WJ]L&sҤI·Ù4iԙÄ D,,,Oa$^9o;aҒL<5##%ާOB`ccJi`0SN%CVm({ĉ9)$$ܪٳ'q @O4rI&QFzӧO: :g\vmiHRR׏ |w@9~ӧO=<d Fpe9nUTTrΥpG.(v/^[?.ez2Vh}y-zek(v'''Rwqq!OOO/_]^[n [p/qCpe}ܹs444ttt3n8)ӳXӧl [[۩SX,Waiƍ[rexxxHHH+`0BCCpJt1GGLj']`#DXV;BtՎ]`#DXV;BtՎ]48W^edd<}۷|>ȨK.^^^ϿsӧO044ܹWdƁP5Zվm6ћ޽KJJȘ3g9ٸ}vi޽{1{lKK˦/ ߂pͣVjv[XXٵmۖ`<ٳEEEϟ={69Mzmooobb򢣣Ο??w\)3ǷQ+5{EhaaplvΝ'N/_Np~mۖbLØ0:G$۴iLtH݀>V;w^zr}||DnݺseeeX,OOOOOϊg>|f :zE ܼy3##۷<OWWSN-Y#k5 ݻ`ee%^./Z8 322-޽~G,X)lLLI|||~~>.|`YYYVVVVVoGj/,,pKg011 "_&jh ccc[[[͛w)ʖ.]jddtҥӧOmV%==nUUUNNNbbbׇGժ [UUekk+eׯ_x, NNNZZZ,Ғ{=)Gݶm[CCMMXKAA9><{,>>>==k׮3gl}Z95Z}˗/:TYYٷoߡC֟jkkbbb F@@@7o`׮] 2)9RPȑ֒7njslK.!!!zzzL+Q˴o޽{+++܂=.{L_ZI FaOjhʕ+̙ףG--[ViekY =}fkť_~-p#)p}:''gٲeTAPjj 6l@uD]#[ط˗�{RQCvvYٸqw>}}{۶mKKK ΢’!zR]v r-!2g}6l0 ʨ@*joGFFxSjo׮(,,: mmmǎKuD%poo?bQQIvh߾=V{mٲdTASjԩSNN)T҇v޽pB--- FԿZj]v1/ zQ:ujo[Ξ=А,zQ\. *%%%_}ARPjTQ%<_4i%YRPjԩx ԩSxr+ޮ]m޿ *OnE5$''{QBe\tݻ8@ };t-++*OnEL;;;c7QRRR||+*U{qqq~~>AT͛VTTFɭ!*S:uJII:VTDS(/_=zt۶mxr+OevpssKJJ ^.`0 ^hl۶T':AwʻW IDATBTTQR>|سgϗ_~IuT]\\v܉'")T544z왚JueTUUm۶9s8ܨ!Ty5w=}tԨQzzz3g,++n0y:p86m :ˢs ///7o^6m:0f̘ahh$zNsn4yyyijj/_kK,uDxxX۷oE FddF[9C޽kʜ&BCCٹ)̚5 BŪرCo{{;;;wcbby<ׯw}N@Noeeu՚v;;;r666|̹l٬###kkk+Vhj9~8|$U;AG5jX#y^˗-.]{go^tsTKKK8-6sҥK–ڵkSh6777HII]h^^tܹ"zIzվ{n]]jF7JaKEEɓ >,|yBld{Fh6`X,d2L 9N+,Tv:$U;9e\\hc0E=z ZKnt΍f֖X SI+i-+W-=M;ODc솶Zs\]] 33+ CE vdƢK.Ν;֦uYcaak׮}]eeeTTpp&.d[[[FhÇ_|r=zgϞ~I_AAA{xm jJV{NN8{} bȑf ֮] u?YlOD$MιlA|)޽{ ɓ:AR0`@HHhKvv#ttt OSh۶-y/[nyڵkkjj.))1cn@@gϚ>gHcƌp8 ,)-fƌ;wx M@uPjߵkVqqqC^^^LD2ɖpvڥʉ2gSZ텅',,Lpⰰ0###ؾ};!mɒ%bD*`ԕV;A ެwޢQHيtuug/W9Rj~:$&&7/\0dCCC ;;e˖)2?6:Z(!SVUYYY:u UYYicc3mڴ7R;Uŋrw.}H<FvrFe(ҥCubTop8s=tPqq1Y믩TjP^^noo?eʔM6QEիcxx8YQVX}\]tttffUTPUUeoosNuuu/^HuTomm~a޽}؄o HUCAxyyxuɈ#JJJT:`0~䈈۷/_NuԤo'͝;722mڴ:M0!++ݻ@GjǏvzСI&Q05ْ'ݻԩS]2lk?^* (eͤIڷo_PP lIKK8*r(={<}tnnIu.jKTQQguŋL&0aBMMMBBy%WXXhffL& 6mTWWR 6ڒ';v,>>?ؼyspppmm-ٿ?њ"  a[mll֭[G/N_EUcXY,orBͥn՞ᑟߧ$Xbƌ&Pj}vuuuCr8rre#Ub;ZC ҽ~ݺu;v`2;ICCÂekoo/:1bӧq`bbm۶[n:ϱ4**hMkl6KɄV;W^7oތf2w0teeel6̙3XH&ԶI?6srr&Y~~>:95v^bEff5Fu.^zL&sРAT'BCdggw+W{n=I6;hРkkkS5'/ ~O_q$#4̸qu&XQQߥKJ"Iq]GGG9mgeeıHNԿڝNTr:{;B!jG. v!j 0) v*R$?F2H9aߎ]`.{9SN]r˗FFFݻw tuunËnvvڴiӅ 7߽{U]bcc`޼y~~~FFFYYYOѭ ]LLL^~}ΝÃ\kժU?CJJJJJ wS /ӧO ,KIIٴiչa.w,W^zׯ_;6--`!GHM&__|ťK AYYٍ7@d 7nܨMdv?aÆ/::z»p<vڽ{snݺUXXp L޻h"MMͤ"ޑaˀX,zٹ-]T v!jG. v!jG. < ''ƍׯ_AM>>ޓ'Onjj :Brrtҹsŋ[n~: 8qbqq0{lRǨWG]\"l?~xRR_+lo޼Ik. G@uu#GǨG-. +W/ZEKKӧ[l|`Xz>|x$}zP-@?PD)k׮UWI v!jG. v!jG. vBOOO///:Rx!8y#(~őj^J"$$"""h #DXV;BtՎ]`#DXV;BtՎ]`#DXV;BtՎ]`#DXV;BtՎ]`#DXV;BtՎ]`#DXV;BtՎ]`#DXV;BtՎ]`#DXV;BtՎ]`#DXꩨTx={&l100055 1ATgPC{3g f͚<V|]v<OXv0661b-1b:Rp8`ac@lǥ&//yMMD 5jT Dh8;%%A3fH|xC»kBHС-\ E@t@{'aF׀WåOF ‚Nڰ '28~02"Mښr&^&Ǝ%>N|9@))DM DY޽IDz:ѿ?@XAMByCĻwĹsСEs"^%jj$cEsn7س'@IgYYw*aF@ðڕrW;AaaafFTTecB[ά篩I[@XE0I0'p K:DAePQ!Kl$7%$̳ʼnݬ$LhVRQtK((;Z>IW_l*+>|@ S; ^xش BB.^sDGiP4Pjg6mK:884u667n|j~# ˖Ax8ܹpǻ=ASjIL3Ԣ$?Yɵ!)kv {{(*éSPQ |)F HM.RR>A9b9AM dg޽@37hA^= ʠm[Ȧv={,YPSWԩu&nkp"Fb9;m4 L3qm-璓4}qM:S6 \kaەT;KIh&6l z mmGbEijgĨQ.abB̚EJxTl,1f aiIp86L,Xq7uR1s&acCل.JlBxX\L̟OtDp8Mv   ؑXr'%6ouu //"*y#o3fƄ.@<{&mIY jW* a:""bܸq\" :P!YjG. v!jG. v!japw&#4pHkW̄|<.)+ (<= $wط؀b_NN\RӦ!~[7V!e{PM=BMA Д%-A]寿>N/e{%x~2]Fؘm`m P\ ý{u <|3gYEx'~޼>޽s`PC$YEx`$x.^ CvrxH}5}0vK[H`A@LPggHOLM"Gxlm?`Pocc0v##wlV C `tsoDkܸQ2/$5 vٲχNéӾm˜1`i hk3,X))-\PR̜ 66f.–-sgRoط@K7eh`}9|y3.ݛjG򒑑w533400Ԥ:bK`jjjjiijkkiȑ# Iط#y122ިO r1x`,u½tH.\edJ{pB'v$w/`lvےڵSd*jG0f̘x}}} r83gJ,@2Վ_~iiix<ޞ={֭[WXXHI6jGcgg*ڍl//5k߿C!!!TcXHڴi7zh .\xӧOw}77;w-vhǏ;w.cc#GƔ)S233\bllRՙ3gKigյٷo_mmߕ4#gsss8? LRw9m4ݽcǎIYYΝ;7np,Yh"mmmģ?naXbXrӦM c߾}2+,,\lCx<ՉT VB$&27|bΜ9#9+Eihh8;;GFFRG`0@0c mmׯSEў>}:~xGuՀUسg?y29}ڞ8q"55UGG{ԨQ?:jWm,رc=z1b iիqqqݺu[|yii)աB#9)))*//OHH033:|;O?M6M kD^p98`XsΞ0a¼y<<<զ)Մŕ+WrssjjjC ##FFF}ٔ)SDՇӧN*C{{}EGGԩST'RX Xkddddd$G}b03fxaƍO~GsX :dɓ{Dejj{9;;߿P``v۷Sz>>>ꫯϟ?`R:݃fڵL&3"" ƍzzz{: 5y<˗,*++G;(]/]gQGYM894 swwΦ:ӧOjj|r}+++CBB9qÇ,XniiIuþ]p8aÆ}8Jdԩw)++srr←#wXжmۘj(.]3fU[45hР9s/$f۶m˖-is9@unnn```MM qcvq403!9((cc2\ffoXXS. [tݻSSS"Vŋ@gfEuv횯3vAue񼼼SRRtuu#?lO0q"iZiϞ= Y>zh~~OuI(PUTi&**$f2{::z(Ɍ:8v0p :̬_b>} J*88ں u\.p0nQdfՋ-4iEܹl2R)]vUVVX uQqJJ/ ]]BOx():Sܾ}lcٯ_628rɌ:'O^v 1Cw`Jۛ&$$PW\L|fĝ;!^%x5l6Ѿ=HAC @ @CA8:ffML&BZE/Q[+ynM,]J(gϞuttd0,I{9Naa!YQQQ]7axatA8z];kk## P\ Ba!ĉ0i+aaJӃppwsl N>bŊNfYfڵTeS*Ç/((ujoAªUص|m[ zhyݻEEk@HEQL/ƍW>zrEF555Р0sN޽}}}ʀ.IUL g/ҥuJ Gs R˃w`Z8 6n5k`h8r ?rd2;6~x)ׯ_'''S! £:wedy={BЦ2ABdf!8 2R x߿bq\wwDC)}^vmРAj+;6.]kO<|=l;`f0o@L հvmc?aÀχsgdyYlllӧ/((}6YCrF[[7!ΝS$Ey.\a8HKCwo~a&HO˗N3|e~>BUܼOqjtL;6퍊 |RIW>L|ڷ~23g*K`@>б#9=zɓﲴ˗a@xŜWaÆ<ɓ'vvvjvcǎQ#GޱcǶmdQx~;TTaP\ uJ11,,`, J]}{5 ڷOСPYIY۫Yɜ;wC(X:;طoɓO=( IS 4DGP̑дijjj@&!, ?5< ,l30|8x{×_=z@X:DY6dfffSi_w…|9^8"f͂a@5` <f̀S>5 K%CM5s*xvf̀^>5ԩз#XDЧL n}j'flHix{{w!,,L˥w<~ |lƌa0J5,, 8`Xpܻ۷S 5dN0!,,LӸsr`:[Cp0TV]! ee w\ kB~>Zeʕ+Wlژ0aBNNq^ t駖{ummb56.-6m`jbQF>\\\Μ9ȅҵ߇'_A8Rb~>,[|ꕟ5_ _lсM , )M&36lh!=/00]!֯>O-|::ʸ^A@K /2f 8;eBMŋw*l>ʖG0jaa !<\2>;Jض?7|I,߼y3""quȔ)S.\xd>]r 'C@iP_ջ:---++'u[%]ĉ322JJJ4ЗaÔ#++q"y{ƏaPhPݛZQQ!kkkoܸ]}}}..hܸq"H3:vOyxx(?C.%bd2+O^ݻS5(:t+WTuFFF/^/!HKرʖѯzoLׇ)ΟW4H$M+V5jV=5{^^^cƌӧOTufcƌ5Б7!'&ւɐaS4U?A,T}c5jThh\.Ɔܞ mmI33-^@K } uD/H$4VUW:t6:~Ϊ*7)JSU$CjUI_011qrrrttܪZ9ypڅ["ZXGxt6- "'Cjrk֬:ui7[=Yek w4.hֆ%JKJKai;oKTV=uvq744988xxx\)~eړ&M4iRMMͯ+j}tuu?^PP;]`UUU@@Qtttbbbxxx߾}U[RRRiFz 0`B.vS@;p.bUa!R+[ΝS (coo/ `?9{}꺻k瓅CF rB#87V23n&n݂5kXUd:&6 JmY=RIEr4-s y'5P]RzzzbR!16Ozeb\.UeR)lt R)&NmHܐryBج%Z+թjݛӴ ln0#F ,LYyvb|%rsPrr1/V7D0T$޽{w>SԨPVVi& jiT ˜1HMuLlHKøq7pTߥX~̘1(K҇wn_GϮQa{v>>/`Ɩk1{6>Ct4cj/ptT;i׿0aQ'ahhHw8G8}׮5~St׮mC;?^ECOOO6^BM7l9J 6K@3i?NvQ|f1t{ c`dk~™3ػU[_i__|(6NQPp増GȑK|ed\]y3bcdd'8|ZJ;^};v`?lGn.#{DD`Zlgލ]`bHP9h-ÂR6nooDDF֊Yޜ̄/VR>r']{}++,X6C`x<|`9s"0nn?^CU+˗agұ -BT""ټy4[Μ93`'[qAޞE555]k-1^^pvƱcx%eDo7@_n0ٳHgX*Q^oo 6ꫯmvNî3gO۟2~<㑝1cɈsdgcD; L!, S";|T"/ gXlYmmj=Ώ빝GG\ KK!+efFJ ^{ aaع11l/UR܉G1z4j{XGgo߾>>>[nܸn3dذz ;w9dFGH1p `a36\74ý{05…ZHݻXQQ?u'Oִ_H[o}ٻϔ9K_~U]2ΝïiCW02/嗡=OP_ee(-Ey9 ӧcLxx؁ѯ_hNyzzjkk>}| W0jk/`bޞ aZ\&(Y>dtt?::̚5LP[[gOfF"N8!222 155ݾ};wǧ7 wf).frs\}ߒH@Ғe|}܎ \r|@O.#$$.(m,]1LZOMeSSFOYggϞ%%%|9[EGGsݓo#KKك,_(8;kֶ󘵵Gap),_ 6/Hzڷoyb}zLw:&%!!Bn.baP88nGn@f&22˗!``/X#Fho>㐐MK :/?ݻ~J;KA\p:PQnh^xZSǏj_z vv6 & v IDATff\ݻgiiM[t>˜9s[CiݻFY*+QSx߫zB06m  gϟ+W=V۷oݺuͶf8AQF%&&o )..6ݥ#0rȱcn۶N;;@ZV\\ yPډp̙3|׮]|efߩ^|yPPPEۃ J;%K0 sҜD")**e*J;###__m۶x)ڒBahn'M~~~w܉{ j P a3:ۣ۷o+Bi'…dTPP`nnu/v"8ÇT >Ӈ~ꙟ yPډ0=F7n`}癧Qډ-]tϞ=Až2J;!\YbEUUw,vBbbb;l۶YYY_"Mi'pƍs;Cry;(DȆ 6ydߴi<(DO:s:A򲱱ٹs'_H$666NM$KKKye25ݻ+{ZZի׻ᄏk׮~UGGG--M$NVZkTEi'fڲeW^uvvLwvB?%%ҥK4''NFjM4]]]GGGtGi'ч~Ҭbfh޼y߽{z|Q4F:::+V @w2,%%U})P QZtiCCfqFuu5~gѢE۷o\ԫW/''';jBi'D^^^TT%%%1BGG뎚P Qccc3m4 5~mPPP]]μn,?qD"(4vCBBJ;C:H$ŋ: ѣGJ-V/++c人:tF&Mi{ee%[\plQ Q:ujXXXid0~xV&vB̚5o1\K~NHqƧYI{RRReegVvBZnݺu5YIs,,,4SRJ;!-۸q%Kj?kkk(턴L$Ν;W[[N^YYy)S16*--'JҎ?rOHHdSNeexmEi'YF%JJJ:xGGGVV_"i5K79K~{ذaܹs]aaa)ppppwwSNXj񜝮 yQ]%ꭡ"vBNPP  J;!BAi' Ə4NN&t/5_bb"Ch  i?ɹbdG={;w덌gΜ9rȦsxՓy͟P aǦMT.--+ SD6l{ Bll_|,tNPP  J;!BAi'D(("vBNPP  zOt)))|Szޓ'݄H+Q,ݔvB  J;!BAi'D((IENDB`objgraph-1.8.0/docs/chain.txt0000664000175000017500000000157212201125630015116 0ustar mgmg00000000000000Graph searches -------------- The other day I was wondering why pickling a particular object errored out with an error deep in one of the subobjects. >>> class MyUnpicklableObject(object): ... def __getstate__(self): ... raise NotImplementedError ... >>> my_object = dict(foo=dict(unrelated='things'), ... bar=[dict(nesting='fun'), ... dict(boobytrap=MyUnpicklableObject())]) >>> import objgraph >>> objgraph.show_chain( ... objgraph.find_ref_chain( ... my_object, ... lambda x: isinstance(x, MyUnpicklableObject)), ... backrefs=False, ... filename='forward-chain.png') Graph written to ...dot (4 nodes) Image generated as forward-chain.png .. figure:: chain.png :alt: [chain of references from my_object to a MyUnpicklableObject instance] objgraph-1.8.0/docs/forward-chain.png0000644000175000017500000003164312277007131016535 0ustar mgmg00000000000000PNG  IHDR%bKGD IDATxy\w?w  W (bAAxT.UK]ֺ|uQڭ֫

QDX@AENc$"dy=|;! m@ 8b !_^ɓ.#A]&.A˰ɬbbb`abbbm"A p"$ w@ B@`A BΦ21!ss2 R)^MdbBO\7|fMfhEEԯqw رZΜ3gY "4+(/:vd~]YcԔ6lB)$HnW# <'"Zz"k7"u(*).NGv6_-)Qpps@@Dt_-;9oC.rmm"4 ">RRh4eǍ#"66mO.\PQkk"{Y@1oݻԻ7wP[7e8JJh$"CC{G #"9 p"4"4++JL jՊ,-)*mS_"ÇiJrs###jՊڂ:ڷ'D‰lh߾ZT+׳(33g48D@ 8D@ 8DPU7<<Ą S'3UD14=PG']KN aW-"ң}-]BTYIǎQ͜≘ZA˗_;hEݻӅ \0BWױ#>Ds+oFdn7JJSRB'6XADTP@}D&&FRZ<=Ԕ$j׎F'^uÛFD111_eAT. ? 2<ʔ:2/?\I\R111D8ݺEsHD_~ jhn_۩CڻRSOJO%TQAf} Բq#߉I&"yѠ+Nd m[ uҸaZ Rc^Ct/_>yR w!b afd~Ta8jKNS<.me^NDCQ$?xy';Tݖ2ƍ4v,9BGp-CЖ-dc45Û ̠S?i3H&ZkZa=}}maSN%$ЊNfftM4 #DP$ҴiOLCjkIOkՕRSuڵ%"Ϗёo #DPeJcJitZczVf'kCںrsI**s6lඣ_?ڶH&gϸp8C蝘 $RJ?ț8`_rTԻɓULTv?H'NШQ;$[o+MF))\Qr2} 98XLZ'f1u`"M'*[y@8 PE^^ #D@ 8D@ 8D@\IDnݺ ]VxeN "7oeXXX{NDB8D@ 8D@ 8D@ 8D@ 8D@ 8D@ 8D""H$ ]."A puJKK'Mdfffjj?4n8;;;Dbeep1{!ʦLbee%5]=d"at]xx8ƲGT?jggw5KKK"{E$wpPFuSRR.\|rC>|X*>zh͚5 ,]Ta W^=ydUU^ F <ѣG؇92tPgg7oɓ'W^}ҥBT122doK8tСC5B:~Qvv6Č3W/ZFx3aZhaOQYY0Luuu=5\uΞ=NLL$""$˗wȈ)PD:}ŋkjjRRR>3" $"kkk"o>}ZYY?ak7 s޽ ϟODQQQDmeeell}дum6i$ VZ'&&'!.ZhYَ-ڲe݀n.tF"A p"A p"A p"{ wikkk{{{*݆ Ăl2qDƏr8DϭDTU`"u!!!bq={lbqhh(@aDFFJҺR422R6A(ϟ?WhoݺuaaD"*q!0 O"m"&""F&""Bz mӦ 666=4y ==cdرHC@Hcƌᷚkjjƌ#l= sppaodee ]4A`D"CF ۷o;;;7.tQ 4H[B?.t ND666–q}"z_O0`5D"[[[a8uԢE@iFp@ 8D@f׷o߾}6t@{ A{!:Ap"hZRR%#DFiV0;Nd;w<~ͻuo,o5ct BZbEEE >t "2eʰanܸk."JJJKhdiiѣ+W<}G@G!AH蔔w .0M8 BѣǮ]~iӦ 0$%%eŊB: #D;=z(,,ҥKC"aZL 3g}v'O֖={ٳgRUtڵk׮)4<}С/GY!AH?s|||ZZړ'O$Izh||ݻwlllƏobb"#G^:11Q,GDDDFFwϟ744 OE")ix ᕝD@ 8D@ 8D@ 8D@ 8D@ 8D@ 8D@ 8D@ 8D#bF@lڴi2c"eϜ9sĉB: u떋`aܽ{wHT!H4A AǏׯۮ7~x@d<|w߭Uhk۶ UѮ]>}׷o_!7nMf̳glmmkjjDc ]"" ??x`!B;v,\vر: ++/^QQQEdll"bqhh(@=Z*JѣG ] :֯_/t $J(//OgΜ!e˖)% !By&!!!J_|߳gOccc)4 ٳgDԡCE%m յPA B`W[mh^ ײ@fBD{͕d{UҿGlԊ Lv~}UVD.ɚv]8 իEEEk֬a[\\\>}PwڵNNNiii۶m[pF,>R___?6lX۶mb G,,,5R>(̺D"6L2%Ie!p"A p"A p̠ZAAAzzzzzz^^0j1.s -T[j/ظuWY>hqٳ.@\䷑ϭ|ʕK.=|uFFFOYxq||7wmXܻwڵΝzjAAT*mժU:uW-0LLLիWČiӦ111nbo>|2!!DT]]}iss޽{ў={RSS'޸qƍ؄ ͭzU @GGGD{:ujС|9s昛=z4))i׮]-l ^v ٪U{?^Z$Bx"EDD;D.sĈDTUUc)eee%$$VVV:;;'~iaB'u֑ܤz vfg^6mSu[ٻFڱcǝ;wܹöt%<<Ĥ9_  ں )nma9::.X '''/////M={? 74D$1 0 {,ekk7k,[[&\#=}tŊM|xSa"hHs+{yyѦM._\RRR[[+J /^vƭr ʛ7o6I 0BOJ';Çϟ?$QvvvvvBc=jC J$ϟ\\\RRRݻW^^gii7nEӦMtҟY\\,mllzDdYa^fy@ 8D@ 8D@ 8_f&ڴiKIeڍN ""...B#D^xx85%8D@ 8D@ 8D@ 8D@ 8D@ 8D@ 8D""H$U@˅@x57@ A딖N44444''z+WQU:uJ$m۶RsUUH$:y$,#RVV6e+++X̶'%%7N"XYY;vL~j@haaaaaa ðAAAvvvEEE üx_~u_]]N!oVz?Q%˷D{嗯$$"O!;v옒RUUu"7o0˖-#" tDb u:\ÇƦŋvў={PU'OۇzbTѣ5kNIIDB =zM(ggga܈hǎKDtP a<==hٲe]vx\[[+m?tB'۴ioD@)bEEPyy9FFFDďXD[oA*ٻw/YYYVVV͛7byy|;:GGJJA^z>Pw>}zFFFee%0P54 "hgݧ֥K":t|:TD"… hժUN?\"_mm:%33/_ޥKvJ4J!*&sNRRR/\H/T-+++++۱c|PEI`d2ggg,0666D{nȵ^ŽhѢmV:%f Ax (-ڍo/u*W؇,YPĉU-RqD۶m5^4rzzЅnyѧ~*R{xxh"J"z뭷.tˁZpX2p"A ppYiii//^̟ _UU+lH$ӧ;wܪUwzcLjG__?--MO>f,//߾}狋ͽ#""<<'Oӻz "ڳgϽ{u޽={DDD| ﰒUv%oȿK~j Q/_իW>}HOOҥKGܺu?ۇ beeJiț1cFvvv3fxERR|9sݛթSӧ;Eуoڵk׮]~z.\0̒%KK"Z|9ݩڽ{K46H4gmvĈsέ`/8vܹz9|DD{ァTkW C ٳz۷H$cbb/^>ەfffSN裏Q ɓ߸qC'Ovvv ۲e9[̣GR֮ Aa0RRRvZ]]geff >m2dennW<{_~!">֭sT*Xnիؑڵk;VZZ*Jo߾tR> ,x9s! 6lݺu{ٺuԩS}- /_R^^.J޽B}||EJ4y@! 255x6tGLL… GqZvx{n,9L/gȷn߾.**4#]7nmE;D2Ύkِ1cƈD)S9200044u˦؇o ".Ѵk_`.] /]PabbbϟkJ|lwwwÇv\vvv suuvڕ?~\[^^c޽Zʕ+͛7eXo߾#͛76{u{݃Ȭ'Noȑ }ڷo?bO3][0 H0BLUUUXXXXXXUUnΝ511,))9z D4~x#####>};NڥKX4e"ӧ|)/s+Wd(%ϟQXXA^f͚::twhР76p\ܹi8η`a/pqkzH$SçyC V555577Wb^{ao(9-QdBc|2B˅@jޝ$t d@ 8D̘jLFB~%!!!DWWҥH$jӦȑ#woQaakvk4w &#i5a/*888**/(Z#Wiɒ%FFF|K۶m۶m_޹s*ei.06dbfifĉDo6lظq&Nx…z8IIIIIIk֬ç~jddt͍7ttt4i~:w&)CcGUU`2ba27AbqBBBlllYYYYYYlllBBX,4hPhڴi۷owVǎhշo^lPe5ԴO>...ug`a20q#&#!!!Sܙĵlkխ[7":u|Sه/wvH$駟퓒SuXWII/\eu^/ʧR D޽{/{fLF\&#~Ɉ%Itt_|&jU٤Z%k@a~!"Zn]n޾3ݻ7**j޼y6m""GGO>䯛rE;zp7KU&]|9!!!99Y^yLFd]v-++[n5ӫWiӦ_^A&UkellL\}Vػ6l={vdd$) 5kְG+//5jԷ~7>x~«ΊwPTGcq֭f/edd9s&11Q~~2b"R>qΝ^nI&#f'd'#۷oChݺu/իW?.? w23g,,,TRX\\\PPЌ3Zn664|t7oٲeJh֮֩]&&&D*]7ӧO3 @$ڞ9s&99 ׷S^~^\+zJwDMQKc2byڵkGu)dY촶l*UTTnĤo455%"Pk֬Yf ;MӧO禭g#FuƍMI&snڴImy&Lpwwvrrrrrz*Dgϲr2:UVV;-(Ɉ  >$sĉڵ---'L0n86ԬG%CCú US:*111::zk׮y󦁁A~+%Od,LF܈ɈٿiӦۗN:\_Vw梎?.JMLLLLLRݻw穨Dff&-XI"H$gggvT!uV:WOfÇb2FԦ ۷uׯ_߿֖ZEo޼9**jܸqƍ7o̟?`bb2sLHealϚ5Gyy:(9ڴiҥK2QUU?U"yj~*;w vUUa2Wt`2⚚*88Ϗ=Ä})UeV:}=y$44=Y";;;..NԩSnݺJLL ܹiV\ߞ3f9r{?ؽ{7wOԩDUSˌɈ\ ͡ˌɈ\ C`2bB'#nehc &#z-t2Z6h6"&#~-t2Z6hC<"A p"<htqיzw*. ;@ 89=V>IENDB`objgraph-1.8.0/docs/roots.png0000644000175000017500000034040012277007131015151 0ustar mgmg00000000000000PNG  IHDRM,EsbKGD IDATxy\}'߫W^]]%P#v-c7=';əxb'xxK<` EȠ mV/<[-VKԹի[{wj*DDDDDDDDDDDDDDDDDDDDDDD̲ """""""""""""""""""""KDDDDDDDDDDDDDDDDDDDDDD8P'"""""""""""""""""""""a]]^~2ۻu֥m۶?~|{q tyѪR2iRwa뮻{챥R2Ŵ0]`eGu]Kv뮻z裏.N#&ԉhq0NDDDDDDDDDDDDDDDDDDDDDD u""""""""""""""""""""""ZL`BDDDDDDDDDDDDDDDDDDDDDD8P'"""""""""""Z4M4mΫuþ|r5v)W\!< /хa`]gz6ݴ WG{ߓ'k]-!P'"""""""""""Tg9{zFzC^yE IW믗DB> """""""a 5ԉ=m]nU~#_>]8lB=P'"""""""""""ZVNwS^ tvM{mj(K_WnVO_ͼͽ΂&"pN!""""""":k6!8:1=-o~ vߖ/~Ox-O?-O?KHrKg&"U]6!h:7#òr< {7_<|oԔ k"lkg %nf}M>3VDDDDDDDD&D &ԉEDU妛_oDD5QvfKFG嗥P8/'"""""""M.L-'NMoyw|%R)կdF䡇c̓&D &ԉxr뭯7DDDDDDDD e u"""""""""""c _3"i""T)hDDDDDDDDg&D &ԉ]D#瞓RI}Vx`y)׿w[amO~"bH/)~Hq؄袡UեeDӴG}>;OOƍ2o?=Y-j՜,GX9d+ժ뺹"bXќ&4M4sZV*ŢƮVn[V+tpPVFՊ32UeqM MrYm,J]( /:f6P E"alf9 Y8N< ͦ50R,m6[TVaH\.('ǵ" |0NDDDDDDDDD$bZjj*Xq5}RSzwTJjM&]3Ʉ)(uwM15kjŬJ 뺎-u]p9].5MSniXʗc77 <%5M-NrB!p8nۼC 0`ټ^yϧx^oX{\.T`r fX,JBp8r^t:PffFJ%K$5bX/gp8Ƣg[V0,fSsAmՊnĪixrOP0 viMwӉ@ 뺦i`PDv)Jp>j\.[VFR1 #cJ8zzNnr oP.fg}|yqyqy9VeփVZ~=Ya""""""akmC%ک= a Ysa4 r5*c֌O#a"0rȸnw8rT*aT*lr a\B"d5M_~q?x<pJ%b)n\.;NT*;‚y(*5Hys>|sʉtƍwa ,qf{"Z!DDDDDDDDD8qjsĶy|wsl5qkߋbXsZu]yQa\L躎8/7ɩ9nΩT*90TWZSÜV9`Z>O]Ion:" UtXU&gj_}Ֆa<>6x\Prqkjj‡YN_HXDo0t4Mf(j^?YVճIcmwS.tj7NM7,z^Qo=esb) d t:d2X,6k@ p8~?rUlT*!dt2L&B!H4 BP(F-5'?i͚v8JDDDDDDKM_*aD}9K, Fo&}3kjLEDa8KiiiuEߟ^oPp:B 8CV'cJSó?m \.á:NwݕJvUV%ǀFlgg'N/xh󨎂T*'DD '?rVtI333=====ƱcǦk"R+-5ڵr]r]rէLg@9cJDDDDDD,r\.aD"Q.F/1x<^.qw68d2M5p`j~ ڄaÁ1 ,gƾBPPp\XW ir$u]O&~&R28^uf!z8%CyLcHDl6aXNDŢjUa|2ϣПyjm`:Z&oDz\Jw53Ϛ8":[,a0lhhhlllllD"MMMowMY}SrX!_l""S>'~\kvd3+DDDDDDDDt٩p,ua3ڸX9;6p`n6[V27j"P6TAT*vX\x搴9Zvo :I8%Gy'2 jL=6>VS)BR܈cONMi *JCCn/>RTU\횦8J4X,\:Iujf}yq&HF6rhy>G#b1՘? S`& |>_kk+w8Bv#x p:lfavUUm=LR)ӎ8AO$1@҂)T*XP(X,/!Ս % JGB!ew8 ywjf!TiMP>p80Hcfk(nBMMMpq444,vf~cGo|m&r|'O;lX!„:]*ǩGUX[ T*D"82.8jTsrnjEmJXTui.$bA,BJ%ϫK򘩊rjIVS;5mtR/UT}qkxB໣,oo Ys/51vg6RzTiN]Շv|><0eL:6-躎>WX, e^OgVU4fl3O*~#`Bxe.@53R*5<.ڪ6-Xp8l92~{J(¯Uqs{U,h,b###1Tsbfkjj BPk ihh0p3=}_b,7Ig.]qyAf??IGMN?,K_GÇ%pXnE[/&"""""d A#(ʄƬ53?].nBt@ rnJg2 zl6dFFFsB!ɨnQ<`,`0p8 zTªw"bZ,:fjX,U>R) D_8֚--JJR6@ηF7ijZ8w\'P(֟`% Ə6Ԓonnnlllmmmmm í---8֋d2#G9rݻw|ؘͧȵ׾aM""wc/qfš2@DDDDDDDD˝Jl#_"*b*ҭ<ʂJR*2 6uQN=FnnlĠ<` 5EEepٜ&iPb텔^6]TAZ %%26kb5秢҈ScxXwXDbtrJU8wX8뺎v>=W>2Ì#f?>Wf8rc^&e9q~_h( 9"n~F{ϧ&&&&&&ОjUE̍p8\eM}-l}"s֯CE6%9gOjUUy{߫i:ٵK{ӟc?/{_?#}Hnnx{Ѳ92X t:L&FyuUzFrxP+v:`P5bHぐFaB(nS/C:Ut3@'C 5^ɔ՘k =IiCyX 1333:::99933>ԃ0Oͼ%躎!Lp8Ը:f!>555>>>22bT' hnnD"pYYDrɓ+rӇDbtuu^ĉ7nW^.?/|A>!7lw^F}k%x\vѺ&"""""(9^q8R) P䕽^oooGa2ukҘ3Hg2x^VŢ9\nN/Wkp8%W`ނ`0>X,666699F'&&Plbb1twv=755FbHlpYx|r /)ʇ?,pt<gQrC9Vny-Pd2ȵ#G2LQi;WUg}FPv{<F;B`4mX0P)l6.{*B0g_x\%,*q:pw5t."x\CC@pM(Rƽp4Tt `D:;;;::ZZZConn62zG8pСCF IDATBqtL8&W^yի:ԂIFeh ?aַU[6YjY :- &ԉh)W‘""<2r\.W(*"bL, /%nX0^/Gi}>ہ@ʄ/eUܜeib1D7~cTB)hQy#RjUXjjZ岮bfr9՚d!z"G&JP8~1MOG0TӪZ%\.f*{-"@Ph4:99h"ѭXf&zkNk``g5o7Ydd 8=f~&O-"6`ܱ\8\[pǧ }{[&_pw82P\O̺4<%"1\7.Lʝc2p804ʫR)?GFFE7YnEd`vyM8 $P'""""""ר *-:33(XP(J%$Q:EDPT*x\. J^TJ6"i*9Ml6:Áй w\( ,{^ܤ9_LJX,fި"l4z A: 7" JT*^[,ł p~du篞_%'DA%+D8s|Q1ZbqX,VD>Pט%62GuPSvkJ{^Wws֙P4Jcrc.@Ռohh@<4449m}P( "<'FGG1p8{zz;::T$]k'^~_~y߾}?vXT4gڵ֭[fͺu뮺*Y[hB_*w)?AMg,_,&iI,I6DDDDDDDt T*әL&OOO#j$hP@5ߙJfs\Rd2Js4 @dD4MCUMv;ꅻ\.M4MCe_rPEEe4M B6 K )Z0"2tC;#.jd2iΝ6yM}U|V\H$ڵkq8WrL9~jŢiq1mǎ3 UWOGW@$ʫ3D~fӧLM[jqvY{{jYLk T*8EQUի@?b؎;vܹcǎ{f+V_֭[W\yx.3I*_N^xA퓫^Zel""r/ynjDd*|;HDDDDDK5Tl5RLyGG|Zm޼ܼys[[?mK~&Ȼuf ebB\Cl6>{~|3H$"!ZLr}rH2)?ȂC.צo* ^nŇ 64455544 alFFF7&ɚ" \Ljiy*Bk|llW^A{hhhll l2ʇմD" MMM---ݑH.d>;v)h ^k}׻ݍ$zssܻw޽{I?qDZx<֭klذaÆ )n]zHnI CzJ> [nwsisZDOa9yR.s蒦n?-;a`Ye:̪i̺=!A^*Td|PV#^*2a3,!]czyi?Awgy?cg>7ٯŢs/r!""""72?ןh%8jBuCuFz0la:0 ֙꬏""V525>o|$"(|^3Q" zD:::V\:Kjd2W^y`(vY 8ro~󛽧7^s5ׯ߸qcooe)ji/omۤ}}~P܏3Wc=v=T{~<XCS:.JB!͢®X,3`OuE;  2T%Qe%Ɖ.B(}^5].?Z[[-K\uU, ~(g:/%?J/YenUz{eβûw˷%O>)CCpȚ5G?zG[ ]~c)"]'R/yODDDDtSSSs~lllkfq~W+766z^M0o^lhhh߾}9 JىuFV,yT*Jd2ommmkk+V^=C>|ïʑ#G0-r@;V\y*}_|q޽/r&u}}}}gа==OL]b ^xپD42 ͍HiL5Ol $ ;W5qɝNnu] jUӴ)DB03_|7W 4Hgِ/ǒMMMhil^JN"?~|ttѨlH$pK~/Nx|Hݻ7MoB5k֜gu5IDνi.rXqb211\T*vv8MMMX+a~?T*X RsRz @CC(9]1W,r6E\Xpkkk]jU+Jǎ;tБ#G>`:g\.וW^z+rժUH-uij>׿~ɤn_~^׷q 6\Ki6P'-KW%O=%kt)c"""""%(k\܍ 錮먘kG_~u{4X,j+JT*J(;C~TE^oZk*|>ݸ<׷.2Qkb|baLhYV嚦!^T2LRf㪪d B4L!;/Ij_~@ ޮ^fmVlwccr"`qascll x<֎vvtt.W2188SO!~j׷y|pnCɾ}s#&NDDDDG6Fccc%Eщҩ(]w]SSV UUy4`Ϟ=hLCGPhtH3V/L$& jZ34yoo/jK(2g~yVZUDIr0000>>z&1"bAp8DWXDMR9y99i>==mnjuSSʕ+hnnF)tu쪞%144`$ B_}WW>oiOgZ1ojjjiiimmD"===~kZ,0 t~ݻwOOO [ֆ=EsT*Xm5ex<~Сx<^T̽u= P(H䪫B[~?Ț_rBarrRUǛ:뙙Li(azu]Bͭh477, zd2۷/2FǕW^yWzk֬A{YDݻwܹs{)HnG?z 7p @` |?7;va]Ðim~P> 'ZƘP'""""*L"PnF**tT*2E\fY9>^(٬ڹJǬįQWm .]mV0 ZT*v=h2䚦R)dʳlTJRXXuJ@irχ.E"z);k9zh*d2*X?7ɠ9~N3[*jf̳|bAs~")zn BiWqVe0 '&& ݪ%Srqkv} [hhrddP(bAumݺZ֜<۟y晁u{{7o޼y3S$2=-vIK;$ %"""V,(B= a*CrZ[[[ZZ`{{ʕ+Par9Cر& Pu[ZZ0܇|>ܪc!TGo_bU.'&&Ruۄ1Rp.d#HGGkD"H ).Bp!s$}``@DZ[[7A{{ի{zz{0ߏHΝ;O8aZ7nܸy7xcggRݻ_#/;GD 8BSSST*J%l6_3ġ6ifp8bXT466z^χ2g5V`;/%T*\5KlP(ׇ6MKt.jFN8yZIvwww_qvw:;;PT*?Hx뮻Ǡs y."?,2DDDD$<\ cMpcc#*eb'NPǴl;]5MT*(UyR1 TZ= jFnU<WQ,ةXaRP(g0*yhkkT r={2W """""QDFX,8rH#k :r?~b\j EI^9WX,ߏV+ n<d 2YƬGWQ =OKK\!Y˜/IDpbX,6>>H$d,C577ca5{!_K5q 9}n:;;5D"6mRs4.*eRidd'OTyAu \s5wtt444,ur;wܶmێ;ݛfWXۿ7ߏ?=C 7ɓ755544444D"Ʀf@ 80Qmrrrll|vXyʕ7tSkkk8------MMMF&؂wD$ \뮻;Pcr(OfX ;wKa\{7o~7oֶKE_y(7{#6\nC1􁁁Ǐi4tvłٺD>EZ:"MMMp84dT* a\5@]Uj@kT*L&3333::zĉW_}D|ڵ51%}Z&o~c妦M6韮_~ժU^b3l۶m۶m/R\ݺuDj۶m_җ~G"??{Rw._v풽{O'Kwbx"@4ʑȎ#Hb#Dp9#rbȔ#MS~OT*MNN8jcgl&1̊ꆚ,,0\>Y(ZTr}s xp1Ťԥ7LOe4ccc*>66""z@߸q#譭lnmm$lĉǏ01x<===[lH$L_W>|Zmݺ//o%/>W.|_ne_ʦML]J28;v cb/JbWULӄ`0ب0j*Wd]DBall 5("0666>>RD"H[niiiikkZad2i,cǎaTqXꫯ{zz0X.~)hTӴ5klڴ{ݴiW_5/I/x≧zjzzy˖-{[5k,uA>~xϞ=7x#OQ L&t&IӪdb6!\.~xi陙G8pرcx<Ś2i1 ---H*777bONFFFFFFP}xxxxxt֟lmmD"WnkkkiiiooollT*j]v?~4M[bF{{]r?ݻQ%رcj5HMQ>߾}/~_|vۧ>-k׮d +Gy3ѣGno}%h1ICoŊjT ѥ0 .!kn>+gL&H$̧zLS_nl6 KHT*R"Fl6JR)U7!۷ڵrRwu__zhiEkpggU֬YrH$.0AG< DQ\M&pwvvvmmmm---\. =zѣmNĮ]o߾k׮={JF/HT_|q۶m?O}YMӶl֭}}})\;ߍ=я~tW/u"rmUW-uWbB lqDP B6M&Bi:~ p:HK[`0Z@ ̓85 ʜVZ㈒p9yt:]P(tCW8CR檭R<ߨ\.rh,9l&J#+TrBPV*'IUhjjd9\Eu)x<>22ؘ4Ads[[ʕ+o涶6,ڊ\ѣG0~+;Yf;vعs'R`ܺu5\$/}_L&l>>he;wR4 B4 F;;;???*JPM(<6tBݻx[tH-,,P[1c0LF F)**Bg===֭[gHv/ W\ køc,3,"HZZZ Zikk3{{{jӓJXÇ=bO, "Q(655\R(JPNNNfSSSQQ˭r|>_Z[[3 F4iRHHHppp@@t'W2 :^VVP( YRTǏ?uTsssTTK/3ό9dV<%Ps}lٲe...DB,%c,g% @t `uuutuuuuu)J\:;;JB===hT*;::HCpWWW;;;'''''';;ҷSLk~I}www9FہsyZQbWWL&/*vB^UpuuEcr ꂣ#z7)GRiCG^:;;9>ֿ)PwEzmT* Z5B@???hZ[[5ڊa+:at;;;fFR]z~\.驩遁D/:::>lZbŊe˖=p h__߁j6=~_~Z b׮a[oa|fT*JQ輩 *lnnnjjjnn6>@ ya,G/>{Z*/ƶZ-mKK uggg777FbfggyJӇT(z8u?[PP: |ijj۷oWWWWVVt:"p Tׯ_t)//HDGG7n̘1III4B8q/rEV2cƌӧB&eee޽w]h1ߵk#PxƍaÆ<彘Z]^^ӯGY@H 4yWWB@}jr9dR)ɔJeOO(v7;88.%ɉD" i4q!^@"z̑ BFӞH${КFitc$JQst{{{///x{{{ AJR 444D"H$Hhh՜h4JE[ BPEF?%F7N?0BV{W: ]cP*{ݱcBXdիʹ9/K/ڙ#^UVn۶mܹuuaヒ]a~Jt5* SW‚L& {zziZh. <<+{=L=$0M5yH$h]\*;[ZZ&xzzz{{}}}C(ü\. "A[[-JGi4Lhp:577s\tzyyyAt`PQ*999999:nذaIII)))ooѱdɒk]ԓ3̈́:ֶyc~QQQDWd&n´Z,> W4T*MMMRY"bt ޟoKapO?:J755D"J---(܌z ...~~~LF|||ck72EP4. 7 <"Z}SSSr Ɠx&~ٙx*====))iȑ/vܩVWX|AA͔HIIIfffqqҥKnBtE&o|0''L"`(8acc#ʠ766Gқ+;88dtxJz{{Il0PZ#wE"WTiPPPpp0D*..uVIIɭ[\NsvvvOxxu>SCL&D{nCC:tO@@ʣijkk#鍍1(& ^ySΝ;WVVfkk1iҤ#X,>zCtٳΝAt]D߿ӦMmmmK,yww`Xbŗ_~y}w&nݫV|r4 $`J%q^= ou4GB4F!B4vsssrrBcwww?vc0=t57Nߟ;Ƿp| 6NS+-TJ6]WWWUUfE"ZF4,+22200 l.0W\y`*}ԨQsk|vz7WZ58,L&۴iSvvvRRҞ={矏"4uww=z4;;,..nɒ%gvb+PUVV\277wΜ9۶ml:aaߞ}فS'Hbcc322>>$^-CGGT*#h Js筭x <=====}||xxx94n`T*L9ʝ?p_D "$8Yn57ΠW}h4ޜd2E1a(gCˆV< l+FRߟF@t8pttDgZrw 3J#n̼yҥKloOǾ+(V&O&<`H$(.D"H$ !::`hmm닢d2FHz-eeeըkSxxxDD  xW޸qCPѣG'%%3&!!ֶʔJ%A-aaax=44?α"͛mmmVVV#GDt++>_:uԯz96mڴSXUVVٳg^xq||<^___UUU\rWWa...\xx8i{@/@IYY`tD߿>H$-Zz?EKcf0:fKK;v̝;l'1Lii)`?(Xlkk3 4F达dCCCYYݽ{W;;;GEEEEEt/^xbaaZB1cGCJ[[0fs8>뭬""""""!POOD$SQQjd2NLL6lPkMM\/N0a¬YOmp;v8{,N_h믿>f+No߾ 6 [}ʕ+‚b%%%I]@z}nnO8RP0_$?0??رk׮}giz+--]paEE[o}}k6wm."""^|={]۷1 ! j(G=εZ-888JJ MA[[[SSSsssSS>H$(.Hr9~eGGG2닲x]tvv&s4V(ƿwhZG ٯjQAƳPσ-t:x?d2:CѠ6T*۷0:Z-bTȑ#Ͽeeeի#""h oB)--̼~ٳ?Sa:;dK̏T*5ΠA_᭭L& @0/󋊊nܸQRRT*bccccccbb=T*/^x;;I&r7OWVVVVVWVVhZ蘘*WTTTX[[9rر]:`l6nhh>|ܹs_~!Ο?aÆ7nL4i)))DWD5k|'Nܻwo``pə3gnݺw{7#GyW+dž zz?.$mmm2 wphDLL&klldbh~~~(kǀd2Yssskk+lBKKKKKK$:Ҋsrr:CZD|>x<4hhh J]o :#(.^ ᳟?. 5 сd999C6>}?,))yׯ_OӉh{B0pС5kt>`CٳglX쭷0__$H\nmmmmmmMMMmmm}}=:jiiIPP L&F&Λ7otDB"G8bĈy̙ǏJ2,,lĉ<{nqqqIIIqqqiii{{;a Ѵ>銊rrrrss_jcbb&L0a„xG믋T9s^yEt]&'??/((4i֭[0[oj_|EBj(//OII>}?ӖԩSkkkʆԙ>&cb#Gb D2AB8:W!ƫ3J@4;ԢQ< N V*_LJL&ۛ#BtvvJR:x 7^._6!sOO!Ft@b^a=ZTu3P(+Ukk+ʠ/>h Db2t:`njt:J~8FEyt&bP=88x _~kfΜy!7 H#7nΎUP3v2v*6xziooGt<^[[IHА4Et)weW^Etc0BCCQ*=.. n駟rsszL>f=&>_\\e2UxxaÆ KA==='OhqмE*5 +$ ν :=^^^>.S|qCb|ެt:jElܙB@h4ڢݽ{0ggg7 N蚬ʊ 6)==="""X,VTT, LSww/_|7nTqƥd hnZn]NNNzz!h4 u,33={] =3t:5lH b̙X,}۷lvuuuMM j3dmmd2CAt:nR`9{<<F?RM%T$ D"D"DhԄw/vtthd2mT*Bl! ePx.-4`ɉeju}}]#<O F6664͸-1d2anizWwLaCDDDQThm+**Q*`08::FEEFEEEFFFFFIA`juQQQ^^^^^^QQJbX(>dz\|pر>(99芈4 C]VlذaVpa'DW]o)))/ /@TooS__"酅z>,,l#GLHH6DJĉ5 ƍ1cƴi( ѥ ijYYY555>ŋ'O n|7.]_LSSk._?$6~W\>|8eB^^^'ԄIDvOgrttD$s2u7bz\]]]x Ν;h t:NƓL&\.r"HV[XXއSjnn~:ͮ*))h4VVVaaa , ӧ銋/]tҥǧ7nȦґw[ttΝ;Ӊx/oܸ/ݳgϨQh<,&# Cmm7o߾]UU%H0 svvDM_{{sK.566?~ܸq}rTV_uaaaPPмy^}UA\t鯿ŎÇOJJ=zѣM'ܯ={Yyؑ#Xe% `PillAa^{`1JRݍ`OOOS`H$@$ B>Ѐr~vvv~~~T*E :fPsX,HRq]VWvrr(.z{{C|>ʀVUU캺:944e@Y,Vdd$A}mY,V$:B!HD^.))#b0OOxR!!!0Z}ʕ[n 6,===))iԨQDH۷gggPnfl&ԑk׮͞=O> ۰sp&LF CX,y7ж*22266ϣ3 +w<ԩSNr劅EjjjFFƸq⬬^ZZZYf-X %%,I$\^$yzz%''3&..ښF*~ #G|WquSյsݻwE&>[pǎ[hϷ~;WHd-_.\Bl=MMM"3h"""Ə]`$ao D hX,nmm۟p...(#2L( =hЀGKd?Jhd2mT*mLlT*bX,J RI"]LJB9DB{!ط8NuuuMM " 0;;{tEohh@af˜)\^VVVRRR\.W.[ZZ0#z /B0q!+ݘJڽ{m,,,yLAjlp'1 3 ǎ[rBظqcfffc?;wc0׉.`h Q*](bd26l#e>>ر_~ƍSLy'Oڷwѱk׮,kk 4ob0h4.]?ssso߾mggo9ή]:2W_}5""aZ믷nݪVWZoA뭷,Ys!M???W^Q(_ /@t9afͺ~zyy9Kb7o^ee%P uBsDG=Z]EQ"jZmCCj ?ht:ߟFA|%^MPB (xzzd___ CR}||Nү rl6Ass3avvvaaaatffDx;wx<47BF#j4۷^zrhlll"""bcccbbbccccc}||`0nݺREEE]]]t:}ɨ]:LE۷or4 uDPdeem۶-**jϞ=G& KJJ.]tҥW* OO#F9~kkk;z#GܦO>k֬ &P\_ܹnժU:'OrsND"s O0SetvvVTT쪪*6]WW'Z%dXh OOբ0;wjjjܹsjL&>&000(((000wZ%T*xf!PG\srr̙sNs r;wbbii{ad999--- %55uر))),‚N;{O>moo?k֬~ĉ}~ZbV]veZwwO?tɋ/j4cN>} Eiiի֮] /Btť ,xa}Nmmm@,D"<.[ZZu}}}tFR @WUUUWWsjt:% cXaaaD 0orO4Lacxx8ꆎOi0Fww[H:t,+ឨ(0ǻpBNNիW%{=J5k֠3[n #"6ӧ-[&7nܘi"aXq1vv v<-'ϟ…jk1{Z6((h9ѵ ҥدbGb/՘1HxTjZ* BT*жA"HR=Aooo???ooo MQϣ B)000 80|>/ #J]ߟBgE___W^^^VVVVVV^^^__aD ÓaaaC!b.rkjj\nmmm}}Fb0-z=L&f&JHMMV#Ç#LH$:{,j^WW⒑{U}}u;5j(+2C0aBڶm[dd$J]xZ-b!믿>rZ~g^~A095++뫯owz̀{&%%ݙR/|7׮]^p9s/۳gϴiӈ./b Zϛ7L|x{]lʕ+wIt-ۿe˦LrJ㔔1s!Abǎ۶m Naiiu1HL& (.JyxxCPz `7p5550 he@@>u|$ |\.GW@]{eЩT"4MUUq$]&YXXP(jp8hىaJ Ea>ÇtXּ:zZ[[]yذaW_}`0>䓩S] uf/^3gΝ;`+,Ē12ShfCYz3gBBB233_}UWWWr<++O?[zŋq hڵ6!55&''Bv*k׮E] 0uww|H$P](D">P(uh4B!T*L&:ڒH$b0*mڊaDB,$`0\.Q,d Exb0H g2Oڰl͂bEFF `S\\+;bŋ999:%%%===)))!!֜y,*>ʲ޲e= :rM6effbKNJs)S#|AVVV\\͛322M_ӧO/_}ʕ+V>Jr̙?>;hFzzzo'٭Xbٲef@GP<7o̙ܿ3.˗Νk0>>J=z4y2Ν[fMmme֯_AtEuww۷o߳gOrr2'r8`pJ5sy ookeee XZ=eʔ?>xↆk׮ZɉJGt99rڴi4O?'""".7^?|p&yqkl^RVV/,@B̞RD1tDG@DG@`0PߟFtOLף<:a\.0!!! "`P<| _>ػw/ '\|yذaDFܷoߖ-[y8XjѣI$ҥKgϞ}饗gy}ƌeee111D2 ?;w$H$0PjlllhӃaɤP(~~~ F 堯⪪*6]WWWUURD,bEFF?, |~}d2a$)222T*͗^/---((()))))rz>""uMNNWxB#HIR hZ1200} vuu%^0@T*͛7KJJ bU\\\RRz $FF/(((,,vZwwwBBBRRRrrrjj=@zcǎ%''gxJP˗/ooo߼yeˠ9bLRS.@ٲe֭[Ϟ=;qDk:n֭~Yҝ9s&##c +mmm|͋/Ht9OnR9ί:a1?+W3]811L&:uBBd3>N:v-Cgzӂ>h8NeeeEEEEE&88bEDDX,(:0hZ>o;;;1 e0AF RQ:H*ۣ#G9r$$FFǿȐ䨨(<:NP~5%511qԨQMˋKyyyyyy/_JƍKKK?~|XX Jrǎ>uT+ ~?x_|Ezz:p4Ԅa0/1mڴ+W]KPT߶o߾b ɓ'6l5qGY`ATTԡCÉ.ɝ={vԩ;w\bѵW__?ydJuh1?iii3gѵ`0۶m۴i)zM0 ))Z˗/”lBܺMefb7]:JkA7nniid2{eE؈+++jUHHHtttLL C\zsNmm-k4 \\\3舿?LLZ[[]R*N;v̘1Fzhjj4Σ BFceebxY|>ի׮]+((5jJ*`Źyyy-%%%------**j&`8t;;;lٲdXB@B־[s=_]x:#ލX[@t5][[[ddĉo677^ރ=M**##={իWo߾(GkTf}Yt̙YУo}jOOϧ)?^xᅺGN2oo|KJJNά6JQQє)S"""Μ9Ft9όu>{f] zzzf͚u?#%%r֭[ N͛!L$(z' @ xQbfkkOt:ɤ ]#|0577ߺu֭[wt, HG`6櫻 (;haaOBA* o@``yyyfIIIcǎMJJA8o(m9:05//+**4 B󠒓D;梣… 999999uuu)))qqqJ?֭;vXrr~@tE$Uwwc{I&]na|a'bL 222?>cƌGS\N8188}u֭ovOs;sp555(~ĉ>~f7xs|6 ;v,]ߘ˿NKKKHHȢEoNt-P*/b~~SƏOt9_}vEEѯ\nxx &NHt-< $1hZPXo׋bt<ЙL&L@jlleD(baaaп3%ɸ\nwqM\O¾"dѠQJ5.Xm+Z Zh֠-RPP")dQ@v$ϋ!-Lfߜ k?jooGu 58:-= ߿_UUlgg8o޼s*Ã響>MOW^q\"h```bbbjjjjjjbbbff6/M(V__ijjO> $*=;;͚5 JSQQ;(tȑSN(\#*ԅ۷GFFhg x?JOGL&rr; H;.kiiiff?\feeQT ;w b|a.*fkms;7c ;; T@***ޯD/++DWTTCCCAgٳgMMM򖖖d2L&Ϙ1C {Uzo"MU vC?INNNKK7nV)EPLMMaO@wyyy555!eee&&&JJJx۷III Ϟ=#֎ZZZx`x,*-RNNNp#ܼysΝUUU~޽{9THDD۫vڵw^xXh҂\V._yϟv_=fkiiT*A[3;w޸qW4-Z"//<#]-m۶jjjC\ՀO y߽{Qw޽{s xinnvss+..311;N>b))):;;@U!񊋋455!444MLLH$`^榤`BUTT;:::88P3fCh@*jddw:钗bŊ'NI#*رcǎ \x1މkkC66^NÙ>}… ϟ?>ҥK/\|yxxx"bgg?(Tjjj ]vm^^^gΜP/b2$ٳ6mzALZ@444$$$?`={ǧTCC Y,V||Dx3gމ蝒h4ڙ3g FRk+ruEqqHG*`ݸq͛7{y !tэ7jii544X,ehh9Gt^xqƍmd`~ݻ=:I˜Dmmmǎ;vɓq/X}Q@-_W߿nݺׯ_wMYx10a沥EdkkksttIIIfDD" bCF:oܸwõNqhÇmqhrԩo&44,wvo QrV;w.q٩k.H7o^Bd$rrB**x/P$eee/S\\с;v"sX<o„ sFI_aGѱ>-ԣpԻwFGGgffR( .\ښ@:x/_lll$SL>JJ3 ׯcccSRRbbbX,J; #իW{qqq]UFFFx!TZZu۷o/2'B}XX۷߾}F>}D@]Co#_$۱cǎ?^QQCG;;;SRR>|q޽Fww0_ͥv|u뢣SSSZ,mWAA1#MdWXwûf[ - >.\xС={$w|}}78p$7ߜ={644Fe߿ŋiӦE455ijj^vNA:@Lvc%酅!UUiӦM6m555 P***RSSSSS333TTTf͚e YPPӧO>yӧo޼AuH$(,UWW߽{7222::n-Zh ` xmNNNnn.o'O655533333355577dž`Z[[233Bfrqq?|܀Q>?,KQQJZ[[`$=z~ XlމTm۶޽{Ϟ=x'⡳s2@8vvvϟfb###ee喖H\.Ǚk.aܮ'O9rr,m.@dd|}ĉEoYf}mC'qa+2lٲ˗/㝥wwvffYM"2֭[\vZ ̮]rrr"ulmmgϞ};௥+@*џ?^XXXWW722>}-[O>m4HGUUUXYYQ(M6988hmmoo511ꫯ,,,H$Ҕ)S#!!!"",k̘1 ._/^ n X1zNNN^^޳gϪ DrppشiadxYYYL&dp8KKK F1Uggg|kkk:NR) .:ݹs믿|{xx?~|W{DEEڎʅ{ Gxg$zܿ_SS "r֭W]`)ÇN@` u555痔 D~&&&ӦM300{>s.LPd*1}jmm}qfff^^VGH$MMMd26> a$y۷cbbbccd2Jhp38b2}z62znnnnnnCCCӧa?P%%%XUz\\\MMͤI\]]]]]T*FL*=55`ѢET*YKK tw;v Y|ɓ'N4$|P }ݕ+Wh4کSLw"l?(1 {xx}vx1^^^AAA7;Zaa!L裏.\0GnN;<6Νknn~Ν-Yt=U - &|}}O8naawOΊ+\nXXXl__ߐNQZZ?Ӂ-0~7ozxx@#W`0⋦&1i55(!%%%SSSSSM6L:s $WGGǏSSSd۶m$i{쑞pU YY*޽Cp%&&HB/^+++SPP033[nW_}͛Q6 A?99y}s)QF9%%%]V<oܹ!iA_;d6?cƌ%Rb`p` u]544 $H@555=xIII>lmmUSSkFTwK>omm=c KK3fL:n,rϟkii-]tɒ%cǎ;g'O<}ٳgO>mkkSTT$H3gδ H'N;)lvrrrDD۷Y,#JRVVVpF10oFiyuɗ.];`lٲYYYxgt[[[%msr4-+++==8#zzzxg^3gΜ5k͛72z$%%988:neeeXXҥK%{B'&& tqqh~@RG{3UWW?sƍ+peM=`Ϟ4kֈ"&Gg 2***BZZZ$iΜ9|򉙙٤I 0yyy)))))),@ 988lܸi@b3>knnqUEnd2YEEEII)<<\+B$bS\.vªU@ccc?nݺ3f!fΜy &[cѯ$((Nkiiat:`yh&N(''gjjzҥ 8#ƌuƦp1c EeR֭[_~1<<<~"knn'Hx(>_#ш577> xЫ6NL nݺwްaAzx񢪪*)D͛?; %x^xmN:5~^_~3Qpkq1c<{lˊO;̟?ӦMs 8~]#`}a6Ǐ}~[f͚KBS!DA?#OEEEιt:+PUUP(AAAIII⠭-!!K,;v,BHQQq޼y{}v]]§~ש![f/HF_}uG z W|ӁFFF-YDSSƫVg2 ]^^ѣGmmmD|p%(WWG~555zzz_ZC5s8 zH7`.^YY a0 &TWWCPSSOӻF?~B suw^xӧ;::vtte]|YII gرÑ@W\)`5 a(|x%&&q=Ν>aC, Dp7Qrԩ &@S @?#ҋfgdd\pa˖-vvv***!UUU[[[//3gܿ[SSSTTԞ={]~xxjŋ/v4w\PzzzBӦM~,[LGG+(**vׂGFFn3'%%xzz LUG9#=<zÇ=*--1555k1c QiiiTTTTTTLLLKK̙3/^lgg'//wA8266֮Zd VnKR޽h"*5* ILL"T*JZYYa;_}UIIɎ;'qˣ|Ux!!!}|ssG!!U1++Zڅw?c۶m޽;|瑑xgÇ Ƌ/" ui4YD!44tʕmmms(QԆ]O`XYYhC5^w#!: \XSS=u(ġ䂃W^-dX"@5(>tI@"/yxxp8hkj0 b܊ `ff=+D"CI:%%%KNNNIIaXs̡T*uܹjjjxpvv~UJJÇ322ݻw]//0L徿TGGu8p{{{oݺU___QQcX arsshG#砏uvv 9Ƅ lvccunJ3ѣG<pܹ۷o5k|p`/111L&xܸq4??>0B= s722~DDDhF*rrr۷o{ٰa8}9޹'e|#Deex*i))).]b0YSzyym۶MJBzzz|>0Ayȩ7nWס߽sgϞ<]H#rrrg$C4dpB^nZHCF{gϞ vuMqF հhhhuuuzonjvX{5\---ׯ__bO>]VVwѦ#g~ ) 籲B]v "o۶ !`0=ڵk~f'%%xzzc/􀀀&3iORL;NB׭[x񢙙ْ%Knnn$Gyzz{xIWWW驫RSSAAAEEExG#WYY&`,d2 mkk'ѨRΝ; vkܜ9sn`0y<c^^^Ut:`TVVME/"\\\BD"!ᅨf_iii4lSnٲ%,, G3f(**jD|UxP.>8N@@ĉ qЏLJ^5m|Sv@?.^(AΝ)ADKGgffD:;;UTT.\w/(**d4>uꔀ޿ץzLpm>t999***^^^ò68#GJo!ow0V” bz,r ǃa^$$ y@mmmЀwFD CAAJgddttt Mץ6m6l8uA{,hmmCh4Bvvv;v j- zMMM +h \__GN==/_cU!!!=\~}y8΂ z]%x񺺺I&!"""]ׇw^xqM6H$\իW޽#H3glmmںC;899 8 ߂R"05” bzkp8wh7yxzH?k^C ''`x{{S(ƍh0,B!!!Xrrr LJd >lʔ)***g!&&fʕ&MSRR"H[lIOO^mhh/ `甝~~~zzzrrrFFFoooq2XpΝ={P(yyycǒࢹ+LWTT ~e8r >X˗hhh|MMMҥKrrr'O޿GGGy8O?񩢢.d~ X1P(]3x9s V^-M}}}xxOuرc &؈w@dz{{w4KтP wǺ'OD==/x<^FF?B]\R񂂂444P|UP.,--伽LXp?y BBBDbo'⏛]v?^P qBL&cu]'Oh“'O_/ hA2cee5wmݻwkkk777}Uk@z]^1QmݺUCCcvذa… g! ]#x=M~^;2???SSShj4dg Gt :;;Μ9vکS"D'|rهLKK;z… M_ OOOH@ doo ਣ#**jÆ cǎ%xEEE  {`@077  ~x!<($$$+++=zwPxøP.g̘!++8Đv#0, B]]Bdb #1"_{v}¬ҤI'Otb DEH$ЪU|=B޽{y=0 n-Zdmm1!)-ckkgVs Ν0k l޼Y@INGGGKKằA UUU!bbbD{:3aI`HֆP(UUUиqh4RRbiVZZ}󭣣РAAA0$|:_G?<((?F)**Λ7ᅬ}1U#}Ho4*v?FÞi݅ىw@zQWWwڵUV#f͚痚*E$%1swp!5556O?@ ,_\r"3[ ꒢# `̘1 c@OLp$۷~{;9҂㩪^p |3f̐]|YAA]5kBORYY Ʀ0 Є |&Bz***ygn޼I$>|85O[槟~ ǭu®aŊX5;v옼ݔ)S/_ ׉nq+ȰF\UU͛7s!ݏ?,g~ CBB3TFFT) >X,֥K<==߿?!##{ aޞORB'OJG 222|}}d2Hs <n^ R***!2d2[[[rƎknnw0B]TTTxyyDGG0O Ǎ߿w={~w>xaQRRwΠ ʕ+Or Bhʔ)L2!B(p8!yyy]]M6 ny捌̭[y+ĹQUUܽ{x믿w61&''wq/% xwo NyyyBBBRRRbbb~~>BԔBl޼eeeEGGBvv($YX -LLL?w>O$iժUx}}}cc㸸8gggs:99!O\n}ll5kxxx\`a>|X4N[FWW?ωVs ̙3~vM!!!"u#yݺu۱cYF܂ .^0vXHN6 "<+INN~QUUBqppUUU;#x*++f2555zzzT*u:::x Pqq1ɌIJJ3f… 2J⦽Ν;W^TTT\ryD"RUUUXUzllliiq㜝ϟdaaA @n߾WG&i4ڲeˬ3Vo޼{ݻwLfCC/^xbgggtfNv옫رcgϞ}17|d2T*TWWj*]]]}};wxÇ]ti͚5P¶mF"mVQQiӦ؊۷d(Ob#""bժUƍTUU}vmmŋwDƍ7o666ٺuwЯӁzu``^__~ L&32}޶mZZZ:TTT@777(OXZZ^tڵkL&D"q/^Xj՗_~ikkCCi 8}%; `dXxE``It:AѣGMMM&Lkmm^1}tГ'OӮg@ghh_ bA544~Wq qn@\W_ {;ի~OΝ;u4#ƍGR%}{댌e˖ uvC6fjhh̛77n܉'rrr#""|||d,R{{{LL̞={fϞU{|555!!!^^^FFFx@nܹ+WOJJ:pB>yfww~͛7T*@555===Y,G"߯\YYd2o>e0՝ݱZ;wlݺ}իVZp $iN ֯__SSw( _T\waggSCCŋo.K.%osb ':th޽O>ݷo_K...@ IDATc?:;; ?RRRBBBPsoܸŋGlBP>j*--aYa_`tgffF$={bݻwׯ_|":---x"wUPP?>A?DoC$tvv;vlɒ%!mm+V<~eddSTeeeWHHHMM |>fL&v H$>>>L&tĉ3g>\| b'|YvQZZw4vm///]]]7|сw4FD^^v= 5)) @HNNN p Ѥ -- 8@uvà[rNO8 w%EEFxN[SL!V~&<<ˤm x<TWWx@tvv>x`666D"QAAaǏ JSS_EUUUDÇ={w.FDtzPPPqq1р$aپJJJp|P222lmmD'YQP#?q( sԩcNJ՝/_5AZVVw?!?!DP^xsA^kbhh(BQQQQQQP(VycFFFm` eddo 1oX,aj~ᇩS ?8hkk355]p!;  ‹/"bcc*@l|* =:::SRRbbbRSS[ZZ&OFPoIIIofXcƌYp!F[p!6&_eeeQQQ111III)JRY$BqqqPP_UZZ:k֬͛7\RCC\H͚5Jh4[[[YYYпP&r]\\>CwwwluFvJJJ[[LN$̃6o\QQqIOOOw">9ex<իWwg@Sg; T*.%,@4EUܣZjցWݵ(`"3*KE-SVy?DԐ x$y׽M$޽{ PУGh4x0Q$--mȑFFFDgA! Əo``pU|&YSSN8iӦK^vM:鯿ڹs۷ouuu Lŋx"99F}5/d l֭[YYYҹZMSEEEDgiݻw?~<99yРADg!@ =a„ӧOO>D qϽ쿁M[n޽Y#|4MUTTDgiiӦ=z>={EUWW6l : m uЉdee=z(""K.FFFSNJ>p !!!.j \}}'O”$X244TQQ!: aXXXWZeaa-ࠠ𚚚cؘ(++vgxayL&t ( VVV0ΎNȱׯwD*^BBccc/^|Ѿ}tzhdb+ЈDȜ˗gddDEE!/^Ct% uuu]]]|5GfggCc۶mvڵ,YAtNjԨQs :ȗD3f☘|ӳBGGg7o&:"vի `Zr B(҈S4mԩpFknhhؙ 22ɓ'uuu 233!@dgg_z;55uƌK.eXD@544DEE<|0==]MM /L&:aXttҚ3głx0 !É'Ɇvvv&L HD-;;{ݺu?ܭ[7a7nضmP(ܳg =n@[[N9wޝ?~AAwC pɕ+WD"vy |^|j]]ݵk߿,bذaWq2e֬YZrw 2… ˖-#:W8|Gvv6mcǎ믩:::DgWEEE:::ׯ__`Y:۷o/^T'=zmvMt⥧5ٙ,)33sذaL&,|Tc/))I$e|ӧOWD$ݻwmv dN8j VUUUDDDhhhhhhZZJ2e̙3 嫏! ®_>?wܥKZXXr"d2}!:󃃃}||  ł3@Sl6IJJ0Аd2 zի3339rJMbbcbb/^|Њ`&:1''`bcLgjjE^_{-**SRRү_;::-OJJz򥲲2Yd=Nj":bϝ;zǏs4k9: T9&Ojkk[YY׏ȐЖmmm ϟ?ǫҟ={& GIt*nݺvZBBرc]]]-ZԿs>|p=3/pv@x<___ZYYiddbL&L LzHHHvv ۷/逢޶mۥK @t" B0ƍ۷o{]~=Dtu.@ @˗/YIII?666&*O<9,,Ғ,/dffdw˗'%%Hoc``0a„˗/7n̙3/|V``}HHN':x!HLL8q"YX,9rYd| Ж-uJt@deerG}gϞxti @3%%%> 1biWݱ ^ 躺AXYYCU _b8<<ҥK~~~ݻw_pѹPL 22씔eee:d2ȝJ0@`nn`0fϞ=p@ ISQF9::2ӧCA\[uuc-ZDt BӪسgӧǍwԩ3fzݾ-Q(//߿ٳg/_NT7rܔtcccUUՀ|Y]]СC]\\靖iӦ)++GEElZ_+99yܸqDgoT~&L!: #GsY a2/_?~p8h"%%%SSSV^^O?]zuҥǎիщ܀ N.))iO>]x'4( #͛WTTI뵴~gwwwBt0++(|ٳg駌 k~ѣ6l :ٹswff&D":Kg3f$''lz6Yd ^H)SEu%88 @r|| :G u 0 {eHHHHHȓ'O YXXӇȖꠠ 6Ǒ#G:991 CCCUUU333i4;8q"yyWWWwƍׯ 4hK,0`ѹP@%%%l6ߟՍ3`Ϙ1:8ݻw|ܹsgϞ O@3p8~9880 KKKw…;vhjj^t ð7n {]nqمa͞': cq82%''GKKKkhfff!!!DiX,1b "vy7oEn`6xy:t,b--7ܹ,eff;v߾}۶m#:,>}z>}8AϧMh sL9@dggbccy<^yMMMv5-߽{%\ C36'l6yP(3f ;>}z݉zwܩqrrZj% dayWYYNX,;;}SRR*++ϙ3dZ[[ٓhHLJJ >YllX,4i~I@:rrrwܹcǎ.]P={9sFOOԩSD'5htTRAt@xmo&ϛ7ӧO_p\:.mp8\.7))I$e|FFFpBBB8NPPPnnٳL1(8q"B!: ooo@dɒUV RUU營"=`ȝ۷oCa:P`uuu\.^TTԧO{{{3B/_?֭[GRNTf0 qㆻ{uum~h /_^x4{޽*pgϞqqqSL077':|طoǏMFt90b#GX,4hYC(?~ȑ':LKOO7n " cccI$Yh/PҖ_V]]/&:^WWgddd2 Add$^$'M*++tSRRƍ~z555s8 |||8Γ'OB9`20GM ӻv:{leeeյkW ǿb|ݻ;fbbr…C=P>fs8nݺ1 [[[ Il.񴴴f͚eeeejjIt:$ ð .l h"hdzgoo<*,,s玏OLLLnݠ0( â9NIIQQQۥ: W\%K@$ PڐaÆPq6eg~@}Ю]DHǏMMMcccNCCk֬9z/[,xРANZr%YA^^>z*YdځN8/##333ÇzzzETUU?~DgWbа{ ?j(P(;;;((((((,,׏N[[[tU|>?88ᄆfee 0`ܹL&sƌP!˹٣G[[[| ʕ+W\IMM8q5k͛׳gOs ^zu}??$555[[[GGG;;;+iaE\RRҿ]:|Ɂ,xv:s挃éSOt"8B|^nݧOm/())6nP߾DF IDATHɓGuG޼y3j(I5+,,ݻw,+??37wѣA>/}Ǐg̘X~//<86tСm۶EVD">;6}c^tTU&M4iRӏN ۇ^z5~LІhSS7n,\,rҥKk׮}ѣ:R^!:A:wީZYYtCCC#ZU^^f}||"""jkk'M`0L>@|~TT^a>^nllܥKQ޿ܹyʕpϞ=oFFF#:_ Ӂ***z5003t k\իy<ީSX,q<W??+V|FD4 jjj<==8{ ,._斕{Y;N8ajjjgggmmQPP!˸#G.]رc#?^rϥ\CUU{+W\l38yM E&444O:Nkii 2ߟd 4w{v-33رcn*++軙y Bzzz^^^nnn^iӦׯ'''kii5>P]] 75w7zȑΧN"6XhTVT 0,!!>))L&|p6?x?,,L 1 QF NߗU111555 3"D">{lhhСCܖ-[ֻwos x<^`` ~ayy|WOOh|*???ooo.KPlllX,TUU%:rHRLO>m޼͛?ՉNAAAX, LLL ȋԍ70SN 4D|"dd\\Џ?CNh.YܹsD:.{zzܹS,H$X6mڴ˗[YYukgΜٴiSBBwuq AYYSTH4vԤ$+q+W}vTT>YdB=x<J 4MEEet:}ʔ)eFhiiݻ7..aӧBbŊWb6y#G>}:555!!AR3xt<o„ Æ ċ  >Lt:зo_%%%???cccڵkܹF:OP߾}$C/) u'22D[[j̙z":~~~~~~111]tqttd0p$p8.㢢={Z[[レ Bt::\VV\R^^>M6 WYY`hhbȩ: mll͛ "##[ bYZZtR^?~|OݻwoΝr0LLL>}j:D:yu뤟 6~۷ܹSYYDOQ:z|9iUTTbbbbd@ @hcǎ_^"˿|UD"Q#d2/=z4ܵk_ &MѣGnnnQQP(TRRZjɓ' GH$2L&fΜ J@ }uTTC4}BD"eee##5k f@(޺uݽSRR:zԩS_x‡1ܹЕ*ׯ_O>}˖-?~zu zl#ٳgH$t#Fݾ}6D/ٳє)D$P_G,?}/KJJP(VVV Gdggkii͙3b¨Jɓ'xD 8ĉOt"… :::k֬Yl&ѹow񉍍P(,&rR(ʪk׮DG{p8𲲲ѣG;880 8CKKK300z9s>m۶ݻww֍@Q]tiխVSbhIVSSyzyyٵ|ͯjcccbb"xE(Db1RR":***<_D"PDgΝ#ɦe˖ݾ}L&7~2$##C:D"Jm>|իWFٽ}622["O<144r$TMMͥK<== 9.>annޡ+**͏9Ϳ~ ҥKw... 6l :3g΃bllHt.Tv),,d\.ѣG?~8p4441L& f`DRaXBB^]WWg``WO>{D@z9x6^SRRr̙K.̚5kӦM4jofcbbTTT%++S|ׯ B|={vhHÇ< 4id2Ѓ ȂI&SavEww\xJ1@6ERtz@@!IKK۸qcpp08ydY޽{7nܸ=zǷ}R[`T2ܹsvlݼMPPDVɓVSQ( o* dgg<,֖Bύȥh4M I:3g?~xРAD!_ : ?矄 }}l*GҡZCP0 [pqǏAgYYYp!TUUէOb*sA|P(r;v\pť_~'O>|_=uTbr]\\tttN:xT6mee|xnĈǎ+..~:łt ;233kjj~P(dK.\p!Bܹs |tYYYǏ777ׯ[}}g^^^\\ܞ={&M@F,[,##ðj777Pzzņ vؑ㨩ڶlW)-ZDH$ Fׯ_ݻjڵj;;jBc>v-JO': !>w[I)ڒX,~^!Ň644lYN&=z$$|>ǩTСC<]TUUlv.] FII qԯ_'DT*u{!$hvY^Fwh⃦>})9O>mZͅ86% 'O|}R=:h.??Ç\.LVVVFFF0,nݺ?\v}޽{>>>x!egg׷o_ETWW333MLLvP ݻw.\( UTT (//pիW߽{ghhe&٥K ޼ys=__ߗ/_ՋdΞ=ںk׮DG...UUU^w a7nܸwާO.]:gΜݎ@^Gl65`s2Lccc8ܹsk׮mz8p=eN ,hvèk׮?~>5k>|:::^^^UUU ,h&&&- -Et":sB)))BSd2NIIRRRA?={/>|蘘jF[`Aw%u2ܳgτ3 ˳!!!޽{<8GP^xOT*THHȬYD"Q-O?tܪo޼*=N&N Mڏ:88f{s*jllAT0`0Z{ H$۷o+@@:@!@rlvJJJb!C"oذ0Geee-Gfdzl={:88X3g F,'&&;gϞDI&;2a;~TOP?a˗/Ϝ9DŋZȫ0ݻw={UaءCvڅaLnրɓ'>>>ბrvvH `فcƌaXL&ohhشqDh?=tӧM`* ^|~={VUU5sP(5k֜}JJJPWPPA*allkg͚4qD[lizbNP;|-??9s4FQTWWK.uzsСfh4? n`GGG@rG"Ho޼=zɎ d2aK,9y򤪪nzf=z L׌3 dGGǼ<2DuuuXX-L?O> `.QZZmooi&SSӖ-.P<m޼ĉG*))]x1>>~Ȑ!wuuUSS#0'rJ eG7o#:_PQQ1P:H$ )..|իWo߾m``O?999uH@a찰CC_dB ݙ0L,By:nݺ͞=ǧ>@ hui„ QQQVN$:uj̘1k֬!0Q"Fp "oݺ!*w^SSyUVV6{{KKK߾};f̘[>xE(Ohf͢p"/ C_TaC`$Вӵkז.]tP(,((6*R(-;: =z$)JT*ĉ |^CϞ=?~$HMM;vl6!22sL@8C': ΧOtW=x֭[%|mm|g*uCIdrd…M+TѣG7nkOOO1bD eÆ Ǐ\MM Ŋ~9s#U捿R(/^|֕+W~ᇦG'Lqk7n\rrrd2ŋ VJKK9r1 Z**))Ӈlɓ'v$i[nK4@NAZ`Ajjjiiw{999~~~ӧuuu&Mb0jkkWZu֭[Ȯ]Ս7(%K6^)"##$ aG:sDfOQTCCè(B Y,VIIIZZZ/w 422bXJ ܽ{wҥٵ]2ܿٳgϟ?H 2x<ުU۷o|eEGGs86d2Y,̙3PH'Nؼy.ѓHsI hhhTTT \]]/\@t( ,--|} ð}߾}?yP(ww?H 'Ol:f_~. TTT_I$͛= ؿGnn/_L&ˠhΝ; Fmm d3._Eg8 @ee݋/>"Ho߾ȔȻ9sTTTD}Ы|||9pvv!$0L$ڵV/H < Ȧ7o8::s޾} 1l6?''G[[ٙbB" ={fllz2LR|֭[=*lZf[XXȱf][P(CѣRP\./633{DleeR/^8qD+w={6gΜk׮ݽ511qҤI!*:lذϟq!;}%K?(++>߽/_*)) cp%%ZQaaI$ҁ;h]MJJݻ}}}Tj}wf'Oܺuk軮]lC^z9::/Y$..Ν;K.t>Ν;&Lh׉J6+@vxyyBXfUWW,]_~t:=::zٲeyyy^^^PWYYٳNڋh=z/^huD7+ܧOSSS| j}H$̜7o^!r׭[7??Yf'Z&DR;wiӦřp]]]BBBG?%]vtlݺݻyyyFX,r ˾_uΝx>_YYA+JOOGH$4f̘w"T*B޽{DG#ƍ7D"f0޽[t)wR)Jq.gl+k:+^LLLPPۥk֬YL&LCC >~/~񕚚p7ݲeŋd2G"\nRRL6338q"(''"//t\ ;tB,+::Ur]]ݘ۷oR(kkk`0zE`ZׯLfAAA -H#G}Vje˖7>I"^Z__fNp!BCC1 P( 竪YXXM0΅!bVQQ4aXzzz|||\\\\\\|||MM BQRRH$֭[9BtX$y~b IDAT=EǎÉNDk֬x"Dڵ/sƍ'O400ū:3 N8m6P_CW*allܡ_;w+W8;;7{vŊ+VPO>eeev : h .\JMM1bDGŋVP(W^]xqG`sδ4 æN3CIۇaX^N8h" 1S ;ZY믿!jjjn޼I&[FTQQ;vqөvtTC o^~]QQO63n.}.uqqq .nY;E"0 Ңt:ʪ*8>WSSQR-d BRi4{ID΢q`&AMObbbfϞӧ{%%% ,,,̙l4/yTZZ, &.monhh"x[Ebjjo?zÇ64MMMqM_(deeedd TZ^ջw _KKK͝2e Q6ݏ|3؏ðڪƻ]cƌ0`o|._F7o"TVy7 O.-SN09/~.^RQQ100$#GY.~*rʻwݻ_~;""##-,,tuu+9ĈbCCLkC ޼ySTT4yd555I-\==~uqJ300##aԩ߿L9޿#Fh^DhY\\r-,,JB...r( ڷoӹ\4SU"(77K.߈H$[;D"ϭO-Dcn݈LwRgPRR@ <==drTY߿r@ իFW-/5HP;MR:th׮]?Fzzˁ wAuuAOB`{`޼yӸھ}X,nuuu}mu9_~ꕞ^TWWWUU >\MMMEE*]fHWl}}o߾?~޽34ݏ|؏K.ꂂ]v >]RRB..EWY,A䆏, 6Bxcӧ>SMM;}]TYY9a| IʜD~*cccXwE:om{ip|MRKÏO*++]]]Fx6nd _ %:Esv D|v'DNS#H$ӁQr2{|,kz aJJJ;zt%}B S555ͪb;wcD/UUU|>!TRRx !0 } d6l@6jAAA-0lݺu#F~*@A0A!2QH @wI$4aѾT( cdd؀ Jnݺu릣Ct!t6Λjkk @sCӧD"b544YBDb蘐0l0g5P?O))!}}BB}?2(++WSS s՛ :@k\] F;):3gdggZuuuyjhr%v-}9''QQQo߾0)ߩP}}۷#"">|@&'L2eʔ[6߹X5;8mSPP?ŕ 444 /^<`Z|%Wl!\78|>/))Dľ9 aG#}yiiiqqq>|ŚSLYxqYs dm-7Oڳ}h vۣOz# / ͛E 'Po.l:q! MӑXttv@~v\Ow!흞>| LLLړ3{ҞO H^^^^^^</!!ŋ/^A)++b@ l6^.wZ.A-Bjj9,|:3D)0?hh(2}/P'˛}.{ԩCJ9 5XhQ}?KJJ6oޜHLLLLL 铵dvptWߜM65>5f̘v.4% ٳg}||:z-.śmO0>>>44+Vh>|zĉ#FtP`b#HQgnɂGҫg @_#HE)+K-ZgEg`?޿Gnp4iA$a;޾}ɓyիW6n"RK;s eݻw755555-++ë՟?Za!:{d#>A&ȍoGTn'yݶmMʌ1@GGL&|ѣ>|:qD%:6ټ2Œ%KW)ߩO,믹ׯקP(^sN_?d"oW]]׭[7|pPZZӧ_~}ĉsεs9}m! NXXBFFF-ge2ܜρ}oD xzzZ[[7{jvvv'O߿P(|ݙ3g޾}ufK$;2\I{v1mb.($!PBC#"NY)YY?/(*jI3z\-((B/^<{I6-5{yObÇ/^quuu M-}L5s  #77t&O&4wQ op妿N2?puu} Qy&@'ҳg3goSN:`;8mIKKC߿w#cǎݿSjjjQ^^266&u@Ϝ(ׯ_///_n] /6LggoJ7#@'n;R]^BHG] Șg%%dn|}zL=WA>|(]]]G\]]srrBBB8Ώ?HHr+@hkkkkk cyzKPKyJoBDBP.|||;^`E󞙸ݻ4襗^z'75"{I\\͛O>]WWwN_-pqq!"3}<1DAAA666Ǐ711!7|~gooo"jmm:uj]]]tt4srGe,--?zjeeoHHl(3gδ>䓋-t":qđ#GǏ._$mܸfff&L k;*8T8p &&&//O" 0 $$d R+śEAm  mңU$ݷV'O$W^y7x)x111Ν3335kٳׯ_E ӧ; Ҳk׮GVWW̚5kڴi*ٴP Cgٓ+++_\<|Psڭ+},ҽ)g*;"cJ>Qu>w,kEղߩUt1v\U{Y`N߻u֩0 ?{mib qWL ֵ+5657?6kY~٧=\n"󵦆?&M'Q{ЎBF/LNjB($"ҟkOLs^D~3(d}ͦ+|(6({'79k֬9v{Μ9s6ꫯyoۣG#Gj.u~~~*XRRͼҥK̵$f5;;QvГ+csMM˗\j*icʕ??JG3H$+WI,**LLLܶm)p JlBW'$܂"(%%E:%+++++믿Z~lfu֊vĈ[ttteee޽njoڪ9믿NHH`>oݺyϞ=c$v0}tb(]תU[zĉEER 8caOJ3gnܸ/}͛hX#Ot0u2WeS*ƾVT9ڮx])k׺+Jlllںu+: FR_~g/@&pńp0 $SDLg?AGP.M0g>CJMm'^\"9s(2S?ERmЩRSUYOf4??UGt_vCdf߇EyT`P/͛޽o<uϟ:uj_~mR2wvRvv6>|811qzjwM6  @Ĥ2}$D4k,"JMM%@-cO=TPPUuuٳg׭[{n֜˗D{.X@ GsrrZhQ``evv w-NȲ2˗ܹsgŊ3(]CuIIIVVV|q㬬n߾w^[]mj].^yIBBڵk^\6@[oرcTD .DDDaTeeeddCDDľ}V^!;رcL$&@i!OKK۰aÐ!CjkkӧOGGG3(J+j-bh3{R [[[ٳ'44T:?5.^Qz2{S:YZHYe׊eSP1v8cbb^yfSSS>iɒ%/RVH /0041hxWLp0WPinsGIIJ t5 mN$OOڰ&L ++JK0JHU:RهC[gAOfi׺:+/F; p?B,p;ՇEyT`Pllh Z$(_LtJ׮]۳gkjjF~z6]tСCUkBlr阘W^;wlw朜9stv]@*3А6lذÇ566Jv-c!!!5kĉ_|uѣީŋ B??%KUg8r}Wcǎ133]r%={Vq`TJJ)]C5&&,Y / ^Z*nrbccUO4K.]t4iŋ(GG\]0tZQrrڵkOɾȲe˞|IPأGEQVV/J14ph'=)ZZZe'0Ma= d˦:U}r]I Rkjj6ovj䪢";;[QP #/@x&p MRk+t|q_,sh jhaʀ~ܜF~ ":rv "ڷO'[[ iPڷP\LiiبBt$F; *ɕS##ĒŠ(<* o \'E-[rK.]L1bIJe<VGw ‰'c…m~'|RSS/ދ Ev5%%E,>ݛ2b_O<ةSVX!is[|SSܔ!C}...f3ݻwhmYcII),JWʼL(rXVvìys޴&#o/_.}ȑ#/_> RGv޽)WMOGʜݛ>||UZQ+mCΘqғR4h… GDwٲeKdd$=w\{\MuZQk5vt_EoٲW:'U__֭[&=h(GlH2?+Wn%ڼ?I،Z[[߿cj y8!LǸ,(*:'"O$Gj? 8P ܿzz7nݺtҥ5kְyFUWWMx_~0}%Kd~z޾ҥK&"KKˤ$J6o@+cvH$AAA/yssi- IDAT 4TfCKMUPxjUy@龵rppcFX|}}J1iS웞v2u zRm;v曞={2S_KǎuV:-A2T;|.WǏH$ӧOѻJtzӧ!4Ѐa_Yl4C׋("ZBk+(rU3YtvaT~ M@3EFK:ƓuwwOOObc0orssH8ghdm[["s}O\'38P'"SSӀHte_@"vtD#_N^ u---3fQ_'N^|900yG@@@RR,X`nnLvZsJFЧO[n޽I8;;]vtgff^pgU3 [[vvvbbĉ\9:n }3ԉΝ;D$y6Mʅ\iER 9{RmI*`/Vpwҥy,3bIH<)NN"*^nA.eմ`lA {mib q WLpUܪxW)DB$P]S.^l >wOvf+W(=d^UL}|Ox6O|X<5Mvk׮AzSL!u;vF,gdd|*Svk6&4zh]7m%&RY߹ھN" //2>:m.3(koeffOHHȸq4Nn~3(hmz U? 2 ^{MzgvtfE Vs9`ʕO?FRrfQ?g4H_||_~){8?i$5 ~~W!%8?%]64Yߪ`^zEI/Z#O/*9^f#WLTfAáMK\}[I2|So*!i Z\>%>%g1« z:!M9\a_P-%9{m Sa`q u!-2;wU @#P@{PÀjA #hht]Tz @/X  PE0# ֋w\ yVԷ)h8tWhnuB@la& c ugT&?0>}>BC{6 4`DBDM"Qߊl8_d$ݙ5:KG%Ձ}n~Pe! |fx`T*81Gor\c*"쳒[}%K##G?:nwR^r=8]6CP= 6Zh q:@0yuVo @@lǍ;qBe5w, "5kR Y2z5luzX @@0Zs͚'[?СH&eɒ.Q. I$dbR6Y TVV2Z"#>t~{|᭷FTVtx-f6G55 ^ZTmw- LpW-pDeg :Ο.G55FH7Rc~$H9b>=8)#!BN;f)<2}֮õ!C?<׮͘<9cϵk٪bb.ZZٸQhoojctr<-|ޔEcɓ]u`3Ф'$ NH_2Z"?y` 櫥3gˆur۶xŇD0=azܜ5.4deIŋ YY66V@p.%-G mw4ŋr˗3e޾]-E>;w6zO?1SLMo3gV񇤥d[ͬ?ڸ҈(KO>7"KQ%ӳBClpwGOړ S8Ӯ]9G64Hh6ж ڔDD У@ B" &&&%%ѽ۴ikZZZZZڢE;5 ʰbG)r1a0:zԩSDzgpN2@M*0, چE-_NׯwW쟶W(%%S*..޶m;;DuVH~0$ab0r(r!BX)--ݻwouBQUUEDcƌ155:- 4d`x6 = 4"+h_t-#V  D*=ǎœ'O~7vڵk7xcbѣaAB68+C`όuDGG755u}РA/ғO>pĉ#Gdee566ۏ?_Go1@^j^z7$$drP)qqq7o>}t]]ݹs紲Eӱiiir'dJw,XWPP@Dnnn'O633#{SH$ 9~ eeeD?{{{QkkԩSꢣ=H~̙'|rѢEb@ i ((;vl:U[l>T\dW,8p &&&//O" 0 $$d/æP)ް"hƍ/_6330aBXXXKۤr;;l/[̙3}_:7yW\4dhOĄ;wl֬YgϮ^~ŋ-,,O;wnU%e׮]Gvqq5kִiӤUZu(-ڃH&>d0?{nԁr ȀO :rN1 6$ 2Ϋ1[2%:о!  CڛV {ЎBF/LNA OO#KKz]替lnp7}wo5ϧIti0...{.//{n߾}J\z{9E=s׮]c  ettVfP2;H7 vn2_,Dk*q͚5ǎ~wޙ3gΜ9sDrʸ8"##mfmm`sMM˗\j*iJSlhcc bcc/]LDG}-NVVVVV_~z#ŜKJJ}||ҥKE$f5;;Q.dYTV\)o߾?wM 싱҅NM e^ib(;͟|IRRtEDZH\Ra߿p²2L+Uw9ؤ?zjNNN\\ܔ)S(666''nŝ͈!6 _|޺u={n߾MD wvpp>}:Jjժ'N0V^mee5qDbQuP q)^2"Mm> K?TDJ:g*y[GNT#A`Gp8mEqF֨.0pDv6#\x!e 틂hDBsPddgCǏŋ$[zΥ#GQ>Sr2уjӻ.~(Pgld}99m"Uzm%??)+syO ʰS0@l:ŴFDJ(/j)v-[IuM9y$͟?ԩݻw~ѣqqqNNN- ްaCzzݻ,XNDSO[YYUWW={vݺuwf~` Bo ~hmm|rllstĈ'O7n\.]dgVDEEtumd k׮zjTTԬYn|Y111̐kRRD"IJJ5kQ``AEE*'''""'33s"h޽ ,P:b mZ]QXJ˼tNt߿?))>7n۷K,Q+TJ7ldddYY}||ܹbŊήTa_KK{_رg!;wҥKm0,jȤ*++###"""۷zj)ǎcPԩ*iii6l2dHmmhHT"Dhi/ *"6Dqu܂>2'=K^O~(8l9%|?>d}ؒH{ΝIaM@VVFaa@VwoΒuOG4oMt"mڤ1 d{_yfk+< "uuuW6! ;Ί(Sp6 ڦN%+Tn5{a{AD׮]۳gkjjF"ꫯƎkcccffrJ":{ņ8p`֬Y'N|׭[GDjvҥC5Qӧ/^ĉ~~~~C֭[7eʔ>9DdɒI&uҥK.&Mb,߈%f,WmhhHKK6l a=Ȳ,^O(-YOR<b҅]-ZPwbbb5 BpWV!MP)ݰyt73Su;?2eʨQD"ё#G>,}qu6S ҥK-,,ΝKD>̩.#e˖=BG-",_JH5 AY0T *"6Dqu܂>2'=K^O~qcP2%J⅔1/cѾ}4}:ڒPHCҾ}DD<6?/uB~JDT[+?ƍtt$":{vJ?cb49Ӑ}JP e !CZp#C-_Ksmp/.g\ҥK.]b1bٲevvvw%KgH$JJJ,ԩS+Vy/USS5kydG>970O2bak)C)))bxDwޔ#F0z'~(!C}...f3b҅]-ZPw5j0GP)ݰh:EQϗ.]:w]vQϞ=?fAO)mȤW޽{Seڻ(ܻwo"z!Uiա&D:;6! JAEf|6[GvdAsT^~qcP)#\x!e nX9lezΚhQz:ѨQD.!79CO>h< k!`{Q IDATYY)ڊkjj;FMM ذ  e!ڈpc(TaڋkhiCnˍ7nܺu+))ҥKk֬Yz5sĶUsseڵK"&LP?/:t浕7n|'}mݧD:;;ۗ\trDdiiRYY$C="žtS*#Wa[ZZXΩfX[nݻwojjz'N5dR&&i;~155e3o 2=h QP&*8)t \F:71[\.1%Jk<Rh_4ņjw0zgbc_#:YL@@IIt 8A11J^T^VӳÂ2l$:b:!ƒ W[~Sgi o055 `6 ._LD}uݻ:@ H$W h̔k׮tĈ#FhhhpBll,S1#cƌygeK斝8qDDUzNm'N^|900yb@@@RRS`S<d@+C{8:8mMLtmNFqh*,?$B,h!"ʴiӄBallݻkkkkkkXP8m4 $CLl(>u(AjF)tRVP&1g}LSO6-33sȑ#?K\p^3qҤI0*nlmm_z饗^z4...66V/ONppŋSSS 遁AAANm|իD4l0f"3 l #44T~lf`Su ]Q--Pib(;jbbbrrի۾'ۙnYfJwӘ1cD"<̔{Nv{GZBkkk[D2|ssW|/bcco UА@媒•Vl Ra,mCmqMA}'N2rx=!n8K.\.!h_yA_;4u*3H$4o]F6oGΟ'ΝmEEEaak+ߴiSDDDDDt9ϗ<``8,H(IfAJwn (Tal*I ga2B>>!!!ƍ],ypXP !&6͂: 5#`3DVP&1A ^{ 1c۷/88X+W>I`P:j&Mdnn.s?P/{_~ mbIY@78?0To _|ѫW(5\QQ_k$U 'ZON.ϕ3K̂%OTi<tOg%:::<<[lYuF8 ˰Hm,ؿاESZ,pxX,>|096@X2_1ODuB@qXPL3ODP^?Gh33ڲgT8q"aҤIܦ?H)ε2έjsw h X1͠YX1͠YY38Q~ Zœ̓dI I2t*g?y{{]3-ѷnٳ'0|Pιv횿{׮]N gN>*N t޽{wLOOwrr:E#---Ǐ?t͛7]]]_y;vΜ98D@|w}ٹyxx{xx899rLz駉[t&&$=33,,,>|u@***bbb?~ĉ~M6m#G411!(`D%**^05־}\c@v5lذ¼a„cZ BWUU6ryzMM 34`].~Ą,tJCCCvv\;wO!!!|N_5"""999 ࣏> F'h[]]۷e;D"LMM=<}zhhINNEEΝ;oߞ/>&&&\ D"ɹnee5``twww$ɝ;w._|夤ݻ1bĈÇ1bD^N&`wޕ a/--eN6x]&l]6ra?8yd``gϞmmmu{'O8|p׮];}:QZ[[sss] QTTHD6660tagguw$IvvvrrrrrիW SO1龾xP:@:c)**DEEE%%%%%%MMMlVVVΎNNNNNN...x=:.#Qӭ[7S u֭[wijj:s̰0???x޽{ǫW=:,,_:]Srw2bݺu{_#!LTzuuСC:lذCZYYqR DtBiiiii)^XXXZZZTTTVVVTTTZZ<;B!;::2_vsssn3ƬPiغ4azy3<:c 333q}9s愆:D<|͛wWPP {0tiii)))Ґ~ }$000PИJHT\\~onnf洴svvvrrL0556/`la벑yyy---^غ-ש$ɩS"""h VQQᇚ_|1,,l\' 4`˖-w.//1cFhh3<Sc6=//yhBݙtu@?fdd$'''''gee555ϏyJ:Z` B/;zzqqqiiikk+3eG_wrrrrrBhlغ4ra:g+++*'?Ν 'HrrrQUUEDfff=3wqq:7ZZZnݺ߸q###C$QϞ=xt~:.D{. b134Z].x̌ۼTغN5QKNNسg믿ӇD@'TUUEDDڵۓ&M >}9 kii˓{QQQQcc#ʝl Bz֭[iiiiiiD:hР2dl B@TUUuK紳nnnݺu0`HbqAA3322n߾Qغש0.տKxxx^^O?/r.P$55~$[o`s(Ѐz&]VaaaSSu_vvv\R~~۷o޼y۷o߸qt?diTz=N,%DֲҢ⒒zfNSSS{{{GGGggg{{{'''+++nݰ;w4778q>}ovϞ=N<_HNN4hҵkWsYH$""OOO67nܐ I%ݻϯ ߿>}p2h"jjjBE"H$*))wtN'''{{{{{{gg޽{3{vtttttD;a S `o߾cǎ}\' (77w۶m?see̙3†uׯ=dbaau@_D ejj/mwmmmN/,DLzyy9^^^<\$ݿ_:5޽{3!rH۰ujCC!l@CΝ;K.\ 贴8p """>>{7NO"m F;wuss \'Xii͛7oݺ%}8z~~> B///???__0Gw@P__/UUU btf;;;''';;;ggg_{{{333|ܜ/sƍz"޽{߾}~#N8^JNN_uo.XÃD;wر#;;gYhѴiLLLN%//Oz %ڢFztR*dt;;;S <󑬬,oMM =LH7nn!BtA. ^G;huKKK/// tJYYٮ]nZPP0u԰gyG$$$>|wy뭷uZ}}=H- IDAT.I ӧ[}j`beљwoo~^b!D/(ag.Jg(v bp7o>|yǎy뭷BCC)>ܳgODDDrrr@@G}liiuKcccnnnvvݻwYYYwmhh "GGǾ}z{{ѫW/S z577W]K@:臶!첱 awssNu [h+33sΝ!!! .^mٴܜGUUUDdff3a  BBsssYYYYYH$*+++---)))+++)))---+++//YXX?һw^z~vppdz HNNoΣg_2% IH*RE\pzL*hǶ[{l{W#E[Tj[oA@Ⱦ>l?>o:|13wI;?AIII'|_lmm+++̙+pj{#gE[t)s8z>UH$rĉ0zssjt?0:`4  IFښĠ]`/,,uy, lH:tK_֓cO1z O=Tkk+++/rB麀!$HUUUolqe.`bǏ+=qĔ|TL655577H$>3էXfr2:)p\MMM.r577b^w8vfɃqaaJΜ媭MN˱uV[\\LlD$y׫I&-Y6L 03<3g\|u]2]0 |Ç$O8D Eyy3ftam$ID.G/**t 9$IS쭭x\f'Ip[?|瓒bc#FuuO?^TtM˖-6mZ2>{ꩧ6o/^\YYYQQ颀(H]V&_t:njÕO8q11?~x($IPvәD/..'w:@ zv0zrr:F0/]/},XV3]pE"͛7]v߾}SN]|7hX2]0$B!=YccMk6'LDdp!GE---O:L Ę8C$(9krJH0[?r=.'׉cٽ{ڵk_{{?A~~~ΊǏ??|gg *++/rB麀x<555)ah4P(˝il6[ 3MSSSssxijjD"W!^hv!0bP<Okkk{{{GGG{{hoZ뮻.]:yL r[tRYVVLc2]5`HK$͵MMMVKvNS x`  BmooF!z$[1GIt1\x pH`0 {J=e-ɇAR6$_~)>%#=t:M3]5Fx8cƌL.kUUU;w,..{㎢L'H]u!HZ[[mcc3YYYŅ%%%"^\\,| u Q]]]}5b=OQ6F3:)#mV^GUTTTVVvm|kkk[n݆ .e˖]s5\& 8p 养1K5ybVFE[qQ$IJRAyyy^P0;:::;;۶rW'!+999)/G"n"EaT)/ ===$LI&$ыZm ]xET+U*UAAkAnnNц:p:D==kollX(Yz1cXL%G=pu 6<`p…+V 2]H$yk۷wYPP02B!qѣGcDh47t7Ni4L8+~kkhv*+e v{AAvɔsHGB8h8ilt&''MDBww-[VZ駟VTT,[o&lj_n /~WVVΙ3GTf.P(奭[$J5vSN7n^tA!"z EܼnAQQQAAAQQQaah@ή$]]]򠣣r%e0rssssssrrr$ EN NU8nll/}ї}Y_ͽ;L+Hk֬ysrr{gܸq U0MSWW'ZLZN3;;;ӅΈH[[[jD\ ĸ(??`0dt E&Ffr"{t:;Gcǎqĉ*?u˗_~\d]]]>s=wȑ3g._( >wJZxqeeeEEEH$ۢ˭p-S%%%&[ZZ\.jnnnjjr%g/WTnl6&BBB_V$^oN#[熈&'O0KnFCxgb7|wy. Z(z7u˗x%ua-::::GuttNɇ(ܼ<1877h4f5YvYkkD=X@ `4444.'׉ >oO>>s˗/X@VsG}tEisV$NI$իWoܸ/X/bQmѭVqhCioo悘IΠ'3;;;%nWPP @TfF<Ί8{h ===5p8z>Sg`cǏb1mmmϯ;wn5\T*'MeT;x_Z*ek{{SO=aÆƹsVVVΟ?^#m`IΗDJ>b|yNNNnnnnnwE=+++SSEBv;;;{ fTz_qv¦R$:a7ިڱcӗ,Yxbv;w|jf۱cd^H$ٳꫯX,;;`0M;v쨪ڶmF뮻.]:yVk[p8,!-Os'RfjuO g u#S(r LWW9z}u`0$p82u2bNΣ''_~ӦMjo?^+LR wyg֬Y7ox<$IR=ӷr˦M֯_'w7G kEsoir 2O~ u88N9D{2ݮP(2r΁H$rĉl_~yСbӦM홮zTkkk۰af#GzzzMJRRKwɪL98ιsw<ɿT(EEEhꫯ{*Rbq~ChgCOOOGGGMMM'nZL~PSs8{wwOsssF^cF:@ IT[UFg… l"IR<|^{y뭷\SǏ;O[oNTVgrj|>?cAݔ~MT*srr `wpj `p8Y 竫M$d2d-5IݳsΔFoOl=} -[%K~_+WΙ3V7<#b}-l۶xFbӇۢ SNn;ڢD} mr\,jO&LHOs"20Txnv{< R'|b(&=.wwwKϦiӦUWW\&LPq>F!~<#yyy>yݛKV eyoS$g qsxtkr, ̫jRP(D<^hmQr=y@ |FId*&ɷٜ3^DQ)ÇS 8eʔ$:m 5p8Y}>_+xrEFcF1#' _$ {Ͳ ^7e^oX,l[3ΓغN3fԩSP(V\9gΜL2B+W꫙e$hoooE:.ӅEbu\"_rU|%Gp::N\$2)W4DϹ887ԙ.0TH$ng=N"py,jYvWR泲ԁp8I_;vTWWzYY]qV Z* 'g(ry饗 3]8CB$)3))Tm_;vfKL1 9k#B!%tT(5쒜w9zh|"z>=㒒tICv<6m֬YfJ$>$޽;ySww+AT^p-LP(v%Ƈ_!^|ŷzkJ0p@5559RYVV&cΘ1COz;;; :BZ)G;d:`0 A\x'iw|]]&۝R{il)3b0ا :tH|8 IDAT;:uLPNc=޽{{Қ/By|]w%ojhhhhhؾ}ڵk'N8xرci\.j7t.\PNkV`@ ^y\.R2E18q9xK,ζZ9kC uHv%IJoӞ->y5,$2;{34WlVNٳkbbCJJ<g?/..OR>-[u$I'|rUW3SL/"F׭[w5kr:tH|l69$gCكzl.֓cǎ%~,˺urrr%\r%uHKKze]&O>XL>⇣`0xA@ojjjnnNnT*smI#hd._|I j4kn_2>`">xJNBSSS> A{LNN^?M?u9o߾͛7غ,,Z}͚5{o͚5|A<袋-[fC׿555pK/M&+ܱc$I7pO?w}7H̞=h4Z$l6$;v6HKd6'LD3fL!(H2l~"z9a:sE@Jtj{<wt\n[!P(VbInnXgVܩ]LO/\PL^Wغ\?ucXktMo>eʔdʕ+w-ƻv:t?o6ʕ+o.K/ݻwYYY,F8׿yW_}+??֬Yz}]Iꪾ 555O?$I-`%×=rHJ1KVKKKNʧ-:0DP(|>_0 y0t1#;~>"BTNYYY&Ikr:d2eeewYYYYc0P`P()=Nε{^1#OFbs$Y$6Mίggg|l6llV[غF)))9/xُ>hii.{n ]N VXiӦ|;"D?Jtm%YWWWUU5a„#G<͛6mZt[o}vݾlٲӧG^?߸qҥKXhe۶mbW_ݽ{wUUUw?!77/N_-Un衇 }rũF}EW(2-:ItlHΗB! c`P,BPvBPsIZmVVb1 YYY⭎bq8b,Hcڙ@_ 1#R<\ ^q&nkkk<OYGl6 Bݔڋ*rl=yru\y?ϋ/$7(++={v+V:u$ISN}衇VXgϞK曒$[%I4iʕ+,X<$Iڷo?~J'Z{衇Rw$I+Je+wtt=z4h4sJ~O>_kqD"QWWW]'$nj `D#?o$OvwwNɑ<ȃÑ֢9~*` d0 !hq*7n<mO8Dvϗ>S*M&wjMo~-ErW^x*'g̘裏.YdϞ=) H$sNI^WCPuuO?k)g u~_uuu;|pJ1KVKKKNO[t@z===^P( zz#`0WrFc2f_.h4ZVh0,KVV`0͢yxsZ`hⷷ`0L&tGE"9.ڽ^%K/e4D`=+++++l6'EMyb6O6νA9rD^'Hoܸ/ a|>_OOHwww{ǠzƍNTTSL9zÇ$>|Xܔy)D<<^wժU`r?$)MMMrĉ4i$9w\9p8z SʎE\̋~3ZVN'^ŴZjDeggFNgٴZK&72'_AØbX,}x(r\.Kk\WWqÇ?$͜9S yׯ_?⊷zVXqJ'KU*U.XγX,` .`% c='?#uuuuuu---bSnn,//m˝Ngii)p\XLt+>/{^1w===⺩WwW}eǝNxMX,:N\CDh4fV+syl#F/`0DS5t媭Mu'ړǹ:̞QDP\veܹsF'?ڵk%I'}3f?OݻwR~_Jp^Ǝ[YY)-((Xx$I\s͑#G?W:i ׾`^{mŊNJyb،3z|??NX,i~׿tYKK˟gDw+pݱX"GѨF=y q)%/Y,V+>Cl6b۳u:ZZd2t77*\>?6'\y۝H$g'o~w۴iÇٳ{GI$Z6qyC}8kU|h%b1כ~ &nIb([@ܖT*&:h4y?1s#0*f|&+B!r\.y>p\MMM)Dוz zLI>K.?)ǿ{キO&gg̘QVV6(k<fڴiӦM$iƍ/җ_~[mmm y`#s 3~_~(|>/ ~  B`vՉt{( B".//OPID?Ý;wN@4*N /Һu>SFD!~)3"#._-%]m?;mzʛv{;錟c:d2N{`0 <<֭[9*)zI}o~󛹹]닊^͛7Oզ7,?飈r\7:Nl\Db(ʬ,V+[eF3-FhLɗD"}gBV#yw 7̛7. ;zN$**׿(N3*l6KdZ dh44 87H`T x\VE`}֬Y ,7o\uEEEŅ^hXnm۶h4}E_d_|@P ch BfΜ9w1cdQG,\p…UUU;vزekZmJT=gH:F@ `X뮻+4L`7o޼y;Sum۶~ $C uj?xYYJt!2k,Iv}; /Fn;nݺuVMB`Rf ƍ7\جYD}(t\ss=ѱsI&e"1bER]ve}:`pC*"Ȗ-[o~ IJJJE{`0f͚> _tE˖-bӬY׿7߬ ^zn2X,uw}Dbʔ)7|̙3:ˆo3GB"ȃ>~yWZR_rߵkסCyٜ`"XrƗ^zi޽ׯʊF;߿$pHC–-[ߟbŊ3gJgϞ_ז-[nyϺ &9rGmnn޴iҥKS|뭷onۗ-[6}t^իW7n\t?h4ַFC6m$Iݻ۱'t$I{=Iz衹s 0w+VH]+VL:UL:$iϞ= 曒$={dRՓ&MZr$I~$IxyY,Fsy=cgT0rCN8!I.'/qSSS$-YDI$DBgϞ=hQ:020z<OFy9HCBIIѣG{eɓ{$4yO?K.ǒ$9˫7nt:{}#G޽vVBH$R#ӧO_paرc+++/N_k9rȟ_W>wݽ{۷{RΘ1O*޽TO u`Hh4W޲e{w BQ\\|W,ZH$|ڵ#_l2<ٳ_/rT*q^}Ւ$'xW_}wO8T*LrM7c-[Au "Hd`P(+W3gN SwwܹsZΝ;3]){GlْBpF. D"۶m$i̘1:]v̝;7`4# f]q/t-H#]2] )3]` $:`pP AB08D"5ÀB7nft!#Smm_e˖L3tpL0t8SP e $:Xn IDAT`p?28.IENDB`objgraph-1.8.0/docs/highlight.png0000644000175000017500000013634012277007131015760 0ustar mgmg00000000000000PNG  IHDR[#bKGD IDATxg\Sg_{/" [k[lkCv<}Zjֽ'( Je,MHq$ "#}\%ت.$ UurlUWЉ,[_Ed̙*tR2AF "3G*: iq@"$ D $HGPy,"*rZ1MʴU?kA@9ϲRuJH TOl͋r_MՅ8Hɫ? rpF~}]3%~P腠wA𞕮3"p m^]uONZϸ(IgNO 7v׾aLϴhqݣdG}RN_Qޗ%yWJ:w@^q峬1'sOckt癁"O(<~M#O3-Jt}oo-{kUz&4D4FӒB+/Q붹wG|eؽYya;<1eGRӄ& _Bm\MJ\Roͪ11?{߂hDu(]KӀzVޅH06"fdϔj=cG-oFQCk'|xܠcF,Y;wtcd"~NDQf⥙ҝM՟""W17 s6Ⱥ7Ũ`ع|p-H YOum%dsNNxѯǞ(.7Oɤ]y>ND]{QU'i=c,> IDOlݻ=H;OӀ6ȑ?Yg"As(thVjVE7*y'N:=;%sY<{b̵JGʱmQO%|ֆPN?3bsU猫Q_ze}ڭ=W]S!n|e,k߭4 QOnGnig"ё_d%Gf|ID#WKn>>mCwk* 7~ f]S-ImuD0+~4lѿqQi) ׵틵n}غ7!&my+*ُtu@H̊gA_WYSm#hv +|ndGEآ;y5qFfGh"";#LːAIfV)yt`l{ifwNK/gRІs>fW*n_yͣm$~fko~;.iW\Ү~_H_Qvk3ar0K1S-׽K6SF GDyZnd\ M97/oryCέ#3>P+hz_Wuh1~+3(~Phdϴ1l-k}d 9T CoVc Q|KtÖy:2]KD"ul0f>G-lo^7oK~#=x>y?dֳ{gSƵG:aUͮT&/uyݼZlco84k̀0̦wZC7kE5☷ku }nk#e֊[UFD2Vi`NDUϙ/Dq&,"thE,Bzq!j=c׬7X\PE^"Gh"RNҮkn=ouFv C﹏9 >e߲1|i`Dr#ED~!n$-¯ c#H aZnfDK6# "f>'A<43&ͮTSNz:0n"ڻhxK*;6דqnܻ#p""i ?nC/m%Y>H46-~fRXѤT^|޺)hzE^Z3|7.r`lDxk.7zş4MMi"XY#hvu5XCKn\솇lNմj=c"]čDTg"suk'LS3Ɯ&e֗ޚ1'!6*f͎/%R#4MM6=vK=?06;8q+﹏z7fM.:AEJ;멜&%]K<B U`bP^d(YКݣftJ}r#+FȢ &06:Pfҕia5lxvߘDhvEۤT c#R3[:MzJ&M J Ҫyt@l{)}&' X5ٕ5\oe6[C~^o{<\m]bD,9L":4kp{SfߥD6L+3wˤɴ1)UfiVkV]+jM@ u(SK;1aPh:-=ic4uZz7f{h}!<~u˿ģj>fW*ZNDrScsv ޡ_Q­sWZw7(ʍ,(%j[^p],j w+RG;06u-`[aĮO)1w}[gIz؟^i8n}-)3M3(+jM@˿?n?_}eHĢϫ8y-fGbk!cv#skY?gz̘nØ W)dA v=O$ܣͮT\JI;ى>poM@~?(4aМsPPgsIk@.ٕmcϵU>Sƾt oYc~۰WM?\FE7G81uJ^ikwKC82V[V[?e+〈 3)}28C7g87+~lO)ROE=Z\"|[L(͎ wNOZ8hLF脴k+7-5tZյ, vȥDpeiyǫoVm% 4*7< $${wK@H@"$ D >[~ʼnD9tS5*ڀF'^oueD# E"СC 㣥ՒkIj $MO@0jԨk׮ƤYZZSu(@.s+++O͇c!Np8,yxϛ7O)o;v쐻r嗤|HYf\פl6ݻJ7O(p\//^zM87ި;KǁDeeerH$ڵǏ?r䈻˗U]c;B"277$"b "?~۷}||FbŊZU.r 4hӦM.|ۇz}VN.]חndX۷Ba~ۧ Qr۝V\9w3f<\Ʌ$@Kpu֝;w.66o߾qqqm ZnĈ #FWu9m*vvv/^|Ν[U%;ӼfA"/^x}C"DSSS?C]re֬Y+VWuE/M鴵lgeeݻHEl#+V?>>>~Ȑ!>Tu9/.n߾|||\rDh/W\:tرcwޭrDhG5k,Xf1,/n:33UV̕ԓVБ=z )**ڿ+{ X,ejI&EGGmvFGG<~XȁD!\\]]\!C233U],$uܹs#GLKKSu9DuS,]B̾@}}?k``7lذcǎ1ݤեKu6b @QdddkF(**~gN1beJJk@-lܸ1//)>>wiMΞ=khhu֢ةST(Hѕ^ޱc<<AXS[[[UU˴TUU1WFE]==rP{jŋcǎͽx񢋋 +^>}fѪB=(&&FD^zѣG.eBa[Όϝ;gbb2lذBUDYX|yBBϏ ky(,,lǎ%%%uuuqqqӦMcZZZÇ|~fO<'NIU{:RǑ#G6~^pSSS&NvMKj}"Dɓ'뛙-]ŋM$H$o<==utt vQfxnݺxicPh?vvv}ݦM_#4ς k%ai͙6mja1[{l[mh* ꆋX,ŗE6uԼ7nɄFӛ>}Ǐ:7&''߿MFC"@ ͙3/7sLmmm9̛7oڵmr&-4fSSSF>?gә[.77~kPHh!.;k,ssÇN_ϪZ9Zn[</44ᨰNk/^o88-'<::mhq㜜BajjjÉ8pzk ;ؾPAdee999)$ȧtR###n~pΝ,n޽{W!--8$֐!CJJJ8S3g6ٹԩSݫ:t(}'2[::: >@>WWW":vX^^@ =vXIIIUUUCZy?h=//;w(1x%''Dt޽v ^ݻwD DJKK[nݻ7ѿh:pL^ /yE߿`$ȗFD&Mp8vvv&Mjrr2GWWۋd֖5' @WzyykLKZZZW1sqqqtt6mڴidfddwwP&ͥ5  _UUնmꪫ& ̙3uuu<`ꄐoASxYjjݻwz-'D~'UMhz///___kkkWVV_]rF!Ǐ߻wo'111'Ntqqqƅ K-lOOO .[YYѣ7ndee)wRHh5c OOOqِ!C\\\l"ŘW^yE|͵1cƔ:ƆnܸADSL?{1JD46炏O<>ߥK &888={V,++5jԠANZTT$$;w͛:::~~~}ƝKDݫO<$޽{K}DEE¼O8H @H@"$ D $H @/U]ӧKlH & ^r !;;;Uِ^Uo̙Z @H@"$ D $H @H@"$ D $H @H@"$ D $H @X,ն_vN  ԎH$Ru @m]_vێ;dٳgذa&&&|AYY YYY'O600066^dIyy܃ͮ/^llllhh8mڴ񢺺 6x{{y{{7|>62w+**^usss.x<3f?^҉Z"##Elϛ7Om si>tww/++&~gvUId޺ͮTg슋E"QMMM@@@ê^WWװ*aXH$ZxqÑ~"##_;w~ܹO2S2uVÇ?^WW8x`"Zzx4;#"ggx'''&V*ČףG"D"t߾}{511!76JfX.\euuu믿ǎ3fLDeIh񢼼<"244d8ٳx4;W^DtYq3g6Rq3gΈ[N:EDnnn"ӓ/]UDDy{{7JfX'ODOPP;Sm۶LyvDeI>/T#"pl6xJ?11q-^|~||<3s9o8p222)U|fˋVZUPPP[[{… (Ҁ={ #G: vUSGhTj(}Z\.62wg.gڰaÆODEE,?ܵȭDƲe^R8R Ο??c [[[&>!?##c„ zzzFFF-""KK&o-++[x)Sjjj֯_驣aq0~7WWWgoovZ񁏦+~%Kzr}}}fm%Rۭ,+22288X ڱcŋ v%% QN[[[[VVj*"zWT]WDŽ>;rs4N_~j{Na݉'Fmll_xQKKKuuLFu7~ǫ D $H @H@"$ D $H @tXvmAA[dd ;\4Zx˖-Gܒ 7oVQi*k;w.3 7|6o- Z^ٳg+h+Hh 5o<pc~_ $ܹs-*Ǖˠѐrϗ>b<<<%&B"@˅ ]# 4ZW|Q(M DV?>s(fب"h$JHH62tHhKKˀbOrZ ,DcƌTu-ZcfWu;uwTb̙QQQB!4^hhKׯߟU)&&FtHGRRRT]qh& D $H @Hhޚ5k֬Y]HЎP~zU mxi̎  ]vz}}nݺ9;;w}氍rС'N<~N(߽{w۶m Z*D뫯_]]X"Z~h$aIIIvvvEEE.]T]Zeƌ _Cj($5krrrh8t&nPHh-6HD%%%7ndX,H$kkV uVYYP(믿QjjOΰ4ۗѫW={ἃC"@ݸq#++\.ʪo߾I&x/^`3A# y2Kuppppph:::SNmʠ8H @H@"$ D $H;Baaajjjjjj^^H$RR'D ªUT]h$4Jz7nݺuƍ'O|ww#FH?dݺuǎ{. uꔙ˗?~LDuuu.]2118p :t(11Q@fwb/F &_HLL}Iy<^~~ѣG>|xqƉ{&&&gΜzaii)ݒ$Bs@@{UhΜ9{p8D*s閖<oDT[[+RPP444$˗/'&&VWW-YDOs6J~~>m޼D"(--imm`.ڰ9 Tm@(6l"-Aڰ9 T;B.]V\٥K6\Ws@@qPhǎ7odfm/**JHH_Z瀀vmNAKw_||}}Q D $H @H@"$ D A1W1"*))Qu :^ ?yd$+I"ȑ}YUʆmc۶m={5j eC";w.Y;!$:x`uu5b +<<|ʔ).TG_ܹsڵ .P l#lٲe.Tw~WqLB"DTTTmmET] $çMfnnB@e7oǿk.T ۺuk޽U]ٳtRU*D"ϟ?_Յ!(<<|ƌ8H$SB"gȐ!.Tٽxb߾} D"""B!)3g411Qu!Z|||JJ )S Wu!.Wii=EDfΝB@ :)Hy搐cccUjYbccݻsNUTxxπT]$BPVV&}"4D~'oo-[pLB"t w Zdɏ?8k,Uj)TTTp\@PSS{SNmذHեzA"t (//>rppxWUZ$B bz۶m'NPIU}Nŋr9k駟*P[HNA#mڴIB"t IGi<+22ᨤ$PO8)TTTHr666'OSUIBUU61008 KDĉblѣGU['$B'jjjw#""z@!:PHDl6/9s+Dć|͏>HŀsqʯOuu5Uq``ON"?̮qW_[1ԶH'"^P+S>\ 5ǟuŎOV%E@"$ D kPß "}3Qo`92S?Kh:l#ʒGqCP1$I](WuЩ!ԅcnUu!Щ8p \rG;'Zr(~DDvAN~ٜ_Ǫ'wN,;1nUArO=y,?C5b6%`O;A}ظ40''u~-qKY~fY~fAfy?9ܺߖUxFD7V>"Q⡵y)g %yvg^ \^ 4A]X^K$#fW~S9 6?5ں"OI>ARVܾe^3}3;_[<#Eo[BuD$"?mg Ůsڊ0DBH(""YO``A^˼[fË#ōWؔ?m4YZ$u -?7b>#+}v<몞˴{QS/uՏK>N K& =Dt}' DBQNw%6a6nL߬o߈Pݢ{?'YDs3%W,bY *}"wQIk 3HN<4jqxF]G5h&6GDZzCo5o+ 9 ~=RȒrxچV=\CI K$8/?+\y=t@dddp/tH@"$ D $H @]J*:O],?]vu lUμ0;BcCKOr-KDB3~'+JX,C_'Y_"K'fVn>^҆PY9nŏn{t2.̷wK^f}]$$//?ں3)+.R/]۵衸 ZA5hSoӯl/|pǩ~&"o8AD7wasuu 3iZue>ϳvs*soo[Qg~,Ms껀ۙn'vbsDBaB䚊}Ʈޏbd]Vwr,?pf%POn At y{ mb|3uVux4efׇp=|-^Ĩ,!='.3xu>GKiYK˜̫WՀ-~$|nGvVfWʨJ9퓿.Hdc*=̢M  &,/zH"P^Cq2)~t;'%+6]"Mr<m8910oz(D~3}KSA"ѹ)ݿ\ӱ5 ٕOfn?Mɽa{3A(X,+^ܡ(fQ͗پL|ųg gm|#Lw)hř+yMAb켔^(/tlm}SmR;q?}ɼ}[26[Cv|䳬xؕ]݆q?I˼;M,AÁ]zr 1jV>R;OCVѦkLD 殶Ǹw}z>c-D=Cz?cFsi:xO?u!DќLKYqOc_l\E!"^C{ zzrn^WaAXl?D8j+Kۦv}=lfM3:򢜜J`g4b1Dx𓼔3=ϓY ^!A<+43+o'{.7ti䓹'M}p4\G`Tgٕ5\ J ={7F6|__Sv}.=2zے1L"NjR|Dz센O])ɻ[wyuu llagLmŏuV 8+2jHD"'f[sZBA`(seVGOH[TP_ǯ3mzS1`Zs o[GK]ck~}㮮ҍ&6DTϖl(uUO]K9,;juu r_jy"؜.]iy)eܿ^p:5c,sVckVfW*pr7[yX,D"!sH1%D{[1E9I-ʲGܔ' >AD=|{8ߴuޅ_şRiZNHiQ_/{&FVj,|Qcy͔p (]t<~ab IDAT)kyw}GլͮTLz)7kX} n~!K{ \[τ]i.-=S"ʌYWBOixMwrrSNgDWӣw䦜fsx}'f'd'0r rkl}?6BWf&Q JrS"W[cGD|Rp_+d&lzgEnޝZsok;ǘԶG3zӫsS䥜nZJJ -KDFV=,h8`58 .ȼV}/Ye[Kq{{)i1;1ywζ`(}S[ Y>z??#,r<'I>1ToHW>k;Ê%GKk "OϘVΰѯǀ>LDFVNÖ2[Y9y{5n]Jkl2tP9iAWWI72dM9]YX,}3{{qNg%H9]kcWj ơRgjkQ|b|~O] xlk*MpQGv<=Vq5M+p)XVuHPD?G~l "2vq*}!Ć^Cvc>+F_(RO }w݅k^eߞC;4@ I,?S(tq2dW[rH5/ʈ јmꪏ7՚UUj 5t|:1z &b,*|a5h2$B[`M=5{DhS7 @8H @H@"$ !7Ɓ(P99:łW\B@Q~~~.Qra̙ʯZ G $H @H@"$ D $H @H@"$ D $H @H@"$ DX,j.tTHhc&&X"H%2`$@DS,]B̾@}}?k``7lذcǎ1ݤcB`8 //}&'={Vrʕ+W`Ϣ6ƍ򜜜kkk_~Ν&oڴٳ[n-**:u*InIQs" GDՕΜ9#n9uCٳzR+"Fz :TD "2eJ{ʇD $P=(&&FD^zѣG.eN.¶,4yd"Z|yBBϏ ky(,,lǎ%%%uuuqqqӦMcZZZÇ|~m]iP,I+F,Ս9… S+8/<::zfffK.ݳgOy<ީSOOO}}aÆw"~7x[n<O)C[bpXñX`Uj****$$DO:@ZJ 嵸6&B DZsA 嵸6R>$H @H@"$ D $H @HNgڵnnn.\`kk@!4Oqq-[8@B͛UTh<5hs@7|6/+:^ٳg+Hb͛7O@"hs61sA#\cZ ϟ/}byxx032AS ]3|AS988O4 9s樶$l̡6occ@!4XHH62@@"h0KKˀf6ӧm"h̘1:ҩU]N:Μ93**JU@ Ze..\ Ktim*Wu ԫW/###UWA .#hd(PT;wTu a$ ۗfH̎xKA \p!66ӧ"1(([ h AUTT|%%%& ݻ▴4|e!ɓ'KJJ^uM?wݻwuttfϞݯ_?'OΝ;e&֭[D4|GGG.u]FD , 400roʅ ED }m C"A1M7ښn߾-w)s5HԖ%BDPGݻAVVDAѮ]bbb*++볲6m,544$7oJ 5|LK߾} r=:%%寿ھ}ezzz^z~4?۷~``kDx̬_~'OՕ~͛#""8Ǐ_^^{d7|ӧ3ZΝÇwwwWC"h0H'ny٩SRRR>cq(QxxkQQQ'N!cǎ >v#~I 4@cs.DGGYXX̙3MKK+777"""333g,++[~Ϝ9}]J0OD3g:taUUUff|A} MDaaa>>>{aaaD(s…ZZZ'N$'O0=(--111 4Xnn.}$ueFQQtO{{{sֆ-555%K߹sΝ;Lǫjdw\SoHžnÁb8gjvZjkkm{;z[ nT  d=' p'O I>Ǽ= tHS* .1ذW_efffffoa'AD"0 ðgX666}mK,Qqq+T݆ cǎ%o&..LP򂂂3gΰ矟;wLT԰3P“NKt>9FiӦǯ:!Ha ׿rJEEf󽼼N:uΝݻ1u+Zjՙ3gn޼YVV&H}}}ǏF:;l9s{;~1<<\ۅ:O:#<$C"<$C"<ᱜ>}Z%tŎڮw q!Z)$$$$$DUDNR #<$C"<$C"<$C"<$C"<$C"<$C" D"Q1Aü h&l#;u\0`֭jݶooiii``ЧO+WVVV -ZXX,Yуͮ/^laaaff6s̬,kzzz{zz~2md_y啮]J$IRkk렠EH 1o/X@%g{*y5|UVVrq޽{>}ۦٕr}T;ږ2 S[[װ1c7JmX kaf Gn8n kS~4: &#G=7mvؿEEE}}}bb#wF=˗/'>}ǻ49԰R ;΅ hʕ |Ddeek׮;wZZZѺuV6ڢ}ttt]]hddDDk֬)((P(8qbdQK<"233cJDgۗ{ߟN8u>~xC +?~k9z( 0awww"?Tڱcyzz6JmX#GagҤIo͛8$“E-d2ڽؘܻbX,åRiDnF?V-6АaCCC"VPZjjjT:uƆTL4?NzDE]Qk0DP( RT*GVNrylqN>nݺ cǎKR ! nnnDtڵFshёۏ*66CD&}~ȑ#:DDn Q~~>ܹs-\D"=z+.]DD~:Yt)M:u۶mr.55uӦMÇoڴie2YbbeZe˖%$$dxv{W_ݽ{wMMMMMMXX[*wfÃ~º{%+۾}{^^B(// | K6UGhxj믿zW^}،H$Mh#ȝd}5jTzSj.\ѵ4Z^zB#OGJalllRҥKjSSSNjlllnnhѢt"޽6/211 :~FFFk׮‵eWWWTjggr>4Wr%K899I$ 6fA` JD"QXXXHHHk֭/?uTDxx9sZIqdƌΝܱcoMDgv]^G$""=;m&LwqqYbɓ']l#&SL2em!DxH!DxH!DxH7n cc%KpVVV999ڮ }'|ٻwd2ssO8ݝ_Pq4 `?N.\p>jH;{,3¢G!={nMA,--RRR*++ܼ]A-[^tҥKl_{5 …D077iii/_tO?j4*$8.]zU.H0 04 `V)--U*555 D0 {/{ ƄB*AP `7o޼yZѣ^^^N/pD?<::ڵko콋-ONN.++fS]u_~k/b;VDxH!DxH!,;w0  HHvo> Hvgkk;|p__k@" 6hB"tR '_ʪ֭СCgϞmllm۶mٲ%>>^"Θ17oNJJן0aܹsK-i=h Aٸqcll,RPPq7nLLLdoo߾gϞ {v}„ 9 xHhj'OcѢEnnn[lu֟9|gEEƍusCQmfA$,**~!Cbgg~U{f"=---(%%e'O^jU?5l#XNN{rUFQQjO{9ֆ-"x!+ʆw]XQOO}ca s@< vvv_}KpA|aҤID矟9sDPdwFEEyyFhw_"P]|yN0f̘#G|wmR*57<$045ŋ rĉ۷oWVV={8p̘1[9 @牰A:sv8ׯ v!}C"<$C"<$C"<鱬^Z%t999ڮ삃]ѭ[lll̴[F !ZWUD> $$Dۅ.q!DxH!DxH!DxH!DxH!DxH!DxH!DxH!DxH!'v~犊 ՖLnٳg@0kG/n޼]dF$e2eAAT*^йϙ3t5omX8VC"ϨQ)dsz@ GOOon 6KDsd2FDpB@+ ˫O>jr B5|']]]z)m TW("ˠz@7 ݝ;jP(͛ݒ@ l…bD"+C"ܹsJ%aAz=l0H0LPP]Da޽{k 0mDf: naF~ =bwֻϰb KhR#`1V8آGsKh#xH!Dx:vnHOWwF,Ks2j x!:Q?(rmWO4$BgaѫoMY^FnmO4G,ƿvn)u2[OhBv;fKCUřDd+ߨEz^ǚ Dz;I^VS!5m3nJ 敏 : ;LJa/g\Z*޼|[g_MO,{Pó* {3vՔc9KҜ[7ݻuzk@PYDzn_#nn-θod1|\ Uő\HJDN7 Y{s{*V!=aw&]lG-igBޚnޕi)?vӄNЉ{N5~ѝ;̷D IDAT||f&10; =c"N>@D7]=Ү>VFDk6^jh't4bF"ʻvݟ:Hm;߹y>ÞU=v`=pjDt8rwo!+Q!DD CD 1썚6: DF\=uw*I3D(R0JQ3'йn]ص_2TqֽU/isI"2DD]g&7(^E~4@8 n͡\k:%*QyCyܡm%4R!/͹C%3_JT(UřaQw̳NJM9]y1poD:%ّgwٸ)8 *OI=+9`a3r 4j֨'SWXvK RCޮSWXJDƖa6Nool24wjxp'YKRC^}Ɵܠs65aHO<'ԓ1/75IQ~`˦]> y\9^G^05fkգ%Y$<ߨ繟9K:[Ogva|1[/XX88=~#ܡ4ʩp-ե9ե9ٗy]=+֥]* N8k{ݛ}iT/6 :w 7~p];Xg+%;q;ʡunLضՊ{b>WAw'i@D))Jt}Ε#D4jOƈČR neHO\t;fkU(~.i*m)K={~J7d7.(+q_ѝ c_ݩzKׅl8V^ 䈂s)'SNJ LlMp wxS# H+!bRvW{@{ϩܟ^{ϩ7"_~ΆDZU$0Dog'pQuJ"b$8y177%w\ y׎7ͮɯރ]o~JtDh֐٫-nG>s^[|ػu5eR6Vs֖6sݛÈaj؆0JqxXYPY(M} ¯=\&;I>)˻~[٫AťCkՒEb`={Fmui9Wg%74:?Ω-#D"};ݔͮp5l mlvMAi&54)Pah֍kPNDF=}vI7"'"#3+I=W|unޞee3>p&"jpDV[ .8?%Mˇ*duaD"j;_(Z+H˾w=4riz08vЄXӮG~_UٮS4$G~G os}G7K y?Nu5n23ęuwRolahU!VXJ Lڶ̄D4bwF=\C J+{lT"d3.!X~9GAKqK,104ap`~#Z8HgD{vS߈J>Pp;ޭ{bR#q^6_WjJfWi^oNwoD9 hna!TdǴᘢ Ga%YəT d&#.CU{^9$kس_>_xWW~}J[TOsie"jzT;{opLChuO9| FBĒ:zظK\(b4ſ~tgN> ymC[<2LlJfWQ]oҾfฆ6[L"J̋{T(g{}I"ʿy DTB!O9-yHXc)QNKq Rgѫw`?EƖַʝlI=bNDq^/;+%Yg-#.O5(G@":{bZޭ3!g_Q8_-/\>vw: ~Kq@m}c>{Pq7;@Vov) ])Ǣ1pc^k#޽u0\|X#g^˸FiιmsP+2j1uztգv+_?Jb)E"=c;޾kŤwo.rUyN{O J" R)i8УϰCP=LDM|G5u++Һc NzW}Es7GW6S܎ݚ|8D"n^NIia9=S}Af|h6%ٗKEzӮv=vh%ͮ3lח' g^45%_ؒ[VL^;R{7O?_A^D%Ɩf_ lPDoI[BD]GH󣇕CoV{5iGߴfuuvS XYHDF={0%#jg}a*Te&]l' ꑎfi~]&/?HEDUxx9s}?SbA7 O>ixxxǬ\3-8B>S "n0_#"ڭ!Hdh+е/q=eKh38<$C"<$9~ᏎQSK4@U4D烎 #D V):"(,, / GxH!DxH!DxH!DxH!DxH!DxH!D'D"QSƐL 1 #`xH "̜1c /P]]Am_@.>>>d`///]_5dӦM;qr̙3g`B`hݺuyyy...uuuϟv횆7n۷ojj={_u???cc۷oرΞ=5#tFw8pT*uss[|ǎ#˗O>B*4h͚5T.$Bgt]"ZTo7KDFj@!D茬ʕ+\:R^=Au :#X_"SRR+ y"Z~Ç߿/nܸ)66V. l8͛7/222//綾^b[Fy޽?>))i͚5 (9rZpm~9r?C %-[⢯ohh8xkײ3gիDxtR{/T[cW[H$sΝ;wnáLMMy(tDxH!DxH!,ؘ7o2 GHv c ڝرcnj`? ~ $B۾}Kh)$B'y΅ǏwA``/^jIP޽;222''򩧞1cO>{$1 zH%??Νϟ駟LLLO?4..?Z[[o߾DT[[m۶={Ѻu>=ӧO^ M͹pС޽{644LOO߰aõk׶mꫯr=vٳg_~%,,l͚5-f!**^y)SXZZVWW_~}Ϟ=Ak};x }'F255H$_z59sF+ أ}7ث6ly!{^:>>>>>m:t|`ee~O:l#W`[Hzz/t/]tر֭k360D"aJ'֭[۶msvvnubOOOOOO"w^ppŋp|̰ ι0sL"ZbűcNJ L&=p#YlNjJeUUUll,1Ol#;/.>F\:ujZZڞ={>6)\p(vx 70008|IIf[o5jԨ_~\,[[[{zzN$B+j ""HqƐmDxH!DxH!DxH!DxH!DxH!DxH!DD"m?꘠EHaGa]hD\.mll uVn۷o400ӧʕ++++LMM-,,,YRUUAfWJDUUU/0339sfVVwW}}ڵk======KLTU6կJ׮]% [}||̤RuPPPTTTO$˜,X=Jy*++ѸwEqqq޽U{N>]mJ>lmmKKKkX՘1cV60 x#7J)?YDLGG{ȑ#ٞ6mb;߿>11qĈDrq˗Q>}]\\jX)Ņ… NNNDrJa "ڵkWUUUUUΝ;---hݺu RVm>::m422"5k(҃N8Dx%BLL wW^^C%xՇ}ˍƽ{OD'N:?~ϡr}?ε=z 0;Uر<==V6#GT3iҤzkiii uɢ2L^`llLDbX,qRa"z7ZMMMC +chh0!UWWPUUEDFFFa-555}N:eccC*&MTXXS'=R"Ȣa5a"R( BT*JF#N+m'rv68YYYO^n]HHűc^zQO777"vZ94HDqqq\Gݎ!"v_~Dt·""vLMM(??pܹW"=zŊaaa.]"V? Dx,]Nm۶\\^WWiӦÇ7?m4Q2,11qٲe^ed2Y||<;{=ꫯ޽&,,-;3ADovaaa]]]tts=גm߾=//OPGDDY?#4W_NP]XXثW/>lFH$o]\T>5a=)p{.\ZDK/e!Ñ'#%0QQQAAA666R-= IDATmҥ SN566677_hQzz:u] ŋ[YYfddpjkk wwwCCC###wwkrqڲeT*+9%K$φ ry3SH b%p"(,,,$$ֵuŋ:uVm"<<|Μ9-8h2cƌsUVVر&ٳgk.h/#hx{{6hr &XXX뻸Xɓڮ @)SL2EU@6C"<$C"<$C"k+W^w<777))k߿?{aBGD>0)je``PPPE^̝;bɓ Z <3f`'/kHTr$h$Ϛ5K*63ǁDy5I*SA&Nhee( $H}Y]3F[%n@"ܹsUwRihhX,bIB5rHkkknQ&i8+ BHDv ݒ@ qJ ,v9 DD2c}DEрݵ] ҩΜ9gi zO0A۵ߪU]<$B+FEEishbbbnn޻woHJ^KS 8H_jJNNvb mm3 $C"<$gSm  \|Y%.6 0P(vqر:+++OOCr ;ؾf!O?ݿ?XRRO>A=JDoF``UUUՕ+WvED/_Vݚh!$u-???))O>>>>~~~~~~ڮ  `|{Ƕ1O?ҥv ¹9z诿'N455[z6boooooo"ϟ:u ػD"0JRO--^ÅJO&"a{k:uJ.kHl#XrrrrrZi#Gsƍ}}};!l߾}Dn:SSSD2puQttjUV9::,YjjjZ222؞ݺu#-[DDDܿڂKKK# r- ðW^{j~7˱6ly9 pF0ïT]YŠ /%1 ...))){ӧOK N0g"zoݺk׮UVI ={\RVV&mmmZ"s@C"}GQ&_:t/6\s@q!DxH!DxH!D~X~ v *͛73D!lڴiD$CCC]$Θ1LLLymkȈV) ]t!"m۶ixǏvaTi'Bpp0Qu ;7~*޵c=H@8 o#s qm$K]$C"<\yU~ uwIHO'dxr`*μsmWO:$B'rWJLU YXZV9Cۅ : )+l^rz߹bA}3/YYx,zqz:xW/)Ud'~ޭzzC4$#><5Z+Ӟy=5$BghqhmeAjm/6점E~;0Rw,z oKjʎ.{oZڪ 0[_H5Tg^?])+K 剁`< kGQvSa9}cK6~mߒMcS"7>(ki꿢|_0wSTGH۞ǴW&k;eh[W~1O:9$B'3ӢWc4wz'YӐC2/!ܫGhܯ9zI; qۈh[<뉥]=Gr.jND$s+u SnkWxFtDzb)}Zq];Qx5z9pD472.*8_s\]3<,Smi;? *l#tFCͺ;5%=#+7@,5q7Iw۹OX`yz`l[O,K -]^2_7a3hDd֧I {%ys3o65i7K=膃vutkm!DxH!DxHuw>%AЁir.߲kD)=** r.ιr$+?WUI:^ʺߠg4Q.\.1;)~qH׳qZCNIw\a|/~[,s΅!8/㡚;d&0C^WõTgVgf$y"9zI>y?xP~ĆiYy#GrϽ#CGꑯ\ѽ uPU"%Dt̯"{)jE;xp X= 3g.OQY?W'${l}D4OMI/U1W"(=>䏏:2qǿ=ȆwaJN`[~`>M_{N{ڵWŭݝ|RԠ/FDe9Wn}2}PIfII۹OI ZOG^?mMY^kp6B]MyvrDF ܵt) ])KV[ ?$?]ٻnkQoޜ~!0Q*9y_f>Hѝ c+~YW{ sPjPD2YFaf$.H=.K-]Va>Yq i Cnޥ\~+{at"ryVju!}$_e`@?5xDPjsH؝#VD} ;w) ])ezDspIby[4WR!ٻ)qqq)7O߽uf+Q U F+[7"_.UAي2v CDwou6˶m?iVv,ZUD47zTIV2ٸ͓??_dlcǔ][>eҝ s-s?޵qtd԰Oke"0JŽ[g2wg_>Iu9Mb`) b~}oX(o&pS SQcv-g$4unJ%*ͽ?{)7*ϿGQê])׳ޭb;,ڙ__.ɾ~[Y l 7Or7tHO\a/Oe-?h3h1/ww"50.͹t®Wg?-J>X6IW]42tȚح\>,"|h->ui^72v|F.#w.\Ԟzѝg-ե97O{wOuoDu!";Ivu5ٗewLcWI M=: :Z'n3Z*fowsv~:g&g* nlixg&4d60[^ʼgU$ "vJnJ1;%\:h"4R'nNzsk֐FD綤;qɟ~_V[](lcy~GАĽyN0LuIAڰF),H{PqOAŽ{\*v7 RZQ]}o-y]$&.C S[U/#awIfRz|Xz|Y9_n8D";ߔͮTe].ͦ=ZajlJ3y]ui]M9u5Dod7O|,z>=gm֓'2g.v'#"Y4^i~Ͷ`dӑu^=&BKF~E$|he"q晌9g&g&&o=`Sk`9̺rxv]6%Ap:bc_vI[@oYV eӥ<ﺑQDdEYw}ӮRMIAD/fd3D0b[]V< jr.H}v;Hb`b9`oC W+A'qg6N^0ьwSN߈ο-7st{v) ])zM6r,z-˽s({uu"1 (CM_AD3?Ƶn^F'_C@?WENAEA՗,kie"?hQSrrFߒ5.We&ɽzT^Rql>Yo'=$FN>-y{&f&=yթ$hvZAD^5w-snG]MR^_x MQÚ7( MѵcՔ+dWML 3"TOѯT?zt}Fn=~x晛7YZp2pܫ&]loDlI=EDy83Q!SNusԣ__̿*dףb6@lȚ_=.Ƽg9Ey"[mP *㗄p/6lJ*w%t@g~whE+JJjNkfd:5^Ͽu|uY ;eIqT)!J/!!׷5=ya9a⏈փe9') BAyr9`3}򖦺|*yb|=l$?>6kksL#gTzicdœ}z TlQľ[n'K7Q2n&y3>j~U5eIza+uy~K,H^MfU5 SCK=}.@ܓ[g,,C tz˸.qn6_2|:ަWBB»v}M*!)n36f6o_JzJW??B8LgS'|^u?S]CY3vF}wuaZ~?yI;wpYcAJ y9zmר_:w?ƿ~nl9fͪ2_꽴޹\QpJGy]kdj3gG0dȸ)B)uOB6myؐWUN``mϿ~8dkYy~f=U^ 8eIhH跧͸Ҭ_?r̜7rdrO8}s5zwkx)sG*Z!,L9`b=~b+:$Bq86|{@"tCP  D1$!@ bHC"X#+:7EWѶ$wPeЯ߻or b'NTtmK"899999)('~E D1$!@ bHC"Đ D1$!@ bHC"Đ D1$!@ bHC"Đ Dq8EPUHfVkcnh(Rt #!ѣG^^^zzzAAAR }ƍ斘H7l#Q/^>y^kjjig͚ʬđ @Hxx'OlmmZZZrrrܹN9rƍ^^^Db ݅#we C !\tY"!8j(BHLLR/>GB\\\5/--%̙3 C"5!$;;YNB(}rA$ug /H k5kִߟf͚cǎxܹsҏ׏r9>Cw! Z333 :#[Fy<ޔ)Sl2),B7++SWWO>AAA111r))){9rszjKKK.+;q(.f9B@I%$$NGĐחYr(ӵ;D1$*ʹ90%HC"Đ D1$!@ bHC"0 ܾ}[ 0EEE̚)4`=$|IIIkBBB555={&@Eਁ}<UD`///mm6DrT }ttt͛}MuuugΜ)@e XiѢEgCrޚ ) TݍVE)P SYIDATHVXpԁC߾}'O@5 O.^X]]]% @" 9+ #$[q8%K0'NTlI,8p\zf.B"ѣ !|>>B@"ۧ~Jqpp9rkUo:uRff_*Hss3!M6MѵWW/RU@ ::--mي-C[[mtM ȑ#.M0AU+V(G`=ePHC"Đ D1$k 0`o[HՇ %¤ G1$zelll $@X@ 9rjܹt38A|rΜ9UUUbll/i32259999998BAJIIHNN{n;駌 =={޽{"))ÃH 7< DPF.]"ڵ?rcǎݵkW;O>Mٽ{ŋ\q;&rA Ǐ !wRurrj}YY!dƌ=]<$!!$77YN{;;;Fk"DPQHe4}tBۋ|͛7CCCi`BHhhh\\ܫW|~QQ}SVBH߾} !)))'hݺugΜy}2}tzpMW\޸qcGLȬxOchhx~\.7666,,lС:::&M:~8Ν;-[fff&5s,@k#() (5RR\.w͚5k֬i)O^0G1$!@ bHC"@ʼnD"55YHԤ#cc$knn=pb{AJJJJJJqq1EQ2~"]DP.]:?Q4hPHHHfff"BwAAdee)x544}%%9Bs.>}zܹ 2778qW_}k~zÆ _xrJo(@ 8t萻٨QjSSSbE]̙3̚^r%))I__Yn:zBBΝ;-,,8믿Bgjj@ٲeɓ''VWW'%%%%%?~9s>}J(_x6yرceo>Bv@rCڜsa…wn'ۻrv͕+W;wNKK&1cFTTTQQQmmov|ĉk׮UVV~˗/rUSSᅬ3Fp!위___\XbVBB ӧ~*+??¢Cg*+%%UXvHTWW7mڴ= ^J:ujDPM.]?~QDPMiiiSL賐*֭[=={vGDPA˰a&L'"T ?y… ;\$|rMM'DP5ѓ&MsM.^{_T/_LLLܵkW瞎D$'''%VϦM(KrA Kv#q8xE񬬬۹-`@unڴ[@"w *ÇT?WW.1 RRR[5G`=H5~.n }֋/)) dG`7Pcǎ <[C~r; }+//߾}_|acc-D"͛---n]Q[%%%={իzmJ ,㏻qHV }:ty2,SQQgyzzvƑlBQT``q/p&rիWuuu{b#F~~~pppXXkO> 빽 Xy{{=z܎0%%%zzz=#$;| QRKLL\n]hh|@"_p8ҾƵk|||V^K>{D"({yyyxxHm8fSUUUVVVǏWWW~GP:555SNUSSKNN R>\aaazrpp8vT777CCCMMM;;[KmY,++ݻw```CCC)!a{ן;wnyy9۽{ѣutttttFg>\I/666~g}Р ۻwq\ɂ d*Fuu ߿wOB?{R℄H$ZhQaÆ3[c+jjj(rR6)Fzfff/^(͛7m^;yd׺*Ͷ/_z˭7<^x1j(jk"XYY]|͛7UUUބggg#GΝ{+,,裏!۶mcƼaBBB!vvvyyy---yyym)֖Nnn5!d֭EڵbddtɆXCCCBHxxx몤6+haaqʕz6!oyP(|Ebb{SccţGU!++yɓ'}}}zq„ <ɧm홭1o3LK.>lgLK.1kRRR!E9'YՉ'!Gn]f/\ ن3flܸ~*Ǜ|4xͮ]F=rݻw3q@;z!C\yXX3~%999ƍ0Pak.z4Gy XI9;;奭-y"ƍ---'N&̟?_uUUU{fffRR})w=ϟ?䚱c*;qㆷw߾}]NG$''O6w޽zݲeKzzz7D(jݮJ}h̙3gΜ*حyڵ111a2C" |255uɊ.p#(:pQnn.+†ٳ~z55|"ٵk/^, /]Ė5x<6|۷o.ݥ0 ٳg'OTΫd>@WxP'''SS[n7]TTTjժݻwoܸEmbw lݺuĉ:::l>@;wnڵ</66Շ RXir+V̛7oرŪ}ىDcǎm߾]]]=66v…q(6aaabvvd[C]vmݺu߶m֭[n2G`/^DFFJ\ZZJ :TSuu_~?Dž-Ugɒ%ip܀V;v찱IIIMOOW8 8j`#,--+**|pرr.IPm۶[a|rAt]AA%KNZZZA"Ԓ%KZr[r֭3g:::jii=zDE J~~~*PSSׯQR~ٳg7o޼l2t }v[t)EQ?C''soWFGQR]||tJ[illRWW/,,TtE>vIttK K.TlPlݻwGEE\r<B"tܹs]qvvVC3g(?~\(~駛7oVlIlD`=eΝ;x`FFyhh+IW ˿Ǐ755yyyeee9;;+(C"3gDFF 8Pu$FcccLLܹ3iҤ(ooo$(;]/:uŋGGG5Ju&$(2gg爈ooo}}}EץʐNOOJjhh8yddddQQ}PP?%Hź(ʕ+\.m# 2,z޽{qqqsrrڷoo޽] SVVx{{={vȐ!뽆D`c@pSNO0!((ht3=MI݋;uTII%KN836lpqfٳgϟ?TVV>}:>>>''ロ2e ,v)BȎ;sss>LillTsΝ;w.//OOOszRla&$߿ڵkϟ?:t"EAp>}xzzkii):h:x˗/kMo SN%&&&'' #FgwЗc1wwO W^%''B?omllLIJJj=glׯG`7nܸqCj%3cbb-Z<,MMMz$oժUZZZUUUr&!䢣۞h``у*8!@ bHC"Đ D1$!z\ii޽{'O/y*7f̘oDIn*}7dȐ?Cjll}WXXd>G1cI>}F_~Zj;_^j-,,{BHmmm@@@-,,vgE ߿ťvvv/z^6(WIHHPǾCcblll(*000!!A!tze3gμp ::+..f۷/00f9 $w~vAwcBHTTTBBe\\\ee˗/'Nx={HnfݺuիWI[2s@<|N2e<_/($>۞;y䂂q1++++ dkk{mׯ_5j!ʪ]]jB˧M6h zY FA5`dBp:)xdÇ?зcm^T9 @pb_( BH$ԍեz ŋ_y 9 z|PF#C/888ܼy3??Сݸv>;9Š+!Ϗ}@ hiiyc:=GqRJ9۷>rn)kPy#CxxxPP˕\&%%yyyp\mmm+VdddtnGK.3fLxx8}Qp:qQj@Đ D1$!@ bHC"Đ o:uѣG](//StUH.ٰaKP"Ho:@ bHC">aEIENDB`objgraph-1.8.0/docs/sample-graph.png0000644000175000017500000002713112277007131016366 0ustar mgmg00000000000000PNG  IHDR5fWbKGD IDATx{\Lg.].R*E\%Qk%.KZِ|J6,Q$MV+RBԤq|gTԜsN}|>y{>p68H`0 \pj+Ŕ)SW:tԩST[A/bbb|{ll,V H} `| `| `|;R$_~t" oE|HwȑЭp`dnnpl5@%ei)> O3}oI (+޾$:@l1}zAQ\ ^!0a̜ 3gRm v `|HMԏ)p8SjC22 8<<@K RSo6K^2p80aLPT搞P,3 CDx{g}i !)C 5̄L >3}:;{!H]l8r.^AU awCCA]RRKf9`$N3ƌi?J/ " / " / " / " / ҉~++55킌ڠF"Gc:1b'O'/2Ctb( >.]QVh 6tƍWQ>}Ml5.@Wlc_q""AU5kRJk==x<===ذ_O/%|rݽ}ejjl|n#3.z)%p q/nYZ╕ur$Cl,>b')1E6׆Ӿi }54`X(.`vo-nѣCCܺ}'5AA,^ ,')'RG(6iwcҥx]LEZ$=sr>I|_},/o9xif#2?"9Wtd.}ܲemdE8fl6b,asrljy KxޟW|8t(*$ P0Cb-Yy #!оR-m[=2L P<҉i(/*+!=k_=-m1shjzx[,=|hYǾ-NB߿/SA_Lַ߶܄Ĥq&FEcի`bhjСjܻPXLL>!_ps޽uu??ٰx1}4xH U{4adB `0H`0H`0H`0H`0H`0h̓r_|A NMM|ֵ޾}{ȑ R/))8p u\tiԨQ}{k.PXXhff֯_gϞ)EׯWSSu5 ҂w;gϞ999T>'N%7K=ׯ_wppHKKѡڜvb"##lܹsRVfc\x/9rdZZtM6)]$_*IKKsrr2eJRR&ȅ޽{嗔嵪6***nnniQA_YxvQQB[/5{xxx{{GGGPmi{zz6*ho$_ 8zE-[vQvklZTTT~~͛ўr|ð$E7Tl;v젤uqWWWCCW2$_vZ Gʔw,,,O$_e X,oTL8_믊kWI%J/ぁjjj W444̝;WUU̙3TB|Q?8S uuus9sL9b~Gm8>Q)O~s}TC9c:H jyyy"xLJ|۷&M*((p¨Q6z0 ;vXQQ?LnH$SZZ:~+WPm]011ټysPPЃHɗL^x1qĺ,ru!C~KO< .]255p|bXBD &{n55@aw0lT&z oo@?l%U-nq<22ðbeXXՆtW  6ͭc0D ,]b:tj[䂆qԩSv,n466Ο?FEEQmSBťeę4ŝ>}z޼yT90l֭ 7olwYŗ̥J$չ]x1>>ё䤬˻wFEEرCd*LGabb$b?x wpp޽˗J~tttX,QQQ>>>T U qOhh(RYYiggףG7oRk,_9B,YҮRH?@:t#FٳgǾ ӍW]###Zpًtu;'  ```t! {\\.wT[ >| HWyؾ};aK=zzaÆQh``Fͥhhh,Z(,, ^b-7gXT[Gyyy͟o߾TÉ1-q///H ֿ`쑂̙3d-)**T0MMMJ:U?bjteu֭[G"\.a{4Fϻ0‚ZZcҤI}YddLf'7%%蘙I3bfCBB6GW611eRS|eޝf9{%,˗T#|rJ9|D~RR,%%%a6n8mi+++Y~ >Cuttlk-R'NÇSmHܹSKKFzOKE.NsЎ)=V\\bwl 3G۶mS(ׯkii 8i jrܹd1Ϝ9C|P˦MgӧϸqΜ9$%[ %>b:+z/ծ>:vT[!3f  Dty߮ S NNNnݒASܷoߤ$)y|eH2cƌ HЭ[7)K|EEEeԩgϞm-򵳳k.:eg:::fdd׷x޷s64Ν9q7nx^69:(33޾]z_D.33[J͛79w}' @3 4o޼qƉ>?:!NJOO/..nhh:tȑ#ߙ6l7&*O˖-+//'.Ϟ={)֬Y#>sΝ;whճL!88899Ytی Ft}UUݻwq][[:???..ЙCl._}Yr\UOMMUV999iiiq!C)΅.FDDTUUچPmLXcǶJy˗`ee%J9ϟ?o"ˏ?C=zƍL9v'Nhf666qqqaaa~~~&Mx999T%+C-**HW|@<`QDC2bP($N Ͷ  NcE3g:T(>x@"]y%|(Wzz/"ήnnnٷo jmر)))6l3kYG8`BglBty_--٩uiRs8ݻw/[BEEEMM_~!Ϟ=W^HaY8x̙3 l;#:̬_khh(~.4{K\r8y\RF2)iiiiiiZAFt1}}7oH$""A=޾}+`:::Hf^WW'`G(l "q8ġCHf@Wbf jjjTUU|ÇٳgW\!0'rc[RKKK"۞.ulkJ$vP&M8qbgdPǶFYYY^$;(߈AxyeJ]q&&=瓒}z޽KrVTTDEE:t(&&&((D<%99e)Q:coh._njoo8΀9W^mllJ|˩H)**"r2:Y0c}vӣ;`ө8.qYAAAxx9mQ]:V(޹sgΜ9oQ}[ /0{lXzujjjyy@ hll|ybb_:6??paE1i13?~1ۚ#=@ۜ,mm!C4E_UU5;;͛7~bŊ ޽cFFF_~e:x`RR۷˹\i\]]Iz:6++ֶ7&ccc===dt6mڤ+g=o޼ٶm)Vubbbd<>[l(>8y@ yYIIIk!"hMVV]$_̴VUUm./$''O2HRPPŋSA_ҴƎZ$_}IKK8qHR__!7<$_MvڇAEД~J¨"11QQ1/_Uv\$qqww9hGLL+))aX ;ߦ6OFJJJ M$mw{ Yٻwokkkgc_##䬬,m>߭[7/RMMMzN._ ?p2pf|233eY7 sټyI-PSS# "Duu3fK~'WWWǏSm |`|MsT/8p ::j[HUUٮR]qAE.ZbԨQTh}BC\]]U{_PmQ4obbÇWXނHl6;22͚5KtpCgݽ{_|b_ ~DGG'11ӧK,|_rEĜ?((߿gϞɷU߿j[䂞аj*y*AƬYm۶b Fﰧ||Ν;/_ޣGyAm{zz3w= T!o`vȑ;991t=0>v,%$$|ӓ;|:ͦڐzWFzꕘvZY򻹹a6d>P8d ڻU~hطfϞ=^R%..ðCLWWÉǏׯl$۷o۷mݻRoظq#h3'̬ `ׯQ~)--x;w$B$! =<<>}ff"FK 6gǏi |}}-,,ɪɷԌ9ʪZz/^hiiիW^o߾U,\pƌ4-N~~>-:Wv~鲲 HarkjjzIU,7>o<D)))[lmڵ? \~ݻw7nܨ,?xbbb]0 #^=9"?aXTTTwӉ3@P[[kllb.]\qnj?(]ɉ|bʕjjj999{$"%22߽{d#---'%7*Ndd$;{.5#ʅ@ 9s/Ν ƍB"ļyl]ܨJCCåK*r$_y2dȈ#>|@--sAZ744TD諛iÞ¯nyyy TP|K$_033;}tll;E&JG%{v={;;;SmοPɓ7n yL $_kÞ*VUU\rÇW\+h@&{=z4vS%;vm۶M ÉraOW'ܹsgΝ mɗdtuu}}} ظp &)-$_8p`tttxx}lv{>Þ={?~|}cM/|)))ZB%<}t˖-7nׯC3bʕ>?OqAYF9-"@?l0jϰW|O8y,̧wIDATQGInW=<<(Ai}5k.]jmm|^|||vv>O%P|,Yrg%%}Չ'\]](O0Ўǧ+}֭[/_䦕 ϟ/]t m9HJbÆ nnnO>Eeee_E|O>]UU%q|;w$YQ"0iҤbhhhx<ѥgϨQ^jkk?NIIׯ_CCYXatuu?3++ &,Xڵkojjjll,ua6-g.Rʊj˗}@ q|Ν, j"33SJOr\yT=xX,޾}{aaaW^M.-..n!6Jqm 5kָp8dԤbO,\Pʃ\u777!vC8nkkKXR#]vu]B$\ׯSQĽ QWWo-T|8\l6j$;;[OOOB^g߾}d5qe,kذaT[VV'7'~١|߾}FuQM#cǎq揉a5YTTT4Ffe *'NHT>x2B#8(\.Wq=֭[1 Çdekk+ѐf1bv6a؂ ޿O2Byp8D"NNNرEspښ5kWQQ555;\a}}}rrr\s[ʨ@vNuu6 ØDv Z\DJ+09?$%ބdJ/5T[D>k׮eENV+D5`cǎoV&xah'3gΈ:hT@ܹ3zh%Kp\#/_\EEX,A?C@;644ŦPmb Ǐ96UUժ*R*?wQݻGTp\nhhP($H9|q_hhiix!cF%DIMM }W\)gUOl6o߾7n }vuuu~~~\\deeiC|uVQQQXXX]]m```nn>hРARvꖖVTT[[[RmP#_77G=zH߿k,Y;1?c@@@NNNNN2z7PkP3`nnnݺofÆ SSS{Q||,e[ޅacc7i$L]Cټ/277'\iEEEppǏ[kѲfSRJKKo޼I"W(v<sss+++BammL c daٲeϟ/// |>w(33ÎH[TTTTT$hccC3`۷oGDDn2G3m4⟱cǦlذAt͛O>}=׷;v,qɉ>| 9p۷os\SSiӦwUUU߼ytL|[<`q$\eky<ʕ+haѕAE0$_AE0$_AE0$_AE0$_xdfW\&o޼yҋt6SFLL̾}Dw޽{tq55|~sΝ;w8PZZ*`VVVks|!99qԩ .֭[n.\8uƳgRmc!"""??`Ŋ> CCC_z5l0/// $ Ҥ|">ZIIIO<ן0aW_}%MHIMMݻw+W8CBB]:k,ⵐ;.W{KaaWrss^xf͂+H\>\qHOODEEeggo'o۶ի022x!ՅO4rVN(U(h{[=OΝ{捇GUUUjjONQ3|{SSSAlǵ,̬ <<܈DRbGP'O lll촵333Nƌ3\nZZZxx8ǏOKKr3f̐6̞=V^Z^^.?(>hcGPommmll,㎎ꎎѱ}:}:$~^aƌ? $`#FMHH211zEBB¼y5t<== O<)daŊ ޽cFFF_~eǬ;*0?aJ;[[.&&] e鉖%شi^ll"*hH`0H`0H`0H`0H`0[s7n(ȔĊ+6.N:٘1cTy;V!t} `| Qߘ06IENDB`objgraph-1.8.0/docs/objgraph.txt0000644000175000017500000000255112271160734015637 0ustar mgmg00000000000000:mod:`objgraph` =============== .. automodule:: objgraph .. currentmodule:: objgraph Statistics ---------- .. autofunction:: count(typename[, objects]) .. autofunction:: typestats([objects]) .. autofunction:: most_common_types([limit=10, objects, shortnames=True]) .. autofunction:: show_most_common_types([limit=10, objects, shortnames=True]) .. autofunction:: show_growth([limit=10, peak_stats={}, shortnames=True]) Locating and Filtering Objects ------------------------------ .. autofunction:: get_leaking_objects([objects]) .. autofunction:: by_type(typename[, objects]) .. autofunction:: at .. autofunction:: is_proper_module(obj) Traversing and Displaying Object Graphs --------------------------------------- .. autofunction:: find_ref_chain(obj, predicate[, max_depth=20, extra_ignore=()]) .. autofunction:: find_backref_chain(obj, predicate[, max_depth=20, extra_ignore=()]) .. autofunction:: show_chain(chain[, ..., highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True]) .. autofunction:: show_backrefs(objs[, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True]) .. autofunction:: show_refs(objs[, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True]) objgraph-1.8.0/docs/chain.png0000644000175000017500000017656212277007131015105 0ustar mgmg00000000000000PNG  IHDRcX bKGD IDATxy\TsY]@D@Q5j*ب$bMK46jLjk4wVb5(WafeD>ss>:>|p"F( E!@QԶ.ŋm]B7c [z'%3 Il]BGiX)iCh:غIwI?j" ؃ E!@QP. E!@Qno2h[p(\( B:}e91BuX:wͥu%W>o$bعg]pʆg=96^ZWR¹Ikh.w2 V߾/ޚ6ɭ׏A2 @ IRBӡ#șrMCbGz7cF43K]q[G$Tg]`^ڥ;YNm9^##$IM/l4)I%N0ivs/ݵ.Gɧ9`fdzUg:rQGB-)7sH]rk{ǹxs{ܻݯk# x~;ɻc/0.~u,o'\˟ߣ:wmBgwҸW88.>Ҳ{GRs.rOyE37Y}^i=^l锼Xg2s~釗>U bڻ)J/wGe˜nbDo88 t *[Lh;!ۿ="'T_q^ԱpH!wBȻ%!<88.͎ЖzVYJ rU٩*2rP(j|)G1(zyB܋? !~'g:ۧ7!xZb-LzBt!U_.TkBg}6︖-ZpMf.2rk!3?QkC{g͝;.xwzs8$v{0?]$XLnQR;hC~Z޷Xch20uP-g@+w27o .ӗ1a[6wW|)G;cG<[%zDŽ5jiuQ|WN(-+--{p:ğ͕ӭC_Irnݽ>AjA6[7\uE]͟ny޹{|Pו=.8o=RT(+4u_mXm>Xp(\( Bp(\( BpPۛ7{٘5Rјp(j[% \( rKZ~u[_^WNz|ZwONF=[:ΪUgF>ёKJl!#S_]vh.olὦu Fr4HԲtxH79Κv&TrlM޸o<%N0lvs/֨5kBl5MQ[bFqF{(]Q֥6 EwI?*H>+4GF>oZN3#OM8}\Ăk{T^Ν_#}PɃ-x:`b[oa[ƾ9x6OCxlI^NY{m`&Ċ+C_I8xz첋%$ !vCth^ꕙs4K=o~VXQyn|6mժG!ֽ6 惧(}t|FE~)BIN~B !+~)K欒;kaB>^.͓ޠUvʧ4ja8 I>4?xT\WYc _g9Ue܋?ED 5rNz !\6TnTZ6@%3P?]$XLnQR;hC~ZzWBf.V.1W !n_B0O\Zw;4{R MdVכUh|wߏxGHf[=Vԟ&e77Y=&aip JmUY .h|/(ue NEKƾ9/?QZVz޾:R1o[KEuz]~kGSG^VphBj*| E!@QP. E!@QP. E!@QP @S!IEHi2j 4j[jjܸq.3g!tbBܱ #99YvZ[=P. E!@QP. E!@QP. E!@QP. E!@QP. E!@QP. E!@QP.h$I$@e\LDfKmhu hXp@#7j(gggwww%%%:Tx?hgg-[&%%mڴIfޟ [@cqƍ//,Yru u:ÿ;Sݻw6f\X̛7ŋjd} E!_w^S˞={, B|U([D4\X9R1{ÇtC͚5Bɓ' !f͚tқ7oGzxx!6nܨv4"| XGݿdvƍ(c„#GhN:tΝ;+#6mڲe*CXE6m3rH''֭[wKKK_lٲڵk-L;>3gj4)+:꾂 X+P~U/u{dk~\wVp(\`5ƍ3VWXmZP. E!@QP. E!@QP. EQۺT\~Tijԩ *C&F[/򩧞aʔ) Uo\PKeeeU/**rqqiZruu5jZ]ŎGZ=zh-l joҤIzr^4iR((++(..ZTThlR9Vp@'''Wr#`N&N[t:ĉmUP'۷7 ˗XGmubggjڐhRSSI!>|&L`ڥ&L`ẕEX~~|py[f\`&Mh4XV&ں4k\ݻwqqq. Zbb@Gի;vԩ H~BNN 駟uh8\~ٺݻ'prru!X%Apu4h执(@QP. E!@QѤU9.h Da4 $55%\( +Ԉp{ :JzۡCI~-[=zFXE} j9;;[_&%%ZR^~HSKXXXXXA 5|֭[_zuѢE򋟟ٳ-ϛZx+Z%%%_=jKJJ222-Zd`7oުU t:V={~(MKK۱cGQQ`hLInT]6%%eҤI.XbŚ5km]+P. E!@QP. E!@QP C={$)55r3gGОiii5 e7o^;n"..TXXxСÇfڴi۷oMF&ˢ#Lsέaϑ#GZh4k^^^#FXz;wj= 0[ӧORR79~}̘1coo\]]NuF!J_0rȢ^611FwwL.W߾}t`0n*dgjN:M<9$$dȑk֬1tww3g΍7ƍ7tЧ~ҥK-rBYfϞ=NNN Cx.͔ĉ8pY޿!… 333߿o0,X 1_\|lӦMB-ZTh{ʛ(Ftرw}ţcfj„ +W;v(,$In<<<{UhB~xYfuڵk׮rˉ'>sf*!!A VhsmYJ2Y^^^Cٳg?DFFvu}QKphL ud4%I$I~ցW^xUf g{*<<<>H+e LU^ݻw]]]=jg̘1gΜu֝={vvvmڴ KHH_R_^ѱgϞe20K?T++++!!7ٳoРA<& иo>k :IKK+++jժ˗gff>cڵk{DofRRRxxx֭zKg'Bc h֮]2i$[dXb͚5ɶ. @QP. E!@QP. E!@QP.Em@mX%d4m]x.\l]E>#! /`Bлw;ں 4.d!ڵkm];@QP. E!@QP. E!@QP. E!@QP. E!@QP. E!@QP. E!&C$I{ !.Զ.FK@c . 9r޽[yAZZZRRCPP;wȧL=%3UNT\^ox{{ۇ-]»,L?hFӡCcر* FbmXErrbѢE]v|}Ĉ6m(0+WVgʧLʗ'Oꫯ߻vqdӧ͎\`M˗:j:tK,Yrƍo߾]VVvȑ>}>}fihݻw/_sk8UΕ+W Í76m4h k4Vpu+'N駟}ůɵwއ:tPll齅>>>999ҬIMVpӯ_?a]\\k2u@@@^^ސ!C:wdݻ@!ܯZ޿Qn5:99ݿ_R M F)++u :NVWNZXXhz!CKOOO+(7(%J`0M U}|tS'%%gdd̛7/99m֭3f̨{UhH\`M~~~BZ̏B'O"]˭[[MVՉsYfͱcDŽ۷ono\`MÇB̚5ȑ#:ȑ#g60k,!O<| .zV#>>^!ظqUtk>uBBBZZŋ í[Ph؃ Cރpnݺ]r>|oFVs=`*ɴiӖ-[V&{p+d e3f^eaX={x≖-[N6O>Bjg;v;vFqtt 5k֡C̙3}}}5u˳<OV?EY7Vpu+k׮оtIIIvE]hvXV6jԨh;wX_B3u`XiN֞={8puaX͛foo8gΜtS퓐jgذaÆ uhXp(\( Bp(\( Bp(\( "F[oٳB0S˰aÞ|IT捀 j)##vvv$U8e4322mR3.%رc*z{{_pr{p@-I4i$FSF4i6A7aNW]M0[@Th 駟lR . 4ɓmU .988;lذxgg碢۷qD UT3g 3u={$ISN1j۶?ڧN)5ƍԩ~7oܷocg}6(({ .4 NNN/|VN"00pΝkٲqz葔$h!DzzKJJZl$={v`ӧOgddiZgg稨!CTMJJ +--ݰaǵZmǎ(qsssʼǍ0xto͛7G9`I&]zռ%..N>Z tիW:uJ9~رcEEEK.xbǎMf?Z4,X,_<;;[oذA-*..B<8..e˖NZpwܙo|'NJJC5W^BիW8p޽{z>//oB>}!'NU^m&hѢE///gǬ=#aՙZV9rd͚5By͸k׮r|JW^]Iذ @cqy۷-Z_~WO=T.]t"9sfwޭn={N6M {U+K/ !Lmڴ1YXX(TcVb=,/]v)Ν;g:k~& @cQ^^^ݩ_=007,,K.'N^[*IRFFݻoݺT*i^ igWOU*񫛱cVv!4 !ڴi[ouY>e4%I$Yƍu:^zǧk׮?cS/_ԩK.*ɘU^lM\v;""Bޒ+B\zUqƍv4a44! xbccZl)5_An̗9A999i4)S<꼇B999j3f!#9sf^ZjeggV===/2k2f[GB?G={?~Bv???J'E .M@PPPCOݻO?m:5{ܘٳgG7###<<<44455©$%%"7W&cVy5 >}y{nnnFFb111s̑O8q{ѨphVZ+W>|xtp777Ӻ-[Fc>}\\\nݺum۶=j5 ~iccc===F/sNuN8ѯ_?򢢢\S򮅇Yք^_`A_?ڵK !ݻʿA?~|Æ |AWPrrѣGlB4y۶mѣڵko @QP. E!@QP. E!@QO?Om;lTR}hBVoȑ#_~ePUu*6gΜ#Fذ hiT>[~vmBjiݏ= 7 gٶ.9m4hPyyyVVm˨'8pݺuEVplEz:{Nu-TVVO?ۺ!X4ϑ_z饱cv] 6ܸqCطoߐWW\paǎgϞ5uY.11166}$ܹɓnvvvÆ wvv.**ھ}kh4oںumڴ;vlΝ ñc֯__`ZP_>u|WYֶm۱cdž>ja| vvvn׮F{n^^޽{+޵kW{{sUyZhQ_ Z=`hOOO!ĵk>k.Pubk!ɉ̬BЈL:k׮qn|}}~{ !^|ES7''Ν;.^ĉTT3g 3?yX]vZѣBINcܶm<<u"22r!!!߱c.ׯ !:uHիWիW !"##S;wLHHx7>wy'%%EѡCKyyy/6|l^_\\a!|O>B/ĉ<0 K,BDEE !5SyyyrU -we}叄I\Zqq"88xqqq-[nӦgϞӦM$BFcy@yom ϟ7߾}[ѢE ^z%!iv@.Le[W]*pzWY&M-uri_}SO=եK.]gϜ9|wVHbVR:ůXڵC:u} CJ{[nt:J5| ^^^^)9UOJek*]ݫriz``oXXX.]&N[ju|X6..IVϘ1ٳG1s^zjNV{zzGO?~|o#xhCj}=/NtIRuIH[_><<<((hsss322]vѣGY,(Ј,[lرݺuSׯeاO[n>|x۶mu:]xxi`0|4Ν;k^ҺuN8ѯ_?򢢢\9ܻw??a4Z},{G}4f̘=lݺ5""iOUXߏ mժ^rÇw]PǏ/++ VB/X/zw%KqQm۶[lQs5UқXyK @=:x.+E3ۺ+?~|^Ν[VVfZj~޼yXvC;o۶G5YkZ3f!ıcl]}wvvvVy|MDEEI$h آyvjk(k&7k׮R++((ؿVf 7oޔž&'11qǎU>&Zhр|}}5۷lb`0_K{%h&؃ <. E!@QP.j̙3@W\\\Sp5r [W/z֑,5\( Bp(\( Bp(\( Bp(\( Bp(\( Bp(\( Bp(\( ($I$^Ν;_јCԶ.^̝;w6 .Pk !6nܨFAa(իW#GdBs .h,z|h:t0v;v:%%%;88sNq͸򪭝]P<{`׍3}/rh4+Wp*<<B9*,`4VB;W\1 7nشiӠAK,Yrƍo߾]VVvȑ>}>}߮0͏I +:꾂7dȐΝ;GDD$&&ɧz}СCƚ\lh>:p322RSS M-C /===߿Rįմ.hbh,322͛u3f_s`0 lY4Z( ؾ}"<<ȑ#'OuhXEBBBZZŋ í[ůkfB<˗/p^j999?m\7Vp@cw޽{Vh\/5I!.I&zXO4ɶcR!sQQB .-Z3Fh4cǒna[\`))):Nӥغ4wj[رUy)//oٲ$I/u9h^K]U4ǚ5kM/Yӟdм !m]wyB X_2p(\( BpP~߶u@"".I9(٫j .\LQ`ZǕ_k vrry={233vvvݺuP_>|9] ~~~Zp޽ʰ0sV["}Çf׮]۶m̼w^-|}}j`99992))B0o\\\ppVoO>jݺuu͛ϟ?ڷo?|p__ߤm۶5=CSBYn]~~ݻ7oOjիyyy٦}ٻwo>}ƌdgoo߾+YYYrKAAAZZ"::Zjժ/ʧ WZ+DDDpQft\\\,ppp_nذ!999$$$$$DnY~}IIIuu5%%E juŘaa޶m !*3!LfSϟ7oOpppHHȨQ* 0@o*#Pas*B? !Zj5gwF$I$FS6m!nݪG+,,N]vO>zj gƌQQQnnnvvv]t1?{=!D.]̗NƤ$GGGFӹsq=ǎB<={tttTT;vLMMBBSv].LVm6&&F޷T .?~~~~~~)ѣǤIL^}#G x i 5w1cƌ3Tfffj<pbbbz׏;& !NbZFctt;wv`0,[,>>{m۶-//x}䳛6m:sL^:uT^^~ͼGZڡ k׮MIIӟdB޽;k֬INN6Bp(\( Bp(\( ¯o-xWm]H]"+//jnݺp‰'>Eu~'+\/\o>k] )g[}СҥK;suҥK.]|||$Iu AAABsٳ͛ h#nL;;;GGGGG:+''gեV,jrvvvaaa;w^|O?P5J5>}<~~~~~~7o޿y,wرM-[?yZLJL`gg޻w%KƺnҐt][:thXXc=2¨ nzȐ!B۷B޽{8pȐ!gΜu떵&vɓ'O:Wa[l|CÆ ԩ?ZL\@{9[b<_>Lۺ*///**_!Dm]lgϞ**++k׮]>[nj޽{Çϝ; IDATgy|ݻ ԭ[SN2:]]TQZrFk6`h''7oٳ'33[,|A|aÆEFF:88kU^£VXj ݛHWm`Tfǎ3o>~޽qqqZo=}VNHHBU#FGGw֭[7o>Nk߾}}}mֵkW!Ķm233ݻעE __߸8 c>*{-[eZPWZ6mŭ/W!Zk4 dɒ|:VXs2''#G&%%UHoy yI5طhB !%%%6mJNN~O8!xDž馵" _ZZ8sLScQQ=ZA* @+8;;.\:ydIIItK.\HOOꩧL䅨tB!Dž)))QQQ{M iii*ZMUV+۶m+))iժիW򲳳k*lըl+---ݲeKuʖy|k!B섄 JD5hh%)NOuSzZ=z(Sm iK$$! "ĒEd=o62qc>=wkۯ^*}ߡC/S16stVXxQF⋶ffsRkz GIƒ8`^z 2DѪUg&''333'''a:-Zh׮FG\@jJ!TxfpE,:}*|7^Д^888!IsSRRvQW%uU0c>R3{ԨQfZreaaa*Bdff^K[ZZ~Qޏ5z@ӧWTVOkz GI5z𡭭>Эo{B'Ǐ=ڵkqSF-8p@]Mp9{ޥK.]ghZBP(7{N:\34MFFתU?XwCO۬:!txi#=p@޽ .\ZZjaaѢE ]s+cU(݆u25_zڔTˋ!==k׮Ҁ =&Lhݺ[h1~x???]4) T*U]&9V6nܸdɒ]v]zUTzxx̚5K)ɓ;wlnnޥK)SoD=eʔ[XXXXXxxxHHL2x`kkki#/4]JzٳزeK333R٦M!CH랞,kkkUmHڔĉΝkiiyݠfuH{NTN6j<Ǫ'Pj3fJݻw@@@]kz MIN:U^^)mӳ\g=z>|xNNNbbbttݻwz)#"3ftET*ʮ] !5 =URR0`OOOݬcǎ 0u͓Z.^(ODGGի[nAAAۼrJLLĉzruu}_| NII4h[M?ԩS;v1bDu5/Ш{gX 6/:xyLGZG8o߾:uΎqvv߿ugc|qԘ$= \8!)CAA{9???_;BJOBX[[O6MP:tHՖ:thӦM[jÇkSO+ݤ̙3Y) BZ] ݻw######u-%%%??Z^^~g֭[7jԨiFK>Þׯ_?rȁiFdeeEEEIݻWV^iϞ=.\6lX׮]mmm5MAAAFF5k 2յe˖eeegΜ: l0Vѣ;wdff;wʕ+sx4ڑ?~ݺuΝvtt,**:uꔔky1>V8Gj^^^vvvݓPRj1zdg>ܼy3**J SLiѢŵktCFչs)Sl۶(},cǎU \{hBCCO'x,Ym۶@] cp +\ Bp +\ Bp +\ 4ue֭.L 2ԥKSWf… BwwwSeȐ!]toQhZSU$00PjB1Bp +\ Bp +\ Bp +\ Bp +\ Bp +\ Bp +\ BMBP(Mp<- Vkу Y!&$##aΜ9EEE0𠬬lʕ^^^vvv666cƌٳg WhV|ooשּׁ,i5Z~t- chMҥK\]]ccc=ztĉsX~ժUaaak׮{QLLǀ&@ "00PZ-ҥKZ<8qDXҤٳg7m\ykKY4BѣGZ ,"2e. O.d ݻ !?k9v영{%ؽ{ws! Ƙ%I@MɓoV\\Z7ogΜ)7o^HHHAAAiiɓ'N*urrBܹSV?фp0d{LbRm7'9rv+CME֭;6yd[[[GG9slڴ*|󍇇1ct#VX1w\gggJ(壩G{pWپ}4FSz&DBFF(޵}d!@V.d Y!@V.d Y!@V.dEi*33377W7C!ĩSt-NNN]v5AehZ5'҆ ?^`֬YU? JKKkaagooUԢE Jrԩ[_pppYYYƯ Q QZZTXXXEyyy*$UԟE``` R*7 dƌjZEVϘ1T Q hڷo@ܶm޼y̌~4Wh33_~Y7 ARˤ[h (Zdz1DAݯ^*r助AF.0`JRx-L\`.]ӧW^.'LddwSWQ'N!FaB駟 4*<4e999{M]HEBSRѹs^{5SWC޹sGP888.\hШ8Zje!xd Y!@V.d f…ު0 40 _B.0`޽iiifff4iRQ~\FsĉӧOj.]=O> @*))ݻ'MX|+W\r DՊw^֭_z饎;fgg/IMM|kii)+ cp@.\ ҥy׮] ,ii!CH̜9\`;wݺuӵtyyyB}>C.VVW^յdddXIw`Ce BjX!PT]sׯ_~}Ν8p|BBBIIIyyyffoi"99׎拧(j$&&^Zjqww/((n#G^|9--mǎԩS6mҵD<jؼ666C >}_yg}CJeI& >UVR>)zp!foZaۻ򦬬 ?e 0 zp +\ Bp +\ Bp +|򔛛j+|ߘƍ鹹nnncƌiٲ-/\PT3  O˖-3U'O8wС;"! Om۶߿~[;v8pBصkW^^޽{_{5[&ˢ# O|ϟ?ٳg+Wfff>κǎ G֭ff5܃?&AzBu9s&>>ƍjo߾cǎ_o۞={Ο?onnS\\k׮K.)aÆ) !FNLL-++uvv>|x={#$ڵk7jmۖk?v˗͛giik߶mŋpttB;88 6L믿&$$Vϟ?ϐ T@Bq}) __گ_WyYBBBbbbV&MRnݺ{k׮=ztĉ%߿:88:t(**jǎNNN- R={b„ ^^^} 2C.]ffKJJgm޺uKf!Vw_} [[*[JKKiӦ/))))))R[``Qjlph.^eZ=l0v.ch4'+V]n... .zjVVVVVtYf`ԩS4͈#&O\tP(ZV_]vYYY~vW033sqqQ,]455Ոۇ<0fرc۷oh4F2eJn]ÇB>}޽{,///..￯ߎ~3gH[{ =ȓi'u;ؿ":::::ZEF֨W^Nڴi믿qFLLLhhh,#####B}4ȤIT*˗ ;q'O{ڵb333GGGAoG͋OOO{Rl۶Ga|(t76'Bhhv[pmM] cp +\ Bp +\ Bp +\ 4u>.\h&JjM]ׯ>>>>>B Ç&P%.`dNNNB;wJ]y !{7^~ѣG)))k׮9r{ӦMYYYwٵkP6*1n +~zYRޘ?w}W= _m\`d+V;wJo_j>mڴN:T*kk}Λ7/66VqĉW_}{JkŊmу C׃kBу Y!@V.d Y!@V.d Y!@V.d Y!@V.dEjM]x"ڵkɋ/ !kygLbмp@=EDD) ZF1ImhZm.]۩SׯWξ\PO "88XRURI0 . Z]]V5~=`h^zThtss|I /WRfΜizzp@S?Q(TWWWV\  I0!.hYfO0775kiA3P7oܹFBeggoE4TFmfffnn>zh-L ((H;c Sׂ! ޽۶m[!۷L]5.4G۷o7uP+_^J4eݻw7n\rEbB +{]W!@3b$ IDATժUA J߾}.rԩBAES +\ Bp +\lܹs5u@"".sp5k֘у Y9FqիW۷/::oĈѣ999jۻw޺ -?~<%%ںk׮}*a`Ү#""bccsrr4Mnƍ!͍RխZ8qc;sxphv6n+uƍ--- $ؼysLLn{9s̙3:,[Lŋ.]z7 P^ŋSSSSSS׬YjCBBurss>| XYY<@4;iiin=JJJmvp)hJ9Ĉ%%%W\ BYBN߾}}}}]\\,--Μ9/8pB5/ZYYM62333,,Lߺu뀀777 L:Q$\?=zBh" YYYҬ-[奦vͭ7qƅoܸHH7nܨ~ݠCJ-...o"::Z1gΜnݺIv:gΜO>$114;...BJ3g INNNNNZ;{l{{궖n:V[]V~999B =l!7|#EzoH<phv̪}ۗ_~~k׮]p!99yRgj߯j}}}}||U*Uyyo] eY]ǰzlGYϞ={)[h/BjZB-m!ԩSU*ԒRםk.+++))iȐ!fuڵk-رc kٲeqqqwh4%%%IIIBo`"11QTjyTXYYYNNNTT4n\*4JSѯ_'NOYk֬yꩧ啐P&''_tiƍf1h-X ::*}C3f47 @R?޽{Ng}VPDGGjjذa&Lk577={m333gg租~Zq+W̬ܿM6nnnÇ7ޡC>y^```zzkfBk׮uuu *p +\ Bp +\ BUc;wU6muճgO:k֬1ʾj,;2FLNVݻԩSwh4MpFy[###{OP4|:r t)!ěoٿ3f=Q +H$yyy;wBL3/^6m̰0{oݺu@@EvvvhhhzzN*#Fۗ\rEGJXﰛѣd۶mOKXX؝;w?v֭S-Z ٻwb߾}B3fUYOuGTjy*z\]]J;[޽{wuȑڵo.xrxDiI!lmmIi52-\ヒ}QwygذauJB AAA^^^C ͒zFekkT*]\\|M{B̙3g]v>MLLBlRzСϟ?NR?{V*-Z>\ʒfI]AAAݺuS*ݻw VcBC////******//oȐ!(ՈΌ3z%[Qw\'88]v*j„ BVhyfu;<73|2r4zpuА !ISK MG_+}j)['efgg !R3g INNNNNwٺEACi2//OѣGPK/^~!D˖-O^j*U8qgٺN -҇ U<73p۷o߾$".***..nѢXU  /^wٌ۷gС S'ٳgΏX!^T% vss/ӯ^zڵ .$''o޼ƾhcj\bkkkooV>OLL3 π[^z<##_~SBK.EDDtqذacǎuttߥhUꎨMTE!(OE2rHRw)ʑ#G=.((p{D:WzzƎ{ܹk/+MNNtƍk_ވ#_aÆ*#Bi;qO?e/󋏏?!xxxHc.kYyIIɆ ZBPT֭۰aç~*e|W{GTMTE!^uOnnݻwmmm w6'"6mرc׮]v-8LЃ 7GG/Z uΝ~[RN:SN*JRuiԩt߽o /H XZZU+ |w `nnR:t?I`QFi9 @^XV<<<,--mmmG+ԩ[޽{UwsAAY*627sC..G !駟~7\]]'WO?tPm)j%4 LOOL] 6l8yi_bk֮]ZUha#b .@|嗦.=.d Y!@V.d Y!@Vh򢢢L] //յNpܼy 6N+Zc*4+BPS1.d Y!@V.d Y!@V.d Y!@V.d Y!@V.d Y!@V.d Y!@V.h Bn (l)M]@hZS\ 4!vvvs)**@eee+W򲳳3f̞={gBT{{{geeI?snnj?kdC3G.h*.]ѣ'N;wV _vm^^ޣGbbbP]84 l`BzoO>.]:t萟r' *4&===Ϟ=iӦ[_ =B=Zm`!Ĕ)Swaxp +\Tt]qq]˱c ,߫W/!ݻ+ Qh4,O.h*&O,x뭷jully ,?sL!ļyBBB JKKO<9uTibΝj׎&q4&|OOOc„'O:hLVO8ȑ##}W֯__G.h*Zn}رɓ':::Ι3gӦMWTo<<}kAs4uO?d\\\ƍg*)Nh4666 իM_%dk2U~s74+BR 9ה/^|ikHMMU(=z0m'O\jikipq<.0FJ) .d Y!@V hZJKKG޾}<**ʄ|7nj=ܠAtK@㫯:tڵkK,B-X ..Npbbbbbb!?11Qגv˗22i2""///ot-/^x"A 4UvIRRҊ+ po6<<|RܱcG\\;mccs͛7;+ MLLG%?yPexٳ]voիW;I&lRRoɒ%xXXqY[[[[[7?B>|ex:uJ+*=z4򫯾kggT*{4R I~t%%%Ҥ4jV7-H}:Rofff-B[ע7o !  O*MX1I)lpZErܹnk׮Q#4-tEq hȒ9̥Kt-+СʤmZ1K*!M]=}]AAZ>uԗ_~Y׍?^lٲ}O>D 8~xYYYu[B Ç9l2!3| iNz۷ˣLXSO=%0m \QOUwر_~%55UѳgϠѣGw׮];~c.^j´}ƚɩamw&ϟhz /p…w}Ç\݈ ˛7oZ^ɻhrs!Ē%KFinnnb耂'ԓuݸq~Bk/_]v5kFݡCc[ncǎ9sf \oVϞ=)))W>wܪU"h4+Vyf탃._|A+e!>rrr~ 6ܹ#xꩧ JP+S~~~gϖZu IDATfϞ}ڵ{kѦM /"/Zn-/|ʀiǧupp=<<<<L`WH=UV:u|̘1_7Q_C)}OBL0Aq„ aaagΜ&?ӈݻoذLhfϞ1vŋXOmjJz[,k?nfB?^nkILZ⍊ vZiii֭ occʿ7ǛO4iҤIׯ?sJz.<sMZmoo6nܸ~5T@OGEEEƖ !F%&6СCk׮-YWQVV`8ҰVD]KZZZZZɓ'/_KK˨@a_|-^fMǎ7m$Z=|pƍڵ2e~/^;Ǐ_|y-Z٨μyt +÷iŋ>|Xגe˖'Nwt}&#"""""9l`WHܻwo޼y}ݽ{NU)ѣ~4)E!N>q !222Zj^ziժU_(]?n /ʕ+BݻСCwutt}:44T'@({,((زeKv~m۶-YYe߾}nFFO?Գg>͛7o;wnmγ36|}ܽ{722rٲe7nbJu+ݻ:t?WXqܹ7X.x7}Yر1R*6mܹ_W zS !*i$MI_|K[_lٲ6F``M^u]c.]L8Q4f`B!DDDѣG܃:u/[l&h''Yf233sÆ )));w -y޽e˖n:44t?cN["""K]r~饗|||ZhQ\\c06uSL:ww{oΝ˖-?~~5O?KR9::Ο?_&͒nA裏&MԲeKJկ_%K~aaaƍgmmmmm=n8I3p({㏻vjii)SRRREZT*ww>HoQoAAA3|}}'Ol2!Dzz#GmggT*{%}rYNgΜٴi G|rxauBj\EzP]{m#Gy={v}gyۈgff7fddK~__rr BBBBBB,X䔛+MB<ܼ{ҏ[||j,,,&O,xaliIO/޽;22x .l`h}(z&'''!DII4)}ZڐgsJ[0 O>MmjGĺqiZ$0`@7nܨZ:r7qՒR+J;曺V+m֭[5ŋccccccaÆ}駭Zz簁Պ:^!5"=/I&o;U{ ?3$R7[̙3CBB[~[Ϗ?e˖[nnnOQz!50.kk뒒zKogOؐKg}&]ҋ 8uUz3Ci7Ϟ={Yesmx0۹sgBB4D!99999yժU^^^(Ԟ??VLeH7niNx!!!Z6 ^h׮EYY٘1cj\Qh*ϒ:l 8p;Ν;w…K..]No? V 1EUw];w.--M0wK.Kh}?FGSۧ?O֭[t]Qw^7nG}ʕ)))W\IJJ:{ڵkk1 9nS'6lÇ̤keeSO=3S~Annq%8ٻ&@Dd*Ѫ8[ąY:ZB*VYŅ  QAd^M \8^?x$|݅w>Yrr{ RU% 4%%%**J|${#HLNHy(#Dw{lLBȂ ԨuԩSbb',,,9ݻw޽;!$;;{OhCi戒CCxj" =U[Ϟ=o޼)R?Cf@@@ffڵk >~޼y5544-ZD=pI%aoo?dȐ۷~ү{wٵk̙3_|EZZZHHH@@NLLLLLQX`fL__[r/̙3YYYm۶1cF7ffܹ7oPQQ8q"ҥKգ >_pvbLLL(Ӡ` LNHݻw;w{tRE4x-6sLu: :tڴi5ҔO5~ۿϟu]4۵kbbb8NǎJS4G8p`޽ԍO ӂ6eO6aCC?399ҹsI&ϐs]R̈́|Æ S/G>}:66Ү];'')S~qpI1sL++[nxۻ3FCCCL6MMM-..XwNNNnJNN.--UUUС ?SDDDBBBQQ666ׯ gc.,맟~8p ݁@4eahnܸu=zP?݂[]vt,kҥt>|w^d8-@K_]]ÇP*mܬ 0D$WCW4!ݻԥu"666ԄZ;vK[[OtG2\`$(HpQ FA ;5ӅbYZZUVVjhh(vijj AX,SSS]]]P(dX[ fdd ipڌ?*>>>--mm۶;edhhغukYHHHnnnǎF:uruu; 7o:99dV \`&.e}}={9EyyyVnܸ1bc_EmP(] ֮]{ᔔmmmc%$$o˖- .|[qń<6f^^^ [nM2EWWڵk<NnnݻWX $(<o֭NNNB0665 %ٳGMMzLW\=zebcc@l۶MOOot -$ϟ?۷ƍ׭[եK#RFEEE'ׯWQTmaazyAtY֡A L vb׬YfʺvYUUKTRdH6m211o ׯo߾t2 ][j%p8'Oݻ^9rP6 Ǐ?tá;@.4oׯ_wqq),,sβeː֫ݷ^z͚5v-ñ8q'hB{9}tch$\5k֌=uqq; 8???DVUU?'\twƗ=hvBWW9rDGG $ڶm'^" 555͛{P+V2e \h~}Ν;G;f7u7߸P Y,֎;bbbrrr 6K~~m1B3sQwwwgg'OtڕpbY,o޼;jԨ2wnݺj*cccch $lTWWϛ7oΜ9?իW[nMwDRii.Q('' 8::=zkhmm}7oL8SB ~6m,_@ ӄAI&8qbʔ)tӌAm?sYY:,,ӦM;}4.G=~xVЃ @aaA"##6QYYM65 trK.Yb̙#G;C.(CǏwԉp> ̙cgg7uT9'''<<@ .(/^ 6LGG'$$Ąp 57|իw5ܹ̌X% nr fj55˗/;X@v\x^zjΝ;**`PRO<0`@޽oݺVV>|@AnC>}ZEEepbϞ=/_` .sPb n#mɓaaat {iii7nlmm@0DNZZnggw5MMMa/^888$$$Ky~)::qIf޽f`r8p%[y@nx{{s\c~)))n1)..vwwEv+'D***GINN޶mݱFdd-[caaAw,2,))r %+'TܦݲeKRRݱ4UQQԩSfΜIw,ҥK?~姼\UUHb +V@S͛7OEE% @d .(9r… vG0+Eө޽ڵk!!!txgΜxÇ۴iCw,2wΝ˗oذaСtpԍ莂 ?bĈ5k@#Ξ={t {Hpf'O>|?(`X,KVԩiЂ C\܆ni[ݸqcLLe ! dffzxx 4hǎWI DHpfK,ǎS{Z/--]hpvvvssk}hqB2FnfEEŘ1c>3g(/l:Ν;qR݌700T]]Ͱ; Egee(#P {ͥK0c 0\MNNΒ%K͛7x`crss !GfޜHpek̘1.\;i޽Y;9B oo.վyfرmڴ={65k NrsskӦʕ+KKKɿ?GR.***_'ݻ7uTg1%)*g!x;w:;;p8###OO6ʿdrYJJѣuuu曲2?r۷w]KKKKK{;v쨮Ql֬Y:::ƍKKKTowp8#F|쬭v5zj3fkϏ?ammvڭYFGZDB{X~8$ɧϯzIwhCJL*`___ccc555;;cǎ}EO%/Г"##W\iӦ!C4}xR+$K@j~pٮD=z.&O\Dppp`a]?2X y6(75k\իWѣ)k744mԨQr/rE{bbbRXX(^Aw?r:FoP#$^r[]oXPBC.oO-(1%;ya~*KSNj```M-"Ҝ\M׺u' rş >Ie49r׼rJBG:u$yaBHǎJJJ\nttNYjUG믒~BH^DtSP7(޺ukNN/,,v횻{+++=zdii)aӨ[eeeeeegΜ&/k>ʕ+ jya 鄐Hj3ÇTUU=x`ر j^z%&&/_Z[[-qX4@¾G6@cǎaaaǏ'OrSKXDђڵk7tPQ*Z')LHp_mmm !!!!KwބG/Iܹ3QFUhD&Q"aÆ}GINNnh Hӽ{Ɔ**@T"ёrY>}"_{QOnweی IDAT٭[7BȩSjWbccyyyuhkkPo5i1/%}'6lܧx;wj,SHsr5NaamnJJJjZ')@HpAJKK/^,BE%?~h"Pm Sٳ&ӈLEn߾mll,Æ mRu֔5i>)^:t/6?_d )UVVVD>URڭv} +QǼ4<ڰ5CM6E9ɩcǎuVPIZ \do߾7B|@ ƢQ/վBO? ¥K&%%UTTB.[5n]77H???///]]ݛ7oΝ;f/60''G&RUU)<,w̓F_do&FKiD+ ͭΝ;|k BKDKZ -Vqqz(8;;B%Ʃp!ԿyrrQ6!$33ST"էVK| B$ikvڵ)k~ n ԯW?Hk4/LmXۜ9s Խ{wBӧkW+["݄uҴy Js~IO|ɣ SiòE9W^&&&ǃ)A')@HpA~6m9L&̨%\GѣG !fffǏOOOLJJ:tP>}:5>ٍ!W^]q,C]啓SYYޱcG:t@x5?ydFF+**ڵkկ֭[ץK'tɓ'\.ɓ';w(}Y``>|pY===RzfaaAE*6m;w$=zQ"3iA|Hn7teǡ4m^Ҝ_HwhCis3\vHsrI///GpUIZ $8eee۷_zޢi„B%K'PjQmĉ5P7?7m4f̘Qjܹj___!77#G$lQ-߿rss_cv'ьBҴSyam3f1b4hPnP#&8\P(%AKQNNmXo:F䧵 9;v5++ʊ?lp!ٻwV~~\%55uѭZj۶ٳ߿_Jxx1tppXpby<ކ -,,|}}jѣW4OTӒ S?S/EEE}7:ub٭Zrvv޽{%2M~z{{&իWZZZ[9sfJJ !} 5r۶m۷o#/--5k^VƌJ*M?w6|3fB.cjK[jv5j-nz:Ciڼ)/ $;ya~j3kvu{rI#11SNݺuUe)VI -P)@`mm=tPjBMŦMN>(u;vl֬Ynnnoߖj[[I&_^K g85u_N P(̢ xbiԤ^c>x𠪪}!믿EOUUUZZhb|huÇ1"""A-Nj` :T(vq4 >e,wnԔUjjj^кs_|[ zp%f!蓫j7n\n]CfzRH\P HK'W7n2d+"""Z?{+>Fj޽{={ڵk.=k֬9ydZZ Sȑ#}ii)݁0G=\]]Z+W̞=C.\;el?~|ni&.>>>..nҤIt-Qii̙3ǎW_=z-83Z;++ktD]]ȑ#G:uԯ_?'$$dܹW\ "Q;}tϞ=ѻ ԄBh2ThC\?M"{zz6Av P'|.|x+WL<@/2C'LڵKGGGto0yr[nyhhk܁ D0D+""ӓ@B!Z;˯J5)\xSN999k׮0dx񢓓9݁!PyǏ[zٳ}z{UUՁGEEESS0##յCt=O?߿٠*++oܸq7nN6mΜ9666t,PHw ?~ ,KEEX,33~8;;CSS0[M6ݾ}eee@Jvv6\N81sL__ 4c|>?22ӗ.]>|ԩSGid .Rv klPٳtRZkN<)n[Ϟ=Sd<΁/^? 4KBÇϟ?wܻwz=qvc!YrqqyIr6mccyC~lܸQQ5V7mDw,¨_x1##f6@ccc|~r> … o^]]]j(P?ڵᆪ;h6|{.\icc3};::@ d‚fHp9Δ)S ,Xu[ݻQ~>|oN:5ydÁf!!!W^ .**rpp9svJwh-\%KK݄ZZZ###G6=l0UUUSN_uII۷Kw8^~}ͫW`֭5j%ݡhHpA,--ů'l޼>+$,]ʕ+%`ذatţ~ŋ0Ν;8nNEEEaaaaaao޼iӦСCaÆ@EOlm\\ MrrgX޽3007*V\{%Ks8#%RYY𰰰P4taÆ($ cZZZcu=ȫ$߿l2iϟ򈋋>}ׯ7ooo@%=400pww6lؐ!C02×N1ssDBÙ4i[1mڴ+WBFEwDJmݺuӦM...©+..w]~-Z H .ȘMRRP(TWW߱ctttf̘qj.ӧ۷oΜ9,ڞ={~V߿?4GHpAƬTUUB pXe3o޼BCw8tڽ{ .]dmmMwDPEEE?}Ǐ:w<`K~tMdҒt59::ݻC QSS;_˖-زe˲eTTT>}񿒓Y,],X_` eM6ݹs(A/k׮/h @zWII !$))iȐ!tPWBB’%K"###""LLL@ .%%%|{{{'' se0\&֭݁BHV 齾844tΜ94 Y|||\\--޺uk555mmJZ޽{ _߿_n]@@۷4EBB(c6m7~x'''gggCCCcE@ݺu۹s'QBHuuuAAEޘ>>>t{G׻!s#Gl߾d˖-K.m3&;;;..ӧO>y !cǎ{ٳ:a!p8#QrJ?uƍ___\߬ ”*ڜBa=&OܫW޽{c/\` >oٲ%''g޼y+W466;(h?R]juuugggC:999::nݚH@ F 7nܸqA ϟs\2o޼=zt -Hn߾=>>ѣA$%%% ϟ?Btttp=ztæA@WZZk׮Ν;t5PlLL̋/RRRI:tإK &;88,4oHp+)) سggΜ?tԉB޿ի/_:h߾}+ k{{.]t B BMOw -5׍7|L|_=qY`exiiiIII^zURRRvv6!XYYueƌ]tb 2P޽{cbbsر1c`"'%%%%%Qlbbbjj*%ofֶ;xHpZJXW\\|ĉ}zxxl۶mРA,)))_~nmmmmm=n8[[[kkk%P(}~% 3f,^ҒeEmJJ 5255vrrׯ_xbbbbUUΝ- kyrss:ϝ;F|#""233͸qz-tr'N >ĉt</))ŋb2331666 1c@9!Y}68"""!!ŋ5 իWJ222;vݓ'O"m+WPOCCCKKK%x7n8իǏy󦮮i̙cooOWs挭˗/W\u˗רvҥ`##իWKCCիW۶m{Çk]ppʕ_Pիs۷ׯ/\@qㆂ/2:qĹsJKKxZCCC1|}V<뛛wqĈ\c ,]ʒ׮]`:\Bh8Anݺ)>|HYp5!vѢEAYhї_~Iڮ]V!ҥKIII?ԩSMMMH%B:t@%թS'MMMz#P0$ KNNN΄^zEBP \BH.]D%kUށI>>:::O>Ԙ͛7o۶ŋ7o&ԙ6M8qݺu .\xK|~vv'ON:%k\]]/\b K?pTWW.2ꖔDEE~{җ/_*2*m%999TUUU}}}SSS###ggc`3C ߿+WįfT~iHHHHHU>zW^ɓEOg͚Uرc_|y̙5kxZ}]vvvNN{rflllllljj_Eg.gw iӦGfddknرϯ3ݺu߭[UV՞3p"UUUSSSggѣGkZ??~ٳgo߾sT}6qƫWFDDdeetyܸqԫsUWWIQQ-ãHAA}{j B</==ݻwٵ*s8SSSCCC===###GGGꁨDOOOa rBBB¶mΞ=bS\\o߾SڷoߡCCC:+jkNHp~~~~O>UUU<җzR__CT^dCIFB#Bȳg4;vBq@3Rݻ7!ɓћ6m0`!|j^-э> .OEEiժUw~~~PPЂ ݩR)/ufa(]]1cƌ3v|B@$ N:uTBHRRRxx!AC ̓ Q@3eyMDDDDDD||P(rKYRQQq䨩YXX9 ܸqC!1($-ѣ今Ç+VSOy<ϟ?2c ׃|Z$-q_ ,-N>pBK?p}Z[[jA!mYEYjhi^tttp .@ '>&z,u^~ŋUUU;w"QQQ۶mu͞9sY7o|uu/YbB|SҪ IDATڶm۽{w///WWWn=m !԰@=@ĺxo߾ZUUվ}}N0UVoQQQOuׯ !M\P(BHvvŋD;wK9v영0*++ϝ;׾}ÇB*Zǐ P0 F\Ƌ!\t)88h޽QQQO>=w\=^~}a5\v-::zڴi___QRK~mddgݻo߾}*r{iԫW/B_LL r~~~r)W"J.o!FFF[.00ʕ+{챷sP\\o]|yرݻwZ*]1cӧ_~SHpA6.]D/l?!֭[5}}};v쨮>{lBǏkP5۵kG߃JKK~MFoo7nܸqׯ~gKHH!dծZbVVVW&~M6GҥKHHnWF !n=٩S'MkTTTPO/_cǎkӦMh$ Tn$jğݠv W^O>OHH{6lذw^Eڴi` JN:Ei _]v=v؋/^z믿[4\h0% xceepe2YQUUuvvvvv&dee 6빹D`Æ Ϟ=xѪU#JQQQlnYYY7oޤ-4ʕ+o߾]PP >|C( ,׊?m[rE%cǎ}3g֬Y#P !5 G%+'OX,ӓ'Oh Z2B[E恤[\hiӦXBpĉ-\h(QUUussk߾=-@ ]vTUU©SdHpAN*~ꫯhZ2$ cǎp8c6=bĈ֭[XHpAtttFEM󽽽Z.$ SLx--- .ưaô!ƍР;h*4/ᩩtGAuw!c!; n^^^ϟ; r9///!<<<A W4B T :  ./##cٶ+Wc 5xGzxxZ[[{yy;蚉QV@ ! PbOOlٳg %x3f̸s玨Ç>0P B=;t萇ݻ = BpٲeAAAo>R^^o>cc)SB|||Ν;'Z0///88888%@BÈt1g9r$!!!55ƍί^_אW^͞=b QR{Bիccccǎ 0@ \gB8fvzB͛7kn۶RCCcѢE>(INNjoߞ 4ԩS 4h^0Dd#112n8B5V(R222kR>:K>~H=_lYddddd$Uk.тde|>@Z1񚪪5]BӧσǑ#GDFFZJsb B@$kk',,Ff]]]]]] !ݻwe~`Bmۖ"5;m4BȌ3.^;rSSSϜ9C[hOOK.eggPoW1eVi&8p͛'*IOOJHH8ve*!Ǐ?QW_jHHp6lؠ+މqFww'Ol333WWWOOƽQPPٳg߿feeW_M>]F U^^N !fffΝ; FA  .0 \`$(HpQ FA ¦;GM<( \]]BnjCw d񦦦tG` Bc 0a( FA  .0 \`$(HpQ FA  .0 \`$(HpQ FA  .0 \`$(HpQ cX,(B J91 B!!@˅\`$ {5POy<ݱc+ph Q5kɓ'ljf?~}D !eeeƀoP$i݁@B !AAAt\P #F |jjj"A)޽[SS388ݻw@ Wc:'Q{-( FA  .0 \`$(HpQ fX,K0..nʕNNNVVV-Ƞ+H`VQh &Qn2dU"^^#ߥEFF:::* T`0TUU-XۻK=zǏ+**BCC;w\\\*>N`]~ݻ ֭fyy"bb0SRRҶm۶on`y|TL̆4, BER^Ž \`J{Ej (Z"ȖP,b W-EEvY# $$njd2YH&~<9@39eeo^\X#\{^iiin fpzK,ٺu~Y`ԩS].O?]1;}O<ڷoOog>SiӦ̙32wէOG>oj:hX[h]qkŸ甔?CjЋ\,fpb[o5rO<.BJ)z'Nϟ2e+Bu B= dJߪ׫r*'N\~54Q8 5. .B GPQ(p(p \8 .B GPQ(p(pp@=xO%9sr4idsY3:rH6m лwm۶f$(ꮸ=zDDWrRRRj9.{-kSF  \Tӝw٨Q푑 h֬YG .I& <[`رa8 \Tرc G<Eu 6,::x>|x\\\";rHox?g}v۶mN(I۷o0`@E߾}Ý۷>馛#))ԩSW^yexcHZf< <(p⦛nZxqShŊu pGa\R]n@G GPQ(p(p \TEBBBKq<# \*JaPӸB 333|PbHMMmժU6m{ _}վ}jժe˖6lP;&Sk4,Q@N>=hР#Gx.Yɓx۩S^zy/ i̙w_6mnw 3NP334dQ(p(p \8 .B GPQ(p}͘1O>ZJLLڵԩS>\ "W^ş~?_SN[fff8@(0ۀt۱cDZcǎ?f͚۟={vI9 fp۷z뭷=zػwo"3 ZRR )~iiimڴ1c0#n:))i޼yN<9a„VZ%%%=3fퟟ/+:v8~?0d83 ի%u֭CgΜ#?~|޽ǎ{G%=[EGIկ9soIKKOWχWW%KHz뭷/RݵkEIz?5\K h/=7o.iǎs]t3g ?iD!_:z3gL0aƌ!O?4`IEfo-I/'NDFFk׮gϞU;PFFƒ%K>ÇGEEu1%% kgRW$$$=:A@B GPQ(p(p \8 .B GD;Bc͚5 N~.3 wT׮]:ڵkܹsDn6mڄ;fp{ I?p kp(p \8 .B GPQ(p(p \8 .B GPQ(p(p \8 .B GPQ(pz999ӧOOJJr.+q@pӧ/X )@ .B/==]Қ5k<;hXE?~\Yj31坵p\7//o֬Y]vڵٳ= ;TO*)))srrm۶[ouƍn;775831Lym۶iӦ+V8wܹs/_ޤI[Λ7OR*5n^}1c}ݯS*% 3ӊʊwjܸqLL+P/kQ(pQ㮽ZIׯ/?YRǎ+(pQRSS%=#VNKKo2(5jt=`$7.@ .e޽7xcMm۶oj73nݺ%%%nwLEu?v4zxpѦ r)"BMjm[Ն-&3Zdh(h!Cҗp!iS!ÚYedh`^]Ѫ3+KCjh_モǣӆ 3Fʪ?Vǣw=}h&3o*3A:Tm0A׫I͛oU^jT6h„dRR$)-:\.i_/hիMjZSh6ij}ASz1BQQںU}Ӈ**J#Fe\.j Juk\eO W|t}:w">߱Cǫukݺ2 M.]HMS΁viӊw&MRB7ȑ2_Kկ4%C=23k|uxƪ_?^y@=bŤfIfw+&%za͙Sb Lo  A7${5'U+_ SOKUrٚ5enӮI'ܷ$ ^b֭ԩ/<55q;uL3<80x*  JO/zK^xAپ\͜)I%zЦyGS襗>x_BfVVrr|ӷӧO=fgknoo|LJ^ZtXfZ {1ɩl)Imo*w}ԣ"#ը5RDZ~x$qG!@D[g%sեNzu9RjjccuZ\^x!q%I<#3M/ԅ 2S^^v]RW{T.(PAo2c:TqqSrr}\.$/oxI_RR_4kVђA2K*,,|ٳ%iM۷}m$%%Iթ$½JcGIZ6 uFlי3:zT:_={|S?q>CJڻWգV6sb$=Nօ z={o>k֔=8Pwܡ, t<>_V>֨Q}T< 9lXT'KRr,WnO-\=$ix_Et{F,/0G/$VLem}mߦ KGLm|ǭe5"#+N2cFƌ SRR.~N՜952E4Ii?䲳ۼ^ To4iR1B;w*7WZL?.IFl op_vpCȆ}]nD>k ;9@] n}[oYʺu0@ R6M[(**9.ZԩzpGu3J -O2DCȵ PQ(p(p \8J.1xp6Um@KjThݪ6lG5i*%'E EEE  Dp!r4EӟԻ7V[kք_|3u-(Wzauh}zH_}UONOWRqj!?uFܪ[62R.SftZ%G `riժveUcee)%w+=]RWC~s F@Q l覛|O3-XPb_mܪ*Dy]_p~K}I~seeW/ڥ tvT*QKҚ5xdV{;v͜i?QF$[$xm&[o^һ:eՈljyIgnڷLX!ŝ;Iƍ5rW$iR&Mt%AO>̢?_ݺ)>^OW^4kvUlbcյf-,˱u$sOF?=N\ܹjY.RR*27`Ux'˽ y]JLI驧Ԯӧ/urū݋A9VaM;ZJ][Fj0wW^1Ɇ/իGlΜ#,X`xcfVXhڸq&?8aZZo.gJއek֔;Nv&'s>2|xqZS 23l \ZNZ^^ݍ]巬/7Ɏ+xIּc֬Ideb_'*t5zݻ-'rrl.${2_TeW7֮56l\i\@TϷ߷->+-2nݖ,s߅KdY߾&ٲe%zm՛kɱ+0yĀ6eJ/#?I֡cgoxrm;{Q_/K h…MAڷܽےL' r Mvl;{l^_3}ٜ9&YƶpmOsϙdQQQ͛Ν.\ۺ"޻Iֳ廊_[ лwW&S=].^}N,Y6 \@;p:w.y/p%{໔~G>~Z,yP,2$3fh̘&{i \m_(z[ÔaЇ4XYꪀG~[wcW-+y饢OەWdkwUvLe=ڵh#6vW7sg{yn;B]?H ݻMƍ}%B]hxOKNXR87+Nonmn]}͘aϞGmVkʕ6h%&Zd%&ڠAreE!dfڤIִwW_0#ӮnNlk֥EG[\WzrrlL 11֥͚UT|J{ӷg2={ڍ7dw]<f6i%%YTEEYRw}e>A_K+7%D(p2)>RzzzJJJp~N՜952E4InTeg+>^сyilԺPV!w֯IB6ڹSԲezqI5*dר\-\(Iۇ;Ũ@}\/ 7lwջhO!FEGH46 ndn7*i%$(*Jk4m٢P\jBS'b>35o R##ׂp'zguu \8 .B GL믿^94pA ܇zs!PQ(p(pXzIENDB`objgraph-1.8.0/docs/canary-chain.png0000644000175000017500000016233712277007131016353 0ustar mgmg00000000000000PNG  IHDR[C4bKGD IDATxy\u9M\ e]EQqLSsRP)&nig~5-skNeejZ.Ӹ " U3Gd;q?qs]n}h4 @I]P!CH⨭]eɒ%.{駭]čS4'I]BGz{ hEakf5PB* !@qPB* jqc{i=> !CHR8TZOWv_77Ϭ*?!:so.);O$Iث_Lxuߢו_^Wo&QkL|_kʊV 9quҺ4HSV߸Ȓ3uujmF.pH[h]iԚVsYDŽo=n9hzd2 ~c!Ě?o~btN>jAu5e< fX2_qmJeR'1JWUGP)_sC{?ꝧnZwދrU"ЬjXI@qPB* !@qPB* !@q(эzd-T(!vI.hV@q^V_:?wمk.>1љ>5oqu}%gδUR?3 ]\Svy]S7N6^ė7h V֡#GYSHF#6|$Ir-4&GRYZ߮L3ԓ$nطFe+&M6lnQW.QkycSiOFq{|KwB|!Y8,ڋ VRhiCڄL"gƽ o6|֤)EW -'2/=ׄewoS:y<0╁l?-_ oz QL_$&g^ XI5J?+tuewo{' ! *g4)9}TuݷhwO#9%uez{v#vtV|uEUEm?,VRmwRR!s[m_!҄$ !$!/ByuBl>]a'L^rgsm/,|Qj!KkTv4ja$Il\_+Ш5W)6B*ЉّQqZ;:G@ǯٽڦ.B7|Bn}H?(h>b͟7?1tW'Jq:cl<]_ !SޥھoHY/(uM1owƾc-|p mS4FqڟӋ~7nn4j7sXM=/>y='>agZe8e;XIuzu y~\{V[ٖ_i_.̬(/+BzbyN[x;?`>(TYWRQ+VRm+PB* !@qPB* !@qPB* ő4'IT.Brv-Ro ҋ-P[lˤI]%999B0k[J*Ubb"%%څqM* !@qPB* !@qPB* !@qPB* !@qPB* !@qPB* !@qPB* $I$-P!(qf]9F%@XIR@#+((wvvvss{ꩧʪuv_}QQQΎC ٸqͼ?m @c*))=vҥ׮]_Վ;v֭ݻw޽Kl+1ϟ LOOܿVV-ںu˧~Z\\\YY/.]5i}HcD!DJJJG =b~5j0 Y{m^;bŊSͼ'l +1!bbbL- !~4uahYPB*hLB{ZcHH￯u|`04fh 1?^s1{VȨ=zbƌ\&5r{B,[̙3:Ӗo8p/ܽ{wYYN_hQ3 !zB,>}z@@J |ӏ?(1cFLLZ |䭷oBGR5}]@+e˖_׿W>wV]puʕ;w,..R>l$_YSJJɓOnBZ˗7.̈́T(!CHR8T(!CHR8T({ҥK>}z IҌ3,g  oe˖ե`-T{;EGGo"2+ r]p᧟~:x[oeZ~' TɣP8B*kձq\]]:T@x]t;vlJJ͛7kluqqq޽kgy&99O>z~˖-7ovqq>}zϞ=Z]֭[g4*jĈѝ;wh4o߹sgvvv TZ3f\|y;$I;dGٳ_WSNBw_'&&^vm̘1~~~BqƕڵKOƚ> @6hРз~[o3fzTllW\yĉ*qƥz,))IHH9rY.]d+T֮5kݻ֭[Ç9`NNNIIIm}Ç޽ ?#!DTTy/ҥKUUU7nBiӦZS [ncƌuvv>z{ţc%'h4Wn}||ӟ$ɍN:}9rt֎;z꩗^ziݺu'Ny$I:u֭[LL_zk޸qm۶{ ToMǎ;weƌ{>|O?XTkLKKkjRXrVh߾+V8|СC\]]zkrssWϟ֡CNwŴF+Z4ɓ'O>څ˗/o] IR8T(!CHR8T(!CHR8T(`/_nFk;w֮ ,B̛7څ"::UR))).kR8T(!CHR8T(!CHR8T(!CHR8T(!CHR8T(!CHR8T(!CHR@$I{dT$Hh 6h4Z(+PB*ӧǏܮ]Yfݾ}+V 2!((͛7MZ'UNoxyyۇ~>eajN#**Exzz&$$l߾Q ;0ILLB|.]27nƍ◳F199yժU>Zk$?+o2%ZN62lJJʤI2Y>{͎TP;sҥK.]j߆ nܸQUUuСAegg[,Խ{n۶ҥKr6]hQ믅o˗z}IIƍG͇T+y%533ɓ[n>|ܾu֑#G_gtttzzzzzz~LpႷwppp^^DjR={Ęr֭LPPPcu֭{qqqAAA{ WrH+++۶m+;99_ҤSyyJf/4MUUhXHjj֏w .>c-[ãC^`0RVm A2dHaaajjロخ]~駟nxUhNTP4B !˟qkj:..W^o9"ضm[㖁FHՍ;V1gΜCiC=s̙#3fϝ;*++>Ӂ}݅6lhպObŊNpk 5W5~aϞ=/_lj;vMj)q ?kDN3g/kjZk}O?m(+:={3u̙|}>-ھ}{BBFi۶mxx9s .|g}}}5MgyϚ5_V;99EEE-\?nXIWRSRRo k.kJ*E|||ZZZee͛7W\K/ !&Nh`+XI2ּO>iii֨ 6TP͛7>]vΝ;Ih6|R.eG=zb%CHR8T(!CHR8T(!CHR8T(d4]n˖-'NBZF Ri<򈝝$I6Fg`4s…Zzyy;wf~פ`$I:uFIL: `뒒ZmvV@Wk׮'OJ=+@$''W;hMfzVR8}tppy*$ԩSV T {eGJH* bvv?J5}t~ .]6 B;; .tEv K.111vvv**&& "%%%ɗN2ڵqƍBWY4B*؊5kX ĤIRRRn|u P.]U@.^(IR.]]M=!lspp !)DRPR8T(!CHR ,XU*MtHj(M)YI͛gVT(+ԓ|ڴ*}Gٿgg璒;vO0Gz~Ν;wtvv8qbXXVݿ-[FiF cZYSER 2wBk׮edd޽[:vߵkWp 6<ؿ+ @cJJJ_{xx$%%UUU=zTؿSOWWמ={eq_ IDATs5vtt ڵ~:ΫRfϞb8oD;99=nnnhgg"И/^|̙mN0W^111rsۦM??_zzz>>ML㻸ۥcƌ{'\bҿ9wL ;{} ,//_vmNN"<<򀩩~{'$$!<==>o߾}k֬9p;wz}aa.B,[zܹs˖-BDDDrUV}v!CzHY1q 堿v#GTVVVVV>|xڵMݻw;g[Ⱂ @c*,,4yA~znݺuMn]reYYٽF6m$I-+_YmU֥K!{!iE{^tI~aZiy/CaV&7S9sƴ5ZB*`0kS~~}}}}||:yK##F$iϞ=+--t*y-]-gVU*5cǼ ZB*`0>}B;]v7FI$I2G^^ݸqN[tҫWzyy>|ڦ˗/eц˘l]\z3,,LDU&oB\~# kRh&s΍rssstt4sGˍG}QфO2A=tbҤIsttTToB̞=o߾raj}z˘l]9;!!W^u&~XSy+ZVRh&5W)ׯ̙3M͛w9@ݻ744k׮III6mu1kٺt/&h0;w|u:]ff {_`-|-JLL>k׮ѣ6lhq0-o_~ThX>p,ԩS|||pp`8v\0oESv;;޽{{xxh4ӵ{PT!C]qڵݻwZ;[/y~~~xxxxx#GjݑDH4ݻ˯{{ !Νkҵk?TTg 1NJJ_{xx$%%UUU=zT!IRrrr޽M;u4tа>wssFGG;;;7 Ԑ -Gvrr;wVO8}5doڳgϞ={#|ҥZ˸Z~gM=======CCC?SNmK~y!Dhh(! uy.\6mZǎ qF!ĉ'SXXXUU0|p9N͛7E 6deeUTT :ԼO@@ŋϜ9Ӷm &+&&Fܿ޽{_~}ZG7m4tP77⯾TvThX>M},a\]]M˫ڱV4aM+Wtoߖczyyɛ˖-;~xEE^?wܲe˄Byfٍ!Z>jS=zӱ-**vl8}5dnݺ% 6lX?Z'j߾ݻn׮]{ȑÇ̗xu !:tS7VR̙3^wQ9m4IWHV%7oB888ot"/0.[Ր -զ>z<8}5dV^ܭ[nݺ[sssW\)'j䛍*++k-^?BMoMup1B={۷TөTQ7 $;ZNTF.F9V>>rZ>>nj~GͲ}+p{TY&[:~ߊ=;v|׻vZkΝ;;;;߸q{P\z3,,LrT&oVVV:88kN^5a]K.MezuqM*%$$<*W>R>})$}G5Mxx)S}Ν;B=z:tH1iҤ~9::#c=B̞=o߾nnnvvvj}^TxͲ}+p{TY& R|||&NhN=wܨ(y|Yg++d}:uu~(rHHHի}dd/^Bǻ]:~}:VRʕ+7b߸qcǎBȑ#ׯ̙3M-ۻwohhh׮]Qcbb}Ν{ԩǏ˿}+p{TYcǎ>}KrKvvt]Ư[Qb5_S^^^TTw~~~ͭؽ{wXXX@@3޽[~g^zKn駟:~sssh&BH4+VCV-uVrƍCm۶ZH]~V suu5-%KFEEyxx Ժ?~|~~~ܹ9t6l8l,Wh6ѳg|||PP'Cn.%8~ߊFay FGGo^]rСCkMYYYUUUAAA{Ptŋ2h4|ѣG ֱc۷ooݺU~hCKTUUUF.ki;x1c4 y%lD~?#k?I!7=({{o֭o͛7+%%TЄf͚V۴iӧOx!Dffj|;v찳kǻZW[mՊWO-VuQӽ{w_;w.--i+R+Uh@@-פBv|7͟?%;wNcB`[xj-T+oookAH$Iv "@qPB* ҽ5nTl -@A@qXI@ToQ^^޾}H`ؿVVVqqNsrr۷o``Dyg:tsРAAAAʰ0hHgϞ1coEE͛8 Ŭ,!###***Ӆϯ.kcoo_^^iӦݻwW =p@~~c=p} !>6zh???Fsʕ-[ٳgrВRh&N+pvv5jTvv˗MΥeee=_HH 4hׯ///7 r+W>:nܸ'))I!HLL7yzz&&&999TDHE1vuuBTVVo׭[wԩSN-&LprrhǏ_fh֮>oIIʫL}4ƍ @dgwGKEEEϟxb~~S)S#v2o׮Z_h2-К!VOQZZ`ӧO˛$I2FQ$Sׯ !FV tҎ;^|977t… ?G},]رcn2 w5(8qܸgϞwjړ'O~:o^6m:rݻwzsk!D~_}ѣGo޼i0t:]IIIFFƧ~ڰEJ*ٳgϞ=[gϞ]9rdզMӧO/=zO 9sf6EFF^tȾMTZٳggddܼySVGDD_:j(Fwmb!C$Iȸs玫kϞ=4TiӦ8pѣ%%%vvv^^^=[n?ӹsܹcgg׾}{???yFy@ RRR&Om` xo&115PB* !@qPB* !@qP,*غ7xC #2;;;777ݻ5G~9::z{{8vʊZwϺN8v%!D.]ڸS8qĉ.\05!I_MJH4`0ܽ{ݻ.]:x`ppIڴiӈ5`(++=yԩSv\յ)}_~۳gϞ={vԨQ hz-ZT6?VEn0*++]vĉSN}O>$I ܤ9Si_u]v:n۶M1lذ~ !v!V`gg׶mۇ~xȑO?CAAANNj(;;N: !\br`eqqqm۶m۶m\\\DD^?|p#N4wGyãoܸQXXh=)+ܽ{㙙EEEF_gΜ =ztz>---++DѱcLjT*`HOO?vXqqh4hPHH4L+ǎȸ|Vm׮]XXXll|`0߿?++X999700uԹs瘘۷gee7p7;]Tq5j7|3555##}111>b}4 >~xeeoY.zjrѣGFchhC!@+jO׮]۸.]ݻO>sLRRRn8CH=Jb!DΝ&!رc ^)cǎ]ziر[|$r_R3 gΜ9v؉'vvvAAA={ 7o߾[nu!!!K./^\vymvر*ɓ'7nXPP8p ??I.^o>!k];|pffѣ4͕+WlRTTgϞÇgee !TQQQTTna%_gJ M tO=Ss.Ξ=;c __ߊ͛7ggg8pZHhҥKO>o+ 񱷷///ٴiݻ%0 Z>Խ+++m۶5oVTToGnݺ;wv]k.!QQQQIIK@@@=>nBH޻s;""GNNNvWƎ-;vW_}e /7Ne&ѣh\vmffqEDD|||,T!HLL'Bxzz&&&999Çwvv.---,,,++{衇BBBrb]ٜ{ڦM#G:;;?'NB8;;5*;;us}4 2~e 4hׯ///7 rc+z-kPRKϞ=222FciiiDDcG !"""t!ZI,߽~ !XV1WSM>>faQ~!nݺSN:uJ}jժ͘1C0kk֭[;L:5888"""##CR999I/ Y[[O<9$$$,,,##ʪaÆzV2dZ~СC[ju;wZYYժUYf՟K.geeظo߾{iJZj͚57nܶm[WWWå};vد_R='_~*ҥK:t۷ﳆTg=!dW^j:{4^z{6sM4k.88ݻ7n\"ɕ+WD]B P*?xǎ7`I !@qPB* !@qPB* !@qPK0e˖-., ոqqY T:ׯ_Bn҅rԩSƍ [TzRBXTvIR8T(!CHR8T(!CHR8T(!CHR8T(!CHR8T(!CHR8T(!CHRsRT*UQO@ ^t P:FR8TPGeoo_f͙3gu0r.]WV_~~P2226lHKK3_ >rɓ'O<ɔJTPꫤ$77?}488ի&Z}zzӧOϝ;7j(a0uUo< 2___!D@@@uСAI-C Sj/= +5ÞTIe)>>^ѧODh!ī Ë !*8}r)[l)_ ]*]teY"^TPF)3g΅ 4gϞmɓg޴iSfff^^^HHѣ...B{j4_;JTFFTB#GJ8h r1HKMyIeԩS#G^̙3MW\timmmWޯ_?_=k֬Mr)JH*CGR2H*EcΝҜ(+%M0H* Ǹq%U啸6Q_,T(!CHR8T(!CHR8T(!CHX`Iiii'O!.]$4irSzK,f˖-oSL)r"PeggJ*\T*5GGQF2f$TX!/??`{~~_.<lvGGtZmP1 @eWJ___0V 6冐 ĉ5aF8qNW֩S'99ʊ,X< &M$_WՓ&M"‚x!0a|_L0r?/WW۷oK,]*5FRjZǣI!=hٲAFHN<駟ZB !ziB o߾夐/[jjѣG;vhBըQCaB]rO@!`13f̰t 233U*UZ,]sZ+B*K~(!CHR8T(!hܹd8B*xY>'իW[0 a$/##_~|׌:HWTNwԩ .f͚+ڵ/^g! .77wŊ<j7n-111111Q'B*ܑ#G}899Y[[KT)?1H͝;wǎ.儑T(!CHR8T(!CHR8T( EJMM HHH*)))44͛ZVZ[8p`ZLoyܹB EH@_>MOO?uThh;ӰaCwDfRPzuԩcǎ? ШQ]lٲN:**66vǎiiiMl< #\Mw jj̙y|| xT(...Bkkk K ֋/;w.)))//VZ3\eҥv 8prrr"##jU*Bӝ8qҥKյO>-[,! ҥKBf͚~Sz~˖-rKzzѣG]{?իW{uvv>rHbb"//СCjBl߾=88X^1+++,,,,,0BHHIIٽ{J|8$$$77m۶s)}`I"_vGz=bĈ2{˖-BzQziسA{{B[>}*=4iҖ-[_~uu֓'Ovpp(QaRxEFFnܸ1//k-J'QNWpV5|jee|m`}ɒ% 7nܸ~|2![HHȶmt:qJPU*^ׯ_?11>E˄4!!##cѢEQQQe}T IvQNׯ_?__J Hk׮=u:]~~gJsJ`Ŋ/^|N{QDD0KI@ ?|޽{AAAAAA yhڴi?-Wѣǝ;wNx ///44w׮]τ۷oB|)))Z6##c 2MP?H#QNѣϟ?߭[7ݻ5rww~饗}||Zjնm۾}6o\Y6BRLի?zZ^$꼼I&ݽ{W^g˖-uT< .sIRjZNĩh}vPPW_}[F7|ӒEdcT*^鬬jӦMhhիW۶m[Ԋ666}۷">>^:r䈉m- "ػw4D*={bذa?;w>}Kj߿o>ap}mbN*<'uڴi7o6\$e7[L֭BM FR@!Yf5mTVZѣZÆ j]6mfϞ}y!Dpp3\]]mllWޥKz͚5 H*}PaYT_&LN8ҵr?ԩSGf͚.!^|;%t ):7tPwwwKW,::ZR6stB*H7o޽{wKWSQjUK̜+T)8T(!CHR8Tnĉ|O)*B* />'۶mK#PFRP:<*=ݺuݻ֭;bĈ}JZm``s璓5C- жm[Bi7o}=^6lذN:IKϜ9sĉe˖[l9|``ϝ;'x蘛s!!ĶmیeevwwξxMkRM7000""v]v߿"((ٳ...SLZjbb-[;a„r9gxRx!͚5UVB5kN< Ң5jݸq#++q;vر :400pݺu>jRcbb=sbƌ{Z,X 8qbnnn"WWϝ;ŋTDH.?vrrBRTNT^HE-jݺʕ+ccc"""ÿ{Uvޭ}||XvmZj'OL5Aʣ:"y0DHB;"JzJ!&LVׯ?Nׯp%rQFqqq_~eƍKvDlT*%K9s&33S憆 BP!Li&}rrr._vgo>}6m:ydNNN~~[/_.8pbҥOj&99#T4QQQQQQF^^^OOSNXB^m۶_~yƞ={?~n:E}}CJ}Q9Rh,Yrk׮eff4lkРA)STR%,,`1cT*Չ'F!z…>2T҅@Zt eN* !@qPB* !@qPB*Enĉc+++;;:u긹ãwQm۶ɾPH74ͮ]BBB233Z-Ә׿vګV*?tGzzzΝ;Zj˔"ǔse'oX*7n![B*@tGݻwŋ [|7JU[HBBB˱ IJ$==} .,}-,Ybggw .g%++KѩSJPz}TT`$`ϟ={͛z̵6m:r;v;w{Rc~~ϝ;,_~޽ "zjG9}{z۰a:uTΜ9sĉ|VZu-gBH +//ҥKgϞ jBUvԩwfnK.;v숋j4?\,$$$$$$jK.;ܸqƍ5k֜={VnIMM=p@XXŋ6l$/} .\L>|xHOLeׯ?}޽{֭ro/]dXŋ999W^\`AΝMW/=1},o͚5/_o߾N:k||ӧ]v W1,,444../7*s[iӦ]~=))̙3}B9s&))qڴio4n+Us(Yxqff4((ÇJSlR!*Nyً/>yDammݾ}޽{wMթSG! ^;v(|ƍ_~ÇFDDN}ɓ'͛7:u~B>O޳gO[[[[[^zI#OҢ3g!f̘/ظ/X^N8!?~ΝUfmm:|!ŋ5jBܸq_=ydnnnǎ?g:iLknnn666nnnFcfŖ!5kV۶mju͚5'O,HHHx֍L>M6yqСG_2uٳgoڴIh}QLшlfy3f̨_~*UF)xQݻwV6m4o\!#2ܚ˫cǎiiiǏ?vXZZWܳnn+Us(O4?Ŧ!lV H*Tx1?==](=fM0ҤEҿ/Ot!ĢEYAZZ⭷ZfMxxxxxCf͒ 3XZl)>6 I!X?FW^]pưF1}\ž(kQ@4i"=_\ c?O#5ܚiƌ|={5k֜:uj 6bKl+Us(NESj~&~MCs$<<\qʜ~W!4iOQ~İ0f!ĕ+WEҿ .]2,!DFƍ8(W`ZZ;)-RTz^כ3]vrrrttt'"::Y(c)TJJb„ jZj~QBPEM,ǏnZ'ڰa>}7ʋ7mtɜ[n-_tB,]ZV$''?~\dɒ3gdffJI_NPiR.߸qc\\VfU_9J2}rrr._vZ>i/Lgs+M6j[nI/JD<|pƍ Rv~0y2_R&H O 0Sl"2*I~ HOO?w]I:̛7OIrJTTʕ+ nG1xరu֙_^߾}o߾}СrOTThKzyԩ+Vȋ &1bٳgSRRK-;vLII[FKQ^~ݿZzlا#-E1lNy%ְa:991`7sm =i}^U*Z?~~w}ҧ2_R&HTvpni~zfffۗ*DATDj׮=rHBT*;;;ww=znpZ_xdJU^=c[.\x3g$''[YY :¦NڹscǎdeeY[[שS[dɒǏ_v-33ƦaÆ^^^ ֝2eJ*U߿ob?޺u׭u6z+WT^2T3FR8q"++kԨQF)#-E1lNy%6gΜ[^x1??m۶SL)!BOƍ333[h!}W^7n;wnQ+FR&/ZH0Zݵkɓ'_!NBlٲFHTT*{aB*'O[u*ʙq [vӧ'Md_UVNIT˖->{֭[ݺut]y5%<.]d*UV=R|pؼ=wܨQU8(|}}%ނGTTԡC $2DN骽3<<ϯ {Ra$x!D>}ooo. /B* ʒr˩SLoٲ_-tt_ӕexR@Y9rbΜ9.\h4ϟ={'OB̞={ӦMyyy!!!G!ݫhPn(SGP !F) zF2dȱcnj#-6m͛ c$%ggSN9zNNN3g7_VSN~BPa8P1}'֭t@$e@K bڳgРA66_ ?nSZZbȐ!|# qrrrrrYz*.XEoiӦN:nnncƌ9qD fggϙ3iӦ͛7_j"==}5j޼~j%#Fh֬Yz:whѢr:@)))/5jرcWXcFsRZ޽{͛7jԨ#G!!!krfa$@or*Bp@eӻwoç{9stR!ӧOZڴi#=]v-S).())Iѳg]`#*;;;ç_}4ŋəhmm]lDʣZVt:N'`FSʁ RB|'nnnUVB={𐶓Y .qIIVP*5ggg!Ċ+߿ɓ@.Ҙ>}b?ݻw>}?Jsr֣G!ķ~{իW߿!ի>Ci%KHKkԨ!8w\~~sRTjSLwR˘1cv]m]zug.7n܉'ݻ;H-=z&jȑ.\ +(vzȑr 7y`$@/\AjYf|5kJ/bϞ=#G_ZmժՌ3=Z_W=lmm|||.\hͧ~:sLWW*UڶoO>ÇS_8JŜTfǏg prrڱco)R>#oo2Ewԩ>R1 !@qPB* !@qPB* ̀r$ۭPޓVoo/_\ԺpԩX^߰a~nԨQlyxɞ={N>}=JնmѣGw*>>>B(-B*yCi9}F5oO?F̛7iӦ7e/Сða6o|}DV !(AAAB#G>ky>>>%~~pرc>mڴ~0snneƌsN!DVVg}6j(__͛7oQV/̛7oÆ 8q⧟~zʕT*& `4ɓ'ܹscǤcgg3n8Loo{k 2O>;vs6ާO]vjFiBfffzk׮]FZju!y Y1##+55UnҳԿ2e;v0iӦW_}6"XQ`Ju֡CTZW8Ŗ'wϪ|fV\&,_70\Ű0!D N>-É[#E=zܿڵǏBϳgvqq9wsQ+;QY;ܹO<B7nȐ!ϴ'ODFF.^ٳ/7o^Q5mpǎt6AR}G&L<9--믿ܷo{hbEITꫂ4mtŊժUѣGHHo[@@@LL2|]bŊC; !N:gR*3FRhǏϚ5}ƌ毼ڵk7l`UݻzєÇ~wΝY?pΝ;w|5j8}w}'X~'W\y֭C 6Lf4 ߵkW&Mo߾zݻGEE-_\/!>7on߾]emrԗ^zI:G޼yӰCeȂٓ%eu=F^wޔܹiiiQQQK.˖-#-1G#&sRSS/\p޽Yf !͛R [V^#G4m޽{+W,XVVIsqqυ_|Fh4_~bٲe&V,s>>>6lYv+g̘ѢEYf?~\QJ  4())iٲef&r!ġC~ᇴ}͟?_Zd9 6{ĉu.Z_~9p7|ӦMp ?ï:f!U*aL;mڴ۷K/^ 0#ImٲeZZsƍ=ztQ|w/رcƍӧϵk6l0zhy]vڵ;y򤷷wddu뤵:4pK.=zch۴ivŎ;&$$߿Ezz饗LonݺݺukZN81vXybːoӰt 0“'O[˙RcժUMi=1},/((}B-Zl^;w W)~kѢ4exۂL=^ÇKi>x֯_oz2I5gϞ;w^tIjqqq1kmJVjժג-!CϞ=[zKDDD^:55uذa&?9**jʕ-[3226layoM%ٳGotҥq͚5k׮] 9gRT*RҒn[n !l8d!tL _64X+mSo]Kz曷zرcm"_fMQQPR0ѣb؜2d]vׯ__ݻ={̜9oO>b_Bht9[L&γiFzPvB[ r.~KHH(x[3XgϞK.Bԭ[WLbH ^+W,^xƍVVV_})UpVZI-]v}ݐR !}]C~`8G*=QF-?.X/ Ztf͚)\vmΝիW ]pa6mƍP0.XDjZN1Y///^xԨQǎ~g2"H6#vvvO+iŋ333~ 2q/ںؖ1ܚVZ...jǵk׮^zYƍkӦ… CCCW.c4Ƅի{yyI) U͛6 !Jq 1?`8?lo\t̙3B a$0MciZǥ2;;!Ck&M˗_i޼k׎9"ŔHS_6W^=y\TJۆD"GElU6"lXGb#\pDD$lA[-KeI)?fv5ߙz=w>fm}{ҤIJp8 U044w^TTa9Ą?w]xD}Բe/^ܺǔ֭[ ĉQ*wK"rqq*֦OZ)UYʼnWe%tuuK6w[ΏKbb]RRR\]]u։tSN]t?zrGɿpT_pКо}/^GRSZ<hrnݺӺu뚋L]tҥ ҹHT?xɧOzxx7''̙3SL&^lݻw/'''NҥKϝ;ׯ_={߆?}wΝӧ?{Eѡ/?'O-MLL;vl``w CCCI^}޽{eϗ-[&ڠr'u<==?}seeFJ=D+ݖq}ZYYܹSt`1iʔ)gΜ۷ӧOOy$_jɯJ}cYdYen7114ilsEPbNю;.\Plc֭nݪZֻ])qUv}ܹR{]J-ci̘1 .,.Ty[ѣG4nxŕ4hp̙kvԩAJJJ:urqqC\.700Օ@EETƦe˖;Ϟ=kaar:t`kkNDW\6mJܶnZ~hii]xqĈjjjSN^Q~ 1Ue˖9;;7oޜn_ݵkW6~ ʼnWeSNmԨʘ1c.^XbUnKҜ#8qb1)**ѱj"˗/O2e˖CֱcG(1+TsppXlYNZhO?yzzS4wq5iҤp{{{wwhjj*(((**7ʳHF٬Y3yyy%%%s:88T7W0 ZsǏ_`RO9+=X>GR FRrMvϟ?Z2jwI{P9u6sL@"*' `wiѢŸq㜜*;qꜦSPP@ >|l"NœT:(RW#Hli۶-A Tvlڴe˖6lX|9q TIx{500ظqҥK-Zv(邫$7nLMM]pe455 0 uܗ/_؎@D0LPPѢE&O ,I &Ζge4}}}@TPPІ }z۷o ;u$]3 ɓOѣI&Uɓ'DԱcǚue˖-z5""bժUoߞ2eJ@@@vʪ^za P0 s…M6EEE :T'NCDUʊk,qqq+WvڤI֮]+:Iu6~ƍGFFKB366#]v;ݻwo{VRR D PY(Rfdgg{{{v!!!.OٴiS߾}߿ p$ϟ[YY3??? ӧۡd@u{yy޽;33_~qttӓ|iӦ]xQ8 4HI~JLL\bӧw6l06Pu_hѼysRuP ׯ \~[af͚DwܙTP߿yǏ8q P9?^nӧ۶mwɓ'7hЀ0yyy+ܹSCCs֬Y\.Pu TWLLŋ;vQrrɓJ}UNN6dffzxx(**zxxϬܨC ]_~Ν)w999 Ôs~~>TY999<aÆl0u_{EOͥB%"==ȀF)('1+x{500pss[t VHRGڷookkkddO򋞊2>>~ȑD$~pLLLYuAAA޽{۵k8eʔDggg/?pgϞ ;;EiӆPHHH2d?raSN$&&Ι3gٲe:::lGP@JJƍ>p6mv(響7or/>zh^^&Bu_ɓ'l'wp׋- ruu}TϞ=۴iڵk5kwe޽{ dRDDDnݺ=|*+PkO<1c~ppm^zh"uuusU‚ ,X 2rȇz+ȨÇ:TGG~~~lPS]t믿 ;;;+]sbWcJ{ >w ^eC Pׯ߇>|8c YYNFFMLLVVVyyy}e;H? -zcnn.ƍ2)11011ʕ+7oޔE-Y.zjccӥKwJ{捇ʕ+7ov1޽3gܹ3l0C@qX .m|}}.\ضm[CՌKlrɒ%lY~mmǏO8Qv$y(Rꦏ?ܹ3??qܹ͚5c;TyfPPPHH,NVܹS]]s֬Yr(Rg˖-lР 455U G9n8 Or?3 (RgϞ4mtÆ gnذ!ۡjÇ?~| ޺u+[|UUUB Pܾ}{۷߷oO?TWNJ222VXaggU֡{Xx… ;C@Hm!!!6mӧOppرc k֬a;Hlܸ1%%eѢENNN=ۡ*3:i=,,, U+m۶9;;7i҄, u 222ZpEBB;*TUI{СMΝƢbZfŋY{NNp8TʶVPPP׮]MMM={S$8|8 3~o>OOϔ9s,X@__PɓCݻWII۷ogePUVN4߿cǎl'T⢫r?ۻ^UDz:̜9D0 [1@(22tС::: D P`$@}vTTT\`Cc}̙g˳!55,,,pu_Ç ݯ_?@H*1cF6mΜ9aÆť~VD|=((GOĜhaaakkY6mԭ[7nݺmٲ%??XL 55 &$%% _?Or555Gqʕv<<iҤ ?㭬322^z51+T z Rƍk߾#GrssN2~u5VniiY_h{ssbo}3p{9;;6o׷^$8 p _~n׮m|b۶m-[Q?Kw>̌FEEHB%TjIOOڽ{wff/xbϮc\\\|}}w b]MIW^})cc76D 3*nINNvww?t萼E͛פICɼ]v͟?_J*T+V>}ʕ+(OPTZBB555ׯ_occv:ȑ#YYYc;Tݻw֭[wС֭[O8W @@%<~ʪC{}EP Sjii"55uΜ9zzzW^ݿǏ---Q@`$@,111nnn/^ر#jIDDӧOO:vtww;vϸ& E*@yp¦MܹqUR׷lJm|||YzCÆ uT=ݶmۃƎ%jUjjjpp޾}֭[WX1|UUUC@݁"__۷~ȈPuUUU---ݳg֭[?~pe˖ijj E222<==_~QOOPBAA={f̘v(OAARRR,YH "JIIٸqÇ-ZdooߴiSC#W\y͜9sebԩSk׮MHHZjv(PB}kΚ5K]]PߡC@邂֯_S9sG $E*_O>ϯ[nL:qĤImNԩSy<^<oԩS޾};gCC{߻w'@pa;@U/xz捖K?~ٱcsttĢRÇFFF7o8p Yb?| m%u]ZZZk֬5kVhP`$dɓ' |||߼yh"]];v888$&&BZ-ZVVV*6.[rJOO_|}||^|iggW7>Iٳk.Ꮾ۷oSRR6mtٳg7lؐݜP!##Czzzׯ_2dHf%OMm|||qvvvpp) Pٹs DnƏ-Z899(++ի6m\~}РAlg)EaaafDLmҤIrr޾}֭[V\9o޼:y'b*xݻw'$$̟? mԨ瓓6m 8˝6mV<OtK1֭MLLtvvF RNJhѢRK]3ŋ.G:??8??_sUXX?/\?(RAA޽{۷o?>g%'@t?//ŋ@GGիW\񀨯_jjjٳg̙lg)^RR˗/َS:{{{Q޽cbb ;s[[ە+Wr0 2`ǎWD?K&T_DDD^^ޘ1cRSr\.+ˣ:88ݻ066֠]Κ5gϞ>E 2# /^\4//zq,B.޽{-Tٳg۷g;Nq...;Zj_`Æ g7!@}sn͛6l`+ @IwBBq8ESTTlРrJJJRuwM 8pիNQ/_D%|BDtU-[[NՂF:Tj7Ejjjjxx%[iD|m۶JJJ***JJJʊlG 1117f;EU<<))4<$`;#@MB %[RǛ7oΝ;GTLH=z1*T'PJӧix&EERU.]ޞbcNP3RRRvRݻwe= 7IVVtrі|z=={jDllr+lSPJiejܘ~ƏVǣ?ÇP3⌌\.A*](RtBB(%x99[WE "JwRrUl, :;SArǏݻwDԭ[7ݻD$˻U(R +1 -\HM Cyy,瞓wR|Ǐ-FmՊL 6%$$k׎ PJ36mk hf`@JJDD7nTz_ zxQHּ֥A__ DD͛7'-+.7I$CD5C*F" JO~ӓ^|Φgh>214""ڸ(;BBmTА>}dҢٳ+D"j۶-A @D7o~1{ѦMi?f"ڴiSHHϟ=zl25"7oD@HǎѨQFKP۶H**dhHvv-hï]]ISTT¢if'rrrE\P/%&&hƌM4yͬYoccSU^֯_?l07o_511!"ggcT"UjQh(95kF ԰!uLUThrq,ߦ Y# @TB55bxEV䆨{8p]]]ipB}}}EEEeeecccK,8qB9s8  L"" s񣦦&)@fH|8ϟ?d$***dT< > l"$AQQ1// 3P$HJ`0t4OڤHԥ Sl2HShHgiRS#550k~Ϟ;Krrb}]ӦVm|Is璾>))Ӝ9ef_SnJ4v,]ZS)))xЧOqXyHj L˗ӣGكj/S<=iɒIIX1*ktDUr FYYE[)1NkHX FEBC)4?$=zT=`}vJHit25nL[RBҗ/ KK(tb.n^ˉ6l4JK իQǎv-=zTq\iӪGG"SSlΦhߟj4];:w22(+h>"v D4fqXyHt$?N\LϓEGSdhH/5$AˣS[~>AZv-(56oG+wI[[_? -/љ3tijPf#FЈȈN%kkjժ ej{/wURR:thm jU͍/ H[aKG9;UeO>tt%MM1\N!GkPJСtEs璦&)(PDq8Mߴ%pڵѦMԭ uF[P~~fdcCF&PRR0AQ#jЀ_)#UgORU%4BBvX"~hƌo6޸!x:iq8Թ3 Rb_|<ӺuEc:MKDD좬DDԺ5 H$3}YrvoM eLEEsRE [^tiܹC 111}||Dgee[nÇ?z(}iʕfffÇ߽{7 ǏϘ1cРA3f1 P FD@@@-g.!bfd6 iŽ{a7>xJwbaQԀa"fol1z6'8 啹/"FG|̔)tة0 njQJR?u9H!bRR٘1M0}1~~-GXyJ&/LL~~-? 3`099LL cb1>>ZdfeKeZf.,,LaɓeeF.17g_\ewU-DV~9ZlID۷o%`9'o߾}֭#G|M6ׯ_}Dlܸ÷&Wo߶(kwsssgYVՑԂ 3I' !#ϏRSߟ͋n]qGӥKN<%'Ν0śEFիCdiID}{;5L ]hfE 7݉V(=5nL'ORf&ef҉Ԩ]N^^ߴ|nݢ\%==ڴ'uk tˣ;wĄ?&77Ǽrh>rs):~H"'$򧺖٨ID.xڴ)y{]KO..DD{ߋGL~~t:A Mb)p8:J} ׏&{߿'":x-7o(?hv[{ܜ{#BB觟iS1¨r\F맥}v7o|lX*>ϟ?e˖h??]|з'p>~9e"Z~薐ˆh/_ ߶m[kCU-R7QQʢ>}hvz._IUq.]CRR"mm?9GÆQԬyzݿ_N!CHxQgOzvlٻ޽#Câ%wO?*5YЮ]Ի7)*R>k?Q@O咱19CDyw٤Iԯ=[zrՔihXz{+2&LL׏/vWyQ?mڴ!'OsUcnnnǎ#[nU73TTN%'djJOWEN'|IMϞѾ}db"hEDq#Qv6Jf''!}DɤEgט?joOAA4o^KB۔On &\^X&رGoG9'0}١CFyy[4ك+v++RT͍>}OqRTYӎԹ3MFԪyxU5rK鉾y,TՋҒbc)7WpӤIDD3SMB/ t~QЦdaAM{7%' .hɤ:ظXyyQFUF͛7EH'MDD/ MMM-(({uppJt 333o޼I (/ɓ'Wt?ͅ/%o*ǵk?$XRunr'Bǎ ֨/Un. ͰߠA&$/sout}E,\He]B0OGh+fål/FḪmQmŋ?}.][ =qNV}jԨr~VQ)pСEB**Q4 u|V:wHLS.4u*MR(00Hٳg'N֨ؔ2p877aÆUĉ^^^&&&+)P>Ai֭e}%ZRW0aŠVOxxʕ+Q@Q EmժbDFDԬ)(PÆԹ3WК5"XѽMZFpJ~'clhЀ^%ww22"%%RV&##ڴB:vllqcjؐƏ?(lN&Q咲2uD˥Kh6AN+{y=7E슈/3gĄ6 ĄΜ)Ph[[䰰0@ 355=|0A@ZH`ggw7oްT 'On֬7A@*H`oo,Pc;E*H~ʔ)^^^lgH)ŋ+WX"HΝ ˧E*HE=} q8v E*Hss6mر @ PPt3gαc222 aa;@}"Μ9s彼A RG]]}…lg)"z~_{  /^pvv`TFyTTF .]v`TRvvv[nf; HT^˖-8pA@Pj֬MrssRrBM(R@999?~ iiiQppp~~>Y  tuumll֯_/mcƌ!'***bT"||| ///{{{]]].v:E*H;--ŋbvJJJ:5E*'''EE-[$E*UU~͛7lgI@ aܹ-ZX~=A@Plr| Y֡HammݵkիWjTٳwa; . KƎۿ%K`' E*Ș;vDGG;v PP֭ٳ-[g@mA ͍mܸ P[P֬Ym۶ϟjTIk߾AVHr%@C jȐ!?Ò%K5 E*Ȱ͛7zjϞ=l"dXvVZ|$@M- w޺u/HΝ >}) 3f5/( TyfffO0aB{q8N),,q㆙Yw@ uYž>}Qͮiٲ۷oK}Eo޼)Y@œT n֬YS8ԩS\nɗ\ԩSQHT 455w[ެK]*??ں@pa;w:Z)۷/yUj H*ɓ'5liӊU\.wāTS~۷?|u'11]v!9NBBB۶mĀ"׻wouuׯW =zp8ݻw믿j(&TNQPP8x`tto51c3ąT/_{jժʝ$''۷o5kVs<(Rѣ N`РAƍ5*P5h`W\9rHuOl2eJ E`$,{{SN=yDKKj=7i҄޿ߨQMA 2)00plaVVVl l:#@w]"ѣA[`TaGf;} ""eee/(RʃT:(R@H"T:(Rj>)dT:(R@S ^~aÆyyѣGZk׮D as<}4''G[[{ȑSSS?/L4ItGt7^t)333>>ܹs>uy٦} L .z,,,f͚P 0lgɓ')P'}iر߿n2dHDDW1 t{cv킂TUUj~m3zJu2tk׮_(9ߔ޽{ذac^^̙3⊽ԷoÇԲu~@@AN}ӧ>}zbZPPutts޽gϞ'$$޽[;w9ɓ~mzȑvӣG>}T݋Yn0v*lB:t(..NCC|=|?qShԩD4{g&''{0PeA4jt"Jӄ?0 >c$SaaG(() d[Eq0(txwB{[P |?s{8Ã,wKKKBHZZ\.LEEsRӓV644444TZZJ=2m 3`:${zz-==={Hw{&?GmH$2...EEE~)ۍaaa|>zV`nL*.++۷s\sssXBǣcffWTT@ p8+V ;wJ??e˖ѫB,Xhjjjff(Xf%,?oFGGk׮t. 0a& ZpppssH$:s !D t^bT0h-NNN훩|L*˗/oݺ.((իxp`L*4^6̤  `p0HA*iՄ LkAsuvBڵk<L!߿_QQQQQڪT*x90H;C쪯~پ:ήSdff>}*JRѣG1]vMc4yc#]~BHDDDSSSSSSDD!$!!^:<|Hյ<)#GbrϞ=%%%2nnn:ٱcǭ[T+1(55uΝ~822F]7oʢ4Q~!W_%i= "00F^W} kfg~#,aQ2Ioڔlz>Ty7nﯯ7>zwޱƩ?r{!GFFZYYkZQ\G?c~0Wv?eccc?iӦ>JT{ϟohhHJJGK.=|pʕEEE2HSPP /_vΝgg箮TfIT^WWG]ڳu "rsse2ƶm222ܹYWWwqRBu3B233y<^bbbkkkkkW_}xLGT>TWW}/_z6kjj-ZtT* 7': A׈ >[NaT[6%Ϥ_W788HLQοjmmKILLT( "))rI|`za&f%3|>ɓ' Bwww++ ᇿKVV}󮦦>jii)**mٲ7ި$ϧO6n,hѢ\re۶m kkkڞ>}:66Fm455wy$b8""b͚5~#`yVZwߩ$lxzzd .B|XNVi¾FlfR5;lԑMzթ"*EkS EGGsYP8::d2zcPP?@>;uEI̤LIHC% 6[~gBuS*~m !ٳgٴikiiÇ4TB=Ȝ3&Pw']q*LֳAb}zMoTDhmJ=wWgaa/˙ !/fLE^?ojj0?Been޼=)eooojjJDM37R۷o37RWT*?So3i=TOXҞ0-\Ghnn|ĩdWSoS@kS6oL)..fn|Ƅ~64 .ᑞ^__ĉ 6 K$CeoNokkS(mmmǎc#ccc###>> class Node(object): ... def __init__(self, *neighbours): ... self.neighbours = list(neighbours) >>> a = Node() >>> b = Node(a) >>> c = Node(b) >>> d = Node(c) >>> a.neighbours.append(d) >>> import objgraph >>> objgraph.show_backrefs(a, max_depth=15, ... extra_ignore=[id(locals())], ... highlight=lambda x: isinstance(x, Node), ... filename='highlight.png') Graph written to ....dot (12 nodes) Image generated as highlight.png .. figure:: highlight.png :scale: 50% objgraph-1.8.0/docs/canary.png0000644000175000017500000031154212277007131015265 0ustar mgmg00000000000000PNG  IHDRG-CsbKGD IDATxy\.!DEPqPaI)Ƥ^MI4MiZcQLL[sQ>ќBiɃ !bbbݥ9nnn111VJOO'z/SSS7nܨ-h͹뮻 {{fJ/o֬Y#з,Mnk#@6|tiӦM2ʪ駟nbyRwjhhh]0/z W^B̞=J6 RPPk 2<5}}IڵJdff~mlsʔ)B?G-++j.GG_=tZHsSRRfhh ~A3Ep*;99}mLBGydϯP* 8qb.NtF.:::???&&FBԿoR<`H+R=T"`H+R=T"`,.@;[hbrz$MHHHKKvB9rddd)څ rrru:̙3[&muDHj=mG>hwbYY|P\\'뭷2|yիW&''w6lX$FY]ծ_x?ѣ ٳgecv'Nׯ_CCCAA~{{umQZZꫯ] `ϝ;gkkrJi1cƌ⺫W l5/~󩧞zΟ?ߊN9ҒϜ9뱱999Jr„ sm@}}}BBBrrtKpppDDV矓ZçOl㤤^xQ899s={LHHHII)**h4#F6f#׮]U(**::zٲe7R~+֭:TQQ1`P 7ߤUWW[Nq̙޽{6lƌdhdO[<#b#Fsn۶-=="*****b֭'N /~P( W裏mv1Nݯ_f`Ƕ;vlȐ!TN[z+W~*%%E1uT}7˗wwߍ92((HRYnH@h222N< /SUU{I/:TYYiH}}~xiK.]t)++kٲe |ɩS !:nӦM9׮]۽{wVV֪UzW_:tHӛ7o;vرcwtreeڵko޼ߵ;*C?/0,`ڵ骪윜ŋٯψ-6b8XަM233;v?..@Q[[O?9;;7ZE_ ^y啦cۢG}477ʕ+III!!!B+W?裦#:ǎ{{;::{vvv}g222N>}[;688h4/^wzzkj鵵BR9vؠ Å O^p>3\ !!}7o"33s˖- 3fػwSz5g . !֯_lOC7w\OOOkkK.m۶ٳ?ٳ ߺuٳ?6y.\zҥ7Q%O>|QFݺuk֭iii{R\xqŊ#Gw6mMeecǾQͷψ-6b8X^yyի4hC5JW\y]]]/^qׯ;=Az;hsݴiΝ;;wB̟?_ᦿC>p4d޽/u}}}}}}kkkӓ333333{5~ ooo򿏐o ?FGwJ><888 vIC27oc޼y~)͟?? @>3fH_xb#2 O<ĨQiii.]FϟeXJV+ͼ|jb#ƏtqqB̜93>>ќFOå[fffӔn5EpppJJʉ'(~u{;jD"]dOOO!D^^ޖ-[_k-`ccRQQtܹG=z37n\tvݴTt]oB)J ҝƍ3)?~UIp͚5B}DIIN|CCùslb؈7oޜV[[[[[*-#HQ|˖-?GMㆩcʔ)B?G-++j.~ݺuKC^ vm6%}se˖Fbhu#vh4yeψgSkfMhݱ#;;{߾}C gï*L|_ !!$6nxIFh[Q/KJJF9r׮]3?裌 V[]]׿U4WtuᥥIIIEEE%''_zߖqĉӧOoذMOOiӦ !Nzĉ/Ǎwa)xH֯_z…vAQzWki#QQQIIIW^(z0EQ4'00Pz^{1lJy6h Mt1SmӁ=hn/t:݃>P(|>?WsѣLo>q%C BPP%SN>ERbkk;gSZk03gΜ9s~s=cii?gΜe˖\|yBBBrr4NKPPPDD4涅ҥKJӥգnܸa#?~Jr'NBZVVV :u6_relllnnR0a½ޛi\teu{ NNN!!!w}w잶xFLg8R^-\0666==+::%8-[ܸqcĈΟ?e˖'|v+Σ>:|K.544o„ 3gի_{5 Kʪcǎl#MEcbb.Č>|/|g宥2]D RQ@駟FEEIwo߾]1a낙i]2o4.TȐFsss4i\]@dɒk4'''{No>GO֖+U-@#w/s = ϫ\0WzsE\0Wzϫ:ӧ?CBV[SSS]]ݯ_?k`3I@g Ғ7ot:kk뀀[[[y ޑ#G<==wD@z55HTGFFZJV{xx]#TtC^i}nnnCCÀ/_6~x;;;`NH@*--=tti}rrryyu```dd믿6dk`H@{jyիWT*[[[M*))9|ti}fffEEM@@YyJE<BXCCϐB >\Vϙ3GVZYY]&Tڵk퓒|FFFeee^T*՜9s R=мd3 cƌQT=XXXѣ--D @NWAA?^UUէOИJ0x`k"GIMM?CPPx{{!,z|@w),,,&&FVW$ztxC^TzyyKT*/// ;F@7N:.//944tٲeaaar mE@7q֭ÇK򩩩EEEJ?22rժUjC`y  Y|yXXe@"KIIy󦵵u```dd믿6dkC@jI##W^*jΜ9aaa*yh.99Y B!Ę1c$V,- w4ЁǏWUU'444&&FR 55HTGFFZJV{xx]#tzN;uzC!!!˗/ 󳷷Lz2):t(%%͛ցtY ,Z6;;[!0pɓ'*V2&!t%%%'mll"##_!C]#5HݐVMOO_Z/pww4iҜ9sjeڊTM\vѣR|FFFeee^T*՜9sT*U]]]rr򅅅B1cHI^VYZy3lIII+WlźʼnҥǏݻwXXXLLJ ]@ݻ!mnEѬYѣN+ -WDllܹs1bDNlll0GzV"##.jjj%JRPhZNP(\]]GeffSsEnC4R(//n˯m~~~; 0Gzgii$w!0WzsE\0Wlf͚T*-Z$wE̐ٳM&wM@@O?=qV`~H^%R=2X~~4h"iҥK~aJջwŋ !F>zh .޽ԩS\|3Ɂ IDATܹsyq'&&4!88XV:ʪ,==ڎT@pB???9+WOz{{{yy[.##p JӳgϾ~zTT.--MLLB( 0`3|||֬YSSSq{HKM:t|p̙ziNVV޽{kkk&L裏s=RëZZZDFF>cEEEs¤TTRRm۶:WW׹s1{ٱcGgfz͛7ٳgODDįk;;;R)ͼ뮻W_ !v٫WFs,-V6l84`Æ k֬'`.Ht9yyy/|IBh1++Fs._,MTTT4;Fz)}#j*!ei_~r _w} b޽+--h4~i>v̓ߐE+T@W7p@!Ď;44ӳm^r7޸rJ[izХHϜ9'hcB,Y$$$ITZZZL4I,|ذ J⤤f/^lF]&зЬ@!?jzj;m۶FGJrԩ R*Ν۳gOff6{$jСCjaeFKM9wZjc;T=N+/ٷo &L00-\ϯB,X@|M)ܮfW9{#Lg“&Mrtt<|NNNsNNN˰0;;;f[# cƌ1܄0P(,X3`3fYƔ:` #W_(HHHhz)ѽR*>\QQѧO#FL:pC~gΜoC y/]4t'|QQQ;v0V.]X[[+9sb׮]BEmԨQ~ӧ#TiӦI<""bԨQnڲeKffw޼yGؽ{)42x~XF"44tҤIҜ~M6wީopEEE999]vmƍ.]6l… mqM6f̘۷6,**ȑ *))ٶm[^^^]]ܹsGq=ر[ųT[ &nvK8iҤqƽ7n0\zׯo޼911%zW=N+ХEOOϙ3gfff~Gl޼9''G[!!Ė-[Ο?___ܹ-[!|}}7xUN_읕qUVn޼Y4wcX鵸Gw>UV ! 4Sׯ0e{'a}D}}}ZZZyys=h1b77ٳgO瘘ӧK޽p(;N'E;-..F3C^޻vBCC_)}mݺՔ2Ο?]w 6p`aÆ\.;\ׯ_4hPce :ϯ0쑼r力oqʕ펑֝ZNzHwH"gi ҥKB9s888XZZzyy= NW7dG}bBH#ivH;VXXاO}VTT9vX++++++'|R.-pI7=VѣG͓nb(ns$'XdIHHtqq4itY֝)nŊ&LpppP*vvv!!!1114 !-[gooT*{SO !Μ9Ӗ=}Ѓ 0ѱˆF =KqQgɨQd;ڐ)^|E˲8 6N駟,X ػw˅'N rƍ7j()ݻה=41mڴiӦg?P𹹹2eҥK Wr/ns₂?VM٣yܸq^^^?x}iH>|xذaSNm=o;i/cʹjT˗wܩ9fÇJo.0z̙3Ҿ˨:t~?b]fZ=zhgggFSTT?LgEGG[XXVUU?HͮbիW555RױXFxG~aDDDPP4\qqqrrrBB:_}ܹpWWW cǎڵFWUU{^^^۷o7m=jhh#""]\\ZmAA ;[n=~ɓ=< ۳g7|.tqvNWTt b۶mrs}ЃH:w¸4د_?AbjzN;=W@K/Zݠv謬:DNz@7jO>rNtKzk>j豸sE\0WzsE\d;V.@)//HЭ8p@yHMDGGGGG]EwPYY{/³>P(./Ν;322.t6R=V]]Z_\dI>}.$NNNeeerWd@@խ[nڵK.}睝.HMnܸ.,,\|>;`cNNNJZ@vk~~~O?3rssysB'''!č7.t6R='JLL X~ETY?>}ɓ'[YY>|866vرrVc=ٳgU*UIIɞ={7qDjc_aaEӷnݚ)wQҒT@ƍ'|ҷoO>'薣+ GGGR===UWWN{W,YҧO@<Tn7mڴzO?Eu8''RT>ZW_}?˗/g0hРBT&o߾z ř[ayyyrW:c^bbZ\~}OBW@DӧO<ȑ#cƌ(yp>=`Ξ==a„={ݻ7$$D4x7o޺uKB@"LQQѢE?uHEEEr:`6nܸ /9ON<9gB!w]]1f?~w---z7}ETiH.~ӦMofyyK/3]TWdeeկ_?!(N7߼+ϟ_|s=׿x=ܹ7|8У"33s&M9zhllEu.]IHvƍ={$$$]TOp Th7ŋ-?)wQ= a<@;yoe_}C=Tű Th>hڵӟ~_[[[]TN#p[G1 6xzz+Wnܸe˖͛7ٳVN42vؓ'O]$z@,Yu֒?p~BBBHHȼyy~U$ϯHf ֭j oVII"55uӧOwss;q*whۻ!//OB@g`<@ck֬Yfe]]݋/XSSy搐}X5jevvqt8R=lذ_4h>sj G-w!3p>࿶mSOtFJ/\xyy] zOoGuuu9A\;6##C*@g >NkQ/|W;*^^^GT}}V2o:~~~ YYYr:@OWPP0ur}h4F5vXOOO#]Lj#222tI W)@/O]:B]]]JJJuuRPֶO>ҿVVVB={Z9X)quܭofbbb5] O/..>^ZȧPDcI-$cvEK|qȑ_WK++իW>|U*kV__oiiꫯi5i g>͛vvv^^^R-`̆4ܽtC~gΜ_wZ;; &=XQQᜰ0)Շl۶-//uܹX;v茣eҤIһ 4cǎ}WNi#7CP|$&&*{n;v쐾O'-[o3f!֬Y'9s̚5k;w˖-sppfJB2GGǂ6oޜc8gϞ=T"ݪc諯.ܵkWddd^i#7cB7oJ/ "hFnUѣGي݅k׮_4HR7n8pW?iҤ+W6Bamm-M|GX'䥥}7olG}Z2?'?CB|7FyG Ν;k׮YZZ~wN8pBoooOOQFT%KhG3|y}){۷TXXX|MWl:F7KȐ!CƎgR=:MCC~dSVi)5O;U56|p&Ks\ ݗ%Ʋ:/]_]5귿mAAA ݻ7<<>r䈾߯)/BH G444deeeee !\\\6n8~xSjz2gǎFeծ\o(2HÑySB) BaXS>ɴȧ5>0w<^!J {>}dffǖju^z5i$Vҏ~g!ŋ###;i}LSѢT*%RIE)(Ku6%"|q]\k(˕R}$B.fڦܩiLy՜9sL9zݤId---W̡kժU3fppptddd fСCD>u 34Z>EMrJ.]j̬,^z@Ϟ=N>Hwh:!W^9s-__jk2S[Cmު?~?xn~lΜ9~~~={F{uzzC[qzxxlْ=|u~YZZ6k֌}ۧOf(**Z`fYYY~~;wx奥ÇciӼmmmuuu^x~Q 34ZǎݻwӥKN8QV=!d޽7nٳ{}^^@Mihh8;;U@|c۶m%%%͛7\&# 5v^mKNѣG8N-`0zmff&Tݹsɓ>}***zzz|>ѣGiiifGmڴa0ٙ FAA{N^x}|>߮]-Zp8իWW)&ݻ?xmSdV\͛yU:óg.^x޽?X֭[mڴp8+W544C||<-XXXϞ=p]T[^P !&fll2`Yfo|> g3R]#Fpvv  !w>~8!!!!ÇtR~~Vŋ̍7V:Ců?ر3gdvzV=4` ܜ%\HnfѢE/^(---++wuuCXN:~}Ŋ%%%w?gkx%O?rׯaɒ%\.$//ﯿ"iF0ON!ѷo.-----}vtt4!Eu_III\. zzzC Hx{m߾}?~uuu;WmxW^_Һuk飤۷o߾%&&+))G+ƪV-lllJJJ0n(4$\=z]yyyVV֭[E4h 777###BȫW>,@Xؘd8p,knnnl6˗/?qč7!Z,((x CCp[[[w…m۶%&&ի/^(F4hP@@۷o҄H :tԨQݺuSSS#X[[VKKǏ?NNN~ȿW[UQOѣG'%%%%%5klرeee'N\^>pƌd2oܸm۶wU;/[U̙3]]] &Pa Ɔ LLL233-[&ϟUi?gL&ӳK.l6]Ԝ'N2dC&MƍWDT^UUUΝ;3{%&&~Q|I&U)S~:k֬2򕔔/^f͚)S/"dtMCCN^>???;;‹7nx=!DJu҅rٯ_bqr8KKKwڵTEL&W^L&ӧ7o`%ܽ{VZO>]~EEED%~"d'Բ?UJ¿** m۶YW}?{3gxyyyݺuswwf0"]CQ@̑H̑T&G'O$%% Rofۖ 3׀DIcuZg +@ +cZPV$:vH~www-BH7I<<< ƥK@PVҥKuuu}Gl6{…Euüy\ܹsK%S__ k޼+c!r^SSsҥ͛7$i֬p1uԞ={ <ё:5.>iҤ^zQO4833F 6mpHPnvvv/ή|%(@1k!<%ɉ{?sv!'OԩSvڮ]'ēly;={ҫW//_H}Iqaúu&x٬YΝ;wY4j(;;Z2rHr[nSՂXG߿mۺ fѣֳg߿_m]RB&OL] ج[NY.f!9::B>}*&u5Ν;^^^?=vطoڴiӴݺuSWW^l[b&L`mm- 1a1rHmBͲeˊ%ٵ$Ww{xl6UV?!ӂ߾}k֬jbbBѩJ333GGDꕕ;wLWRRrt}DZ&&&SN?Ν;EI^Uϟm'88󄐠 BƍU}PPͶkM8UXXشiӶm VZYѣGDBZldɒ/_j*<<\WWۛ!Z`U9vĉ322JJJ!JJJ}%PRDD׮]æM888xxxP rOOOss?~ݼybkkԾ}{OOϔI"pȐ!|>3*WW=zPSttt<<"kk}]~[LIvǏ yyy]bvjj'H >|gϞ [nu=<<<.."ڷoHQUUnE&MZL U׮]KOOxbqquZ(PH̑TVGc)lu"c߿_$6u'%YAV$6mJ>MjjjjoZlYPP@u\h0j|_=ujsyyy\."BM6eddgddPPoQM6r/^B=5fȐ!{VWWrܹs%wЁr%Uܴi$//O$ u bٲe߿r=Nܽz7n}􉺵Դ ٸq͛7߿͛oswU[b(B|yJoÆ ^*--ݷo!I&"S \*—$/[I={ʕ+^^^ΝxbMC#).`߾}]]]n޼n:ys}DkqqqϞ=rO>#ڊ_`Us544ݩ9˳o޼(cǎ{qܯ_RSoQ;۞={\RRRRRRrʕxRa?a-[2eJӦMO<)T"XZZQQQQQQǏuuu#R\ElAY=y*+jqIWz^*ݻw'lݺ577Togꂏ$nOS>']]݉'nذaÆ QQQT7Y4$Ç/**ڿ^`A^TUUx`??sN0A0$G:LJQWĬW EEKkE?~ԤƑL:/&<6MuC{hxvn5jyN-ZDuѯ0dVA {qFPG Ƒ#G;R%%%'!מ+Sǫx.SVg7%/[ ~EYYiӦ޽_Hx\fΜٮ]6mڴnݚjlڴI0Oii+yr7o|򥱱gqqVAA$C=QdV[[ѣG+++gddU,((022t 6Cz1zHkD-17o޼|r'''Ax)TDpֲ11b/5A",,޾gϞ...۷o߾}xx7kq/_G"1GRYe :҂hgg5kT5';S$e&91k%I׍H ^455َ:+9d[vvvVSS{I IDATFm|cc: Byu6m|ܹs_^^~mh{{{R߽ٓ{gdddmm-Beee%ϟO05/АsNAJ!|>`0 BXn<%'GO%l+-4[lf͚͛رC*J`^RR%8].^X?$+; ug/B{njӧOjZecc#|<۷/5$$dݻWϞ=322t 6e%}UVvvv6iݺ `ƍPRRj߾=uٽ{wUUUUU=zPPoQC\7wBfϞMYti^tuuL:u(ub7\II\$ 5ռy<<>>ϟ??{Ç߿O? " KTnСJJJ(L&iӦ;U"IiӆbRP#Y`U\v͛7M6m֬YaaxH:cQ;[pp#vl^^^aaaL&̙3ש:l6mccNi*՗bYIETˠ x%%%333a%I <յkWjQRRѣ-_Uo6{BMM4NCCd6iʊzlQQQʪӦMSSS{q?bn߾] ddd,\044tӦMwUVVvss3g`:`*IZfEYYY9rʕM6yFZnfU䶥_NMMe2;ZZZl6NUmceR?HQ RW_+JMMrG]]]]]ḻs\򉯿ɰթSV7ozihhj*jJvv]ӇrttСU5uÇ !Gutt4i…8s挡NaaƤ$ww-[^rʕ-[ j'iiifff9xHddd sUOOϙ3g V[<%'/^vBȇ*&IVgBSWWiOn۶#X5BȥKenn.r]ٲI۷¥ӧSN_`'N9r$!̙3O,'ܺuՕjQ$;v4773fS#F,[r{]aa'N8׳gO@+@G"1GҪIxB;0%''gŊ}Y:J{xx?|VVVݻw+*2IMIeL EH]}oܹ3<<<$$Dx;w U[$+KT,ի jܪ/,,_GmggWVVvhjhJYYٜ9szICQcrzxxlْ=|iӦy{{ꖕx"==ѣTw ׷|믿ږgee%$$tE[nׯefx<۷oo߾-jIx奥Çm۶8::6o\p\U)a 4R3wddݻ۷oOwPP\.ܹst@U* \ׯ_vmԨQtЛ7oN:-[ѝђ%KΟ?BwZ5cmmݭ[7Hܹsٳ+qrr4h/>zGll#"=%%_pӧ666{;(%Kܹs(>j?~ ;Hm9;;_v 6НHf͚UZZJwziѢAd@CCc˖-NNN7nܠ;(9s~z׮]tqЪGq522ruuݼy3q@Qnz;YJh;Gw311IOO_dɓ[B?>[hAJhHn߾=44l? cҤIO>;u݉~ ,XzǏkS:rw5"tr5OO~M4D@QFYZZΚ5 P9$njjJwsΘݻ?yD@'f͚}?,P $͛G6 BCC^ZRRҹs{3i$GwV=Dvޭ1x`ȏKCCCAw"͚5kܹKwV=@|~LLLPP*YJUUuݺutssÐiV۶mGoҝzeff3 vZyy;wׯ_,X@wӹsg[[[Ц]vW\駟"""JKKN֢E%K]ƍtgA?NLLl;[DDÄ |>YUPLwO?eggvĉtb26lxݻzj _~3YĻqƕ+W^D&Mbbbvܹ~޽{}D ?˗/rϧ;V=x;vh׮]Ϟ=BCC333GG .DGGgΜ96m{.YzƎ1`НEAuŋq@NƏommahV=@<ב#GDhԩSӦM5jTII ݉)))YYY[l; @cV=@bbbk``@wEb-Ztر]>DPlmm'N8cƌW^ѝQCr?>}4ɓ\~._\RR蘞Nws .՝177t钫k>}O@jڴƍ!H$ЪPyyCBBRhjj&''O:uҤIeeet':Էo߀B*H Ъo|>.JJJʫW^:,kҥqqqt':vo߾͙3 ;hT"&&[nt.\ GGǫWꊾŋ7nxu4Fh7XO>4hVxxoDf6r׭[訮޴iSww#GP Ϗf{ȑ#P_{W^m׮]=bccu%""[n#G PA6L?~tss{%2&&b/++IIIL9wܹs ݻw: Gٳٳg0]vuq…;q 4HV0-_˗m۶.))x[̿~ m۶}𡤤$++kРAq/D@>m۶5554M4]b… ^ZZJw"֭[/Ydҥ999tg*H 18!$11Q%XYYݿԩS^^^Ԕ'O׏eK{{Kx񢫫kvvY,??v:tEtx>}r劲2qb0 T5I: ~7LO>%C0Myyy??bbbФ /^񣋋˃2d2wɓKҝr @V=ݻwtiڵkwECCCWW׌ 「;&SSSBSמ۷oO9|pRx<,#(D.BwLGG'--O>^^^qqqtܹsdddyy9YD Z  !Ǐ|rYYYvvvdd6Ldd; JKK/]O?QB>_6lbvؑb B $j?ZǏn! 8:\`0eee;}rwGsΊ;wum֭Ǐ ۼy3ͦ;ƍ'O| Q2TQPAŇ@ V0ddd 8PMMyᱱbg'NXbڵkǍ׺ukԹa۾}{֭{MwFd̘1GILL0`ׯ_2٧O"*H Z"z##yѝѹp A>Owׯ_w1,,ltg01~RzB9rϟGEwƨ[nYYYO<;F˖-u֝={, Z j߾} i!@ 111ti/_ߥKll :444ӧOtg_k -Ъ ϟ?OIIzzikk:88ݻTPO__~;@V:t(_Zr'u6i׮]::: ;Hcvoo8p8 -Zضm[ttt||}b t OOx<Ǿ*//rrr455 gܹϟȈhu`$$$p8@}jBh֭֬[L&L"|D_:XII)??ҥ񇡡E?v옗WxxۙL>X,֎;:w۷n޼yHHHZZ@J...LHH=z4S&&&۳gڵk gذar6yz`0lvŷlvpp5|y<޽{3h GW6 OOݻwڵk̙tg)kҥӧO?wY@tڵUVUZZ(< zEXVVVqzYYZWTTT\>2sL\𩿆 cǎ+W.^, S<իWtg`0BBB*aff H XEaoooaaQq40Uꓓ d($$;wիR2dHII Y@ 6e6BKV6lhd>V߿Ub IDAT_~ڴi۷o; HC]]=99޽{ RVDdV rS\.Z2Q\\,ҪgX'O+O>f̘d4w޽y;vНHhh0 cǎ۷1BA^m^p6`tԩm۶h.f{{{_HP,YpBCC/]DwY"##srr"88\bҘ@ѠUXт C7677߻w/V0̝;wvmϟ?;Hc…z?|@wP&&&  7BA^ .'x<z4V=j޼yJJ(++Y@!_@"ЪW8h.!UOٱcGΝ r{ĉOzo}dgguŋ'%%ѝ觧`0 XЪW8L&dr84T~ٲetg9i׮]RRRjj;v#ݻGw_XXӣ; ba "OCBH=C8ξ}N򖐐 4ݻ¶l2zhy(..ѣjҤ q OPK @EJtP8;vק7C~~>!Dbܺu 5բE [[[S"u떍 5֗A^LLL!JJ;(NXYY@ŋ?~ʕ+tǁiݺ'&O~z4y<544T. y+"%%%Eh4$h7f #&&h>rppصk׆ 6nHwb6hV=4|{ԩS2dȼy&Mt1(Qسgϖ-[bccҘ;wn@@@PP۷@ЪƢQQQƍ{Y Fttt{( Yt5z@!UH&M{ ҝĉ[nEDDН@!`u:mٲ"h l6r`mmf͚ooݻj:>>_~;*H5kҖ-[#@}7x`ooo&?G ?EEEtgioٲe3gz(((ܹs]t;!T1!͛h҃n?XrRZ~A^|IwZr8KKKwڵDnc2zrvv600`2O>MMMykp3ƆzGx믿?"""'N2dC&MƍGi׮[555矔w,p:u*//?uԩS444:vr322:rvv޽{VlO_~qn$ƍ;z茌 Aw16wMҝ @-U/'jjjӦM֦^vM]]],k„ ւ)88A#1j(;;;)ӧOfeeeiiy\FikkK=x>x{{nݚү_ B9rzzz^^^666˖-+..d27ncǎ#GѼydWWױcڵ ggTjz9~}tt˗/MLLF%f~kk}]~ۛ] 5jjgnժ՚5k=zr)o>s̓'OJJJ;wؿVܹs  Իwзo O֭ժ֭ǏJKK۶mۿdyЭs#F={6ߖաC}n; *H儺3.ɓ81wڕ?33G6o,t۳gMzBHjj… 7nܸbŊ@BcccN|("wE7nu0Ŕ'1< 6773۷o[jeggw|`0hZhAINN.++XXXr_nݺ ^~]|P)++ϝ;wȑKw-ъ+޽{7x 7A1P{^N۴ibLMM%BHPP|/Bȷo!yo߾jjjl6vĈ\fzz:!$**k׮L&SIII__GT|hT͛Gw<`8P=TjԩSNNN-Z9s&5%77RgϞرeXXXwoݺE=G0ýBÖ_Ԕ+Wtҥ6211իWO@d2gϞ4k֬;f߳g?^4PL Tx޼y/_r@n-OGy $kr+W斔|=33sb///_~}RR˗/JJJ6nHxܹ?%>͎;vȑO>ѣ;wbݻf͚k׮}K,¡2dʕ+yرo߾ 48 *HU1c˩CН;ѻwo333('Oգ=ݛ ?[nMHHp82YΝ;#"">}ڲeK,ht=z;>>q1*8H/c0q۷0`R=q1A Ǐ=Ew' 8P&=4rh?6e˖_ҝd9>>~˖-V; r`2ԓje˖7mڴiӦ+Vr߼yqF>xJOYd۷o?~x///jz~zz:A@fV^{ Թ8B͛EPo޽!<<\GGGYYǧNi&KKKUUUCCCڭ[*]!ܹsK.ݱcGAAϩS䲡Ъ[[[GGh0>} {h!>>>Hy`J{'$$ȑ#o߾~^U ݾ}ɓ'׮]nnnޯ_wnkzh=z}FwMUj '>x𠨨痖ٳg˗/p8͚5;y1cZd,)++߿}}y9qꊅ!=Ji߾ÇWÇ !˖-PUU%T{KRϞ=OpuBHjj,$V=(MM~Q#ACҴi#GӇz4@D7nܾ}H[3A"##;KKK/]O?B!K,)(((**:rHXXuƾ|ӧO"`Y9Ójl˖-Ncǎu jxΜ9?~5k}sɓ'?}TgUTT<==|Gݻ'}zȑ" __Ԕ{Vϟ?^d"$*gh YEr8bыToMV$һ+o/ݝVZK1֞2epsFdCE)I  ~]SLQQQ^ի={VUHGMM-)) ^jjjNwz_EPS***k׮c0'OVVV&'N[nyyy,K.!se2Z6lٳŴ/^}̙/^XYY 6l„ Z@^ *SNxbM?4{4HBnŋڵ jѢYzuUb2޽ۿ|~۶m===El`%7~/o޼ə7o9ʣG^xAiժՐ!CڶmlwqM *{2dl+ں=kkԊmil E* 3lTdWC^.>]ک /)++٭\2&&q]2|%a 6?L>rȑ#GM8yT _g;0QK4E"omqq˗O89R߼yM,*****bL{m"^~M >‘W}}2dɒuօHpS49^ػ,˗/G‘)kSiKKK[[[2ё^E>䓵kך JHH[ؘF={,** {F$.\(//O&(ʳgφ5?Q;;;civı#6׬Ycff&""gϞwnhwnWXXxڵ , aaammmcG~С>|͛7ǏdD"HII={ìC$mll$$$ZZZbccXWhaaՄonnNOOOLLb]={X0---!i…'O0Swy̙㣧GӳCCC-2ĥKZZZĪ<cZcs cM{aOWWh 8Iquus 8;;o۶?$5+ 20 @S@V 'ϟ?¶m,,,Sddd\\\Yl۶{jժVWWW555вe۟={ڰa sYf-X`3zm'r}}}͛Bm۶竩}7c𝋔P(--%K/bgg'%%U]]]RR2n07of֪߼ysVVBD"}'Xa8FYYYYYfic%##ƈJ]]!TXX ))ٙƇ.11#G0Hai#nBGGg_Ӹ?jBL2JAA͛7byP||ώ;5UUU׬YeosB&ܢ!csww_Ͻ畄2dEKKKVVד}k׮wXXX (++]VKK?d9YRR򫯾joo_bӦMX`xiii]]]ZZZK.,,mT[FgVTTh47RTTUTToߎu}pEc]]]GGǸd5k0a##!!Zh6e&&&Of;\---{}}/j#𜜜~UUUWW1?1NqLc^Ơ366;;;{{{܎;Ɯ?.X|;%''iiop{WeAi<4{/t:Α"rss{{{jjjBs޼yypp#6EAA+qss[hX^^?̑yE9n*))am!tjVUUumaHaaaMMĒ%K9Ɨ/_N$k׮h7oބ! [nx񢿿ŋެ'cÇEEE?~<8pϷ͙3ӓ9۰Åb3Uee%v#۷SRR\xqPQs:gĿw=s̾}>)%%H$KII.%%%8C/[lhh)K+Wx`Fھ}zzz:D"Qd$e&7|QQѺ:7zgV84vhʾ⋹s窫a6nȼ՞i&X~>[a`cC|<oGGǾ>)) .Αz(dǎϞ=}OەjkkY'boդ9RQsƙ0e"1ٱV/_ Y=Bh">sAA{vuu=zpT\I2 هUgA$ިTکST*gD!Dʰ9ssp III1jii [pҵ#a-[[[^h ;wtvv?cD477c=ɱ{755M|=-ڸq#H믉Q]]6 33yZ[[GQSSʼyޙ Ԛ>g0l|/h:xh378q˗êt!駟߿pxG$pcÿ0[ IDAT"400/{OoЁD"D꘱ȑ#DEE/qbm%Y[__$Hzzz[nevYG}. #Xh`EEEg͚Օº;OʼnNכ c[eD"1)))$$d7|۷d2ldd}vPNN6Åեy&GS?koI"4555uQ}jMy3{H^`$Hڹs'bB]vijjH$u};333D\'9sޱ6N]Ix el c=E޽9e׮]iiiK.Rmmah2U deeݽ8^dddHLL277A=adh/#66vs[ѣm۶!XG,G311X[[Әʒ&G}sa K,9x "T*5&&rccc-,,dee*77|"{ccc==͛7~cZ};0l^u=zzzzzzÂlhhf{Ç݈ L!c\駟2{45`Wq-z6agԥA###)))g˗//^)!!A[ZZV``|088Ԕɓ .~ĉk :99XCFF`pVTT +1ʺ~̛7oRSSs挏F gx=_---tzMM sx~cZvL ?wegg'&&>Po]]]uuu;;;KKKcccD888:tkw,K>3:~"ȚO[&ˤ[7@k *++3'111<<_600F&|||Ƙg֭VVV S 74 '8Mlll#""84ǵ/zgBPPPhhϔnJSSӧS!0ח.]VM)`b_._|Ճ nmmMNNvrr555:+ﱚu\zΞ=H,55SLs\y <8ECCCCCcMK/w,A |09$ٳ999˜9s-[2k?~G7  FtϯEy&pCbb?ށn ƶmۈD z&"hfffff_YY^^^"""ޞXY;:^^^~ 83}888}V\\X}7t:}˖-ax`:ѣ;vl۶{xȷmG=3a9::he˖ A@@ؼy3@6(&/hW8IFFfӦMuuu/_>v옺}```AA iLcǎ[b#hd`JFGGikk;wX]]}߾}>;FGGGg2p…m۶^:22pY=ZV?)ÇVX!!!akkXTTw0!/_lmm;pE???oo?p ܄5 044?ǟ={688w0%KO_m۶~ XmښpŋϞ={Ŋ.\;Fn֬Y ,J!wx`IPP~*))y!''wikkQTxbѣÇ# ߏwێx{{{{{ eddݻw߾}......fffc͛7\GH$ 3gTUUihh ޽{KNw8O 10!MMM >Yd3zҥ~eŊ~E MBB"<<@4iӦÇx͛wy`P!//}庺: ">sMMM--]v&0gΜ/!22fAAA}}}xFꚐ044w `裏nݺuܹ{Byɔ; ^ $&&B/BWWWVVn! p)55]v *&&=^`4 O>%-F"0 c`:zeBBBBBBJJJ__ӲeTTTիk׮o tww'x={w `{ʕ+333mmmݾ}{̓xT!>>>xx nfff~~~]]]8p*v#3_iiiPPЫW<==,X@qTMNN;0݉,]ѣGxDEEi4Z?ށ4Y=ú2xooשּׁuʚ;v,:::8}䉖ݻ?rC[...W^;}||VXw8 f_^^~mm?YQQŋ1ԡC555ۧ~رC+۷o;ٳgvw8< `$-c0EEEIIIO>TPPXdŋDT*ƍ+J8kŊmmmxxI@@_~Ic1eee٦x ` a?{NNN萓[/H7 DEE%&&Ν;wǎ|qh//b]]]cҥK߱cǯ* w8:̿|2B)**駟TUU<<<Μ9 wŋ߼yիWONKK7oA```kk+2|ȑ˗/WUU =ɳfͲ; ** #+(`*++{gϞh˖- Ź^Xo{rtt44xaZn;wzG@VY=3۷o_|b"k B)gY=6۷6nܸfQQQFC6mڔXPP --w,QT*mnnw8ӂoCCǏzzzu~~>?##իWd2Y[[koff 9_zL?~,&&vڍ7r(Fihhhiiyh۷o?'Oܺu pwgϞao@V4k,[[[??憆;wx{{SO>HZZСCUUUxKVX!...%%}o߲~,]Kݼysɒ%RRRBBBs=zׯh4ڏ?hnn.!!A&׬Yv$# y{{GGGx 00Xwޖ-[V^ gBHLL9^t@Y=`,/^xEii)N;w L獦m)GNqhK1 6ܾ}{GiiiW^}E2.:t{9;;_~Ŋ3'NVZZuWTTގgv`e~IIIll,vzeԴJOOOOO`NlhhPVV.++Ԭrss322Zxܹs^'ǽ~:***<<ѣG6mrpp׎.]իϟrrr111***x/8q{˻C  pJevD"ttt ̬fNn#,,#""M*OEV/&&# YD& 64440qss~:ֆw 7nRVV^j͛,XsSCCAtt4 -8j_155;n~ݻ{{{|p=d  P(999999/_ijj5eCq9e掄LRSS322233ccc_~u=#y7nܨ400޼yØRK.utt ͡utt^ŋ!!!xU>>>4 Kzz46623Jbhhhbbbdddddd``7O$ Фs fffMd%UUUE)4-..wqq䛇>NNN...aaaX*{۲eKdd˗lقw8˗wuu#~zTGAA?<~xxxxEEEGGӧOTUU۷`qqqo&22Btg'Bh߾}{6޽{_;V|຺:_VVvʕE!o޼Y__?44X/ H?͛MMM׮]#v풗^82444::xpHHȱcǶmǻjavC4LΝ۹s vF"455O<VPP044wڪz|ky80w>LoܸQRRH$؜;wߨShh(D:tN;?޽+&&сw,ܐj{1f(P<.RFQ(RPPX|3ԄU*ӀBCCnݺlٲ`1110:N"BCC΃z388XVVL KKKd6cUUUGGG YYYyxxxzzN𞞞-[ܽ{ϧ+?b yy﫪^padO Q|AAs2 544 III111ojjGXxtL1((7oބfS=<<߿obbw8$##s)lPz d ;tvv&T*!$++lϙ3`8󫫫ݗ/_(..wt/99yڵaaaxDGGڵk5kǨ߿?;8z`B:::>!4g}}}======]]]555?mDGGgdd,ZekMMMk׮MOO?q℟D7 ?p۷ӭ {׭[wI l400P^^^TTTYYEEE$IUUUSS>DRRxIKKKHHHHHvwwRWW+*qʕO?T]]ڵk .+g÷njff.++w8100@< h$0// !$--%lOX{ 񝝝NNNNNN<)((ضm[nn.Vhwyyy^^^D"޽{x^MLL~W lVGGz̪$_SSPXXxggϞ狉;:::::p>Ft+WrmӀddd\v/[LAAիxAVY=p[mmmIIIqqqqqqIIIQQQKK BHLLLWW>_GGG[[[DDxg(*8gΜK::::88hkks'… ]h4g}vG~ww'իW @< 1ZA TUUutttttT_MMM@@g*z%K`555z/_~eeeuu5NG)((`!玡Ĥ^GGǥKM0KMM}9ށy6@VcX~qqqOOBHJJJKKH_GGGBBFMHHHIIyٛ7olmm5448 ܹs`OWW֭[ݻ9rW8q"***//@< ~OPJKKJKK_z"HX+RUU%HxG?矧O/^x"6?={޽{{0C߿ٙW;Bo2%Y=`d0#tvv23ׯ_#d:kkkc/as,OOOԴ666^r%((cR oooqqH###?OOOOWWW___{{{OOF{-B?ua6@V3WCC>'4}>V_[[J644TRRZqqya-Z$**i4/\~ 6̝;аf͚Wz{{~Dv/Y>F!$$dݺu )Y=`d6ԯBcپOTٝVtzaaarrrjjjrrr]]լY[syyypp7jjj7lذvٳgs6~~;w֯__ ݻw[XXFEE\`Ĵ4FUy* tx\ l*FRاrrrJJJD"߰ϟKHH,\---eee'o޽{ƍO<rww^|9Ɩj*:~̙-[1 UUBGGǧOb~嗽{Y=`d8BP(*ֶ!!!!uuu,gMhTjVVVVVVjjjjjjoo?tvv޿?<<<..@ 8;;{{{XbGNsaժU999 FaI$g}vi\BvJ ꔔp zQ9Bmm-- )))i/]]]h(ˊFbeeeD]]]333[[[}}qS;w%''/_|UBCC>|x9iiiN|||"##)=H$>|…܏g``@AAu1 \ d `]]kOR+++u·QWWbׯ_xeiii풒Xomm=gΜ1oll~LLLbbbKٳҥKgϾrʕ+9O`|={F(Hs r?*??g2<~ɓ' SzL;XbaR,iii aogrWp/_Ě?BH$###kkkL~===111111T*UMMmnnnK.YWBMM!UUTT|ZXX S"7?~Q!(6kvv)#`@VY=W]]L $_0㠥^fffggق ,X`ll<`dggGGG?z(33D"-ZuD"AYY9?L駟vA ` uwwϛ7B1LZTLiiiXy ܏Y=`dx@}} X}t:!$,,8ܹs0466"hѢacڷ%$$:99͚5ҥKDΝսS0,,,44THHhpp51Hy楧Ov~z!((cǎ_0 lohhhY_SSSAA5ё;5n?M~aaa\\\lll^^^SS;2L$O:C|޽{!!!$ihh q999NPll `JAVY=իWX} !D"UUUjjjZ$!_]]fD33`===EΝ;W^^ FBBBZZZ\СC򋈈HGGz1F$G^^^_jjjX::P(I~gg'6~^dd˒H$7̚5 UkkkvvvFFF]]BH[[>r T*ԩSwvsNm zQԑkkkqd9sXc2?3aAA3p_CܼAV@;`Zra[ZZI>'$$yMxx------±om H\tiBB=8~'''**O #s~yyy!ҥK#"z{{ L;waDD`OO))=0AVpٳgϞmjj:a kjj%UTTdTD V&/!!;o?J gȇFү1D"NjSÇ_|񅼼/ z ~Pooo]]VJfff644477cH$>f񾢢rII D`mhh… AAA;wd@VC{{{{{{_xzjaaa O$~1s>h_0>>>==}K555!5553 /:RRRQ^^i&+S B֭!gt;j{디/6HQUUuqqپ}PUUUqq17tww#tuugxJ`0(t[XX_[[`0&mbbb~~6qhh)((hkkC͞=J@@Ngdd嵶2 %%%kkk]]q74888k,}}};;;?NyAAAkk+FSQQ177dV =66@ }# _}ӧO{zzmllLMM'/̕?~<..BfffVWW}VHHHQQqѢEZZZvj䞎a8ʱc?~\\\, `cccccrdff-_<~`hjjIII3A +**ݳg xW 'x^N9ush|ԤHD";χx3GBB>-6x d`iii~~~EEBL&Op zzzT*{Knܸa***6l 044tm œz ݻ)徾BBB999O&Uڵk]]]ۜInmm444JܹSZZիW{{{)Jeeڵk{*kEdҖT]%HimkZ+junW IDAT...D)R"פlD$יq~w0zc89=眑#Wo#B %**JII)..***$44o[eii?;?(((̙3Gvpߩv!9>yJ | ł?!T~= zMOOy}}=!DBBbĈcƌՕBo|||AAܜ9s !/^ˋ:ujBBBNNȑ#edd%999==]IIiL&ƍ&&&O>%+((־z>w\ UUUvvv|mHHHbp,((ppp2dHmm322^F޾}|!Cp9--jРAҟ>}zyDDDll,U6t)G@?Ǐ6lPTTy+W %99"}ڵk͛oZ>}XXX޹sgф;wBi|pߩv!W\\\ee%sNu)- c=$zQ hgϞMMM4hŖ-[.]:v609sF------=fjlQZZ%%%7>ʓ'O! .9rڂ !Ԓ>}B߿\SSlٲ6KVVM]]]RRR]]oT\Çӧ9!XYY 6{.ꫯ X,/"ln!),|ӹWo$''X[[֙,j[}n>! U=ЃZE?bjyiii/_^-Oҿ}j1!DEE$;;ZCN&KP}ŋ_Z\\g 8) j𳼼СCܫy1 pJPRR*--}unBHaaa[ctʹ4SSS)3Z̫3mMiVK[ga[aa!ZTqH]ЁOV֭[eeeUUUn݊]/Jx{ڊ7Rc-n;C$_@od2Gx-[XYY 2ӧ.\h%l6022ɓuuuÆ .6ʏȨ)u9j-*** sĉsΥ~f766%%%Qӭ*++x|rdff GDDXk׮)0u5551.]jv3mM~&^EDD~PS׷-}x !?WwJ ]*| >! c * >|N] O#FX`wrҤIihhL4bhh{˗/ oܸqo߾MHH kvFB@KK+%%%00PL:5--mm2Vctʹdw2zh\͞io0MUUĉܧ Gmz9f;ҥKĄ`HII_^VVv,[SNMOO=KuttxSБ>!߿<DiӚ-( CFFFIIiРAGO+%%lٲ2L uR\dIBBBjj*U0M<`:::?.**߿СC !k֬yI^^އ ghhHvL&3;;Jʕ+o޼'!!1j(##, !52c A]_~zzzFFF|esg"<,Lv?7QÇ7Y=}lEDDTVV2;)`_kщ+WqF^^={!෸OHjj*!dСZ@D0^## … yWBG$''_|YCCcŊtg饄'h̤ǥ6a }zѲdjtCCQ'.iU=hҢ;V(úzq@\Wzq@\W_=t{%%%ѝC:T.\Hw6{iuu!; @NDw6KLLUTT|}}XW@ O:Iw6@U@!sݹsS ,W~-qZvYZZdɒ[nM28 |qAKKKkkLU=8{QLMM_zEwAP𓕕 WQQ;@P4CQQ1""ֶ8CU~HwC FPt\~޾8p8S@'CUЙ +V3&44ŋvм<>}())Yy200ӧqxx8 pg;7s?sɒ%}kWȨzzԩw ؿ*22ݻwz.7ݻcݻHSS3!!Ç?|pddd߾}O8QZZZWWBn t[9r$""Ĥ뎢yM333jˍ7,,,ONM맦={vɒ%M[ ;T]XҥKw}INN'BU///_SSSUUէO zhB ɓ'O3gN~~>qAUеLfppMMM_Į݆ Fnwutt!W\iX=̈5Pt}޸q`XYYUWWwzքĆggg/[x[[[ꧪK.544tzT\XWMrrrN:qİ0)μtYY>vkkkj(u |P?]rt;t5vX=@7Լz;w֯_߹-ܻwZAAAYYy͚5gϞ?ɼ~}dee<~C2 c*::rtgтzhΜ5kҥKUTT6nHwoŋ 7oެfggG}aP`۶m%%%K.ϦONwWׯ_ϝ;޽{">-z3\gϞ544,,,;%Tx񢪪eyy9q@S~"""mlljkkbU=Ԣ233-ZbU=FBw'Da``S<==bU=3gsSNѝW B֬YS\\䤢bccCwuDΝ;KKK/^|֭)SDfZZZZ[[gffҝDz#!!qQFz8 P"YYpKKˊ ~T jP(EEň*[[ۺ:v1cTUUј Dzѥ~ڵ46MٳgϪU***Ξ=Kw:Н5kֲejjjΞ=f fVV;thooOw'4izjB5bp^|yΝ3gҝ bq7JII9rT Pɓ'566nollrJQQ]@]/^:uj~~>_IOT :P>X,)f.pf ~%P.CCH--- W/-- %Tӧ `2?b0+U=ppp_幵=ŊKOO7U=ؐwss+((Xn$UKKK 聪@ 0IIIFFF ̙3t4s!MԔ ~6/ܻwO ~VVVuuĉ;@Ϙ1 U=uք x;IIIÇ%#G,+++..xvZS4TvZkkkSrrrꬦ؎KHH4{[{Չ Sy^KZZ@\-@\Wzq@\󫯾2dqDÝ'##F]]rӦMNSZZ)!!1~E7f߾};!!۷l6{ذazzzܵ1@ TDFFn>w^llӧyw۸qcTTsǎKKK#|˖-#p8 6q_GGG_ro߾]wvͪ˩qqq?~?:zgϸ[P\zbܧƯܹs^JIIp8kݻw-[HHHn pBXX333 nܸ1q/^>|O7on߾رcnnn_LL̳gdee-[v%gXޏGw4z#iӦ1LuFFFÆ ߱c!|/ܻwƍ !?~ےEyyBy~LU\v[B/^!%%5|ŋ ?>>ڴi K֯_Mq@8ɓy^reo:-fTWWSOo !TzPTTig RBw JJJ!<,@o$''g+...((hnP77ܹssxf;v,!… ,+//CK&MD9sss}!X-ºzdɒAm7o˗;EO>/:ybb?gjرc͚9sfzzzff3gt̘1}D;T@ܹsfΜ)U#pB##!Cקzzzܹ3,,Yl_IIg}`-(EYii)!dt1~ҥKI ܹs}/5kmll7gڵkL&sʔ)N0aBJJJt似<~_~QF5`eeeU=z MLLp8|?-,,ccc̙{n?K>|׮]d2ϋ/|f7nݺuQf?>##F]]rӦM'OtRNNN]]'??NM[[o1G),,}:eѢEݻwWUUzŕGOOo3f;g;VqsׯKII8;;㏷nݒYl\; IDAT}IVVO?t56=}]v 嶶o޼^p᪯o[={ٳ۷o?d644888ܽ{Ç>|(p86l0GGG_ro߾׿?-))hS{[[[jހSk5wE˗/7o,//?w65Ɔ޽{O[;ͧwDg!mܸ1**z9xcǎB>}tauue˖dÆ `7nHMMnZ ߷򊋋{Ehh !!!!/^0`tܙ3gBBB"##ݍdeeTmmmFFڵ] !_~edddLLLeeرc̙ӧO6pN>ݻȧOӧ$!$44t7o,(( ]~]YYVٳg/Ó'O>>SPPPPPQAlooŋߟj?knnޯ_?&GN-N=|ѣ.\hS?PMڸqN\>}g}k.Bȳgڈϴix׭[ 6L__ǎϟ >VG#w^MMMYYٍ7B>~ȷ%++%~^0LLL ϝ;wB[[[ ),XpdOOŋ/7n\z(jQ_Rdffnܸȑ#GٸqJii+W: !cǎ:t(]Rrr2K.ϙL&cmm-|%EEEBHVV֍7@{0 fB+I&@ܦ!999OCUքj?áB8aÆ۷o߾}z̙3:Ԧ3Q+ [x k„ $|L<+W֯_2ԍhi|WbUTTR]]7sG޽{d[GTMMrө+ݦ:$$dɒ%ǏΝ;7,u |"Z0dލSgහwi!C^|]M{6Bß?M'ܺuIikk4 p8l6ohԘ#G 8ɓ'Sͅ&Mw6۷'''744}ʕ+۶m#Pe|pM3ö6ضm[jjjCCCjj*ߩCn=y$!MW.;ollL9rH|||yy9nll,))o@ӧT 3̎| گ_ 㝬?gj"k޺u+!!Nф)SP7ZjUtt7oгf \f wKqqEO>RHo#AKm6m9444//{E4SSӼr8۷KHHر5::+6}G9|[[[nNݻwCֺ;wn[fee%|;cƌy/wߔ)S o߾YJmH/%--Mw?6ln߿XXŋ1&--?꺻_p:&&..ە+WjjjHII}nnn7boo?c 6|77o?~$TSS366曘#<77S0gС/n_k=Rbb".K]!00pSLݯкx`Q;e'''YY٠cooKF!NNNtZJJJ[퀱zh+W>~244&Z;־W)S@ݼyҥK A@>{E Y@Nf_zUWWGw1իիWW@!֭[n)@uϒ:)qA@ AAAtGl6yUQQQ~~~^^޻wX,!DRRz```uV 9~8x𠚚Y9w˗G4hPټy(\ÇE俍&M;BCXXA@18@tٳ'555''`0F6ͻAtt,]Qׯ 7e"--388xɞ_5݉@-ZB~嗢}ҝ[*:vll/!Ԍ%=!DYY{NOO/((f255}ݡX,ѣG/_:U="''o>;0Luuw*))u[*ZɕDX'Oსirr2ݡBn޼YXX@@UobTTj~***b1V$111**>++P݁QFzT ȷ]RRRVV6&&f~thǏ ޾};A@U|ԘL&wdxx1ch͔h> >< ))IWWɩ\)Sf͚Ew!P@ҌΝ7\dllLS4z(++ |>ѣW^ruu-));@oӈ sf999M0ѣG6mڒ%K;6onnn9997nv LOO߷oAAU$((hȑ'N0aBK{*++sBʕ=UUUʲpqq:~8Ţ;ث۱cŋǎKwiPjŶ|󍥥WXkᅡp|`hhhjjLw(V]]hcccggGwP ӦMMHHpss;XꑷoĨ2{{,CݻwWTTt U=@ӯj޽+;HEE__&&&?HMMյͥ;hyɁ~/,ГX,Ǹq㔔={uVIIIC7sIHH,\IIINNNt ...ƍsrr; pzS۷رc111t' {fqk#G\zUKKյ\4۵kWJJʩS]*t5T=ٳg ?}t}GGGAwBEEU}SҎ^^^#Fضm[EEݹu1cНz>T=Ǐ/_zG7D= wuu}򥻻GUUݹ۷o.]joovZ@G/cbb/##CwXW/X>}rrr6nxMMMZstrJyy?,[!l^JJ1݉z&GNNΪU<<<?Hw.u[nJJJtgU=@OPQQacc믿޽ ;Q\YYTHYYY...ZZZǏgXt婭uss6l씋M06= ʒݧMFwEP'&%%ݾ}{{RVVp8e} }d2 zqUSSk׮ڄLmԨQAAA))):::SL}vbmm-%%m`ǎ Ko߾555zKz:UQCU ==8YYٯѣG]zDj975>/!!!kk>}(**^J }||[UUժUkkk-[6h &bffo``зo_&`[nz^3 O޷o_5vX@qѣA5*++,ܙ3gNsDEEM8bbbɓ.:J;~_|ܹs^ȨQfΜY__ϻ5 *++k)'tRG\jUH3:񲲲;w;^3'O:uqRRqz#eeeD&&&QQQeeeYYY~o_ǜyfĈ uuu Ϟ=ݻ׿ .TUUUUU?^II3##j3>>~ذaEEE>>>ԏ,,,_^QQ͛cǎq8_#^pgϞo߲Xp333!U]}FÃ,Ћe]}}7ͦ;N不O?ѝbXAAA .C`BHdd$w͛7Z}G mܹs}}}o޼]]][Ν;p@ޕqذaٳgw'OZEwtuJ]]>Нz5T⡲r AAAtg팍]\\NcQå_~݉!|􉻥Z@M+++K#o#UUU999I--YooVWWm%%%wHK{Ψՙxd IDAT,a>xմiRSS޽pBvߥϟ9rիZZZԵ{ݻws8M6x񢦦 8??Ν;{WTTqㆣctrF .LJJ֦;vD]llqddd|`_t/T"~;;q™")zMVVv~~~m‹BnUVV֜9srʜBjK z{{p Z>|XjU͛KcРAL&s;wP?|pÆ RPP0008x`cccYTU=ug)/IIIG&޴iҥKBCC,XP__{1N^<}Ao߾zjIIn8Uo߾ QPPТEV :{+֭[wȑnU@ - ,8}thh(JzѤp{Qfffzzz]1Xecc>;w'uDz888l۶ѣ(A`@.\0&&&$$dtǁ楥;633@gϞyxx\xq̘1QpmFt &&'' ɓ'.]i& PЬ*777**J[[8 eeeT"$111**>++P fm۶v_tghz:UWW[XX|Ν;taq&&&?HMMյͥ;6o߾?͍8CU@?ݻw ł… 322tuuaҥ!!!֭;PPУf޼y111#F;2/.?~ȑWjiiН DNUUիW#""lll ,T4IIIy&FŎcvvW@@#mVQQAw.߿zիWkzp.]4vX@{`]wuuqww𨪪;,;;{ҤI722;@۠n;wpBhhԿTO>nnn9997n|HHHd;)Ԍ;w_ԩSׯ:t(ۉj׫W~ٟ+u؈VΞ=;s=z9sm۶lj@ >|/ ؎Ugiiyu"p8\.WEEE"D"XLDfff7n`;#԰UVnذl'-EEE[~ɼEEE߽{wAbܼy̙3ۇX |ڵx[n?%}CpB[D" |@ `JzuuѣGjeXXXHHHNN΀nݺvZ:c 55"yhlgqCPCc۷?611a; TפIZn-)@0r:u6...$$$##ÇlySLrС8O z葍Mdds̙vܹscٲe_}Yp܅ ~JGGgu ꒭mBBɓ'o߾mdd윜vdff֩S@ʍ70%Tݻw޸q#Y̝;ب:|p>42***NNNϡCΝksWWW55BiXSMٓ&Mruuҥ ۉjz'HO(=zTS@M>t3bV+\3ݻtuѢElSL ŷp8######"U٭[ ~ܹkז= y栠 }}}@ [dH$*ޞ<uu9s<~xÆ 'Oҥ˳U-=zӧ*$YEH`֪ ֎uppTuU=@ Xjڵk vyz4hPڵܹ3E-zɪU_]677]ʩE3fxM:***o߾=={vhhEopB=CBB݋ׁ@UP,XPPP답1GGv1E"ۉ^hѢƍ={vnݺyyy^#??_~qwwc+gڵkgaa,p{8q;v%"ܹs퓒lmmPwPԘӧO9rß}Y,ZFEEeذal'zUV7n|QϟߵkW///-NzEvUٙ$r]vmcwW:uѣ&cDv --O>&Lskdff~|>4>>8PO={~;x`׮];lذ:3r\QFo߶iF,؄}ʒ-Or۷oQ\E c5cܹzzz۷og;ԅ-Z.rtqׯ_o׮q٢ &DDDPVZ1wd;'\\\rrr8(W^j+:thYm\\\2TS ^oTQQЈ055e8;;:u82^zÆ o"Һue\4x/={v9%L]" ` .ʈ^.Gb1>|xtttϞ=ݻw?~|BaHHѣٍAD6mb?_;$)߾}bŊݻwm:zc5eʔa"fmL޼yv pM /B(}h"&&SNΩ5rɩ988ZZZQQQ677x% ɓ/^O%$w޸H$>|xLLL]*_}(EEEǏ-6mڔK$]]N(zzz:::ևyP?>|D^6lX׮]YX_6i҄s\ aÆ 4BKKݐ,BUPu/W6mrrr=zG=z)))೺ ^~ݣG#/<OEEQ޽ncccmmݢE  (%%e?Cvz=J)j}ݝӪu?X=@ݸqٳϟgVo 7)(()$4TLve~gsss g5$ӧSPʕ4noO"=Nt0T zʹ~ŋq7$(IWI2:͞j8juzj{{{Ž!" oIԶ-Q˖doO/Ҁ!D"Z ? :TNoeKr),8jӆ >iS۶PhhSׯwrrAZF$GG& ھI( ++iV~23?TJ5;8(+RSU+5fnnND{H$z}i?tP=ev5kFDׯ_Tȑ#EEEsa;TձcLAAA̚EIǘP;UY<lܸ\CCCGG^Vr׮]ֱcGuuu >}fH4{ѣGc8|.\7nܽ{uV~\\\_^Yt -]J[E9;;_755ӳ[o9882oȅz ۷oذa,9̖(˗/|}}J@v_ѣgOV@<>>>zzzl咵58vh0PY]] T(S||; 7-tȑ=z@>T|WWW U=|999~z?nmmmhhv2#???00pڴilQDBMQ6NԧSL jUkP=K֤C::dmM!ߧi@RQQ>] [᫝L~K]ihP.4w.%'lOJ&&M͚ј1RQ"~~~ .trrrvvn@  &L`;brsٙ>n ))?qԫ5b*Hi!cdTơSƒ-} =yB>>JH7zEfqiVJIImP¯.P`@[YYlْ >HOnGϧ|_"KKñJ"i`r2-_ND~=efRf&_ODIOz~[NӧW(S^ DׯSAPt4YZR^)h$zv)'(8F5XqƔ?|ժUNZni;hd0VP@ pO?vy^'qsG%(IWGFuu22"##=P]EMF+WJ\I_/5vQ N7ѣ>͛DD~~Ԧt:Eҧ-)"Zn'{{EblLӦє)Ծ}6(<ٸqo߾}e7=t՜5>3cGZԑ#DDKDF+mKjjԲ%˟4`h244pPU:ˣo-˥0pM*(%OmC i&ij mBBafFC&гg%wPԤ uB?@99hN23#mm$bF5e0y/]͘F+WNDMbtXL{C.. Q܃q#z[}2w=u$wUp&"{/i`ڿ23:ڵkD4vXYI #kbŊɓ'O0aΜ9/O~~;\\\NQNNΦMNzQeΞ=d''Ϝ9~pPGpԎGEEM???q V@Ӧwǎ9ݻWqU/wygiܸO#'uH- YYQt4mJK~?hBߟޞ""Jn1 IDAT:IMMm[}Z؀y%>]5zQt45kFB!+HeDwժedPZ|ܘFmڐ>SϞIJDM3g>}YyJ'/뼆 o-r,ر,!kkڲLLnݢe(*}{z_HڵАij6Q@?NҟhH6iSUggg"^윚Y~:##c֭vvv-'OܬYrv,~!e$ɶmۮ^ZoٲESSS?~Xe#G$]v[|}}X='$ɹsƏf" 3H_&OHht:yg+v(tI$Tڳ$גͮ]*,Ti1kW;ILPDD7lϧVv ==:qrs)7||ys ;>i?K|>PNm$ÃLJ:vs(;'++ڰAz/8@St41Y\_DwL"`~azΖi`@;w $ڵDD V-+7ĭͲގŋ鯿(=oaAoҒ޼!"/{zBzvOQo98ɓ y{ӈ$S@ML4cSQQN!+##C$y& #r*bn^jժ'O={vFFF/^8uTϿ{ܸqDk.S|g~#9sѣG}||֬YjzOܸq,WN#GѣGkPPvջ]=HCڴ oo&MukھJw4lK9ڽ[ˋ^&##*fɓI[iڳS2{ҀNw/ѿחƍ#]]RS#SS%":s3YeKRW' :{V~r(Քiz //zN׏T?Of&-[FSҐ!7.}*`;QJ D? )aaHO/Rǎ)ֹPm&WW ׯi.27\:zF?ĉc"ܹvӧO>}~OOO?~x5;|2yzzkiiq.]0 ՝Ė/^0-+N>nݺjFjy%\x}_~%AS= sz4ea’[,,>>64$"ͭt'˿Uhxڲ'.W:PY=|HD4v'۞ǃ%:)lN>9by镢KT!]]ȠOf{GDԼ'-^iCQy iVv#mBVVe 1# -[6o&"ѡ:~ͥ=M>>diIoQߦ j455.]ڽ{wf͛7:?{{"]4(A$LOjjjɄs矗\ޯR_:Eg3ӹ Ɏ̭>-&+GǎѨQdhH PL ikt~]~VZ_|Q|c.]bX,K<%M ""D->}Cc҉.ZsǺvJDO<)R3`XųCD{yYUUw_}Ν;kT]zU" 6 ԔJѠATP@'OJ'3F$GG& ھI( ++iV~23?TJ5;8(+RSU+50;:%חy%Fϧ8 )6VzѸC%DÇttZ>ytef@@11/Pgܹ y͍qڰ(+~'uux<ڽzibjߞmX.GO˔vODD11KW4LiDDSRPPA]DS}Mo#,g{ D vED۷GɍNKHgeQ>B5||h4jߞnߦ+VgJYoGL qX^FS>^H?tzkפ 6CӦԩPlGD ,1C6m*kw#;v~b2Oyyy5,_x۔E]F9l@0VQhh(׾=-_^rs SZ&.worwץm֬km[RSΝi:rG~']JWU4ڸIC6%ccڴcI/siiѸqQnp2vG&!QӦԫ͛GDDjjtm"=|cS]5@D vEDKЙ3deEZZEVVtǒͣ)Կ?x!P#{v H7ouD꤮N:7Э[Kz"ڳʊI]u 6ݽK˗Wo=<<444\-[)K={ѣ.1gΜ[YYlْ媫o~۶mZڭ[jhhtuU X=ԫWڵkloo_X}C7kMN?P;wl۶?_`ATTTvv6!AU@D3+} %yyyGݺukrr2iҤɌ3,X`jjJDΨRPƪ_Fx;vBD2`e˖988h.~)S7ov4hPPLLq*^jթS޼yCD;v̙ӲeKUKaa!hPP\\écyyyQ;w\NXk׮۷ob--'^/҂I5D!CnjS7ǚ;wnInUk׮'NܻwHMMmРA?#j긏?~qMVIIIlGq$ 󵵵=:yd@=sഴ4Dceewulܸq'N?wH$266f;#b8%%寿:UVӧO_xq~X޿%"AUPewm nݺX#RRR|[@VB//_~SL9|";{.?QQQ9996l}TTTj;|qС%=CMMĉ?+BJmԨQGa;RuwwOJJ3gΚ5ki\XXx-Y%ccdddnnniiimmݽ{:Kޘܹs/TN8(c=zdeev ݻw1ԩS6bqqq7n܈}P(lѢhnn޼yȜ8q{O޼y_~u *Y׮]?~}_1+,,qFdddtttTTTVVX,6775kրzꥪvL U=(ϟwЁMFFFtttdddTTT||@ ׷Xbś7o~w//ٳg@U˗lh =zŌ߿rܹ̝&|}}/_m65U=(/_k׎ ճg^~mnndaaaaa[q\\_`ŋQBUJ*777++}lhHRSSÓdɒCuWƏ?dȐm۶q`FU=(W^*`ڼys;;;OOO[[Ν;WP(tqqi޼/q@I|P!77ʕ+w着0`֬YÆ 8p]yzz޺u+66Yf@i%Kmmm===EEE!!!!!!ׯ_}1bƍgxx;SPRyD$Hn޼x<^ttLMMmmmW^miiYγ\]]'N8k֬ %%ڦMS.\x-Z3fÇ[n]SGYtP(ܷo_Mu%^ @WXX_uuufz[[۾}#!"DRݸqÇϪ]To*{eԛ7oNPO*((055uppعsE.W.:t̙3TR&T޼yӪU+SԊ/xWyFOOvǎvvv:uloU(;/\SPz捾>)jLaaaHHs|rr23Ĥov0. ʼ +((EU D"IHHشi]-###BBB233CBB<==MMMYs8f87i\S2 V*]$ܹL[[[SS& yJ lڴDSSSSSd˖-BPn62D5k:tx =0vպes"ۖ-[r;fccӼy&Mt~)o jʓ'Ouuu_s_\777]]] &<{LTddk۶mZlioo'mfffO4U@0_vx_7o'OiTԩSKlr-,,K e .]DDFFF̟<u/IА{D#G.^ߣGs,Hp/ P>'N1c@ PZ:ʕK.?~I&u-q555,'kڴiaaa^^^;4mÇeTn0PXTKUR')kf%󍟈A d]TR>|`ĉÇk%PcPO __)S,W\>}zJJȑ#9%Wrrr5kXͬ`(7qıc8xuW]vM5N$ހ^)r"KzX-***ݸoU IDATYs ںu$… ϟ߾}{ P^V{gϞEEE͙3ܹsu>(]]]SPJJzyĉ74abS+3߿Sݺu#" .""fjttt͆^Į0իݽ{W]EԠ;QYgpy5㈈"b?z6mԭ[7 "rJ!\!C{__[nQHHHPߠeX$x<{նmgee-[,>>͛7޲VZѹsJ޻wO,ٳ^̊;tPff@ 0a1cN7o)"b.HOO3gάKصnjKH>|xKKKEԠc2G /Ball,'>zoH|رW^eee?*u@Py 2\={c[[[aCC9sedd%4_Y'Ϟ=KD%ًÇ]ںS666J<;cƌGV吻"Э'RV Tq _-/==ug|.+,y=-;1dw[fM}'O\&E3gNu@M6ё:s;$UB(;;ݽCjjj%:v옚ZY-[khhhii3OnܸyiӦƛ6m*Q_=zPSSk׮ݚ5kdelr"Э"'RNx7i$CCC55Mk޼y׽&zD1chjj6k믿~ jժd丹iii7.99yV$]m۶jjj;w^f /u~7|өS'.effcǎھO$@mSBBxQQQ;vttttpp(wse˖kv!777+u:t`;4*999/_x!!!O>9r$3W>|**X h?iaa <<|#""":vv"U=(fVJJŋ?|Я_?GGꉆESS… #Gٳ'ۉTtP["ʕ+wȑ#;bAյlْ3fȐ!gk֬+4, JU}}ܦM;;;88yoƌ(]] 2ĉşzٳ'M*ctP8X\{I$7o\p!11QUU_ܹs-viii/]tڴiw]~=YtH$ [p޽{َ fEDD,_<**T8777((( 醆cƌ駟 Ui];v022Zhэ7;xi?ChXPaZCU_}"ްaX,NLL۷oY-߿y),,,,Y2v^ze`'Νۿ}2H$+Vh߾)S`SX~U@ `''';{С}[ׯ_BB¤IBCCbqSNd+@Â@0U=36Us=z$&&2@ MNIIrpphѢ}TTk||۷oPĔ(%X,vppx9[X}udff~7ϟH$ŷ߹sgʕ׮]VUUǎ۽{wB=rE"QNN}lll>@Âp8 ""bʔ)o߾-Qʙ3g-ZdooJBh(޽{2B099yϟg`>(#UUUT" /_>ttP(MM8%=TÃYA]]]nHq0c\.z=yEv\EEE/_M4l@?>))͛7oތBZAA3h]vuwwg;/@dv h6mzUB o>tPAAA- VXѣG:HvܹxyyHzBEEL$xŋϟ?OIID***bxMX||<5e;E)}]\\\NP|}} é0)0@=Ō@QXXÇyWPP_PPw߱>233fϞ]5iӦl)!ՇADlgpPk4T*T z U=@C5P%bsPTsx8sLXXX;@=a`~F7o^>}TTXu>@=a%"cccv/Pk^z߸qCEEe˖-Æ sssfe8pYYYm۶1cc)IDDĎ;x<^^^^\\%&&9s&>>ݻwZZZFFF,WB'88DԡC#GN:D0~-`rǗo߾ .DEEjjĈ]bqxxxlllZZX,ԩ0=8H$ KOO'"ssÇ*U=#;;{֬Y̟H$իWɶz;22СCZZZ?s`` ٳg֭ԴT'V(`֬Y߿ۺu!C9/@wݼySÇ>޽{{DsȑqZZڑ#G4ibjjJDEEޝ5q ?aIhԨhq dimJ+[vUmUn^֭.XT\ ]Îl*TD74$$t I"99?gL#G***{BwI$bOccccccyy-[0V=iӦ}7555v"'HJJJII cfff%%%ћ6m"R;vӧOOOíz?~qsswpp`2mmm;s nՋ>W;|aa! ?>B(;;;**J,Ɔh9#qH$[]]]qqq9QQQaff{͝;`444d:88 JKKccc'0:<<><<ʕ+E=.22!tMrʽ{r8:>a„m۶!jjjtdΝ...vppŋW^o,_|߾}wj/d2LwArFxv֮]kgggbbbB< ?QLLLlll>iDAAA... `;BɉC~l?]أRT*B a&MBuuuɼyțiiiv)zzz ϥ_`y'^/L͜9x=n87Lxa̙Cz!0V=nQ+JC Iw&fffӧOT*???KKK:P( B`}~!Ix #  ɓ'חp8`̙]ICCBht:)((PKCT*R$IH$xb?W d!T[[k&' :Jqzxm< Rt?xzTTTEEB .Bh˖-ׯ_onnihhHLL x3?~(;;bi>E]txʔ)l67ߤ~"2Y~=FrJkkOhhZ>,,`涴t:ѣϟOIIhӧOf?ԖK<"cc͛7 Pldddmm၏]obbuV@ y㙘@g/ 5k֨=\z5""f(f^d9^A֯_l`ȝBhڴiNNN=ÇݻRI\j4SRJL& ZZZh4ڬY-[fgggBxZ0<&U^}Fe^Un.R_ }!0Mz\Br}||L&r "77׀'ڳg[o5_DK%MQQo6jԨ?̌`6m<)ϗJW3  FT󋋋U*ƃ޾}Ȉ}g .D۽|ʕLfaatѣGxL|T*g̘@Y, B D"믿>q℧'/7nxRYYY)d2Bޞ̝;`)׉D"ٺu뫯WPP{fff>oCCCjj*8@ HLf`` H/--j&-Q? +b ] {`TΚ5 +&Lf[[[:_[[jժٳ.]jcc`0::: ϟ?[k!#ćB,k͚5׮]sqqA]v !Dǣ ۳PT*egg=O<(-- 3f ޙ_]]eJL&+**DfffNNNf<7Ъ W^^^lٳg{{{{xxw<#7nH$r B(22'@EFFܼy,ٻwܹsB&Lضm[zz:1z&;wqqq{mooiwj;N|c[|J/SRR-@3Qg߼ysvvf~=_|񅷷7NpEV%%Bu7,ÆJA/%;L{^o>>>iii999*ˋ yֶoN1c .L|e7k,ϯ½O>z#7((RΜ9#ȍU-ah3RSTaذ5Q)HPP7b3''!+xcǎUV H<<<O?ѡT*N~\۷p311cƌʄk׮, BUUUmڴ q}իWB/^p8jc`0\]]]]]>}*Bo?f]A0h4}ZOU.Z^z<ҧ" ޳gBcǎ%kx6l؀_lur̬>1c3{u۷/]${V=`B0%%%33or^^^#%-g6]'󳴴 °t7A١^/Vg DnRq xO>vu}^b 2vhx+gN7|2Oh_U*ҥK/^lnnnjjK4ubaaH^@ 5jԘ1crywwĉ> 76jx8]^^J"9A& J|) ˵ӿ U㏬,>7/////X-p"&O\___RRp>3gVTTǓ#tw&xM͛7_ 4MR)JW+kkkDK4Z[[^mʔ)X555YYYu }WLdvuu=zZ#"Ry௩~h1\ZZzur#M=|pCC޽{[ZZ9rqbx<޾D$Nwttp8 L&koo'fɟdT*-{x7,--ř w F ++ݻwPhzBhժU1s(^' A.]zڵkQGuuu -4ʃz 8Ѓ>D<8::!СC_|񅓓L&KKK۶mgP(x4۲eכ{{{{zzCCC)Fw&ǏG={V*dݻw&33iiiQQQ!go߾;w(r\j)~YTTիWR\./++ϴWLO=tPkkkOOH$ڳgNST5k_0Z x)5ۦ|>?::Z*Jh>ojjJ~hH$JHH9sw``/B4ݩ3LtO?tAAAf͒o>z7⥳/\ J EUUٳgu=;%666//SP<1­sd2LW$GK`ThAj_QŋB?C~~~[[RT(ǀ 4i5)))rT)/Օ, MLL݉dVVV17n TСC RR?y$nT/$q;wr\^^^%Qy?ѣGo߾-g͚O?C#رcW^z|PHHohh [`ACC1yŊ*w&Ω?=iii4׮]#999EEEl6xEԳ1c|@lN4?pXf ^9"""""Bh)*% ())qƍ7__kA1Z*5/-zzYM2eӦM1cC,B9}nFp… D"P==ǫD]]]ܟ%KUUUh3gN^^މ'=x2D9[[ۥK w F 777o0'?@ 'N\r \V\9qD맟~RT+Wh+W(;;-zV׿L\p4VO6LLL>T__ollz+&-P)Ѳe˾q„ +VXnRy௩~h7띯=ߧɓ'/688}TTԣGq%˗/M%kl6>HMMmiiaX)266޼y@  FFFiyy9jLLLn*D"^‚x<4h  R9k_Qӭ[>}jdd/ھh999Rt񮮮jhYlل nܸ'O:ÃC>sLb@ w^llu3۷TWWZZZΛ7}-43fjll0a¼y󼼼t]g hh'Nsf͚guՈ6=Ⱦ@^`NXx8;; 2~z0|afϞ:Q o4J51@0U WЪ&]R/IENDB`objgraph-1.8.0/docs/all-the-chars.dot0000644000175000017500000016071512277007131016442 0ustar mgmg00000000000000digraph ObjectGraph { node[shape=box, style=filled, fillcolor=white]; o169403092[fontcolor=red]; o169403092[label="dict\n256 items"]; o169403092[fillcolor="0,0,1"]; o169403092 -> o1077971968; o169403092 -> o165195164 [label="str\n'\\x00'"]; o169403092 -> o165844640; o169403092 -> o165195568 [label="str\n'\\x83'"]; o169403092 -> o165843552; o169403092 -> o165195116 [label="str\n'\\x04'"]; o169403092 -> o165844768; o169403092 -> o165195520 [label="str\n'\\x87'"]; o169403092 -> o165843680; o169403092 -> o165195068 [label="str\n'\\x08'"]; o169403092 -> o165844896; o169403092 -> o165195472 [label="str\n'\\x8b'"]; o169403092 -> o1077988512; o169403092 -> o165195020 [label="str\n'\\x0c'"]; o169403092 -> o165845024; o169403092 -> o165195424 [label="str\n'\\x8f'"]; o169403092 -> o165843776; o169403092 -> o165194972 [label="str\n'\\x10'"]; o169403092 -> o165845152; o169403092 -> o165195376 [label="str\n'\\x93'"]; o169403092 -> o165843904; o169403092 -> o165194924 [label="str\n'\\x14'"]; o169403092 -> o165845280; o169403092 -> o165195328 [label="str\n'\\x97'"]; o169403092 -> o165844032; o169403092 -> o165194876 [label="str\n'\\x18'"]; o169403092 -> o165845408; o169403092 -> o165195280 [label="str\n'\\x9b'"]; o169403092 -> o165844160; o169403092 -> o165194828 [label="str\n'\\x1c'"]; o169403092 -> o165845536; o169403092 -> o165197208 [label="str\n'\\x9f'"]; o169403092 -> o1077988352; o169403092 -> o165194780 [label="str\n' '"]; o169403092 -> o165845664; o169403092 -> o165197160 [label="str\n'\\xa3'"]; o169403092 -> o1077745216; o169403092 -> o165194732 [label="str\n'$'"]; o169403092 -> o165845792; o169403092 -> o165197112 [label="str\n'\\xa7'"]; o169403092 -> o1077986944; o169403092 -> o165194684 [label="str\n'('"]; o169403092 -> o165845920; o169403092 -> o165197064 [label="str\n'\\xab'"]; o169403092 -> o1077986912; o169403092 -> o165194636 [label="str\n','"]; o169403092 -> o165846048; o169403092 -> o165197016 [label="str\n'\\xaf'"]; o169403092 -> o1077986080; o169403092 -> o165194588 [label="str\n'0'"]; o169403092 -> o165846176; o169403092 -> o165196968 [label="str\n'\\xb3'"]; o169403092 -> o1077988128; o169403092 -> o165194540 [label="str\n'4'"]; o169403092 -> o165846304; o169403092 -> o165196920 [label="str\n'\\xb7'"]; o169403092 -> o1077731488; o169403092 -> o165194492 [label="str\n'8'"]; o169403092 -> o165846432; o169403092 -> o165196872 [label="str\n'\\xbb'"]; o169403092 -> o1077987008; o169403092 -> o165194444 [label="str\n'<'"]; o169403092 -> o165846560; o169403092 -> o165196824 [label="str\n'\\xbf'"]; o169403092 -> o165844416; o169403092 -> o165194396 [label="str\n'@'"]; o169403092 -> o165846688; o169403092 -> o165196776 [label="str\n'\\xc3'"]; o169403092 -> o1077988320; o169403092 -> o165194348 [label="D",weight=2]; o169403092 -> o165846816; o169403092 -> o165196728 [label="str\n'\\xc7'"]; o169403092 -> o1077974496; o169403092 -> o165194300 [label="H",weight=2]; o169403092 -> o165846944; o169403092 -> o165196680 [label="str\n'\\xcb'"]; o169403092 -> o1077676736; o169403092 -> o165194252 [label="L",weight=2]; o169403092 -> o165847104; o169403092 -> o165196632 [label="str\n'\\xcf'"]; o169403092 -> o1077986976; o169403092 -> o165196180 [label="P",weight=2]; o169403092 -> o165847232; o169403092 -> o165196584 [label="str\n'\\xd3'"]; o169403092 -> o1077763488; o169403092 -> o165196132 [label="T",weight=2]; o169403092 -> o165847360; o169403092 -> o165196536 [label="str\n'\\xd7'"]; o169403092 -> o1077763552; o169403092 -> o165196084 [label="X",weight=2]; o169403092 -> o165847488; o169403092 -> o165196488 [label="str\n'\\xdb'"]; o169403092 -> o165844448; o169403092 -> o165196036 [label="str\n'\\\\'"]; o169403092 -> o165847616; o169403092 -> o165196440 [label="str\n'\\xdf'"]; o169403092 -> o165844480; o169403092 -> o165195988 [label="str\n'`'"]; o169403092 -> o165847744; o169403092 -> o165196392 [label="str\n'\\xe3'"]; o169403092 -> o1077675008; o169403092 -> o165195940 [label="d",weight=2]; o169403092 -> o165847872; o169403092 -> o165196344 [label="str\n'\\xe7'"]; o169403092 -> o1077815328; o169403092 -> o165195892 [label="h",weight=2]; o169403092 -> o165848000; o169403092 -> o165196296 [label="str\n'\\xeb'"]; o169403092 -> o1077763424; o169403092 -> o165195844 [label="l",weight=2]; o169403092 -> o165848128; o169403092 -> o165196248 [label="str\n'\\xef'"]; o169403092 -> o1077675104; o169403092 -> o165195796 [label="p",weight=2]; o169403092 -> o165848256; o169403092 -> o165198176 [label="str\n'\\xf3'"]; o169403092 -> o1077695200; o169403092 -> o165195748 [label="t",weight=2]; o169403092 -> o165848384; o169403092 -> o165198128 [label="str\n'\\xf7'"]; o169403092 -> o1077677888; o169403092 -> o165195700 [label="x",weight=2]; o169403092 -> o165848512; o169403092 -> o165198080 [label="str\n'\\xfb'"]; o169403092 -> o1077986400; o169403092 -> o165195652 [label="str\n'|'"]; o169403092 -> o165848640; o169403092 -> o165198032 [label="str\n'\\xff'"]; o169403092 -> o165844544; o169403092 -> o165195604 [label="str\n'\\x80'"]; o169403092 -> o165843520; o169403092 -> o165195128 [label="str\n'\\x03'"]; o169403092 -> o165844672; o169403092 -> o165195556 [label="str\n'\\x84'"]; o169403092 -> o165843648; o169403092 -> o165195080 [label="str\n'\\x07'"]; o169403092 -> o165844800; o169403092 -> o165195508 [label="str\n'\\x88'"]; o169403092 -> o1077988480; o169403092 -> o165195032 [label="str\n'\\x0b'"]; o169403092 -> o165844928; o169403092 -> o165195460 [label="str\n'\\x8c'"]; o169403092 -> o165843744; o169403092 -> o165194984 [label="str\n'\\x0f'"]; o169403092 -> o165845056; o169403092 -> o165195412 [label="str\n'\\x90'"]; o169403092 -> o165843872; o169403092 -> o165194936 [label="str\n'\\x13'"]; o169403092 -> o165845184; o169403092 -> o165195364 [label="str\n'\\x94'"]; o169403092 -> o165844000; o169403092 -> o165194888 [label="str\n'\\x17'"]; o169403092 -> o165845312; o169403092 -> o165195316 [label="str\n'\\x98'"]; o169403092 -> o165844128; o169403092 -> o165194840 [label="str\n'\\x1b'"]; o169403092 -> o165845440; o169403092 -> o165195268 [label="str\n'\\x9c'"]; o169403092 -> o165844256; o169403092 -> o165194792 [label="str\n'\\x1f'"]; o169403092 -> o165845568; o169403092 -> o165197196 [label="str\n'\\xa0'"]; o169403092 -> o1077687552; o169403092 -> o165194744 [label="str\n'#'"]; o169403092 -> o165845696; o169403092 -> o165197148 [label="str\n'\\xa4'"]; o169403092 -> o165844384; o169403092 -> o165194696 [label="str\n\"'\""]; o169403092 -> o165845824; o169403092 -> o165197100 [label="str\n'\\xa8'"]; o169403092 -> o1077986880; o169403092 -> o165194648 [label="str\n'+'"]; o169403092 -> o165845952; o169403092 -> o165197052 [label="str\n'\\xac'"]; o169403092 -> o1077735040; o169403092 -> o165194600 [label="str\n'/'"]; o169403092 -> o165846080; o169403092 -> o165197004 [label="str\n'\\xb0'"]; o169403092 -> o1077988000; o169403092 -> o165194552 [label="str\n'3'"]; o169403092 -> o165846208; o169403092 -> o165196956 [label="str\n'\\xb4'"]; o169403092 -> o1077988288; o169403092 -> o165194504 [label="str\n'7'"]; o169403092 -> o165846336; o169403092 -> o165196908 [label="str\n'\\xb8'"]; o169403092 -> o1077849088; o169403092 -> o165194456 [label="str\n';'"]; o169403092 -> o165846464; o169403092 -> o165196860 [label="str\n'\\xbc'"]; o169403092 -> o1077986848; o169403092 -> o165194408 [label="str\n'?'"]; o169403092 -> o165846592; o169403092 -> o165196812 [label="str\n'\\xc0'"]; o169403092 -> o1077795456; o169403092 -> o165194360 [label="C",weight=2]; o169403092 -> o165846720; o169403092 -> o165196764 [label="str\n'\\xc4'"]; o169403092 -> o1077986624; o169403092 -> o165194312 [label="G",weight=2]; o169403092 -> o165846848; o169403092 -> o165196716 [label="str\n'\\xc8'"]; o169403092 -> o1077989088; o169403092 -> o165194264 [label="K",weight=2]; o169403092 -> o165846976; o169403092 -> o165196668 [label="str\n'\\xcc'"]; o169403092 -> o1077763168; o169403092 -> o165196192 [label="O",weight=2]; o169403092 -> o165847136; o169403092 -> o165196620 [label="str\n'\\xd0'"]; o169403092 -> o1077763264; o169403092 -> o165196144 [label="S",weight=2]; o169403092 -> o165847264; o169403092 -> o165196572 [label="str\n'\\xd4'"]; o169403092 -> o1077763520; o169403092 -> o165196096 [label="W",weight=2]; o169403092 -> o165847392; o169403092 -> o165196524 [label="str\n'\\xd8'"]; o169403092 -> o1077986720; o169403092 -> o165196048 [label="str\n'['"]; o169403092 -> o165847520; o169403092 -> o165196476 [label="str\n'\\xdc'"]; o169403092 -> o1077676384; o169403092 -> o165196000 [label="_",weight=2]; o169403092 -> o165847648; o169403092 -> o165196428 [label="str\n'\\xe0'"]; o169403092 -> o1077761632; o169403092 -> o165195952 [label="c",weight=2]; o169403092 -> o165847776; o169403092 -> o165196380 [label="str\n'\\xe4'"]; o169403092 -> o1077763616; o169403092 -> o165195904 [label="g",weight=2]; o169403092 -> o165847904; o169403092 -> o165196332 [label="str\n'\\xe8'"]; o169403092 -> o1077687776; o169403092 -> o165195856 [label="k",weight=2]; o169403092 -> o165848032; o169403092 -> o165196284 [label="str\n'\\xec'"]; o169403092 -> o1077778720; o169403092 -> o165195808 [label="o",weight=2]; o169403092 -> o165848160; o169403092 -> o165196236 [label="str\n'\\xf0'"]; o169403092 -> o1077735200; o169403092 -> o165195760 [label="s",weight=2]; o169403092 -> o165848288; o169403092 -> o165198164 [label="str\n'\\xf4'"]; o169403092 -> o1077601824; o169403092 -> o165195712 [label="w",weight=2]; o169403092 -> o165848416; o169403092 -> o165198116 [label="str\n'\\xf8'"]; o169403092 -> o1077745248; o169403092 -> o165195664 [label="str\n'{'"]; o169403092 -> o165848544; o169403092 -> o165198068 [label="str\n'\\xfc'"]; o169403092 -> o165844512; o169403092 -> o165195616 [label="str\n'\\x7f'"]; o169403092 -> o165844576; o169403092 -> o165195592 [label="str\n'\\x81'"]; o169403092 -> o165843488; o169403092 -> o165195140 [label="str\n'\\x02'"]; o169403092 -> o165844704; o169403092 -> o165195544 [label="str\n'\\x85'"]; o169403092 -> o165843616; o169403092 -> o165195092 [label="str\n'\\x06'"]; o169403092 -> o165844832; o169403092 -> o165195496 [label="str\n'\\x89'"]; o169403092 -> o1077988416; o169403092 -> o165195044 [label="str\n'\\n'"]; o169403092 -> o165844960; o169403092 -> o165195448 [label="str\n'\\x8d'"]; o169403092 -> o165843712; o169403092 -> o165194996 [label="str\n'\\x0e'"]; o169403092 -> o165845088; o169403092 -> o165195400 [label="str\n'\\x91'"]; o169403092 -> o165843840; o169403092 -> o165194948 [label="str\n'\\x12'"]; o169403092 -> o165845216; o169403092 -> o165195352 [label="str\n'\\x95'"]; o169403092 -> o165843968; o169403092 -> o165194900 [label="str\n'\\x16'"]; o169403092 -> o165845344; o169403092 -> o165195304 [label="str\n'\\x99'"]; o169403092 -> o165844096; o169403092 -> o165194852 [label="str\n'\\x1a'"]; o169403092 -> o165845472; o169403092 -> o165195256 [label="str\n'\\x9d'"]; o169403092 -> o165844224; o169403092 -> o165194804 [label="str\n'\\x1e'"]; o169403092 -> o165845600; o169403092 -> o165197184 [label="str\n'\\xa1'"]; o169403092 -> o165844288; o169403092 -> o165194756 [label="str\n'\"'"]; o169403092 -> o165845728; o169403092 -> o165197136 [label="str\n'\\xa5'"]; o169403092 -> o165844352; o169403092 -> o165194708 [label="str\n'&'"]; o169403092 -> o165845856; o169403092 -> o165197088 [label="str\n'\\xa9'"]; o169403092 -> o1077674752; o169403092 -> o165194660 [label="str\n'*'"]; o169403092 -> o165845984; o169403092 -> o165197040 [label="str\n'\\xad'"]; o169403092 -> o1077734976; o169403092 -> o165194612 [label="str\n'.'"]; o169403092 -> o165846112; o169403092 -> o165196992 [label="str\n'\\xb1'"]; o169403092 -> o1077988096; o169403092 -> o165194564 [label="str\n'2'"]; o169403092 -> o165846240; o169403092 -> o165196944 [label="str\n'\\xb5'"]; o169403092 -> o1077988192; o169403092 -> o165194516 [label="str\n'6'"]; o169403092 -> o165846368; o169403092 -> o165196896 [label="str\n'\\xb9'"]; o169403092 -> o1077735072; o169403092 -> o165194468 [label="str\n':'"]; o169403092 -> o165846496; o169403092 -> o165196848 [label="str\n'\\xbd'"]; o169403092 -> o1077987040; o169403092 -> o165194420 [label="str\n'>'"]; o169403092 -> o165846624; o169403092 -> o165196800 [label="str\n'\\xc1'"]; o169403092 -> o1077795328; o169403092 -> o165194372 [label="B",weight=2]; o169403092 -> o165846752; o169403092 -> o165196752 [label="str\n'\\xc5'"]; o169403092 -> o1077763104; o169403092 -> o165194324 [label="F",weight=2]; o169403092 -> o165846880; o169403092 -> o165196704 [label="str\n'\\xc9'"]; o169403092 -> o1077986656; o169403092 -> o165194276 [label="J",weight=2]; o169403092 -> o165847008; o169403092 -> o165196656 [label="str\n'\\xcd'"]; o169403092 -> o1077763136; o169403092 -> o165196204 [label="N",weight=2]; o169403092 -> o165847168; o169403092 -> o165196608 [label="str\n'\\xd1'"]; o169403092 -> o1077763232; o169403092 -> o165196156 [label="R",weight=2]; o169403092 -> o165847296; o169403092 -> o165196560 [label="str\n'\\xd5'"]; o169403092 -> o1077989152; o169403092 -> o165196108 [label="V",weight=2]; o169403092 -> o165847424; o169403092 -> o165196512 [label="str\n'\\xd9'"]; o169403092 -> o1077985952; o169403092 -> o165196060 [label="Z",weight=2]; o169403092 -> o165847552; o169403092 -> o165196464 [label="str\n'\\xdd'"]; o169403092 -> o1077986752; o169403092 -> o165196012 [label="str\n'^'"]; o169403092 -> o165847680; o169403092 -> o165196416 [label="str\n'\\xe1'"]; o169403092 -> o1077743680; o169403092 -> o165195964 [label="b",weight=2]; o169403092 -> o165847808; o169403092 -> o165196368 [label="str\n'\\xe5'"]; o169403092 -> o1077763584; o169403092 -> o165195916 [label="f",weight=2]; o169403092 -> o165847936; o169403092 -> o165196320 [label="str\n'\\xe9'"]; o169403092 -> o1077745504; o169403092 -> o165195868 [label="j",weight=2]; o169403092 -> o165848064; o169403092 -> o165196272 [label="str\n'\\xed'"]; o169403092 -> o1077676480; o169403092 -> o165195820 [label="n",weight=2]; o169403092 -> o165848192; o169403092 -> o165198200 [label="str\n'\\xf1'"]; o169403092 -> o1077601760; o169403092 -> o165195772 [label="r",weight=2]; o169403092 -> o165848320; o169403092 -> o165198152 [label="str\n'\\xf5'"]; o169403092 -> o1077687808; o169403092 -> o165195724 [label="v",weight=2]; o169403092 -> o165848448; o169403092 -> o165198104 [label="str\n'\\xf9'"]; o169403092 -> o1077985888; o169403092 -> o165195676 [label="z",weight=2]; o169403092 -> o165848576; o169403092 -> o165198056 [label="str\n'\\xfd'"]; o169403092 -> o1077744960; o169403092 -> o165195628 [label="str\n'~'"]; o169403092 -> o165843456; o169403092 -> o165195152 [label="str\n'\\x01'"]; o169403092 -> o165844608; o169403092 -> o165195580 [label="str\n'\\x82'"]; o169403092 -> o165843584; o169403092 -> o165195104 [label="str\n'\\x05'"]; o169403092 -> o165844736; o169403092 -> o165195532 [label="str\n'\\x86'"]; o169403092 -> o1077988384; o169403092 -> o165195056 [label="str\n'\\t'"]; o169403092 -> o165844864; o169403092 -> o165195484 [label="str\n'\\x8a'"]; o169403092 -> o1077988448; o169403092 -> o165195008 [label="str\n'\\r'"]; o169403092 -> o165844992; o169403092 -> o165195436 [label="str\n'\\x8e'"]; o169403092 -> o165843808; o169403092 -> o165194960 [label="str\n'\\x11'"]; o169403092 -> o165845120; o169403092 -> o165195388 [label="str\n'\\x92'"]; o169403092 -> o165843936; o169403092 -> o165194912 [label="str\n'\\x15'"]; o169403092 -> o165845248; o169403092 -> o165195340 [label="str\n'\\x96'"]; o169403092 -> o165844064; o169403092 -> o165194864 [label="str\n'\\x19'"]; o169403092 -> o165845376; o169403092 -> o165195292 [label="str\n'\\x9a'"]; o169403092 -> o165844192; o169403092 -> o165194816 [label="str\n'\\x1d'"]; o169403092 -> o165845504; o169403092 -> o165195244 [label="str\n'\\x9e'"]; o169403092 -> o1077989056; o169403092 -> o165194768 [label="str\n'!'"]; o169403092 -> o165845632; o169403092 -> o165197172 [label="str\n'\\xa2'"]; o169403092 -> o165844320; o169403092 -> o165194720 [label="str\n'%'"]; o169403092 -> o165845760; o169403092 -> o165197124 [label="str\n'\\xa6'"]; o169403092 -> o1077986432; o169403092 -> o165194672 [label="str\n')'"]; o169403092 -> o165845888; o169403092 -> o165197076 [label="str\n'\\xaa'"]; o169403092 -> o1077986816; o169403092 -> o165194624 [label="str\n'-'"]; o169403092 -> o165846016; o169403092 -> o165197028 [label="str\n'\\xae'"]; o169403092 -> o1077718720; o169403092 -> o165194576 [label="str\n'1'"]; o169403092 -> o165846144; o169403092 -> o165196980 [label="str\n'\\xb2'"]; o169403092 -> o1077988160; o169403092 -> o165194528 [label="str\n'5'"]; o169403092 -> o165846272; o169403092 -> o165196932 [label="str\n'\\xb6'"]; o169403092 -> o1077986112; o169403092 -> o165194480 [label="str\n'9'"]; o169403092 -> o165846400; o169403092 -> o165196884 [label="str\n'\\xba'"]; o169403092 -> o1077987072; o169403092 -> o165194432 [label="str\n'='"]; o169403092 -> o165846528; o169403092 -> o165196836 [label="str\n'\\xbe'"]; o169403092 -> o1077985920; o169403092 -> o165194384 [label="A",weight=2]; o169403092 -> o165846656; o169403092 -> o165196788 [label="str\n'\\xc2'"]; o169403092 -> o1077763296; o169403092 -> o165194336 [label="E",weight=2]; o169403092 -> o165846784; o169403092 -> o165196740 [label="str\n'\\xc6'"]; o169403092 -> o1077762240; o169403092 -> o165194288 [label="I",weight=2]; o169403092 -> o165846912; o169403092 -> o165196692 [label="str\n'\\xca'"]; o169403092 -> o1077886272; o169403092 -> o165196216 [label="M",weight=2]; o169403092 -> o165847072; o169403092 -> o165196644 [label="str\n'\\xce'"]; o169403092 -> o1077989120; o169403092 -> o165196168 [label="Q",weight=2]; o169403092 -> o165847200; o169403092 -> o165196596 [label="str\n'\\xd2'"]; o169403092 -> o1077676768; o169403092 -> o165196120 [label="U",weight=2]; o169403092 -> o165847328; o169403092 -> o165196548 [label="str\n'\\xd6'"]; o169403092 -> o1077989184; o169403092 -> o165196072 [label="Y",weight=2]; o169403092 -> o165847456; o169403092 -> o165196500 [label="str\n'\\xda'"]; o169403092 -> o1077883424; o169403092 -> o165196024 [label="str\n']'"]; o169403092 -> o165847584; o169403092 -> o165196452 [label="str\n'\\xde'"]; o169403092 -> o1077743648; o169403092 -> o165195976 [label="a",weight=2]; o169403092 -> o165847712; o169403092 -> o165196404 [label="str\n'\\xe2'"]; o169403092 -> o1077677248; o169403092 -> o165195928 [label="e",weight=2]; o169403092 -> o165847840; o169403092 -> o165196356 [label="str\n'\\xe6'"]; o169403092 -> o1077743712; o169403092 -> o165195880 [label="i",weight=2]; o169403092 -> o165847968; o169403092 -> o165196308 [label="str\n'\\xea'"]; o169403092 -> o1077745472; o169403092 -> o165195832 [label="m",weight=2]; o169403092 -> o165848096; o169403092 -> o165196260 [label="str\n'\\xee'"]; o169403092 -> o1077849696; o169403092 -> o165195784 [label="q",weight=2]; o169403092 -> o165848224; o169403092 -> o165198188 [label="str\n'\\xf2'"]; o169403092 -> o1077778752; o169403092 -> o165195736 [label="u",weight=2]; o169403092 -> o165848352; o169403092 -> o165198140 [label="str\n'\\xf6'"]; o169403092 -> o1077986592; o169403092 -> o165195688 [label="y",weight=2]; o169403092 -> o165848480; o169403092 -> o165198092 [label="str\n'\\xfa'"]; o169403092 -> o1077745280; o169403092 -> o165195640 [label="str\n'}'"]; o169403092 -> o165848608; o169403092 -> o165198044 [label="str\n'\\xfe'"]; o1077971968[label="str\n'\\x00'"]; o1077971968[fillcolor="0,0,0.766667"]; o165195164[label="int\n0"]; o165195164[fillcolor="0,0,0.766667"]; o165844640[label="str\n'\\x83'"]; o165844640[fillcolor="0,0,0.766667"]; o165195568[label="int\n131"]; o165195568[fillcolor="0,0,0.766667"]; o165843552[label="str\n'\\x04'"]; o165843552[fillcolor="0,0,0.766667"]; o165195116[label="int\n4"]; o165195116[fillcolor="0,0,0.766667"]; o165844768[label="str\n'\\x87'"]; o165844768[fillcolor="0,0,0.766667"]; o165195520[label="int\n135"]; o165195520[fillcolor="0,0,0.766667"]; o165843680[label="str\n'\\x08'"]; o165843680[fillcolor="0,0,0.766667"]; o165195068[label="int\n8"]; o165195068[fillcolor="0,0,0.766667"]; o165844896[label="str\n'\\x8b'"]; o165844896[fillcolor="0,0,0.766667"]; o165195472[label="int\n139"]; o165195472[fillcolor="0,0,0.766667"]; o1077988512[label="str\n'\\x0c'"]; o1077988512[fillcolor="0,0,0.766667"]; o165195020[label="int\n12"]; o165195020[fillcolor="0,0,0.766667"]; o165845024[label="str\n'\\x8f'"]; o165845024[fillcolor="0,0,0.766667"]; o165195424[label="int\n143"]; o165195424[fillcolor="0,0,0.766667"]; o165843776[label="str\n'\\x10'"]; o165843776[fillcolor="0,0,0.766667"]; o165194972[label="int\n16"]; o165194972[fillcolor="0,0,0.766667"]; o165845152[label="str\n'\\x93'"]; o165845152[fillcolor="0,0,0.766667"]; o165195376[label="int\n147"]; o165195376[fillcolor="0,0,0.766667"]; o165843904[label="str\n'\\x14'"]; o165843904[fillcolor="0,0,0.766667"]; o165194924[label="int\n20"]; o165194924[fillcolor="0,0,0.766667"]; o165845280[label="str\n'\\x97'"]; o165845280[fillcolor="0,0,0.766667"]; o165195328[label="int\n151"]; o165195328[fillcolor="0,0,0.766667"]; o165844032[label="str\n'\\x18'"]; o165844032[fillcolor="0,0,0.766667"]; o165194876[label="int\n24"]; o165194876[fillcolor="0,0,0.766667"]; o165845408[label="str\n'\\x9b'"]; o165845408[fillcolor="0,0,0.766667"]; o165195280[label="int\n155"]; o165195280[fillcolor="0,0,0.766667"]; o165844160[label="str\n'\\x1c'"]; o165844160[fillcolor="0,0,0.766667"]; o165194828[label="int\n28"]; o165194828[fillcolor="0,0,0.766667"]; o165845536[label="str\n'\\x9f'"]; o165845536[fillcolor="0,0,0.766667"]; o165197208[label="int\n159"]; o165197208[fillcolor="0,0,0.766667"]; o1077988352[label="str\n' '"]; o1077988352[fillcolor="0,0,0.766667"]; o165194780[label="int\n32"]; o165194780[fillcolor="0,0,0.766667"]; o165845664[label="str\n'\\xa3'"]; o165845664[fillcolor="0,0,0.766667"]; o165197160[label="int\n163"]; o165197160[fillcolor="0,0,0.766667"]; o1077745216[label="str\n'$'"]; o1077745216[fillcolor="0,0,0.766667"]; o165194732[label="int\n36"]; o165194732[fillcolor="0,0,0.766667"]; o165845792[label="str\n'\\xa7'"]; o165845792[fillcolor="0,0,0.766667"]; o165197112[label="int\n167"]; o165197112[fillcolor="0,0,0.766667"]; o1077986944[label="str\n'('"]; o1077986944[fillcolor="0,0,0.766667"]; o165194684[label="int\n40"]; o165194684[fillcolor="0,0,0.766667"]; o165845920[label="str\n'\\xab'"]; o165845920[fillcolor="0,0,0.766667"]; o165197064[label="int\n171"]; o165197064[fillcolor="0,0,0.766667"]; o1077986912[label="str\n','"]; o1077986912[fillcolor="0,0,0.766667"]; o165194636[label="int\n44"]; o165194636[fillcolor="0,0,0.766667"]; o165846048[label="str\n'\\xaf'"]; o165846048[fillcolor="0,0,0.766667"]; o165197016[label="int\n175"]; o165197016[fillcolor="0,0,0.766667"]; o1077986080[label="str\n'0'"]; o1077986080[fillcolor="0,0,0.766667"]; o165194588[label="int\n48"]; o165194588[fillcolor="0,0,0.766667"]; o165846176[label="str\n'\\xb3'"]; o165846176[fillcolor="0,0,0.766667"]; o165196968[label="int\n179"]; o165196968[fillcolor="0,0,0.766667"]; o1077988128[label="str\n'4'"]; o1077988128[fillcolor="0,0,0.766667"]; o165194540[label="int\n52"]; o165194540[fillcolor="0,0,0.766667"]; o165846304[label="str\n'\\xb7'"]; o165846304[fillcolor="0,0,0.766667"]; o165196920[label="int\n183"]; o165196920[fillcolor="0,0,0.766667"]; o1077731488[label="str\n'8'"]; o1077731488[fillcolor="0,0,0.766667"]; o165194492[label="int\n56"]; o165194492[fillcolor="0,0,0.766667"]; o165846432[label="str\n'\\xbb'"]; o165846432[fillcolor="0,0,0.766667"]; o165196872[label="int\n187"]; o165196872[fillcolor="0,0,0.766667"]; o1077987008[label="str\n'<'"]; o1077987008[fillcolor="0,0,0.766667"]; o165194444[label="int\n60"]; o165194444[fillcolor="0,0,0.766667"]; o165846560[label="str\n'\\xbf'"]; o165846560[fillcolor="0,0,0.766667"]; o165196824[label="int\n191"]; o165196824[fillcolor="0,0,0.766667"]; o165844416[label="str\n'@'"]; o165844416[fillcolor="0,0,0.766667"]; o165194396[label="int\n64"]; o165194396[fillcolor="0,0,0.766667"]; o165846688[label="str\n'\\xc3'"]; o165846688[fillcolor="0,0,0.766667"]; o165196776[label="int\n195"]; o165196776[fillcolor="0,0,0.766667"]; o1077988320[label="str\n'D'"]; o1077988320[fillcolor="0,0,0.766667"]; o165194348[label="int\n68"]; o165194348[fillcolor="0,0,0.766667"]; o165846816[label="str\n'\\xc7'"]; o165846816[fillcolor="0,0,0.766667"]; o165196728[label="int\n199"]; o165196728[fillcolor="0,0,0.766667"]; o1077974496[label="str\n'H'"]; o1077974496[fillcolor="0,0,0.766667"]; o165194300[label="int\n72"]; o165194300[fillcolor="0,0,0.766667"]; o165846944[label="str\n'\\xcb'"]; o165846944[fillcolor="0,0,0.766667"]; o165196680[label="int\n203"]; o165196680[fillcolor="0,0,0.766667"]; o1077676736[label="str\n'L'"]; o1077676736[fillcolor="0,0,0.766667"]; o165194252[label="int\n76"]; o165194252[fillcolor="0,0,0.766667"]; o165847104[label="str\n'\\xcf'"]; o165847104[fillcolor="0,0,0.766667"]; o165196632[label="int\n207"]; o165196632[fillcolor="0,0,0.766667"]; o1077986976[label="str\n'P'"]; o1077986976[fillcolor="0,0,0.766667"]; o165196180[label="int\n80"]; o165196180[fillcolor="0,0,0.766667"]; o165847232[label="str\n'\\xd3'"]; o165847232[fillcolor="0,0,0.766667"]; o165196584[label="int\n211"]; o165196584[fillcolor="0,0,0.766667"]; o1077763488[label="str\n'T'"]; o1077763488[fillcolor="0,0,0.766667"]; o165196132[label="int\n84"]; o165196132[fillcolor="0,0,0.766667"]; o165847360[label="str\n'\\xd7'"]; o165847360[fillcolor="0,0,0.766667"]; o165196536[label="int\n215"]; o165196536[fillcolor="0,0,0.766667"]; o1077763552[label="str\n'X'"]; o1077763552[fillcolor="0,0,0.766667"]; o165196084[label="int\n88"]; o165196084[fillcolor="0,0,0.766667"]; o165847488[label="str\n'\\xdb'"]; o165847488[fillcolor="0,0,0.766667"]; o165196488[label="int\n219"]; o165196488[fillcolor="0,0,0.766667"]; o165844448[label="str\n'\\\\'"]; o165844448[fillcolor="0,0,0.766667"]; o165196036[label="int\n92"]; o165196036[fillcolor="0,0,0.766667"]; o165847616[label="str\n'\\xdf'"]; o165847616[fillcolor="0,0,0.766667"]; o165196440[label="int\n223"]; o165196440[fillcolor="0,0,0.766667"]; o165844480[label="str\n'`'"]; o165844480[fillcolor="0,0,0.766667"]; o165195988[label="int\n96"]; o165195988[fillcolor="0,0,0.766667"]; o165847744[label="str\n'\\xe3'"]; o165847744[fillcolor="0,0,0.766667"]; o165196392[label="int\n227"]; o165196392[fillcolor="0,0,0.766667"]; o1077675008[label="str\n'd'"]; o1077675008[fillcolor="0,0,0.766667"]; o165195940[label="int\n100"]; o165195940[fillcolor="0,0,0.766667"]; o165847872[label="str\n'\\xe7'"]; o165847872[fillcolor="0,0,0.766667"]; o165196344[label="int\n231"]; o165196344[fillcolor="0,0,0.766667"]; o1077815328[label="str\n'h'"]; o1077815328[fillcolor="0,0,0.766667"]; o165195892[label="int\n104"]; o165195892[fillcolor="0,0,0.766667"]; o165848000[label="str\n'\\xeb'"]; o165848000[fillcolor="0,0,0.766667"]; o165196296[label="int\n235"]; o165196296[fillcolor="0,0,0.766667"]; o1077763424[label="str\n'l'"]; o1077763424[fillcolor="0,0,0.766667"]; o165195844[label="int\n108"]; o165195844[fillcolor="0,0,0.766667"]; o165848128[label="str\n'\\xef'"]; o165848128[fillcolor="0,0,0.766667"]; o165196248[label="int\n239"]; o165196248[fillcolor="0,0,0.766667"]; o1077675104[label="str\n'p'"]; o1077675104[fillcolor="0,0,0.766667"]; o165195796[label="int\n112"]; o165195796[fillcolor="0,0,0.766667"]; o165848256[label="str\n'\\xf3'"]; o165848256[fillcolor="0,0,0.766667"]; o165198176[label="int\n243"]; o165198176[fillcolor="0,0,0.766667"]; o1077695200[label="str\n't'"]; o1077695200[fillcolor="0,0,0.766667"]; o165195748[label="int\n116"]; o165195748[fillcolor="0,0,0.766667"]; o165848384[label="str\n'\\xf7'"]; o165848384[fillcolor="0,0,0.766667"]; o165198128[label="int\n247"]; o165198128[fillcolor="0,0,0.766667"]; o1077677888[label="str\n'x'"]; o1077677888[fillcolor="0,0,0.766667"]; o165195700[label="int\n120"]; o165195700[fillcolor="0,0,0.766667"]; o165848512[label="str\n'\\xfb'"]; o165848512[fillcolor="0,0,0.766667"]; o165198080[label="int\n251"]; o165198080[fillcolor="0,0,0.766667"]; o1077986400[label="str\n'|'"]; o1077986400[fillcolor="0,0,0.766667"]; o165195652[label="int\n124"]; o165195652[fillcolor="0,0,0.766667"]; o165848640[label="str\n'\\xff'"]; o165848640[fillcolor="0,0,0.766667"]; o165198032[label="int\n255"]; o165198032[fillcolor="0,0,0.766667"]; o165844544[label="str\n'\\x80'"]; o165844544[fillcolor="0,0,0.766667"]; o165195604[label="int\n128"]; o165195604[fillcolor="0,0,0.766667"]; o165843520[label="str\n'\\x03'"]; o165843520[fillcolor="0,0,0.766667"]; o165195128[label="int\n3"]; o165195128[fillcolor="0,0,0.766667"]; o165844672[label="str\n'\\x84'"]; o165844672[fillcolor="0,0,0.766667"]; o165195556[label="int\n132"]; o165195556[fillcolor="0,0,0.766667"]; o165843648[label="str\n'\\x07'"]; o165843648[fillcolor="0,0,0.766667"]; o165195080[label="int\n7"]; o165195080[fillcolor="0,0,0.766667"]; o165844800[label="str\n'\\x88'"]; o165844800[fillcolor="0,0,0.766667"]; o165195508[label="int\n136"]; o165195508[fillcolor="0,0,0.766667"]; o1077988480[label="str\n'\\x0b'"]; o1077988480[fillcolor="0,0,0.766667"]; o165195032[label="int\n11"]; o165195032[fillcolor="0,0,0.766667"]; o165844928[label="str\n'\\x8c'"]; o165844928[fillcolor="0,0,0.766667"]; o165195460[label="int\n140"]; o165195460[fillcolor="0,0,0.766667"]; o165843744[label="str\n'\\x0f'"]; o165843744[fillcolor="0,0,0.766667"]; o165194984[label="int\n15"]; o165194984[fillcolor="0,0,0.766667"]; o165845056[label="str\n'\\x90'"]; o165845056[fillcolor="0,0,0.766667"]; o165195412[label="int\n144"]; o165195412[fillcolor="0,0,0.766667"]; o165843872[label="str\n'\\x13'"]; o165843872[fillcolor="0,0,0.766667"]; o165194936[label="int\n19"]; o165194936[fillcolor="0,0,0.766667"]; o165845184[label="str\n'\\x94'"]; o165845184[fillcolor="0,0,0.766667"]; o165195364[label="int\n148"]; o165195364[fillcolor="0,0,0.766667"]; o165844000[label="str\n'\\x17'"]; o165844000[fillcolor="0,0,0.766667"]; o165194888[label="int\n23"]; o165194888[fillcolor="0,0,0.766667"]; o165845312[label="str\n'\\x98'"]; o165845312[fillcolor="0,0,0.766667"]; o165195316[label="int\n152"]; o165195316[fillcolor="0,0,0.766667"]; o165844128[label="str\n'\\x1b'"]; o165844128[fillcolor="0,0,0.766667"]; o165194840[label="int\n27"]; o165194840[fillcolor="0,0,0.766667"]; o165845440[label="str\n'\\x9c'"]; o165845440[fillcolor="0,0,0.766667"]; o165195268[label="int\n156"]; o165195268[fillcolor="0,0,0.766667"]; o165844256[label="str\n'\\x1f'"]; o165844256[fillcolor="0,0,0.766667"]; o165194792[label="int\n31"]; o165194792[fillcolor="0,0,0.766667"]; o165845568[label="str\n'\\xa0'"]; o165845568[fillcolor="0,0,0.766667"]; o165197196[label="int\n160"]; o165197196[fillcolor="0,0,0.766667"]; o1077687552[label="str\n'#'"]; o1077687552[fillcolor="0,0,0.766667"]; o165194744[label="int\n35"]; o165194744[fillcolor="0,0,0.766667"]; o165845696[label="str\n'\\xa4'"]; o165845696[fillcolor="0,0,0.766667"]; o165197148[label="int\n164"]; o165197148[fillcolor="0,0,0.766667"]; o165844384[label="str\n\"'\""]; o165844384[fillcolor="0,0,0.766667"]; o165194696[label="int\n39"]; o165194696[fillcolor="0,0,0.766667"]; o165845824[label="str\n'\\xa8'"]; o165845824[fillcolor="0,0,0.766667"]; o165197100[label="int\n168"]; o165197100[fillcolor="0,0,0.766667"]; o1077986880[label="str\n'+'"]; o1077986880[fillcolor="0,0,0.766667"]; o165194648[label="int\n43"]; o165194648[fillcolor="0,0,0.766667"]; o165845952[label="str\n'\\xac'"]; o165845952[fillcolor="0,0,0.766667"]; o165197052[label="int\n172"]; o165197052[fillcolor="0,0,0.766667"]; o1077735040[label="str\n'/'"]; o1077735040[fillcolor="0,0,0.766667"]; o165194600[label="int\n47"]; o165194600[fillcolor="0,0,0.766667"]; o165846080[label="str\n'\\xb0'"]; o165846080[fillcolor="0,0,0.766667"]; o165197004[label="int\n176"]; o165197004[fillcolor="0,0,0.766667"]; o1077988000[label="str\n'3'"]; o1077988000[fillcolor="0,0,0.766667"]; o165194552[label="int\n51"]; o165194552[fillcolor="0,0,0.766667"]; o165846208[label="str\n'\\xb4'"]; o165846208[fillcolor="0,0,0.766667"]; o165196956[label="int\n180"]; o165196956[fillcolor="0,0,0.766667"]; o1077988288[label="str\n'7'"]; o1077988288[fillcolor="0,0,0.766667"]; o165194504[label="int\n55"]; o165194504[fillcolor="0,0,0.766667"]; o165846336[label="str\n'\\xb8'"]; o165846336[fillcolor="0,0,0.766667"]; o165196908[label="int\n184"]; o165196908[fillcolor="0,0,0.766667"]; o1077849088[label="str\n';'"]; o1077849088[fillcolor="0,0,0.766667"]; o165194456[label="int\n59"]; o165194456[fillcolor="0,0,0.766667"]; o165846464[label="str\n'\\xbc'"]; o165846464[fillcolor="0,0,0.766667"]; o165196860[label="int\n188"]; o165196860[fillcolor="0,0,0.766667"]; o1077986848[label="str\n'?'"]; o1077986848[fillcolor="0,0,0.766667"]; o165194408[label="int\n63"]; o165194408[fillcolor="0,0,0.766667"]; o165846592[label="str\n'\\xc0'"]; o165846592[fillcolor="0,0,0.766667"]; o165196812[label="int\n192"]; o165196812[fillcolor="0,0,0.766667"]; o1077795456[label="str\n'C'"]; o1077795456[fillcolor="0,0,0.766667"]; o165194360[label="int\n67"]; o165194360[fillcolor="0,0,0.766667"]; o165846720[label="str\n'\\xc4'"]; o165846720[fillcolor="0,0,0.766667"]; o165196764[label="int\n196"]; o165196764[fillcolor="0,0,0.766667"]; o1077986624[label="str\n'G'"]; o1077986624[fillcolor="0,0,0.766667"]; o165194312[label="int\n71"]; o165194312[fillcolor="0,0,0.766667"]; o165846848[label="str\n'\\xc8'"]; o165846848[fillcolor="0,0,0.766667"]; o165196716[label="int\n200"]; o165196716[fillcolor="0,0,0.766667"]; o1077989088[label="str\n'K'"]; o1077989088[fillcolor="0,0,0.766667"]; o165194264[label="int\n75"]; o165194264[fillcolor="0,0,0.766667"]; o165846976[label="str\n'\\xcc'"]; o165846976[fillcolor="0,0,0.766667"]; o165196668[label="int\n204"]; o165196668[fillcolor="0,0,0.766667"]; o1077763168[label="str\n'O'"]; o1077763168[fillcolor="0,0,0.766667"]; o165196192[label="int\n79"]; o165196192[fillcolor="0,0,0.766667"]; o165847136[label="str\n'\\xd0'"]; o165847136[fillcolor="0,0,0.766667"]; o165196620[label="int\n208"]; o165196620[fillcolor="0,0,0.766667"]; o1077763264[label="str\n'S'"]; o1077763264[fillcolor="0,0,0.766667"]; o165196144[label="int\n83"]; o165196144[fillcolor="0,0,0.766667"]; o165847264[label="str\n'\\xd4'"]; o165847264[fillcolor="0,0,0.766667"]; o165196572[label="int\n212"]; o165196572[fillcolor="0,0,0.766667"]; o1077763520[label="str\n'W'"]; o1077763520[fillcolor="0,0,0.766667"]; o165196096[label="int\n87"]; o165196096[fillcolor="0,0,0.766667"]; o165847392[label="str\n'\\xd8'"]; o165847392[fillcolor="0,0,0.766667"]; o165196524[label="int\n216"]; o165196524[fillcolor="0,0,0.766667"]; o1077986720[label="str\n'['"]; o1077986720[fillcolor="0,0,0.766667"]; o165196048[label="int\n91"]; o165196048[fillcolor="0,0,0.766667"]; o165847520[label="str\n'\\xdc'"]; o165847520[fillcolor="0,0,0.766667"]; o165196476[label="int\n220"]; o165196476[fillcolor="0,0,0.766667"]; o1077676384[label="str\n'_'"]; o1077676384[fillcolor="0,0,0.766667"]; o165196000[label="int\n95"]; o165196000[fillcolor="0,0,0.766667"]; o165847648[label="str\n'\\xe0'"]; o165847648[fillcolor="0,0,0.766667"]; o165196428[label="int\n224"]; o165196428[fillcolor="0,0,0.766667"]; o1077761632[label="str\n'c'"]; o1077761632[fillcolor="0,0,0.766667"]; o165195952[label="int\n99"]; o165195952[fillcolor="0,0,0.766667"]; o165847776[label="str\n'\\xe4'"]; o165847776[fillcolor="0,0,0.766667"]; o165196380[label="int\n228"]; o165196380[fillcolor="0,0,0.766667"]; o1077763616[label="str\n'g'"]; o1077763616[fillcolor="0,0,0.766667"]; o165195904[label="int\n103"]; o165195904[fillcolor="0,0,0.766667"]; o165847904[label="str\n'\\xe8'"]; o165847904[fillcolor="0,0,0.766667"]; o165196332[label="int\n232"]; o165196332[fillcolor="0,0,0.766667"]; o1077687776[label="str\n'k'"]; o1077687776[fillcolor="0,0,0.766667"]; o165195856[label="int\n107"]; o165195856[fillcolor="0,0,0.766667"]; o165848032[label="str\n'\\xec'"]; o165848032[fillcolor="0,0,0.766667"]; o165196284[label="int\n236"]; o165196284[fillcolor="0,0,0.766667"]; o1077778720[label="str\n'o'"]; o1077778720[fillcolor="0,0,0.766667"]; o165195808[label="int\n111"]; o165195808[fillcolor="0,0,0.766667"]; o165848160[label="str\n'\\xf0'"]; o165848160[fillcolor="0,0,0.766667"]; o165196236[label="int\n240"]; o165196236[fillcolor="0,0,0.766667"]; o1077735200[label="str\n's'"]; o1077735200[fillcolor="0,0,0.766667"]; o165195760[label="int\n115"]; o165195760[fillcolor="0,0,0.766667"]; o165848288[label="str\n'\\xf4'"]; o165848288[fillcolor="0,0,0.766667"]; o165198164[label="int\n244"]; o165198164[fillcolor="0,0,0.766667"]; o1077601824[label="str\n'w'"]; o1077601824[fillcolor="0,0,0.766667"]; o165195712[label="int\n119"]; o165195712[fillcolor="0,0,0.766667"]; o165848416[label="str\n'\\xf8'"]; o165848416[fillcolor="0,0,0.766667"]; o165198116[label="int\n248"]; o165198116[fillcolor="0,0,0.766667"]; o1077745248[label="str\n'{'"]; o1077745248[fillcolor="0,0,0.766667"]; o165195664[label="int\n123"]; o165195664[fillcolor="0,0,0.766667"]; o165848544[label="str\n'\\xfc'"]; o165848544[fillcolor="0,0,0.766667"]; o165198068[label="int\n252"]; o165198068[fillcolor="0,0,0.766667"]; o165844512[label="str\n'\\x7f'"]; o165844512[fillcolor="0,0,0.766667"]; o165195616[label="int\n127"]; o165195616[fillcolor="0,0,0.766667"]; o165844576[label="str\n'\\x81'"]; o165844576[fillcolor="0,0,0.766667"]; o165195592[label="int\n129"]; o165195592[fillcolor="0,0,0.766667"]; o165843488[label="str\n'\\x02'"]; o165843488[fillcolor="0,0,0.766667"]; o165195140[label="int\n2"]; o165195140[fillcolor="0,0,0.766667"]; o165844704[label="str\n'\\x85'"]; o165844704[fillcolor="0,0,0.766667"]; o165195544[label="int\n133"]; o165195544[fillcolor="0,0,0.766667"]; o165843616[label="str\n'\\x06'"]; o165843616[fillcolor="0,0,0.766667"]; o165195092[label="int\n6"]; o165195092[fillcolor="0,0,0.766667"]; o165844832[label="str\n'\\x89'"]; o165844832[fillcolor="0,0,0.766667"]; o165195496[label="int\n137"]; o165195496[fillcolor="0,0,0.766667"]; o1077988416[label="str\n'\\n'"]; o1077988416[fillcolor="0,0,0.766667"]; o165195044[label="int\n10"]; o165195044[fillcolor="0,0,0.766667"]; o165844960[label="str\n'\\x8d'"]; o165844960[fillcolor="0,0,0.766667"]; o165195448[label="int\n141"]; o165195448[fillcolor="0,0,0.766667"]; o165843712[label="str\n'\\x0e'"]; o165843712[fillcolor="0,0,0.766667"]; o165194996[label="int\n14"]; o165194996[fillcolor="0,0,0.766667"]; o165845088[label="str\n'\\x91'"]; o165845088[fillcolor="0,0,0.766667"]; o165195400[label="int\n145"]; o165195400[fillcolor="0,0,0.766667"]; o165843840[label="str\n'\\x12'"]; o165843840[fillcolor="0,0,0.766667"]; o165194948[label="int\n18"]; o165194948[fillcolor="0,0,0.766667"]; o165845216[label="str\n'\\x95'"]; o165845216[fillcolor="0,0,0.766667"]; o165195352[label="int\n149"]; o165195352[fillcolor="0,0,0.766667"]; o165843968[label="str\n'\\x16'"]; o165843968[fillcolor="0,0,0.766667"]; o165194900[label="int\n22"]; o165194900[fillcolor="0,0,0.766667"]; o165845344[label="str\n'\\x99'"]; o165845344[fillcolor="0,0,0.766667"]; o165195304[label="int\n153"]; o165195304[fillcolor="0,0,0.766667"]; o165844096[label="str\n'\\x1a'"]; o165844096[fillcolor="0,0,0.766667"]; o165194852[label="int\n26"]; o165194852[fillcolor="0,0,0.766667"]; o165845472[label="str\n'\\x9d'"]; o165845472[fillcolor="0,0,0.766667"]; o165195256[label="int\n157"]; o165195256[fillcolor="0,0,0.766667"]; o165844224[label="str\n'\\x1e'"]; o165844224[fillcolor="0,0,0.766667"]; o165194804[label="int\n30"]; o165194804[fillcolor="0,0,0.766667"]; o165845600[label="str\n'\\xa1'"]; o165845600[fillcolor="0,0,0.766667"]; o165197184[label="int\n161"]; o165197184[fillcolor="0,0,0.766667"]; o165844288[label="str\n'\"'"]; o165844288[fillcolor="0,0,0.766667"]; o165194756[label="int\n34"]; o165194756[fillcolor="0,0,0.766667"]; o165845728[label="str\n'\\xa5'"]; o165845728[fillcolor="0,0,0.766667"]; o165197136[label="int\n165"]; o165197136[fillcolor="0,0,0.766667"]; o165844352[label="str\n'&'"]; o165844352[fillcolor="0,0,0.766667"]; o165194708[label="int\n38"]; o165194708[fillcolor="0,0,0.766667"]; o165845856[label="str\n'\\xa9'"]; o165845856[fillcolor="0,0,0.766667"]; o165197088[label="int\n169"]; o165197088[fillcolor="0,0,0.766667"]; o1077674752[label="str\n'*'"]; o1077674752[fillcolor="0,0,0.766667"]; o165194660[label="int\n42"]; o165194660[fillcolor="0,0,0.766667"]; o165845984[label="str\n'\\xad'"]; o165845984[fillcolor="0,0,0.766667"]; o165197040[label="int\n173"]; o165197040[fillcolor="0,0,0.766667"]; o1077734976[label="str\n'.'"]; o1077734976[fillcolor="0,0,0.766667"]; o165194612[label="int\n46"]; o165194612[fillcolor="0,0,0.766667"]; o165846112[label="str\n'\\xb1'"]; o165846112[fillcolor="0,0,0.766667"]; o165196992[label="int\n177"]; o165196992[fillcolor="0,0,0.766667"]; o1077988096[label="str\n'2'"]; o1077988096[fillcolor="0,0,0.766667"]; o165194564[label="int\n50"]; o165194564[fillcolor="0,0,0.766667"]; o165846240[label="str\n'\\xb5'"]; o165846240[fillcolor="0,0,0.766667"]; o165196944[label="int\n181"]; o165196944[fillcolor="0,0,0.766667"]; o1077988192[label="str\n'6'"]; o1077988192[fillcolor="0,0,0.766667"]; o165194516[label="int\n54"]; o165194516[fillcolor="0,0,0.766667"]; o165846368[label="str\n'\\xb9'"]; o165846368[fillcolor="0,0,0.766667"]; o165196896[label="int\n185"]; o165196896[fillcolor="0,0,0.766667"]; o1077735072[label="str\n':'"]; o1077735072[fillcolor="0,0,0.766667"]; o165194468[label="int\n58"]; o165194468[fillcolor="0,0,0.766667"]; o165846496[label="str\n'\\xbd'"]; o165846496[fillcolor="0,0,0.766667"]; o165196848[label="int\n189"]; o165196848[fillcolor="0,0,0.766667"]; o1077987040[label="str\n'>'"]; o1077987040[fillcolor="0,0,0.766667"]; o165194420[label="int\n62"]; o165194420[fillcolor="0,0,0.766667"]; o165846624[label="str\n'\\xc1'"]; o165846624[fillcolor="0,0,0.766667"]; o165196800[label="int\n193"]; o165196800[fillcolor="0,0,0.766667"]; o1077795328[label="str\n'B'"]; o1077795328[fillcolor="0,0,0.766667"]; o165194372[label="int\n66"]; o165194372[fillcolor="0,0,0.766667"]; o165846752[label="str\n'\\xc5'"]; o165846752[fillcolor="0,0,0.766667"]; o165196752[label="int\n197"]; o165196752[fillcolor="0,0,0.766667"]; o1077763104[label="str\n'F'"]; o1077763104[fillcolor="0,0,0.766667"]; o165194324[label="int\n70"]; o165194324[fillcolor="0,0,0.766667"]; o165846880[label="str\n'\\xc9'"]; o165846880[fillcolor="0,0,0.766667"]; o165196704[label="int\n201"]; o165196704[fillcolor="0,0,0.766667"]; o1077986656[label="str\n'J'"]; o1077986656[fillcolor="0,0,0.766667"]; o165194276[label="int\n74"]; o165194276[fillcolor="0,0,0.766667"]; o165847008[label="str\n'\\xcd'"]; o165847008[fillcolor="0,0,0.766667"]; o165196656[label="int\n205"]; o165196656[fillcolor="0,0,0.766667"]; o1077763136[label="str\n'N'"]; o1077763136[fillcolor="0,0,0.766667"]; o165196204[label="int\n78"]; o165196204[fillcolor="0,0,0.766667"]; o165847168[label="str\n'\\xd1'"]; o165847168[fillcolor="0,0,0.766667"]; o165196608[label="int\n209"]; o165196608[fillcolor="0,0,0.766667"]; o1077763232[label="str\n'R'"]; o1077763232[fillcolor="0,0,0.766667"]; o165196156[label="int\n82"]; o165196156[fillcolor="0,0,0.766667"]; o165847296[label="str\n'\\xd5'"]; o165847296[fillcolor="0,0,0.766667"]; o165196560[label="int\n213"]; o165196560[fillcolor="0,0,0.766667"]; o1077989152[label="str\n'V'"]; o1077989152[fillcolor="0,0,0.766667"]; o165196108[label="int\n86"]; o165196108[fillcolor="0,0,0.766667"]; o165847424[label="str\n'\\xd9'"]; o165847424[fillcolor="0,0,0.766667"]; o165196512[label="int\n217"]; o165196512[fillcolor="0,0,0.766667"]; o1077985952[label="str\n'Z'"]; o1077985952[fillcolor="0,0,0.766667"]; o165196060[label="int\n90"]; o165196060[fillcolor="0,0,0.766667"]; o165847552[label="str\n'\\xdd'"]; o165847552[fillcolor="0,0,0.766667"]; o165196464[label="int\n221"]; o165196464[fillcolor="0,0,0.766667"]; o1077986752[label="str\n'^'"]; o1077986752[fillcolor="0,0,0.766667"]; o165196012[label="int\n94"]; o165196012[fillcolor="0,0,0.766667"]; o165847680[label="str\n'\\xe1'"]; o165847680[fillcolor="0,0,0.766667"]; o165196416[label="int\n225"]; o165196416[fillcolor="0,0,0.766667"]; o1077743680[label="str\n'b'"]; o1077743680[fillcolor="0,0,0.766667"]; o165195964[label="int\n98"]; o165195964[fillcolor="0,0,0.766667"]; o165847808[label="str\n'\\xe5'"]; o165847808[fillcolor="0,0,0.766667"]; o165196368[label="int\n229"]; o165196368[fillcolor="0,0,0.766667"]; o1077763584[label="str\n'f'"]; o1077763584[fillcolor="0,0,0.766667"]; o165195916[label="int\n102"]; o165195916[fillcolor="0,0,0.766667"]; o165847936[label="str\n'\\xe9'"]; o165847936[fillcolor="0,0,0.766667"]; o165196320[label="int\n233"]; o165196320[fillcolor="0,0,0.766667"]; o1077745504[label="str\n'j'"]; o1077745504[fillcolor="0,0,0.766667"]; o165195868[label="int\n106"]; o165195868[fillcolor="0,0,0.766667"]; o165848064[label="str\n'\\xed'"]; o165848064[fillcolor="0,0,0.766667"]; o165196272[label="int\n237"]; o165196272[fillcolor="0,0,0.766667"]; o1077676480[label="str\n'n'"]; o1077676480[fillcolor="0,0,0.766667"]; o165195820[label="int\n110"]; o165195820[fillcolor="0,0,0.766667"]; o165848192[label="str\n'\\xf1'"]; o165848192[fillcolor="0,0,0.766667"]; o165198200[label="int\n241"]; o165198200[fillcolor="0,0,0.766667"]; o1077601760[label="str\n'r'"]; o1077601760[fillcolor="0,0,0.766667"]; o165195772[label="int\n114"]; o165195772[fillcolor="0,0,0.766667"]; o165848320[label="str\n'\\xf5'"]; o165848320[fillcolor="0,0,0.766667"]; o165198152[label="int\n245"]; o165198152[fillcolor="0,0,0.766667"]; o1077687808[label="str\n'v'"]; o1077687808[fillcolor="0,0,0.766667"]; o165195724[label="int\n118"]; o165195724[fillcolor="0,0,0.766667"]; o165848448[label="str\n'\\xf9'"]; o165848448[fillcolor="0,0,0.766667"]; o165198104[label="int\n249"]; o165198104[fillcolor="0,0,0.766667"]; o1077985888[label="str\n'z'"]; o1077985888[fillcolor="0,0,0.766667"]; o165195676[label="int\n122"]; o165195676[fillcolor="0,0,0.766667"]; o165848576[label="str\n'\\xfd'"]; o165848576[fillcolor="0,0,0.766667"]; o165198056[label="int\n253"]; o165198056[fillcolor="0,0,0.766667"]; o1077744960[label="str\n'~'"]; o1077744960[fillcolor="0,0,0.766667"]; o165195628[label="int\n126"]; o165195628[fillcolor="0,0,0.766667"]; o165843456[label="str\n'\\x01'"]; o165843456[fillcolor="0,0,0.766667"]; o165195152[label="int\n1"]; o165195152[fillcolor="0,0,0.766667"]; o165844608[label="str\n'\\x82'"]; o165844608[fillcolor="0,0,0.766667"]; o165195580[label="int\n130"]; o165195580[fillcolor="0,0,0.766667"]; o165843584[label="str\n'\\x05'"]; o165843584[fillcolor="0,0,0.766667"]; o165195104[label="int\n5"]; o165195104[fillcolor="0,0,0.766667"]; o165844736[label="str\n'\\x86'"]; o165844736[fillcolor="0,0,0.766667"]; o165195532[label="int\n134"]; o165195532[fillcolor="0,0,0.766667"]; o1077988384[label="str\n'\\t'"]; o1077988384[fillcolor="0,0,0.766667"]; o165195056[label="int\n9"]; o165195056[fillcolor="0,0,0.766667"]; o165844864[label="str\n'\\x8a'"]; o165844864[fillcolor="0,0,0.766667"]; o165195484[label="int\n138"]; o165195484[fillcolor="0,0,0.766667"]; o1077988448[label="str\n'\\r'"]; o1077988448[fillcolor="0,0,0.766667"]; o165195008[label="int\n13"]; o165195008[fillcolor="0,0,0.766667"]; o165844992[label="str\n'\\x8e'"]; o165844992[fillcolor="0,0,0.766667"]; o165195436[label="int\n142"]; o165195436[fillcolor="0,0,0.766667"]; o165843808[label="str\n'\\x11'"]; o165843808[fillcolor="0,0,0.766667"]; o165194960[label="int\n17"]; o165194960[fillcolor="0,0,0.766667"]; o165845120[label="str\n'\\x92'"]; o165845120[fillcolor="0,0,0.766667"]; o165195388[label="int\n146"]; o165195388[fillcolor="0,0,0.766667"]; o165843936[label="str\n'\\x15'"]; o165843936[fillcolor="0,0,0.766667"]; o165194912[label="int\n21"]; o165194912[fillcolor="0,0,0.766667"]; o165845248[label="str\n'\\x96'"]; o165845248[fillcolor="0,0,0.766667"]; o165195340[label="int\n150"]; o165195340[fillcolor="0,0,0.766667"]; o165844064[label="str\n'\\x19'"]; o165844064[fillcolor="0,0,0.766667"]; o165194864[label="int\n25"]; o165194864[fillcolor="0,0,0.766667"]; o165845376[label="str\n'\\x9a'"]; o165845376[fillcolor="0,0,0.766667"]; o165195292[label="int\n154"]; o165195292[fillcolor="0,0,0.766667"]; o165844192[label="str\n'\\x1d'"]; o165844192[fillcolor="0,0,0.766667"]; o165194816[label="int\n29"]; o165194816[fillcolor="0,0,0.766667"]; o165845504[label="str\n'\\x9e'"]; o165845504[fillcolor="0,0,0.766667"]; o165195244[label="int\n158"]; o165195244[fillcolor="0,0,0.766667"]; o1077989056[label="str\n'!'"]; o1077989056[fillcolor="0,0,0.766667"]; o165194768[label="int\n33"]; o165194768[fillcolor="0,0,0.766667"]; o165845632[label="str\n'\\xa2'"]; o165845632[fillcolor="0,0,0.766667"]; o165197172[label="int\n162"]; o165197172[fillcolor="0,0,0.766667"]; o165844320[label="str\n'%'"]; o165844320[fillcolor="0,0,0.766667"]; o165194720[label="int\n37"]; o165194720[fillcolor="0,0,0.766667"]; o165845760[label="str\n'\\xa6'"]; o165845760[fillcolor="0,0,0.766667"]; o165197124[label="int\n166"]; o165197124[fillcolor="0,0,0.766667"]; o1077986432[label="str\n')'"]; o1077986432[fillcolor="0,0,0.766667"]; o165194672[label="int\n41"]; o165194672[fillcolor="0,0,0.766667"]; o165845888[label="str\n'\\xaa'"]; o165845888[fillcolor="0,0,0.766667"]; o165197076[label="int\n170"]; o165197076[fillcolor="0,0,0.766667"]; o1077986816[label="str\n'-'"]; o1077986816[fillcolor="0,0,0.766667"]; o165194624[label="int\n45"]; o165194624[fillcolor="0,0,0.766667"]; o165846016[label="str\n'\\xae'"]; o165846016[fillcolor="0,0,0.766667"]; o165197028[label="int\n174"]; o165197028[fillcolor="0,0,0.766667"]; o1077718720[label="str\n'1'"]; o1077718720[fillcolor="0,0,0.766667"]; o165194576[label="int\n49"]; o165194576[fillcolor="0,0,0.766667"]; o165846144[label="str\n'\\xb2'"]; o165846144[fillcolor="0,0,0.766667"]; o165196980[label="int\n178"]; o165196980[fillcolor="0,0,0.766667"]; o1077988160[label="str\n'5'"]; o1077988160[fillcolor="0,0,0.766667"]; o165194528[label="int\n53"]; o165194528[fillcolor="0,0,0.766667"]; o165846272[label="str\n'\\xb6'"]; o165846272[fillcolor="0,0,0.766667"]; o165196932[label="int\n182"]; o165196932[fillcolor="0,0,0.766667"]; o1077986112[label="str\n'9'"]; o1077986112[fillcolor="0,0,0.766667"]; o165194480[label="int\n57"]; o165194480[fillcolor="0,0,0.766667"]; o165846400[label="str\n'\\xba'"]; o165846400[fillcolor="0,0,0.766667"]; o165196884[label="int\n186"]; o165196884[fillcolor="0,0,0.766667"]; o1077987072[label="str\n'='"]; o1077987072[fillcolor="0,0,0.766667"]; o165194432[label="int\n61"]; o165194432[fillcolor="0,0,0.766667"]; o165846528[label="str\n'\\xbe'"]; o165846528[fillcolor="0,0,0.766667"]; o165196836[label="int\n190"]; o165196836[fillcolor="0,0,0.766667"]; o1077985920[label="str\n'A'"]; o1077985920[fillcolor="0,0,0.766667"]; o165194384[label="int\n65"]; o165194384[fillcolor="0,0,0.766667"]; o165846656[label="str\n'\\xc2'"]; o165846656[fillcolor="0,0,0.766667"]; o165196788[label="int\n194"]; o165196788[fillcolor="0,0,0.766667"]; o1077763296[label="str\n'E'"]; o1077763296[fillcolor="0,0,0.766667"]; o165194336[label="int\n69"]; o165194336[fillcolor="0,0,0.766667"]; o165846784[label="str\n'\\xc6'"]; o165846784[fillcolor="0,0,0.766667"]; o165196740[label="int\n198"]; o165196740[fillcolor="0,0,0.766667"]; o1077762240[label="str\n'I'"]; o1077762240[fillcolor="0,0,0.766667"]; o165194288[label="int\n73"]; o165194288[fillcolor="0,0,0.766667"]; o165846912[label="str\n'\\xca'"]; o165846912[fillcolor="0,0,0.766667"]; o165196692[label="int\n202"]; o165196692[fillcolor="0,0,0.766667"]; o1077886272[label="str\n'M'"]; o1077886272[fillcolor="0,0,0.766667"]; o165196216[label="int\n77"]; o165196216[fillcolor="0,0,0.766667"]; o165847072[label="str\n'\\xce'"]; o165847072[fillcolor="0,0,0.766667"]; o165196644[label="int\n206"]; o165196644[fillcolor="0,0,0.766667"]; o1077989120[label="str\n'Q'"]; o1077989120[fillcolor="0,0,0.766667"]; o165196168[label="int\n81"]; o165196168[fillcolor="0,0,0.766667"]; o165847200[label="str\n'\\xd2'"]; o165847200[fillcolor="0,0,0.766667"]; o165196596[label="int\n210"]; o165196596[fillcolor="0,0,0.766667"]; o1077676768[label="str\n'U'"]; o1077676768[fillcolor="0,0,0.766667"]; o165196120[label="int\n85"]; o165196120[fillcolor="0,0,0.766667"]; o165847328[label="str\n'\\xd6'"]; o165847328[fillcolor="0,0,0.766667"]; o165196548[label="int\n214"]; o165196548[fillcolor="0,0,0.766667"]; o1077989184[label="str\n'Y'"]; o1077989184[fillcolor="0,0,0.766667"]; o165196072[label="int\n89"]; o165196072[fillcolor="0,0,0.766667"]; o165847456[label="str\n'\\xda'"]; o165847456[fillcolor="0,0,0.766667"]; o165196500[label="int\n218"]; o165196500[fillcolor="0,0,0.766667"]; o1077883424[label="str\n']'"]; o1077883424[fillcolor="0,0,0.766667"]; o165196024[label="int\n93"]; o165196024[fillcolor="0,0,0.766667"]; o165847584[label="str\n'\\xde'"]; o165847584[fillcolor="0,0,0.766667"]; o165196452[label="int\n222"]; o165196452[fillcolor="0,0,0.766667"]; o1077743648[label="str\n'a'"]; o1077743648[fillcolor="0,0,0.766667"]; o165195976[label="int\n97"]; o165195976[fillcolor="0,0,0.766667"]; o165847712[label="str\n'\\xe2'"]; o165847712[fillcolor="0,0,0.766667"]; o165196404[label="int\n226"]; o165196404[fillcolor="0,0,0.766667"]; o1077677248[label="str\n'e'"]; o1077677248[fillcolor="0,0,0.766667"]; o165195928[label="int\n101"]; o165195928[fillcolor="0,0,0.766667"]; o165847840[label="str\n'\\xe6'"]; o165847840[fillcolor="0,0,0.766667"]; o165196356[label="int\n230"]; o165196356[fillcolor="0,0,0.766667"]; o1077743712[label="str\n'i'"]; o1077743712[fillcolor="0,0,0.766667"]; o165195880[label="int\n105"]; o165195880[fillcolor="0,0,0.766667"]; o165847968[label="str\n'\\xea'"]; o165847968[fillcolor="0,0,0.766667"]; o165196308[label="int\n234"]; o165196308[fillcolor="0,0,0.766667"]; o1077745472[label="str\n'm'"]; o1077745472[fillcolor="0,0,0.766667"]; o165195832[label="int\n109"]; o165195832[fillcolor="0,0,0.766667"]; o165848096[label="str\n'\\xee'"]; o165848096[fillcolor="0,0,0.766667"]; o165196260[label="int\n238"]; o165196260[fillcolor="0,0,0.766667"]; o1077849696[label="str\n'q'"]; o1077849696[fillcolor="0,0,0.766667"]; o165195784[label="int\n113"]; o165195784[fillcolor="0,0,0.766667"]; o165848224[label="str\n'\\xf2'"]; o165848224[fillcolor="0,0,0.766667"]; o165198188[label="int\n242"]; o165198188[fillcolor="0,0,0.766667"]; o1077778752[label="str\n'u'"]; o1077778752[fillcolor="0,0,0.766667"]; o165195736[label="int\n117"]; o165195736[fillcolor="0,0,0.766667"]; o165848352[label="str\n'\\xf6'"]; o165848352[fillcolor="0,0,0.766667"]; o165198140[label="int\n246"]; o165198140[fillcolor="0,0,0.766667"]; o1077986592[label="str\n'y'"]; o1077986592[fillcolor="0,0,0.766667"]; o165195688[label="int\n121"]; o165195688[fillcolor="0,0,0.766667"]; o165848480[label="str\n'\\xfa'"]; o165848480[fillcolor="0,0,0.766667"]; o165198092[label="int\n250"]; o165198092[fillcolor="0,0,0.766667"]; o1077745280[label="str\n'}'"]; o1077745280[fillcolor="0,0,0.766667"]; o165195640[label="int\n125"]; o165195640[fillcolor="0,0,0.766667"]; o165848608[label="str\n'\\xfe'"]; o165848608[fillcolor="0,0,0.766667"]; o165198044[label="int\n254"]; o165198044[fillcolor="0,0,0.766667"]; } objgraph-1.8.0/Makefile0000644000175000017500000001054112271153747014016 0ustar mgmg00000000000000PYTHON = python FILE_WITH_VERSION = objgraph.py FILE_WITH_CHANGELOG = CHANGES.rst VCS_STATUS = git status --porcelain VCS_EXPORT = git archive --format=tar --prefix=tmp/tree/ HEAD | tar -xf - VCS_DIFF_IMAGES = git diff docs/*.png VCS_TAG = git tag VCS_COMMIT_AND_PUSH = git commit -av -m "Post-release version bump" && git push && git push --tags SUPPORTED_PYTHON_VERSIONS = 2.4 2.5 2.6 2.7 3.1 3.2 3.3 3.4 SPHINXOPTS = SPHINXBUILD = sphinx-build BUILDDIR = docs/_build ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(SPHINXOPTS) docs/ .PHONY: default default: @echo "Nothing to build here" .PHONY: images images: $(PYTHON) setup.py --build-images .PHONY: docs docs: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Now look at $(BUILDDIR)/html/index.html" .PHONY: clean clean: -rm -rf $(BUILDDIR)/* .PHONY: test check test check: $(PYTHON) tests.py .PHONY: test-all-pythons test-all-pythons: set -e; \ for ver in $(SUPPORTED_PYTHON_VERSIONS); do \ if which python$$ver > /dev/null; then \ $(MAKE) test PYTHON=python$$ver; \ else \ echo "=================================="; \ echo "Skipping python$$ver, not available."; \ echo "=================================="; \ fi; \ done .PHONY: preview-pypi-description preview-pypi-description: # pip install restview, if missing restview -e "$(PYTHON) setup.py --long-description" .PHONY: coverage coverage: PYTHONPATH=.:$$PYTHONPATH coverage run tests.py coverage report .PHONY: dist dist: $(PYTHON) setup.py sdist .PHONY: distcheck distcheck: # Bit of a chicken-and-egg here, but if the tree is unclean, make # distcheck will fail. @test -z "`$(VCS_STATUS) 2>&1`" || { echo; echo "Your working tree is not clean" 1>&2; $(VCS_STATUS); exit 1; } make dist pkg_and_version=`$(PYTHON) setup.py --name`-`$(PYTHON) setup.py --version` && \ rm -rf tmp && \ mkdir tmp && \ $(VCS_EXPORT) && \ cd tmp && \ tar xvzf ../dist/$$pkg_and_version.tar.gz && \ diff -ur $$pkg_and_version tree -x PKG-INFO -x setup.cfg -x '*.egg-info' && \ cd $$pkg_and_version && \ make dist check && \ cd .. && \ mkdir one two && \ cd one && \ tar xvzf ../../dist/$$pkg_and_version.tar.gz && \ cd ../two/ && \ tar xvzf ../$$pkg_and_version/dist/$$pkg_and_version.tar.gz && \ cd .. && \ diff -ur one two -x SOURCES.txt && \ cd .. && \ rm -rf tmp && \ echo "sdist seems to be ok" .PHONY: releasechecklist releasechecklist: @$(PYTHON) setup.py --version | grep -qv dev || { \ echo "Please remove the 'dev' suffix from the version number in $(FILE_WITH_VERSION)"; exit 1; } @$(PYTHON) setup.py --long-description | rst2html --exit-status=2 > /dev/null @ver_and_date="`$(PYTHON) setup.py --version` (`date +%Y-%m-%d`)" && \ grep -q "^$$ver_and_date$$" $(FILE_WITH_CHANGELOG) || { \ echo "$(FILE_WITH_CHANGELOG) has no entry for $$ver_and_date"; exit 1; } make distcheck # Make sure $(VCS_DIFF_IMAGES) can work .PHONY: config-imgdiff config-imgdiff: @test -z "`git config diff.imgdiff.command`" && git config diff.imgdiff.command 'f() { imgdiff --eog -H $$1 $$2; }; f' || true .PHONY: imgdiff imgdiff: config-imgdiff $(VCS_DIFF_IMAGES) .PHONY: release release: releasechecklist config-imgdiff # I'm chicken so I won't actually do these things yet @echo "It is a good idea to run" @echo @echo " make test-all-pythons" @echo " make clean images docs" @echo @echo "about now. Then sanity-check the images with" @echo @echo " $(VCS_DIFF_IMAGES)" @echo @echo "then either revert or commit the new images and run" @echo @echo " $(PYTHON) setup.py sdist register upload --unicode-description && $(VCS_TAG) `$(PYTHON) setup.py --version`" @echo " make publish-docs" @echo @echo "Please increment the version number in $(FILE_WITH_VERSION)" @echo "and add a new empty entry at the top of the changelog in $(FILE_WITH_CHANGELOG), then" @echo @echo ' $(VCS_COMMIT_AND_PUSH)' @echo .PHONY: publish-docs publish-docs: test -d ~/www/objgraph || { \ echo "There's no ~/www/objgraph, do you have the website checked out?"; exit 1; } make clean docs cp -r docs/_build/html/* ~/www/objgraph/ svn add ~/www/objgraph/*.html ~/www/objgraph/_images/*.png ~/www/objgraph/_sources/* ~/www/objgraph/_static/* 2>/dev/null svn st ~/www/objgraph/ @echo @echo "If everything looks fine, please run" @echo @echo " svn ci ~/www/objgraph/ -m \"Released objgraph `$(PYTHON) setup.py --version`\"" @echo objgraph-1.8.0/HACKING.rst0000664000175000017500000001274212201136137014146 0ustar mgmg00000000000000.. _hacking: Hacking on objgraph =================== Start by geting the latest source with :: git clone https://github.com/mgedmin/objgraph Run the test suite with :: make test The test suite is mostly smoke tests (i.e. crashes will be noticed, subtly wrong output will be missed). I hope to improve that in the future, but don't hold your breath. Most of the testing is done manually or semi-automatically, e.g. by running ``make images`` and eyeballing the results (`imgdiff `_ is handy there). Sending me patches ------------------ GitHub pull requests are probably the best way to send me patches. Or just email them to . I'd appreciate `issues in GitHub `_ for each proposed change, be it a bug or a feature request. Supported Python versions ------------------------- Python 2.4 through 2.7, as well as 3.x. You can run the test suite for all supported Python versions with :: make test-all-pythons or with `detox `_ (which will be faster, since it runs the tests in parallel). If a test fails, often the easiest way to debug is is to compare the output visually :: make images PYTHON=pythonX.Y git config diff.imgdiff.command 'f() { imgdiff --eog -H $1 $2; }; f' git diff docs/*.png git checkout -- docs/*.png docs/*.dot An easy way to get Pythons 2.4 through 2.7 (and 3.x) on Ubuntu is to use Felix Krull's "`deadsnakes `_" PPA:: sudo add-apt-repository ppa:fkrull/deadsnakes sudo apt-get update sudo apt-get install python2.{4,5,6,7} python3.{1,2,3} Test coverage ------------- As I mentioned, the tests are mostly smoke tests, and even then they're incomplete. Install `coverage `_ to see how incomplete they are with :: make coverage I use a `vim plugin `_ to higlight lines not covered by tests while I edit :: mkdir -p ~/.vim/plugin cd ~/.vim/plugin wget http://mg.pov.lt/vim/plugin/py-coverage-highlight.vim cd ... make coverage vim objgraph.py :HighlightCoverage If you prefer HTML reports, run :: make coverage coverage html and then browse ``htmlcov/index.html``. Documentation ------------- To fully rebuild the documentation, run :: make clean images docs Please ``git checkout --`` the png files that haven't changed significantly. (Many of the images include things like memory addresses which tend to change from run to run.) `imgdiff `_ is useful for comparing the images with their older versions:: git config diff.imgdiff.command 'f() { imgdiff $1 $2; }; f' git diff docs/*.png It has a few options that may make the changes easier to see. I personally like:: git config diff.imgdiff.command 'f() { imgdiff --eog -H $1 $2; }; f' git diff docs/*.png When you add a new doctest file, remember to include it in ``docs/index.txt``. When you add a new function, make sure it has a `PEP-257 `_-compliant docstring and add the appropriate autodoc directive to ``objgraph.txt``. I insist on one departure from PEP-257: the closing ``"""`` should *not* be preceded by a blank line. Example:: def do_something(): """Do something. Return something valuable. """ If Emacs is broken, fix emacs, do not make my docstrings ugly. On the other hand, if the last thing in a docstring is an indented block quote or a doctest section, it should be surrounded by blank lines. Like this:: def do_something(): """Do something. Return something valuable. Example: >>> do_something() 42 """ I find `restview `_ very handy for documentation writing: it lets me see how the text looks by pressing Ctrl-R in a browser window, without having to re-run any documentation building commands. The downside is that ``restview`` doesn't support Sphinx extensions to ReStructuredText, so you end up with error messages all over the place. Then again this is useful for bits that *can't* use Sphinx extensions, like the PyPI long description. To preview the PyPI long description (which is generated by concatenating ``README.rst`` and ``CHANGES.rst``) with ``restview``, use this handy command:: make preview-pypi-description because typing :: restview -e "python setup.py --long-description" is tedious, and bash has tab-completion for makefile rules. Making releases --------------- You need write access to the PyPI package and to the Git branch on GitHub. At the moment of this writing, this means you must be me. Run ``make release`` and follow the instructions. It is safe to run this command at any time: it never commits/pushes/uploads to PyPI, it just tells you what to do. Avoiding incomplete releases ---------------------------- It is important to keep `MANIFEST.in `_ up to date so that source tarballs generated with ``python setup.py sdist`` aren't missing any files, even if you don't have the right setuptools version control plugins installed. You can run :: make distcheck to be sure this is so, but it's not necessary -- ``make release`` will do this every time. (I've later written a standalone tool, `check-manifest `_ that can do this check for every Python package.) objgraph-1.8.0/.gitignore0000664000175000017500000000016312201134143014325 0ustar mgmg00000000000000dist/ objects.dot objgraph.egg-info/ tmp/ .coverage _build/ tags build/ temp/ __pycache__/ .tox/ .toxbox/ *.py[co] objgraph-1.8.0/.gitattributes0000664000175000017500000000002312201127365015233 0ustar mgmg00000000000000*.png diff=imgdiff objgraph-1.8.0/.travis.yml0000644000175000017500000000025412252050414014451 0ustar mgmg00000000000000language: python python: - 2.6 - 2.7 - 3.2 - 3.3 install: - sudo apt-get install graphviz script: - python tests.py notifications: email: false